Browse Source

Merge branch 'main' into gary

gary
IA2301\IA_2301 1 year ago
parent
commit
dff5ada22b
  1. 1
      .gitignore
  2. 13
      wms/T8_Authorization_from_bpm.php
  3. 352
      wms/account-receivable-new-index.php
  4. 384
      wms/account-receivable-renovate-index.php
  5. 70
      wms/account-receivable-repair-index.php
  6. 50320
      wms/account_receivable_sql_file.sql
  7. BIN
      wms/contract/option/facility.xlsx
  8. 4
      wms/crm/crmm01-index.php
  9. 61
      wms/maintainance_contract_payment_status.php
  10. 21
      wms/mkt/api/getDemolishPrice.php
  11. 7
      wms/mkt/api/getElevatorMi.php
  12. 4
      wms/mkt/api/getElevatorPrice.php
  13. 5
      wms/mkt/api/getUsername.php
  14. 58
      wms/mkt/api/postFlow.php
  15. 902
      wms/mkt/api/postNewElevatorPricereview.php
  16. 81
      wms/mkt/api/postPricereviewSign.php
  17. 20
      wms/mkt/api/postSystemNotice.php
  18. BIN
      wms/mkt/api/pricereview-uploads/M24020088報價單.pdf
  19. BIN
      wms/mkt/api/pricereview-uploads/m20240226115529490503載重人乘.xlsx
  20. BIN
      wms/mkt/api/pricereview-uploads/m20240226115529813031M24020088報價單.pdf
  21. BIN
      wms/mkt/api/pricereview-uploads/載重人乘.xlsx
  22. 56
      wms/mkt/api/putNewElevatorPriceview.php
  23. 101
      wms/mkt/api/resaveFlow.php
  24. 51
      wms/mkt/api/updateSign.php
  25. 1115
      wms/mkt/assets/js/pricereviewAlpine.js
  26. 233
      wms/mkt/css/pricereview.css
  27. 11
      wms/mkt/css/pricereview.css.map
  28. 357
      wms/mkt/css/pricereview.scss
  29. 76
      wms/mkt/exportTable.php
  30. 69
      wms/mkt/exportTable2.php
  31. BIN
      wms/mkt/files/MAF200.xlsx
  32. BIN
      wms/mkt/files/MAQ100.xlsx
  33. 280
      wms/mkt/price_normal-index.php
  34. 16
      wms/mkt/pricereview-index.php
  35. 464
      wms/mkt/pricereviewCheck.php
  36. 1128
      wms/mkt/pricereviewCreate.php
  37. 21
      wms/mkt/pricereview_renovate-index.php
  38. 6
      wms/mkt/table2excel/.babelrc
  39. 58
      wms/mkt/table2excel/.gitignore
  40. 192
      wms/mkt/table2excel/README.md
  41. 2
      wms/mkt/table2excel/dist/table2excel.core.js
  42. 18
      wms/mkt/table2excel/dist/table2excel.min.js
  43. 1123
      wms/mkt/table2excel/docs/index.html
  44. 17
      wms/mkt/table2excel/docs/js/exceljs.min.js
  45. 2
      wms/mkt/table2excel/docs/js/table2excel.core.js
  46. 11
      wms/mkt/table2excel/es5/constants.js
  47. 26
      wms/mkt/table2excel/es5/index.js
  48. 62
      wms/mkt/table2excel/es5/plugins/alignment.js
  49. 17
      wms/mkt/table2excel/es5/plugins/autoWidth.js
  50. 32
      wms/mkt/table2excel/es5/plugins/fill.js
  51. 24
      wms/mkt/table2excel/es5/plugins/font.js
  52. 16
      wms/mkt/table2excel/es5/plugins/form.js
  53. 16
      wms/mkt/table2excel/es5/plugins/hyperlink.js
  54. 40
      wms/mkt/table2excel/es5/plugins/index.js
  55. 202
      wms/mkt/table2excel/es5/table2excel.js
  56. 89
      wms/mkt/table2excel/es5/utils.js
  57. 42
      wms/mkt/table2excel/package.json
  58. 6
      wms/mkt/table2excel/src/constants.js
  59. 8
      wms/mkt/table2excel/src/index.js
  60. 49
      wms/mkt/table2excel/src/plugins/alignment.js
  61. 7
      wms/mkt/table2excel/src/plugins/autoWidth.js
  62. 27
      wms/mkt/table2excel/src/plugins/fill.js
  63. 16
      wms/mkt/table2excel/src/plugins/font.js
  64. 8
      wms/mkt/table2excel/src/plugins/form.js
  65. 8
      wms/mkt/table2excel/src/plugins/hyperlink.js
  66. 15
      wms/mkt/table2excel/src/plugins/index.js
  67. 149
      wms/mkt/table2excel/src/table2excel.js
  68. 81
      wms/mkt/table2excel/src/utils.js
  69. 26
      wms/mkt/table2excel/webpack.core.config.js
  70. 23
      wms/mkt/table2excel/webpack.umd.config.js
  71. 47
      wms/mkt/window-modal/demolishOptionModal.php
  72. 36
      wms/mkt/window-modal/demolishToElevatorModal.php
  73. 124
      wms/mkt/window-modal/elevatorModal.php
  74. 62
      wms/mkt/window-modal/historySignModal.php
  75. 31
      wms/mkt/window-modal/maintainOptionModal.php
  76. 36
      wms/mkt/window-modal/maintainToElevatorModal.php
  77. 59
      wms/mkt/window-modal/optionModal.php
  78. 36
      wms/mkt/window-modal/optionToElevatorModal.php
  79. 33
      wms/mkt/window-modal/otherOptionModal.php
  80. 36
      wms/mkt/window-modal/otherToElevatorModal.php
  81. 6
      wms/notice-edit.php
  82. 8
      wms/notice-index.php
  83. 83
      wms/rib01-index.php
  84. 4
      wms/rib02-create.php
  85. 5
      wms/rib02-edit.php
  86. 49
      wms/sign/conn.php
  87. 57
      wms/sign/list.php

1
.gitignore

@ -28,3 +28,4 @@ app/account_log/
wms/gary2.php
wms/chinese.php
phpinfo.php
wms/account_receivable_sql_file.sql

13
wms/T8_Authorization_from_bpm.php

@ -5,7 +5,8 @@
// echo $validation = get_Auth($user_id, $user_password);
function get_Auth($user_id = "M0000", $user_password = "M012290493119")
// function get_Auth($user_id = "M0000", $user_password = "M012290493119")
function get_Auth($user_id = "ADMIN", $user_password = "chi")
{
$currentTime = time();
$twoMinutesLater = $currentTime - (2 * 60);
@ -13,12 +14,14 @@ function get_Auth($user_id = "M0000", $user_password = "M012290493119")
// $now = gmdate("YmdHis");
$now = gmdate("YmdHis", strtotime("-2 minutes"));
$data = "$user_id." . $now;
$sign = hash_hmac('SHA256', $data, 'A21181F1EE4966D3', false);
// $sign = hash_hmac('SHA256', $data, 'A21181F1EE4966D3', false);
$sign = hash_hmac('SHA256', $data, 'A733DAD19527399E', false);
// echo $sign;
// $apiurl = 'https://erp.masada.com.tw:780/twWebAPI/GetAuth';
$apiurl = 'http://60.244.87.101:880//twWebAPI/GetAuth';
// $apiurl = 'http://60.244.87.101:880//twWebAPI/GetAuth'; -----
$apiurl = 'http://101.132.66.206:880/twWebAPI/GetAuth';
// $apiurl = 'http://10.10.145.2:880//twWebAPI/GetAuth';
// $apiurl = 'https://erp.masada.com.tw:780/twWebAPI/GetAuth';
@ -28,7 +31,7 @@ function get_Auth($user_id = "M0000", $user_password = "M012290493119")
"Pwd: $user_password",
"TimestampUTC: $now",
"Sign: $sign",
"GroupId:TEST"
"GroupId:ceshi"
];
$ch = curl_init();
@ -51,4 +54,4 @@ function get_Auth($user_id = "M0000", $user_password = "M012290493119")
curl_close($ch);
}
// $data = [];
// get_Auth();
get_Auth();

352
wms/account-receivable-new-index.php

@ -169,6 +169,14 @@ $query_contract_budget = $conn->query($sql_contract_budget);
foreach ($query_contract_budget as $contract_budget) {
if (isset($arrayData[$contract_budget['BillNo']])) {
$arrayData[$contract_budget['BillNo']][$contract_budget['MaterialId']] += $contract_budget['OAmountWithTax'];
// if($contract_budget['BillNo']=='SO20230801002'){
// echo $contract_budget['OAmountWithTax'];
// echo "<br>";
// echo $contract_budget['MaterialId'];
// echo "<br>";
// echo $contract_budget['CU_MaterialId'];
// echo "<br>";
// }
if (isset($arrayData[$contract_budget['BillNo']]['facility']) && isset($arrayData[$contract_budget['BillNo']]['facility'][$contract_budget['CU_MaterialId']])) {
$arrayData[$contract_budget['BillNo']]['facility'][$contract_budget['CU_MaterialId']]['total_budget'] += $contract_budget['OAmountWithTax'];
if (isset($arrayData[$contract_budget['BillNo']]['facility'][$contract_budget['CU_MaterialId']][$contract_budget['MaterialId']])) {
@ -280,6 +288,15 @@ ON d.department_id = tmp2.department_id ";
$wip_array = array();
$query_wip = mysqli_query($link, $sql_wip);
foreach ($query_wip as $wip) {
$contractno = $wip['contractno'];
switch ($wip['contractno']) {
case 'M231067':
$contractno = 'SO20230801002';
break;
case 'M230947':
$contractno = 'SO20230801001';
break;
}
$wip_array[$wip['facilityno']]['estimated_shipping_date'] = $wip['estimated_shipping_date'];
$wip_array[$wip['facilityno']]['real_contract_arrival_date'] = $wip['real_contract_arrival_date'];
$wip_array[$wip['facilityno']]['real_arrival_date'] = $wip['real_arrival_date'];
@ -287,31 +304,32 @@ foreach ($query_wip as $wip) {
$wip_array[$wip['facilityno']]['tryrun_end_date'] = $wip['tryrun_end_date'];
$wip_array[$wip['facilityno']]['official_check_date'] = $wip['official_check_date'];
$wip_array[$wip['facilityno']]['delivery_date'] = $wip['delivery_date'];
if (isset($arrayData[$wip['contractno']]) && isset($arrayData[$wip['contractno']]['facility'][$wip['facilityno']])) {
if (isset($arrayData[$contractno]) && isset($arrayData[$contractno]['facility'][$wip['facilityno']])) {
if ($wip['delivery_date'] != NULL && $wip['delivery_date'] !== '1970-01-01' && $wip['delivery_date'] !== '1970-01-11' && !empty($wip['delivery_date'])) {
$arrayData[$wip['contractno']]['facility'][$wip['facilityno']]['status'] = $wip['delivery_date'] . "已移交";
$arrayData[$wip['contractno']]['facility_status'] .= $wip['facilityno'] . " (" . $wip['delivery_date'] . "已移交) ; ";
$arrayData[$contractno]['facility'][$wip['facilityno']]['status'] = $wip['delivery_date'] . "已移交";
$arrayData[$contractno]['facility_status'] .= $wip['facilityno'] . " (" . $wip['delivery_date'] . "已移交) ; ";
} elseif ($wip['official_check_date'] != NULL && $wip['official_check_date'] != '1970-01-01' && $wip['delivery_date'] !== '1970-01-11' && !empty($wip['official_check_date'])) {
$arrayData[$wip['contractno']]['facility'][$wip['facilityno']]['status'] = $wip['official_check_date'] . "官檢完畢";
$arrayData[$wip['contractno']]['facility_status'] .= $wip['facilityno'] . " (" . $wip['official_check_date'] . "官檢完畢) ; ";
$arrayData[$contractno]['facility'][$wip['facilityno']]['status'] = $wip['official_check_date'] . "官檢完畢";
$arrayData[$contractno]['facility_status'] .= $wip['facilityno'] . " (" . $wip['official_check_date'] . "官檢完畢) ; ";
} elseif ($wip['tryrun_end_date'] != NULL && $wip['tryrun_end_date'] !== '1970-01-01' && $wip['delivery_date'] !== '1970-01-11' && !empty($wip['tryrun_end_date'])) {
$arrayData[$wip['contractno']]['facility'][$wip['facilityno']]['status'] = $wip['tryrun_end_date'] . "試車完畢";
$arrayData[$wip['contractno']]['facility_status'] .= $wip['facilityno'] . " (" . $wip['tryrun_end_date'] . "試車完畢) ; ";
$arrayData[$contractno]['facility'][$wip['facilityno']]['status'] = $wip['tryrun_end_date'] . "試車完畢";
$arrayData[$contractno]['facility_status'] .= $wip['facilityno'] . " (" . $wip['tryrun_end_date'] . "試車完畢) ; ";
} elseif ($wip['install_end_date'] != NULL && $wip['install_end_date'] !== '1970-01-01' && $wip['delivery_date'] !== '1970-01-11' && !empty($wip['install_end_date'])) {
$arrayData[$wip['contractno']]['facility'][$wip['facilityno']]['status'] = $wip['install_end_date'] . "安裝完畢";
$arrayData[$wip['contractno']]['facility_status'] .= $wip['facilityno'] . " (" . $wip['install_end_date'] . "安裝完畢) ; ";
$arrayData[$contractno]['facility'][$wip['facilityno']]['status'] = $wip['install_end_date'] . "安裝完畢";
$arrayData[$contractno]['facility_status'] .= $wip['facilityno'] . " (" . $wip['install_end_date'] . "安裝完畢) ; ";
} elseif ($wip['real_arrival_date'] != NULL && $wip['real_arrival_date'] !== '1970-01-01' && $wip['delivery_date'] !== '1970-01-11' && !empty($wip['real_arrival_date'])) {
$arrayData[$wip['contractno']]['facility'][$wip['facilityno']]['status'] = $wip['real_arrival_date'] . "貨抵工地";
$arrayData[$wip['contractno']]['facility_status'] .= $wip['facilityno'] . " (" . $wip['real_arrival_date'] . "貨抵工地) ; ";
$arrayData[$contractno]['facility'][$wip['facilityno']]['status'] = $wip['real_arrival_date'] . "貨抵工地";
$arrayData[$contractno]['facility_status'] .= $wip['facilityno'] . " (" . $wip['real_arrival_date'] . "貨抵工地) ; ";
} elseif ($wip['real_contract_arrival_date'] != NULL && $wip['real_contract_arrival_date'] !== '1970-01-01' && $wip['delivery_date'] !== '1970-01-11' && !empty($wip['real_contract_arrival_date'])) {
$arrayData[$wip['contractno']]['facility'][$wip['facilityno']]['status'] = $wip['real_contract_arrival_date'] . "預計出貨";
$arrayData[$wip['contractno']]['facility_status'] .= $wip['facilityno'] . " (" . $wip['real_contract_arrival_date'] . "預計出貨) ; ";
$arrayData[$contractno]['facility'][$wip['facilityno']]['status'] = $wip['real_contract_arrival_date'] . "預計出貨";
$arrayData[$contractno]['facility_status'] .= $wip['facilityno'] . " (" . date('Y-m-d', strtotime($wip['real_contract_arrival_date'])) . "預計出貨) ; ";
} elseif ($wip['estimated_shipping_date'] != NULL && $wip['estimated_shipping_date'] !== '1970-01-01' && $wip['delivery_date'] !== '1970-01-11' && !empty($wip['estimated_shipping_date'])) {
$arrayData[$wip['contractno']]['facility'][$wip['facilityno']]['status'] = $wip['estimated_shipping_date'] . "預計出港";
$arrayData[$wip['contractno']]['facility_status'] .= $wip['facilityno'] . " (" . $wip['estimated_shipping_date'] . "預計出港) ; ";
$arrayData[$contractno]['facility'][$wip['facilityno']]['status'] = $wip['estimated_shipping_date'] . "預計出港";
$arrayData[$contractno]['facility_status'] .= $wip['facilityno'] . " (" . $wip['estimated_shipping_date'] . "預計出港) ; ";
}
}
}
// 合約收款階段內容分類
$sign60 = array('簽訂後60天', '簽約60日', '簽約後60天', '簽訂後60日內', '訂金支付後60天');
$sign90 = array('簽約後90天', '簽約後90日', '簽訂後90天');
@ -761,7 +779,7 @@ $excel_contract_boga_array = array();
$excel_contract_noboga_array = array();
$excel_facility_array = array();
foreach ($arrayData as $key => $value) {
foreach ($arrayData as $key => &$value) {
$excel_contract_array[$key] = array_fill(0, 76, '');
$excel_contract_array[$key][0] = (isset($value['BillNo']) && !is_null($value['BillNo'])) ? $value['BillNo'] : '';
@ -781,22 +799,25 @@ foreach ($arrayData as $key => $value) {
$excel_contract_array[$key][14] = (isset($value['receivable_budget']) && !is_null($value['receivable_budget'])) ? $value['receivable_budget'] : 0;
$excel_contract_array[$key][15] = (isset($value['invoice_budget']) && !is_null($value['invoice_budget'])) ? number_format(round($value['invoice_budget'])) : '0';
$excel_contract_array[$key][16] = (isset($value['received_budget']) && !is_null($value['received_budget'])) ? $value['received_budget'] : 0;
$value['collect_budget'] = ($excel_contract_array[$key][14] - $excel_contract_array[$key][16]) > 0 ? $excel_contract_array[$key][14] - $excel_contract_array[$key][16] : 0;
$excel_contract_array[$key][17] = number_format(round($excel_contract_array[$key][14] - $excel_contract_array[$key][16]));
$excel_contract_array[$key][18] = (isset($value['collect_month']) && !is_null($value['collect_month'])) ? number_format(round($value['collect_month'])) : '0';
$excel_contract_array[$key][19] = (isset($value['facility_num']) && !is_null($value['facility_num'])) ? number_format(round($value['facility_num'])) : '0';
$excel_contract_array[$key][20] = (isset($value['facility_status']) && !is_null($value['facility_status'])) ? $value['facility_status'] : '--';
$excel_contract_array[$key][14] = number_format(round($excel_contract_array[$key][14]));
$excel_contract_array[$key][16] = number_format(round($excel_contract_array[$key][16]));
if ($excel_contract_array[$key][17] > 1 && isset($value['PayStage']) && is_iterable($value['PayStage'])) {
$excel_contract_all_array[$key] = array_fill(0, 24, 0);
$excel_contract_all_array[$key][0] = $excel_contract_array[$key][0];
$excel_contract_all_array[$key][1] = $excel_contract_array[$key][3];
$excel_contract_all_array[$key][2] = $excel_contract_array[$key][8];
$excel_contract_all_array[$key][3] = $excel_contract_array[$key][11];
$excel_contract_all_array[$key][4] = $excel_contract_array[$key][19];
$excel_contract_all_array[$key][5] = $excel_contract_array[$key][20];
$excel_contract_all_array[$key][6] = $excel_contract_array[$key][17];
$excel_contract_all_array[$key][7] = $excel_contract_array[$key][18];
if (isset($value['PayStage']) && is_iterable($value['PayStage'])) {
if ($excel_contract_array[$key][17] > 1) {
$excel_contract_all_array[$key] = array_fill(0, 24, 0);
$excel_contract_all_array[$key][0] = $excel_contract_array[$key][0];
$excel_contract_all_array[$key][1] = $excel_contract_array[$key][3];
$excel_contract_all_array[$key][2] = $excel_contract_array[$key][8];
$excel_contract_all_array[$key][3] = $excel_contract_array[$key][11];
$excel_contract_all_array[$key][4] = $excel_contract_array[$key][19];
$excel_contract_all_array[$key][5] = $excel_contract_array[$key][20];
$excel_contract_all_array[$key][6] = $excel_contract_array[$key][17];
$excel_contract_all_array[$key][7] = $excel_contract_array[$key][18];
}
$isBoga = 0;
if (stristr($value['PayStage'][1]['PayStage'], '寶佳')) {
$isBoga = 1;
@ -1013,10 +1034,99 @@ foreach ($arrayData as $key => $value) {
}
}
}
// print_r($arrayData['M220003']);
// exit();
$total_data = json_encode($excel_contract_all_array);
$boga_data = json_encode($excel_contract_boga_array);
$noboga_data = json_encode($excel_contract_noboga_array);
$table = "";
$testtotal =0;
// foreach ($arrayData as $key => $value) {
// if (isset($value['facility']) && is_iterable($value['facility'])) {
// foreach ($value['facility'] as $fkey => $fvalue) {
// // echo $fkey . "<br>";
// foreach ($fvalue['PayStage'] as $pkey => $pvalue) {
// // echo $pkey . "<br>";
// // print_r($pvalue);
// // echo "<br>";
// $invoice_budget = round($pvalue['invoice_budget']);
// $received_budget = round($pvalue['received_budget']);
// $budget = round($pvalue['PlanPayAmt']);
// $paydate = $pvalue['PlanPayDate'];
// switch ($pvalue['stage']) {
// case '訂金':
// $stageno = 100;
// break;
// case '二次款':
// $stageno = 200;
// break;
// case '貨抵工地款':
// $stageno = 300;
// break;
// case '安裝款':
// $stageno = 400;
// break;
// case '試車款':
// $stageno = 500;
// break;
// case '官檢驗收款':
// $stageno = 600;
// break;
// case '交車款':
// $stageno = 700;
// break;
// case '尾款':
// $stageno = 800;
// break;
// default:
// $stageno = 0;
// break;
// }
// switch ($pvalue['hadtopay']) {
// case "V":
// $hadtopay = 1;
// break;
// default:
// $hadtopay = 0;
// break;
// }
// $invoice = 0;
// if ($pvalue['invoice_budget'] > 1) {
// $invoice = 1;
// $invoice_state = 1;
// }
// $table1 = "INSERT INTO account_receivable(
// `contract_no`,
// `facility_no`,
// `stage`,
// `budget`,
// `receivable`,
// `invoice`,
// `invoice_budget`,
// `received_budget`";
// $table2 = ") VALUES ('$key','$fkey',$stageno,$budget,$hadtopay,$invoice,$invoice_budget,$received_budget";
// if (!is_null($paydate) && !empty($paydate)) {
// $table1 .= ",`receivable_date`";
// $table2 .= ",'$paydate'";
// }
// if (!is_null($invoice_state) && !empty($invoice_state)) {
// $table1 .= ",`invoice_state`";
// $table2 .= ",$invoice_state";
// }
// $table .= $table1 . $table2 . "); \n";
// }
// }
// }
// }
// $file_path = 'account_receivable_sql.sql';
// if (file_put_contents($file_path, $table) !== false) {
// echo "SQL文件已成功生成:{$file_path}";
// } else {
// echo "生成SQL文件时出现错误。";
// }
?>
<style>
table {
@ -1110,6 +1220,7 @@ $noboga_data = json_encode($excel_contract_noboga_array);
</div>
</div>
</form>
<hr>
<form class="form-horizontal" id='myForm' method='post' action='account-receivable-new-index.php?<?= $token_link ?>'>
<table class="table table-striped table-bordered" style='width:98%;text-align:center;margin:0 auto'>
<tbody>
@ -1125,16 +1236,55 @@ $noboga_data = json_encode($excel_contract_noboga_array);
<tr>
<th class="text-center" style="vertical-align: middle;">合約催收次數</th>
<td colspan="2">
<input type="text" class='form-control' id='collect_time_start' name='collect_time_start' style='width:10%;display:inline;' oninput="searchFront('collect_time_start')">
≤ 催收次數 ≤
<input type="text" class='form-control' id='collect_time_end' name='collect_time_end' style='width:10%;display:inline;'>
<input type="text" class='form-control' id='search_collectstart' name='collect_time_start' style='width:10%;display:inline;' oninput="searchFront('collectstart')">
≤ 催收次數 ≤
<input type="text" class='form-control' id='search_collectend' name='collect_time_end' style='width:10%;display:inline;' oninput="searchFront('collectend')">
<!-- <button type="submit" class="btn btn-primary btn-sm">搜尋</button> -->
</td>
</tr>
<tr>
<th class="text-center" style="vertical-align: middle;">合約催收金額</th>
<td colspan="2">
<input type="text" class='form-control' id='search_CBudgetstart' name='collect_budget_start' style='width:40%;display:inline;' onblur="searchFront('CBudgetstart')">
≤ 催收金額 ≤
<input type="text" class='form-control' id='search_CBudgetend' name='collect_budget_end' style='width:40%;display:inline;' onblur="searchFront('CBudgetend')">
<!-- <button type="submit" class="btn btn-primary btn-sm">搜尋</button> -->
</td>
</tr>
</tbody>
</table>
</form>
<hr>
<div class="form-group">
<div class="col-md-4">
<label for="search_contract">查詢合約號</label>
<input type="text" id="search_contract" name="search_contract" class="form-control" placeholder="請輸入合約號" onblur="searchFront('contract')">
</div>
<div class="col-md-4">
<label for="search_dept">查詢部門</label>
<input type="text" id="search_dept" name="search_dept" class="form-control" placeholder="請輸入部門" onblur="searchFront('dept')">
</div>
<div class="col-md-4">
<label for="search_manager">查詢主管</label>
<input type="text" id="search_manager" name="search_manager" class="form-control" placeholder="請輸入主管工號/姓名" onblur="searchFront('manager')">
</div>
</div>
<div class="form-group">
<div class="col-md-4">
<label for="search_personId">查詢營業員</label>
<input type="text" id="search_personId" name="search_personId" class="form-control" placeholder="請輸入契約員工號/姓名" onblur="searchFront('personId')">
</div>
<div class="col-md-4">
<label for="search_customerid">查詢客戶編號</label>
<input type="text" id="search_customerid" name="search_customerid" class="form-control" placeholder="請輸入客戶編號" onblur="searchFront('customerid')">
</div>
<div class="col-md-4">
<label for="search_facility">查詢作番號</label>
<input type="text" id="search_facility" name="search_facility" class="form-control" placeholder="請輸入作番號" onblur="searchFront('facility')">
</div>
</div>
</div>
<?php
@ -1143,25 +1293,25 @@ include "./footer.php";
<div style="width:98%;margin:1% ;overflow-x: auto;">
<table id="table_index" class="table table-striped table-bordered" style="width:100%;">
<table class="table table-striped table-bordered" style="width:100%;">
<thead>
<tr>
<th style="width: 120px;">合約號</th>
<th style="width: 120px;">部門</th>
<th style="width: 120px;">主管</th>
<th style="width: 120px;">營業員</th>
<th style="width: 180px;">客戶</th>
<th style="width: 300px;">作番狀態</th>
<th style="width: 150px;">合約-設備金額</th>
<th style="width: 150px;">合約-安裝金額</th>
<th style="width: 150px;">合約總金額</th>
<th style="width: 150px;">合約目前應收</th>
<th style="width: 150px;">已開票金額</th>
<th style="width: 150px;">已收金額金額</th>
<th style="width: 150px;">催收金額金額</th>
<th style="width: 100px;">催收次數</th>
<th style="width: 100px;">作番數量</th>
<th style="width: 100px;">合約號</th>
<th style="width: 100px;">部門</th>
<th style="width: 100px;">主管</th>
<th style="width: 100px;">營業員</th>
<th style="width: 150px;">客戶</th>
<th style="width: 280px;">作番狀態</th>
<th style="width: 110px;">合約<br>設備金額</th>
<th style="width: 110px;">合約<br>安裝金額</th>
<th style="width: 110px;">合約<br>總金額</th>
<th style="width: 110px;">合約<br>目前應收</th>
<th style="width: 110px;">合約<br>已開票金額</th>
<th style="width: 110px;">合約<br>已收金額</th>
<th style="width: 110px;">合約<br>催收金額</th>
<th style="width: 90px;">合約<br>催收次數</th>
<th style="width: 90px;">作番數量</th>
<th style="width: 120px;">訂金 <br>名稱</th>
<th style="width: 120px;">訂金<br>合約金額</th>
@ -1235,22 +1385,22 @@ include "./footer.php";
<?php
foreach ($arrayData as $key => $value) {
?>
<tr>
<th><?= $key ?></th>
<td style="text-align: center;"><?= $value['DeptId'] . "<br>" . $value['DeptName'] ?></td>
<td style="text-align: center;"><?= $value['ManagerId'] . "<br>" . $value['ManagerName'] ?></td>
<td style="text-align: center;"><?= $value['PersonId'] . "<br>" . $value['PersonName'] ?></td>
<td style="text-align: center;"><?= $value['CustomerId'] . "<br>" . $value['CustomerName'] ?></td>
<td style="text-align: end;"><?= $value['facility_status'] ?></td>
<tr class="data-row" style="display: '';" id="<?= $key ?>">
<th class="contract"><?= $key ?></th>
<td style="text-align: center;" class="dept"><?= $value['DeptId'] . "<br>" . $value['DeptName'] ?></td>
<td style="text-align: center;" class="manager"><?= $value['ManagerId'] . "<br>" . $value['ManagerName'] ?></td>
<td style="text-align: center;" class="personId"><?= $value['PersonId'] . "<br>" . $value['PersonName'] ?></td>
<td style="text-align: center;" class="customerid"><?= $value['CustomerId'] . "<br>" . $value['CustomerName'] ?></td>
<td style="text-align: end;" class="facility"><?= $value['facility_status'] ?></td>
<td style="text-align: end;"><?= number_format(round($value['A40001'])) ?></td>
<td style="text-align: end;"><?= number_format(round($value['A40008'])) ?></td>
<td style="text-align: end;"><?= number_format(round($value['total_budget'])) ?></td>
<td style="text-align: end;"><?= number_format(round($value['receivable_budget'])) ?></td>
<td style="text-align: end;"><?= number_format(round($value['invoice_budget'])) ?></td>
<td style="text-align: end;"><?= number_format(round($value['received_budget'])) ?></td>
<td style="text-align: end;"><?= number_format(round($value['collect_budget'])) ?></td>
<td style="text-align: end;"><?= $value['collect_month'] ?></td>
<td style="text-align: end;" class="CBudget"><?= number_format(round($value['collect_budget'])) ?></td>
<td style="text-align: end;" class="collect"><?= $value['collect_month'] ?></td>
<td style="text-align: end;"><?= $value['facility_num'] ?></td>
<td style="text-align: center;"><?= $excel_contract_array[$key][21] ?></td>
@ -1327,6 +1477,92 @@ include "./footer.php";
<script>
function searchFront(area) {
var term = 'search_' + area;
if (area == 'collectstart') {
var searchTerm = parseInt(document.getElementById(term).value);
var searchArea = document.getElementsByClassName('collect');
var rows = document.getElementsByClassName('data-row');
var criterion = parseInt(document.getElementById('search_collectend').value);
for (var i = 0; i < rows.length; i++) {
var rowText = parseInt(searchArea[i].textContent);
if (rowText >= searchTerm) {
rows[i].style.display = '';
} else {
rows[i].style.display = 'none';
}
if (criterion !== '' && rowText > criterion) {
rows[i].style.display = 'none';
}
}
} else if (area == 'collectend') {
var searchTerm = parseInt(document.getElementById(term).value);
var searchArea = document.getElementsByClassName('collect');
var rows = document.getElementsByClassName('data-row');
var criterion = parseInt(document.getElementById('search_collectstart').value);
for (var i = 0; i < rows.length; i++) {
var rowText = parseInt(searchArea[i].textContent);
if (rowText <= searchTerm) {
rows[i].style.display = '';
} else {
rows[i].style.display = 'none';
}
if (criterion !== '' && rowText < criterion) {
rows[i].style.display = 'none';
}
}
} else if (area == 'CBudgetstart') {
var searchTerm = parseInt(document.getElementById(term).value);
var searchArea = document.getElementsByClassName('CBudget');
var rows = document.getElementsByClassName('data-row');
var criterion = parseInt(document.getElementById('search_CBudgetend').value);
for (var i = 0; i < rows.length; i++) {
var rowText = parseInt(searchArea[i].textContent.replace(/,/g, ''));
if (isNaN(searchTerm) || searchTerm == 0) {
rows[i].style.display = '';
} else if (rowText >= searchTerm) {
rows[i].style.display = '';
} else {
rows[i].style.display = 'none';
}
if (criterion !== '' && rowText > criterion) {
rows[i].style.display = 'none';
}
}
} else if (area == 'CBudgetend') {
var searchTerm = parseInt(document.getElementById(term).value);
var searchArea = document.getElementsByClassName('CBudget');
var rows = document.getElementsByClassName('data-row');
var criterion = parseInt(document.getElementById('search_CBudgetstart').value);
for (var i = 0; i < rows.length; i++) {
var rowText = parseInt(searchArea[i].textContent.replace(/,/g, ''));
if (isNaN(searchTerm) || searchTerm == 0) {
rows[i].style.display = '';
} else if (rowText <= searchTerm) {
rows[i].style.display = '';
} else {
rows[i].style.display = 'none';
}
if (!isNaN(criterion) && rowText < criterion) {
rows[i].style.display = 'none';
}
}
} else {
var searchTerm = document.getElementById(term).value.toLowerCase();
var searchArea = document.getElementsByClassName(area);
var rows = document.getElementsByClassName('data-row');
for (var i = 0; i < rows.length; i++) {
var rowText = searchArea[i].textContent.toLowerCase();
if (rowText.includes(searchTerm)) {
rows[i].style.display = '';
} else {
rows[i].style.display = 'none';
}
}
}
}
function downloadData(content) {
if (content == 'all') {
var BillData = <?= $total_data ?>;

384
wms/account-receivable-renovate-index.php

@ -3,6 +3,10 @@
include "header.php";
$sum_facility = 0;
$sum_facility_A40002 = 0;
$sum_facility_A40009 = 0;
$sum_facility_A40010 = 0;
$sum_facility_A40019 = 0;
// M1
$sum_A40002 = 0;
// 設備
@ -37,6 +41,8 @@ $receivable_array = [];
// T8所有合約號
$sql_contractNumber = "SELECT MainAll.* ,
Person.PersonName,
Dept.LeaderId,
Leader.PersonName AS LeaderName,
Dept.DeptName FROM
(SELECT
Main.BillNo,
@ -55,6 +61,7 @@ Main.CurrentState
LEFT JOIN comBusinessPartner AS Biz ON Biz.BizPartnerId = Main.BizPartnerId) AS MainAll
LEFT JOIN comGroupPerson AS Person ON MainAll.PersonId= Person.PersonId
LEFT JOIN comDepartment AS Dept ON MainAll.DeptId= Dept.DeptId
LEFT JOIN comGroupPerson AS Leader ON Dept.LeaderId = Leader.PersonId
WHERE MainAll.ModeId = 'T' AND (MainAll.CurrentState=2 OR MainAll.CurrentState=4) ";
if (!is_null($start_date)) {
@ -67,7 +74,7 @@ if (!is_null($end_date)) {
}
if ((in_array($user_id, array('M0060', 'M0175'))) || (in_array(accountidToDepartId($user_id), array('220', '210', '321')))) {
} else {
$sql_contractNumber .= " AND (MainAll.PersonId = '$user_id'";
$sql_contractNumber .= " AND (Leader.PersonId = '$user_id' OR MainAll.PersonId = '$user_id'";
if (count($follower) > 0) {
$column_str = "('$user_id'" . ",'";
$column_str .= implode("','", $follower);
@ -199,10 +206,15 @@ FROM department
ON d.department_id = tmp2.department_id";
//T8 銷售訂單 階段收款計畫
$sql_contract = "SELECT a.BillNo,s.BillDate, a.RowNo, a.PayStage, a.PlanPayAmt, a.PlanPayDate,s.BizPartnerId,c.BizPartnerName, s.PersonId, s.DeptId, s.DeptName,
$sql_contract = "SELECT a.BillNo,s.BillDate, a.RowNo, a.PayStage, a.PlanPayAmt, a.PlanPayDate,s.BizPartnerId,c.BizPartnerName, s.PersonId,
Person.PersonName,
s.DeptId, s.DeptName, Leader.PersonId AS ManagerId,
Leader.PersonName AS ManagerName,
c.EnterpriseName, c.TaxNo, c.ContactAddress FROM salOrderStagePay AS a
LEFT JOIN (SELECT O.*, DE.DeptName FROM salSalesOrder AS O LEFT JOIN comDepartment AS DE ON O.DeptId=DE.DeptId) AS s on a.BillNo = s.BillNo
LEFT JOIN comBusinessPartner AS c ON s.BizPartnerId=c.BizPartnerId ";
LEFT JOIN (SELECT O.*, DE.DeptName, DE.LeaderId FROM salSalesOrder AS O LEFT JOIN comDepartment AS DE ON O.DeptId=DE.DeptId) AS s on a.BillNo = s.BillNo
LEFT JOIN comBusinessPartner AS c ON s.BizPartnerId=c.BizPartnerId
LEFT JOIN comGroupPerson AS Person ON s.PersonId = Person.PersonId
LEFT JOIN comGroupPerson AS Leader ON s.LeaderId = Leader.PersonId ";
// if (isset($str_numbers)) {
// $sql_contract .= "WHERE s.BillNo IN $str_numbers ";
// }
@ -231,6 +243,8 @@ foreach ($contract as $cont) {
$ContactAddress = $cont['ContactAddress'];
$RowNo = $cont['RowNo'];
$salesId = $cont['PersonId'];
$managerId = $cont['ManagerId'];
$managerName = $cont['ManagerName'];
if (!in_array($salesId, $manager_list)) {
array_push($manager_list, $salesId);
}
@ -252,6 +266,9 @@ foreach ($contract as $cont) {
$arrayData[$BillNo][8] = $ContactAddress;
$arrayData[$BillNo][9] = $BillDate;
$arrayData[$BillNo][10] = $BillNo;
$arrayData[$BillNo]['salesName'] = $cont['PersonName'];
$arrayData[$BillNo]['ManagerId'] = $managerId;
$arrayData[$BillNo]['ManagerName'] = $managerName;
$arrayData[$BillNo]['total_budget'] = 0;
$arrayData[$BillNo]['invoice'] = array();
$arrayData[$BillNo]['received_budget'] = 0;
@ -295,6 +312,26 @@ $contract_budget = array();
foreach ($contract_budget_data as $cont) {
$BillNo = $cont['BillNo'];
if (isset($arrayData[$BillNo])) {
$sum_total_budget += $cont['OAmountWithTax'];
switch ($cont['MaterialId']) {
case 'A40002':
$sum_A40002 += $cont['OAmountWithTax'];
$sum_facility_A40002 += 1;
break;
case 'A40009':
$sum_A40009 += $cont['OAmountWithTax'];
$sum_facility_A40009 += 1;
break;
case 'A40010':
$sum_A40010 += $cont['OAmountWithTax'];
$sum_facility_A40010 += 1;
break;
case 'A40019':
$sum_A40019 += $cont['OAmountWithTax'];
$sum_facility_A40019 += 1;
break;
}
$salesid = $arrayData[$BillNo][3];
if (isset($find_manager[$salesid])) {
$arrayData[$BillNo][2] = $find_manager[$salesid]['manager_name'];
@ -307,6 +344,7 @@ foreach ($contract_budget_data as $cont) {
$arrayData[$BillNo]['facility'][$cont['CU_MaterialId']]['total_budget'] += $cont['OAmountWithTax'];
$arrayData[$BillNo]['facility'][$cont['CU_MaterialId']][$cont['MaterialId']] += $cont['OAmountWithTax'];
} else {
$sum_facility += 1;
$arrayData[$BillNo]['total_facility_num'] += 1;
$arrayData[$BillNo]['facility'][$cont['CU_MaterialId']]['total_budget'] = $cont['OAmountWithTax'];
$arrayData[$BillNo]['facility'][$cont['CU_MaterialId']]['A40002'] = $arrayData[$BillNo]['facility'][$cont['CU_MaterialId']]['A40009'] = $arrayData[$BillNo]['facility'][$cont['CU_MaterialId']]['A40010'] = $arrayData[$BillNo]['facility'][$cont['CU_MaterialId']]['A40019'] = 0;
@ -432,7 +470,7 @@ foreach ($wipwhole_array as $wip) {
}
// 整理arrayData[合約]['PayStage']進 (新增) arrayData[合約]['facility'][作番號][PayStage]
$sign_array = ['訂金', '簽約', '合約'];
$sign0 = array('簽約', '簽訂', '合約簽訂', '訂金', '訂金款', '訂金');
// 將所有facility的paystage放入一個array以便計算順序
$allPayStages = [];
foreach ($arrayData as &$value) {
@ -452,31 +490,43 @@ foreach ($arrayData as &$value) {
case (stristr($facility['PayStage'][$stage]['name'], '試車')):
if (isset($wipwhole_status[$fakey]['tryrun_end_date']) && $wipwhole_status[$fakey]['tryrun_end_date'] !== NULL && !empty($wipwhole_status[$fakey]['tryrun_end_date'])) {
$facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime($wipwhole_status[$fakey]['tryrun_end_date']));
} else {
$facility['PayStage'][$stage]['PlanPayDate'] = NULL;
}
break;
case (stristr($facility['PayStage'][$stage]['name'], '完工')):
if (isset($wipwhole_status[$fakey]['delivery_date']) && $wipwhole_status[$fakey]['delivery_date'] !== NULL && !empty($wipwhole_status[$fakey]['delivery_date'])) {
$facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime($wipwhole_status[$fakey]['delivery_date']));
} else {
$facility['PayStage'][$stage]['PlanPayDate'] = NULL;
}
break;
case (stristr($facility['PayStage'][$stage]['name'], '尾款')):
if (isset($wipwhole_status[$fakey]['delivery_date']) && $wipwhole_status[$fakey]['delivery_date'] !== NULL && !empty($wipwhole_status[$fakey]['delivery_date'])) {
$facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime($wipwhole_status[$fakey]['delivery_date']));
} else {
$facility['PayStage'][$stage]['PlanPayDate'] = NULL;
}
break;
case (stristr($facility['PayStage'][$stage]['name'], '交車')):
if (isset($wipwhole_status[$fakey]['delivery_date']) && $wipwhole_status[$fakey]['delivery_date'] !== NULL && !empty($wipwhole_status[$fakey]['delivery_date'])) {
$facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime($wipwhole_status[$fakey]['delivery_date']));
} else {
$facility['PayStage'][$stage]['PlanPayDate'] = NULL;
}
break;
case (stristr($facility['PayStage'][$stage]['name'], '驗收')):
if (isset($wipwhole_status[$fakey]['delivery_date']) && $wipwhole_status[$fakey]['delivery_date'] !== NULL && !empty($wipwhole_status[$fakey]['delivery_date'])) {
$facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime($wipwhole_status[$fakey]['delivery_date']));
} else {
$facility['PayStage'][$stage]['PlanPayDate'] = NULL;
}
break;
case (stristr($facility['PayStage'][$stage]['name'], '安裝')):
if (isset($wipwhole_status[$fakey]['install_end_date']) && $wipwhole_status[$fakey]['install_end_date'] !== NULL && !empty($wipwhole_status[$fakey]['install_end_date'])) {
$facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime($wipwhole_status[$fakey]['install_end_date']));
} else {
$facility['PayStage'][$stage]['PlanPayDate'] = NULL;
}
break;
case (stristr($facility['PayStage'][$stage]['name'], '貨抵工地')):
@ -484,9 +534,14 @@ foreach ($arrayData as &$value) {
$facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime($wipwhole_status[$fakey]['real_arrival_date']));
} elseif (isset($wipwhole_status[$fakey]['real_contract_arrival_date']) && $wipwhole_status[$fakey]['real_contract_arrival_date'] !== NULL && !empty($wipwhole_status[$fakey]['real_contract_arrival_date'])) {
$facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime($wipwhole_status[$fakey]['real_contract_arrival_date']));
} else {
$facility['PayStage'][$stage]['PlanPayDate'] = NULL;
}
break;
case (in_array($facility['PayStage'][$stage]['name'], $sign0)):
break;
default:
$facility['PayStage'][$stage]['PlanPayDate'] = NULL;
break;
};
@ -499,36 +554,48 @@ foreach ($arrayData as &$value) {
if (isset($wipwhole_status[$fakey]['tryrun_end_date']) && $wipwhole_status[$fakey]['tryrun_end_date'] !== NULL && !empty($wipwhole_status[$fakey]['tryrun_end_date'])) {
$haveNumber = ((int) filter_var(str_replace('-', '', $facility['PayStage'][$stage]['name']), FILTER_SANITIZE_NUMBER_INT)) - 1;
$facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime("+ $haveNumber months", strtotime($wipwhole_status[$fakey]['tryrun_end_date'])));
} else {
$facility['PayStage'][$stage]['PlanPayDate'] = NULL;
}
break;
case (stristr($facility['PayStage'][$stage]['name'], '完工')):
if (isset($wipwhole_status[$fakey]['delivery_date']) && $wipwhole_status[$fakey]['delivery_date'] !== NULL && !empty($wipwhole_status[$fakey]['delivery_date'])) {
$haveNumber = ((int) filter_var(str_replace('-', '', $facility['PayStage'][$stage]['name']), FILTER_SANITIZE_NUMBER_INT)) - 1;
$facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime("+ $haveNumber months", strtotime($wipwhole_status[$fakey]['delivery_date'])));
} else {
$facility['PayStage'][$stage]['PlanPayDate'] = NULL;
}
break;
case (stristr($facility['PayStage'][$stage]['name'], '尾款')):
if (isset($wipwhole_status[$fakey]['delivery_date']) && $wipwhole_status[$fakey]['delivery_date'] !== NULL && !empty($wipwhole_status[$fakey]['delivery_date'])) {
$haveNumber = ((int) filter_var(str_replace('-', '', $facility['PayStage'][$stage]['name']), FILTER_SANITIZE_NUMBER_INT)) - 1;
$facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime("+ $haveNumber months", strtotime($wipwhole_status[$fakey]['delivery_date'])));
} else {
$facility['PayStage'][$stage]['PlanPayDate'] = NULL;
}
break;
case (stristr($facility['PayStage'][$stage]['name'], '交車')):
if (isset($wipwhole_status[$fakey]['delivery_date']) && $wipwhole_status[$fakey]['delivery_date'] !== NULL && !empty($wipwhole_status[$fakey]['delivery_date'])) {
$haveNumber = ((int) filter_var(str_replace('-', '', $facility['PayStage'][$stage]['name']), FILTER_SANITIZE_NUMBER_INT)) - 1;
$facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime("+ $haveNumber months", strtotime($wipwhole_status[$fakey]['delivery_date'])));
} else {
$facility['PayStage'][$stage]['PlanPayDate'] = NULL;
}
break;
case (stristr($facility['PayStage'][$stage]['name'], '驗收')):
if (isset($wipwhole_status[$fakey]['delivery_date']) && $wipwhole_status[$fakey]['delivery_date'] !== NULL && !empty($wipwhole_status[$fakey]['delivery_date'])) {
$haveNumber = ((int) filter_var(str_replace('-', '', $facility['PayStage'][$stage]['name']), FILTER_SANITIZE_NUMBER_INT)) - 1;
$facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime("+ $haveNumber months", strtotime($wipwhole_status[$fakey]['delivery_date'])));
} else {
$facility['PayStage'][$stage]['PlanPayDate'] = NULL;
}
break;
case (stristr($facility['PayStage'][$stage]['name'], '安裝')):
if (isset($wipwhole_status[$fakey]['install_end_date']) && $wipwhole_status[$fakey]['install_end_date'] !== NULL && !empty($wipwhole_status[$fakey]['install_end_date'])) {
$haveNumber = ((int) filter_var(str_replace('-', '', $facility['PayStage'][$stage]['name']), FILTER_SANITIZE_NUMBER_INT)) - 1;
$facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime("+ $haveNumber months", strtotime($wipwhole_status[$fakey]['install_end_date'])));
} else {
$facility['PayStage'][$stage]['PlanPayDate'] = NULL;
}
break;
case (stristr($facility['PayStage'][$stage]['name'], '貨抵工地')):
@ -538,9 +605,12 @@ foreach ($arrayData as &$value) {
} elseif (isset($wipwhole_status[$fakey]['real_contract_arrival_date']) && $wipwhole_status[$fakey]['real_contract_arrival_date'] !== NULL && !empty($wipwhole_status[$fakey]['real_contract_arrival_date'])) {
$haveNumber = ((int) filter_var(str_replace('-', '', $facility['PayStage'][$stage]['name']), FILTER_SANITIZE_NUMBER_INT)) - 1;
$facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime("+ $haveNumber months", strtotime($wipwhole_status[$fakey]['real_contract_arrival_date'])));
} else {
$facility['PayStage'][$stage]['PlanPayDate'] = NULL;
}
break;
default:
$facility['PayStage'][$stage]['PlanPayDate'] = NULL;
break;
};
default:
@ -593,6 +663,7 @@ foreach ($received_array as $received) {
$arrayData[$BillNo]['received_budget'] += $received['CurrStandOffOAmount'];
// array_push($arrayData[$BillNo]['invoice'][$received['InvoiceNo']], date($received['ReceivedDate']), $received['PayWriteOffOAmount'], $received['Fee'], $received['BillNo']);
// }
}
}
//未在T8的收款資料
@ -645,12 +716,24 @@ foreach ($final_paystage as $key => &$payStage) {
// 0 部門id 1 部門名稱 2 經理名稱 3 營業員id 4 營業員名稱 5 客戶名稱 6 抬頭 7 統編 8 通訊地址 9 T8單據日期 10 合約號
// 0 合約號 1 作番號 2 部門id 3 部門名稱 4 經理名稱 5 營業員id 6 營業員名稱 7 客戶名稱 8 抬頭 9 統編 10 通訊地址
// 11 收款階段名稱 12 應收日期 13 收款金額 14 已開金額 15 已收金額 16 催收次數
$table = "";
$excel_aray = array();
$print_array = array();
$today = strtotime(date('Ymt'));
foreach ($arrayData as $key => $value) {
if (isset($final_paystage[$key])) {
for ($sequence = 1; $sequence <= count($final_paystage[$key]); $sequence++) {
if (!is_null($value['ManagerId']) && $value['ManagerId'] !== '') {
$managerId = $value['ManagerId'];
} else {
$managerId = $value[11];
}
if (!is_null($value['ManagerName']) && $value['ManagerName'] !== '') {
$managerName = $value['ManagerName'];
} else {
$managerName = $value[2];
}
$value[4] = (isset($value[4]) && !empty($value[4])) ? $value[4] : '--';
$value[5] = (isset($value[5]) && !empty($value[5])) ? $value[5] : '--';
$value[6] = (isset($value[6]) && !empty($value[6])) ? $value[6] : '--';
@ -660,9 +743,16 @@ foreach ($arrayData as $key => $value) {
$value[12] = (isset($value[12]) && !empty($value[12])) ? date('Y/m/d', strtotime($value[12])) : '--';
$thisPayStage = $final_paystage[$key][$sequence];
$keyname = $key . "_" . $final_paystage[$key][$sequence]['facilityno'] . "_" . $sequence;
$havetopay = ($today >= strtotime($final_paystage[$key][$sequence]['PlanPayDate'])) ? "V" : "--";
if (isset($final_paystage[$key][$sequence]['PlanPayDate']) && !empty($final_paystage[$key][$sequence]['PlanPayDate']) && $final_paystage[$key][$sequence]['PlanPayDate'] !== NULL) {
$havetopay = ($today >= strtotime($final_paystage[$key][$sequence]['PlanPayDate'])) ? "V" : "--";
} else {
$havetopay = "--";
}
$table_hadtopay = 0;
switch ($havetopay) {
case "V":
$table_hadtopay = 1;
$unInvoiceAmount = $final_paystage[$key][$sequence]['PayAmount'] - $final_paystage[$key][$sequence]['InvoiceAmount'];
$unReceivedAmount = $final_paystage[$key][$sequence]['PayAmount'] - $final_paystage[$key][$sequence]['receivedAmount'];
break;
@ -671,10 +761,15 @@ foreach ($arrayData as $key => $value) {
$unReceivedAmount = 0;
break;
}
if (is_null($thisPayStage['PlanPayDate']) || empty($thisPayStage['PlanPayDate'])) {
$thisplanpaydate = "--";
} else {
$thisplanpaydate = $thisPayStage['PlanPayDate'];
}
if ($havetopay == "V" && $unReceivedAmount > 1) {
$print_array[$keyname] = [
$value[10], $thisPayStage['facilityno'], $value[0], $value[1], $value[11], $value[2], $value[3], $value[4], $value[5], $value[6], $value[7], $value[8],
$thisPayStage['name'], $thisPayStage['PlanPayDate'], $havetopay,
$value[10], $thisPayStage['facilityno'], $value[0], $value[1], $value[11], $value['ManagerName'], $value[3], $value[4], $value[5], $value[6], $value[7], $value[8],
$thisPayStage['name'], $thisplanpaydate, $havetopay,
number_format(round($final_paystage[$key][$sequence]['PayAmount'])),
number_format(round($final_paystage[$key][$sequence]['InvoiceAmount'])), number_format(round($unInvoiceAmount)),
number_format(round($final_paystage[$key][$sequence]['receivedAmount'])), number_format(round($unReceivedAmount)),
@ -682,19 +777,64 @@ foreach ($arrayData as $key => $value) {
];
}
$table_budget = round($final_paystage[$key][$sequence]['PayAmount']);
$table_invoice_budget = round($final_paystage[$key][$sequence]['InvoiceAmount']);
$table_received_budget = round($final_paystage[$key][$sequence]['receivedAmount']);
$excel_aray[$keyname] = [
$value[10], $thisPayStage['facilityno'], $value[0], $value[1], $value[11], $value[2], $value[3], $value[4], $value[5], $value[6], $value[7], $value[8],
$thisPayStage['name'], $thisPayStage['PlanPayDate'], $havetopay,
$value[10], $thisPayStage['facilityno'], $value[0], $value[1], $managerId, $managerName, $value[3], $value[4], $value[5], $value[6], $value[7], $value[8],
$thisPayStage['name'], $thisplanpaydate, $havetopay,
number_format(round($final_paystage[$key][$sequence]['PayAmount'])),
number_format(round($final_paystage[$key][$sequence]['InvoiceAmount'])), number_format(round($unInvoiceAmount)),
number_format(round($final_paystage[$key][$sequence]['receivedAmount'])), number_format(round($unReceivedAmount)),
number_format(round($final_paystage[$key][$sequence]['collect_month']))
];
if ($final_paystage[$key][$sequence]['InvoiceAmount'] > 1) {
$invoice_state = 1;
} else {
$invoice_state = 0;
}
$table1 = "INSERT INTO account_receivable_renovate(
`contract_no`,
`facility_no`,
`stagename`,
`budget`,
`receivable`,
`invoice_state`,
`invoice_budget`,
`received_budget`
";
$table2 = ") VALUES (
'$value[10]',
'$thisPayStage[facilityno]',
'$thisPayStage[name]',
$table_budget,
$table_hadtopay,
$invoice_state,
$table_invoice_budget,
$table_received_budget
";
if (!is_null($final_paystage[$key][$sequence]['PlanPayDate']) && !empty($final_paystage[$key][$sequence]['PlanPayDate'])) {
$table1 .= ",`receivable_date`";
$receivable_date = date('Y-m-d', strtotime($final_paystage[$key][$sequence]['PlanPayDate']));
$table2 .= ",'$receivable_date' \n";
}
$table .= $table1 . $table2 . "); \n";
}
}
}
// $file_path = 'account_receivable_renovate_sql.sql';
// if (file_put_contents($file_path, $table) !== false) {
// // echo "SQL文件已成功生成:{$file_path}";
// } else {
// // echo "生成SQL文件时出现错误。";
// }
$total_data = json_encode($print_array);
$average_budget = $sum_total_budget / $sum_facility;
$average_A40002 = $sum_A40002 / $sum_facility_A40002;
$average_A40009 = $sum_A40009 / $sum_facility_A40009;
$average_A40010 = $sum_A40010 / $sum_facility_A40010;
$average_A40019 = $sum_A40019 / $sum_facility_A40019;
?>
<style>
@ -752,6 +892,126 @@ $total_data = json_encode($print_array);
<div class="text-center" style="margin-bottom: 20px;">
<h3><strong>合約 (汰改)統整資訊</strong></h3>
</div>
<form class="form-horizontal">
<div class="form-group">
<div class="col-md-3">
<label for="sum_total_budget">合約總金額</label>
<input type="text" class="form-control" id="sum_total_budget" name="sum_total_budget" value="<?= number_format($sum_total_budget) ?>" disabled>
</div>
<div class="col-md-3">
<label for="sum_facility">總台數</label>
<input type="text" class="form-control" id="sum_facility" name="sum_facility" value="<?= number_format($sum_facility) ?>" disabled>
</div>
<div class="col-md-3">
<label for="average_budget">作番平均金額 (元/台)</label>
<input type="text" class="form-control" id="average_budget" name="average_budget" value="<?= number_format($average_budget) ?>" disabled>
</div>
</div>
<div class="form-group">
<div class="col-md-3">
<label for="sum_A40002">M1總金額</label>
<input type="text" class="form-control" id="sum_A40002" name="sum_A40002" value="<?= number_format($sum_A40002) ?>" disabled>
</div>
<div class="col-md-3">
<label for="sum_A40009">設備總金額</label>
<input type="text" class="form-control" id="sum_A40009" name="sum_A40009" value="<?= number_format($sum_A40009) ?>" disabled>
</div>
<div class="col-md-3">
<label for="sum_A40010">安裝總金額</label>
<input type="text" class="form-control" id="sum_A40010" name="sum_A40010" value="<?= number_format($sum_A40010) ?>" disabled>
</div>
<div class="col-md-3">
<label for="sum_A40019">M4總金額</label>
<input type="text" class="form-control" id="sum_A40019" name="sum_A40019" value="<?= number_format($sum_A40019) ?>" disabled>
</div>
</div>
<div class="form-group">
<div class="col-md-3">
<label for="average_A40002">M1平均金額 (元/台)</label>
<input type="text" class="form-control" id="average_A40002" name="average_A40002" value="<?= number_format($average_A40002) ?>" disabled>
</div>
<div class="col-md-3">
<label for="average_A40009">設備平均金額 (元/台)</label>
<input type="text" class="form-control" id="average_A40009" name="average_A40009" value="<?= number_format($average_A40009) ?>" disabled>
</div>
<div class="col-md-3">
<label for="average_A40010">安裝平均金額 (元/台)</label>
<input type="text" class="form-control" id="average_A40010" name="average_A40010" value="<?= number_format($average_A40010) ?>" disabled>
</div>
<div class="col-md-3">
<label for="average_A40019">M4平均金額 (元/台)</label>
<input type="text" class="form-control" id="average_A40019" name="average_A40019" value="<?= number_format($average_A40019) ?>" disabled>
</div>
</div>
</form>
<hr>
<form class="form-horizontal" id='myForm' method='post' action='account-receivable-new-index.php?<?= $token_link ?>'>
<table class="table table-striped table-bordered" style='width:98%;text-align:center;margin:0 auto'>
<tbody>
<tr>
<th class="text-center" style="vertical-align: middle;">合約日期</th>
<td colspan="2">
<input type="date" class='form-control' id='date_start' name='date_start' style='width:40%;display:inline;'>
<input type="date" class='form-control' id='date_end' name='date_end' style='width:40%;display:inline;'>
<button type="submit" class="btn btn-primary btn-sm">搜尋</button>
</td>
</tr>
<tr>
<th class="text-center" style="vertical-align: middle;">催收次數</th>
<td colspan="2">
<input type="text" class='form-control' id='search_collectstart' name='collect_time_start' style='width:10%;display:inline;' oninput="searchFront('collectstart')">
≤ 催收次數 ≤
<input type="text" class='form-control' id='search_collectend' name='collect_time_end' style='width:10%;display:inline;' oninput="searchFront('collectend')">
<!-- <button type="submit" class="btn btn-primary btn-sm">搜尋</button> -->
</td>
</tr>
<tr>
<th class="text-center" style="vertical-align: middle;">催收金額</th>
<td colspan="2">
<input type="text" class='form-control' id='search_CBudgetstart' name='collect_budget_start' style='width:40%;display:inline;' onblur="searchFront('CBudgetstart')">
≤ 催收金額 ≤
<input type="text" class='form-control' id='search_CBudgetend' name='collect_budget_end' style='width:40%;display:inline;' onblur="searchFront('CBudgetend')">
<!-- <button type="submit" class="btn btn-primary btn-sm">搜尋</button> -->
</td>
</tr>
</tbody>
</table>
</form>
<hr>
<div class="form-group">
<div class="col-md-4">
<label for="search_contract">查詢合約號</label>
<input type="text" id="search_contract" name="search_contract" class="form-control" placeholder="請輸入合約號" onblur="searchFront('contract')">
</div>
<div class="col-md-4">
<label for="search_dept">查詢部門</label>
<input type="text" id="search_dept" name="search_dept" class="form-control" placeholder="請輸入部門" onblur="searchFront('dept')">
</div>
<div class="col-md-4">
<label for="search_manager">查詢主管</label>
<input type="text" id="search_manager" name="search_manager" class="form-control" placeholder="請輸入主管工號/姓名" onblur="searchFront('manager')">
</div>
</div>
<div class="form-group">
<div class="col-md-4">
<label for="search_personId">查詢契約員</label>
<input type="text" id="search_personId" name="search_personId" class="form-control" placeholder="請輸入契約員工號/姓名" onblur="searchFront('personId')">
</div>
<div class="col-md-4">
<label for="search_customerid">查詢客戶名稱</label>
<input type="text" id="search_customerid" name="search_customerid" class="form-control" placeholder="請輸入客戶名稱" onblur="searchFront('customerid')">
</div>
<div class="col-md-4">
<label for="search_facility">查詢作番號</label>
<input type="text" id="search_facility" name="search_facility" class="form-control" placeholder="請輸入作番號" onblur="searchFront('facility')">
</div>
</div>
</div>
<?php
include "./footer.php";
@ -785,12 +1045,12 @@ include "./footer.php";
<tbody>
<?php foreach ($excel_aray as $key => $row) { ?>
<tr class="data-row" style="display: '';" id="<?= $key; ?>">
<td><?= $row[0]; ?></td>
<td><?= $row[1]; ?></td>
<td><?= $row[2] . "<br>" . $row[3]; ?></td>
<td><?= $row[4] . "<br>" . $row[5]; ?></td>
<td><?= $row[6] . "<br>" . $row[7]; ?></td>
<td><?= $row[8]; ?></td>
<td class="contract"><?= $row[0]; ?></td>
<td class="facility"><?= $row[1]; ?></td>
<td class="dept"><?= $row[2] . "<br>" . $row[3]; ?></td>
<td class="manager"><?= $row[4] . "<br>" . $row[5]; ?></td>
<td class="personId"><?= $row[6] . "<br>" . $row[7]; ?></td>
<td class="customerid"><?= $row[8]; ?></td>
<td><?= $row[12]; ?></td>
<td><?= $row[13]; ?></td>
<td><?= $row[14]; ?></td>
@ -803,8 +1063,8 @@ include "./footer.php";
<td><?= $row[16]; ?></td>
<td><?= $row[17]; ?></td>
<td><?= $row[18]; ?></td>
<td><?= $row[19]; ?></td>
<td><?= $row[20]; ?></td>
<td class="CBudget"><?= $row[19]; ?></td>
<td class="collect"><?= $row[20]; ?></td>
</tr>
<?php } ?>
</tbody>
@ -851,6 +1111,92 @@ include "./footer.php";
}
function searchFront(area) {
var term = 'search_' + area;
if (area == 'collectstart') {
var searchTerm = parseInt(document.getElementById(term).value);
var searchArea = document.getElementsByClassName('collect');
var rows = document.getElementsByClassName('data-row');
var criterion = parseInt(document.getElementById('search_collectend').value);
for (var i = 0; i < rows.length; i++) {
var rowText = parseInt(searchArea[i].textContent);
if (rowText >= searchTerm) {
rows[i].style.display = '';
} else {
rows[i].style.display = 'none';
}
if (criterion !== '' && rowText > criterion) {
rows[i].style.display = 'none';
}
}
} else if (area == 'collectend') {
var searchTerm = parseInt(document.getElementById(term).value);
var searchArea = document.getElementsByClassName('collect');
var rows = document.getElementsByClassName('data-row');
var criterion = parseInt(document.getElementById('search_collectstart').value);
for (var i = 0; i < rows.length; i++) {
var rowText = parseInt(searchArea[i].textContent);
if (rowText <= searchTerm) {
rows[i].style.display = '';
} else {
rows[i].style.display = 'none';
}
if (criterion !== '' && rowText < criterion) {
rows[i].style.display = 'none';
}
}
} else if (area == 'CBudgetstart') {
var searchTerm = parseInt(document.getElementById(term).value);
var searchArea = document.getElementsByClassName('CBudget');
var rows = document.getElementsByClassName('data-row');
var criterion = parseInt(document.getElementById('search_CBudgetend').value);
for (var i = 0; i < rows.length; i++) {
var rowText = parseInt(searchArea[i].textContent.replace(/,/g, ''));
if (isNaN(searchTerm) || searchTerm == 0) {
rows[i].style.display = '';
} else if (rowText >= searchTerm) {
rows[i].style.display = '';
} else {
rows[i].style.display = 'none';
}
if (criterion !== '' && rowText > criterion) {
rows[i].style.display = 'none';
}
}
} else if (area == 'CBudgetend') {
var searchTerm = parseInt(document.getElementById(term).value);
var searchArea = document.getElementsByClassName('CBudget');
var rows = document.getElementsByClassName('data-row');
var criterion = parseInt(document.getElementById('search_CBudgetstart').value);
for (var i = 0; i < rows.length; i++) {
var rowText = parseInt(searchArea[i].textContent.replace(/,/g, ''));
if (isNaN(searchTerm) || searchTerm == 0) {
rows[i].style.display = '';
} else if (rowText <= searchTerm) {
rows[i].style.display = '';
} else {
rows[i].style.display = 'none';
}
if (!isNaN(criterion) && rowText < criterion) {
rows[i].style.display = 'none';
}
}
} else {
var searchTerm = document.getElementById(term).value.toLowerCase();
var searchArea = document.getElementsByClassName(area);
var rows = document.getElementsByClassName('data-row');
for (var i = 0; i < rows.length; i++) {
var rowText = searchArea[i].textContent.toLowerCase();
if (rowText.includes(searchTerm)) {
rows[i].style.display = '';
} else {
rows[i].style.display = 'none';
}
}
}
}
function check(searchname) {
console.log(searchname);

70
wms/account-receivable-repair-index.php

@ -94,6 +94,7 @@ if (is_iterable($query_contract_number)) {
$arrayData[$contract_numbers['BillNo']]['invoice_budget'] = 0;
$arrayData[$contract_numbers['BillNo']]['received_budget'] = 0;
$arrayData[$contract_numbers['BillNo']]['receivable_budget'] = 0;
$arrayData[$contract_numbers['BillNo']]['detail'] = "";
$sum_total_budget += $contract_numbers['OAmountWithTax'];
}
$str_numbers = "('" . implode("','", $contractNumbers) . "')";
@ -142,9 +143,48 @@ if (isset($str_numbers)) {
$sql_invoice .= " AND CheckAll.FromSalSalesOrder IN $str_numbers ";
}
// T8 銷售訂單 表身
$sql_detail ="SELECT
A.BillNo,
A.MaterialId,
salSalesOrder.TypeId,
CASE
WHEN A.ItemType = 0 THEN B.MaterialName
WHEN A.ItemType = 1 THEN C.FeeTypeName
ELSE 'Unknown'
END AS ItemName,
E.ProjectId,
E.ProjectName,
D.MaterialId AS CU_MaterialId,
D.MaterialName AS CU_MaterialName
FROM
salSalesOrderDetail A
LEFT JOIN
comMaterialGroup B ON A.MaterialId = B.MaterialId AND A.ItemType = 0
LEFT JOIN
comFeeType C ON A.MaterialId = C.FeeTypeId AND A.ItemType = 1
LEFT JOIN
comProject E ON A.ProjectId = E.ProjectId
LEFT JOIN
comMaterialGroup D ON A.CU_MaterialId = D.MaterialId
LEFT JOIN
salSalesOrder ON A.BillNo = salSalesOrder.BillNo
WHERE salSalesOrder.TypeId = 'SP'";
$PayStage = $conn->query($sql_paystage);
$received_array = $conn->query($sql_received);
$invoice_data = $conn->query($sql_invoice);
$detail_data = $conn->query($sql_detail);
// 將合約表身明細填入arrayData
foreach ($detail_data as $detail) {
if(isset($arrayData[$detail['BillNo']])) {
$memo = $detail['MaterialId'].' '.$detail['ItemName'].' 【'.$detail['ProjectId'].$detail['ProjectName'].'】'.'['.$detail['CU_MaterialId'].' '.$detail['CU_MaterialName'].'] ; <br>';
$arrayData[$detail['BillNo']]['detail'] .= $memo;
}
}
$allPayStages = array();
foreach ($PayStage as $stage) {
@ -267,7 +307,7 @@ foreach ($arrayData as $key => $value) {
$value['ManagerId'], $value['ManagerName'],
number_format(round($value['OAmountWithTax'])), number_format(round($value['receivable_budget'])),
number_format(round($value['invoice_budget'])), number_format(round($uninvoice_budget)),
number_format(round($value['received_budget'])), $unreceive_budget, $collect_month
number_format(round($value['received_budget'])), $unreceive_budget, $collect_month, $value['detail']
];
if ($excel_aray[$key][14] > 1) {
@ -277,7 +317,7 @@ foreach ($arrayData as $key => $value) {
$value['ManagerId'], $value['ManagerName'],
number_format(round($value['OAmountWithTax'])), number_format(round($value['receivable_budget'])),
number_format(round($value['invoice_budget'])), number_format(round($uninvoice_budget)),
number_format(round($value['received_budget'])), $unreceive_budget, $collect_month
number_format(round($value['received_budget'])), $unreceive_budget, $collect_month, $value['detail']
];
}
}
@ -413,19 +453,20 @@ include "./footer.php";
<tr>
<th style='text-align:center;vertical-align: middle;width:140px'>合約號</th>
<th style='text-align:center;vertical-align: middle;width:100px'>合約日期</th>
<th style='text-align:center;vertical-align: middle;width:110px'>部門</th>
<th style='text-align:center;vertical-align: middle;'>主管</th>
<th style='text-align:center;vertical-align: middle;'>保養員</th>
<th style='text-align:center;vertical-align: middle;'>客戶編號</th>
<th style='text-align:center;vertical-align: middle;width:140px'>客戶名稱</th>
<th style='text-align:center;vertical-align: middle;width:100px'>部門</th>
<th style='text-align:center;vertical-align: middle;width:100px'>主管</th>
<th style='text-align:center;vertical-align: middle;width:100px'>保養員</th>
<th style='text-align:center;vertical-align: middle;width:140px'>客戶</th>
<!-- <th style='text-align:center;vertical-align: middle;width:140px'>客戶名稱</th> -->
<th style='text-align:center;vertical-align: middle;'>合約總金額</th>
<th style='text-align:center;vertical-align: middle;'>總金額</th>
<th style='text-align:center;vertical-align: middle;'>應收金額</th>
<th style='text-align:center;vertical-align: middle;'>已開金額</th>
<th style='text-align:center;vertical-align: middle;'>未開金額</th>
<!-- <th style='text-align:center;vertical-align: middle;'>已開金額</th>
<th style='text-align:center;vertical-align: middle;'>未開金額</th> -->
<th style='text-align:center;vertical-align: middle;'>已收金額</th>
<th style='text-align:center;vertical-align: middle;'>催收金額</th>
<th style='text-align:center;vertical-align: middle;'>催收次數</th>
<th style='text-align:center;vertical-align: middle;width:350px'>內容 <br> 產品 【專案】[作番號]</th>
</tr>
</thead>
<tbody>
@ -437,16 +478,17 @@ include "./footer.php";
<td style='text-align:center;vertical-align: middle;' class="department"><?= $row[4] ?></td>
<td style='text-align:center;vertical-align: middle;' class="manager"><?= $row[7] . "<br>" . $row[8]; ?></td>
<td style='text-align:center;vertical-align: middle;' class="personId"><?= $row[5] . "<br>" . $row[6]; ?></td>
<td style='text-align:center;vertical-align: middle;' class="customerid"><?= $row[2] ?></td>
<td style='text-align:center;vertical-align: middle;' class="customername"><?= $row[3] ?></td>
<td style='text-align:center;vertical-align: middle;' class="customerid"><?= $row[2] . "<br>".$row[3] ?></td>
<!-- <td style='text-align:center;vertical-align: middle;' class="customername"><?= $row[3] ?></td> -->
<td style='text-align:end;vertical-align: middle;' class="total_budget"><?= $row[9]; ?></td>
<td style='text-align:end;vertical-align: middle;' class="receivable_budget"><?= $row[10]; ?></td>
<td style='text-align:end;vertical-align: middle;' class="invoice_budget"><?= $row[11]; ?></td>
<td style='text-align:end;vertical-align: middle;' class="un_invoice_budget"><?= $row[12]; ?></td>
<!-- <td style='text-align:end;vertical-align: middle;' class="invoice_budget"><?= $row[11]; ?></td>
<td style='text-align:end;vertical-align: middle;' class="un_invoice_budget"><?= $row[12]; ?></td> -->
<td style='text-align:end;vertical-align: middle;' class="received_budget"><?= $row[13]; ?></td>
<td style='text-align:end;vertical-align: middle;' class="un_received_budget"><?= $row[14]; ?></td>
<td style='text-align:end;vertical-align: middle;' class="collect_month"><?= $row[15]; ?></td>
<td style='text-align:end;vertical-align: middle;' class="collect_content"><?= $row[16]; ?></td>
</tr>
<?php }
?>

50320
wms/account_receivable_sql_file.sql

File diff suppressed because it is too large

BIN
wms/contract/option/facility.xlsx

Binary file not shown.

4
wms/crm/crmm01-index.php

@ -194,10 +194,10 @@ if ($data) :
mysqli_free_result($res_p);
if (empty($status) || $status == "YN" || $status == "D") {
if ($row['is_renovation'] == '汰改') {
$pricereview_url = "../mkt/pricereview_renovate-create.php";
$pricereview_url = "../mkt/pricereviewCreate.php";
$fname = "pricereview_renovate";
} else {
$pricereview_url = "../mkt/pricereview-create.php";
$pricereview_url = "../mkt/pricereviewCreate.php";
$fname = "pricereview";
}
}

61
wms/maintainance_contract_payment_status.php

@ -238,6 +238,13 @@ function checkArWriteOffBill($conn, $row)
return "<span class='text-primary'>已收款</span>";
}
}
$final_data = array();
// foreach($data as $key=>$value){
// $final_data[$key] = $value;
// echo $key."<br>";
// print_r($value);
// echo "<br>------------<br>";
// }
?>
@ -320,21 +327,24 @@ if ($data) :
<table id="table_index" class="table table-striped table-bordered" style="width:100%">
<thead>
<tr>
<th style='text-align:center;vertical-align: middle;'>營業人員/契約人員</th>
<th style='text-align:center;vertical-align: middle;'>部門</th>
<th style='text-align:center;vertical-align: middle;'>合約號</th>
<th style='text-align:center;vertical-align: middle;width:50px;'>標示號</th>
<th style='text-align:center;vertical-align: middle;'>電梯編號</th>
<th style='text-align:center;vertical-align: middle;'>部門</th>
<th style='text-align:center;vertical-align: middle;'>保養員</th>
<!-- <th style='text-align:center;vertical-align: middle;width:50px;'>標示號</th> -->
<th style='text-align:center;vertical-align: middle;'>客戶名稱</th>
<th style='text-align:center;vertical-align: middle;'>預計請款日</th>
<th style='text-align:center;vertical-align: middle;width:50px;'>催收次數</th>
<th style='text-align:center;vertical-align: middle;'>應收申請單狀態</th>
<!-- <th style='text-align:center;vertical-align: middle;'>應收申請單狀態</th>
<th style='text-align:center;vertical-align: middle;'>請款金額(未轉應收)</th>
<th style='text-align:center;vertical-align: middle;'>請款金額(已轉應收)</th>
<th style='text-align:center;vertical-align: middle;'>應收申請單號</th>
<th style='text-align:center;vertical-align: middle;'>應收申請單號</th> -->
<th style='text-align:center;vertical-align: middle;'>發票狀態</th>
<th style='text-align:center;vertical-align: middle;width:50px;'>發票單標示號</th>
<th style='text-align:center;vertical-align: middle;'>發票單號</th>
<!-- <th style='text-align:center;vertical-align: middle;width:50px;'>發票單標示號</th> -->
<!-- <th style='text-align:center;vertical-align: middle;'>發票單號</th> -->
<th style='text-align:center;vertical-align: middle;'>發票明細</th>
<th style='text-align:center;vertical-align: middle;width:80px;'>發票金額</th>
<th style='text-align:center;vertical-align: middle;width:120px;'>發票號碼</th>
@ -345,24 +355,27 @@ if ($data) :
<?php foreach ($data as $row) { ?>
<tr>
<td>
<?php
echo $row['PersonId'];
echo "<br/>";
echo accountidToName($row['PersonId']);
?>
</td>
<td>
<?php echo $row['DeptName']; ?>
<?php echo $row['BillNo']; ?>
</td>
<td>
<?php echo $row['BillNo']; ?>
<?php echo $row['CU_MaterialId']; ?>
</td>
<td>
<?php echo $row['RowNo']; ?>
<?php echo $row['DeptName']; ?>
</td>
<td>
<?php echo $row['CU_MaterialId']; ?>
<?php
echo $row['PersonId'];
echo "<br/>";
echo accountidToName($row['PersonId']);
?>
</td>
<!-- <td>
<?php echo $row['RowNo']; ?>
</td> -->
<td>
<?php echo $row['BizPartnerName']; ?>
</td>
@ -372,7 +385,7 @@ if ($data) :
<td>
<?php echo checkCollectMonth($row); ?>
</td>
<td>
<!-- <td>
<?php echo checkArCheckBillStatus($row); ?>
</td>
<td>
@ -383,16 +396,16 @@ if ($data) :
</td>
<td>
<?php echo $row['BillNo2']; ?>
</td>
</td> -->
<td>
<?php echo arSellInvoiceMaterial($row); ?>
</td>
<td>
<!-- <td>
<?php echo $row['RowCode2']; ?>
</td>
<td>
</td> -->
<!-- <td>
<?php echo $row['BillNo3']; ?>
</td>
</td> -->
<td>
<?php echo $row['InvoiceName']; ?>
</td>

21
wms/mkt/api/getDemolishPrice.php

@ -0,0 +1,21 @@
<?php
require_once('../conn.php');
$person = $_GET['person'];
$floor = $_GET['floor'];
$sql_str = "SELECT id, price FROM demolition_price WHERE seat = :person AND floor = :floor AND status = 'Y' ORDER BY id DESC LIMIT 1";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':person', $person);
$stmt->bindParam(':floor', $floor);
$stmt->execute();
$demolish = $stmt->fetch(PDO::FETCH_ASSOC);
if($demolish){
echo json_encode(['price'=> $demolish['price'], 'id'=> $demolish['id']]);
}else{
echo false;
}

7
wms/mkt/api/getElevatorMi.php

@ -31,8 +31,10 @@ $unloading_fee = round($mi['unloading']);
$transport_site_fee = round($mi['transport_site']);
$install_fee = round(($mi['install_price'] + ($stop - $mi['base_floor']) * $mi['install_plus']) + $mi['trial_price'] + ($stop - $mi['base_floor']) * $mi['trial_plus']);
$free1y_fee = round($mi['free1y']);
$other_fee = round($mi['crane'] + $mi['wooden_box'] + $mi['consumables']);
$other_fee = round($mi['crane'] + $mi['wooden_box'] + $mi['consume'] + $mi['consumables']);
$add_price = 0;
if($spec == 'MAH100') $add_price = 13500;
$newMI = [
'equipment_fee'=>$equipment_fee,
@ -41,6 +43,7 @@ $newMI = [
'transport_site_fee'=>$transport_site_fee,
'install_fee'=>$install_fee,
'free1y_fee'=>$free1y_fee,
'other_fee'=>$other_fee
'other_fee'=>$other_fee,
'add_price'=>$add_price,
];
echo json_encode($newMI);

4
wms/mkt/api/getElevatorPrice.php

@ -3,10 +3,12 @@
require_once("../conn.php");
$model = $_GET['model'];
$kind = $_GET['kind'];
$sql_str = "SELECT id, model, price FROM facility_price WHERE model = :model ORDER BY id DESC";
$sql_str = "SELECT id, model, price FROM facility_price WHERE model = :model AND kind = :kind ORDER BY id DESC";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':model', $model);
$stmt->bindParam(':kind', $kind);
$stmt->execute();
$el = $stmt->fetch(PDO::FETCH_ASSOC);
if($el){

5
wms/mkt/api/getUsername.php

@ -3,7 +3,10 @@
require_once('../conn.php');
$accountid = $_GET['user_id'];
if($accountid == "---"){
echo "---";
exit;
}
$sql_str = "SELECT name FROM account WHERE accountid = :accountid";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':accountid', $accountid);

58
wms/mkt/api/postFlow.php

@ -0,0 +1,58 @@
<?php
require_once("../conn.php");
function createFlow($mid, $current_assigner, $flow_code, $ekind, $form_key=null){
global $conn;
$form_id = $mid;
$seq = 0;
$system_id = "prm";
if($ekind == "新梯") $flow_id = "prm01";
if($ekind == "汰改") $flow_id = "prm02";
if($ekind == "保養") $flow_id = "prm03";
if($form_key == null){
$sql_str = "SELECT appwms.nextval('form_key') form_key";
$stmt = $conn->prepare($sql_str);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
$form_key = $result['form_key'];
$seq = 0;
$sql_str = "INSERT INTO flow (system_id, flow_id, form_id, form_key, flow_code)
VALUES (:system_id, :flow_id, :form_id, :form_key, :flow_code)";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':system_id', $system_id);
$stmt->bindParam(':flow_id', $flow_id);
$stmt->bindParam(':form_id', $form_id);
$stmt->bindParam(':form_key', $form_key);
$stmt->bindParam(':flow_code', $flow_code);
$stmt->execute();
}else{
$sql_str = "UPDATE flow SET flow_code = :flow_code WHERE form_key = :form_key";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':form_key', $form_key);
$stmt->bindParam(':flow_code', $flow_code);
$stmt->execute();
$sql_str = "SELECT MAX(seq) AS max_seq FROM subflow WHERE form_key = :form_key";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':form_key', $form_key);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
$seq = $result['max_seq'];
$seq ++;
}
$created_at = date("Y-m-d H:i:s");
$sql_str = "INSERT INTO subflow (form_key, seq, current_assigner, update_date,create_date)
VALUES (:form_key, :seq, :current_assigner, :update_date,:create_date)";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':form_key', $form_key);
$stmt->bindParam(':seq', $seq);
$stmt->bindParam(':current_assigner', $current_assigner);
$stmt->bindParam(':update_date', $created_at);
$stmt->bindParam(':create_date', $created_at);
$stmt->execute();
return $form_key;
}

902
wms/mkt/api/postNewElevatorPricereview.php

@ -14,221 +14,765 @@ $price_total = $_POST['price_total'];
$price_rate = $_POST['price_rate'];
$special_fee = $_POST['special_fee'];
$predeal_date = $_POST['predeal_date'];
$facilitok_date = $_POST['facilitok_date'];
$penalty = $_POST['penalty'];
$deposit_rate = $_POST['deposit_rate'];
$warranty_rate = $_POST['warranty_rate'];
$keep_rate = $_POST['keep_rate'];
$memo = $_POST['memo'];
$status = $_POST['status'];
$attatch1 = $_POST['attatch1'] =='' ? NULL : $_POST['attatch1'];
$attatch2 = $_POST['attatch2'] =='' ? NULL : $_POST['attatch2'];
$creater = "M0174";
$attatch1 = !empty($_FILES['attatch1']) ? $_FILES['attatch1'] : null;
$attatch2 = !empty($_FILES['attatch2']) ? $_FILES['attatch2'] : null;
$creater = $_POST['user_id'];
$create_at = date("Y-m-d H:i:s");
$attatch1_src = null;
$attatch2_src = null;
$token = $_POST['token'];
$form_key = $_POST['form_key'];
$elevators = $_POST['elevators'];
$options = $_POST['options'];
$otherOptions = $_POST['otherOptions'];
$elevators = json_decode($_POST['elevators'], true);
$options = json_decode($_POST['options'], true);
$otherOptions = json_decode($_POST['otherOptions'], true);
$demolishOptions = json_decode($_POST['demolishOptions'], true);
$maintainOptions = $_POST['maintainOptions'];
$paymentRatio = $_POST['paymentRatio'];
$paymentRatio = json_decode($_POST['paymentRatio'], true);
$conn->beginTransaction();
$sql_str = "SELECT id, attatch1, attatch2 FROM pricereview_main WHERE contractno = :contractno ORDER BY id DESC LIMIT 1";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':contractno', $contractno);
$stmt->execute();
$main = $stmt->fetch(PDO::FETCH_ASSOC);
try{
// -----處理檔案上傳 START-----
if(!empty($attatch1)){
$file = $attatch1;
$file_name = $file['name'];
$file_type = $file['type'];
$tmp_name = $file['tmp_name'];
$file_size = $file['size'];
$error = $file['error'];
$rand = strval(rand(1000,1000000));
$now = (string)date('YmdHis');
$imgsrc = 'm'.$now.$rand.$file_name;
$allow_ext = array('jpeg', 'jpg', 'png', 'gif','JPG','JPEG','PNG','pdf','PDF','docx', 'doc', 'DOCX', 'DOC', 'xlsx', 'xls', 'XLSX', 'XLS');
//設定上傳位置
$path = './pricereview-uploads/';
$attatch1_src = $path.$imgsrc;
if (!file_exists($path)) { mkdir($path); }
if ($error == 0) {
$ext = pathinfo($file_name, PATHINFO_EXTENSION);
if (!in_array($ext, $allow_ext)) {
echo "<script>alert('檔案類型不符合,請選擇 jpg、png、excel、word 、pdf檔案');window.history.go(-1);</script>";
exit('檔案類型不符合,請選擇 jpg、png、excel、word 、pdf檔案');
}
$result = move_uploaded_file($tmp_name, '.'.$attatch1_src);
} else {
//這裡表示上傳有錯誤, 匹配錯誤編號顯示對應的訊息
switch ($error) {
case 1: echo '上傳檔案超過 upload_max_filesize 容量最大值'; break;
case 2: echo '上傳檔案超過 post_max_size 總容量最大值'; break;
case 3: echo '檔案只有部份被上傳'; break;
case 4: echo '沒有檔案被上傳'; break;
case 6: echo '找不到主機端暫存檔案的目錄位置'; break;
case 7: echo '檔案寫入失敗'; break;
case 8: echo '上傳檔案被PHP程式中斷,表示主機端系統錯誤'; break;
}
}
$sql_str = "INSERT INTO pricereview_main (contractno, ekind, person, company, case_name, address, compete, price_lowest, price_total, price_rate, special_fee, predeal_date, facilitok_date, penalty, deposit_rate, keep_rate, warranty_rate, memo, status, attatch1, attatch2, creater, create_at)
VALUES (:contractno, :ekind, :person, :company, :case_name, :address, :compete, :price_lowest, :price_total, :price_rate, :special_fee, :predeal_date, :facilitok_date, :penalty, :deposit_rate, :keep_rate, :warranty_rate, :memo, :status, :attatch1, :attatch2, :creater, :create_at)";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':contractno', $contractno);
$stmt->bindParam(':ekind', $ekind);
$stmt->bindParam(':person', $person);
$stmt->bindParam(':company', $company);
$stmt->bindParam(':case_name', $case_name);
$stmt->bindParam(':address', $address);
$stmt->bindParam(':compete', $compete);
$stmt->bindParam(':price_lowest', $price_lowest);
$stmt->bindParam(':price_total', $price_total);
$stmt->bindParam(':price_rate', $price_rate);
$stmt->bindParam(':special_fee', $special_fee);
$stmt->bindParam(':predeal_date', $predeal_date);
$stmt->bindParam(':facilitok_date', $facilitok_date);
$stmt->bindParam(':penalty', $penalty);
$stmt->bindParam(':deposit_rate', $deposit_rate);
$stmt->bindParam(':keep_rate', $keep_rate);
$stmt->bindParam(':warranty_rate', $warranty_rate);
$stmt->bindParam(':memo', $memo);
$stmt->bindParam(':status', $status);
$stmt->bindParam(':attatch1', $attatch1);
$stmt->bindParam(':attatch2', $attatch2);
$stmt->bindParam(':creater', $creater);
$stmt->bindParam(':create_at', $create_at);
$stmt->execute();
$mid = $conn->lastInsertId();
//insert 整機單價
$sql_str = "INSERT INTO pricereview_item (mid, price_id, item_no, item_group, item_spec, item_weight, item_op, item_unit_price, item_qty, item_price_bp, item_price_ct, note)
VALUES (:mid, :price_id, :item_no, :item_group, :item_spec, :item_weight, :item_op, :item_unit_price, :item_qty, :item_price_bp, :item_price_ct, :note)";
foreach(json_decode($elevators, true) as $elevator){
$price_id = $elevator['facility_id'];
$item_no = $elevator['id'];
$item_group = "A";
$item_spec = $elevator['specifications'] . "-" . $elevator['person'] . "*" . $elevator['stop'] . "-" . $elevator['open_converted'] . $elevator['speed'];
$item_weight = "";
$item_op = $elevator['open_converted'];
$item_unit_price = $elevator['price'];
$item_qty = (int)$elevator['spec_num'];
$item_price_bp = (int)$elevator['price'] * (int)$elevator['spec_num'];
$item_price_ct = $elevator['spec_price'];
$note = $elevator['specifications'] . ',' . $elevator['person'] . ',' . $elevator['stop'] . ',' . $elevator['speed'];
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':price_id', $price_id);
$stmt->bindParam(':item_no', $item_no);
$stmt->bindParam(':item_group', $item_group);
$stmt->bindParam(':item_spec', $item_spec);
$stmt->bindParam(':item_weight', $item_weight);
$stmt->bindParam(':item_op', $item_op);
$stmt->bindParam(':item_unit_price', $item_unit_price);
$stmt->bindParam(':item_qty', $item_qty);
$stmt->bindParam(':item_price_bp', $item_price_bp);
$stmt->bindParam(':item_price_ct', $item_price_ct);
$stmt->bindParam(':note', $note);
$stmt->execute();
}else{
if($main){
$attatch1_src = $main['attatch1'];
}
}
if(!empty($attatch2)){
$file = $attatch2;
$file_name = $file['name'];
$file_type = $file['type'];
$tmp_name = $file['tmp_name'];
$file_size = $file['size'];
$error = $file['error'];
$rand = strval(rand(1000,1000000));
$now = (string)date('YmdHis');
$imgsrc = 'm'.$now.$rand.$file_name;
$allow_ext = array('jpeg', 'jpg', 'png', 'gif','JPG','JPEG','PNG','pdf','PDF','docx', 'doc', 'DOCX', 'DOC', 'xlsx', 'xls', 'XLSX', 'XLS');
//設定上傳位置
$path = './pricereview-uploads/';
$attatch2_src = $path.$imgsrc;
if (!file_exists($path)) { mkdir($path); }
//insert options 加價
$sql_str = "INSERT INTO pricereview_item (mid, price_id, item_no, item_group, item_spec, option_relate_spec, item_unit_price, item_qty, item_price_bp)
VALUES (:mid, :price_id, :item_no, :item_group, :item_spec, :option_relate_spec, :item_unit_price, :item_qty, :item_price_bp)";
if ($error == 0) {
$ext = pathinfo($file_name, PATHINFO_EXTENSION);
if (!in_array($ext, $allow_ext)) {
echo "<script>alert('檔案類型不符合,請選擇 jpg、png、excel、word 、pdf檔案');window.history.go(-1);</script>";
exit('檔案類型不符合,請選擇 jpg、png、excel、word 、pdf檔案');
}
$result = move_uploaded_file($tmp_name, '.'.$attatch2_src);
} else {
//這裡表示上傳有錯誤, 匹配錯誤編號顯示對應的訊息
switch ($error) {
case 1: echo '上傳檔案超過 upload_max_filesize 容量最大值'; break;
case 2: echo '上傳檔案超過 post_max_size 總容量最大值'; break;
case 3: echo '檔案只有部份被上傳'; break;
case 4: echo '沒有檔案被上傳'; break;
case 6: echo '找不到主機端暫存檔案的目錄位置'; break;
case 7: echo '檔案寫入失敗'; break;
case 8: echo '上傳檔案被PHP程式中斷,表示主機端系統錯誤'; break;
}
}
}else{
if($main){
$attatch2_src = $main['attatch2'];
}
}
// -----處理檔案上傳 END-----
foreach(json_decode($options, true) as $option){
$price_id = $option['id'];
$item_no = $option['key'] + 1;
$item_group = "B";
$item_spec = $option['name'] . $option['memo'];
$option_relate_spec = $option['toElevator'][0]['id'];
$item_unit_price = $option['price'];
$item_qty = $option['qty'];
$item_price_bp = $option['price'] * $option['qty'];
try{
$conn->beginTransaction();
if($main){
$mid = $main["id"];
$sql_str = "UPDATE pricereview_main SET price_lowest=:price_lowest, price_total=:price_total, price_rate=:price_rate, special_fee=:special_fee, predeal_date=:predeal_date, facilitok_date=:facilitok_date, penalty=:penalty, deposit_rate=:deposit_rate, keep_rate=:keep_rate, warranty_rate=:warranty_rate, memo=:memo,status=:status, attatch1=:attatch1, attatch2=:attatch2 WHERE id = :id ";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':id', $mid);
$stmt->bindParam(':price_lowest', $price_lowest);
$stmt->bindParam(':price_total', $price_total);
$stmt->bindParam(':price_rate', $price_rate);
$stmt->bindParam(':special_fee', $special_fee);
$stmt->bindParam(':predeal_date', $predeal_date);
$stmt->bindParam(':facilitok_date', $facilitok_date);
$stmt->bindParam(':penalty', $penalty);
$stmt->bindParam(':deposit_rate', $deposit_rate);
$stmt->bindParam(':keep_rate', $keep_rate);
$stmt->bindParam(':warranty_rate', $warranty_rate);
$stmt->bindParam(':memo', $memo);
$stmt->bindParam(':status', $status);
$stmt->bindParam(':attatch1', $attatch1_src);
$stmt->bindParam(':attatch2', $attatch2_src);
$stmt->execute();
//整機單價
$sql_str = "SELECT * FROM pricereview_item WHERE mid = :mid AND item_group = 'A'";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':price_id', $price_id);
$stmt->bindParam(':item_no', $item_no);
$stmt->bindParam(':item_group', $item_group);
$stmt->bindParam(':item_spec', $item_spec);
$stmt->bindParam(':option_relate_spec', $option_relate_spec);
$stmt->bindParam(':item_unit_price', $item_unit_price);
$stmt->bindParam(':item_qty', $item_qty);
$stmt->bindParam(':item_price_bp', $item_price_bp);
$stmt->execute();
}
//insert 除外項目
$sql_str = "INSERT INTO pricereview_item (mid, item_no, item_group, item_spec, option_relate_spec, item_unit_price, item_qty, item_price_bp)
VALUES (:mid, :item_no, :item_group, :item_spec, :option_relate_spec, :item_unit_price, :item_qty, :item_price_bp)";
foreach(json_decode($otherOptions, true) as $option){
$item_no = $option['id'] + 1;
$item_group = "E";
$item_spec = $option['name'];
$option_relate_spec = $option['toElevator'][0]['id'];
$item_unit_price = $option['price'];
$item_qty = $option['num'];
$item_price_bp = $option['price'] * $option['num'];
$items = $stmt->fetchAll(PDO::FETCH_ASSOC);
$oldElevators = array_filter($items, fn($el)=> $el['item_group'] == "A");
$oldItemsNo = (array)array_column($oldElevators, 'item_no');
$newItemsNo = (array)array_column($elevators, 'id');
$onlyInOldIds = array_values(array_diff($oldItemsNo, $newItemsNo)); // 只有舊的有,新傳入的沒有,所以刪除(delete)
$onlyInNewIds = array_values(array_diff($newItemsNo, $oldItemsNo)); //只有新傳入的有,舊的沒有,所以新增(insert)
$inBothIds = array_values(array_intersect($oldItemsNo, $newItemsNo)); //舊的跟新的都有,所以要更新(update)
foreach($onlyInOldIds as $oldidx){
$sql_str = "DELETE FROM pricereview_item WHERE mid = :mid AND item_no = :item_no AND item_group='A'";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':item_no', $oldidx);
$stmt->execute();
}
foreach($onlyInNewIds as $newidx){
$sql_str = "INSERT INTO pricereview_item (mid, price_id, item_no, item_group, item_spec, item_weight, item_op, item_unit_price, item_qty, item_price_bp, item_price_ct, note)
VALUES (:mid, :price_id, :item_no, :item_group, :item_spec, :item_weight, :item_op, :item_unit_price, :item_qty, :item_price_bp, :item_price_ct, :note)";
$elevator = array_values(array_filter($elevators, fn($el)=> $el['id'] == $newidx))[0];
$price_id = $elevator['facility_id'];
$item_no = $elevator['id'];
$item_group = "A";
// $item_spec = $elevator['specifications'] . "-" . $elevator['person'] . "*" . $elevator['stop'] . "-" . $elevator['open_converted'] . $elevator['speed'];
$item_spec = getSpec($elevator['specifications'], $elevator['person'], $elevator['stop'], $elevator['open_converted'], $elevator['speed']);
$item_weight = $elevator['weight'];
$item_op = $elevator['open_converted'];
$item_unit_price = $elevator['price'];
$item_qty = (int)$elevator['spec_num'];
$item_price_bp = (int)$elevator['price'] * (int)$elevator['spec_num'];
$item_price_ct = $elevator['spec_price'];
$note = $elevator['specifications'] . ',' . $elevator['person'] . ',' . $elevator['stop'] . ',' . $elevator['speed'];
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':price_id', $price_id);
$stmt->bindParam(':item_no', $item_no);
$stmt->bindParam(':item_group', $item_group);
$stmt->bindParam(':item_spec', $item_spec);
$stmt->bindParam(':item_weight', $item_weight);
$stmt->bindParam(':item_op', $item_op);
$stmt->bindParam(':item_unit_price', $item_unit_price);
$stmt->bindParam(':item_qty', $item_qty);
$stmt->bindParam(':item_price_bp', $item_price_bp);
$stmt->bindParam(':item_price_ct', $item_price_ct);
$stmt->bindParam(':note', $note);
$stmt->execute();
}
foreach($inBothIds as $bothidx){
$elevator = array_values(array_filter($elevators, fn($el)=> $el['id'] == $bothidx))[0];
$price_id = $elevator['facility_id'];
$item_no = $elevator['id'];
$item_group = "A";
// $item_spec = $elevator['specifications'] . "-" . $elevator['person'] . "*" . $elevator['stop'] . "-" . $elevator['open_converted'] . $elevator['speed'];
$item_spec = getSpec($elevator['specifications'], $elevator['person'], $elevator['stop'], $elevator['open_converted'], $elevator['speed']);
$item_weight = $elevator['weight'];
$item_op = $elevator['open_converted'];
$item_unit_price = $elevator['price'];
$item_qty = (int)$elevator['spec_num'];
$item_price_bp = (int)$elevator['price'] * (int)$elevator['spec_num'];
$item_price_ct = $elevator['spec_price'];
$note = $elevator['specifications'] . ',' . $elevator['person'] . ',' . $elevator['stop'] . ',' . $elevator['speed'];
$sql_str = "UPDATE pricereview_item SET price_id=:price_id, item_spec=:item_spec, item_weight=:item_weight, item_op=:item_op, item_unit_price=:item_unit_price, item_qty=:item_qty, item_price_bp=:item_price_bp, item_price_ct=:item_price_ct, note=:note WHERE item_no = :item_no AND mid = :mid AND item_group='A' ";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':item_no', $bothidx);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':price_id', $price_id);
$stmt->bindParam(':item_spec', $item_spec);
$stmt->bindParam(':item_weight', $item_weight);
$stmt->bindParam(':item_op', $item_op);
$stmt->bindParam(':item_unit_price', $item_unit_price);
$stmt->bindParam(':item_qty', $item_qty);
$stmt->bindParam(':item_price_bp', $item_price_bp);
$stmt->bindParam(':item_price_ct', $item_price_ct);
$stmt->bindParam(':note', $note);
$stmt->execute();
}
//Option加價
$sql_str = "SELECT * FROM pricereview_item WHERE mid = :mid AND item_group = 'B'";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':item_no', $item_no);
$stmt->bindParam(':item_group', $item_group);
$stmt->bindParam(':item_spec', $item_spec);
$stmt->bindParam(':option_relate_spec', $option_relate_spec);
$stmt->bindParam(':item_unit_price', $item_unit_price);
$stmt->bindParam(':item_qty', $item_qty);
$stmt->bindParam(':item_price_bp', $item_price_bp);
$stmt->execute();
}
$sql_str = "INSERT INTO pricereview_item (mid, item_no, item_group, item_spec, option_relate_spec, item_unit_price, item_qty, item_price_bp)
VALUES (:mid, :item_no, :item_group, :item_spec, :option_relate_spec, :item_unit_price, :item_qty, :item_price_bp)";
//insert 保養延長
foreach(json_decode($maintainOptions, true) as $option){
$item_no = $option['id'] + 1;
$item_group = "D";
$item_spec = $option['toElevator'][0]['model'];
$option_relate_spec = $option['toElevator'][0]['id'];
$item_unit_price = $option['price'];
$item_qty = $option['num'];
$item_price_bp = $option['price'] * $option['num'];
$item_options = $stmt->fetchAll(PDO::FETCH_ASSOC);
$oldOptionsNo = (array)array_column($item_options, 'item_no');
$newOptioinNo = (array)array_column($options, 'key');
$onlyInOptionOldIds = array_values(array_diff($oldOptionsNo, $newOptioinNo));
$onlyInOptionNewIds = array_values(array_diff($newOptioinNo, $oldOptionsNo));
$inBothOptionIds = array_values(array_intersect($oldOptionsNo, $newOptioinNo));
foreach($onlyInOptionOldIds as $oldoptionidx){
$sql_str = "DELETE FROM pricereview_item WHERE mid = :mid AND item_no = :item_no AND item_group='B'";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':item_no', $oldoptionidx);
$stmt->execute();
}
foreach($onlyInOptionNewIds as $newoptionidx){
$option = array_values(array_filter($options, fn($el)=> $el['key'] == $newoptionidx))[0];
$sql_str = "INSERT INTO pricereview_item (mid, price_id, item_no, item_group, item_spec, option_relate_spec, item_unit_price, item_qty, item_price_bp)
VALUES (:mid, :price_id, :item_no, :item_group, :item_spec, :option_relate_spec, :item_unit_price, :item_qty, :item_price_bp)";
$price_id = $option['id'];
$item_no = $option['key'];
$item_group = "B";
$item_spec = $option['name'] . $option['memo'];
$option_relate_spec = $option['toElevator'][0]['id'];
$item_unit_price = $option['price'];
$item_qty = $option['qty'];
$item_price_bp = $option['price'] * $option['qty'];
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':price_id', $price_id);
$stmt->bindParam(':item_no', $item_no);
$stmt->bindParam(':item_group', $item_group);
$stmt->bindParam(':item_spec', $item_spec);
$stmt->bindParam(':option_relate_spec', $option_relate_spec);
$stmt->bindParam(':item_unit_price', $item_unit_price);
$stmt->bindParam(':item_qty', $item_qty);
$stmt->bindParam(':item_price_bp', $item_price_bp);
$stmt->execute();
}
foreach($inBothOptionIds as $bothoptionidx){
$option = array_values(array_filter($options, fn($el)=> $el['key'] == $bothoptionidx))[0];
$price_id = $option['id'];
$item_no = $option['key'];
$item_group = "B";
$item_spec = $option['name'] . $option['memo'];
$option_relate_spec = $option['toElevator'][0]['id'];
$item_unit_price = $option['price'];
$item_qty = $option['qty'];
$item_price_bp = $option['price'] * $option['qty'];
$sql_str = "UPDATE pricereview_item SET price_id = :price_id, item_spec=:item_spec, item_unit_price = :item_unit_price, item_qty = :item_qty, item_price_bp = :item_price_bp, option_relate_spec=:option_relate_spec WHERE mid = :mid AND item_no = :item_no AND item_group='B'";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':price_id', $price_id);
$stmt->bindParam(':item_no', $item_no);
$stmt->bindParam(':item_spec', $item_spec);
$stmt->bindParam(':option_relate_spec', $option_relate_spec);
$stmt->bindParam(':item_unit_price', $item_unit_price);
$stmt->bindParam(':item_qty', $item_qty);
$stmt->bindParam(':item_price_bp', $item_price_bp);
$stmt->execute();
}
//除外項目
$sql_str = "SELECT * FROM pricereview_item WHERE mid = :mid AND item_group = 'E'";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':item_no', $item_no);
$stmt->bindParam(':item_group', $item_group);
$stmt->bindParam(':item_spec', $item_spec);
$stmt->bindParam(':option_relate_spec', $option_relate_spec);
$stmt->bindParam(':item_unit_price', $item_unit_price);
$stmt->bindParam(':item_qty', $item_qty);
$stmt->bindParam(':item_price_bp', $item_price_bp);
$stmt->execute();
}
$sql_str = "INSERT INTO pricereview_pay (mid, pay_kind, pay_scale, pay_amount, pay_period)
VALUES (:mid, :pay_kind, :pay_scale, :pay_amount, :pay_period)";
foreach(json_decode($paymentRatio, true) as $key=>$pay){
$pay_kind = $key +1;
$pay_scale = $pay['scale'] == '' ? 0 : $pay['scale'];
$pay_amount = $pay['scale']/100 * $price_total;
$pay_period = ($pay['scale'] == '' || $pay['scale'] == 0) ? '' :$pay['ticket'];
$item_other_options = $stmt->fetchAll(PDO::FETCH_ASSOC);
$oldOtherOptionsNo = (array)array_column($item_other_options, 'item_no');
$newOtherOptioinNo = (array)array_column($otherOptions, 'id');
$onlyInOtherOptionOldIds = array_values(array_diff($oldOtherOptionsNo, $newOtherOptioinNo));
$onlyInOtherOptionNewIds = array_values(array_diff($newOtherOptioinNo, $oldOtherOptionsNo));
$inBothOtherOptionIds = array_values(array_intersect($oldOtherOptionsNo, $newOtherOptioinNo));
// echo "old:".json_encode($onlyInOtherOptionOldIds); //delete
// echo "new:".json_encode($onlyInOtherOptionNewIds); //insert
// echo "both:".json_encode($inBothOtherOptionIds); // update
foreach($onlyInOtherOptionOldIds as $oldotheroptionidx){
$sql_str = "DELETE FROM pricereview_item WHERE mid = :mid AND item_no = :item_no AND item_group='E'";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':item_no', $oldotheroptionidx);
$stmt->execute();
}
foreach($onlyInOtherOptionNewIds as $newotheroptionidx){
$option = array_values(array_filter($otherOptions, fn($el)=> $el['id'] == $newotheroptionidx))[0];
$sql_str = "INSERT INTO pricereview_item (mid, item_no, item_group, item_spec, option_relate_spec, item_unit_price, item_qty, item_price_bp, note)
VALUES (:mid, :item_no, :item_group, :item_spec, :option_relate_spec, :item_unit_price, :item_qty, :item_price_bp, :note)";
$item_no = $option['id'];
$item_group = "E";
$item_spec = $option['name'];
$option_relate_spec = $option['toElevator'][0]['id'];
$item_unit_price = $option['price'];
$item_qty = $option['num'];
$item_price_bp = $option['price'] * $option['num'];
$note = $option['pr_no'];
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':item_no', $item_no);
$stmt->bindParam(':item_group', $item_group);
$stmt->bindParam(':item_spec', $item_spec);
$stmt->bindParam(':option_relate_spec', $option_relate_spec);
$stmt->bindParam(':item_unit_price', $item_unit_price);
$stmt->bindParam(':item_qty', $item_qty);
$stmt->bindParam(':item_price_bp', $item_price_bp);
$stmt->bindParam(':note', $note);
$stmt->execute();
}
foreach($inBothOtherOptionIds as $bothotheroptionidx){
$option = array_values(array_filter($otherOptions, fn($el)=> $el['id'] == $bothotheroptionidx))[0];
$item_no = $option['id'];
$item_group = "E";
$item_spec = $option['name'];
$option_relate_spec = $option['toElevator'][0]['id'];
$item_unit_price = $option['price'];
$item_qty = $option['num'];
$item_price_bp = $option['price'] * $option['num'];
$note = $option['pr_no'];
$sql_str = "UPDATE pricereview_item SET item_spec=:item_spec, item_unit_price = :item_unit_price, item_qty = :item_qty, item_price_bp = :item_price_bp, option_relate_spec=:option_relate_spec, note=:note WHERE mid = :mid AND item_no = :item_no AND item_group='E'";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':item_no', $item_no);
$stmt->bindParam(':item_spec', $item_spec);
$stmt->bindParam(':option_relate_spec', $option_relate_spec);
$stmt->bindParam(':item_unit_price', $item_unit_price);
$stmt->bindParam(':item_qty', $item_qty);
$stmt->bindParam(':item_price_bp', $item_price_bp);
$stmt->bindParam(':note', $note);
$stmt->execute();
}
//拆梯價格
$sql_str = "SELECT * FROM pricereview_item WHERE mid = :mid AND item_group = 'C'";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':pay_kind', $pay_kind);
$stmt->bindParam(':pay_scale', $pay_scale);
$stmt->bindParam(':pay_amount', $pay_amount);
$stmt->bindParam(':pay_period', $pay_period);
$stmt->execute();
}
$sql_str = "SELECT * FROM account WHERE accountid = :accountid";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':accountid', $creater);
$stmt->execute();
$account = $stmt->fetch(PDO::FETCH_ASSOC);
$manager = $account['manager'];
$sign1 = "$manager,,"; //區處長
$sign2 = NULL; // 業務承辦人
$sign3 = "M0060,,"; //業務部協理
//是否呈核至總經理(M0006)
if($price_rate < 80 || $special_fee > 0){
$sign4 = "M0006,,";
$sign_total = 4;
$item_demolish_options = $stmt->fetchAll(PDO::FETCH_ASSOC);
$oldDemolishOptionsNo = (array)array_column($item_demolish_options, 'item_no');
$newDemolishOptioinNo = (array)array_column($demolishOptions, 'id');
$onlyInDemolishOptionOldIds = array_values(array_diff($oldDemolishOptionsNo, $newDemolishOptioinNo));
$onlyInDemolishOptionNewIds = array_values(array_diff($newDemolishOptioinNo, $oldDemolishOptionsNo));
$inBothDemolishOptionIds = array_values(array_intersect($oldDemolishOptionsNo, $newDemolishOptioinNo));
// echo "old:".json_encode($onlyInDemolishOptionOldIds); //delete
// echo "new:".json_encode($onlyInDemolishOptionNewIds); //insert
// echo "both:".json_encode($inBothDemolishOptionIds); // update
foreach($onlyInDemolishOptionOldIds as $olddemolishoptionidx){
$sql_str = "DELETE FROM pricereview_item WHERE mid = :mid AND item_no = :item_no AND item_group='C'";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':item_no', $olddemolishoptionidx);
$stmt->execute();
}
foreach($onlyInDemolishOptionNewIds as $newdemolishoptionidx){
$option = array_values(array_filter($demolishOptions, fn($el)=> $el['id'] == $newdemolishoptionidx))[0];
$sql_str = "INSERT INTO pricereview_item (mid, price_id, item_no, item_group, item_spec, option_relate_spec, item_unit_price, item_qty, item_price_bp, note)
VALUES (:mid, :price_id, :item_no, :item_group, :item_spec, :option_relate_spec, :item_unit_price, :item_qty, :item_price_bp, :note)";
$item_no = $option['id'];
$item_group = "C";
$item_spec = $option['person'];
$option_relate_spec = $option['toElevator'][0]['id'];
$item_unit_price = $option['price'];
$item_qty = (int)$option['qty'];
$item_price_bp = (int)$option['price'] * (int)$option['qty'];
$note = $option['floor'];
$price_id = $option['demolish_id'];
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':item_no', $item_no);
$stmt->bindParam(':item_group', $item_group);
$stmt->bindParam(':item_spec', $item_spec);
$stmt->bindParam(':option_relate_spec', $option_relate_spec);
$stmt->bindParam(':item_unit_price', $item_unit_price);
$stmt->bindParam(':item_qty', $item_qty);
$stmt->bindParam(':item_price_bp', $item_price_bp);
$stmt->bindParam(':note', $note);
$stmt->bindParam(':price_id', $price_id);
$stmt->execute();
}
foreach($inBothDemolishOptionIds as $bothdemolishoptionidx){
$option = array_values(array_filter($demolishOptions, fn($el)=> $el['id'] == $bothdemolishoptionidx))[0];
$item_no = $option['id'];
$item_group = "C";
$item_spec = $option['person'];
$option_relate_spec = $option['toElevator'][0]['id'];
$item_unit_price = $option['price'];
$item_qty = $option['qty'];
$item_price_bp = $option['price'] * $option['qty'];
$note = $option['floor'];
$price_id = $option['demolish_id'];
$sql_str = "UPDATE pricereview_item SET item_spec=:item_spec, price_id=:price_id, item_unit_price = :item_unit_price, item_qty = :item_qty, item_price_bp = :item_price_bp, option_relate_spec=:option_relate_spec, note=:note WHERE mid = :mid AND item_no = :item_no AND item_group='C'";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':item_no', $item_no);
$stmt->bindParam(':item_spec', $item_spec);
$stmt->bindParam(':option_relate_spec', $option_relate_spec);
$stmt->bindParam(':item_unit_price', $item_unit_price);
$stmt->bindParam(':item_qty', $item_qty);
$stmt->bindParam(':item_price_bp', $item_price_bp);
$stmt->bindParam(':note', $note);
$stmt->bindParam(':price_id', $price_id);
$stmt->execute();
}
$sql_str = "UPDATE pricereview_pay SET pay_scale = :pay_scale, pay_amount = :pay_amount, pay_period = :pay_period WHERE mid = :mid AND pay_kind = :pay_kind";
foreach($paymentRatio as $key=>$pay){
$pay_kind = $key +1;
$pay_scale = $pay['scale'] == '' ? 0 : $pay['scale'];
$pay_amount = $pay['scale']/100 * $price_total;
$pay_period = ($pay['scale'] == '' || $pay['scale'] == 0) ? '' :$pay['ticket'];
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':pay_kind', $pay_kind);
$stmt->bindParam(':pay_scale', $pay_scale);
$stmt->bindParam(':pay_amount', $pay_amount);
$stmt->bindParam(':pay_period', $pay_period);
$stmt->execute();
}
}else{
$sign4 = NULL;
$sign_total = 3;
$sql_str = "INSERT INTO pricereview_main (contractno, ekind, person, company, case_name, address, compete, price_lowest, price_total, price_rate, special_fee, predeal_date, facilitok_date, penalty, deposit_rate, keep_rate, warranty_rate, memo, status, attatch1, attatch2, creater, create_at)
VALUES (:contractno, :ekind, :person, :company, :case_name, :address, :compete, :price_lowest, :price_total, :price_rate, :special_fee, :predeal_date, :facilitok_date, :penalty, :deposit_rate, :keep_rate, :warranty_rate, :memo, :status, :attatch1, :attatch2, :creater, :create_at)";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':contractno', $contractno);
$stmt->bindParam(':ekind', $ekind);
$stmt->bindParam(':person', $person);
$stmt->bindParam(':company', $company);
$stmt->bindParam(':case_name', $case_name);
$stmt->bindParam(':address', $address);
$stmt->bindParam(':compete', $compete);
$stmt->bindParam(':price_lowest', $price_lowest);
$stmt->bindParam(':price_total', $price_total);
$stmt->bindParam(':price_rate', $price_rate);
$stmt->bindParam(':special_fee', $special_fee);
$stmt->bindParam(':predeal_date', $predeal_date);
$stmt->bindParam(':facilitok_date', $facilitok_date);
$stmt->bindParam(':penalty', $penalty);
$stmt->bindParam(':deposit_rate', $deposit_rate);
$stmt->bindParam(':keep_rate', $keep_rate);
$stmt->bindParam(':warranty_rate', $warranty_rate);
$stmt->bindParam(':memo', $memo);
$stmt->bindParam(':status', $status);
$stmt->bindParam(':attatch1', $attatch1_src);
$stmt->bindParam(':attatch2', $attatch2_src);
$stmt->bindParam(':creater', $creater);
$stmt->bindParam(':create_at', $create_at);
$stmt->execute();
$mid = $conn->lastInsertId();
//insert 整機單價
$sql_str = "INSERT INTO pricereview_item (mid, price_id, item_no, item_group, item_spec, item_weight, item_op, item_unit_price, item_qty, item_price_bp, item_price_ct, note)
VALUES (:mid, :price_id, :item_no, :item_group, :item_spec, :item_weight, :item_op, :item_unit_price, :item_qty, :item_price_bp, :item_price_ct, :note)";
foreach($elevators as $elevator){
$price_id = $elevator['facility_id'];
$item_no = $elevator['id'];
$item_group = "A";
// $item_spec = $elevator['specifications'] . "-" . $elevator['person'] . "*" . $elevator['stop'] . "-" . $elevator['open_converted'] . $elevator['speed'];
$item_op = $elevator['open_converted'];
$item_weight = $elevator['weight'];
$item_spec = getSpec($elevator['specifications'], $elevator['person'], $elevator['stop'], $elevator['open_converted'], $elevator['speed']);
$item_unit_price = $elevator['price'];
$item_qty = (int)$elevator['spec_num'];
$item_price_bp = (int)$elevator['price'] * (int)$elevator['spec_num'];
$item_price_ct = $elevator['spec_price'];
$note = $elevator['specifications'] . ',' . $elevator['person'] . ',' . $elevator['stop'] . ',' . $elevator['speed'];
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':price_id', $price_id);
$stmt->bindParam(':item_no', $item_no);
$stmt->bindParam(':item_group', $item_group);
$stmt->bindParam(':item_spec', $item_spec);
$stmt->bindParam(':item_weight', $item_weight);
$stmt->bindParam(':item_op', $item_op);
$stmt->bindParam(':item_unit_price', $item_unit_price);
$stmt->bindParam(':item_qty', $item_qty);
$stmt->bindParam(':item_price_bp', $item_price_bp);
$stmt->bindParam(':item_price_ct', $item_price_ct);
$stmt->bindParam(':note', $note);
$stmt->execute();
}
//insert options 加價
$sql_str = "INSERT INTO pricereview_item (mid, price_id, item_no, item_group, item_spec, option_relate_spec, item_unit_price, item_qty, item_price_bp)
VALUES (:mid, :price_id, :item_no, :item_group, :item_spec, :option_relate_spec, :item_unit_price, :item_qty, :item_price_bp)";
foreach($options as $option){
$price_id = $option['id'];
$item_no = $option['key'];
$item_group = "B";
$item_spec = $option['name'] . $option['memo'];
$option_relate_spec = $option['toElevator'][0]['id'];
$item_unit_price = $option['price'];
$item_qty = $option['qty'];
$item_price_bp = $option['price'] * $option['qty'];
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':price_id', $price_id);
$stmt->bindParam(':item_no', $item_no);
$stmt->bindParam(':item_group', $item_group);
$stmt->bindParam(':item_spec', $item_spec);
$stmt->bindParam(':option_relate_spec', $option_relate_spec);
$stmt->bindParam(':item_unit_price', $item_unit_price);
$stmt->bindParam(':item_qty', $item_qty);
$stmt->bindParam(':item_price_bp', $item_price_bp);
$stmt->execute();
}
//insert 除外項目
$sql_str = "INSERT INTO pricereview_item (mid, item_no, item_group, item_spec, option_relate_spec, item_unit_price, item_qty, item_price_bp, note)
VALUES (:mid, :item_no, :item_group, :item_spec, :option_relate_spec, :item_unit_price, :item_qty, :item_price_bp, :note)";
foreach($otherOptions as $option){
$item_no = $option['id'];
$item_group = "E";
$item_spec = $option['name'];
$option_relate_spec = $option['toElevator'][0]['id'];
$item_unit_price = $option['price'];
$item_qty = $option['num'];
$item_price_bp = $option['price'] * $option['num'];
$note = $option['pr_no'];
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':item_no', $item_no);
$stmt->bindParam(':item_group', $item_group);
$stmt->bindParam(':item_spec', $item_spec);
$stmt->bindParam(':option_relate_spec', $option_relate_spec);
$stmt->bindParam(':item_unit_price', $item_unit_price);
$stmt->bindParam(':item_qty', $item_qty);
$stmt->bindParam(':item_price_bp', $item_price_bp);
$stmt->bindParam(':note', $note);
$stmt->execute();
}
$sql_str = "INSERT INTO pricereview_item (mid, item_no, item_group, item_spec, option_relate_spec, item_unit_price, item_qty, item_price_bp)
VALUES (:mid, :item_no, :item_group, :item_spec, :option_relate_spec, :item_unit_price, :item_qty, :item_price_bp)";
//insert 保養延長
foreach(json_decode($maintainOptions, true) as $option){
$item_no = $option['id'] + 1;
$item_group = "D";
$item_spec = $option['toElevator'][0]['model'];
$option_relate_spec = $option['toElevator'][0]['id'];
$item_unit_price = $option['price'];
$item_qty = $option['num'];
$item_price_bp = $option['price'] * $option['num'];
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':item_no', $item_no);
$stmt->bindParam(':item_group', $item_group);
$stmt->bindParam(':item_spec', $item_spec);
$stmt->bindParam(':option_relate_spec', $option_relate_spec);
$stmt->bindParam(':item_unit_price', $item_unit_price);
$stmt->bindParam(':item_qty', $item_qty);
$stmt->bindParam(':item_price_bp', $item_price_bp);
$stmt->execute();
}
//insert 拆梯價格 demolishOptions
$sql_str = "INSERT INTO pricereview_item (mid, price_id, item_no, item_group, item_spec, option_relate_spec, item_unit_price, item_qty, item_price_bp, note)
VALUES (:mid, :price_id, :item_no, :item_group, :item_spec, :option_relate_spec, :item_unit_price, :item_qty, :item_price_bp, :note)";
foreach($demolishOptions as $option){
$item_no = $option['id'];
$item_group = "C";
$item_spec = $option['person'];
$option_relate_spec = $option['toElevator'][0]['id'];
$item_unit_price = $option['price'];
$item_qty = (int)$option['qty'];
$item_price_bp = $option['price'] * (int)$option['qty'];
$note = $option['floor'];
$price_id = $option['demolish_id'];
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':item_no', $item_no);
$stmt->bindParam(':item_group', $item_group);
$stmt->bindParam(':item_spec', $item_spec);
$stmt->bindParam(':option_relate_spec', $option_relate_spec);
$stmt->bindParam(':item_unit_price', $item_unit_price);
$stmt->bindParam(':item_qty', $item_qty);
$stmt->bindParam(':item_price_bp', $item_price_bp);
$stmt->bindParam(':note', $note);
$stmt->bindParam(':price_id', $price_id);
$stmt->execute();
}
//insert 付款比例
$sql_str = "INSERT INTO pricereview_pay (mid, pay_kind, pay_scale, pay_amount, pay_period)
VALUES (:mid, :pay_kind, :pay_scale, :pay_amount, :pay_period)";
foreach($paymentRatio as $key=>$pay){
$pay_kind = $key +1;
$pay_scale = $pay['scale'] == '' ? 0 : $pay['scale'];
$pay_amount = $pay['scale']/100 * $price_total;
$pay_period = ($pay['scale'] == '' || $pay['scale'] == 0) ? '' :$pay['ticket'];
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':pay_kind', $pay_kind);
$stmt->bindParam(':pay_scale', $pay_scale);
$stmt->bindParam(':pay_amount', $pay_amount);
$stmt->bindParam(':pay_period', $pay_period);
$stmt->execute();
}
}
$sql_str = "INSERT INTO pricereview_sign (mid, sign1, sign2, sign3, sign4, sign_total)
if($status == 'YS'){
$sql_str = "SELECT * FROM account WHERE accountid = :accountid";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':accountid', $creater);
$stmt->execute();
$account = $stmt->fetch(PDO::FETCH_ASSOC);
$manager = $account['manager'];
if($manager == "M0029" && $ekind == "新梯"){
$manager = "M0137";
}
$sign1 = "$manager,,"; //區處長
//新梯區處長自己填價審 ,審核直接通過
if($creater == "M0033" || $creater == "M0054" || $creater == "M0086" || $creater == "M0137" ){
$sign1 = $creater . ",Y,".date('Y-m-d H:i:s');
}
$sign2 =$ekind == '汰改'? "M0012,," : NULL; // 業務承辦人
$sign3 = $ekind == '汰改' ? "M0008,," : "M0060,,"; //業務部協理
$signArr = [
$manager,
$sign2,
$sign3,
];
$sign_total = count(array_filter($signArr, fn($item)=> $item != NULL));
//是否呈核至總經理(M0006) ,暫時不送至總經理,所以加入false
if((false && $price_rate < 80 || $special_fee > 0)){
$sign4 = "M0006,,";
$sign_total += 1;
}else{
$sign4 = NULL;
}
$sql_str = "INSERT INTO pricereview_sign (mid, sign1, sign2, sign3, sign4, sign_total)
VALUES (:mid, :sign1, :sign2, :sign3, :sign4, :sign_total)";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':sign1', $sign1);
$stmt->bindParam(':sign2', $sign2);
$stmt->bindParam(':sign3', $sign3);
$stmt->bindParam(':sign4', $sign4);
$stmt->bindParam(':sign_total', $sign_total);
$stmt->execute();
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':sign1', $sign1);
$stmt->bindParam(':sign2', $sign2);
$stmt->bindParam(':sign3', $sign3);
$stmt->bindParam(':sign4', $sign4);
$stmt->bindParam(':sign_total', $sign_total);
$stmt->execute();
//發送待簽通知
include_once "./postFlow.php";
$createFlow = createFlow($mid, $manager, "A", $ekind, $form_key);
//發送系統通知
include_once "./postSystemNotice.php";
$sql_str = "SELECT * FROM pricereview_main WHERE id = :id ORDER BY id DESC LIMIT 1";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':id', $mid);
$stmt->execute();
$contract = $stmt->fetch(PDO::FETCH_ASSOC);
$kind = 1;
$related_id = $mid;
$title = $ekind . "價審待簽通知(".$contract['contractno']."," .$contract['company']. ")";
$content = "待簽核";
$content = "合約號:".$contract['contractno'] . "<br>";
$content .= "客戶名稱:" . $contract['company'] . "<br>";
$content .= "案件名稱:" . $contract['case_name'] . "<br>";
$content .= "時間" . date("Y-m-d H:i:s");
// $content .= "<a href='./mkt/pricreviewCheck.php?id=".$mid.">前往查看</a>";
$havaread = null;
$permissions = [$manager];
$creater = "system";
$create_at = date("Y-m-d H:i:s");
$url = "mkt/pricereviewCheck.php?id=" . $mid;
sendSystemNotice($kind, $related_id, $title, $content, $havaread, $permissions, $creater, $create_at, $url);
}
echo "success";
$conn->commit();
}catch (PDOException $e) {
}
catch (PDOException $e) {
$conn->rollback();
echo $e->getMessage();
die('Error!:' . $e->getMessage());
}
}
function getSpec($spec, $person, $stop, $open, $speed){
$weightArr = array(
6 => 450,
8 => 550,
9 => 600,
10 => 700,
11 => 750,
12 => 800,
13 => 900,
15 => 1000,
17 => 1150,
20 => 1350,
24 => 1600,
);
if($spec == 'M1' || $spec=='M1+M4(1:1)' || $spec == 'M1+M4(2:1)'){
$model = "P" . $person . "-" . $weightArr[$person] . "-" . $open . "-" . $speed . "-" . $stop;
}else{
$model = $spec . "-" . $person . "*" . $stop . "-" . $open . $speed;
}
return $model;
}

81
wms/mkt/api/postPricereviewSign.php

@ -7,6 +7,9 @@ $sign = $_POST['sign'];
$mid = $_POST['mid'];
$result = $_POST['result'];
$reviewcomment = $_POST['reviewcomment'];
$sign_id = $_POST['currentSignId'];
$token = $_POST['token'];
$form_key = $_POST['form_key'];
$signOff = '';
if($result == 'YY' ){
$signOff = 'YY';
@ -16,16 +19,16 @@ if($result == 'YY' ){
$signOff = 'Y';
}
try{
$user_id = $_POST['user_id'];
$sign_result = $user_id . "," . $signOff . "," . date("Y-m-d H:i:s");
$sql_str = "UPDATE pricereview_sign SET sign" . $sign . "=:sign, sign".$sign."_note = :reviewcomment WHERE mid = :mid ";
$sql_str = "UPDATE pricereview_sign SET sign" . $sign . "=:sign, sign".$sign."_note = :reviewcomment WHERE mid = :mid AND id = :sign_id";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':sign', $sign_result);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':reviewcomment', $reviewcomment);
$stmt->bindParam(':sign_id', $sign_id);
$stmt->execute();
$sql_str = "UPDATE pricereview_main SET status=:status WHERE id = :id ";
@ -34,6 +37,80 @@ try{
$stmt->bindParam(':id', $mid);
$stmt->execute();
include_once "./postSystemNotice.php";
$sql_str = "SELECT * FROM pricereview_main WHERE id = :id ORDER BY id DESC LIMIT 1";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':id', $mid);
$stmt->execute();
$contract = $stmt->fetch(PDO::FETCH_ASSOC);
$ekind = $contract['ekind'];
$sql_str = "SELECT * FROM pricereview_sign WHERE mid = :mid AND id = :sign_id";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':sign_id', $sign_id);
$stmt->execute();
$currentsign = $stmt->fetch(PDO::FETCH_ASSOC);
$permissions = [];
$content = "";
$url = "mkt/pricereviewCheck.php?id=" . $mid;
if($signOff == "YY"){
if($currentsign['sign1']!=NULL){ $permissions[] = explode(",", $currentsign['sign1'])[0] ; }
if($currentsign['sign2']!=NULL){ $permissions[] = explode(",", $currentsign['sign2'])[0] ; }
if($currentsign['sign3']!=NULL){ $permissions[] = explode(",", $currentsign['sign3'])[0] ; }
if($currentsign['sign4']!=NULL){ $permissions[] = explode(",", $currentsign['sign4'])[0] ; }
$permissions[] = $contract['person'];
$title = $ekind . "價審結案通知(".$contract['contractno']."," .$contract['company']. ")";
$content = "狀態:結案同意<br>";
$current_assigner = "00000";
}elseif($signOff == "Y"){
if($sign == 1 || $sign == 2 || $sign == 3){
$signer = $currentsign['sign'.($sign+1)];
if($signer == NULL){
$signer = $currentsign['sign'.($sign+2)];
}
$permissions[] = explode(",", $signer)[0];
$current_assigner = explode(",", $signer)[0];
$title = $ekind . "價審待簽通知(".$contract['contractno']."," .$contract['company']. ")";
$content = "狀態:待簽核<br>";
}
}elseif($signOff == "N"){
$signer = $contract['person'];
$permissions[] = $signer;
$title = $ekind . "價審退回通知(".$contract['contractno']."," .$contract['company']. ")";
$content = "狀態:退回<br>";
$url = "mkt/pricereviewCreate.php?id=" . $mid;
$current_assigner = "00000";
}
$kind = 1;
$related_id = $mid;
$content .= "合約號:".$contract['contractno'] . "<br>";
$content .= "客戶名稱:" . $contract['company'] . "<br>";
$content .= "案件名稱:" . $contract['case_name'] . "<br>";
$content .= "時間" . date("Y-m-d H:i:s");
// $content .= "<a href='./mkt/pricreviewCheck.php?id=".$mid.">前往查看</a>";
$havaread = null;
$creater = "system";
$create_at = date("Y-m-d H:i:s");
sendSystemNotice($kind, $related_id, $title, $content, $havaread, $permissions, $creater, $create_at, $url);
//待簽通知
if($form_key == null){
$sql_str = "SELECT form_key FROM flow WHERE form_id = :form_id AND system_id = 'prm' AND (flow_id='prm01' OR flow_id='prm02')";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':form_id', $mid);
$stmt->execute();
$form_key = $stmt->fetch(PDO::FETCH_ASSOC)['form_key'];
}
include_once "./postFlow.php";
if($signOff == "YY") $flow_code = "Z";
if($signOff == "Y") $flow_code = "B";
if($signOff == "N") $flow_code = "A";
if($form_key == null){
throw new PDOException("form_key 不存在!");
}
createFlow($mid, $current_assigner, $flow_code, $ekind, $form_key);
echo 1;
}catch(PDOException $e){
echo $e->getMessage();

20
wms/mkt/api/postSystemNotice.php

@ -0,0 +1,20 @@
<?php
require_once("../conn.php");
function sendSystemNotice($kind, $related_id, $title, $content, $haveread, $permissions, $creater, $create_at, $url){
global $conn;
$sql_str = "INSERT INTO notice (kind, related_id, title, content, haveread, permission, url, creater, create_at)
VALUES (:kind, :related_id, :title, :content, :haveread, :permission, :url,:creater, :create_at)";
foreach($permissions as $permission){
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':kind', $kind);
$stmt->bindParam(':related_id', $related_id);
$stmt->bindParam(':title', $title);
$stmt->bindParam(':content', $content);
$stmt->bindParam(':haveread', $haveread);
$stmt->bindParam(':permission', $permission);
$stmt->bindParam(':url', $url);
$stmt->bindParam(':creater', $creater);
$stmt->bindParam(':create_at', $create_at);
$stmt->execute();
}
}

BIN
wms/mkt/api/pricereview-uploads/M24020088報價單.pdf

Binary file not shown.

BIN
wms/mkt/api/pricereview-uploads/m20240226115529490503載重人乘.xlsx

Binary file not shown.

BIN
wms/mkt/api/pricereview-uploads/m20240226115529813031M24020088報價單.pdf

Binary file not shown.

BIN
wms/mkt/api/pricereview-uploads/載重人乘.xlsx

Binary file not shown.

56
wms/mkt/api/putNewElevatorPriceview.php

@ -0,0 +1,56 @@
<?php
require_once("../conn.php");
date_default_timezone_set('Asia/Taipei');
$contractno = $_POST['contractno'];
$ekind = $_POST['ekind'];
$person = $_POST['person'];
$company = $_POST['company'];
$case_name = $_POST['case_name'];
$address = $_POST['address'];
$compete = "";
$price_lowest = $_POST['price_lowest'];
$price_total = $_POST['price_total'];
$price_rate = $_POST['price_rate'];
$special_fee = $_POST['special_fee'];
$predeal_date = $_POST['predeal_date'];
$penalty = $_POST['penalty'];
$deposit_rate = $_POST['deposit_rate'];
$warranty_rate = $_POST['warranty_rate'];
$keep_rate = $_POST['keep_rate'];
$memo = $_POST['memo'];
$status = $_POST['status'];
$attatch1 = $_POST['attatch1'] =='' ? NULL : $_POST['attatch1'];
$attatch2 = $_POST['attatch2'] =='' ? NULL : $_POST['attatch2'];
$creater = "M0174";
$create_at = date("Y-m-d H:i:s");
$elevators = $_POST['elevators'];
$options = $_POST['options'];
$otherOptions = $_POST['otherOptions'];
$maintainOptions = $_POST['maintainOptions'];
$paymentRatio = $_POST['paymentRatio'];
$sql_str = "SELECT id FROM pricereview_main WHERE contractno = :contractno ORDER BY id DESC LIMIT 1";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':contractno', $contractno);
$stmt->execute();
$main = $stmt->fetch(PDO::FETCH_ASSOC);
if(!$main){
insertPricereview();
}else{
updatePricereview();
}
$mid = $main['id'];
function insertPricereview(){
}
function updatePricereview(){
}

101
wms/mkt/api/resaveFlow.php

@ -0,0 +1,101 @@
<?php
if(isset($_GET['id']) && $_GET['id'] == 998){
require_once('../conn.php');
include_once('./postFlow.php');
$sql_str = "SELECT pricereview_sign.*, pricereview_main.ekind AS ekind FROM pricereview_sign LEFT JOIN pricereview_main ON pricereview_sign.mid = pricereview_main.id WHERE pricereview_main.status = 'YS' ";
$sql_str = "SELECT
prs.*,
prm.ekind
FROM
(SELECT
MAX(id) AS max_id,
mid
FROM
pricereview_sign
GROUP BY
mid) AS max_prs
JOIN
pricereview_sign prs ON prs.id = max_prs.max_id
LEFT JOIN
pricereview_main prm ON prs.mid = prm.id
WHERE
prm.status = 'YS'";
$stmt = $conn->prepare($sql_str);
$stmt->execute();
$signs = $stmt->fetchAll(PDO::FETCH_ASSOC);
$total = 0;
foreach($signs as $sign){
$total++;
echo $total . "<br>";
$currentSigner = "";
$form_key = null;
if(!empty($sign['sign1'])){
$sign1 = explode(",", $sign['sign1'])[1]; // M0033,,
if($sign1 == ""){
$currentSigner = explode(",", $sign['sign1'])[0];
$form_key = createFlow($sign['mid'], $currentSigner, "A", $sign['ekind'], $form_key );
continue;
}else{
if(!empty($sign['sign2'])){
$sign2 = explode(",", $sign['sign2'])[1];
if($sign2 == "" && $sign1 == "Y"){
$currentSigner = explode(",", $sign['sign1'])[0];
$form_key = createFlow($sign['mid'], $currentSigner, "A", $sign['ekind'], $form_key );
$currentSigner = explode(",", $sign['sign2'])[0];
createFlow($sign['mid'], $currentSigner, "B", $sign['ekind'], $form_key );
continue;
}
$sign3 = explode(",", $sign['sign3'])[1];
if($sign3 == "" && $sign2 == "Y"){
$currentSigner = explode(",", $sign['sign1'])[0];
$form_key = createFlow($sign['mid'], $currentSigner, "A", $sign['ekind'], $form_key );
$currentSigner = explode(",", $sign['sign2'])[0];
createFlow($sign['mid'], $currentSigner, "B", $sign['ekind'], $form_key );
$currentSigner = explode(",", $sign['sign3'])[0];
createFlow($sign['mid'], $currentSigner, "B", $sign['ekind'], $form_key );
continue;
}
if(!empty($sign['sign4'])){
$sign4 = explode(",", $sign['sign4'])[1];
if($sign4 == "" && $sign3 == "Y"){
$currentSigner = explode(",", $sign['sign1'])[0];
$form_key = createFlow($sign['mid'], $currentSigner, "A", $sign['ekind'], $form_key );
$currentSigner = explode(",", $sign['sign2'])[0];
createFlow($sign['mid'], $currentSigner, "B", $sign['ekind'], $form_key );
$currentSigner = explode(",", $sign['sign3'])[0];
createFlow($sign['mid'], $currentSigner, "B", $sign['ekind'], $form_key );
$currentSigner = explode(",", $sign['sign4'])[0];
createFlow($sign['mid'], $currentSigner, "B", $sign['ekind'], $form_key );
continue;
}
}
}else{
$sign3 = explode(",", $sign['sign3'])[1];
if($sign3 == "" && $sign1 == "Y"){
$currentSigner = explode(",", $sign['sign1'])[0];
$form_key = createFlow($sign['mid'], $currentSigner, "A", $sign['ekind'], $form_key );
$currentSigner = explode(",", $sign['sign3'])[0];
createFlow($sign['mid'], $currentSigner, "B", $sign['ekind'], $form_key );
continue;
}
if(!empty($sign['sign4'])){
$sign4 = explode(",", $sign['sign4'])[1];
if($sign4 == "" && $sign3 == "Y"){
$currentSigner = explode(",", $sign['sign1'])[0];
$form_key = createFlow($sign['mid'], $currentSigner, "A", $sign['ekind'], $form_key );
$currentSigner = explode(",", $sign['sign3'])[0];
createFlow($sign['mid'], $currentSigner, "B", $sign['ekind'], $form_key );
$currentSigner = explode(",", $sign['sign4'])[0];
createFlow($sign['mid'], $currentSigner, "B", $sign['ekind'], $form_key );
continue;
}
}
}
}
}
}
}

51
wms/mkt/api/updateSign.php

@ -0,0 +1,51 @@
<?php
require_once "../conn.php";
if(!isset($_GET['id'])) exit;
$id = $_GET['id'];
if($id!=969) exit;
$sql_str = "SELECT * FROM pricereview_sign";
$stmt = $conn->prepare($sql_str);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($result as $sign){
$endSign = false;
if(explode(",", $sign['sign3'])[1] == "Y"){
$newSign3 = str_replace("Y", "YY", $sign['sign3']);
$sign4_is_null = $sign['sign4'] == null ? true : false;
$sql_str = $sign4_is_null ? "UPDATE pricereview_sign SET sign3 = :sign3 WHERE id = :id" : "UPDATE pricereview_sign SET sign3 = :sign3, sign4 = NULL, sign_total = sign_total - 1 WHERE id = :id";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':sign3', $newSign3);
$stmt->bindParam(':id', $sign['id']);
$stmt->execute();
$sql_str = "UPDATE pricereview_main SET status = 'YY' WHERE id = :id AND status = 'YS' ";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':id', $sign['mid']);
$stmt->execute();
$sql_str = "UPDATE flow SET flow_code = 'Z' WHERE form_id = :id AND system_id = 'prm' AND (flow_id = 'prm01' OR flow_id = 'prm02')";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':id', $sign['mid']);
$stmt->execute();
echo $sign['mid'];
echo "<br>";
}else{
if($sign['sign4'] != NULL){
$sql_str = "UPDATE pricereview_sign SET sign4 = NULL, sign_total = sign_total + 1 WHERE id = :id AND sign4 IS NOT NULL";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':id', $sign['id']);
$stmt->execute();
echo $sign['mid'];
echo "<br>";
}
}
}

1115
wms/mkt/assets/js/pricereviewAlpine.js

File diff suppressed because it is too large

233
wms/mkt/css/pricereview.css

@ -1,58 +1,40 @@
#pricereviewCreate input[type=text],
#pricereviewCreate input[type=number],
#pricereviewCreate select {
@charset "UTF-8";
#pricereviewCreate input[type=text], #pricereviewCreate input[type=number], #pricereviewCreate select {
margin: 1px;
}
#pricereviewCreate textarea {
resize: vertical;
}
#pricereviewCreate>.modal {
#pricereviewCreate select {
-webkit-appearance: none; /* 針對 Chrome, Safari, Opera */
-moz-appearance: none; /* 針對 Firefox */
appearance: none; /* 標準語法 */
}
#pricereviewCreate > .modal {
padding: 20px;
}
#pricereviewCreate>.modal table,
#pricereviewCreate>.modal th,
#pricereviewCreate>.modal td {
#pricereviewCreate > .modal table, #pricereviewCreate > .modal th, #pricereviewCreate > .modal td {
border: 1px #ccc solid;
}
#pricereviewCreate>.modal table>thead tr th {
#pricereviewCreate > .modal table > thead tr th {
color: #A52A2A;
}
#pricereviewCreate>.modal table>tbody .selected {
#pricereviewCreate > .modal table > tbody .selected {
background-color: #E7FEFB;
}
#pricereviewCreate .container table,
#pricereviewCreate .container th,
#pricereviewCreate .container td {
#pricereviewCreate .container table, #pricereviewCreate .container th, #pricereviewCreate .container td {
border: 1px #ccc solid;
padding: 15px;
padding: 9px;
}
#pricereviewCreate .container table.noborder,
#pricereviewCreate .container table .noborder th,
#pricereviewCreate .container table .noborder td,
#pricereviewCreate .container th.noborder,
#pricereviewCreate .container th .noborder th,
#pricereviewCreate .container th .noborder td,
#pricereviewCreate .container td.noborder,
#pricereviewCreate .container td .noborder th,
#pricereviewCreate .container td .noborder td {
#pricereviewCreate .container table.noborder, #pricereviewCreate .container table .noborder th, #pricereviewCreate .container table .noborder td, #pricereviewCreate .container th.noborder, #pricereviewCreate .container th .noborder th, #pricereviewCreate .container th .noborder td, #pricereviewCreate .container td.noborder, #pricereviewCreate .container td .noborder th, #pricereviewCreate .container td .noborder td {
border: none;
}
#pricereviewCreate .container table thead th {
background-color: #6D9EEB;
}
#pricereviewCreate .container table tbody td input {
font-size: 14px;
}
#pricereviewCreate .container table tbody th {
background-color: #CCE4F8;
font-size: 14px;
@ -60,101 +42,82 @@
min-width: 100px;
text-align: center;
}
#pricereviewCreate .container table input {
font-size: 13px;
}
#pricereviewCreate .container .pricreviewmain {
background-color: #F2F2F2;
padding: 20px;
border-radius: 6px;
margin: 30px 0;
}
#pricereviewCreate .container .pricreviewmain button {
color: #fff;
width: 55px;
height: 30px;
padding: 0;
margin-left: 10px;
margin-left: 6px;
margin-bottom: 2px;
font-size: 13px;
}
#pricereviewCreate .container .pricreviewmain button.addbtn {
background-color: #337AB7;
width: 30px;
}
#pricereviewCreate .container .pricreviewmain button.deleteBtn {
background-color: #D9534F;
color: #fff;
font-size: 12px;
width: 30px;
}
#pricereviewCreate .container .pricreviewmain button.selectElevator {
background-color: #D9534F;
color: #fff;
}
#pricereviewCreate .container .pricreviewmain>.divitem {
#pricereviewCreate .container .pricreviewmain > .divitem {
border: 1px #ccc solid;
padding: 10px;
border-radius: 4px;
}
#pricereviewCreate .container .pricreviewmain>.divitem .title {
#pricereviewCreate .container .pricreviewmain > .divitem .title {
display: flex;
align-items: center;
border-bottom: 1px #ccc solid;
padding: 10px 0;
margin-bottom: 10px;
}
#pricereviewCreate .container .pricreviewmain>.divitem .title h6 {
#pricereviewCreate .container .pricreviewmain > .divitem .title h6 {
font-weight: 600;
}
#pricereviewCreate .container .pricreviewmain>.divitem table,
#pricereviewCreate .container .pricreviewmain>.divitem th,
#pricereviewCreate .container .pricreviewmain>.divitem td {
#pricereviewCreate .container .pricreviewmain > .divitem table, #pricereviewCreate .container .pricreviewmain > .divitem th, #pricereviewCreate .container .pricreviewmain > .divitem td {
font-size: 14px;
background-color: transparent;
}
#pricereviewCreate .container .pricreviewmain>.divitem table input,
#pricereviewCreate .container .pricreviewmain>.divitem table select,
#pricereviewCreate .container .pricreviewmain>.divitem table textarea,
#pricereviewCreate .container .pricreviewmain>.divitem th input,
#pricereviewCreate .container .pricreviewmain>.divitem th select,
#pricereviewCreate .container .pricreviewmain>.divitem th textarea,
#pricereviewCreate .container .pricreviewmain>.divitem td input,
#pricereviewCreate .container .pricreviewmain>.divitem td select,
#pricereviewCreate .container .pricreviewmain>.divitem td textarea {
#pricereviewCreate .container .pricreviewmain > .divitem table input, #pricereviewCreate .container .pricreviewmain > .divitem table select, #pricereviewCreate .container .pricreviewmain > .divitem th input, #pricereviewCreate .container .pricreviewmain > .divitem th select, #pricereviewCreate .container .pricreviewmain > .divitem td input, #pricereviewCreate .container .pricreviewmain > .divitem td select {
font-size: 13px;
padding: 0 13px;
}
#pricereviewCreate .container .pricreviewmain>.divitem table input[type=number]::-webkit-outer-spin-button,
#pricereviewCreate .container .pricreviewmain>.divitem table input[type=number]::-webkit-inner-spin-button,
#pricereviewCreate .container .pricreviewmain>.divitem th input[type=number]::-webkit-outer-spin-button,
#pricereviewCreate .container .pricreviewmain>.divitem th input[type=number]::-webkit-inner-spin-button,
#pricereviewCreate .container .pricreviewmain>.divitem td input[type=number]::-webkit-outer-spin-button,
#pricereviewCreate .container .pricreviewmain>.divitem td input[type=number]::-webkit-inner-spin-button {
#pricereviewCreate .container .pricreviewmain > .divitem table textarea, #pricereviewCreate .container .pricreviewmain > .divitem th textarea, #pricereviewCreate .container .pricreviewmain > .divitem td textarea {
font-size: 13px;
}
#pricereviewCreate .container .pricreviewmain > .divitem table input[type=number]::-webkit-outer-spin-button,
#pricereviewCreate .container .pricreviewmain > .divitem table input[type=number]::-webkit-inner-spin-button, #pricereviewCreate .container .pricreviewmain > .divitem th input[type=number]::-webkit-outer-spin-button,
#pricereviewCreate .container .pricreviewmain > .divitem th input[type=number]::-webkit-inner-spin-button, #pricereviewCreate .container .pricreviewmain > .divitem td input[type=number]::-webkit-outer-spin-button,
#pricereviewCreate .container .pricreviewmain > .divitem td input[type=number]::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}
#pricereviewCreate .container .pricreviewmain>.divitem table tr:hover .deleteBtn,
#pricereviewCreate .container .pricreviewmain>.divitem table tr:hover .copyBtn {
#pricereviewCreate .container .pricreviewmain > .divitem table tr:hover .deleteBtn, #pricereviewCreate .container .pricreviewmain > .divitem table tr:hover .copyBtn {
opacity: 1;
}
#pricereviewCreate .container .pricreviewmain>.divitem table .saletd {
#pricereviewCreate .container .pricreviewmain > .divitem table .copyBtn {
width: 30px;
height: 30px;
}
#pricereviewCreate .container .pricreviewmain > .divitem table .saletd {
position: relative;
}
#pricereviewCreate .container .pricreviewmain>.divitem table .saletd>.deleteBtn {
#pricereviewCreate .container .pricreviewmain > .divitem table .saletd > .deleteBtn {
position: absolute;
top: 50%;
transform: translateY(-50%);
@ -162,8 +125,7 @@
opacity: 0;
transition: 0.3s;
}
#pricereviewCreate .container .pricreviewmain>.divitem table .saletd>.copyBtn {
#pricereviewCreate .container .pricreviewmain > .divitem table .saletd > .copyBtn {
position: absolute;
top: 50%;
transform: translateY(-50%);
@ -173,58 +135,58 @@
width: 30px;
height: 30px;
}
#pricereviewCreate .container .pricreviewmain>.divitem table textarea {
#pricereviewCreate .container .pricreviewmain > .divitem table textarea {
height: auto;
min-height: 50px;
}
#pricereviewCreate .container .pricreviewmain>.filediv {
#pricereviewCreate .container .pricreviewmain > .filediv {
display: flex;
flex-direction: column;
margin-top: 20px;
}
#pricereviewCreate .container .pricreviewmain>.filediv label {
#pricereviewCreate .container .pricreviewmain > .filediv label {
display: flex;
align-items: center;
margin: 10px 0;
}
#pricereviewCreate .container .pricreviewmain>.filediv label p {
#pricereviewCreate .container .pricreviewmain > .filediv label p {
width: 100px;
font-size: 15px;
font-weight: 600;
}
#pricereviewCreate .container .pricreviewmain>.filediv label input[type=file] {
#pricereviewCreate .container .pricreviewmain > .filediv label input[type=file] {
width: 400px;
}
#pricereviewCreate .container .pricreviewmain>.filediv label button {
width: 90px;
#pricereviewCreate .container .pricreviewmain > .filediv label a, #pricereviewCreate .container .pricreviewmain > .filediv label button {
width: 100px;
height: 35px;
margin: 0;
margin-right: 15px;
margin-top: 20px;
}
.container-fluid,
.container {
.container-fluid, .container {
max-width: 1400px !important;
width: 100%;
}
.container-fluid h4,
.container h4 {
.container-fluid h4, .container h4 {
font-weight: 600;
}
.container-fluid .btn-secondary,
.container .btn-secondary {
.container-fluid .btn-secondary, .container .btn-secondary {
background-color: #6C757D;
}
[x-cloak][data-type=window-modal],
[x-cloak][data-type=errortext] {
display: none !important;
}
.errortext {
font-size: 12px !important;
color: red !important;
font-weight: 600 !important;
}
.window-modal {
position: fixed;
top: 0;
@ -234,59 +196,46 @@
background-color: rgba(0, 0, 0, 0.5);
z-index: 9;
padding: 20px;
display: none;
}
@keyframes fade-in {
0% {
transform: translate(-50%, -60%);
opacity: 0;
}
100% {
transform: translate(-50%, -55%);
opacity: 1;
}
}
.window-modal table,
.window-modal th,
.window-modal td {
.window-modal table, .window-modal th, .window-modal td {
border: 1px #ccc solid;
}
.window-modal table>thead tr th {
.window-modal table > thead tr th {
color: #A52A2A;
}
.window-modal table>tbody .selected {
.window-modal table > tbody .selected {
background-color: #E7FEFB;
}
.window-modal#optionModal .window-modal-content {
max-height: 80vh;
}
.window-modal#optionModal .window-modal-content .window-modal-body {
height: 400px;
overflow-y: scroll;
}
.window-modal#toElevatorModal .window-modal-content {
min-height: 270px;
height: auto;
}
.window-modal#toElevatorModal .window-modal-content .window-modal-body {
height: auto;
}
.window-modal .window-modal-content {
z-index: 9;
background-color: #fff;
border-radius: 10px;
position: absolute;
width: 1200px;
width: 90%;
padding: 30px;
top: 50%;
left: 50%;
@ -294,24 +243,19 @@
box-shadow: 0 5px 5px #222;
animation: fade-in 0.2s linear;
}
.window-modal .window-modal-content.modal-xl {
width: 1200px;
max-width: 1200px;
}
.window-modal .window-modal-content.modal-lg {
width: 800px;
max-width: 800px;
}
.window-modal .window-modal-content.modal-m {
width: 450px;
max-width: 450px;
}
.window-modal .window-modal-content .window-modal-header {
display: flex;
flex-direction: column;
}
.window-modal .window-modal-content .window-modal-header button.btn-close {
position: absolute;
top: 10px;
@ -321,11 +265,9 @@
outline: none;
border-radius: 50%;
}
.window-modal .window-modal-content .window-modal-header>div>input {
.window-modal .window-modal-content .window-modal-header > div > input {
width: 250px;
}
.window-modal .window-back {
position: absolute;
top: 0;
@ -335,60 +277,49 @@
background-color: transparent;
}
#pricereviewCheck>.container {
#pricereviewCheck > .container {
background-color: #F2F2F2;
border-radius: 15px;
padding: 20px;
}
#pricereviewCheck>.container textarea {
#pricereviewCheck > .container .historytable {
max-height: 0;
overflow: hidden;
}
#pricereviewCheck > .container textarea {
resize: vertical;
}
#pricereviewCheck>.container table,
#pricereviewCheck>.container th,
#pricereviewCheck>.container td {
#pricereviewCheck > .container table, #pricereviewCheck > .container th, #pricereviewCheck > .container td {
border: 1px #ccc solid;
}
#pricereviewCheck>.container table.noborder {
#pricereviewCheck > .container table.noborder {
border: none !important;
}
#pricereviewCheck>.container table.noborder th,
#pricereviewCheck>.container table.noborder td {
#pricereviewCheck > .container table.noborder th, #pricereviewCheck > .container table.noborder td {
border: none !important;
}
#pricereviewCheck>.container .customerinfo-table input {
#pricereviewCheck > .container .customerinfo-table input {
background-color: #EEE5E5;
}
#pricereviewCheck>.container .mi-table th {
#pricereviewCheck > .container .mi-table th {
font-weight: 600;
}
#pricereviewCheck>.container .mi-table input[type=text] {
#pricereviewCheck > .container .mi-table input[type=text] {
background-color: #EEEEEE;
cursor: not-allowed;
padding: 6px 12px;
font-size: 14px;
}
#pricereviewCheck>.container .mi-table .mi-info {
#pricereviewCheck > .container .mi-table .mi-info {
font-size: 14px;
}
#pricereviewCheck>.container .mi-table .mi-info span {
#pricereviewCheck > .container .mi-table .mi-info span {
font-size: 15px;
font-weight: 600;
}
#pricereviewCheck>.container .mi-table .mi-info .line {
#pricereviewCheck > .container .mi-table .mi-info .line {
width: 100%;
height: 0.5px;
margin: 30px 0;
background-color: #ccc;
}
/*# sourceMappingURL=pricereview.css.map */
}/*# sourceMappingURL=pricereview.css.map */

11
wms/mkt/css/pricereview.css.map

@ -1,10 +1 @@
{
"version": 3,
"sources": [
"pricereview.scss",
"pricereview.css"
],
"names": [],
"mappings": "AACI;EACI,WAAA;ACAR;ADEI;EACI,gBAAA;ACAR;ADEI;EACI,aAAA;ACAR;ADCQ;EACI,sBAAA;ACCZ;ADCQ;EACI,cAAA;ACCZ;ADCQ;EACI,yBAAA;ACCZ;ADKQ;EACI,sBAAA;EACA,aAAA;ACHZ;ADIY;EACI,YAAA;ACFhB;ADMY;EACI,yBAAA;ACJhB;ADOgB;EACI,eAAA;ACLpB;ADOgB;EACI,yBAAA;EACA,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,kBAAA;ACLpB;ADQY;EACI,eAAA;ACNhB;ADSQ;EACI,yBAAA;EACA,aAAA;EACA,kBAAA;EACA,cAAA;ACPZ;ADQY;EACI,WAAA;EACA,WAAA;EACA,YAAA;EACA,UAAA;EACA,iBAAA;EACA,eAAA;ACNhB;ADOgB;EACI,yBAAA;EACA,WAAA;ACLpB;ADOgB;EACI,yBAAA;EACA,WAAA;EACA,eAAA;EACA,WAAA;ACLpB;ADOgB;EACI,yBAAA;EACA,WAAA;ACLpB;ADSY;EACI,sBAAA;EACA,aAAA;EACA,kBAAA;ACPhB;ADQgB;EACI,aAAA;EACA,mBAAA;EACA,6BAAA;EACA,eAAA;EACA,mBAAA;ACNpB;ADOoB;EACI,gBAAA;ACLxB;ADSgB;EACI,eAAA;EACA,6BAAA;ACPpB;ADQoB;EACI,eAAA;ACNxB;ADQoB;;;;EAEA,wBAAA;EACA,SAAA;ACJpB;ADQoB;EACI,UAAA;ACNxB;ADQoB;EACI,kBAAA;ACNxB;ADOwB;EACI,kBAAA;EACA,QAAA;EACA,2BAAA;EACA,UAAA;EACA,UAAA;EACA,gBAAA;ACL5B;ADOwB;EACI,kBAAA;EACA,QAAA;EACA,2BAAA;EACA,WAAA;EACA,UAAA;EACA,gBAAA;EACA,WAAA;EACA,YAAA;ACL5B;ADQoB;EACI,YAAA;EACA,gBAAA;ACNxB;ADUY;EACI,aAAA;EACA,sBAAA;EACA,gBAAA;ACRhB;ADSgB;EACI,aAAA;EACA,mBAAA;EACA,cAAA;ACPpB;ADQoB;EACI,YAAA;EACA,eAAA;EACA,gBAAA;ACNxB;ADQoB;EACI,YAAA;ACNxB;ADQoB;EACI,WAAA;EACA,YAAA;EACA,SAAA;EACA,kBAAA;EACA,gBAAA;ACNxB;;ADcA;EACI,4BAAA;EACA,WAAA;ACXJ;ADYI;EACI,gBAAA;ACVR;ADYI;EACI,yBAAA;ACVR;;ADcA;EACI,eAAA;EACA,MAAA;EACA,OAAA;EACA,WAAA;EACA,aAAA;EACA,oCAAA;EACA,UAAA;EACA,aAAA;EACA,aAAA;ACXJ;ADYI;EACI;IACI,gCAAA;IACA,UAAA;ECVV;EDYM;IACI,gCAAA;IACA,UAAA;ECVV;AACF;ADYI;EACI,sBAAA;ACVR;ADYI;EACI,cAAA;ACVR;ADYI;EACI,yBAAA;ACVR;ADYI;EACI,gBAAA;ACVR;ADWQ;EACI,aAAA;EACA,kBAAA;ACTZ;ADYI;EACI,iBAAA;EACA,YAAA;ACVR;ADWQ;EACI,YAAA;ACTZ;ADYI;EACI,UAAA;EACA,sBAAA;EACA,mBAAA;EACA,kBAAA;EACA,aAAA;EACA,aAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;EACA,0BAAA;EACA,8BAAA;ACVR;ADWQ;EACI,aAAA;ACTZ;ADWQ;EACI,YAAA;ACTZ;ADWQ;EACI,YAAA;ACTZ;ADWQ;EACI,aAAA;EACA,sBAAA;ACTZ;ADUY;EACI,kBAAA;EACA,SAAA;EACA,WAAA;EACA,6BAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;ACRhB;ADUY;EACI,YAAA;ACRhB;ADYI;EACI,kBAAA;EACA,MAAA;EACA,OAAA;EACA,WAAA;EACA,YAAA;EACA,6BAAA;ACVR;;ADeI;EACI,yBAAA;EACA,mBAAA;EACA,aAAA;ACZR;ADaQ;EACI,gBAAA;ACXZ;ADaQ;EACI,sBAAA;ACXZ;ADaQ;EACI,uBAAA;ACXZ;ADYY;EACI,uBAAA;ACVhB;ADcY;EACI,yBAAA;ACZhB;ADgBY;EACI,gBAAA;ACdhB;ADgBY;EACI,yBAAA;EACA,mBAAA;EACA,iBAAA;EACA,eAAA;ACdhB;ADgBY;EACI,eAAA;ACdhB;ADegB;EACI,eAAA;EACA,gBAAA;ACbpB;ADegB;EACI,WAAA;EACA,aAAA;EACA,cAAA;EACA,sBAAA;ACbpB",
"file": "pricereview.css"
}
{"version":3,"sources":["pricereview.css","pricereview.scss"],"names":[],"mappings":"AAAA,gBAAgB;ACCZ;EACI,WAAA;ADCR;ACCI;EACI,gBAAA;ADCR;ACCI;EACI,wBAAA,EAAA,6BAAA;EACA,qBAAA,EAAA,eAAA;EACA,gBAAA,EAAA,SAAA;ADCR;ACCI;EACI,aAAA;ADCR;ACAQ;EACI,sBAAA;ADEZ;ACAQ;EACI,cAAA;ADEZ;ACAQ;EACI,yBAAA;ADEZ;ACIQ;EACI,sBAAA;EACA,YAAA;ADFZ;ACGY;EACI,YAAA;ADDhB;ACMY;EACI,yBAAA;ADJhB;ACOgB;EACI,eAAA;ADLpB;ACOgB;EACI,yBAAA;EACA,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,kBAAA;ADLpB;ACQY;EACI,eAAA;ADNhB;ACSQ;EACI,yBAAA;EACA,aAAA;EACA,kBAAA;EACA,cAAA;ADPZ;ACQY;EACI,WAAA;EACA,WAAA;EACA,YAAA;EACA,UAAA;EACA,gBAAA;EACA,kBAAA;EACA,eAAA;ADNhB;ACOgB;EACI,yBAAA;EACA,WAAA;ADLpB;ACOgB;EACI,yBAAA;EACA,WAAA;EACA,eAAA;EACA,WAAA;ADLpB;ACOgB;EACI,yBAAA;EACA,WAAA;ADLpB;ACSY;EACI,sBAAA;EACA,aAAA;EACA,kBAAA;ADPhB;ACQgB;EACI,aAAA;EACA,mBAAA;EACA,6BAAA;EACA,eAAA;EACA,mBAAA;ADNpB;ACOoB;EACI,gBAAA;ADLxB;ACSgB;EACI,eAAA;EACA,6BAAA;ADPpB;ACQoB;EACI,eAAA;EACA,eAAA;ADNxB;ACQoB;EACI,eAAA;ADNxB;ACQoB;;;;EAEA,wBAAA;EACA,SAAA;ADJpB;ACQoB;EACI,UAAA;ADNxB;ACQoB;EACI,WAAA;EACA,YAAA;ADNxB;ACQoB;EACI,kBAAA;ADNxB;ACOwB;EACI,kBAAA;EACA,QAAA;EACA,2BAAA;EACA,UAAA;EACA,UAAA;EACA,gBAAA;ADL5B;ACOwB;EACI,kBAAA;EACA,QAAA;EACA,2BAAA;EACA,WAAA;EACA,UAAA;EACA,gBAAA;EACA,WAAA;EACA,YAAA;ADL5B;ACQoB;EACI,YAAA;EACA,gBAAA;ADNxB;ACUY;EACI,aAAA;EACA,sBAAA;EACA,gBAAA;ADRhB;ACSgB;EACI,aAAA;EACA,mBAAA;EACA,cAAA;ADPpB;ACQoB;EACI,YAAA;EACA,eAAA;EACA,gBAAA;ADNxB;ACQoB;EACI,YAAA;ADNxB;ACQoB;EACI,YAAA;EACA,YAAA;EACA,SAAA;EACA,kBAAA;EACA,gBAAA;ADNxB;;ACcA;EACI,4BAAA;EACA,WAAA;ADXJ;ACYI;EACI,gBAAA;ADVR;ACYI;EACI,yBAAA;ADVR;;ACaA;;EAGI,wBAAA;ADXJ;;ACaA;EACI,0BAAA;EACA,qBAAA;EACA,2BAAA;ADVJ;;ACYA;EACI,eAAA;EACA,MAAA;EACA,OAAA;EACA,WAAA;EACA,aAAA;EACA,oCAAA;EACA,UAAA;EACA,aAAA;ADTJ;ACWI;EACI;IACI,gCAAA;IACA,UAAA;EDTV;ECWM;IACI,gCAAA;IACA,UAAA;EDTV;AACF;ACWI;EACI,sBAAA;ADTR;ACWI;EACI,cAAA;ADTR;ACWI;EACI,yBAAA;ADTR;ACWI;EACI,gBAAA;ADTR;ACUQ;EACI,aAAA;EACA,kBAAA;ADRZ;ACWI;EACI,iBAAA;EACA,YAAA;ADTR;ACUQ;EACI,YAAA;ADRZ;ACWI;EACI,UAAA;EACA,sBAAA;EACA,mBAAA;EACA,kBAAA;EACA,UAAA;EACA,aAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;EACA,0BAAA;EACA,8BAAA;ADTR;ACUQ;EACI,iBAAA;ADRZ;ACUQ;EACI,gBAAA;ADRZ;ACUQ;EACI,gBAAA;ADRZ;ACUQ;EACI,aAAA;EACA,sBAAA;ADRZ;ACSY;EACI,kBAAA;EACA,SAAA;EACA,WAAA;EACA,6BAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;ADPhB;ACSY;EACI,YAAA;ADPhB;ACWI;EACI,kBAAA;EACA,MAAA;EACA,OAAA;EACA,WAAA;EACA,YAAA;EACA,6BAAA;ADTR;;ACcI;EACI,yBAAA;EACA,mBAAA;EACA,aAAA;ADXR;ACYQ;EACI,aAAA;EACA,gBAAA;ADVZ;ACYQ;EACI,gBAAA;ADVZ;ACYQ;EACI,sBAAA;ADVZ;ACYQ;EACI,uBAAA;ADVZ;ACWY;EACI,uBAAA;ADThB;ACaY;EACI,yBAAA;ADXhB;ACeY;EACI,gBAAA;ADbhB;ACeY;EACI,yBAAA;EACA,mBAAA;EACA,iBAAA;EACA,eAAA;ADbhB;ACeY;EACI,eAAA;ADbhB;ACcgB;EACI,eAAA;EACA,gBAAA;ADZpB;ACcgB;EACI,WAAA;EACA,aAAA;EACA,cAAA;EACA,sBAAA;ADZpB","file":"pricereview.css"}

357
wms/mkt/css/pricereview.scss

@ -1,61 +1,47 @@
#pricereviewCreate {
input[type='text'],
input[type='number'],
select {
#pricereviewCreate{
input[type='text'], input[type='number'], select{
margin: 1px;
}
textarea {
textarea{
resize: vertical;
}
>.modal {
select{
-webkit-appearance: none; /* 針對 Chrome, Safari, Opera */
-moz-appearance: none; /* 針對 Firefox */
appearance: none; /* 標準語法 */
}
>.modal{
padding: 20px;
table,
th,
td {
border: 1px #ccc solid;
table, th, td{
border:1px #ccc solid;
}
table>thead tr th {
color: #A52A2A;
table > thead tr th{
color:#A52A2A;
}
table>tbody .selected {
table > tbody .selected{
background-color: #E7FEFB;
}
table>tbody .selected td {}
table > tbody .selected td{
}
}
.container {
table,
th,
td {
border: 1px #ccc solid;
padding: 15px;
&.noborder,
.noborder th,
.noborder td {
border: none;
.container{
table, th, td{
border:1px #ccc solid;
padding: 9px;
&.noborder, .noborder th, .noborder td{
border:none;
}
}
table {
thead th {
table{
thead th{
background-color: #6D9EEB;
}
tbody {
td input {
td input{
font-size: 14px;
}
th {
th{
background-color: #CCE4F8;
font-size: 14px;
padding: 15px 2px;
@ -63,143 +49,125 @@
text-align: center;
}
}
input {
input{
font-size: 13px;
}
}
.pricreviewmain {
.pricreviewmain{
background-color: #F2F2F2;
padding: 20px;
border-radius: 6px;
margin: 30px 0;
button {
color: #fff;
border-radius: 6px ;
margin:30px 0;
button{
color:#fff;
width: 55px;
height: 30px;
padding: 0;
margin-left: 10px;
margin-left: 6px;
margin-bottom: 2px;
font-size: 13px;
&.addbtn {
&.addbtn{
background-color: #337AB7;
width: 30px;
}
&.deleteBtn {
&.deleteBtn{
background-color: #D9534F;
color: #fff;
color:#fff;
font-size: 12px;
width: 30px;
}
&.selectElevator {
&.selectElevator{
background-color: #D9534F;
color: #fff;
color:#fff;
}
}
>.divitem {
border: 1px #ccc solid;
>.divitem{
border:1px #ccc solid;
padding: 10px;
border-radius: 4px;
.title {
border-radius: 4px ;
.title{
display: flex;
align-items: center;
border-bottom: 1px #ccc solid;
padding: 10px 0;
margin-bottom: 10px;
h6 {
h6{
font-weight: 600;
}
}
table,
th,
td {
table, th, td{
font-size: 14px;
background-color: transparent;
input,
select,
textarea {
input, select{
font-size: 13px;
padding: 0 13px;
}
textarea{
font-size: 13px;
}
input[type=number]::-webkit-outer-spin-button,
input[type=number]::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
-webkit-appearance: none;
margin: 0;
}
}
table {
tr:hover .deleteBtn,
tr:hover .copyBtn {
tr:hover .deleteBtn ,tr:hover .copyBtn{
opacity: 1;
}
.saletd {
.copyBtn{
width: 30px;
height: 30px;
}
.saletd{
position: relative;
>.deleteBtn {
>.deleteBtn{
position: absolute;
top: 50%;
transform: translateY(-50%);
right: 2px;
right:2px;
opacity: 0;
transition: .3s;
}
>.copyBtn {
>.copyBtn{
position: absolute;
top: 50%;
transform: translateY(-50%);
right: 38px;
right:38px;
opacity: 0;
transition: .3s;
width: 30px;
height: 30px;
}
}
textarea {
textarea{
height: auto;
min-height: 50px;
}
}
}
>.filediv {
>.filediv{
display: flex;
flex-direction: column;
margin-top: 20px;
label {
label{
display: flex;
align-items: center;
margin: 10px 0;
p {
width: 100px;
margin:10px 0;
p{
width:100px;
font-size: 15px;
font-weight: 600;
}
input[type="file"] {
width: 400px
input[type="file"]{
width:400px
}
button {
width: 90px;
a, button{
width:100px;
height: 35px;
margin: 0;
margin:0;
margin-right: 15px;
margin-top: 20px;
}
@ -209,166 +177,167 @@
}
}
.container-fluid,
.container {
max-width: 1400px !important;
.container-fluid, .container{
max-width:1400px !important;
width: 100%;
h4 {
h4{
font-weight: 600;
}
.btn-secondary {
.btn-secondary{
background-color: #6C757D;
}
}
.window-modal {
[x-cloak][data-type="window-modal"],
[x-cloak][data-type="errortext"]
{
display: none !important;
}
.errortext{
font-size:12px !important;
color:red !important;
font-weight:600 !important;
}
.window-modal{
position: fixed;
top: 0;
left: 0;
left:0;
width: 100%;
height: 100vh;
background-color: rgba(0, 0, 0, 0.5);
z-index: 9;
padding: 20px;
display: none;
// display: none;
@keyframes fade-in {
0% {
transform: translate(-50%, -55%);
0%{
transform: translate(-50%, -60%);
opacity: 0;
}
100% {
transform: translate(-50%, -50%);
100%{
transform: translate(-50%, -55%);
opacity: 1;
}
}
table,
th,
td {
border: 1px #ccc solid;
table, th, td{
border:1px #ccc solid;
}
table>thead tr th {
color: #A52A2A;
table > thead tr th{
color:#A52A2A;
}
table>tbody .selected {
table > tbody .selected{
background-color: #E7FEFB;
}
.window-modal-content {
&#optionModal .window-modal-content{
max-height: 80vh;
.window-modal-body{
height: 400px;
overflow-y: scroll;
}
}
&#toElevatorModal .window-modal-content{
min-height: 270px;
height: auto;
.window-modal-body{
height: auto;
}
}
.window-modal-content{
z-index: 9;
background-color: #fff;
border-radius: 10px;
position: absolute;
width: 1200px;
width:90%;
padding: 30px;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
left:50%;
transform: translate(-50%, -55%);
box-shadow: 0 5px 5px #222;
animation: fade-in .2s linear;
&.modal-xl {
width: 1200px;
&.modal-xl{
max-width:1200px;
}
&.modal-lg {
width: 800px;
&.modal-lg{
max-width:800px;
}
&.modal-m {
width: 400px;
&.modal-m{
max-width:450px;
}
.window-modal-header {
.window-modal-header{
display: flex;
flex-direction: column;
button.btn-close {
button.btn-close{
position: absolute;
top: 10px;
right: 10px;
right:10px;
background-color: transparent;
border: none;
border:none;
outline: none;
border-radius: 50%;
}
>div>input {
>div > input{
width: 250px;
}
}
.window-modal-body {
overflow-y: scroll;
height: 400px;
}
}
.window-back{
position: absolute;
top: 0;
left:0;
width: 100%;
height: 100%;
background-color: transparent;
}
}
#pricereviewCheck {
>.container {
#pricereviewCheck{
>.container{
background-color: #F2F2F2;
border-radius: 15px;
padding: 20px;
textarea {
.historytable{
max-height: 0;
overflow: hidden;
}
textarea{
resize: vertical;
}
table,
th,
td {
border: 1px #ccc solid;
table, th, td{
border:1px #ccc solid;
}
table.noborder {
border: none !important;
th,
td {
border: none !important;
table.noborder{
border:none !important;
th ,td{
border:none !important;
}
}
.customerinfo-table {
input {
.customerinfo-table{
input{
background-color: #EEE5E5;
}
}
.mi-table {
th {
.mi-table{
th{
font-weight: 600;
}
input[type=text] {
input[type=text]{
background-color: #EEEEEE;
cursor: not-allowed;
padding: 6px 12px;
font-size: 14px;
}
.mi-info {
.mi-info{
font-size: 14px;
span {
span{
font-size: 15px;
font-weight: 600;
}
.line {
.line{
width: 100%;
height: .5px;
margin: 30px 0;
margin:30px 0;
background-color: #ccc;
}
}
}
}
}

76
wms/mkt/exportTable.php

@ -0,0 +1,76 @@
<?php
require_once "./conn.php";
$sql_str = "SELECT pricereview_main.*, account.name AS person_name FROM pricereview_main
LEFT JOIN account ON account.accountid = pricereview_main.person
WHERE pricereview_main.status <> 'D'
AND pricereview_main.create_at >= '2024-01-01'
AND pricereview_main.create_at <= '2024-01-31'
AND ekind = '汰改'";
$stmt = $conn->prepare($sql_str);
// $stmt->bindParam(':vol_no', $vol_no);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<table border=1>
<tr>
<th>ID</th>
<th>卷號</th>
<th>營業員</th>
<th>客戶名稱</th>
<th>案件名稱</th>
<th>牌價總額</th>
<th>售價總額</th>
<th>價率</th>
<th>預定成交日</th>
<th>預定交期</th>
<th>建檔人</th>
<th>建檔時間</th>
<th>狀態</th>
</tr>
<?php foreach($result as $item): ?>
<tr>
<td><?php echo $item['id']; ?></td>
<td><?php echo $item['contractno']; ?></td>
<td><?php echo $item['person_name']; ?></td>
<td><?php echo $item['company']; ?></td>
<td><?php echo $item['case_name']; ?></td>
<td><?php echo $item['price_lowest']; ?></td>
<td><?php echo $item['price_total']; ?></td>
<td><?php echo ((int)$item['price_total'] / (int)$item['price_lowest'] * 100) ."%"; ?></td>
<td><?php echo $item['predeal_date']; ?></td>
<td><?php echo $item['facilitok_date']; ?></td>
<td><?php echo $item['creater']; ?></td>
<td><?php echo $item['create_at']; ?></td>
<td>
<?php
if($item['status'] == 'YY'){
echo "結案同意";
}elseif($item['status'] == 'YS'){
echo "簽核中";
}elseif($item['status'] == 'Y1'){
echo "暫存";
}elseif($item['status'] == 'YN'){
echo "結案不同意";
}else{
echo "---";
}
?>
</td>
</tr>
<?php endforeach; ?>
</table>
<script src="table2excel/dist/table2excel.min.js"></script>
<script>
const table2Excel = new Table2Excel('table') // new Table2Excel('table')
table2Excel.export('汰改價審明細', 'xlsx') // table2Excel.export('my-exported-table', 'xlsx')
</script>

69
wms/mkt/exportTable2.php

@ -0,0 +1,69 @@
<?php
require_once "./conn.php";
// $sql_str = "SELECT pricereview_main.*, account.name AS person_name FROM pricereview_main
// LEFT JOIN account ON account.accountid = pricereview_main.person
// WHERE pricereview_main.status <> 'D'
// AND pricereview_main.create_at >= '2024-01-01'
// AND pricereview_main.create_at <= '2024-01-31'
// AND ekind = '汰改'";
// $stmt = $conn->prepare($sql_str);
// // $stmt->bindParam(':vol_no', $vol_no);
// $stmt->execute();
// $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
$sql_str = "SELECT con_maintance_examine_apply.*, account.name AS person_name, con_maintance_examine_clear.* FROM con_maintance_examine_apply
LEFT JOIN con_maintance_examine_clear ON con_maintance_examine_clear.apply_key = con_maintance_examine_apply.apply_key
LEFT JOIN account ON account.accountid = con_maintance_examine_apply.salesman
WHERE con_maintance_examine_apply.create_at >= '2024-01-01' AND con_maintance_examine_apply.create_at <= '2024-01-31'";
$stmt = $conn->prepare($sql_str);
// $stmt->bindParam(':vol_no', $vol_no);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<table border=1>
<tr>
<th>ID</th>
<th>卷號</th>
<th>營業員</th>
<th>客戶名稱</th>
<th>案件名稱</th>
<th>標準價</th>
<th>售價總額</th>
<th>契約成交價</th>
<th>保養月數</th>
<th>建檔人</th>
<th>建檔時間</th>
<th>狀態</th>
</tr>
<?php foreach($result as $key=>$item): ?>
<tr>
<td><?php echo $key+1; ?></td>
<td><?php echo $item['vol_no']; ?></td>
<td><?php echo $item['person_name']; ?></td>
<td><?php echo $item['customer']; ?></td>
<td><?php echo $item['case_name']; ?></td>
<td><?php echo $item['stand_price']; ?></td>
<td><?php echo $item['contract_price']; ?></td>
<td><?php echo $item['sold_price']; ?></td>
<td><?php echo $item['maintain_months'] . '月'; ?></td>
<td><?php echo $item['creater']; ?></td>
<td><?php echo $item['create_at']; ?></td>
<td>
簽核中
</td>
</tr>
<?php endforeach; ?>
</table>
<script src="table2excel/dist/table2excel.min.js"></script>
<script>
const table2Excel = new Table2Excel('table') // new Table2Excel('table')
table2Excel.export('保養價審', 'xlsx') // table2Excel.export('my-exported-table', 'xlsx')
</script>

BIN
wms/mkt/files/MAF200.xlsx

Binary file not shown.

BIN
wms/mkt/files/MAQ100.xlsx

Binary file not shown.

280
wms/mkt/price_normal-index.php

@ -36,6 +36,8 @@ include "../header.php";
<li><a href="#4a" data-toggle="tab">高速梯</a></li>
<li><a href="#5a" data-toggle="tab">小機房貨梯</a></li>
<li><a href="#6a" data-toggle="tab">平台梯</a></li>
<li><a href="#7a" data-toggle="tab">無機房貨梯</a></li>
<li><a href="#8a" data-toggle="tab">強趨梯</a></li>
</ul>
<div class="tab-content clearfix">
<div class="tab-pane active" id="1a">
@ -676,97 +678,97 @@ include "../header.php";
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAP100-280*2-CO09</td>
<td class=xl109 style='border-top:none;border-left:none'>75.0 </td>
<td class=xl109 style='border-top:none;border-left:none'>3.0 </td>
<td class=xl110 style='border-top:none;border-left:none'>岩板;L型開門另加3萬元/</td>
<td class=xl110 style='border-top:none;border-left:none'>岩板;L型開門另加3萬元/</td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAP100-280*3-CO09</td>
<td class=xl109 style='border-top:none;border-left:none'>86.5 </td>
<td class=xl109 style='border-top:none;border-left:none'>6.0 </td>
<td class=xl110 style='border-top:none;border-left:none'>岩板;L型開門另加3萬元/</td>
<td class=xl110 style='border-top:none;border-left:none'>岩板;L型開門另加3萬元/</td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAP100-280*4-CO09</td>
<td class=xl109 style='border-top:none;border-left:none'>94.5 </td>
<td class=xl109 style='border-top:none;border-left:none'>9.0 </td>
<td class=xl110 style='border-top:none;border-left:none'>岩板;L型開門另加3萬元/</td>
<td class=xl110 style='border-top:none;border-left:none'>岩板;L型開門另加3萬元/</td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAP100-280*5-CO09</td>
<td class=xl109 style='border-top:none;border-left:none'>102.5 </td>
<td class=xl109 style='border-top:none;border-left:none'>12.0 </td>
<td class=xl110 style='border-top:none;border-left:none'>岩板;L型開門另加3萬元/</td>
<td class=xl110 style='border-top:none;border-left:none'>岩板;L型開門另加3萬元/</td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAP100-280*2-CO09</td>
<td class=xl109 style='border-top:none;border-left:none'>82.0 </td>
<td class=xl109 style='border-top:none;border-left:none'>3.0 </td>
<td class=xl110 style='border-top:none;border-left:none'>人造皮革;L型開門另加3萬元/</td>
<td class=xl110 style='border-top:none;border-left:none'>人造皮革;L型開門另加3萬元/</td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAP100-280*3-CO09</td>
<td class=xl109 style='border-top:none;border-left:none'>90.0 </td>
<td class=xl109 style='border-top:none;border-left:none'>6.0 </td>
<td class=xl110 style='border-top:none;border-left:none'>人造皮革;L型開門另加3萬元/</td>
<td class=xl110 style='border-top:none;border-left:none'>人造皮革;L型開門另加3萬元/</td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAP100-280*4-CO09</td>
<td class=xl109 style='border-top:none;border-left:none'>98.0 </td>
<td class=xl109 style='border-top:none;border-left:none'>9.0 </td>
<td class=xl110 style='border-top:none;border-left:none'>人造皮革;L型開門另加3萬元/</td>
<td class=xl110 style='border-top:none;border-left:none'>人造皮革;L型開門另加3萬元/</td>
</tr>
<tr class=xl66 height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAP100-280*5-CO09</td>
<td class=xl109 style='border-top:none;border-left:none'>107.0 </td>
<td class=xl109 style='border-top:none;border-left:none'>12.0 </td>
<td class=xl110 style='border-top:none;border-left:none'>人造皮革;L型開門另加3萬元/</td>
<td class=xl110 style='border-top:none;border-left:none'>人造皮革;L型開門另加3萬元/</td>
</tr>
<tr class=xl66 height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAP100-320*2-CO09</td>
<td class=xl109 style='border-top:none;border-left:none'>77.5 </td>
<td class=xl109 style='border-top:none;border-left:none'>3.0 </td>
<td class=xl110 style='border-top:none;border-left:none'>岩板;L型開門另加3萬元/</td>
<td class=xl110 style='border-top:none;border-left:none'>岩板;L型開門另加3萬元/</td>
</tr>
<tr class=xl66 height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAP100-320*3-CO09</td>
<td class=xl109 style='border-top:none;border-left:none'>88.5 </td>
<td class=xl109 style='border-top:none;border-left:none'>6.0 </td>
<td class=xl110 style='border-top:none;border-left:none'>岩板;L型開門另加3萬元/</td>
<td class=xl110 style='border-top:none;border-left:none'>岩板;L型開門另加3萬元/</td>
</tr>
<tr class=xl66 height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAP100-320*4-CO09</td>
<td class=xl109 style='border-top:none;border-left:none'>96.5 </td>
<td class=xl109 style='border-top:none;border-left:none'>9.0 </td>
<td class=xl110 style='border-top:none;border-left:none'>岩板;L型開門另加3萬元/</td>
<td class=xl110 style='border-top:none;border-left:none'>岩板;L型開門另加3萬元/</td>
</tr>
<tr class=xl66 height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAP100-320*5-CO09</td>
<td class=xl109 style='border-top:none;border-left:none'>106.0 </td>
<td class=xl109 style='border-top:none;border-left:none'>12.0 </td>
<td class=xl110 style='border-top:none;border-left:none'>岩板;L型開門另加3萬元/</td>
<td class=xl110 style='border-top:none;border-left:none'>岩板;L型開門另加3萬元/</td>
</tr>
<tr class=xl66 height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAP100-320*2-CO09</td>
<td class=xl109 style='border-top:none;border-left:none'>84.0 </td>
<td class=xl109 style='border-top:none;border-left:none'>3.0 </td>
<td class=xl110 style='border-top:none;border-left:none'>人造皮革;L型開門另加3萬元/</td>
<td class=xl110 style='border-top:none;border-left:none'>人造皮革;L型開門另加3萬元/</td>
</tr>
<tr class=xl66 height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAP100-320*3-CO09</td>
<td class=xl109 style='border-top:none;border-left:none'>92.0 </td>
<td class=xl109 style='border-top:none;border-left:none'>6.0 </td>
<td class=xl110 style='border-top:none;border-left:none'>人造皮革;L型開門另加3萬元/</td>
<td class=xl110 style='border-top:none;border-left:none'>人造皮革;L型開門另加3萬元/</td>
</tr>
<tr class=xl66 height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAP100-320*4-CO09</td>
<td class=xl109 style='border-top:none;border-left:none'>100.0 </td>
<td class=xl109 style='border-top:none;border-left:none'>9.0 </td>
<td class=xl110 style='border-top:none;border-left:none'>人造皮革;L型開門另加3萬元/</td>
<td class=xl110 style='border-top:none;border-left:none'>人造皮革;L型開門另加3萬元/</td>
</tr>
<tr class=xl66 height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAP100-320*5-CO09</td>
<td class=xl109 style='border-top:none;border-left:none'>108.0 </td>
<td class=xl109 style='border-top:none;border-left:none'>12.0 </td>
<td class=xl110 style='border-top:none;border-left:none'>人造皮革;L型開門另加3萬元/</td>
<td class=xl110 style='border-top:none;border-left:none'>人造皮革;L型開門另加3萬元/</td>
</tr>
<tr class=xl66 height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'> </td>
@ -813,6 +815,252 @@ include "../header.php";
<![endif]>
</table>
</div>
<div class="tab-pane" id="7a">
<a href="./files/MAF200.xlsx" download class="btn btn-success" style="margin:16px 0 ">下載電子檔(無機房貨梯)</a>
<table border=0 cellpadding=0 cellspacing=0 width=783 style='border-collapse:
collapse;table-layout:fixed;width:588pt'>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl123 width=261 style='height:38.0pt;width:196pt'></td>
<td class=xl123 width=261 style='width:196pt'>無機房貨梯</td>
<td class=xl123 width=261 style='width:196pt'>單位:萬元</td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl95 style='height:38.0pt'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'>                </span></td>
<td class=xl88 style='border-left:none'>標準價</td>
<td class=xl92 style='border-left:none'>(±1S)<span style='mso-spacerun:yes'> </span></td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAF200-750*3-2S45</td>
<td class=xl109 style='border-top:none;border-left:none'>113.0 </td>
<td class=xl110 style='border-top:none;border-left:none'>5.3 </td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAF200-750*3-2S60</td>
<td class=xl109 style='border-top:none;border-left:none'>115.0 </td>
<td class=xl110 style='border-top:none;border-left:none'>5.3 </td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAF200-1000*3-2S45</td>
<td class=xl109 style='border-top:none;border-left:none'>136.0 </td>
<td class=xl110 style='border-top:none;border-left:none'>5.3 </td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAF200-1500*3-2S45</td>
<td class=xl109 style='border-top:none;border-left:none'>165.7 </td>
<td class=xl110 style='border-top:none;border-left:none'>9.8 </td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAF200-1500*3-2S60</td>
<td class=xl109 style='border-top:none;border-left:none'>169.2 </td>
<td class=xl110 style='border-top:none;border-left:none'>9.8 </td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAF200-2000*3-2S45</td>
<td class=xl109 style='border-top:none;border-left:none'>186.0 </td>
<td class=xl110 style='border-top:none;border-left:none'>10.0 </td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAF200-2000*3-2S60</td>
<td class=xl109 style='border-top:none;border-left:none'>188.7 </td>
<td class=xl110 style='border-top:none;border-left:none'>10.0 </td>
</tr>
<tr class=xl66 height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAF200-2500*3-4PCO45</td>
<td class=xl109 style='border-top:none;border-left:none'>263.3 </td>
<td class=xl110 style='border-top:none;border-left:none'>14.2 </td>
</tr>
<tr class=xl66 height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAF200-2500*3-4PCO60</td>
<td class=xl109 style='border-top:none;border-left:none'>265.0 </td>
<td class=xl110 style='border-top:none;border-left:none'>14.2 </td>
</tr>
<tr class=xl66 height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAF200-3000*3-4PCO45</td>
<td class=xl109 style='border-top:none;border-left:none'>281.5 </td>
<td class=xl110 style='border-top:none;border-left:none'>15.2 </td>
</tr>
<tr class=xl66 height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAF200-3000*3-4PCO60</td>
<td class=xl109 style='border-top:none;border-left:none'>283.0 </td>
<td class=xl110 style='border-top:none;border-left:none'>15.2 </td>
</tr>
<tr class=xl66 height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAF200-3500*3-4PCO45</td>
<td class=xl109 style='border-top:none;border-left:none'>330.6 </td>
<td class=xl110 style='border-top:none;border-left:none'>18.2 </td>
</tr>
<tr class=xl66 height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAF200-3500*3-4PCO60</td>
<td class=xl109 style='border-top:none;border-left:none'>333.2 </td>
<td class=xl110 style='border-top:none;border-left:none'>18.2 </td>
</tr>
<tr class=xl66 height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'></td>
<td class=xl109 style='border-top:none;border-left:none'> </td>
<td class=xl110 style='border-top:none;border-left:none'> </td>
</tr>
<tr class=xl67 height=33 style='mso-height-source:userset;height:25.25pt'>
<td height=33 class=xl99 style='height:25.25pt'>註:<br>1、最低為2停</td>
<td class=xl99></td>
<td class=xl99></td>
</tr>
<tr class=xl67 height=33 style='mso-height-source:userset;height:25.25pt'>
<td height=33 class=xl99 colspan=2 style='height:25.25pt;mso-ignore:colspan'>2、處長權限為發佈價之80%。</td>
<td class=xl99></td>
</tr>
<![if supportMisalignedColumns]>
<tr height=0 style='display:none'>
<td width=261 style='width:196pt'></td>
<td width=261 style='width:196pt'></td>
<td width=261 style='width:196pt'></td>
</tr>
<![endif]>
</table>
</div>
<div class="tab-pane" id="8a">
<a href="./files/MAQ100.xlsx" download class="btn btn-success" style="margin:16px 0 ">下載電子檔(強趨梯)</a>
<table border=0 cellpadding=0 cellspacing=0 width=783 style='border-collapse:
collapse;table-layout:fixed;width:588pt'>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl123 width=200 style='height:38.0pt;width:196pt'></td>
<td class=xl123 width=200 style='width:150pt'>強趨梯</td>
<td class=xl123 width=200 style='width:150pt'>單位:萬元</td>
<td class=xl123 width=200 style='width:150pt'></td>
<td class=xl123 width=200 style='width:150pt'></td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl95 style='height:38.0pt'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'>                </span></td>
<td class=xl88 style='border-left:none'>產品系列</td>
<td class=xl88 style='border-left:none'>樓層</td>
<td class=xl88 style='border-left:none'>標準價</td>
<td class=xl92 style='border-left:none'>(±1S)<span style='mso-spacerun:yes'> </span></td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAQ100-4*-4PCO24</td>
<td class=xl109 style='border-top:none;border-left:none'>G5 </td>
<td class=xl109 style='border-top:none;border-left:none'>4 </td>
<td class=xl109 style='border-top:none;border-left:none'>70.0 </td>
<td class=xl110 style='border-top:none;border-left:none'>2.0 </td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAQ100-4*-4PCO24</td>
<td class=xl109 style='border-top:none;border-left:none'>G6 </td>
<td class=xl109 style='border-top:none;border-left:none'>4 </td>
<td class=xl109 style='border-top:none;border-left:none'>70.0 </td>
<td class=xl110 style='border-top:none;border-left:none'>2.0 </td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAQ100-4*-4PCO24</td>
<td class=xl109 style='border-top:none;border-left:none'>G10 </td>
<td class=xl109 style='border-top:none;border-left:none'>4 </td>
<td class=xl109 style='border-top:none;border-left:none'>72.5 </td>
<td class=xl110 style='border-top:none;border-left:none'>2.0 </td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAQ100-4*-4PCO24</td>
<td class=xl109 style='border-top:none;border-left:none'>G20 </td>
<td class=xl109 style='border-top:none;border-left:none'>4 </td>
<td class=xl109 style='border-top:none;border-left:none'>72.5 </td>
<td class=xl110 style='border-top:none;border-left:none'>2.0 </td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAQ100-4*-4PCO24</td>
<td class=xl109 style='border-top:none;border-left:none'>A2 </td>
<td class=xl109 style='border-top:none;border-left:none'>4 </td>
<td class=xl109 style='border-top:none;border-left:none'>77.5 </td>
<td class=xl110 style='border-top:none;border-left:none'>2.0 </td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAQ100-4*-4PCO24</td>
<td class=xl109 style='border-top:none;border-left:none'>A3 </td>
<td class=xl109 style='border-top:none;border-left:none'>4 </td>
<td class=xl109 style='border-top:none;border-left:none'>78.7 </td>
<td class=xl110 style='border-top:none;border-left:none'>2.0 </td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAQ100-4*-4PCO24</td>
<td class=xl109 style='border-top:none;border-left:none'>A6</td>
<td class=xl109 style='border-top:none;border-left:none'>4 </td>
<td class=xl109 style='border-top:none;border-left:none'>77.5 </td>
<td class=xl110 style='border-top:none;border-left:none'>2.0 </td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAQ100-4*-4PCO24</td>
<td class=xl109 style='border-top:none;border-left:none'>A8 </td>
<td class=xl109 style='border-top:none;border-left:none'>4 </td>
<td class=xl109 style='border-top:none;border-left:none'>78.7 </td>
<td class=xl110 style='border-top:none;border-left:none'>2.0 </td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAQ100-4*-2PCO24</td>
<td class=xl109 style='border-top:none;border-left:none'>G5 </td>
<td class=xl109 style='border-top:none;border-left:none'>4 </td>
<td class=xl109 style='border-top:none;border-left:none'>68.0 </td>
<td class=xl110 style='border-top:none;border-left:none'>2.0 </td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAQ100-4*-2PCO24</td>
<td class=xl109 style='border-top:none;border-left:none'>G6 </td>
<td class=xl109 style='border-top:none;border-left:none'>4 </td>
<td class=xl109 style='border-top:none;border-left:none'>68.0 </td>
<td class=xl110 style='border-top:none;border-left:none'>2.0 </td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAQ100-4*-2PCO24</td>
<td class=xl109 style='border-top:none;border-left:none'>G10 </td>
<td class=xl109 style='border-top:none;border-left:none'>4 </td>
<td class=xl109 style='border-top:none;border-left:none'>70.5 </td>
<td class=xl110 style='border-top:none;border-left:none'>2.0 </td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAQ100-4*-2PCO24</td>
<td class=xl109 style='border-top:none;border-left:none'>G20 </td>
<td class=xl109 style='border-top:none;border-left:none'>4 </td>
<td class=xl109 style='border-top:none;border-left:none'>70.5 </td>
<td class=xl110 style='border-top:none;border-left:none'>2.0 </td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAQ100-4*-2PCO24</td>
<td class=xl109 style='border-top:none;border-left:none'>A2 </td>
<td class=xl109 style='border-top:none;border-left:none'>4 </td>
<td class=xl109 style='border-top:none;border-left:none'>75.5 </td>
<td class=xl110 style='border-top:none;border-left:none'>2.0 </td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAQ100-4*-2PCO24</td>
<td class=xl109 style='border-top:none;border-left:none'>A3 </td>
<td class=xl109 style='border-top:none;border-left:none'>4 </td>
<td class=xl109 style='border-top:none;border-left:none'>76.5 </td>
<td class=xl110 style='border-top:none;border-left:none'>2.0 </td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAQ100-4*-2PCO24</td>
<td class=xl109 style='border-top:none;border-left:none'>A6</td>
<td class=xl109 style='border-top:none;border-left:none'>4 </td>
<td class=xl109 style='border-top:none;border-left:none'>75.5 </td>
<td class=xl110 style='border-top:none;border-left:none'>2.0 </td>
</tr>
<tr height=51 style='mso-height-source:userset;height:38.0pt'>
<td height=51 class=xl89 style='height:38.0pt;border-top:none'>MAQ100-4*-2PCO24</td>
<td class=xl109 style='border-top:none;border-left:none'>A8 </td>
<td class=xl109 style='border-top:none;border-left:none'>4 </td>
<td class=xl109 style='border-top:none;border-left:none'>76.5 </td>
<td class=xl110 style='border-top:none;border-left:none'>2.0 </td>
</tr>
<tr class=xl67 height=33 style='mso-height-source:userset;height:25.25pt'>
<td height=33 class=xl99 colspan=2 style='height:25.25pt;mso-ignore:colspan'><br>1、處長權限為發佈價之80%<br>
2、開門改2PCO,井道不變時,出入口寬需由800mm變成為600mm;或井道需加寬400mm</td>
<td class=xl99></td>
</tr>
<![if supportMisalignedColumns]>
<tr height=0 style='display:none'>
<td width=261 style='width:196pt'></td>
<td width=261 style='width:196pt'></td>
<td width=261 style='width:196pt'></td>
</tr>
<![endif]>
</table>
</div>
</div>
</div>
</div>

16
wms/mkt/pricereview-index.php

@ -81,7 +81,7 @@ if (!empty($_GET['check']) && $_GET['check'] == '1') {
</script>
";
}
$sql = "SELECT mid,$sign FROM pricereview_sign WHERE $clause ORDER BY mid";
$sql = "SELECT mid,$sign FROM pricereview_sign WHERE $clause ORDER BY id DESC";
$stmt = $conn->prepare($sql);
$stmt->execute();
@ -241,7 +241,8 @@ $para = "function_name=pricereview&" . $token_link;
$(function() {
$('#table_index2').DataTable({
"scrollX": true,
"pageLength": 50
"pageLength": 50,
displayLength: 10000,
});
/*
var api = $('#table_index').dataTable().api();
@ -401,7 +402,7 @@ if ($data) :
$sign1 = $sign2 = $sign3 = $sign4 = "";
$oneself = ($data["creater"] == $user_id) ? 1 : 0; // 是否為營業員本人
// 簽核狀況
$db_query = "select sign1, sign2, sign3, sign4 from pricereview_sign where mid = '" . $data["id"] . "'";
$db_query = "select sign1, sign2, sign3, sign4 from pricereview_sign where mid = '" . $data["id"] . "' order by id desc";
$res_s = mysqli_query($link, $db_query);
if ($row_s = mysqli_fetch_row($res_s)) {
@ -484,7 +485,7 @@ if ($data) :
if ($data["status"] == "Y1") {
?>
<a href="pricereview-edit.php?id=<?php echo $data['id']; ?>&<?php echo $token_link; ?>" class="btn btn-primary btn-sm">修改</a>
<a href="pricereviewCreate.php?id=<?php echo $data['id']; ?>&<?php echo $token_link; ?>" class="btn btn-primary btn-sm">修改</a>
<a href="pricereview-delete.php?id=<?php echo $data['id']; ?>&<?php echo $token_link; ?>" class="btn btn-secondary btn-sm" onClick="return confirm('Are you sure you want to delete?')">刪除</a>
<?php
} elseif ($data["status"] == "YS") {
@ -493,7 +494,7 @@ if ($data) :
<?php
} elseif ($data['status'] == 'YN' && $data['id'] == $maxContractID) {
?>
<a href="pricereview-create.php?vol_no=<?= $data['contractno'] ?>&id=<?= $data['id']; ?>&function_name=specsurvey&token=<?= $token; ?>" class="btn btn-danger btn-sm">重填價審</a>
<a href="pricereviewCreate.php?id=<?= $data['id']; ?>&function_name=specsurvey&token=<?= $token; ?>" class="btn btn-danger btn-sm">重填價審</a>
<?php
}
}
@ -715,7 +716,10 @@ if ($data) :
<a class="applybtn" href="../contract/contract-new-apply.php?id=<?php echo $data['id'] . '&' . $para; ?>">
<?php if ($data['applystatus'] < 1) {
echo "申請";
} else {
} elseif($data['applystatus'] == 2) {
echo "重新申請";
}
else {
echo "檢視";
} ?>
</a><br>

464
wms/mkt/pricereviewCheck.php

@ -1,13 +1,27 @@
<?php
include_once('../header.php');
require_once('./conn.php');
$form_key = null;
if(!isset($_GET['id'])){
echo "找不到此紀錄!";
exit;
if(isset($_GET['form_key'])){
$form_key = $_GET['form_key'];
$system_id = "prm";
$sql_str = "SELECT form_id FROM flow WHERE system_id = :system_id AND form_key = :form_key";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':system_id', $system_id);
$stmt->bindParam(':form_key', $form_key);
$stmt->execute();
$flow = $stmt->fetch(PDO::FETCH_ASSOC);
$id = $flow['form_id'];
}else{
echo "找不到此紀錄!";
exit;
}
}else{
$id = $_GET['id'];
}
$id = $_GET['id'];
$sql_str = "SELECT pricereview_main.*, account.name as person_name FROM pricereview_main LEFT JOIN account ON pricereview_main.person = account.accountid WHERE pricereview_main.id = :id";
$sql_str = "SELECT pricereview_main.*, account.name as person_name FROM pricereview_main LEFT JOIN account ON pricereview_main.person = account.accountid WHERE pricereview_main.id = :id AND pricereview_main.status <> 'D'";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':id', $id);
$stmt->execute();
@ -28,12 +42,27 @@ $sql_str = "SELECT pricereview_item.*, option_mi.price AS option_mi, option_pric
FROM pricereview_item
LEFT JOIN option_mi ON option_mi.option_price_id = pricereview_item.price_id
LEFT JOIN option_price ON option_price.id = pricereview_item.price_id
WHERE pricereview_item.mid = :mid AND option_mi.open_kind = 'CO' ORDER BY pricereview_item.item_group, pricereview_item.item_no ASC";
WHERE pricereview_item.mid = :mid AND pricereview_item.item_group = 'B' AND option_mi.open_kind = 'CO' ORDER BY pricereview_item.item_group, pricereview_item.item_no ASC";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $id);
$stmt->execute();
$options = $stmt->fetchAll(PDO::FETCH_ASSOC);
$sql_str = "SELECT pricereview_item.*, fp.price
FROM pricereview_item
LEFT JOIN (
SELECT fp1.*
FROM facility_price fp1
LEFT JOIN facility_price fp2
ON (fp1.model = fp2.model AND fp1.id < fp2.id)
WHERE fp2.id IS NULL
) AS fp ON fp.model = pricereview_item.item_spec
WHERE pricereview_item.mid = :mid AND pricereview_item.item_group = 'A'
";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $id);
$stmt->execute();
$elevators = $stmt->fetchAll(PDO::FETCH_ASSOC);
$sql_str = "SELECT * FROM pricereview_item
WHERE pricereview_item.mid = :mid ORDER BY pricereview_item.item_group, pricereview_item.item_no ASC";
@ -42,95 +71,195 @@ $stmt->bindParam(':mid', $id);
$stmt->execute();
$items = $stmt->fetchAll(PDO::FETCH_ASSOC);
$sql_str = "SELECT * FROM pricereview_sign WHERE mid = :mid";
$sql_str = "SELECT * FROM pricereview_sign WHERE mid = :mid ORDER BY id ASC";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':mid', $id);
$stmt->execute();
$sign = $stmt->fetch(PDO::FETCH_ASSOC);
$sign_all = $stmt->fetchAll(PDO::FETCH_ASSOC);
$sign = $sign_all[count($sign_all)-1];
$currentSigner = '';
$currentSign = 0;
// Y:已同意 N:不同意 W:待簽
// sign1 => 處長, sign2 => 業務承辦人, sign3 => 協理, sign4 => 總經理
if($sign['sign1'] == NULL || $sign['sign1'] ==''){
$sign1 = NULL;
}else{
if( explode(",", $sign['sign1'])[1] != ''){
$sign1 = explode(",", $sign['sign1'])[1] == 'Y' ? 'Y' : 'N';
$currentSignId = $sign['id'];
$historySign = [];
foreach($sign_all as $key=>$sign_item){
if($key == count($sign_all)-1){
break;
}
$signer1 = getSignerName(explode(",", $sign_item['sign1'])[0]);
$sign1_result = explode(",", $sign_item['sign1'])[1];
$sign1_date = explode(",", $sign_item['sign1'])[2];
$sign1_note = $sign_item['sign1_note'];
if($sign1_result == "Y"){
$sign1_result = "同意";
}elseif($sign1_result == "YY"){
$sign1_result = "結案同意";
}elseif($sign1_result == "N"){
$sign1_result = "不同意";
}else{
$sign1 = 'W';
$sign1_result = "---";
}
if(!empty($sign_item['sign2'])){
$signer2 = getSignerName(explode(",", $sign_item['sign2'])[0]);
$sign2_result = explode(",", $sign_item['sign2'])[1];
$sign2_note = $sign_item['sign2_note'];
$sign2_date = explode(",", $sign_item['sign2'])[2];
if($sign2_result == "Y"){
$sign2_result = "同意";
}elseif($sign2_result == "YY"){
$sign2_result = "結案同意";
}elseif($sign2_result == "N"){
$sign2_result = "不同意";
}else{
$sign2_result = "---";
}
}else{
$signer2 = "---";
$sign2_result = "---";
$sign2_note = "---";
$sign2_date = "---";
$sign2_result = "---";
}
$signer3 = getSignerName(explode(",", $sign_item['sign3'])[0]);
$sign3_result = explode(",", $sign_item['sign3'])[1];
$sign3_note = $sign_item['sign3_note'];
$sign3_date = explode(",", $sign_item['sign3'])[2];
if($sign3_result == "Y"){
$sign3_result = "同意";
}elseif($sign3_result == "YY"){
$sign3_result = "結案同意";
}elseif($sign3_result == "N"){
$sign3_result = "不同意";
}else{
$sign3_result = "---";
}
if(!empty($sign_item['sign4'])){
$signer4 = getSignerName(explode(",", $sign_item['sign4'])[0]);
$sign4_result = explode(",", $sign_item['sign4'])[1];
$sign4_note = $sign_item['sign4_note'];
$sign4_date = explode(",", $sign_item['sign4'])[2];
if($sign4_result == "Y"){
$sign4_result = "同意";
}elseif($sign4_result == "YY"){
$sign4_result = "結案同意";
}elseif($sign4_result == "N"){
$sign4_result = "不同意";
}else{
$sign4_result = "---";
}
}else{
$signer4 = "---";
$sign4_result = "---";
$sign4_note = "---";
$sign4_date = "---";
$sign4_result = "---";
}
$historySign[] = [
'signer1'=>$signer1,
'sign1_result'=> $sign1_result,
'sign1_note'=>$sign1_note,
'sign1_date'=>$sign1_date,
'signer2'=>$signer2,
'sign2_result'=> $sign2_result,
'sign2_note'=>$sign2_note,
'sign2_date'=>$sign2_date,
'signer3'=>$signer3,
'sign3_result'=> $sign3_result,
'sign3_note'=>$sign3_note,
'sign3_date'=>$sign3_date,
'signer4'=>$signer4,
'sign4_result'=> $sign4_result,
'sign4_note'=>$sign4_note,
'sign4_date'=>$sign4_date,
];
}
if($sign){
// Y:已同意 N:不同意 W:待簽
// sign1 => 處長, sign2 => 業務承辦人, sign3 => 協理, sign4 => 總經理
if($sign['sign1'] == NULL || $sign['sign1'] ==''){
$sign1 = NULL;
}else{
if( explode(",", $sign['sign1'])[1] != ''){
$sign1 = explode(",", $sign['sign1'])[1] == 'Y' ? 'Y' : 'N';
}else{
$sign1 = 'W';
}
}
}
if($sign['sign2'] == NULL || $sign['sign2'] ==''){
$sign2 = NULL;
}else{
if( explode(",", $sign['sign2'])[1] != ''){
$sign2 = explode(",", $sign['sign2'])[1] == 'Y' ? 'Y' : 'N';
if($sign['sign2'] == NULL || $sign['sign2'] ==''){
$sign2 = NULL;
}else{
$sign2 = 'W';
if( explode(",", $sign['sign2'])[1] != ''){
$sign2 = explode(",", $sign['sign2'])[1] == 'Y' ? 'Y' : 'N';
}else{
$sign2 = 'W';
}
}
}
if($sign['sign3'] == NULL || $sign['sign3'] ==''){
$sign3 = NULL;
}else{
if( explode(",", $sign['sign3'])[1] != ''){
// $sign3 = explode(",", $sign['sign3'])[1] == 'Y' ? 'Y' : 'N';
if(explode(",", $sign['sign3'])[1] == 'YY') $sign3 = 'YY';
if(explode(",", $sign['sign3'])[1] == 'Y') $sign3 = 'Y';
if($sign['sign3'] == NULL || $sign['sign3'] ==''){
$sign3 = NULL;
}else{
$sign3 = 'W';
if( explode(",", $sign['sign3'])[1] != ''){
// $sign3 = explode(",", $sign['sign3'])[1] == 'Y' ? 'Y' : 'N';
if(explode(",", $sign['sign3'])[1] == 'YY') $sign3 = 'YY';
if(explode(",", $sign['sign3'])[1] == 'Y') $sign3 = 'Y';
if(explode(",", $sign['sign3'])[1] == 'N') $sign3 = 'N';
}else{
$sign3 = 'W';
}
}
}
if($sign['sign4'] == NULL || $sign['sign4'] ==''){
$sign4 = NULL;
}else{
if( explode(",", $sign['sign4'])[1] != ''){
// $sign4 = explode(",", $sign['sign4'])[1] == 'Y' ? 'Y' : 'N';
if(explode(",", $sign['sign4'])[1] == 'YY') $sign4 = 'YY';
if(explode(",", $sign['sign4'])[1] == 'Y') $sign4 = 'Y';
if($sign['sign4'] == NULL || $sign['sign4'] ==''){
$sign4 = NULL;
}else{
$sign4 = 'W';
if( explode(",", $sign['sign4'])[1] != ''){
// $sign4 = explode(",", $sign['sign4'])[1] == 'Y' ? 'Y' : 'N';
if(explode(",", $sign['sign4'])[1] == 'YY') $sign4 = 'YY';
if(explode(",", $sign['sign4'])[1] == 'Y') $sign4 = 'Y';
if(explode(",", $sign['sign4'])[1] == 'N') $sign4 = 'N';
}else{
$sign4 = 'W';
}
}
}
if($sign1 == 'W'){
$currentSigner = explode(",", $sign['sign1'])[0];
$currentSign = 1;
}elseif($sign2 == 'W'){
$currentSigner = explode(",", $sign['sign2'])[0];
$currentSign = 2;
}elseif($sign3 == 'W'){
$currentSigner = explode(",", $sign['sign3'])[0];
$currentSign = 3;
}elseif($sign4 == 'W'){
$currentSigner = explode(",", $sign['sign4'])[0];
$currentSign = 4;
if($sign1 == 'W'){
$currentSigner = explode(",", $sign['sign1'])[0];
$currentSign = 1;
}elseif($sign2 == 'W'){
$currentSigner = explode(",", $sign['sign2'])[0];
$currentSign = 2;
}elseif($sign3 == 'W'){
$currentSigner = explode(",", $sign['sign3'])[0];
$currentSign = 3;
}elseif($sign4 == 'W'){
$currentSigner = explode(",", $sign['sign4'])[0];
$currentSign = 4;
}
}else{
$sign1 = NULL;
$sign2 = NULL;
$sign3 = NULL;
$sign4 = NULL;
}
// $sql_str = "SELECT * FROM account WHERE accountid = :accountid";
// $stmt = $conn->prepare($sql_str);
// $stmt->bindParam(':accountid', $sign['sign']);
// $stmt->execute();
// $account = $stmt->fetch(PDO::FETCH_ASSOC);
// $sql_str = "SELECT * FROM account WHERE accountid = :accountid";
// $stmt = $conn->prepare($sql_str);
// $stmt->bindParam(':accountid', $account['manager']);
// $stmt->execute();
// $manager = $stmt->fetch(PDO::FETCH_ASSOC);
$permissions = false;
//開啟業務部權限
if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){
if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060" || $user_id == "M0008" || $user_id == "M0012"){
$permissions = true;
}
function getSignerName($signer){
if($signer == null || $signer == '') return "---";
global $conn;
$sql_str = "SELECT name FROM account WHERE accountid = :signer";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':signer', $signer);
$stmt->execute();
$signer = $stmt->fetch(PDO::FETCH_ASSOC);
return $signer['name'];
}
?>
<link rel="stylesheet" href="./css/pricereview.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/1.5.0/axios.min.js" integrity="sha512-aoTNnqZcT8B4AmeCFmiSnDlc4Nj/KPaZyB5G7JnOnUEkdNpCZs1LCankiYi01sLTyWy+m2P+W4XM+BuQ3Q4/Dg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
@ -138,6 +267,7 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){
<script src="./assets/js/pricereviewAlpine.js"></script>
<div id="pricereviewCheck" x-data=pricereviewCheck()>
<?php include_once('./window-modal/historySignModal.php'); ?>
<div class="container">
<table class="table customerinfo-table" >
<tbody>
@ -186,23 +316,23 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){
<tr>
<td x-html="'<b>' + elevator.item_no + '</b>'"></td>
<td > <a href="javascript:;" x-text="elevator.item_spec"></a></td>
<td><input type="text" class="form-control" x-model="Number(elevator.item_unit_price).toLocaleString()" disabled /></td>
<td><input type="text" class="form-control" x-model="Number(elevator.price).toLocaleString()" disabled /></td>
<td><input type="text" class="form-control" x-model="elevator.item_qty" disabled /></td>
<td><input type="text" class="form-control" x-model="Number(elevator.item_unit_price * elevator.item_qty).toLocaleString()" disabled /></td>
<td><input type="text" class="form-control" x-model="Number(elevator.price * elevator.item_qty).toLocaleString()" disabled /></td>
<?php if($permissions): ?>
<td>
<input x-show="isNotfoundMi" type="text" class="form-control" value="公司無此規格">
<input x-show="isNotfoundMi" type="text" class="form-control" value="找不到此規格">
<input x-show="!isNotfoundMi" type="text" class="form-control" x-model="Math.round(Number(elevator.optionsTotalPrice) + Number(elevator.otherOptionsTotalPrice) + Number(elevator.maintainOptionsTotalPrice) + Number(elevator.totalMi * elevator.item_qty)).toLocaleString() " disabled />
</td>
<td><input type="text" class="form-control" x-model="Number(elevator.item_price_ct).toLocaleString()" disabled /></td>
<td><input type="text" class="form-control" x-model="(elevator.item_price_ct - Math.round(Number(elevator.optionsTotalPrice) + Number(elevator.otherOptionsTotalPrice) + Number(elevator.maintainOptionsTotalPrice) + Number(elevator.totalMi * elevator.item_qty))).toLocaleString()" disabled /></td>
<td><input type="text" class="form-control" x-model="Math.round((elevator.item_price_ct - Math.round(Number(elevator.optionsTotalPrice) + Number(elevator.otherOptionsTotalPrice) + Number(elevator.maintainOptionsTotalPrice) + Number(elevator.totalMi * elevator.item_qty))) / elevator.item_price_ct *1000) /10 + '%'" disabled /></td>
<td><input type="text" class="form-control" x-model="(Number(elevator.item_price_ct)*Number(elevator.item_qty)).toLocaleString()" disabled /></td>
<td><input type="text" class="form-control" x-model="(Number(elevator.item_price_ct)*Number(elevator.item_qty) - Math.round(Number(elevator.optionsTotalPrice) + Number(elevator.otherOptionsTotalPrice) + Number(elevator.maintainOptionsTotalPrice) + Number(elevator.totalMi * elevator.item_qty))).toLocaleString()" disabled /></td>
<td><input type="text" class="form-control" x-model="Math.round((Number(elevator.item_price_ct)*Number(elevator.item_qty) - Math.round(Number(elevator.optionsTotalPrice) + Number(elevator.otherOptionsTotalPrice) + Number(elevator.maintainOptionsTotalPrice) + Number(elevator.totalMi * elevator.item_qty))) / (Number(elevator.item_price_ct)*Number(elevator.item_qty)) *1000) /10 + '%'" disabled /></td>
<?php endif; ?>
</tr>
<?php if($permissions): ?>
<tr>
<td colspan=5></td>
<td colspan=4>
<td colspan=4 style="max-width:400px">
<div class="mi-info">
<span>電梯設備</span>
<ul>
@ -213,13 +343,14 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){
<li x-html="'安裝成本:<b>' + (elevator.mi.install_fee * elevator.item_qty).toLocaleString() + '</b>'"></li>
<li x-html="'一年免保:<b>' + (elevator.mi.free1y_fee * elevator.item_qty).toLocaleString() + '</b>'"></li>
<li x-html="'起吊+木箱+耗材:<b>' + (elevator.mi.other_fee * elevator.item_qty).toLocaleString() + '</b>'"></li>
<li x-show="elevator.mi.add_price > 0" x-html="'加價:<b>' + (elevator.mi.add_price * elevator.item_qty).toLocaleString() + '</b>'"></li>
</ul>
<p x-html="'以上合計:<b>' + (elevator.totalMi * elevator.item_qty).toLocaleString() + '</b>'"></p>
<div class="line"></div>
<span>OPTION</span>
<ul>
<template x-for="option in elevator.options">
<li x-html="option.item_spec + '*' + option.item_qty + ':<b>' + (option.mi * option.item_qty).toLocaleString() + '</b>'"></li>
<li x-html="option.item_spec + (option.option_memo ? ('(' + option.option_memo + ')') : '') + '*' + option.item_qty + ':<b>' + (option.mi * option.item_qty).toLocaleString() + '</b>'"></li>
</template>
<template x-for="option in elevator.otherOptions">
<li x-html="option.item_spec + '*' + option.item_qty + ':<b>' + (option.mi * option.item_qty).toLocaleString() + '</b>'"></li>
@ -227,8 +358,11 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){
<template x-for="option in elevator.maintainOptions">
<li x-html="option.item_spec + '(' + option.item_qty + '月):<b>' + (option.mi * option.item_qty).toLocaleString() + '</b>'"></li>
</template>
<template x-for="option in elevator.demolishOptions">
<li x-html="option.item_spec + '*' + option.item_qty + ':<b>' + (option.mi * option.item_qty).toLocaleString() + '</b>'"></li>
</template>
</ul>
<p x-html="'以上合計:<b>' + (Math.round(Number(elevator.optionsTotalPrice) + Number(elevator.otherOptionsTotalPrice) + Number(elevator.maintainOptionsTotalPrice))).toLocaleString() + '</b>'"></p>
<p x-html="'以上合計:<b>' + (Math.round(Number(elevator.optionsTotalPrice) + Number(elevator.otherOptionsTotalPrice) + Number(elevator.maintainOptionsTotalPrice)) + Number(elevator.demolishOptionsTotalPrice)).toLocaleString() + '</b>'"></p>
</div>
</td>
@ -271,13 +405,16 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){
<td x-text="option.option_relate_spec"></td>
</tr>
</template>
<tr>
<td colspan=5>小計</td>
<td >
<input type="text" x-model="optionsTotalPrice().toLocaleString()" disabled class="form-control">
</td>
<td colspan=3></td>
</tr>
<template x-if="options.length > 0">
<tr>
<td colspan=5>小計</td>
<td >
<input type="text" x-model="optionsTotalPrice().toLocaleString()" disabled class="form-control">
</td>
<td colspan=3></td>
</tr>
</template>
</tbody>
</table>
@ -308,13 +445,15 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){
<td x-text="option.option_relate_spec"></td>
</tr>
</template>
<tr>
<td colspan=5>小計</td>
<td >
<input type="text" x-model="otherOptionsTotalPrice().toLocaleString()" disabled class="form-control">
</td>
<td colspan=3></td>
</tr>
<template x-if="otherOptions.length > 0">
<tr>
<td colspan=5>小計</td>
<td >
<input type="text" x-model="otherOptionsTotalPrice().toLocaleString()" disabled class="form-control">
</td>
<td colspan=3></td>
</tr>
</template>
</tbody>
</table>
@ -346,13 +485,55 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){
</tr>
</template>
<template x-if="maintainOptions.length > 0">
<tr>
<td colspan=4>小計</td>
<td >
<input type="text" x-model="maintainOptionsTotalPrice().toLocaleString()" disabled class="form-control">
</td>
<td colspan=2></td>
</tr>
</template>
</tbody>
</table>
<table class="table mi-table" border=1>
<thead>
<tr>
<td colspan=4>小計</td>
<td >
<input type="text" x-model="maintainOptionsTotalPrice().toLocaleString()" disabled class="form-control">
</td>
<td colspan=2></td>
<th colspan=8>拆梯價格</th>
</tr>
<tr>
<th>項次</th>
<th>人乘/載重</th>
<th>樓層</th>
<th>單價</th>
<th>數量</th>
<th>複價</th>
<th>所屬電梯項次</th>
</tr>
</thead>
<tbody>
<template x-for="option in demolishOptions">
<tr>
<td x-text="option.item_no"></td>
<td x-text="option.item_spec"></td>
<td x-text="option.note"></td>
<td x-text="Number(option.item_unit_price).toLocaleString()"></td>
<td x-text="option.item_qty"></td>
<td x-text="(option.item_qty * option.item_unit_price).toLocaleString()"></td>
<td x-text="option.option_relate_spec"></td>
</tr>
</template>
<template x-if="demolishOptions.length > 0">
<tr>
<td colspan=4>小計</td>
<td >
<input type="text" x-model="demolishOptionsTotalPrice().toLocaleString()" disabled class="form-control">
</td>
<td colspan=2></td>
</tr>
</template>
</tbody>
</table>
@ -437,7 +618,7 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){
</td>
</tr>
<tr>
<td rowspan=3>材料</td>
<td rowspan=3>安裝</td>
<td>5.安裝完畢款</td>
<td><input type="text" class="form-control" x-model="pays[4].pay_scale" disabled /></td>
<td><input type="text" class="form-control" :value="Number(pays[4].pay_amount).toLocaleString()" disabled /></td>
@ -496,7 +677,7 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){
</tr>
<tr>
<td colspan="2">備註</td>
<td colspan="3"><textarea name="" id="" cols="30" rows="5" class="form-control" disabled></textarea></td>
<td colspan="3"><textarea name="" id="" cols="30" rows="5" class="form-control" disabled x-model="pays[0].pay_note"></textarea></td>
</tr>
</tbody>
</table>
@ -526,12 +707,12 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){
<th>價率%(B/A)</th>
</tr>
<tr>
<td><input type="text" class="form-control" x-model="Number(price_lowest).toLocaleString()" disabled /></td>
<td><input type="text" class="form-control" x-model="Number(totalStandardPrice()).toLocaleString()" disabled /></td>
<td><input type="text" class="form-control" x-model="Number(price_total).toLocaleString()" disabled /></td>
<td><input type="text" class="form-control" x-model="(price_total - price_lowest).toLocaleString()" disabled /></td>
<td><input type="text" class="form-control" x-model="qty" disabled /></td>
<td><input type="text" class="form-control" x-model="special_fee.toLocaleString()" disabled /></td>
<td><input type="text" class="form-control" x-model="Math.round(price_total/price_lowest * 1000)/10" disabled /></td>
<td><input type="text" class="form-control" x-model="Math.round(price_total/totalStandardPrice() * 1000)/10" disabled /></td>
</tr>
<tr>
<th>預定成交日</th>
@ -576,12 +757,14 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){
</tbody>
</table>
<li>營業權限85%以上;85-80%呈至區處長審核;80%以下呈至總經理審核。</li>
<?php if(count($historySign) > 0): ?>
<button class="btn btn-primary" style="margin:8px 0 16px;" @click="openHishtorySignModal()">歷史簽核紀錄</button>
<?php endif; ?>
<table class="table" style="width:700px">
<thead>
<tr>
<th>審核</th>
<th>審核人</th>
<th style="width:150px">審核</th>
<th style="width:100px">審核人</th>
<th>結果</th>
<th>意見</th>
<th>時間</th>
@ -604,11 +787,11 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){
}
?>
</td>
<td><?php echo $sign['sign1_note'] ?></td>
<td><?php echo explode(',', $sign['sign1'])[2] ?></td>
<td><?php echo isset($sign['sign1_note']) ? $sign['sign1_note'] : "---" ?></td>
<td><?php echo isset($sign['sign1']) ? explode(',', $sign['sign1'])[2] : "---" ?></td>
</tr>
<tr>
<td>業務承辦人</td>
<td x-text="is_renovate=='汰改' ? '服務助理' : '業務承辦人'"></td>
<td x-text="sign2"></td>
<td>
<?php
@ -616,18 +799,18 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){
echo "同意";
}elseif($sign2 == 'N'){
echo "不同意";
}elseif($sign2 == 'W'){
}elseif($sign2 == 'W' && $contract['status'] == 'YS'){
echo "待簽核";
}else{
echo "---";
}
?>
</td>
<td><?php echo $sign['sign2']!=NULL ? $sign['sign2_note'] : '---'?></td>
<td><?php echo $sign['sign2']!=NULL ? explode(',', $sign['sign2'])[2] : '---' ?></td>
<td><?php echo (isset($sign['sign2']) && $sign['sign2']!=NULL) ? $sign['sign2_note'] : '---'?></td>
<td><?php echo (isset($sign['sign2']) && $sign['sign2']!=NULL) ? explode(',', $sign['sign2'])[2] : '---' ?></td>
</tr>
<tr>
<td>業務部協理</td>
<td x-text="is_renovate=='汰改' ? '服務副總' : '業務部協理'"></td>
<td x-text="sign3"></td>
<td>
<?php
@ -637,15 +820,15 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){
echo "結案同意";
}elseif($sign3 == 'N'){
echo "不同意";
}elseif($sign3 == 'W'){
}elseif($sign3 == 'W' && $contract['status'] == 'YS'){
echo "待簽核";
}else{
echo "---";
}
?>
</td>
<td><?php echo $sign['sign3']!=NULL ? $sign['sign3_note'] : '---'?></td>
<td><?php echo $sign['sign3']!=NULL ? explode(',', $sign['sign3'])[2] : '---' ?></td>
<td><?php echo (isset($sign['sign3']) && $sign['sign3']!=NULL) ? $sign['sign3_note'] : '---'?></td>
<td><?php echo (isset($sign['sign3']) && $sign['sign3']!=NULL) ? explode(',', $sign['sign3'])[2] : '---' ?></td>
</tr>
<tr>
<td>總經理</td>
@ -659,11 +842,11 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){
echo "結案同意";
}
}else{
if($sign4 == 'Y'){
if($sign4 == 'Y' && $contract['status'] == 'YY'){
echo "同意";
}elseif($sign4 == 'N'){
}elseif($sign4 == 'N' && $contract['status'] == 'YN'){
echo "不同意";
}elseif($sign4 == 'W'){
}elseif($sign4 == 'W' && $contract['status'] == 'YS' ){
echo "待簽核";
}else{
echo "---";
@ -671,8 +854,8 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){
}
?>
</td>
<td><?php echo $sign['sign4']!=NULL ? $sign['sign4_note'] : '---'?></td>
<td><?php echo $sign['sign4']!=NULL ? explode(',', $sign['sign4'])[2] : '---' ?></td>
<td><?php echo (isset($sign['sign4']) && $sign['sign4']!=NULL) ? $sign['sign4_note'] : '---'?></td>
<td><?php echo (isset($sign['sign4']) && $sign['sign4']!=NULL) ? explode(',', $sign['sign4'])[2] : '---' ?></td>
</tr>
</tbody>
</table>
@ -697,22 +880,37 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){
<div>
<button class="btn btn-primary" @click="window.history.go(-1)">回上頁</button>
<?php if($contract['status'] == "YS"){ ?>
<?php if($currentSigner == "M0006" && $user_id == "M0060"): ?>
<button class="btn btn-primary" @click="check(<?php echo $currentSign; ?>, 'YN', 'M0006')">總經理權限(退回)</button>
<?php endif; ?>
<?php if($currentSigner == $user_id): ?>
<button class="btn btn-primary" @click="check(<?php echo $currentSign; ?>, 'YN')">不同意(退回)</button>
<?php if($sign4 =='W' && $sign3 == 'W'): ?>
<?php if($sign1=='W' || ($sign1=='Y' && $sign2 =='W') || ($sign1 == 'Y' && ($sign2 == 'Y' || $sign2 == NULL) && $sign3 == 'W' && $sign4 == 'W')): ?>
<button class="btn btn-primary" @click="check(<?php echo $currentSign; ?>, 'YS')">同意(上呈)</button>
<?php endif ; ?>
<?php if(($sign3 == 'W' && $sign2 == 'Y') || ($sign3 == 'W' && $sign2 == null && $sign1 == 'Y') || ($sign3 == 'Y' && $sign4 == 'W') ): ?>
<button class="btn btn-primary" @click="check(<?php echo $currentSign; ?>, 'YY')">同意(結案)</button>
<?php endif ; ?>
<?php endif; ?>
<?php } ?>
<button class="btn btn-primary">下載報價單</button>
<button class="btn btn-primary">下載附表一</button>
<?php if($contract['attatch1']!=null): ?>
<a class="btn btn-primary" href="./<?php echo $contract['attatch1']; ?>" download="<?php echo $contract['contractno'] . "報價單"; ?>">下載報價單</a>
<?php else: ?>
<a href="javascript:;" class="btn btn-primary" @click="alert('營業員未上傳報價單!')">下載報價單</a>
<?php endif; ?>
<?php if($contract['attatch2']!=null): ?>
<a class="btn btn-primary" href="./<?php echo $contract['attatch2']; ?>" download="<?php echo $contract['contractno'] . "附表一"; ?>">下載附表一</a>
<?php else: ?>
<a href="javascript:;" class="btn btn-primary" @click="alert('營業員未上傳附表一!')">下載附表一</a>
<?php endif; ?>
</div>
</div>
</div>
<script>
const body = document.querySelector('body')
const mid = <?php echo $contract['id']; ?>;
const contractno = '<?php echo $contract['contractno']; ?>';
const person_name = '<?php echo $contract['person_name']; ?>';
@ -728,20 +926,24 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){
const deposit_rate = '<?php echo $contract['deposit_rate']; ?>';
const keep_rate = '<?php echo $contract['keep_rate']; ?>';
const warranty_rate = '<?php echo $contract['warranty_rate']; ?>';
const memo = '<?php echo $contract['memo']; ?>';
const memo = `<?php echo str_replace('\n', '\\n', $contract['memo']); ?>`;
const pays = [...<?php echo json_encode($pays); ?>];
const items = [...<?php echo json_encode($items); ?>];
const options = [...<?php echo json_encode($options); ?>];
const elevators = [...<?php echo json_encode($elevators); ?>];
const is_renovate = '<?php echo $contract['ekind']; ?>';
const user_id = '<?php echo $user_id; ?>';
const sign1 = '<?php echo explode(',', $sign['sign1'])[0] ?>';
const sign2 = '<?php echo explode(',', $sign['sign2'])[0] ?>';
const sign1 = '<?php echo ($sign) ? explode(',', $sign['sign1'])[0] : "---" ?>';
const sign2 = '<?php echo ($sign) ? explode(',', $sign['sign2'])[0] : "---" ?>';
console.log('sign2====>', sign2);
const sign3 = '<?php echo explode(',', $sign['sign3'])[0] ?>';
const sign4 = '<?php echo explode(',', $sign['sign4'])[0] ?>';
const sign3 = '<?php echo ($sign) ? explode(',', $sign['sign3'])[0] : "---" ?>';
const sign4 = '<?php echo ($sign) ? explode(',', $sign['sign4'])[0] : "---" ?>';
const currentSignId = '<?php echo $currentSignId; ?>';
const token = '<?php echo $para = "function_name=pricereview&" . $token_link;; ?>';
const form_key = '<?php echo $form_key; ?>';
</script>

1128
wms/mkt/pricereviewCreate.php

File diff suppressed because it is too large

21
wms/mkt/pricereview_renovate-index.php

@ -61,11 +61,11 @@ $data = array();
// sql語法存在變數中
$sql_cmd = sql_myself($user_id);
// M0024許伃廷,M0107許紓晴,M0012李盈瑩權限全開
if ($user_id == "M0024" || $user_id == "M0107" || $user_id == "M0012" || $user_id == "M0060" || $user_id == "M0189" || $user_id == "M0061" || $user_id == "TEST01" || $user_id == "TEST02" || $user_id == "TEST03" || $user_id == "TEST04" || $user_id == "M0029") {
if ($user_id == "M0024" || $user_id == "M0107" || $user_id == "M0012" || $user_id == "M0008" || $user_id == "M0060" || $user_id == "M0189" || $user_id == "M0061" || $user_id == "TEST01" || $user_id == "TEST02" || $user_id == "TEST03" || $user_id == "TEST04" || $user_id == "M0029") {
$sql_cmd = "where create_at >= '2023-01-01 00:00:00'";
}
if ($user_id == "M0008") {
$sql_cmd = "where creater in (select accountid from account where department_id like '5%')";
// $sql_cmd = "where creater in (select accountid from account where department_id like '5%')";
}
if (!empty($res_get)) {
@ -224,7 +224,7 @@ if ($data) :
$sign1 = $sign2 = $sign3 = $sign4 = "";
$oneself = ($data["creater"] == $user_id) ? 1 : 0; // 是否為營業員本人
// 簽核狀況
$db_query = "select sign1, sign2, sign3, sign4 from pricereview_sign where mid = '" . $data["id"] . "'";
$db_query = "select sign1, sign2, sign3, sign4 from pricereview_sign where mid = '" . $data["id"] . "' order by id desc";
$res_s = mysqli_query($link, $db_query);
if ($row_s = mysqli_fetch_row($res_s)) {
list($sign1, $sign2, $sign3, $sign4) = $row_s;
@ -277,7 +277,7 @@ if ($data) :
// echo '</pre>';
if ($data["status"] == "Y1") {
?>
<a href="pricereview_renovate-edit.php?id=<?php echo $data['id']; ?>&<?php echo $token_link; ?>" class="btn btn-primary btn-sm">修改</a>
<a href="pricereviewCreate.php?id=<?php echo $data['id']; ?>&<?php echo $token_link; ?>" class="btn btn-primary btn-sm">修改</a>
<a href="pricereview_renovate-delete.php?id=<?php echo $data['id']; ?>&<?php echo $token_link; ?>" class="btn btn-secondary btn-sm" onClick="return confirm('Are you sure you want to delete?')">刪除</a>
<?php
} elseif ($data["status"] == "YS" && $countContract == 0) {
@ -286,13 +286,13 @@ if ($data) :
<?php
} elseif ($data['status'] == "YN" && $data['id'] == $maxContractID) {
?>
<a href="pricereview_renovate-create.php?vol_no=<?= $data['contractno']; ?>&id=<?= $data['id'] ?>&function_name=pricereview_renovate&token=<?= $token; ?>" class="btn btn-danger btn-sm">重填價審</a>
<a href="pricereviewCreate.php?id=<?= $data['id'] ?>&function_name=pricereview_renovate&token=<?= $token; ?>" class="btn btn-danger btn-sm">重填價審</a>
<?php
}
}
?>
<a href="pricereview_renovate-check.php?id=<?php echo $data['id'] . "&" . $para; ?>" class="btn btn-warning btn-sm">檢視</a>
<a href="pricereviewCheck.php?id=<?php echo $data['id'] . "&" . $para; ?>" class="btn btn-warning btn-sm">檢視</a>
</td>
<td>
<?php
@ -306,7 +306,7 @@ if ($data) :
if ($sign_st == 1 && $sign_nt == $user_id && $data["status"] == "YS") {
$str = "<span class=\"glyphicon glyphicon-user\"></span>";
$str = "待簽核";
$str = "<a href=\"pricereview_renovate-check.php?st=1&id=" . $data["id"] . "&" . $para . "\" class=\"btn btn-primary btn-sm\">" . $str . "</a>";
$str = "<a href=\"pricereviewCheck.php?st=1&id=" . $data["id"] . "&" . $para . "\" class=\"btn btn-primary btn-sm\">" . $str . "</a>";
} else $str = "--";
}
echo $str;
@ -353,9 +353,10 @@ if ($data) :
$str .= "<br>" . $accountname_arr[$uperson] . "<br>" . $udtte;
} else {
if ($sign_st == 2 && $sign_nt == $user_id && $data["status"] == "YS") {
$str = "<span class=\"glyphicon glyphicon-user\"></span>";
$str = "待簽核";
$str = "<a href=\"pricereview_renovate-check.php?st=2&id=" . $data["id"] . "&" . $para . "\" class=\"btn btn-primary btn-sm\">" . $str . "</a>";
$str = "<a href=\"pricereviewCheck.php?st=2&id=" . $data["id"] . "&" . $para . "\" class=\"btn btn-primary btn-sm\">" . $str . "</a>";
} else $str = "--";
}
echo $str;
@ -373,7 +374,7 @@ if ($data) :
if (($data["status"] == "YS") && ($sign_st == 3) && ($sign_nt == $user_id)) {
$str = "<span class=\"glyphicon glyphicon-user\"></span>";
$str = "待簽核";
$str = "<a href=\"pricereview_renovate-check.php?st=3&id=" . $data["id"] . "&" . $para . "\" class=\"btn btn-primary btn-sm\">" . $str . "</a>";
$str = "<a href=\"pricereviewCheck.php?st=3&id=" . $data["id"] . "&" . $para . "\" class=\"btn btn-primary btn-sm\">" . $str . "</a>";
} else $str = "--";
}
echo $str;
@ -419,7 +420,7 @@ if ($data) :
if (($data["status"] == "YS") && ($sign_st == 4) && ($sign_nt == $user_id)) {
$str = "<span class=\"glyphicon glyphicon-user\"></span>";
$str = "待簽核";
$str = "<a href=\"pricereview_renovate-check.php?st=4&id=" . $data["id"] . "&" . $para . "\" class=\"btn btn-primary btn-sm\">" . $str . "</a>";
$str = "<a href=\"pricereviewCheck.php?st=4&id=" . $data["id"] . "&" . $para . "\" class=\"btn btn-primary btn-sm\">" . $str . "</a>";
} else $str = "--";
}
echo $str;

6
wms/mkt/table2excel/.babelrc

@ -0,0 +1,6 @@
{
"presets":[
"es2015",
"stage-1"
]
}

58
wms/mkt/table2excel/.gitignore

@ -0,0 +1,58 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Typescript v1 declaration files
typings/
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env

192
wms/mkt/table2excel/README.md

@ -0,0 +1,192 @@
# Table2Excel.js
This is a library to export html tables to excel sheets.
## Precondition
It has to be a row * column table
## Features
1. able to export with width, alignment and colors
2. extendable
## Dependencies
[ExcelJS](https://github.com/guyonroche/exceljs)
[FileSaver.js](https://github.com/eligrey/FileSaver.js)
## Live Demo
[Demo](https://jackgit.github.io/table2excel.js/index.html)
## Include table2excel.js
### npm
`ExcelJS` is peer dependency to `table2excel.js`, so you need to install exceljs first:
```bash
npm i exceljs
```
then, install table2excel.js:
```bash
npm i table2excel.js
```
use in your code like:
```js
import Table2Excel from 'table2excel.js'
new Table2Excel('table').export()
```
you may also need a config in webpack:
```js
node: { fs: 'empty' }
```
### table2excel.min.js (with ExcelJS packed)
```html
<script src="path/to/table2excel.min.js"></script>
```
### table2excel.core.js (without ExcelJS packed)
```html
<script src="path/to/exceljs.min.js"></script>
<script src="path/to/table2excel.core.js"></script>
```
## Basic Usage
```js
const table2Excel = new Table2Excel(selector, options) // new Table2Excel('table')
table2Excel.export(fileName, extension) // table2Excel.export('my-exported-table', 'xlsx')
```
`extension` can be `'xls'` or `'xlsx'`, default as `'xlsx'`
### selector
It's optional, and defaulted as `'table'`
### options
It's optional, and defaulted as:
```js
{
workbook: {
views: [{
x: 0, y: 0, width: 10000, height: 20000,
firstSheet: 0, activeTab: 1, visibility: 'visible'
}]
},
widthRatio: .14,
plugins: [
Table2Excel.plugins.fontPlugin,
Table2Excel.plugins.fillPlugin,
Table2Excel.plugins.formPlugin,
Table2Excel.plugins.alignmentPlugin,
Table2Excel.plugins.hyperlinkPlugin,
Table2Excel.plugins.autoWidthPlugin
]
}
```
`workbook` is options used while creating a workbook, please refer [exceljs#create-a-workbook](https://github.com/guyonroche/exceljs#create-a-workbook) for details.
`widthRatio` is a ratio that will be used while converting `width` style of html table cells to width of sheet cells.
## Plugins
Plugin helps to extend the ability of transforming table to excel.
Build-in plugins can be access like:
```js
Table2Excel.plugins.fontPlugin,
Table2Excel.plugins.fillPlugin,
Table2Excel.plugins.formPlugin,
Table2Excel.plugins.alignmentPlugin,
Table2Excel.plugins.hyperlinkPlugin,
Table2Excel.plugins.autoWidthPlugin
```
A plugin can be defined to join different phase of table to excel process, and in different phase, plugin is able to access different objects from context.
```js
{
/**
* after an empty workbook created
* @param {ExcelJS.Workbook} context.workbook
* @param {NodeList} context.tables
*/
workbookCreated ({ workbook, tables }) {},
/**
* after an empty worksheet created
* @param {ExcelJS.Workbook} workbook
* @param {NodeList} tables
* @param {ExcelJS.Worksheet} worksheet
* @param {HTMLTableElement} table
*/
worksheetCreated ({ workbook, tables, worksheet, table }) {},
/**
* after a worksheet been filled with data from table
* @param {ExcelJS.Workbook} workbook
* @param {NodeList} tables
* @param {ExcelJS.Worksheet} worksheet
* @param {HTMLTableElement} table
*/
worksheetCompleted ({ workbook, tables, worksheet, table }) {},
/**
* after an cell of worksheet created
* @param {ExcelJS.Workbook} workbook
* @param {NodeList} tables
* @param {ExcelJS.Worksheet} worksheet
* @param {HTMLTableElement} table
* @param {ExcelJS.Cell} workcell
* @param {HTMLTableCellElement} cell
* @param {colRange} [from, to]
* @param {rowRange} [from, to]
*/
workcellCreated ({ workbook, tables, worksheet, table, workcell, cell, cellStyle, colRange, rowRange }) {}
}
```
Example 1, you can define a plugin to make some rows or columns hidden of exported excel:
```js
const table2Excel = new Table2Excel('table', {
plugins: [{
worksheetCompleted ({ workbook, tables, worksheet, table }) {
worksheet.getRow(1).hidden = true
worksheet.getColumn(1).hidden = true
}
}]
})
```
Example 2, you can add your customized cell parser for your table:
```js
const table2Excel = new Table2Excel('table', {
plugins: [{
workcellCreated ({ workbook, tables, worksheet, table, workcell, cell, cellStyle, rowRange, colRange }) {
workcell.value = { text: '', link: '' }
workcell.style = {
...workcell.style,
font: {},
color: {}
}
}
}]
})
```

2
wms/mkt/table2excel/dist/table2excel.core.js

File diff suppressed because one or more lines are too long

18
wms/mkt/table2excel/dist/table2excel.min.js

File diff suppressed because one or more lines are too long

1123
wms/mkt/table2excel/docs/index.html

File diff suppressed because it is too large

17
wms/mkt/table2excel/docs/js/exceljs.min.js

File diff suppressed because one or more lines are too long

2
wms/mkt/table2excel/docs/js/table2excel.core.js

File diff suppressed because one or more lines are too long

11
wms/mkt/table2excel/es5/constants.js

@ -0,0 +1,11 @@
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var MIME_TYPES = exports.MIME_TYPES = {
xls: 'application/vnd.ms-excel',
xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
};
var WIDTH_RATIO = exports.WIDTH_RATIO = .14;

26
wms/mkt/table2excel/es5/index.js

@ -0,0 +1,26 @@
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _table2excel = require('./table2excel');
var _table2excel2 = _interopRequireDefault(_table2excel);
var _plugins = require('./plugins');
var _plugins2 = _interopRequireDefault(_plugins);
var _utils = require('./utils');
var utils = _interopRequireWildcard(_utils);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
_table2excel2.default.plugins = _plugins2.default;
_table2excel2.default.utils = utils;
exports.default = _table2excel2.default;

62
wms/mkt/table2excel/es5/plugins/alignment.js

@ -0,0 +1,62 @@
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
/**
* '-webkit-right' -> 'right'
* 'right' -> 'right'
* etc...
*/
var getHorizontalAlign = function getHorizontalAlign() {
var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var aligns = ['right', 'left', 'center', 'justify'];
for (var i = 0; i < aligns.length; i++) {
if (value.includes(aligns[i])) {
return aligns[i];
}
}
};
/**
* 'baseline' -> 'middle'
* 'text-top' -> 'top'
* 'text-bottom' -> 'bottom'
* 'sub' -> 'top'
* 'super' -> 'bottom'
*/
var getVerticalAlign = function getVerticalAlign() {
var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var aligns = ['top', 'middle', 'bottom'];
for (var i = 0; i < aligns.length; i++) {
if (value.includes(aligns[i])) {
return aligns[i];
}
}
var mapping = {
'baseline': 'middle',
'super': 'top',
'sub': 'bottom'
};
return mapping[value];
};
exports.default = {
workcellCreated: function workcellCreated(_ref) {
var workcell = _ref.workcell,
cellStyle = _ref.cellStyle;
var verticalAlign = cellStyle.verticalAlign,
textAlign = cellStyle.textAlign;
workcell.alignment = _extends({}, workcell.alignment || {}, {
vertical: getVerticalAlign(verticalAlign),
horizontal: getHorizontalAlign(textAlign)
});
}
};

17
wms/mkt/table2excel/es5/plugins/autoWidth.js

@ -0,0 +1,17 @@
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = {
workcellCreated: function workcellCreated(_ref) {
var worksheet = _ref.worksheet,
colRange = _ref.colRange,
cell = _ref.cell,
cellStyle = _ref.cellStyle;
if (colRange.from === colRange.to && cellStyle.width !== 'auto') {
worksheet.getColumn(colRange.from + 1).width = +cellStyle.width.split('px')[0] * this.options.widthRatio;
}
}
};

32
wms/mkt/table2excel/es5/plugins/fill.js

@ -0,0 +1,32 @@
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _utils = require('../utils');
exports.default = {
workcellCreated: function workcellCreated(_ref) {
var workcell = _ref.workcell,
cellStyle = _ref.cellStyle;
var color = (0, _utils.argb)(cellStyle.backgroundColor);
if (color === '00000000') {
// background is transparent, equals none pattern fill
workcell.fill = _extends({}, workcell.fill || {}, {
type: 'pattern',
pattern: 'none'
});
} else {
workcell.fill = _extends({}, workcell.fill || {}, {
type: 'pattern',
pattern: 'solid',
fgColor: { argb: color }
});
}
}
};

24
wms/mkt/table2excel/es5/plugins/font.js

@ -0,0 +1,24 @@
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _utils = require('../utils');
exports.default = {
workcellCreated: function workcellCreated(_ref) {
var workcell = _ref.workcell,
cellStyle = _ref.cellStyle;
var fontWeight = cellStyle.fontWeight;
workcell.font = _extends({}, workcell.font || {}, {
name: cellStyle.fontFamily,
color: { argb: (0, _utils.argb)(cellStyle.color) },
bold: fontWeight === 'bold' || +fontWeight > 600 ? true : false
});
}
};

16
wms/mkt/table2excel/es5/plugins/form.js

@ -0,0 +1,16 @@
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = {
workcellCreated: function workcellCreated(_ref) {
var workcell = _ref.workcell,
cell = _ref.cell;
var child = cell.children[0];
if (child && ['INPUT', 'SELECT', 'TEXTAREA'].includes(child.tagName)) {
workcell.value = child.value;
}
}
};

16
wms/mkt/table2excel/es5/plugins/hyperlink.js

@ -0,0 +1,16 @@
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = {
workcellCreated: function workcellCreated(_ref) {
var workcell = _ref.workcell,
cell = _ref.cell;
var child = cell.children[0];
if (child && child.tagName === 'A') {
workcell.value = { text: child.innerText, hyperlink: child.href };
}
}
};

40
wms/mkt/table2excel/es5/plugins/index.js

@ -0,0 +1,40 @@
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _font = require('./font');
var _font2 = _interopRequireDefault(_font);
var _fill = require('./fill');
var _fill2 = _interopRequireDefault(_fill);
var _form = require('./form');
var _form2 = _interopRequireDefault(_form);
var _alignment = require('./alignment');
var _alignment2 = _interopRequireDefault(_alignment);
var _hyperlink = require('./hyperlink');
var _hyperlink2 = _interopRequireDefault(_hyperlink);
var _autoWidth = require('./autoWidth');
var _autoWidth2 = _interopRequireDefault(_autoWidth);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = {
fontPlugin: _font2.default,
fillPlugin: _fill2.default,
formPlugin: _form2.default,
alignmentPlugin: _alignment2.default,
hyperlinkPlugin: _hyperlink2.default,
autoWidthPlugin: _autoWidth2.default
};

202
wms/mkt/table2excel/es5/table2excel.js

@ -0,0 +1,202 @@
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _exceljs = require('exceljs/dist/es5/exceljs.browser');
var _exceljs2 = _interopRequireDefault(_exceljs);
var _utils = require('./utils');
var _constants = require('./constants');
var _plugins = require('./plugins');
var _plugins2 = _interopRequireDefault(_plugins);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
var PLUGIN_FUNCS = ['workbookCreated', 'worksheetCreated', 'worksheetCompleted', 'workcellCreated'];
var DEFAULT_WORKBOOK_OPTIONS = {
views: [{
x: 0, y: 0, width: 10000, height: 20000,
firstSheet: 0, activeTab: 1, visibility: 'visible'
}]
};
var DEFAULT_OPTIONS = {
workbook: DEFAULT_WORKBOOK_OPTIONS,
widthRatio: _constants.WIDTH_RATIO,
plugins: [].concat(_toConsumableArray(Object.values(_plugins2.default)))
};
var Table2Excel = function () {
function Table2Excel() {
var _this = this;
var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'table';
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
_classCallCheck(this, Table2Excel);
this.tables = Array.from(typeof selector === 'string' ? document.querySelectorAll(selector) : selector);
this.options = Object.assign({}, DEFAULT_OPTIONS, options);
this.plugins = {};
PLUGIN_FUNCS.forEach(function (funName) {
_this.plugins[funName] = _this.options.plugins.filter(function (plugin) {
return plugin[funName];
}).map(function (plugin) {
return plugin[funName];
});
});
this.pluginContext = {};
}
_createClass(Table2Excel, [{
key: '_invokePlugin',
value: function _invokePlugin(func) {
var _this2 = this;
var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
this.pluginContext = Object.assign({}, this.pluginContext, context);
this.plugins[func].forEach(function (handler) {
return handler.call(_this2, _this2.pluginContext);
});
}
}, {
key: 'toExcel',
value: function toExcel() {
var _this3 = this;
var tables = this.tables,
options = this.options;
var workbook = new _exceljs2.default.Workbook(); // create workbook
Object.assign(workbook, options);
// workbookCreated plugins
this._invokePlugin('workbookCreated', { workbook: workbook, tables: tables });
tables.forEach(function (table, index) {
var worksheet = workbook.addWorksheet('Sheet ' + (index + 1));
// worksheetCreated plugins
_this3._invokePlugin('worksheetCreated', { worksheet: worksheet, table: table });
_this3.toSheet(table, worksheet);
// worksheetCompleted plugins
_this3._invokePlugin('worksheetCompleted', { worksheet: worksheet, table: table });
});
return this.workbook = workbook;
}
}, {
key: 'toSheet',
value: function toSheet(table, worksheet) {
var _this4 = this;
// get total cols and rows
var totalRows = table.rows.length;
var totalCols = 0;
if (table.rows.length > 0) {
for (var i = 0; i < table.rows[0].cells.length; i++) {
totalCols += table.rows[0].cells[i].colSpan;
}
}
var cells = [];
Array.from(table.rows).forEach(function (row) {
Array.from(row.cells).forEach(function (cell) {
cells.push({
rowRange: {},
colRange: {},
el: cell
});
});
});
// create matrix
var helperMatrix = [];
for (var r = 0; r < totalRows; r++) {
var row = [];
for (var c = 0; c < totalCols; c++) {
row.push({ cell: null });
}
helperMatrix.push(row);
}
// mark matrix
var cursor = 0;
for (var _r = 0; _r < totalRows; _r++) {
for (var _c = 0; _c < totalCols; _c++) {
// skip if current matrix unit is already assigned
if (helperMatrix[_r][_c].cell) {
continue;
}
// assign cell to current matrix unit
var cell = cells[cursor++];
var _cell$el = cell.el,
rowSpan = _cell$el.rowSpan,
colSpan = _cell$el.colSpan;
cell.rowRange = { from: _r, to: _r };
cell.colRange = { from: _c, to: _c };
for (var y = _r; y < _r + rowSpan; y++) {
for (var x = _c; x < _c + colSpan; x++) {
helperMatrix[y][x].cell = cell;
cell.colRange.to = x;
cell.rowRange.to = y;
}
}
}
}
// read matrix to sheet
cells.forEach(function (cell) {
var rowRange = cell.rowRange,
colRange = cell.colRange,
el = cell.el;
var innerText = el.innerText;
var workcell = (0, _utils.mergeCells)(worksheet, colRange.from, rowRange.from, colRange.to, rowRange.to);
var cellStyle = getComputedStyle(el);
workcell.value = innerText;
// workcellCreated
_this4._invokePlugin('workcellCreated', { workcell: workcell, cell: el, rowRange: rowRange, colRange: colRange, cellStyle: cellStyle });
});
}
}, {
key: 'export',
value: function _export(fileName, ext) {
if (!this.workbook) {
this.toExcel();
}
(0, _utils.saveAsExcel)(this.workbook, fileName, ext);
}
}]);
return Table2Excel;
}();
exports.default = Table2Excel;

89
wms/mkt/table2excel/es5/utils.js

@ -0,0 +1,89 @@
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.argb = exports.mergeCells = exports.cellPosition = exports.columnIndex = exports.saveAsExcel = undefined;
var _constants = require('./constants');
var _fileSaver = require('file-saver');
var saveAsExcel = exports.saveAsExcel = function saveAsExcel(workbook) {
var filename = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'table';
var ext = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'xlsx';
var type = _constants.MIME_TYPES[ext];
if (!type) {
console.error(ext + ' file extension is not supported');
return;
}
workbook.xlsx.writeBuffer().then(function (uint8) {
(0, _fileSaver.saveAs)(new Blob([uint8.buffer], { type: type }), filename + '.' + ext);
});
};
var letter = function letter(num) {
var a = 'A'.charCodeAt(0);
return String.fromCharCode(a + num - 1);
};
/**
* 0 => A
* 25 => Z
* 26 => AA
*/
var columnIndex = exports.columnIndex = function columnIndex(num) {
var result = void 0;
num = num + 1;
if (num <= 26) {
result = letter(num);
} else {
var mod = num % 26;
var quotient = Math.floor(num / 26);
if (mod === 0) {
result = letter(quotient - 1) + letter(26);
} else {
result = letter(quotient) + letter(mod);
}
}
return result;
};
// x = 0, y = 0 => 'A1'
// x = 0, y = 1 => 'A2'
// x = 1, y = 0 => 'B1'
var cellPosition = exports.cellPosition = function cellPosition(x, y) {
return '' + columnIndex(x) + (y + 1);
};
var mergeCells = exports.mergeCells = function mergeCells(sheet, x1, y1, x2, y2) {
var fromCell = cellPosition(x1, y1);
var toCell = cellPosition(x2, y2);
sheet.mergeCells(fromCell, toCell);
return sheet.getCell(fromCell);
};
/**
* convert rgb(0,0,0) rgba(0,0,0,0) to argb: FF00FF00
*/
var argb = exports.argb = function argb(color) {
var values = color.split('(')[1].split(')')[0].split(',').map(function (v, i) {
return i === 3 ? v * 255 : v;
});
if (values.length === 3) {
values.push(255);
}
values.unshift(values.pop());
return values.map(function (v) {
var s = parseInt(v).toString(16);
return s.length === 1 ? '0' + s : s;
}).join('').toUpperCase();
};

42
wms/mkt/table2excel/package.json

@ -0,0 +1,42 @@
{
"name": "table2excel.js",
"version": "1.0.0",
"description": "",
"main": "es5/index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack --config webpack.core.config.js -p && webpack --config webpack.umd.config.js -p",
"build:es5": "babel src --out-dir es5"
},
"repository": {
"type": "git",
"url": "git+https://github.com/jackgit/table2excel.js.git"
},
"keywords": [
"table",
"js",
"excel",
"xlsx",
"xls"
],
"author": "ygjack414@hotmail.com",
"license": "MIT",
"bugs": {
"url": "https://github.com/jackgit/table2excel.js/issues"
},
"homepage": "https://github.com/jackgit/table2excel.js#readme",
"dependencies": {
"file-saver": "^1.3.3"
},
"peerDependencies": {
"exceljs": "^0.6.2"
},
"devDependencies": {
"babel-cli": "^6.26.0",
"babel-core": "^6.26.0",
"babel-loader": "^7.1.2",
"babel-preset-es2015": "^6.24.1",
"babel-preset-stage-1": "^6.24.1",
"cross-env": "^5.2.0"
}
}

6
wms/mkt/table2excel/src/constants.js

@ -0,0 +1,6 @@
export const MIME_TYPES = {
xls: 'application/vnd.ms-excel',
xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
}
export const WIDTH_RATIO = .14

8
wms/mkt/table2excel/src/index.js

@ -0,0 +1,8 @@
import Table2Excel from './table2excel'
import plugins from './plugins'
import * as utils from './utils'
Table2Excel.plugins = plugins
Table2Excel.utils = utils
export default Table2Excel

49
wms/mkt/table2excel/src/plugins/alignment.js

@ -0,0 +1,49 @@
/**
* '-webkit-right' -> 'right'
* 'right' -> 'right'
* etc...
*/
const getHorizontalAlign = (value = '') => {
const aligns = ['right', 'left', 'center', 'justify']
for (let i = 0; i < aligns.length; i++) {
if (value.includes(aligns[i])) {
return aligns[i]
}
}
}
/**
* 'baseline' -> 'middle'
* 'text-top' -> 'top'
* 'text-bottom' -> 'bottom'
* 'sub' -> 'top'
* 'super' -> 'bottom'
*/
const getVerticalAlign = (value = '') => {
const aligns = ['top', 'middle', 'bottom']
for (let i = 0; i < aligns.length; i++) {
if (value.includes(aligns[i])) {
return aligns[i]
}
}
const mapping = {
'baseline': 'middle',
'super': 'top',
'sub': 'bottom'
}
return mapping[value]
}
export default {
workcellCreated ({ workcell, cellStyle }) {
const { verticalAlign, textAlign } = cellStyle
workcell.alignment = {
...(workcell.alignment || {}),
...({
vertical: getVerticalAlign(verticalAlign),
horizontal: getHorizontalAlign(textAlign)
})
}
}
}

7
wms/mkt/table2excel/src/plugins/autoWidth.js

@ -0,0 +1,7 @@
export default {
workcellCreated ({ worksheet, colRange, cell, cellStyle }) {
if (colRange.from === colRange.to && cellStyle.width !== 'auto') {
worksheet.getColumn(colRange.from + 1).width = (+cellStyle.width.split('px')[0]) * this.options.widthRatio
}
}
}

27
wms/mkt/table2excel/src/plugins/fill.js

@ -0,0 +1,27 @@
import { argb } from '../utils'
export default {
workcellCreated ({ workcell, cellStyle }) {
const color = argb(cellStyle.backgroundColor)
if (color === '00000000') {
// background is transparent, equals none pattern fill
workcell.fill = {
...(workcell.fill || {}),
...({
type: 'pattern',
pattern: 'none'
})
}
} else {
workcell.fill = {
...(workcell.fill || {}),
...({
type: 'pattern',
pattern: 'solid',
fgColor: { argb: color }
})
}
}
}
}

16
wms/mkt/table2excel/src/plugins/font.js

@ -0,0 +1,16 @@
import { argb } from '../utils'
export default {
workcellCreated ({ workcell, cellStyle }) {
const fontWeight = cellStyle.fontWeight
workcell.font = {
...(workcell.font || {}),
...({
name: cellStyle.fontFamily,
color: { argb: argb(cellStyle.color) },
bold: (fontWeight === 'bold' || +fontWeight > 600) ? true : false
})
}
}
}

8
wms/mkt/table2excel/src/plugins/form.js

@ -0,0 +1,8 @@
export default {
workcellCreated ({ workcell, cell }) {
const child = cell.children[0]
if (child && ['INPUT', 'SELECT', 'TEXTAREA'].includes(child.tagName)) {
workcell.value = child.value
}
}
}

8
wms/mkt/table2excel/src/plugins/hyperlink.js

@ -0,0 +1,8 @@
export default {
workcellCreated ({ workcell, cell }) {
const child = cell.children[0]
if (child && child.tagName === 'A') {
workcell.value = { text: child.innerText, hyperlink: child.href }
}
}
}

15
wms/mkt/table2excel/src/plugins/index.js

@ -0,0 +1,15 @@
import fontPlugin from './font'
import fillPlugin from './fill'
import formPlugin from './form'
import alignmentPlugin from './alignment'
import hyperlinkPlugin from './hyperlink'
import autoWidthPlugin from './autoWidth'
export default {
fontPlugin,
fillPlugin,
formPlugin,
alignmentPlugin,
hyperlinkPlugin,
autoWidthPlugin
}

149
wms/mkt/table2excel/src/table2excel.js

@ -0,0 +1,149 @@
import ExcelJS from 'exceljs/dist/es5/exceljs.browser'
import { mergeCells, saveAsExcel } from './utils'
import { WIDTH_RATIO } from './constants'
import plugins from './plugins'
const PLUGIN_FUNCS = ['workbookCreated', 'worksheetCreated', 'worksheetCompleted', 'workcellCreated']
const DEFAULT_WORKBOOK_OPTIONS = {
views: [{
x: 0, y: 0, width: 10000, height: 20000,
firstSheet: 0, activeTab: 1, visibility: 'visible'
}]
}
const DEFAULT_OPTIONS = {
workbook: DEFAULT_WORKBOOK_OPTIONS,
widthRatio: WIDTH_RATIO,
plugins: [...Object.values(plugins)]
}
export default class Table2Excel {
constructor (selector = 'table', options = {}) {
this.tables = Array.from(
typeof selector === 'string'
? document.querySelectorAll(selector)
: selector
)
this.options = Object.assign({}, DEFAULT_OPTIONS, options)
this.plugins = {}
PLUGIN_FUNCS.forEach(funName => {
this.plugins[funName] = this.options.plugins.filter(plugin => plugin[funName]).map(plugin => plugin[funName])
})
this.pluginContext = {}
}
_invokePlugin (func, context = {}) {
this.pluginContext = Object.assign({}, this.pluginContext, context)
this.plugins[func].forEach(handler => handler.call(this, this.pluginContext))
}
toExcel () {
const { tables, options } = this
const workbook = new ExcelJS.Workbook() // create workbook
Object.assign(workbook, options)
// workbookCreated plugins
this._invokePlugin('workbookCreated', { workbook, tables })
tables.forEach((table, index) => {
const worksheet = workbook.addWorksheet(`Sheet ${index + 1}`)
// worksheetCreated plugins
this._invokePlugin('worksheetCreated', { worksheet, table })
this.toSheet(table, worksheet)
// worksheetCompleted plugins
this._invokePlugin('worksheetCompleted', { worksheet, table })
})
return this.workbook = workbook
}
toSheet (table, worksheet) {
// get total cols and rows
const totalRows = table.rows.length
let totalCols = 0
if (table.rows.length > 0) {
for (let i = 0; i < table.rows[0].cells.length; i++) {
totalCols += table.rows[0].cells[i].colSpan
}
}
const cells = []
Array.from(table.rows).forEach(row => {
Array.from(row.cells).forEach(cell => {
cells.push({
rowRange: {},
colRange: {},
el: cell
})
})
})
// create matrix
const helperMatrix = []
for (let r = 0; r < totalRows; r++) {
const row = []
for (let c = 0; c < totalCols; c++) {
row.push({ cell: null })
}
helperMatrix.push(row)
}
// mark matrix
let cursor = 0
for (let r = 0; r < totalRows; r++) {
for (let c = 0; c < totalCols; c++) {
// skip if current matrix unit is already assigned
if (helperMatrix[r][c].cell) {
continue
}
// assign cell to current matrix unit
const cell = cells[cursor++]
const { rowSpan, colSpan } = cell.el
cell.rowRange = { from: r, to: r }
cell.colRange = { from: c, to: c }
for (let y = r; y < r + rowSpan; y++) {
for (let x = c; x < c + colSpan; x++) {
helperMatrix[y][x].cell = cell
cell.colRange.to = x
cell.rowRange.to = y
}
}
}
}
// read matrix to sheet
cells.forEach(cell => {
const { rowRange, colRange, el } = cell
const { innerText } = el
const workcell = mergeCells(worksheet, colRange.from, rowRange.from, colRange.to, rowRange.to)
const cellStyle = getComputedStyle(el)
workcell.value = innerText
// workcellCreated
this._invokePlugin('workcellCreated', { workcell, cell: el, rowRange, colRange, cellStyle })
})
}
export (fileName, ext) {
if (!this.workbook) {
this.toExcel()
}
saveAsExcel(this.workbook, fileName, ext)
}
}

81
wms/mkt/table2excel/src/utils.js

@ -0,0 +1,81 @@
import { MIME_TYPES } from './constants'
import { saveAs } from 'file-saver'
export const saveAsExcel = (workbook, filename = 'table', ext = 'xlsx') => {
const type = MIME_TYPES[ext]
if (!type) {
console.error(`${ext} file extension is not supported`)
return
}
workbook.xlsx.writeBuffer().then(uint8 => {
saveAs(
new Blob([uint8.buffer], { type }),
`${filename}.${ext}`
)
})
}
const letter = num => {
const a = 'A'.charCodeAt(0)
return String.fromCharCode(a + num - 1)
}
/**
* 0 => A
* 25 => Z
* 26 => AA
*/
export const columnIndex = num => {
let result
num = num + 1
if (num <= 26) {
result = letter(num)
} else {
const mod = num % 26
const quotient = Math.floor(num / 26)
if (mod === 0) {
result = letter(quotient - 1) + letter(26)
} else {
result = letter(quotient) + letter(mod)
}
}
return result
}
// x = 0, y = 0 => 'A1'
// x = 0, y = 1 => 'A2'
// x = 1, y = 0 => 'B1'
export const cellPosition = (x, y) => {
return `${columnIndex(x)}${y + 1}`
}
export const mergeCells = (sheet, x1, y1, x2, y2) => {
const fromCell = cellPosition(x1, y1)
const toCell = cellPosition(x2, y2)
sheet.mergeCells(fromCell, toCell)
return sheet.getCell(fromCell)
}
/**
* convert rgb(0,0,0) rgba(0,0,0,0) to argb: FF00FF00
*/
export const argb = color => {
const values = color
.split('(')[1].split(')')[0].split(',')
.map((v, i) => i === 3 ? v * 255 : v)
if (values.length === 3) {
values.push(255)
}
values.unshift(values.pop())
return values.map(v => {
const s = parseInt(v).toString(16)
return s.length === 1 ? `0${s}` : s
}).join('').toUpperCase()
}

26
wms/mkt/table2excel/webpack.core.config.js

@ -0,0 +1,26 @@
module.exports = {
entry: './src/index.js',
output: {
filename: './dist/table2excel.core.js',
library: 'Table2Excel',
libraryTarget: 'umd',
libraryExport: 'default'
},
module: {
rules: [
{
test: /\.js$/,
use: [
'babel-loader',
],
exclude: /node_modules/
}
]
},
externals: {
'exceljs/dist/es5/exceljs.browser': 'ExcelJS'
},
node: {
fs: 'empty'
}
};

23
wms/mkt/table2excel/webpack.umd.config.js

@ -0,0 +1,23 @@
module.exports = {
entry: './src/index.js',
output: {
filename: './dist/table2excel.min.js',
library: 'Table2Excel',
libraryTarget: 'umd',
libraryExport: 'default'
},
module: {
rules: [
{
test: /\.js$/,
use: [
'babel-loader',
],
exclude: /node_modules/
}
]
},
node: {
fs: 'empty'
}
};

47
wms/mkt/window-modal/demolishOptionModal.php

@ -0,0 +1,47 @@
<div class="window-modal" x-cloak data-type="window-modal" x-show="modalShow.demolish" x-ref="createDemolishModal" id="createDemolishModal">
<div class="window-modal-content modal-xl">
<div class="window-modal-header">
<h4>新增拆梯價格</h4>
<button class="btn btn-close" @click="hideCreateDemolishModal()">X</button>
</div>
<div class="window-modal-body">
<div>
<table class="table">
<tr class="table-active">
<th>人乘/載重</th>
<th>樓層</th>
<th>單價</th>
<th>數量</th>
<th>總價</th>
</tr>
<tr>
<td>
<select class="form-control" x-model="modalDemolishOptionsInfo.person" @change="getModalDemolishPrice()">
<option value="">請選擇</option>
<option value="15人(含)以下">15人(含)以下/1000KGS</option>
<option value="16~24人">16~24人/1001~1600KGS</option>
<option value="25~30人">25~30人/1601~2500KGS</option>
</select>
</td>
<td>
<select class="form-control" x-model="modalDemolishOptionsInfo.floor" @change="getModalDemolishPrice()">
<option value="">請選擇</option>
<?php for($i=4;$i<=40;$i++): ?>
<option value="<?php echo $i; ?>"><?php echo $i; ?></option>
<?php endfor; ?>
</select>
</td>
<td><input type="text" disabled class="form-control" x-model="Number(modalDemolishOptionsInfo.price).toLocaleString()"></td>
<td><input type="number" class="form-control" x-model="modalDemolishOptionsInfo.qty"></td>
<td><input type="text" disabled class="form-control" x-model="(modalDemolishOptionsInfo.price * modalDemolishOptionsInfo.qty).toLocaleString()"></td>
</tr>
</table>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" @click="hideCreateDemolishModal()">關閉</button>
<button type="button" class="btn btn-primary" @click="createDemolishOptionFn()">新增</button>
</div>
</div>
<div class="window-back" @click="hideCreateDemolishModal()"></div>
</div>

36
wms/mkt/window-modal/demolishToElevatorModal.php

@ -0,0 +1,36 @@
<div class="window-modal" x-cloak data-type="window-modal" x-show="modalShow.demolishToElevator" x-ref="toDemolishOptionElevatorModal" id="toDemolishOptionElevatorModal">
<div class="window-modal-content modal-m">
<div class="window-modal-header">
<h4>配對電梯</h4>
<button class="btn btn-close" @click="hideToDemolishOptionElevatorModal()">X</button>
</div>
<div class="window-modal-body">
<div>
<table class="table">
<tr>
<th>項次</th>
<th>規格</th>
<th>選擇</th>
</tr>
<template x-for="elevator in toElevators">
<tr>
<td x-text="elevator.id"></td>
<td x-text="elevator.model"></td>
<td><input type="radio" name="demolishOptionToElevator" :value="elevator.id" class="form-check-input" x-model="toElevatorNo" /></td>
</tr>
</template>
<tr x-show="toElevators.length == 0">
<td colspan="3">
<small class="text-danger" style="font-size:13px;font-weight:600">暫無可選電梯,請先新增電梯規格!</small>
</td>
</tr>
</table>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" @click="hideToDemolishOptionElevatorModal()">關閉</button>
<button type="button" class="btn btn-primary" @click="chkDemolishOptionToElevators()">確認</button>
</div>
</div>
<div class="window-back" @click="hideToDemolishOptionElevatorModal()"></div>
</div>

124
wms/mkt/window-modal/elevatorModal.php

@ -0,0 +1,124 @@
<div class="window-modal" x-cloak data-type="window-modal" x-show="modalShow.elevator" x-ref="createElevatorModal" id="createElevatorModal">
<div class="window-modal-content modal-xl">
<div class="window-modal-header">
<h4>新增電梯規格</h4>
<button class="btn btn-close" @click="hideCreateElevatorModal()">X</button>
</div>
<div class="window-modal-body">
<div>
<table class="table">
<tr class="table-active">
<th>電梯</th>
<th>人乘</th>
<th>載重(KG)</th>
<th>停數</th>
</tr>
<tr>
<td>
<select name="" id="" class="form-control" x-model="modalElevatorInfo.spec" @change="getModalElevatorPrice()">
<option value="">請選擇</option>
<option value="MAE100">MAE100有機房</option>
<option value="MAM200">MAM200無機房</option>
<option value="MAH100">MAH100小電梯</option>
<option value="MAF100">MAF100貨梯(有機房)</option>
<option value="MAQ100">MAQ100強趨梯</option>
<option value="MAP100">MAP100平台梯</option>
<?php if($hope_customer['is_renovation'] == 'Y'): ?>
<option value="M1">M1(系統更新)</option>
<option value="M1+M4(1:1)">M1+M4(1:1)系統+主機</option>
<option value="M1+M4(2:1)">M1+M4(2:1)系統+主機</option>
<?php endif; ?>
</select>
</td>
<td>
<select name="" id="" class="form-control" x-model="modalElevatorInfo.person" @change="getModalElevatorPrice()">
<option value="">請選擇</option>
<option value="6">6</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="15">15</option>
<option value="17">17</option>
<option value="20">20</option>
<option value="24">24</option>
</select>
</td>
<td>
<input type="number" class="form-control" style="width:93px" x-model="modalElevatorInfo.weight" @keyup="getModalElevatorPrice()" @change="getModalElevatorPrice()">
</td>
<td>
<input type="number" class="form-control" style="width:93px" x-model="modalElevatorInfo.stop" @keyup="getModalElevatorPrice()" @change="getModalElevatorPrice()" />
</td>
</tr>
<tr class="table-active">
<th>開門方式</th>
<th>速度</th>
<th>規格</th>
<th>數量</th>
</tr>
<tr>
<td>
<select name="" id="" class="form-control" style="width:93px" x-model="modalElevatorInfo.open" @change="getModalElevatorPrice()">
<option value="CO">CO</option>
<option value="2S">2S</option>
<option value="2U">CO</option>
<option value="4PCO">4PCO</option>
<option value="6PCO">6PCO</option>
</select>
</td>
<td>
<select name="" id="" class="form-control" style="width:93px" x-model="modalElevatorInfo.speed" @change="getModalElevatorPrice()" >
<option value="">請選擇</option>
<option value="9">9</option>
<option value="24">24</option>
<option value="30">30</option>
<option value="45">45</option>
<option value="60">60</option>
<option value="90">90</option>
<option value="105">105</option>
<option value="120">120</option>
<option value="150">150</option>
</select>
</td>
<td>
<input type="text" x-show="!modalElevatorInfo.price || modalElevatorInfo.price ==''" class="form-control" disabled />
<input type="text" x-show="modalElevatorInfo.price > 0" class="form-control" disabled x-model="modalElevatorInfo.model">
</td>
<td>
<input type="number" class="form-control" style="width:93px" x-model="modalElevatorInfo.num" >
</td>
</tr>
<tr class="table-active">
<th>公司發布價(單價)</th>
<th>公司發布價(複價)</th>
<th>自定售價(台)</th>
<th>自定售價(總價)</th>
</tr>
<tr>
<td>
<input type="text" disabled class="form-control" x-model="(modalElevatorInfo.price).toLocaleString()">
</td>
<td>
<input type="text" disabled class="form-control" x-model="(modalElevatorInfo.price * modalElevatorInfo.num).toLocaleString()">
</td>
<td>
<input type="number" class="form-control" x-model="modalElevatorInfo.sale_price">
</td>
<td>
<input type="text" disabled class="form-control" x-model="(modalElevatorInfo.sale_price * modalElevatorInfo.num).toLocaleString()">
</td>
</tr>
</table>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" @click="hideCreateElevatorModal()">關閉</button>
<button type="button" class="btn btn-primary" @click="createElevatorFn()">新增</button>
</div>
</div>
<div class="window-back" @click="hideCreateElevatorModal()"></div>
</div>

62
wms/mkt/window-modal/historySignModal.php

@ -0,0 +1,62 @@
<div class="window-modal " x-show="historySignShow" x-cloak data-type="window-modal" x-ref="historySign" id="historySign">
<div class="window-modal-content modal-lg">
<div class="window-modal-header">
<h4>歷史簽核紀錄</h4>
<button class="btn btn-close" @click="hideHistorySignModal()">X</button>
</div>
<div class="window-modal-body">
<div>
<table class="table historytable" style="width:700px">
<thead>
<tr>
<th>審核</th>
<th>審核人</th>
<th>結果</th>
<th>意見</th>
<th>時間</th>
</tr>
</thead>
<tbody>
<?php foreach($historySign as $key=>$history): ?>
<tr>
<td colspan="5"></td>
</tr>
<tr>
<td>區經理</td>
<td><?php echo $history['signer1']; ?></td>
<td><?php echo $history['sign1_result']; ?></td>
<td><?php echo $history['sign1_note']; ?></td>
<td><?php echo $history['sign1_date']; ?></td>
</tr>
<tr>
<td x-text="is_renovate=='汰改' ? '服務助理' : '業務承辦人'"></td>
<td><?php echo $history['signer2']; ?></td>
<td><?php echo $history['sign2_result']; ?></td>
<td><?php echo $history['sign2_note']; ?></td>
<td><?php echo $history['sign2_date']; ?></td>
</tr>
<tr>
<td x-text="is_renovate=='汰改' ? '服務副總' :'業務部協理'"></td>
<td><?php echo $history['signer3']; ?></td>
<td><?php echo $history['sign3_result']; ?></td>
<td><?php echo $history['sign3_note']; ?></td>
<td><?php echo $history['sign3_date']; ?></td>
</tr>
<tr>
<td>總經理</td>
<td><?php echo $history['signer4']; ?></td>
<td><?php echo $history['sign4_result']; ?></td>
<td><?php echo $history['sign4_note']; ?></td>
<td><?php echo $history['sign4_date']; ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal" @click="hideHistorySignModal()">關閉</button>
</div>
</div>
<div class="window-back" @click="hideHistorySignModal()"></div>
</div>

31
wms/mkt/window-modal/maintainOptionModal.php

@ -0,0 +1,31 @@
<div class="window-modal" x-cloak data-type="window-modal" x-show="modalShow.maintain" x-ref="createMaintainModal" id="createMaintainModal">
<div class="window-modal-content modal-xl">
<div class="window-modal-header">
<h4>新增保固延長</h4>
<button class="btn btn-close" @click="hideCreateMaintainModal()">X</button>
</div>
<div class="window-modal-body">
<div>
<table class="table">
<tr class="table-active">
<th>單價</th>
<th>數量(月)</th>
<th>總價</th>
<th>備註</th>
</tr>
<tr>
<td><input type="number" class="form-control" x-model="modalMaintainInfo.price"></td>
<td><input type="number" class="form-control" x-model="modalMaintainInfo.num"></td>
<td><input type="text" disabled class="form-control" x-model="(modalMaintainInfo.price * modalMaintainInfo.num).toLocaleString()"></td>
<td><input type="text" class="form-control" x-model="modalMaintainInfo.memo"></td>
</tr>
</table>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" @click="hideCreateMaintainModal()">關閉</button>
<button type="button" class="btn btn-primary" @click="createMaintainOptionFn()">新增</button>
</div>
</div>
<div class="window-back" @click="hideCreateMaintainModal()"></div>
</div>

36
wms/mkt/window-modal/maintainToElevatorModal.php

@ -0,0 +1,36 @@
<div class="window-modal" x-cloak data-type="window-modal" x-show="modalShow.maintainToElevator" x-ref="toMaintainOptionElevatorModal" id="toMaintainOptionElevatorModal">
<div class="window-modal-content modal-m">
<div class="window-modal-header">
<h4>配對電梯</h4>
<button class="btn btn-close" @click="hideToMaintainOptionElevatorModal()">X</button>
</div>
<div class="window-modal-body">
<div>
<table class="table">
<tr>
<th>項次</th>
<th>規格</th>
<th>選擇</th>
</tr>
<template x-for="elevator in toElevators">
<tr>
<td x-text="elevator.id"></td>
<td x-text="elevator.model"></td>
<td><input type="radio" name="maintainOptionToElevator" :value="elevator.id" class="form-check-input" x-model="toElevatorNo" /></td>
</tr>
</template>
<tr x-show="toElevators.length == 0">
<td colspan="3">
<small class="text-danger" style="font-size:13px;font-weight:600">暫無可選電梯,請先新增電梯規格!</small>
</td>
</tr>
</table>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" @click="hideToMaintainOptionElevatorModal()">關閉</button>
<button type="button" class="btn btn-primary" @click="chkMaintainOptionToElevators()">確認</button>
</div>
</div>
<div class="window-back" @click="hideToMaintainOptionElevatorModal()"></div>
</div>

59
wms/mkt/window-modal/optionModal.php

@ -0,0 +1,59 @@
<div class="window-modal " x-cloak data-type="window-modal" x-show="modalShow.option" x-ref="optionsModal" id="optionModal">
<div class="window-modal-content modal-xl">
<div class="window-modal-header">
<h4>OPTION加價</h4>
<button class="btn btn-close" @click="hideOptionsModal()">X</button>
<div class="mt-3">
<input type="text" class="form-control" x-model="searchtext" @keyup="searchOptions()" placeholder="搜尋..." />
</div>
<div class="categories mt-3">
<button :class="['btn', 'mt-2', (kind==1) ? 'btn-primary' : 'btn-secondary text-light']" @click="searchOptions(1)">顯示全部</button>
<button :class="['btn', 'mt-2', (kind=='A') ? 'btn-primary' : 'btn-secondary text-light']" @click="searchOptions('A', 1)">A-1 車廂意匠</button>
<button :class="['btn', 'mt-2', (kind=='B') ? 'btn-primary' : 'btn-secondary text-light']" @click="searchOptions('B', 1)">A-2 車廂內裝</button>
<button :class="['btn', 'mt-2', (kind=='C') ? 'btn-primary' : 'btn-secondary text-light']" @click="searchOptions('C', 1)">A-3 車廂外部</button>
<button :class="['btn', 'mt-2', (kind=='D') ? 'btn-primary' : 'btn-secondary text-light']" @click="searchOptions('D', 1)">A-4 控制與其他</button>
<button :class="['btn', 'mt-2', (kind=='E') ? 'btn-primary' : 'btn-secondary text-light']" @click="searchOptions('E', 1)">B-1 平台梯</button>
<button :class="['btn', 'mt-2', (kind=='F') ? 'btn-primary' : 'btn-secondary text-light']" @click="searchOptions('F', 1)">C-1 汰改</button>
<br /><br />
<template x-for="button in buttons">
<button style="margin-right:3px" :class="['btn', (button.type == subkind) ? 'btn-primary' : 'btn-secondary text-light']" @click="searchOptions(null, button.type)" x-text="button.name"></button>
</template>
</div>
</div>
<div class="window-modal-body">
<div>
<table class="table " border=1>
<thead>
<tr>
<th>ID</th>
<th>名稱</th>
<th>規格</th>
<th>備註</th>
<th>配置</th>
<th>單位</th>
<th>定價</th>
</tr>
</thead>
<tbody>
<template x-for="(option, idx) in options" :key="option.id">
<tr style="cursor:pointer;" :class="option.selected == 1 ? ' selected' : ''" x-show="option.isShow == 1" @click="selectOption(idx, option.id, option.group_name, option.price, option.memo)">
<td x-text='option.id' name="optionID" class="bg-transparent"></td>
<td x-text="option.group_name" class="bg-transparent"> </td>
<td x-text="option.spec" class="bg-transparent"></td>
<td x-text="option.memo" class="bg-transparent"></td>
<td x-text="optionalArr[option.optional]" class="bg-transparent"></td>
<td x-text="option.unit" class="bg-transparent"></td>
<td x-text="option.price" class="bg-transparent"></td>
</tr>
</template>
</tbody>
</table>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal" @click="hideOptionsModal()">關閉</button>
<button type="button" class="btn btn-primary" data-bs-dismiss="modal" @click="chkOptions()">確認</button>
</div>
</div>
<div class="window-back" @click="hideOptionsModal()"></div>
</div>

36
wms/mkt/window-modal/optionToElevatorModal.php

@ -0,0 +1,36 @@
<div class="window-modal" x-cloak data-type="window-modal" x-show="modalShow.optionToElevator" x-ref="toElevatorModal" id="toElevatorModal">
<div class="window-modal-content modal-m">
<div class="window-modal-header">
<h4>配對電梯</h4>
<button class="btn btn-close" @click="hideToElevatorModal()">X</button>
</div>
<div class="window-modal-body">
<div>
<table class="table">
<tr>
<th>項次</th>
<th>規格</th>
<th>選擇</th>
</tr>
<template x-for="elevator in toElevators">
<tr>
<td x-text="elevator.id"></td>
<td x-text="elevator.model"></td>
<td><input type="radio" name="optionToElevator" :value="elevator.id" class="form-check-input" x-model="toElevatorNo" /></td>
</tr>
</template>
<tr x-show="toElevators.length == 0">
<td colspan="3">
<small class="text-danger" style="font-size:13px;font-weight:600">暫無可選電梯,請先新增電梯規格!</small>
</td>
</tr>
</table>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" @click="hideToElevatorModal()">關閉</button>
<button type="button" class="btn btn-primary" @click="chkOptionToElevators()">確認</button>
</div>
</div>
<div class="window-back" @click="hideToElevatorModal()"></div>
</div>

33
wms/mkt/window-modal/otherOptionModal.php

@ -0,0 +1,33 @@
<div class="window-modal" x-cloak data-type="window-modal" x-show="modalShow.other" x-ref="createOtherOptionModal" id="createOtherOptionModal">
<div class="window-modal-content modal-xl">
<div class="window-modal-header">
<h4>新增除外項目</h4>
<button class="btn btn-close" @click="hideCreateOtherOptionModal()">X</button>
</div>
<div class="window-modal-body">
<div>
<table class="table">
<tr class="table-active">
<th>詢價單號</th>
<th>項目名稱</th>
<th>單價</th>
<th>數量</th>
<th>複價</th>
</tr>
<tr>
<td><input type="text" class="form-control" x-model="modalOtherOptionInfo.pr_no"></td>
<td><input type="text" class="form-control" x-model="modalOtherOptionInfo.name"></td>
<td><input type="number" class="form-control" x-model="modalOtherOptionInfo.price"></td>
<td><input type="number" class="form-control" x-model="modalOtherOptionInfo.num"></td>
<td><input type="text" disabled class="form-control" x-model="(modalOtherOptionInfo.price * modalOtherOptionInfo.num).toLocaleString()"></td>
</tr>
</table>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" @click="hideCreateOtherOptionModal()">關閉</button>
<button type="button" class="btn btn-primary" @click="createOtherOptionFn()">新增</button>
</div>
</div>
<div class="window-back" @click="hideCreateOtherOptionModal()"></div>
</div>

36
wms/mkt/window-modal/otherToElevatorModal.php

@ -0,0 +1,36 @@
<div class="window-modal" x-cloak data-type="window-modal" x-show="modalShow.otherToElevator" x-ref="toOtherOptionElevatorModal" id="toOtherOptionElevatorModal">
<div class="window-modal-content modal-m">
<div class="window-modal-header">
<h4>配對電梯</h4>
<button class="btn btn-close" @click="hideToOtherOptionElevatorModal()">X</button>
</div>
<div class="window-modal-body">
<div>
<table class="table">
<tr>
<th>項次</th>
<th>規格</th>
<th>選擇</th>
</tr>
<template x-for="elevator in toElevators">
<tr>
<td x-text="elevator.id"></td>
<td x-text="elevator.model"></td>
<td><input type="radio" name="otherOptionToElevator" :value="elevator.id" class="form-check-input" x-model="toElevatorNo" /></td>
</tr>
</template>
<tr x-show="toElevators.length == 0">
<td colspan="3">
<small class="text-danger" style="font-size:13px;font-weight:600">暫無可選電梯,請先新增電梯規格!</small>
</td>
</tr>
</table>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" @click="hideToOtherOptionElevatorModal()">關閉</button>
<button type="button" class="btn btn-primary" @click="chkOtherOptionToElevators()">確認</button>
</div>
</div>
<div class="window-back" @click="hideToOtherOptionElevatorModal()"></div>
</div>

6
wms/notice-edit.php

@ -33,13 +33,17 @@ foreach ($data as $data) :
<form class="form-inline" method="post" action="#">
<div>
<label for="title">標題</label>
<input type="text" name="title" id="title" size="30" maxlength="25" value="<?php echo $data['title']; ?>" required>
<input type="text" name="title" disabled id="title" size="30" maxlength="25" value="<?php echo $data['title']; ?>" required>
</div>
<div class="nextline"></div>
<div>
<label for="content">內容</label><br>
<div>
<?php echo nl2br(str_replace("{token_link}", $token_link, $data['content'])); ?>
<?php if(!empty($data['url'])): ?>
<br />
<a href="./<?php echo $data['url'] ?>&<?php echo $token_link; ?>">前往查看</a>
<?php endif; ?>
</div>
<!-- <textarea class="form-control2" name="content" id="content" rows="8" cols="100" required><?php echo $data['content']; ?></textarea> -->
</div>

8
wms/notice-index.php

@ -90,7 +90,13 @@ if ($data) :
<td><?php if ($data['kind'] == '1') echo "系統";
else echo "會議"; ?></td>
<td><?php echo $data['title']; ?></td>
<td><?php echo $data['content']; ?></td>
<td>
<?php echo $data['content']; ?>
<?php if(!empty($data['url'])): ?>
<br />
<a href="./<?php echo $data['url'] ?>&<?php echo $token_link; ?>">前往查看</a>
<?php endif; ?>
</td>
<td>
<?php
if ($data['haveread'] == '1')

83
wms/rib01-index.php

@ -9,8 +9,8 @@ $sql = "select * from rib ";
// 是否為會計 阿娥
if (($user_id == "M0056" || $user_id == "M0209")) {
$sql .= "WHERE ((CurrentState =1) or (TransactId= '$user_id') or (WriteOffId='$user_id') or (GatheringPersonId='$user_id'))";
$data = mysqli_query($link, $sql);
$sql .= "WHERE ((CurrentState =1) or (TransactId= '$user_id') or (WriteOffId='$user_id') or (GatheringPersonId='$user_id')) ORDER BY BillDate DESC ";
$query_data = mysqli_query($link, $sql);
} else {
// 找下屬
@ -22,17 +22,21 @@ if (($user_id == "M0056" || $user_id == "M0209")) {
$column_str = "('$user_id'" . ",'";
$column_str .= implode("','", $follower);
$column_str .= "')";
$sql .= "WHERE ((TransactId in $column_str) or (WriteOffId in $column_str) or (GatheringPersonId in $column_str))";
$sql .= "WHERE ((TransactId in $column_str) or (WriteOffId in $column_str) or (GatheringPersonId in $column_str)) ORDER BY BillDate DESC ";
} else {
$sql .= "WHERE ((TransactId= '$user_id') or (WriteOffId='$user_id') or (GatheringPersonId='$user_id'))";
$sql .= "WHERE ((TransactId= '$user_id') or (WriteOffId='$user_id') or (GatheringPersonId='$user_id')) ORDER BY BillDate DESC ";
};
$data = mysqli_query($link, $sql);
$query_data = mysqli_query($link, $sql);
}
// 取得部門代碼
$sql_depid = "SELECT department_id, name from department";
$dept_query = mysqli_query($link, $sql_depid);
$deptype = mysqli_fetch_all($dept_query, MYSQLI_ASSOC);
// $data = mysqli_fetch_all($query_data, MYSQLI_ASSOC);
for($i = 0; $i < mysqli_num_rows($query_data); $i++) {
$data[$i] = mysqli_fetch_assoc($query_data);
}
?>
<!--
@ -107,75 +111,76 @@ if ($data) :
<?php
if (is_iterable($data)) {
foreach ($data as $data) : ?>
for($i = 0; $i < count($data); $i++) {
// foreach ($data as $data) : ?>
<tr>
<td><?php echo $data['BillNo']; ?></td>
<td><?php echo substr($data['BillDate'], 0, 10); ?></td>
<td><?php if ($data['pay_type'] == 0) {
<td><?php echo $data[$i]['BillNo']; ?></td>
<td><?php echo substr($data[$i]['BillDate'], 0, 10); ?></td>
<td><?php if ($data[$i]['pay_type'] == 0) {
echo "現金";
} elseif ($data['pay_type'] == 1) {
} elseif ($data[$i]['pay_type'] == 1) {
echo "銀行轉帳";
}; ?></td>
<td><?php echo accountidToName($data['TransactId']); ?></td>
<td><?php echo accountidToName($data[$i]['TransactId']); ?></td>
<td><?php
if (is_iterable($deptype)) {
foreach ($deptype as $dept) {
if ($data["DeptId"] == $dept['department_id']) {
if ($data[$i]["DeptId"] == $dept['department_id']) {
echo $dept['name'];
break;
}
}
} ?></td>
<td><?php echo accountidToName($data['WriteOffId']); ?></td>
<td><?php if ($data['CurrId'] == "USD") : echo "美金";
elseif ($data['CurrId'] == "TWD") : echo "台幣";
elseif ($data['CurrId'] == "CNY") : echo "人民幣";
elseif ($data['CurrId'] == "HKD") : echo "港幣";
elseif ($data['CurrId'] == "EUR") : echo "歐元";
<td><?php echo accountidToName($data[$i]['WriteOffId']); ?></td>
<td><?php if ($data[$i]['CurrId'] == "USD") : echo "美金";
elseif ($data[$i]['CurrId'] == "TWD") : echo "台幣";
elseif ($data[$i]['CurrId'] == "CNY") : echo "人民幣";
elseif ($data[$i]['CurrId'] == "HKD") : echo "港幣";
elseif ($data[$i]['CurrId'] == "EUR") : echo "歐元";
endif; ?> </td>
<?php
if (($user_id == "M0056" || $user_id == "M0209")) { ?>
<td><?php echo $data['OAmountWithTax']; ?> </td>
<td><?php echo $data[$i]['OAmountWithTax']; ?> </td>
<?php } ?>
<td><?php if ($data['CurrentState'] == 0) : echo "草稿";
elseif ($data['CurrentState'] == 1) : echo "審核中";
elseif ($data['CurrentState'] == 2) : echo "通過";
elseif ($data['CurrentState'] == 3) : echo "作廢";
elseif ($data['CurrentState'] == 5) : echo "退回";
<td><?php if ($data[$i]['CurrentState'] == 0) : echo "草稿";
elseif ($data[$i]['CurrentState'] == 1) : echo "審核中";
elseif ($data[$i]['CurrentState'] == 2) : echo "通過";
elseif ($data[$i]['CurrentState'] == 3) : echo "作廢";
elseif ($data[$i]['CurrentState'] == 5) : echo "退回";
else : echo "結案";
endif ?>
</td>
<td>
<p>
<?php if (($user_id == "M0056" || $user_id == "M0209") && $data['CurrentState'] == 1) {
<?php if (($user_id == "M0056" || $user_id == "M0209") && $data[$i]['CurrentState'] == 1) {
?>
<a href="rib01-check.php?id=<?php echo $data['rib_id'] ?>&state=1&<?= $token_link ?>" class="btn btn-success btn-sm">
<a href="rib01-check.php?id=<?php echo $data[$i]['rib_id'] ?>&state=1&<?= $token_link ?>" class="btn btn-success btn-sm">
<span class="glyphicon glyphicon-pawn"></span>
</a>
<?php
} else { ?>
<?php if ($data['CurrentState'] == 0) : ?>
<a href="rib01-check.php?id=<?php echo $data['rib_id'] ?>&state=0&<?= $token_link ?>" class="btn btn-warning btn-sm">
<?php if ($data[$i]['CurrentState'] == 0) : ?>
<a href="rib01-check.php?id=<?php echo $data[$i]['rib_id'] ?>&state=0&<?= $token_link ?>" class="btn btn-warning btn-sm">
<span class="glyphicon glyphicon-pencil"></span>
</a>
<?php elseif ($data['CurrentState'] == 1) : ?>
<a href="rib01-check.php?id=<?php echo $data['rib_id'] ?>&state=1&<?= $token_link ?>" class="btn btn-primary btn-sm">
<?php elseif ($data[$i]['CurrentState'] == 1) : ?>
<a href="rib01-check.php?id=<?php echo $data[$i]['rib_id'] ?>&state=1&<?= $token_link ?>" class="btn btn-primary btn-sm">
<span class=" glyphicon glyphicon-search"></span>
</a>
<button type="button" onclick="download(<?= $data['rib_id'] ?>)" class="btn btn-info btn-sm"><span class="glyphicon glyphicon-download-alt"></span></button>
<!-- <a href="rib03-download.php?id=<?php echo $data['rib_id'] ?>&<?= $token_link ?>" class="btn btn-info btn-sm">
<button type="button" onclick="download(<?= $data[$i]['rib_id'] ?>)" class="btn btn-info btn-sm"><span class="glyphicon glyphicon-download-alt"></span></button>
<!-- <a href="rib03-download.php?id=<?php echo $data[$i]['rib_id'] ?>&<?= $token_link ?>" class="btn btn-info btn-sm">
<span class="glyphicon glyphicon-download-alt"></span>
</a> -->
<?php elseif ($data['CurrentState'] == 2) : ?>
<a href="rib01-check.php?id=<?php echo $data['rib_id'] ?>&state=2&<?= $token_link ?>" class="btn btn-info btn-sm">
<?php elseif ($data[$i]['CurrentState'] == 2) : ?>
<a href="rib01-check.php?id=<?php echo $data[$i]['rib_id'] ?>&state=2&<?= $token_link ?>" class="btn btn-info btn-sm">
<span class=" glyphicon glyphicon-ok"></span>
</a>
<?php elseif ($data['CurrentState'] == 3) : ?>
<a href="rib01-check.php?id=<?php echo $data['rib_id'] ?>&state=2&<?= $token_link ?>" class="btn btn-primary btn-sm">
<?php elseif ($data[$i]['CurrentState'] == 3) : ?>
<a href="rib01-check.php?id=<?php echo $data[$i]['rib_id'] ?>&state=2&<?= $token_link ?>" class="btn btn-primary btn-sm">
<span class="glyphicon glyphicon-search"></span>
</a>
<?php elseif ($data['CurrentState'] == 5) : ?>
<a href="rib01-check.php?id=<?php echo $data['rib_id'] ?>&state=2&<?= $token_link ?>" class="btn btn-primary btn-sm">
<?php elseif ($data[$i]['CurrentState'] == 5) : ?>
<a href="rib01-check.php?id=<?php echo $data[$i]['rib_id'] ?>&state=2&<?= $token_link ?>" class="btn btn-primary btn-sm">
<span class="glyphicon glyphicon-search"></span>
</a>
<?php endif;
@ -184,7 +189,7 @@ if ($data) :
</p>
</td>
</tr>
<?php endforeach;
<?php };
} ?>
</tbody>
</table>

4
wms/rib02-create.php

@ -7,10 +7,10 @@ $CurrId = isset($_GET['CurrId']) ? $_GET['CurrId'] : null;
$sql_rib = "";
if (empty($rib_id)) {
$sql_rib = "SELECT * FROM rib WHERE BillNo = '$BillNo' && CurrentState=0";
$sql_invoiceNo = "SELECT DISTINCT InvoiceNo FROM rib_sub WHERE BillNo!=$BillNo";
$sql_invoiceNo = "SELECT DISTINCT InvoiceNo FROM rib_sub LEFT JOIN rib ON rib.rib_id=rib_sub.rib_id WHERE (rib.CurrentState=2 || rib.CurrentState=4 ) AND rib.BillNo!='$BillNo'";
} else {
$sql_rib = "SELECT * FROM rib WHERE rib_id = $rib_id";
$sql_invoiceNo = "SELECT DISTINCT InvoiceNo FROM rib_sub WHERE rib_id!=$rib_id";
$sql_invoiceNo = "SELECT DISTINCT InvoiceNo FROM rib_sub LEFT JOIN rib ON rib.rib_id=rib_sub.rib_id WHERE (rib.CurrentState=2 || rib.CurrentState=4 ) AND rib.rib_id!=$rib_id";
}
$rib_query = mysqli_query($link, $sql_rib);
if (mysqli_num_rows($rib_query) > 0) {

5
wms/rib02-edit.php

@ -60,7 +60,10 @@ foreach ($BizPartner as $biz) {
// 取得所有報銷過的發票號碼
$rib_id = $ribsub['rib_id'];
$sql_invoiceNo = "SELECT DISTINCT InvoiceNo FROM rib_sub WHERE rib_id !== $rib_id";
// $sql_invoiceNo = "SELECT DISTINCT InvoiceNo FROM rib_sub WHERE rib_id !== $rib_id";
$sql_invoiceNo = "SELECT DISTINCT InvoiceNo FROM rib_sub
LEFT JOIN rib ON rib.rib_id=rib_sub.rib_id
WHERE (rib.CurrentState=2 || rib.CurrentState=4 ) AND rib.rib_id!=$rib_id";
$invoiceNo = mysqli_query($link, $sql_invoiceNo);
$invoiceNo_array = array();
if (is_iterable($invoiceNo)) {

49
wms/sign/conn.php

@ -0,0 +1,49 @@
<?php
$envFile = __DIR__ . '/.env'; // .env 文件的路径
if (file_exists($envFile)) {
$lines = file($envFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if ($lines !== false) {
foreach ($lines as $line) {
list($key, $value) = explode('=', $line, 2);
$key = trim($key);
$value = trim($value);
// 设置环境变量
putenv("$key=$value");
}
}
}
$db_hostname = getenv('DB_HOST'); //資料庫主機名稱
$db_username = getenv('DB_USERNAME'); //登入資料庫的管理者的帳號
$db_password = getenv('DB_PASSWORD'); //登入密碼
$db_name = getenv('DB_DATABASE'); //使用的資料庫
$db_charset = 'utf8'; //設定字元編碼
$db_hostname = 'localhost'; //資料庫主機名稱
$db_username = 'root'; //登入資料庫的管理者的帳號
$db_password = ''; //登入密碼
$db_name = 'appwms'; //使用的資料庫
$db_charset = 'utf8'; //設定字元編碼
//建立PDO的指定工作
$dsn = "mysql:host=$db_hostname;dbname=$db_name;charset=$db_charset";
try{
//使用PDO連接到MySQL資料庫,建立PDO物件
$conn = new PDO($dsn, $db_username, $db_password);
//當錯誤發生時會將錯誤資訊放到一個類物件裡(PDOException)
//PDO異常處理,PDO::ATTR_ERRMODE,有以下三種值的設定
//PDO::ERRMODE_SILENT: 預設模式,不主動報錯,需要以$conn->errorInfo()的形式獲取錯誤資訊
//PDO::ERRMODE_WARNING: 引發 E_WARNING 錯誤,主動報錯
//PDO::ERRMODE_EXCEPTION: 主動抛出 exceptions 異常,需要以try{}cath(){}輸出錯誤資訊。
//設定主動以警告的形式報錯
$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
//如果連接錯誤,將抛出一個PDOException異常對象
}
catch ( PDOException $e ){
//如果連結資料庫失敗則顯示錯誤訊並停止本頁的工作
die("ERROR!!!: ". $e->getMessage());
}
//$conn = null; //關閉資料庫的連線

57
wms/sign/list.php

@ -9,7 +9,7 @@
// 載入db.php來連結資料庫
require_once "../database.php";
require_once "../header.php";
require_once("../mkt/conn.php");
function getWipwholestatusDataByFormkey($link, $form_key, $flow_id)
{
@ -84,6 +84,42 @@ $sql_get = "SELECT d.form_id,c.form_key, a.system_id,b.flow_id ,a.system_name,c
AND c.form_key=d.form_key
and b.flow_id NOT IN ('wws04')
$where_system_id
$where_flow_id
";
$sql_get = "SELECT
d.form_id,
c.form_key,
a.system_id,
b.flow_id,
a.system_name,
c.current_assigner,
CONCAT(c.current_assigner, '-', f_return_name(c.current_assigner)) AS current_assigner_name,
flow_name,
c.update_date,
c.create_date,
b.path,
d.flow_code
FROM
system_main a
JOIN
flow_main b ON a.system_id = b.system_id
JOIN
flow d ON b.flow_id = d.flow_id
JOIN
(SELECT
form_key,
MAX(seq) AS max_seq
FROM
subflow
GROUP BY
form_key) AS sf ON d.form_key = sf.form_key
JOIN
subflow c ON c.form_key = sf.form_key AND c.seq = sf.max_seq
WHERE
c.current_assigner = '$user_id'
AND b.flow_id NOT IN ('wws04')
$where_system_id
$where_flow_id
";
// echo '<pre>';
@ -107,6 +143,16 @@ $flow_name_opt = array_map(function ($item) {
}, $res_get);
$flow_name_opt = (array_unique($flow_name_opt, SORT_REGULAR));
function getPricereviewDataByFormkey($form_key){
global $conn;
$sql_str = "SELECT pricereview_main.contractno, pricereview_main.company FROM flow LEFT JOIN pricereview_main ON flow.form_id = pricereview_main.id WHERE flow.form_key = :form_key ORDER BY pricereview_main.id DESC LIMIT 1";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':form_key', $form_key);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
return $result;
}
?>
<style>
table {
@ -232,7 +278,14 @@ $flow_name_opt = (array_unique($flow_name_opt, SORT_REGULAR));
作番大日程-合約號:<?= $contractno ?> 作番號:<?= $facilityno ?>
</a>
<?php
} else {
} elseif($data['flow_name'] == '新梯價審流程' || $data['flow_name'] == '汰改價審流程'){
?>
<a target="_blank" href="<?= $data['path'] . "?fromsign=1&form_key=" . $data['form_key'] . "&token=$token" ?>">
<?= $data['form_key'] . "(" . getPricereviewDataByFormkey($data['form_key'])['contractno'] ."," . getPricereviewDataByFormkey($data['form_key'])['company'] .")"; ?>
</a>
<?php
}
else {
?>
<a target="_blank" href="<?= $data['path'] . "?fromsign=1&form_key=" . $data['form_key'] . "&token=$token" ?>">
<?= $data['form_key']; ?>

Loading…
Cancel
Save