10994015 1 year ago
parent
commit
2a1d009390
  1. 19
      mkt/IncludeCommon.php
  2. 4
      mkt/database.php
  3. 178
      wms/account-receivable-check.php
  4. 53
      wms/account-receivable-excel.php
  5. 343
      wms/account-receivable-index.php
  6. BIN
      wms/account-receivable.xlsx
  7. BIN
      wms/assets/img/icon/(Ñ╝¿╧Ñ╬)icon-star-active.png
  8. BIN
      wms/assets/img/icon/(Ñ╝¿╧Ñ╬)icon-star-default.png
  9. 4
      wms/board-record-submit.php
  10. 5
      wms/class/Cmail.php
  11. 120
      wms/cont/apply_form.php
  12. 912
      wms/cont/apply_form1.php
  13. 3
      wms/cont/sign_form.php
  14. 8
      wms/cont/sign_list.php
  15. 7
      wms/cont/submit.php
  16. 34
      wms/contract-repair/api/deleteNewContractData.php
  17. 59
      wms/contract-repair/api/getComboNo.php
  18. 122
      wms/contract-repair/api/getContractData.php
  19. 518
      wms/contract-repair/api/getFacilityNo.php
  20. 16
      wms/contract-repair/api/getPriceview.php
  21. 423
      wms/contract-repair/api/postContractData.php
  22. 68
      wms/contract-repair/api/postContractNewApplyData.php
  23. 139
      wms/contract-repair/api/postNewContractData.php
  24. 190
      wms/contract-repair/api/putContractData.php
  25. 0
      wms/contract-repair/api/store_contract.php
  26. 61
      wms/contract-repair/api/upload_chk.php
  27. 43
      wms/contract-repair/conn.php
  28. 214
      wms/contract-repair/contract-repair-edit.php
  29. 185
      wms/contract-repair/contract-repair-input.php
  30. 131
      wms/contract-repair/contract-repair-management.php
  31. 1507
      wms/contract-repair/js/alpine.js
  32. 5
      wms/contract-repair/js/alpinejs/cdn.min.js
  33. 25
      wms/contract-repair/js/axios.js
  34. 2
      wms/contract-repair/js/axios/axios.min.js
  35. 48
      wms/contract-repair/js/el.js
  36. 4
      wms/contract-repair/js/jquery/jquery-3.1.1.min.js
  37. 5
      wms/contract-repair/semantic/.browserlistrc
  38. 322
      wms/contract-repair/semantic/.csscomb.json
  39. 18
      wms/contract-repair/semantic/.csslintrc
  40. 24
      wms/contract-repair/semantic/.github/ISSUE_TEMPLATE.md
  41. 28
      wms/contract-repair/semantic/.github/PULL_REQUEST_TEMPLATE.md
  42. 33
      wms/contract-repair/semantic/.github/stale.yml
  43. 38
      wms/contract-repair/semantic/.gitignore
  44. 38
      wms/contract-repair/semantic/.jshintrc
  45. 58
      wms/contract-repair/semantic/CONTRIBUTING.md
  46. 7
      wms/contract-repair/semantic/LICENSE.md
  47. 112
      wms/contract-repair/semantic/README.md
  48. 2959
      wms/contract-repair/semantic/RELEASE-NOTES.md
  49. 5
      wms/contract-repair/semantic/Semantic-UI-master/.browserlistrc
  50. 322
      wms/contract-repair/semantic/Semantic-UI-master/.csscomb.json
  51. 18
      wms/contract-repair/semantic/Semantic-UI-master/.csslintrc
  52. 24
      wms/contract-repair/semantic/Semantic-UI-master/.github/ISSUE_TEMPLATE.md
  53. 28
      wms/contract-repair/semantic/Semantic-UI-master/.github/PULL_REQUEST_TEMPLATE.md
  54. 33
      wms/contract-repair/semantic/Semantic-UI-master/.github/stale.yml
  55. 38
      wms/contract-repair/semantic/Semantic-UI-master/.gitignore
  56. 38
      wms/contract-repair/semantic/Semantic-UI-master/.jshintrc
  57. 58
      wms/contract-repair/semantic/Semantic-UI-master/CONTRIBUTING.md
  58. 7
      wms/contract-repair/semantic/Semantic-UI-master/LICENSE.md
  59. 112
      wms/contract-repair/semantic/Semantic-UI-master/README.md
  60. 2959
      wms/contract-repair/semantic/Semantic-UI-master/RELEASE-NOTES.md
  61. 27
      wms/contract-repair/semantic/Semantic-UI-master/bower.json
  62. 24
      wms/contract-repair/semantic/Semantic-UI-master/composer.json
  63. 244
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/accordion.css
  64. 613
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/accordion.js
  65. 9
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/accordion.min.css
  66. 1
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/accordion.min.js
  67. 274
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/ad.css
  68. 10
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/ad.min.css
  69. 1167
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/api.js
  70. 1
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/api.min.js
  71. 124
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/breadcrumb.css
  72. 9
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/breadcrumb.min.css
  73. 3561
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/button.css
  74. 9
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/button.min.css
  75. 937
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/card.css
  76. 9
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/card.min.css
  77. 608
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/checkbox.css
  78. 831
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/checkbox.js
  79. 9
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/checkbox.min.css
  80. 1
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/checkbox.min.js
  81. 268
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/comment.css
  82. 9
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/comment.min.css
  83. 147
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/container.css
  84. 9
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/container.min.css
  85. 235
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/dimmer.css
  86. 733
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/dimmer.js
  87. 9
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/dimmer.min.css
  88. 1
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/dimmer.min.js
  89. 258
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/divider.css
  90. 9
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/divider.min.css
  91. 1460
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/dropdown.css
  92. 3955
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/dropdown.js
  93. 9
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/dropdown.min.css
  94. 1
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/dropdown.min.js
  95. 161
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/embed.css
  96. 706
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/embed.js
  97. 9
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/embed.min.css
  98. 1
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/embed.min.js
  99. 281
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/feed.css
  100. 9
      wms/contract-repair/semantic/Semantic-UI-master/dist/components/feed.min.css

19
mkt/IncludeCommon.php

@ -1,14 +1,17 @@
<?php <?php
// phpinfo();
// exit;
class IncludeCommon class IncludeCommon
{ {
function CheckToken($token) { function CheckToken($token)
{
date_default_timezone_set("Asia/Taipei"); date_default_timezone_set("Asia/Taipei");
$encryption_code = "MASADA!^***"; $encryption_code = "MASADA!^***";
$time = date("Y-m-d H:i:s"); $time = date("Y-m-d H:i:s");
if (!isset($token) || empty($token)) { if (!isset($token) || empty($token)) {
$data['code'] = '400'; $data['code'] = '400';
$data['message'] = '非法求'; $data['message'] = '非法求';
return $data; return $data;
} }
//对比token //对比token
@ -20,7 +23,7 @@ class IncludeCommon
$data['user_id'] = ''; $data['user_id'] = '';
$data['user_name'] = ''; $data['user_name'] = '';
$data['code'] = '401'; $data['code'] = '401';
$data['message'] = 'Token已过期,请重新登录'; $data['message'] = 'Token已過期,請重新登入';
return $data; return $data;
} }
if ($true_signature == $explode[4]) { if ($true_signature == $explode[4]) {
@ -45,7 +48,8 @@ class IncludeCommon
} }
} }
//生成登录记录 //生成登录记录
function save_log_response($source_flag='web', $account, $response_result){ function save_log_response($source_flag = 'web', $account, $response_result)
{
# 储存纪录并输出 # 储存纪录并输出
#echo date("Y-m-d"); #echo date("Y-m-d");
$file_path = "account_log/" . $account . "-" . date("Y-m-d") . ".ini"; $file_path = "account_log/" . $account . "-" . date("Y-m-d") . ".ini";
@ -75,7 +79,8 @@ class IncludeCommon
} }
//生成token //生成token
function CreateToken($user_id, $user_name) { function CreateToken($user_id, $user_name)
{
date_default_timezone_set("Asia/Taipei"); date_default_timezone_set("Asia/Taipei");
$start_time = date("Y-m-d H:i:s"); $start_time = date("Y-m-d H:i:s");
$end_time = date('Y-m-d H:i:s', strtotime('+24 hour')); #设定24小时 $end_time = date('Y-m-d H:i:s', strtotime('+24 hour')); #设定24小时
@ -88,7 +93,8 @@ class IncludeCommon
} }
//生成菜单 //生成菜单
function menu ($from='tw',$type){ function menu($from = 'tw', $type)
{
$function_type = array( $function_type = array(
"tw" => array( "tw" => array(
# F角色菜单 # F角色菜单
@ -105,6 +111,5 @@ class IncludeCommon
); );
return $function_type[$from][$type]; return $function_type[$from][$type];
} }
} }

4
mkt/database.php

@ -31,8 +31,8 @@ try {
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} }
} catch (PDOException $e) { } catch (PDOException $e) {
echo "fail"; // echo "fail";
echo $e->getMessage(); // echo $e->getMessage();
} }
//print_r($link);exit; //print_r($link);exit;
if($link){ if($link){

178
wms/account-receivable-check.php

@ -1,8 +1,17 @@
<?php <?php
include "./header.php"; include "./header.php";
//企業名稱 統一編號 聯絡地址
$Bill = $_POST['Bill']; $Bill = $_POST['Bill'];
$Bill = json_decode($Bill, true); $Bill = json_decode($Bill, true);
$sql_received = "SELECT * from account_received where BillNo = '$Bill[0]' ORDER BY `pay_id` ASC";
$pay_received = mysqli_query($link, $sql_received);
$had_received = 0;
if (mysqli_num_rows($pay_received) == 0) {
foreach ($pay_received as $received) {
$had_received += $received['received_amount'];
}
}
$unreceived = $Bill[12] - $had_received;
$data = json_encode($Bill); $data = json_encode($Bill);
?> ?>
<style> <style>
@ -25,13 +34,13 @@ $data = json_encode($Bill);
</div> </div>
<div class="container"> <div class="container">
<div class="text-center" style="margin-bottom: 20px;"> <div class="text-center" style="margin-bottom: 20px;">
<h3><strong><?= $Bill[5] ?></strong></h3> <h3><strong><?= $Bill[4] ?></strong></h3>
</div> </div>
<form class="form-horizontal"> <form class="form-horizontal">
<div class="form-group"> <div class="form-group">
<div class="col-md-3"> <div class="col-md-3">
<label for="BillNo">合約號</label> <label for="BillNo">合約號</label>
<input type="text" class="form-control" id="BillNo" name="BillNo" value="<?= $Bill[10] ?>" disabled> <input type="text" class="form-control" id="BillNo" name="BillNo" value="<?= $Bill[0] ?>" disabled>
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
<label for="DeptId">部門</label> <label for="DeptId">部門</label>
@ -43,108 +52,93 @@ $data = json_encode($Bill);
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
<label for="PersonName">營業員</label> <label for="PersonName">營業員</label>
<input type="text" class="form-control" id="PersonName" name="PersonName" value="<?= $Bill[4] ?>" disabled> <input type="text" class="form-control" id="PersonName" name="PersonName" value="<?= $Bill[3] ?>" disabled>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<div class="col-md-3"> <div class="col-md-3">
<label for="EnterpriseName">抬頭</label> <label for="EnterpriseName">抬頭</label>
<input type="text" class="form-control" id="EnterpriseName" name="EnterpriseName" value="<?= $Bill[6] ?>" disabled> <input type="text" class="form-control" id="EnterpriseName" name="EnterpriseName" value="<?= $Bill[14] ?>" disabled>
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
<label for="TaxNo">統一編號</label> <label for="TaxNo">統一編號</label>
<input type="text" class="form-control" id="TaxNo" name="TaxNo" value="<?= $Bill[7] ?>" disabled> <input type="text" class="form-control" id="TaxNo" name="TaxNo" value="<?= $Bill[15] ?>" disabled>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<label for="ContactAddress">聯絡地址</label> <label for="ContactAddress">聯絡地址</label>
<input type="text" class="form-control" id="ContactAddress" name="ContactAddress" value="<?= $Bill[8] ?>" disabled> <input type="text" class="form-control" id="ContactAddress" name="ContactAddress" value="<?= $Bill[16] ?>" disabled>
</div> </div>
</div> </div>
<div> <div>
<label for="detail">狀態</label> <label for="detail">狀態</label>
<textarea class="form-control" style="height: 150px; width: 50%;" name="detail" id="detail" disabled><?= str_replace("<br>", "\n", $Bill['facilities']) ?></textarea> <textarea class="form-control" style="height: 150px; width: 50%;" name="detail" id="detail" disabled><?= str_replace("<br>", "\n", $Bill[13]) ?></textarea>
</div> </div>
</form> </form>
<div style="width: auto; margin-top: 30px;"> <div style="width: auto; margin-top: 30px;">
<table class="table table-striped table-bordered" style="width:100%;"> <table class="table table-striped table-bordered" style="width:100%;">
<thead> <thead>
<tr> <tr>
<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>交車款</th>
<th>尾款</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td>合約金額</td> <td><?= number_format(round($Bill[12])) ?></td>
<td><?= number_format(round($Bill['sign'][1])) ?></td> <td><?= number_format(round($Bill[19])) ?></td>
<td><?= number_format(round($Bill['second'][1])) ?></td> <td><?= number_format(round($Bill[21])) ?></td>
<td><?= number_format(round($Bill['arrive'][1])) ?></td> <td><?= number_format(round($Bill[20])) ?></td>
<td><?= number_format(round($Bill['install'][1])) ?></td> <td><?= number_format(round($Bill[22])) ?></td>
<td><?= number_format(round($Bill['tryrun'][1])) ?></td>
<td><?= number_format(round($Bill['check'][1])) ?></td>
<td><?= number_format(round($Bill['delivery'][1])) ?></td>
<td><?= number_format(round($Bill['final'][1])) ?></td>
</tr>
<tr>
<td>目前應收</td>
<td><?= number_format(round($Bill['sign'][3])) ?></td>
<td><?= number_format(round($Bill['second'][3])) ?></td>
<td><?= number_format(round($Bill['arrive'][3])) ?></td>
<td><?= number_format(round($Bill['install'][3])) ?></td>
<td><?= number_format(round($Bill['tryrun'][3])) ?></td>
<td><?= number_format(round($Bill['check'][3])) ?></td>
<td><?= number_format(round($Bill['delivery'][3])) ?></td>
<td><?= number_format(round($Bill['final'][3])) ?></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div>
<div style="width: auto; margin-top: 30px;"> <div style="width: auto; margin-top: 30px;">
<table class="table table-striped table-bordered" style="width:100%;"> <table class="table table-striped table-bordered" style="width:100%;">
<thead> <thead>
<tr> <tr>
<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> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td><?= number_format(round($Bill['receivable_budget'])) ?></td> <td><?= number_format(round($Bill[5])) ?></td>
<td><?= number_format(round($Bill['invoice_budget'])) ?></td> <td><?= number_format(round($Bill[6])) ?></td>
<td><?= number_format(round($Bill['receivable_budget'] - $Bill['invoice_budget'])) ?></td> <td><?= number_format(round($Bill[7])) ?></td>
<td><?= number_format(round($Bill['received_budget'])) ?></td> <td><?= number_format(round($Bill[8])) ?></td>
<td><?= number_format(round($Bill['invoice_budget'] - $Bill['received_budget'])) ?></td> <td><?= number_format(round($Bill[9])) ?></td>
<td><?= number_format(round($Bill[10])) ?></td>
<td><?= number_format(round($Bill[11])) ?></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
</div>
</div> </div>
<?php <?php
include "./footer.php"; include "./footer.php";
?> ?>
<?php <?php
if ((accountidToDepartId($user_id) == '220') || ($user_id == "M0209")) { if ($user_id == "M0122") {
?> ?>
<!-- <button type="button" onclick="create('create',0)" class="btn btn-primary btn-sm pull-right" style="margin-right: 10%;margin-bottom: 10px;"> <button type="button" onclick="create('create',0)" class="btn btn-primary btn-sm pull-right" style="margin-right: 10%;margin-bottom: 10px;">
新增收款紀錄<span class=" glyphicon glyphicon-plus"></span></button> --> 新增收款紀錄<span class=" glyphicon glyphicon-plus"></span></button>
<?php <?php
} }
?> ?>
@ -152,74 +146,34 @@ if ((accountidToDepartId($user_id) == '220') || ($user_id == "M0209")) {
<table class="table table-striped table-bordered" style="width:100%;"> <table class="table table-striped table-bordered" style="width:100%;">
<thead> <thead>
<tr> <tr>
<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>備註</th> <th style="width: 10%;">功能</th>
<th>狀態</th> -->
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<?php if ($Bill['invoice'] != Null) { <?php if ($pay_received) {
foreach ($Bill['invoice'] as $key => $invoice) { ?> foreach ($pay_received as $received) { ?>
<tr> <tr>
<td><?= $key ?></td> <td><?= $received['invoice_date'] ?></td>
<td><?= $invoice[0] ?></td> <td><?= number_format($received['invoice_amount']) ?></td>
<td><?= $received['received_date'] ?></td>
<td><?php switch ($invoice[2]) { <td><?= number_format($received['received_amount']) ?></td>
case 0: <td><?= $received['remark'] ?></td>
echo "藍字"; <td><?php if (in_array(accountidToDepartId($user_id), array('220', '210'))) { ?>
break; <button type="button" onclick="create('edit',<?= $received['pay_id'] ?>)" class="btn btn-warning btn-sm pull-right" style="margin-right: 10%;margin-bottom: 10px;">
case 1: <span class="glyphicon glyphicon-pencil"></span></button>
echo "紅字"; <a href="account-receivable-received-delete.php?id=<?php echo $received['pay_id'] ?>&<?= $token_link ?>" class="btn btn-danger btn-sm">
break; <span class=" glyphicon glyphicon-trash"></span>
case 2: </a>
echo "作廢"; <?php } ?>
break; </td>
} ?></td>
<td><?= isset($invoice[1])? number_format($invoice[1]):0 ?></td>
<td><?= isset($invoice[3])? $invoice[3]:' ' ?></td>
<td><?= isset($invoice[4])? number_format($invoice[4]):0 ?></td>
<td><?= isset($invoice[5])? number_format($invoice[5]):0 ?></td>
<!-- <td><?= $received['remark'] ?></td>
<td style="text-align: center;">
<?php
switch ($received['status']) {
case 0:
echo "<span style='color:blue;'>進行中</span>";
break;
case 1:
echo "<span style='color:brown;'>催收</span>";
break;
case 2:
echo "<span style='color:red;'>法務件 (發函)</span>";
break;
case 3:
echo "<span style='color:red;'>法務件 (訴訟)</span>";
break;
case 4:
echo "折讓";
break;
case 5:
echo "壞帳";
break;
case 99:
echo "完成";
break;
}
?></td> -->
</tr> </tr>
<?php } <?php }
} } ?>
?>
</tbody> </tbody>
</table> </table>
</div> </div>

53
wms/account-receivable-excel.php

@ -13,46 +13,43 @@ foreach ($Bill as $key => $value) {
// for ($i = 0; $i < 17; $i++) { // for ($i = 0; $i < 17; $i++) {
// $value[$i] = (isset($value[$i])) ? $value[$i] : 0; // $value[$i] = (isset($value[$i])) ? $value[$i] : 0;
// } // }
$value['sign'][3] = (isset($value['sign'][3])) ? $value['sign'][3] : 0; $array_data[$key][0] = $key;
$value['second'][3] = (isset($value['second'][3])) ? $value['second'][3] : 0; $array_data[$key][1] = $value[1];
$value['arrive'][3] = (isset($value['arrive'][3])) ? $value['arrive'][3] : 0; $array_data[$key][2] = $value[2];
$value['install'][3] = (isset($value['install'][3])) ? $value['install'][3] : 0; $array_data[$key][3] = $value[4];
$value['tryrun'][3] = (isset($value['tryrun'][3])) ? $value['tryrun'][3] : 0; $array_data[$key][4] = $value[5];
$value['check'][3] = (isset($value['check'][3])) ? $value['check'][3] : 0; $array_data[$key][5] = $value[7];
$value['delivery'][3] = (isset($value['delivery'][3])) ? $value['delivery'][3] : 0; $array_data[$key][6] = $value[8];
$value['final'][3] = (isset($value['final'][3])) ? $value['final'][3] : 0; $array_data[$key][7] = $value[6];
$array_data[$key][8] = $value['sign'][1];
$array_data[$key] = [ $array_data[$key][9] = $value['second'][1];
$key, $value[1], $value[2], $value[4], $value[5], $value[7], $value[8], $value[6], $array_data[$key][10] = $value['arrive'][1];
$value['sign'][1], $value['second'][1], $value['arrive'][1], $value['install'][1], $value['tryrun'][1], $value['check'][1], $value['delivery'][1], $value['final'][1], $array_data[$key][11] = $value['install'][1];
$value['sign'][3], $value['second'][3], $value['arrive'][3], $value['install'][3], $value['tryrun'][3], $value['check'][3], $value['delivery'][3], $value['final'][3], $array_data[$key][12] = $value['tryrun'][1];
$value['receivable_budget'], $value['invoice_budget'], $value['received_budget'], str_replace('<br>', '; ', $value['facilities']) $array_data[$key][13] = $value['check'][1];
]; $array_data[$key][14] = $value['delivery'][1];
$array_data[$key][15] = $value['final'][1];
$array_data[$key][16] = $value['receivable_budget'];
$array_data[$key][17] = str_replace('<br>', '; ', $value['facilities']);
} }
$spreadsheet = new Spreadsheet(); $spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet(); $sheet = $spreadsheet->getActiveSheet();
$colomnHeader = [ $colomnHeader = [
'合約號', '部門', '經理', '營業員', '客戶名稱', '統一編號', '聯絡地址', '抬頭', '合約號', '部門', '經理', '營業員', '客戶名稱', '統一編號', '聯絡地址', '抬頭', '簽約款',
'簽約款', '二次款', '貨抵工地款', '安裝款', '試車款', '官檢款', '交車款', '尾款', '二次款', '貨抵工地款', '安裝款', '試車款', '官檢款', '交車款', '尾款', '目前應收', '作番狀態'
'目前應收簽約款', '目前應收二次款', '目前應收貨抵工地款', '目前應收安裝款', '目前應收試車款', '目前應收官檢款', '目前應收交車款', '目前應收尾款',
'目前應收', '已開發票金額', '已收金額', '作番狀態'
]; ];
$sheet->fromArray($colomnHeader, NULL, 'A1'); $sheet->fromArray($colomnHeader, NULL, 'A1');
$rowIndex = 2; $rowIndex = 2;
foreach ($array_data as $key => $value) { foreach ($array_data as $key => $value) {
$sheet->fromArray([$value], NULL, 'A' . $rowIndex); $sheet->fromArray([$value], NULL, 'A' . $rowIndex);
$sheet->getStyle('AB' . $rowIndex)->getAlignment()->setWrapText(true); $sheet->getStyle('R' . $rowIndex)->getAlignment()->setWrapText(true);
$column = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','AA'];
foreach($column as $col) {
$sheet->getColumnDimension($col)->setAutoSize(true);
}
$rowIndex++; $rowIndex++;
} }
$writer = new Xlsx($spreadsheet); $writer = new Xlsx($spreadsheet);
$excelFileName = 'account-receivable-test.xlsx'; $excelFileName = 'account-receivable.xlsx';
$writer->save($excelFileName); $writer->save($excelFileName);
echo $excelFileName;
?> ?>
<!-- <script> <script>
window.location.href = "account-receivable-index.php?<?= $token_link ?>"; window.location.href = "account-receivable-index.php?<?= $token_link ?>";
</script> --> </script>

343
wms/account-receivable-index.php

@ -4,73 +4,56 @@ include "header.php";
$follower = find_follow($user_id); $follower = find_follow($user_id);
$arrayData = []; $arrayData = [];
$receivable_array = []; $receivable_array = [];
// T8發票 (有專案的發票) $sql_received = "SELECT * FROM arWriteOffBillDetail WHERE (DATALENGTH(OrderBillNo) >0)";
$sql_invoice = "SELECT DISTINCT
a.InvoiceNo, a.InvoiceTime,a.OAmountWithTax,a.InvoiceState,
b.ProjectId
FROM arSellInvoice as a
LEFT JOIN arSellInvoiceMaterial as b
ON a.BillNo=b.BillNo
WHERE DATALENGTH(b.ProjectId)>0";
// T8核銷
$sql_received = "SELECT
a.BillNo, a.WriteOffBizPartnerId,a.PayWriteOffOAmount,
b.FromBillDate AS ReceivedDate,b.CurrWOFeeOAmt AS Fee,
c.OrderBillNo, c.checkBillNo, c.InvoiceNo, c.BillDate AS CheckBillDate
FROM arWriteOffBill AS a
LEFT JOIN arWriteOffBillRec AS b ON a.BillNo=b.BillNo
LEFT JOIN
(SELECT temp1.*,arWriteOffBillDetail.* FROM arWriteOffBillDetail
LEFT JOIN
(SELECT
arCheckBill.BillNo AS checkBillNo, arCheckBill.BillDate,arCheckBillInvInfo.InvoiceNo
FROM arCheckBill
LEFT JOIN arCheckBillInvInfo
ON arCheckBill.InvoiceBillNo=arCheckBillInvInfo.InvoiceBillNo) AS temp1
ON temp1.checkBillNo = arWriteOffBillDetail.FromBillNo) AS c
ON a.BillNo=c.BillNo
WHERE DATALENGTH(c.OrderBillNo) >0";
$sql_contract = "SELECT a.BillNo, a.PayStage, a.PlanPayAmt, a.PlanPayDate,s.BizPartnerId,c.BizPartnerName, s.PersonId, $sql_contract = "SELECT a.BillNo, a.PayStage, a.PlanPayAmt, a.PlanPayDate,s.BizPartnerId,c.BizPartnerName, s.PersonId,
c.EnterpriseName, c.TaxNo, c.ContactAddress FROM salOrderStagePay AS a c.EnterpriseName, c.TaxNo, c.ContactAddress FROM salOrderStagePay AS a
LEFT JOIN salSalesOrder AS s on a.BillNo = s.BillNo LEFT JOIN salSalesOrder AS s on a.BillNo = s.BillNo
LEFT JOIN comBusinessPartner AS c ON s.BizPartnerId=c.BizPartnerId LEFT JOIN comBusinessPartner AS c ON s.BizPartnerId=c.BizPartnerId
WHERE s.ModeId = 'M' AND (s.CurrentState=2 OR s.CurrentState=4) "; WHERE s.ModeId = 'M' AND (s.CurrentState=2 OR s.CurrentState=4) ";
// 期初收款資訊
$sql_opening = "
SELECT * FROM account_received ";
// 設定權限:看到自己的/下屬的,資訊處跟財會處可以看全部的
if (!(in_array(accountidToDepartId($user_id), array('220', '210')))) { if (!(in_array(accountidToDepartId($user_id), array('220', '210')))) {
$sql_contract .= "AND (s.PersonId = '$user_id'"; $sql_contract .= "AND (s.PersonId = '$user_id'";
$sql_received .= " AND (PersonId = '$user_id'"; $sql_received .= " AND (PersonId = '$user_id'";
$sql_opening .= " OR person_id = '$user_id'";
if (count($follower) > 0) { if (count($follower) > 0) {
$column_str = "('$user_id'" . ",'"; $column_str = "('$user_id'" . ",'";
$column_str .= implode("','", $follower); $column_str .= implode("','", $follower);
$column_str .= "')"; $column_str .= "')";
$sql_contract .= " OR s.PersonId IN $column_str)"; $sql_contract .= " OR s.PersonId IN $column_str)";
$sql_received .= " OR PersonId IN $column_str)"; $sql_received .= " OR PersonId IN $column_str)";
$sql_opening .= " OR person_id IN $column_str)";
} else { } else {
$sql_contract .= ")"; $sql_contract .= ")";
$sql_received .= ")"; $sql_received .= ")";
$sql_opening .= ")";
}; };
} }
$contract = $conn->query($sql_contract);
$received_array = $conn->query($sql_received);
$opening_data = mysqli_query($link, $sql_opening);
$invoice_data = $conn->query($sql_invoice);
// 合約收款階段內容分類
$sign60 = array('簽訂後60天', '簽約60日', '簽約後60天', '簽訂後60日內', '訂金支付後60天'); $sign60 = array('簽訂後60天', '簽約60日', '簽約後60天', '簽訂後60日內', '訂金支付後60天');
$sign90 = array('簽約後90天', '簽約後90日', '簽訂後90天'); $sign90 = array('簽約後90天', '簽約後90日', '簽訂後90天');
$sign120 = array('簽約後120天', '簽約後120日', '簽訂後120天'); $sign120 = array('簽約後120天', '簽約後120日', '簽訂後120天');
$contract = $conn->query($sql_contract);
$received_array = $conn->query($sql_received);
// 取收款資料 account_received
// $received_data = mysqli_query($link, $sql_received);
// foreach ($received_data as $received) {
// if ($received['BillNo'] == 'SO20230801001') {
// $BillNo = 'M230947';
// } elseif ($received['BillNo'] == 'SO20230801002') {
// $BillNo = 'M231067';
// } else {
// $BillNo = $received['BillNo'];
// };
// if (isset($received_array[$BillNo])) {
// $received_array[$BillNo][0] += $received['invoice_amount'];
// $received_array[$BillNo][1] += $received['received_amount'];
// $received['status'] = (intval($received['status']) < 4) ? intval($received['status']) : 0;
// if ($received_array[$BillNo][2] < intval($received['status'])) {
// $received_array[$BillNo][2] = intval($received['status']);
// }
// } else {
// $received_array[$BillNo][0] = $received['invoice_amount'];
// $received_array[$BillNo][1] = $received['received_amount'];
// $received_array[$BillNo][2] = (intval($received['status']) < 4) ? intval($received['status']) : 0;
// }
// }
// 將T8合約收款階段資料依據款別分類放進arraData裡 // 將T8合約收款階段資料依據款別分類放進arraData裡
foreach ($contract as $cont) { foreach ($contract as $cont) {
@ -88,7 +71,7 @@ foreach ($contract as $cont) {
$EnterpriseName = $cont['EnterpriseName']; $EnterpriseName = $cont['EnterpriseName'];
$TaxNo = $cont['TaxNo']; $TaxNo = $cont['TaxNo'];
$ContactAddress = $cont['ContactAddress']; $ContactAddress = $cont['ContactAddress'];
//['sign'] 0 款項名稱 1 簽約金額 2 簽約日期 3 應收金額 min 最早應收月份 max 最晚應收月份 ['second'] 0 二次款名 1 二次款金額 2 收款日期 ['arrive'] 0 貨抵工地款名稱 1 貨抵工地款金額 2 貨抵工地收款日期 ['install'] 0 安裝款名 1 安裝金額 2 安裝收款日期 //['sign'] 0 款項名稱 1 簽約金額 2 簽約日期 ['second'] 0 二次款名 1 二次款金額 2 收款日期 ['arrive'] 0 貨抵工地款名稱 1 貨抵工地款金額 2 貨抵工地收款日期 ['install'] 0 安裝款名 1 安裝金額 2 安裝收款日期
//['tryrun'] 0 試車款名 1試車金額 2 試車收款日期 ['check'] 0 官檢款名 1 官檢金額 2 官檢收款日期 ['delivery'] 0 交車款名 1 交車金額 2 交車收款日期 ['final'] 0 尾款名 1 尾款金額 2 尾款收款日期 //['tryrun'] 0 試車款名 1試車金額 2 試車收款日期 ['check'] 0 官檢款名 1 官檢金額 2 官檢收款日期 ['delivery'] 0 交車款名 1 交車金額 2 交車收款日期 ['final'] 0 尾款名 1 尾款金額 2 尾款收款日期
if (!(isset($arrayData[$BillNo]))) { if (!(isset($arrayData[$BillNo]))) {
// 0 部門id 1 部門名稱 2 經理名稱 3 營業員id 4 營業員名稱 5 客戶名稱 6 抬頭 7 統編 8 通訊地址 // 0 部門id 1 部門名稱 2 經理名稱 3 營業員id 4 營業員名稱 5 客戶名稱 6 抬頭 7 統編 8 通訊地址
@ -97,13 +80,8 @@ foreach ($contract as $cont) {
$arrayData[$BillNo][6] = $EnterpriseName; $arrayData[$BillNo][6] = $EnterpriseName;
$arrayData[$BillNo][7] = $TaxNo; $arrayData[$BillNo][7] = $TaxNo;
$arrayData[$BillNo][8] = $ContactAddress; $arrayData[$BillNo][8] = $ContactAddress;
$arrayData[$BillNo]['total_budget'] = 0; $arrayData[$BillNo]['received'] = array();
$arrayData[$BillNo]['invoice'] = array();
$arrayData[$BillNo]['received_budget'] = 0;
$arrayData[$BillNo]['invoice_budget'] = 0;
$arrayData[$BillNo]['sign'][1] = $arrayData[$BillNo]['second'][1] = $arrayData[$BillNo]['arrive'][1] = $arrayData[$BillNo]['install'][1] = $arrayData[$BillNo]['tryrun'][1] = $arrayData[$BillNo]['check'][1] = $arrayData[$BillNo]['delivery'][1] = $arrayData[$BillNo]['final'][1] = 0; $arrayData[$BillNo]['sign'][1] = $arrayData[$BillNo]['second'][1] = $arrayData[$BillNo]['arrive'][1] = $arrayData[$BillNo]['install'][1] = $arrayData[$BillNo]['tryrun'][1] = $arrayData[$BillNo]['check'][1] = $arrayData[$BillNo]['delivery'][1] = $arrayData[$BillNo]['final'][1] = 0;
$arrayData[$BillNo]['sign']['min'] = $arrayData[$BillNo]['second']['min'] = $arrayData[$BillNo]['arrive']['min'] = $arrayData[$BillNo]['install']['min'] = $arrayData[$BillNo]['tryrun']['min'] = $arrayData[$BillNo]['check']['min'] = $arrayData[$BillNo]['delivery']['min'] = $arrayData[$BillNo]['final']['min'] = array();
$arrayData[$BillNo]['sign']['max'] = $arrayData[$BillNo]['second']['max'] = $arrayData[$BillNo]['arrive']['max'] = $arrayData[$BillNo]['install']['max'] = $arrayData[$BillNo]['tryrun']['max'] = $arrayData[$BillNo]['check']['max'] = $arrayData[$BillNo]['delivery']['max'] = $arrayData[$BillNo]['final']['max'] = array();
$arrayData[$BillNo]['facilities'] = ""; $arrayData[$BillNo]['facilities'] = "";
$arrayData[$BillNo]['total_facility_num'] = $arrayData[$BillNo]['delivery_num'] = $arrayData[$BillNo]['check_num'] = $arrayData[$BillNo]['tryrun_num'] = $arrayData[$BillNo]['install_num'] = $arrayData[$BillNo]['arrive_num'] = $arrayData[$BillNo]['second_num'] = $arrayData[$BillNo]['receivable_budget'] = 0; $arrayData[$BillNo]['total_facility_num'] = $arrayData[$BillNo]['delivery_num'] = $arrayData[$BillNo]['check_num'] = $arrayData[$BillNo]['tryrun_num'] = $arrayData[$BillNo]['install_num'] = $arrayData[$BillNo]['arrive_num'] = $arrayData[$BillNo]['second_num'] = $arrayData[$BillNo]['receivable_budget'] = 0;
} }
@ -111,7 +89,6 @@ foreach ($contract as $cont) {
$arrayData[$BillNo]['second'][0] = $PayStage; $arrayData[$BillNo]['second'][0] = $PayStage;
$arrayData[$BillNo]['second'][1] = $PayAmount; $arrayData[$BillNo]['second'][1] = $PayAmount;
$arrayData[$BillNo]['second'][2] = $PlanPayDate; $arrayData[$BillNo]['second'][2] = $PlanPayDate;
$arrayData[$BillNo]['total_budget'] += $PayAmount;
if (isset($arrayData[$BillNo]['sign'][2]) && !is_null($arrayData[$BillNo]['sign'][2])) { if (isset($arrayData[$BillNo]['sign'][2]) && !is_null($arrayData[$BillNo]['sign'][2])) {
$signtime = strtotime(strval($arrayData[$BillNo]['sign'][2])); $signtime = strtotime(strval($arrayData[$BillNo]['sign'][2]));
if (in_array($PayStage, $sign60)) { if (in_array($PayStage, $sign60)) {
@ -136,43 +113,33 @@ foreach ($contract as $cont) {
$arrayData[$BillNo]['sign'][0] = $PayStage; $arrayData[$BillNo]['sign'][0] = $PayStage;
$arrayData[$BillNo]['sign'][1] = $PayAmount; $arrayData[$BillNo]['sign'][1] = $PayAmount;
$arrayData[$BillNo]['sign'][2] = $PlanPayDate; $arrayData[$BillNo]['sign'][2] = $PlanPayDate;
$arrayData[$BillNo]['total_budget'] += $PayAmount;
array_push($arrayData[$BillNo]['sign']['min'], intval(substr($PlanPayDate, 4, 2)));
array_push($arrayData[$BillNo]['sign']['max'], intval(substr($PlanPayDate, 4, 2)));
} elseif (stristr($PayStage, '試車')) { } elseif (stristr($PayStage, '試車')) {
$arrayData[$BillNo]['tryrun'][0] = $PayStage; $arrayData[$BillNo]['tryrun'][0] = $PayStage;
$arrayData[$BillNo]['tryrun'][1] = $PayAmount; $arrayData[$BillNo]['tryrun'][1] = $PayAmount;
$arrayData[$BillNo]['tryrun'][2] = $PlanPayDate; $arrayData[$BillNo]['tryrun'][2] = $PlanPayDate;
$arrayData[$BillNo]['total_budget'] += $PayAmount;
} elseif (stristr($PayStage, '安裝') || stristr($PayStage, '貨抵工地且完工')) { } elseif (stristr($PayStage, '安裝') || stristr($PayStage, '貨抵工地且完工')) {
$arrayData[$BillNo]['install'][0] = $PayStage; $arrayData[$BillNo]['install'][0] = $PayStage;
$arrayData[$BillNo]['install'][1] = $PayAmount; $arrayData[$BillNo]['install'][1] = $PayAmount;
$arrayData[$BillNo]['install'][2] = $PlanPayDate; $arrayData[$BillNo]['install'][2] = $PlanPayDate;
$arrayData[$BillNo]['total_budget'] += $PayAmount;
} elseif (stristr($PayStage, '貨抵工地') || stristr($PayStage, '貨底工地')) { } elseif (stristr($PayStage, '貨抵工地') || stristr($PayStage, '貨底工地')) {
$arrayData[$BillNo]['arrive'][0] = $PayStage; $arrayData[$BillNo]['arrive'][0] = $PayStage;
$arrayData[$BillNo]['arrive'][1] = $PayAmount; $arrayData[$BillNo]['arrive'][1] = $PayAmount;
$arrayData[$BillNo]['arrive'][2] = $PlanPayDate; $arrayData[$BillNo]['arrive'][2] = $PlanPayDate;
$arrayData[$BillNo]['total_budget'] += $PayAmount;
} elseif (stristr($PayStage, '得合格函後6個月') || stristr($PayStage, '核可函取得後6個月') || stristr($PayStage, '交車')) { } elseif (stristr($PayStage, '得合格函後6個月') || stristr($PayStage, '核可函取得後6個月') || stristr($PayStage, '交車')) {
$arrayData[$BillNo]['delivery'][0] = $PayStage; $arrayData[$BillNo]['delivery'][0] = $PayStage;
$arrayData[$BillNo]['delivery'][1] = $PayAmount; $arrayData[$BillNo]['delivery'][1] = $PayAmount;
$arrayData[$BillNo]['delivery'][2] = $PlanPayDate; $arrayData[$BillNo]['delivery'][2] = $PlanPayDate;
$arrayData[$BillNo]['total_budget'] += $PayAmount;
} elseif (stristr($PayStage, '合格') || stristr($PayStage, '驗收') || stristr($PayStage, '許可') || stristr($PayStage, '核可')) { } elseif (stristr($PayStage, '合格') || stristr($PayStage, '驗收') || stristr($PayStage, '許可') || stristr($PayStage, '核可')) {
$arrayData[$BillNo]['check'][0] = $PayStage; $arrayData[$BillNo]['check'][0] = $PayStage;
$arrayData[$BillNo]['check'][1] = $PayAmount; $arrayData[$BillNo]['check'][1] = $PayAmount;
$arrayData[$BillNo]['check'][2] = $PlanPayDate; $arrayData[$BillNo]['check'][2] = $PlanPayDate;
$arrayData[$BillNo]['total_budget'] += $PayAmount;
} elseif (stristr($PayStage, '驗收完成')) { } elseif (stristr($PayStage, '驗收完成')) {
$arrayData[$BillNo]['final'][0] = $PayStage; $arrayData[$BillNo]['final'][0] = $PayStage;
$arrayData[$BillNo]['final'][1] = $PayAmount; $arrayData[$BillNo]['final'][1] = $PayAmount;
$arrayData[$BillNo]['final'][2] = $PlanPayDate; $arrayData[$BillNo]['final'][2] = $PlanPayDate;
$arrayData[$BillNo]['total_budget'] += $PayAmount;
} else { } else {
$arrayData[$BillNo]['other'][1] = $PayAmount; $arrayData[$BillNo]['other'][1] = $PayAmount;
$arrayData[$BillNo]['other'][2] = $PlanPayDate; $arrayData[$BillNo]['other'][2] = $PlanPayDate;
$arrayData[$BillNo]['total_budget'] += $PayAmount;
} }
} }
$sql = "SELECT $sql = "SELECT
@ -222,24 +189,12 @@ foreach ($wipwhole_array as $wip) {
$estimate_delivery_time = strtotime($wip['estimated_shipping_date']); $estimate_delivery_time = strtotime($wip['estimated_shipping_date']);
$secondtime = $estimate_delivery_time - (30 * 86400); $secondtime = $estimate_delivery_time - (30 * 86400);
$secondtime = date('Ymd', $secondtime); $secondtime = date('Ymd', $secondtime);
if (empty($wip['estimated_shipping_date'])) {
$arrayData[$wip['contractno']]['second']['min'] = 0;
} else {
array_push($arrayData[$wip['contractno']]['second']['max'], intval(substr($wip['estimated_shipping_date'], 5, 2)));
array_push($arrayData[$wip['contractno']]['second']['min'], intval(substr($wip['estimated_shipping_date'], 5, 2)));
}
$arrayData[$wip['contractno']]['second'][2] = intval($secondtime); $arrayData[$wip['contractno']]['second'][2] = intval($secondtime);
} elseif (isset($arrayData[$wip['contractno']]['second'][0]) && stristr($arrayData[$wip['contractno']]['second'][0], '出貨前90天')) { } elseif (isset($arrayData[$wip['contractno']]['second'][0]) && stristr($arrayData[$wip['contractno']]['second'][0], '出貨前90天')) {
$estimate_delivery_time = strtotime($wip['estimated_shipping_date']); $estimate_delivery_time = strtotime($wip['estimated_shipping_date']);
$secondtime = $estimate_delivery_time - (90 * 86400); $secondtime = $estimate_delivery_time - (90 * 86400);
$secondtime = date('Ymd', $secondtime); $secondtime = date('Ymd', $secondtime);
$arrayData[$wip['contractno']]['second'][2] = intval($secondtime); $arrayData[$wip['contractno']]['second'][2] = intval($secondtime);
if (empty($wip['estimated_shipping_date'])) {
$arrayData[$wip['contractno']]['second']['min'] = 0;
} else {
array_push($arrayData[$wip['contractno']]['second']['max'], intval(substr($wip['estimated_shipping_date'], 5, 2)));
array_push($arrayData[$wip['contractno']]['second']['min'], intval(substr($wip['estimated_shipping_date'], 5, 2)));
}
} }
if ($wip['delivery_date'] != NULL) { if ($wip['delivery_date'] != NULL) {
$arrayData[$wip['contractno']]['facilities'] .= $wip['facilityno'] . " (" . $wip['delivery_date'] . "已移交) <br>"; $arrayData[$wip['contractno']]['facilities'] .= $wip['facilityno'] . " (" . $wip['delivery_date'] . "已移交) <br>";
@ -250,24 +205,6 @@ foreach ($wipwhole_array as $wip) {
$arrayData[$wip['contractno']]['install_num'] += 1; $arrayData[$wip['contractno']]['install_num'] += 1;
$arrayData[$wip['contractno']]['arrive_num'] += 1; $arrayData[$wip['contractno']]['arrive_num'] += 1;
$arrayData[$wip['contractno']]['second_num'] += 1; $arrayData[$wip['contractno']]['second_num'] += 1;
array_push($arrayData[$wip['contractno']]['delivery']['min'], intval(substr($wip['delivery_date'], 5, 2)));
array_push($arrayData[$wip['contractno']]['delivery']['max'], intval(substr($wip['delivery_date'], 5, 2)));
if (!empty($wip['official_check_date']) && $wip['official_check_date'] != NULL) {
array_push($arrayData[$wip['contractno']]['check']['min'], intval(substr($wip['official_check_date'], 5, 2)));
array_push($arrayData[$wip['contractno']]['check']['max'], intval(substr($wip['official_check_date'], 5, 2)));
}
if (!empty($wip['tryrun_end_date']) && $wip['tryrun_end_date'] != NULL) {
array_push($arrayData[$wip['contractno']]['tryrun']['min'], intval(substr($wip['tryrun_end_date'], 5, 2)));
array_push($arrayData[$wip['contractno']]['tryrun']['max'], intval(substr($wip['tryrun_end_date'], 5, 2)));
}
if (!empty($wip['install_end_date']) && $wip['install_end_date'] != NULL) {
array_push($arrayData[$wip['contractno']]['install']['min'], intval(substr($wip['install_end_date'], 5, 2)));
array_push($arrayData[$wip['contractno']]['install']['max'], intval(substr($wip['install_end_date'], 5, 2)));
}
if (!empty($wip['real_arrival_date']) && $wip['real_arrival_date'] != NULL) {
array_push($arrayData[$wip['contractno']]['arrive']['min'], intval(substr($wip['real_arrival_date'], 5, 2)));
array_push($arrayData[$wip['contractno']]['arrive']['max'], intval(substr($wip['real_arrival_date'], 5, 2)));
}
} elseif ($wip['official_check_date'] != NULL) { } elseif ($wip['official_check_date'] != NULL) {
$arrayData[$wip['contractno']]['facilities'] .= $wip['facilityno'] . " (" . $wip['official_check_date'] . "官檢完畢) <br>"; $arrayData[$wip['contractno']]['facilities'] .= $wip['facilityno'] . " (" . $wip['official_check_date'] . "官檢完畢) <br>";
$arrayData[$wip['contractno']]['total_facility_num'] += 1; $arrayData[$wip['contractno']]['total_facility_num'] += 1;
@ -276,20 +213,6 @@ foreach ($wipwhole_array as $wip) {
$arrayData[$wip['contractno']]['install_num'] += 1; $arrayData[$wip['contractno']]['install_num'] += 1;
$arrayData[$wip['contractno']]['arrive_num'] += 1; $arrayData[$wip['contractno']]['arrive_num'] += 1;
$arrayData[$wip['contractno']]['second_num'] += 1; $arrayData[$wip['contractno']]['second_num'] += 1;
array_push($arrayData[$wip['contractno']]['check']['min'], intval(substr($wip['official_check_date'], 5, 2)));
array_push($arrayData[$wip['contractno']]['check']['max'], intval(substr($wip['official_check_date'], 5, 2)));
if (!empty($wip['tryrun_end_date']) && $wip['tryrun_end_date'] != NULL) {
array_push($arrayData[$wip['contractno']]['tryrun']['min'], intval(substr($wip['tryrun_end_date'], 5, 2)));
array_push($arrayData[$wip['contractno']]['tryrun']['max'], intval(substr($wip['tryrun_end_date'], 5, 2)));
}
if (!empty($wip['install_end_date']) && $wip['install_end_date'] != NULL) {
array_push($arrayData[$wip['contractno']]['install']['min'], intval(substr($wip['install_end_date'], 5, 2)));
array_push($arrayData[$wip['contractno']]['install']['max'], intval(substr($wip['install_end_date'], 5, 2)));
}
if (!empty($wip['real_arrival_date']) && $wip['real_arrival_date'] != NULL) {
array_push($arrayData[$wip['contractno']]['arrive']['min'], intval(substr($wip['real_arrival_date'], 5, 2)));
array_push($arrayData[$wip['contractno']]['arrive']['max'], intval(substr($wip['real_arrival_date'], 5, 2)));
}
} elseif ($wip['tryrun_end_date'] != NULL) { } elseif ($wip['tryrun_end_date'] != NULL) {
$arrayData[$wip['contractno']]['facilities'] .= $wip['facilityno'] . " (" . $wip['tryrun_end_date'] . "試車完畢) <br>"; $arrayData[$wip['contractno']]['facilities'] .= $wip['facilityno'] . " (" . $wip['tryrun_end_date'] . "試車完畢) <br>";
$arrayData[$wip['contractno']]['total_facility_num'] += 1; $arrayData[$wip['contractno']]['total_facility_num'] += 1;
@ -297,41 +220,17 @@ foreach ($wipwhole_array as $wip) {
$arrayData[$wip['contractno']]['install_num'] += 1; $arrayData[$wip['contractno']]['install_num'] += 1;
$arrayData[$wip['contractno']]['arrive_num'] += 1; $arrayData[$wip['contractno']]['arrive_num'] += 1;
$arrayData[$wip['contractno']]['second_num'] += 1; $arrayData[$wip['contractno']]['second_num'] += 1;
if (!empty($wip['tryrun_end_date']) && $wip['tryrun_end_date'] != NULL) {
array_push($arrayData[$wip['contractno']]['tryrun']['min'], intval(substr($wip['tryrun_end_date'], 5, 2)));
array_push($arrayData[$wip['contractno']]['tryrun']['max'], intval(substr($wip['tryrun_end_date'], 5, 2)));
}
if (!empty($wip['install_end_date']) && $wip['install_end_date'] != NULL) {
array_push($arrayData[$wip['contractno']]['install']['min'], intval(substr($wip['install_end_date'], 5, 2)));
array_push($arrayData[$wip['contractno']]['install']['max'], intval(substr($wip['install_end_date'], 5, 2)));
}
if (!empty($wip['real_arrival_date']) && $wip['real_arrival_date'] != NULL) {
array_push($arrayData[$wip['contractno']]['arrive']['min'], intval(substr($wip['real_arrival_date'], 5, 2)));
array_push($arrayData[$wip['contractno']]['arrive']['max'], intval(substr($wip['real_arrival_date'], 5, 2)));
}
} elseif ($wip['install_end_date'] != NULL) { } elseif ($wip['install_end_date'] != NULL) {
$arrayData[$wip['contractno']]['facilities'] .= $wip['facilityno'] . " (" . $wip['install_end_date'] . "安裝完畢) <br>"; $arrayData[$wip['contractno']]['facilities'] .= $wip['facilityno'] . " (" . $wip['install_end_date'] . "安裝完畢) <br>";
$arrayData[$wip['contractno']]['total_facility_num'] += 1; $arrayData[$wip['contractno']]['total_facility_num'] += 1;
$arrayData[$wip['contractno']]['install_num'] += 1; $arrayData[$wip['contractno']]['install_num'] += 1;
$arrayData[$wip['contractno']]['arrive_num'] += 1; $arrayData[$wip['contractno']]['arrive_num'] += 1;
$arrayData[$wip['contractno']]['second_num'] += 1; $arrayData[$wip['contractno']]['second_num'] += 1;
if (!empty($wip['install_end_date']) && $wip['install_end_date'] != NULL) {
array_push($arrayData[$wip['contractno']]['install']['min'], intval(substr($wip['install_end_date'], 5, 2)));
array_push($arrayData[$wip['contractno']]['install']['max'], intval(substr($wip['install_end_date'], 5, 2)));
}
if (!empty($wip['real_arrival_date']) && $wip['real_arrival_date'] != NULL) {
array_push($arrayData[$wip['contractno']]['arrive']['min'], intval(substr($wip['real_arrival_date'], 5, 2)));
array_push($arrayData[$wip['contractno']]['arrive']['max'], intval(substr($wip['real_arrival_date'], 5, 2)));
}
} elseif ($wip['real_arrival_date'] != NULL) { } elseif ($wip['real_arrival_date'] != NULL) {
$arrayData[$wip['contractno']]['facilities'] .= $wip['facilityno'] . " (" . $wip['real_arrival_date'] . "貨抵工地) <br>"; $arrayData[$wip['contractno']]['facilities'] .= $wip['facilityno'] . " (" . $wip['real_arrival_date'] . "貨抵工地) <br>";
$arrayData[$wip['contractno']]['total_facility_num'] += 1; $arrayData[$wip['contractno']]['total_facility_num'] += 1;
$arrayData[$wip['contractno']]['arrive_num'] += 1; $arrayData[$wip['contractno']]['arrive_num'] += 1;
$arrayData[$wip['contractno']]['second_num'] += 1; $arrayData[$wip['contractno']]['second_num'] += 1;
if (!empty($wip['real_arrival_date']) && $wip['real_arrival_date'] != NULL) {
array_push($arrayData[$wip['contractno']]['arrive']['min'], intval(substr($wip['real_arrival_date'], 5, 2)));
array_push($arrayData[$wip['contractno']]['arrive']['max'], intval(substr($wip['real_arrival_date'], 5, 2)));
}
} elseif (($arrayData[$wip['contractno']]['second'] != NULL) && (isset($arrayData[$wip['contractno']]['second'][2])) && ($arrayData[$wip['contractno']]['second'][2] <= date('Ymd'))) { } elseif (($arrayData[$wip['contractno']]['second'] != NULL) && (isset($arrayData[$wip['contractno']]['second'][2])) && ($arrayData[$wip['contractno']]['second'][2] <= date('Ymd'))) {
if ($wip['estimated_shipping_date'] != NULL) { if ($wip['estimated_shipping_date'] != NULL) {
$arrayData[$wip['contractno']]['facilities'] .= $wip['facilityno'] . " (" . $wip['estimated_shipping_date'] . "預計出貨日) <br>"; $arrayData[$wip['contractno']]['facilities'] .= $wip['facilityno'] . " (" . $wip['estimated_shipping_date'] . "預計出貨日) <br>";
@ -359,59 +258,18 @@ foreach ($wipwhole_array as $wip) {
foreach ($arrayData as &$value) { foreach ($arrayData as &$value) {
if ($value['total_facility_num'] > 0) { if ($value['total_facility_num'] > 0) {
$month = 11;
$value['receivable_budget'] = $value['sign'][1] + ($value['second'][1] * ($value['second_num'] / $value['total_facility_num'])) + $value['receivable_budget'] = $value['sign'][1] + ($value['second'][1] * ($value['second_num'] / $value['total_facility_num'])) +
($value['arrive'][1] * ($value['arrive_num'] / $value['total_facility_num'])) + ($value['install'][1] * ($value['install_num'] / $value['total_facility_num'])) + ($value['arrive'][1] * ($value['arrive_num'] / $value['total_facility_num'])) + ($value['install'][1] * ($value['install_num'] / $value['total_facility_num'])) +
($value['tryrun'][1] * ($value['tryrun_num'] / $value['total_facility_num'])) + ($value['check'][1] * ($value['check_num'] / $value['total_facility_num'])) + ($value['tryrun'][1] * ($value['tryrun_num'] / $value['total_facility_num'])) + ($value['check'][1] * ($value['check_num'] / $value['total_facility_num'])) +
(($value['delivery'][1] + $value['final'][1]) * ($value['delivery_num'] / $value['total_facility_num'])); (($value['delivery'][1] + $value['final'][1]) * ($value['delivery_num'] / $value['total_facility_num']));
$value['sign'][3] = $value['sign'][1];
$value['second'][3] = $value['second'][1] * ($value['second_num'] / $value['total_facility_num']);
$value['arrive'][3] = $value['arrive'][1] * ($value['arrive_num'] / $value['total_facility_num']);
$value['install'][3] = $value['install'][1] * ($value['install_num'] / $value['total_facility_num']);
$value['tryrun'][3] = $value['tryrun'][1] * ($value['tryrun_num'] / $value['total_facility_num']);
$value['check'][3] = $value['check'][1] * ($value['check_num'] / $value['total_facility_num']);
$value['delivery'][3] = $value['delivery'][1] * ($value['delivery_num'] / $value['total_facility_num']);
$value['final'][3] = $value['final'][1] * ($value['delivery_num'] / $value['total_facility_num']);
}
$value['sign']['max'] = empty($value['sign']['max']) ? 0 : (($month - max($value['sign']['max'])) < 0 ? 0 : ($month - max($value['sign']['max'])));
$value['sign']['min'] = empty($value['sign']['min']) ? 0 : (($month - min($value['sign']['min'])) < 0 ? 0 : ($month - min($value['sign']['min'])));
$value['second']['max'] = empty($value['second']['max']) ? 0 : (($month - max($value['second']['max'])) < 0 ? 0 : ($month - max($value['second']['max'])));
$value['second']['min'] = empty($value['second']['min']) ? 0 : (($month - min($value['second']['min'])) < 0 ? 0 : ($month - min($value['second']['min'])));
$value['arrive']['max'] = empty($value['arrive']['max']) ? 0 : (($month - max($value['arrive']['max'])) < 0 ? 0 : ($month - max($value['arrive']['max'])));
$value['arrive']['min'] = empty($value['arrive']['min']) ? 0 : (($month - min($value['arrive']['min'])) < 0 ? 0 : ($month - min($value['arrive']['min'])));
$value['install']['max'] = empty($value['install']['max']) ? 0 : (($month - max($value['install']['max'])) < 0 ? 0 : ($month - max($value['install']['max'])));
$value['install']['min'] = empty($value['install']['min']) ? 0 : (($month - min($value['install']['min'])) < 0 ? 0 : ($month - min($value['install']['min'])));
$value['tryrun']['max'] = empty($value['tryrun']['max']) ? 0 : (($month - max($value['tryrun']['max'])) < 0 ? 0 : ($month - max($value['tryrun']['max'])));
$value['tryrun']['min'] = empty($value['tryrun']['min']) ? 0 : (($month - min($value['tryrun']['min'])) < 0 ? 0 : ($month - min($value['tryrun']['min'])));
$value['check']['max'] = empty($value['check']['max']) ? 0 : (($month - max($value['check']['max'])) < 0 ? 0 : ($month - max($value['check']['max'])));
$value['check']['min'] = empty($value['check']['min']) ? 0 : (($month - min($value['check']['min'])) < 0 ? 0 : ($month - min($value['check']['min'])));
$value['delivery']['max'] = empty($value['delivery']['max']) ? 0 : (($month - max($value['delivery']['max'])) < 0 ? 0 : ($month - max($value['delivery']['max'])));
$value['delivery']['min'] = empty($value['delivery']['min']) ? 0 : (($month - min($value['delivery']['min'])) < 0 ? 0 : ($month - min($value['delivery']['min'])));
$value['final']['max'] = empty($value['final']['max']) ? 0 : (($month - max($value['final']['max'])) < 0 ? 0 : ($month - max($value['final']['max'])));
$value['final']['min'] = empty($value['final']['min']) ? 0 : (($month - min($value['final']['min'])) < 0 ? 0 : ($month - min($value['final']['min'])));
}
// [invoice][發票號碼][0 發票日期, 1 發票金額, 2 發票狀態, 3 收款日期, 4 收款金額, 5 手續費, 6 核銷單號]
foreach ($invoice_data as $invoice) {
if (isset($arrayData[$invoice['ProjectId']])) {
$arrayData[$invoice['ProjectId']]['invoice_budget'] += intval($invoice['OAmountWithTax']);
$arrayData[$invoice['ProjectId']]['invoice'][$invoice['InvoiceNo']] = [date("Ymd", strtotime($invoice['InvoiceTime'])), $invoice['OAmountWithTax'], $invoice['InvoiceState']];
} }
} }
// array_push($arrayData[$wip['contractno']]['received'], ['assaaa',123124,'sdrfrqa']);
// 把核銷單的內容補到發票資料中
foreach ($received_array as $received) { foreach ($received_array as $received) {
if ($received['OrderBillNo'] == 'SO20230801001') {
$BillNo = 'M230947'; if (isset($arrayData[$received['OrderBillNo']])) {
} elseif ($received['OrderBillNo'] == 'SO20230801002') { array_push($arrayData[$received['OrderBillNo']]['received'], [$received['BillNo'], $received['WriteOffBizPartnerId'], $received['OrderBillNo'],]);
$BillNo = 'M231067';
} else {
$BillNo = $received['OrderBillNo'];
};
if (isset($arrayData[$BillNo])) {
if (isset($arrayData[$BillNo]['invoice'][$received['InvoiceNo']])) {
$arrayData[$BillNo]['received_budget'] += $received['PayWriteOffOAmount'];
array_push($arrayData[$BillNo]['invoice'][$received['InvoiceNo']], date($received['ReceivedDate']), $received['PayWriteOffOAmount'], $received['Fee'], $received['BillNo']);
}
} }
} }
@ -456,54 +314,30 @@ $data = json_encode($arrayData);
} }
</style> </style>
<button type="button" onclick="downloadData()" class="btn btn-warning btn-lg pull-right"><span class="glyphicon glyphicon-download-alt"></span></button> <button type="button" onclick="downloadData()" class="btn btn-warning btn-lg pull-right"><span class="glyphicon glyphicon-download-alt"></span></button>
<div style="width:98%;margin:1% ;overflow-x: auto;">
<div style="width:98%;margin:1%">
<table id="table_index" class="table table-striped table-bordered" style="width:100%;"> <table id="table_index" class="table table-striped table-bordered" style="width:100%;">
<thead> <thead>
<tr> <tr>
<th style="width: 120px;">合約號</th> <th style="width: 120px;">合約號</th>
<th style="width: 120px;">部門</th> <th style="width: 120px;">部門</th>
<th style="width: 120px;">經理</th> <th style="width: 80px;">經理</th>
<th style="width: 120px;">營業員</th> <th style="width: 80px;">營業員</th>
<th style="width: 120px;">客戶名稱</th> <th>客戶名稱</th>
<th style="width: 120px;">簽約款</th> <!-- <th style="width: 100px;">簽約款</th>
<th style="width: 120px;">應收簽約金額</th> <th style="width: 100px;">二次款</th>
<th style="width: 120px;">簽約最大催收次數</th> <th style="width: 100px;">貨抵工地款</th>
<th style="width: 120px;">簽約最小催收次數</th> <th style="width: 100px;">安裝款</th>
<th style="width: 120px;">二次款</th> <th style="width: 100px;">試車款</th>
<th style="width: 120px;">應收二次金額</th> <th style="width: 100px;">官檢款</th>
<th style="width: 120px;">二次最大催收次數</th> <th style="width: 100px;">交車款</th>
<th style="width: 120px;">二次最小催收次數</th> <th style="width: 100px;">尾款</th> -->
<th style="width: 120px;">貨抵工地款</th> <th style="width: 100px;">目前應收</th>
<th style="width: 120px;">應收貨抵工地金額</th> <!-- <th style="width: 150px;">未開發票金額</th>
<th style="width: 120px;">貨抵工地最大催收次數</th> <th style="width: 100px;">未收金額</th> -->
<th style="width: 120px;">貨抵工地最小催收次數</th> <th>作番狀態</th>
<th style="width: 120px;">安裝款</th>
<th style="width: 120px;">應收安裝金額</th>
<th style="width: 120px;">安裝最大催收次數</th>
<th style="width: 120px;">安裝最小催收次數</th>
<th style="width: 120px;">試車款</th>
<th style="width: 120px;">應收試車金額</th>
<th style="width: 120px;">試車最大催收次數</th>
<th style="width: 120px;">試車最小催收次數</th>
<th style="width: 120px;">官檢款</th>
<th style="width: 120px;">應收官檢金額</th>
<th style="width: 120px;">官檢最大催收次數</th>
<th style="width: 120px;">官檢最小催收次數</th>
<th style="width: 120px;">移交款</th>
<th style="width: 120px;">應收移交金額</th>
<th style="width: 120px;">移交最大催收次數</th>
<th style="width: 120px;">移交最小催收次數</th>
<th style="width: 120px;">尾款</th>
<th style="width: 120px;">應收尾款金額</th>
<th style="width: 120px;">尾款最大催收次數</th>
<th style="width: 120px;">尾款最小催收次數</th>
<th style="width: 120px;">合約總金額</th>
<th style="width: 120px;" style="width: 120px;">目前應收</th>
<th style="width: 120px;" style="width: 120px;">已開發票金額</th>
<th style="width: 120px;">已收金額</th>
<!-- <th>作番狀態</th> -->
<!-- <th style="width: 100px;">收款狀態</th> --> <!-- <th style="width: 100px;">收款狀態</th> -->
<th style="width: 100px;">操作</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -516,45 +350,19 @@ $data = json_encode($arrayData);
<td><?= $value[2] ?></td> <td><?= $value[2] ?></td>
<td><?= $value[4] ?></td> <td><?= $value[4] ?></td>
<td><?= $value[5] ?></td> <td><?= $value[5] ?></td>
<td><?= number_format(round($value['sign'][1])) ?></td> <!-- <td style="text-align: end;"><?= number_format(round($value['sign'][1])) ?></td>
<td style="text-align: end;"><?= isset($value['sign'][3]) ? number_format(round($value['sign'][3])) : '--' ?></td> <td style="text-align: end;"><?= number_format(round($value['second'][1])) ?></td>
<td style="text-align: end;"><?= isset($value['sign']['min']) ? $value['sign']['min'] : '--' ?></td> <td style="text-align: end;"><?= number_format(round($value['arrive'][1])) ?></td>
<td style="text-align: end;"><?= isset($value['sign']['max']) ? $value['sign']['max'] : '--' ?></td> <td style="text-align: end;"><?= number_format(round($value['install'][1])) ?></td>
<td style="text-align: end;"><?= isset($value['second'][1]) ? number_format(round($value['second'][1])) : '--' ?></td> <td style="text-align: end;"><?= number_format(round($value['tryrun'][1])) ?></td>
<td style="text-align: end;"><?= isset($value['second'][3]) ? number_format(round($value['second'][3])) : '--' ?></td> <td style="text-align: end;"><?= number_format(round($value['check'][1])) ?></td>
<td style="text-align: end;"><?= isset($value['second']['min']) ? $value['second']['min'] : '--' ?></td> <td style="text-align: end;"><?= number_format(round($value['delivery'][1])) ?></td>
<td style="text-align: end;"><?= isset($value['second']['max']) ? $value['second']['max'] : '--' ?></td> <td style="text-align: end;"><?= number_format(round($value['final'][1])) ?></td> -->
<td style="text-align: end;"><?= isset($value['arrive'][1]) ? number_format(round($value['arrive'][1])) : '--' ?></td> <td style="text-align: end;"><?= number_format(round($value['receivable_budget'])) ?></td>
<td style="text-align: end;"><?= isset($value['arrive'][3]) ? number_format(round($value['arrive'][3])) : '--' ?></td> <!-- <td style="text-align: end;"><?= number_format(round($value['total_facility_num'])) ?></td> -->
<td style="text-align: end;"><?= isset($value['arrive']['min']) ? $value['arrive']['min'] : '--' ?></td> <td style="text-align: start;"><?= $value['facilities'] ?></td>
<td style="text-align: end;"><?= isset($value['arrive']['max']) ? $value['arrive']['max'] : '--' ?></td>
<td style="text-align: end;"><?= isset($value['install'][1]) ? number_format(round($value['install'][1])) : '--' ?></td>
<td style="text-align: end;"><?= isset($value['install'][3]) ? number_format(round($value['install'][3])) : '--' ?></td>
<td style="text-align: end;"><?= isset($value['install']['min']) ? $value['install']['min'] : '--' ?></td>
<td style="text-align: end;"><?= isset($value['install']['max']) ? $value['install']['max'] : '--' ?></td>
<td style="text-align: end;"><?= isset($value['tryrun'][1]) ? number_format(round($value['tryrun'][1])) : '--' ?></td>
<td style="text-align: end;"><?= isset($value['tryrun'][3]) ? number_format(round($value['tryrun'][3])) : '--' ?></td>
<td style="text-align: end;"><?= isset($value['tryrun']['min']) ? $value['tryrun']['min'] : '--' ?></td>
<td style="text-align: end;"><?= isset($value['tryrun']['max']) ? $value['tryrun']['max'] : '--' ?></td>
<td style="text-align: end;"><?= isset($value['check'][1]) ? number_format(round($value['check'][1])) : '--' ?></td>
<td style="text-align: end;"><?= isset($value['check'][3]) ? number_format(round($value['check'][3])) : '--' ?></td>
<td style="text-align: end;"><?= isset($value['check']['min']) ? $value['check']['min'] : '--' ?></td>
<td style="text-align: end;"><?= isset($value['check']['max']) ? $value['check']['max'] : '--' ?></td>
<td style="text-align: end;"><?= isset($value['delivery'][1]) ? number_format(round($value['delivery'][1])) : '--' ?></td>
<td style="text-align: end;"><?= isset($value['delivery'][3]) ? number_format(round($value['delivery'][3])) : '--' ?></td>
<td style="text-align: end;"><?= isset($value['delivery']['min']) ? $value['delivery']['min'] : '--' ?></td>
<td style="text-align: end;"><?= isset($value['delivery']['max']) ? $value['delivery']['max'] : '--' ?></td>
<td style="text-align: end;"><?= isset($value['final'][1]) ? number_format(round($value['final'][1])) : '--' ?></td>
<td style="text-align: end;"><?= isset($value['final'][3]) ? number_format(round($value['final'][3])) : '--' ?></td>
<td style="text-align: end;"><?= isset($value['final']['min']) ? $value['final']['min'] : '--' ?></td>
<td style="text-align: end;"><?= isset($value['final']['max']) ? $value['final']['max'] : '--' ?></td>
<td style="text-align: end;"><?= isset($value['total_budget']) ? number_format(round($value['total_budget'])) : '--' ?></td>
<td style="text-align: end;"><?= isset($value['receivable_budget']) ? number_format(round($value['receivable_budget'])) : '--' ?></td>
<td style="text-align: end;"><?= isset($value['invoice_budget']) ? number_format(round($value['invoice_budget'])) : '--' ?></td>
<td style="text-align: end;"><?= isset($value['received_budget']) ? number_format(round($value['received_budget'])) : '--' ?></td>
<!-- <td style="text-align: start;"><?= $value['facilities'] ?></td>
<td><button type="button" onclick="sendData('<?= $key ?>')" class="btn btn-primary btn-sm"><span class=" glyphicon glyphicon-search"></span></button> <td><button type="button" onclick="sendData('<?= $key ?>')" class="btn btn-primary btn-sm"><span class=" glyphicon glyphicon-search"></span></button>
</td> --> </td>
</tr> </tr>
<?php <?php
} }
@ -563,7 +371,7 @@ $data = json_encode($arrayData);
</table> </table>
</div> </div>
<script> <script>
function test() { function downloadData() {
var BillData = <?= $data ?>; var BillData = <?= $data ?>;
var form = document.createElement("form"); var form = document.createElement("form");
form.method = 'POST'; form.method = 'POST';
@ -578,29 +386,6 @@ $data = json_encode($arrayData);
} }
function downloadData() {
var xhr = new XMLHttpRequest();
var url = window.location.origin + "/wms/account-receivable-excel.php?<?= $token_link ?>";
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
var file_path = xhr.responseText;
var link = document.createElement('a');
var name = "應收帳款" + "<?= date('Y-m-d-Hm') ?>" + ".xlsx";
link.setAttribute('href', window.location.origin + "/wms/account-receivable.xlsx");
link.setAttribute('download', name);
link.style.display = 'none';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
}
xhr.send(JSON.stringify({
Bill: <?= $data ?>
}));
}
function sendData(BillNo) { function sendData(BillNo) {
var BillData = <?= $data ?>; var BillData = <?= $data ?>;
var Bill = BillData[BillNo]; var Bill = BillData[BillNo];

BIN
wms/account-receivable.xlsx

Binary file not shown.

BIN
wms/assets/img/icon/(Ñ╝¿╧Ñ╬)icon-star-active.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

BIN
wms/assets/img/icon/(Ñ╝¿╧Ñ╬)icon-star-default.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

4
wms/board-record-submit.php

@ -7,7 +7,8 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") {
$$k = trim($v); $$k = trim($v);
} }
function get_basename($filename) { function get_basename($filename)
{
return preg_replace('/^.+[\\\\\\/]/', '', $filename); return preg_replace('/^.+[\\\\\\/]/', '', $filename);
} }
@ -50,4 +51,3 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") {
mysqli_close($link); mysqli_close($link);
} }
?>

5
wms/class/Cmail.php

@ -1,5 +1,4 @@
<?php <?php
use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP; use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception; use PHPMailer\PHPMailer\Exception;
@ -53,10 +52,6 @@ class Cmail
//$mail->addCC("personC@gmail.com", "person C"); //$mail->addCC("personC@gmail.com", "person C");
//$mail->addBCC("personD@gmail.com", "person D"); //$mail->addBCC("personD@gmail.com", "person D");
//$mail->addAttachment("image1.jpg", "picture.jpg"); //設定附件, 對方會看到附件名稱為 picture.jpg //$mail->addAttachment("image1.jpg", "picture.jpg"); //設定附件, 對方會看到附件名稱為 picture.jpg
foreach ($files as $v) {
list($file, $file_name) = $v;
$mail->addAttachment($file, $file_name);
}
//print_r($mail);exit; //print_r($mail);exit;
if (!$mail->Send()){ if (!$mail->Send()){
// echo "Mailer error: " . $mail->ErrorInfo; // echo "Mailer error: " . $mail->ErrorInfo;

120
wms/cont/apply_form.php

@ -25,7 +25,7 @@ $flow_id = 'con01';
$form_id = ""; $form_id = "";
#價審單狀態 #價審單狀態
$apply_st = ""; $apply_st = "";
list($apply_key, $form_key)=DB::fields("select apply_key, form_key from con_maintance_examine_apply where vol_no='$vol_no' order by apply_key desc limit 0, 1"); list($apply_key, $form_key) = DB::fields("SELECT apply_key, form_key from con_maintance_examine_apply where vol_no='$vol_no' order by apply_key desc limit 0, 1");
if (empty($apply_key)) $apply_st = 1; // 準備新增 if (empty($apply_key)) $apply_st = 1; // 準備新增
else { else {
//list($flow_code)=DB::fields("select flow_code from flow where form_key = '$form_key' and system_id = '$system_id' and flow_id = '$flow_id'"); //list($flow_code)=DB::fields("select flow_code from flow where form_key = '$form_key' and system_id = '$system_id' and flow_id = '$flow_id'");
@ -58,6 +58,7 @@ $wf->setFormData(['discount' => 100]);
$flowName = $wf->getFlowName(); $flowName = $wf->getFlowName();
$assigner = $wf->getAssignerList(); $assigner = $wf->getAssignerList();
$assign_status = $wf->getAssignStatus($assigner); $assign_status = $wf->getAssignStatus($assigner);
$if_show_assign = true; $if_show_assign = true;
//加載流程圖 //加載流程圖
//$fc = WorkFLowItems::get_records($flow->getSystemID(), $flow->getFlowID()); //$fc = WorkFLowItems::get_records($flow->getSystemID(), $flow->getFlowID());
@ -71,19 +72,19 @@ $isSplitable = $wf->isSplitable();
//表單數據 //表單數據
#客戶表 #客戶表
#1.電梯品牌選項 #1.電梯品牌選項
$sql = "select code_name value ,content label from code where field_name='elevator_brand' order by code_name asc "; $sql = "SELECT code_name value ,content label FROM code WHERE field_name='elevator_brand' order by code_name asc ";
$elevator_brand_opt = DB::result($sql); $elevator_brand_opt = DB::result($sql);
#2.保養方式 #2.保養方式
$sql = "select code_name value ,content label from code where field_name='maintain_kind'"; $sql = "SELECT code_name value ,content label FROM code WHERE field_name='maintain_kind'";
$maintain_kind_opt = DB::result($sql); $maintain_kind_opt = DB::result($sql);
#3.電梯類型 #3.電梯類型
$sql = "select code_name value ,content label from code where field_name='maintain_elevator_kind'"; $sql = "SELECT code_name value ,content label FROM code WHERE field_name='maintain_elevator_kind'";
$elevator_kind_opt = DB::result($sql); $elevator_kind_opt = DB::result($sql);
#4.付款方式 #4.付款方式
$sql = "select code_name value ,content label from code where field_name='payment_kind' order by code_name+ 0 asc"; $sql = "SELECT code_name value ,content label FROM code WHERE field_name='payment_kind' order by code_name+ 0 asc";
$payment_kind_opt = DB::result($sql); $payment_kind_opt = DB::result($sql);
#5.契約性質 #5.契約性質
$sql = "select code_name value ,content label from code where field_name='contract_kind'"; $sql = "SELECT code_name value ,content label FROM code WHERE field_name='contract_kind'";
$contract_kind_opt = DB::result($sql); $contract_kind_opt = DB::result($sql);
#6.是否贈送M1 #6.是否贈送M1
$is_m1_bundle_opt = [ $is_m1_bundle_opt = [
@ -92,7 +93,7 @@ $is_m1_bundle_opt = [
]; ];
#7.機種 #7.機種
$sql = "select code_name value ,content label from code where field_name='fp_kind'"; $sql = "SELECT code_name value ,content label FROM code WHERE field_name='fp_kind'";
$fp_kind_opt = DB::result($sql); $fp_kind_opt = DB::result($sql);
#抓取有望客戶資料 #抓取有望客戶資料
@ -100,6 +101,7 @@ $fp_kind_opt = DB::result($sql);
$vol_no = $_GET['vol_no']; $vol_no = $_GET['vol_no'];
$where = " and vol_no='$vol_no'"; $where = " and vol_no='$vol_no'";
$sql = "SELECT * FROM hope_contract_customer where 1=1 $where ORDER BY vol_no"; $sql = "SELECT * FROM hope_contract_customer where 1=1 $where ORDER BY vol_no";
// print_r($sql);
$hope_contract = DB::result($sql); $hope_contract = DB::result($sql);
$hope_contract = empty($hope_contract) ? [] : $hope_contract[0]; $hope_contract = empty($hope_contract) ? [] : $hope_contract[0];
#寫入 con_maintance_examine_apply #寫入 con_maintance_examine_apply
@ -163,33 +165,34 @@ $con_maintance_examine_clear_columm = [
'elevator_brand' => ['label' => "品牌", "value" => "", "tag" => 'select', 'attr' => ['colspan' => 2, 'name' => 'elevator_brand[]', 'class' => 'form-control form-control-sm'], 'options' => $elevator_brand_opt], 'elevator_brand' => ['label' => "品牌", "value" => "", "tag" => 'select', 'attr' => ['colspan' => 2, 'name' => 'elevator_brand[]', 'class' => 'form-control form-control-sm'], 'options' => $elevator_brand_opt],
'elevator_kind' => ['label' => "電梯類型", "value" => "", "tag" => 'select', 'attr' => ['name' => 'elevator_kind[]', 'required', 'colspan' => 2, 'class' => 'form-control form-control-sm'], 'options' => $elevator_kind_opt], 'elevator_kind' => ['label' => "電梯類型", "value" => "", "tag" => 'select', 'attr' => ['name' => 'elevator_kind[]', 'required', 'colspan' => 2, 'class' => 'form-control form-control-sm'], 'options' => $elevator_kind_opt],
'spec' => ['label' => "規格型號", "value" => "", "tag" => 'select', 'attr' => ['colspan' => 2, 'name' => 'spec[]', 'class' => 'form-control form-control-sm'], 'options' => $fp_kind_opt], 'spec' => ['label' => "規格型號", "value" => "", "tag" => 'select', 'attr' => ['colspan' => 2, 'name' => 'spec[]', 'class' => 'form-control form-control-sm'], 'options' => $fp_kind_opt],
'weight' => ['label' => "載重(KG)", "value" => "", "tag" => 'digits', 'attr' => ['name' => 'weight[]', 'gt=0', 'min=0', 'required', 'class' => 'form-control form-control-sm']], 'weight' => ['label' => "載重(KG)", "value" => "", "tag" => 'digits', 'attr' => ['name' => 'weight[]', "placeholder" => "載重", 'gt=0', 'min=0', 'required', 'class' => 'form-control form-control-sm']],
'speed' => ['label' => "速度(m/min)", "value" => "", "tag" => 'number', 'attr' => ['colspan' => 2, 'name' => 'speed[]', 'gt=0', 'min=0', 'required', 'class' => 'form-control form-control-sm']], 'speed' => ['label' => "速度(m/min)", "value" => "", "tag" => 'number', 'attr' => ['colspan' => 2, 'name' => 'speed[]', "placeholder" => "速度", 'gt=0', 'min=0', 'required', 'class' => 'form-control form-control-sm']],
'stop' => ['label' => "停數", "value" => "", "tag" => 'number', 'attr' => ['name' => 'stop[]', 'class' => 'form-control form-control-sm']], 'stop' => ['label' => "停數", "value" => "", "tag" => 'number', 'attr' => ['name' => 'stop[]', "placeholder" => "停數", 'class' => 'form-control form-control-sm']],
'floors' => ['label' => "層數", "value" => "", "tag" => 'digits', 'attr' => ['name' => 'floors[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']], 'floors' => ['label' => "層數", "value" => "", "tag" => 'digits', 'attr' => ['name' => 'floors[]', 'min=1', 'required', "placeholder" => "層數", 'class' => 'form-control form-control-sm']],
'persons' => ['label' => "人乘", "value" => "", "tag" => 'digits', 'attr' => ['name' => 'persons[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']], 'persons' => ['label' => "人乘", "value" => "", "tag" => 'digits', 'attr' => ['name' => 'persons[]', 'min=1', 'required', "placeholder" => "人乘", 'class' => 'form-control form-control-sm']],
'maintain_times' => ['label' => "保養次數", "value" => "", "tag" => 'digits', 'attr' => ['name' => 'maintain_times[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']], 'maintain_times' => ['label' => "保養次數", "value" => "", "tag" => 'digits', 'attr' => ['name' => 'maintain_times[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']],
'maintain_months' => ['label' => "保養月數", "value" => "", "tag" => 'digits', 'attr' => ['name' => 'maintain_months[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']], 'maintain_months' => ['label' => "保養月數", "value" => "", "tag" => 'digits', 'attr' => ['name' => 'maintain_months[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']],
'maintain_period' => ['label' => "保養周期", "value" => "", "tag" => 'number', 'attr' => ['name' => 'maintain_period[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']], 'maintain_period' => ['label' => "保養周期", "value" => "", "tag" => 'number', 'attr' => ['name' => 'maintain_period[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']],
'is_m1_bundle' => ['label' => "贈送M1", "value" => "", "tag" => 'select', 'attr' => ['name' => 'is_m1_bundle[]', 'required', 'class' => 'form-control form-control-sm'], 'options' => $is_m1_bundle_opt], 'is_m1_bundle' => ['label' => "贈送M1", "value" => "", "tag" => 'select', 'attr' => ['name' => 'is_m1_bundle[]', 'required', 'class' => 'form-control form-control-sm'], 'options' => $is_m1_bundle_opt],
'useful_years' => ['label' => "竣工檢查年度", "value" => "", "tag" => 'digits', 'attr' => ['colspan' => 2, 'required', 'gt=0', 'min=0', 'name' => 'useful_years[]', 'class' => 'form-control form-control-sm']], 'useful_years' => ['label' => "竣工檢查年度", "value" => "", "tag" => 'digits', 'attr' => ['colspan' => 2, 'required', "placeholder" => "竣工檢查年度", 'gt=0', 'min=0', 'name' => 'useful_years[]', 'class' => 'form-control form-control-sm']],
'last_check_date' => ['label' => "上次年檢日期", "value" => "", "tag" => 'number', 'attr' => ['required', 'name' => 'last_check_date[]', 'colspan' => 2, 'class' => 'form-control form-control-sm']], 'last_check_date' => ['label' => "上次年檢日期", "value" => "", "tag" => 'number', 'attr' => ['required', 'name' => 'last_check_date[]', "placeholder" => "上次年檢日期", 'colspan' => 2, 'class' => 'form-control form-control-sm']],
'annual_survey_expense' => ['label' => "年檢費用(元)", "value" => "", "tag" => 'number', 'attr' => ['required', 'name' => 'annual_survey_expense[]', 'colspan' => 2, 'class' => 'form-control form-control-sm ']], 'annual_survey_expense' => ['label' => "年檢費用(元)", "value" => "", "tag" => 'number', 'attr' => ['required', 'name' => 'annual_survey_expense[]', "placeholder" => "年檢費用", 'colspan' => 2, 'class' => 'form-control form-control-sm ']],
'maintain_times' => ['label' => "保養次數", "tag" => 'digits', 'attr' => ['name' => 'maintain_times[]', "value" => "1", 'min=1', 'required', 'class' => 'form-control form-control-sm']], 'maintain_times' => ['label' => "保養次數", "tag" => 'digits', 'attr' => ['name' => 'maintain_times[]', "value" => "1", 'min=1', 'required', 'class' => 'form-control form-control-sm']],
'register_code' => ['label' => "電梯許可證代碼", "tag" => 'text', 'attr' => ['colspan' => 2, 'name' => 'register_code[]', "placeholder" => "無證號請輸入A,B...", 'required', 'class' => 'form-control form-control-sm']], 'register_code' => ['label' => "電梯許可證代碼", "tag" => 'text', 'attr' => ['colspan' => 2, 'name' => 'register_code[]', "placeholder" => "無證號請輸入A,B...", 'required', 'class' => 'form-control form-control-sm']],
'maintain_months' => ['label' => "保養月數", "tag" => 'digits', 'attr' => ['name' => 'maintain_months[]', "value" => "12", 'min=12', 'required', 'class' => 'form-control form-control-sm']], 'maintain_months' => ['label' => "保養月數", "tag" => 'digits', 'attr' => ['name' => 'maintain_months[]', "value" => "12", 'min=12', 'required', 'class' => 'form-control form-control-sm']],
'maintain_period' => ['label' => "保養周期", "tag" => 'digits', 'attr' => ['name' => 'maintain_period[]', "value" => "1", 'min=1', 'required', 'class' => 'form-control form-control-sm']], 'maintain_period' => ['label' => "保養周期", "tag" => 'digits', 'attr' => ['name' => 'maintain_period[]', "value" => "1", 'min=1', 'required', 'class' => 'form-control form-control-sm']],
'is_m1_bundle' => ['label' => "贈送M1", "value" => "", "tag" => 'select', 'attr' => ['name' => 'is_m1_bundle[]', 'required', 'class' => 'form-control form-control-sm'], 'options' => $is_m1_bundle_opt], 'is_m1_bundle' => ['label' => "贈送M1", "value" => "", "tag" => 'select', 'attr' => ['name' => 'is_m1_bundle[]', 'required', 'class' => 'form-control form-control-sm'], 'option' => 'disable', 'options' => $is_m1_bundle_opt],
'stand_price' => ['label' => "標準價格(元/月)", "value" => "", "tag" => 'text', 'attr' => ['required', "readonly", 'colspan' => 2, 'name' => 'stand_price[]', 'class' => 'form-control form-control-sm']], 'stand_price' => ['label' => "標準價格(元/月)", "value" => "", "tag" => 'text', 'attr' => ['required', "readonly", 'colspan' => 2, 'name' => 'stand_price[]', 'class' => 'form-control form-control-sm']],
'contract_price' => ['label' => "契約報價(元/月)", "value" => "", "tag" => 'number', 'attr' => ['required', 'colspan' => 2, 'name' => 'contract_price[]', 'class' => 'form-control form-control-sm']], 'contract_price' => ['label' => "契約報價(元/月)", "value" => "", "tag" => 'number', 'attr' => ['required', 'colspan' => 2, "placeholder" => "契約報價", 'name' => 'contract_price[]', 'class' => 'form-control form-control-sm']],
'sold_price' => ['label' => "契約成交價(元/月)", "value" => "", "tag" => 'number', 'attr' => ['required', 'colspan' => 2, 'name' => 'sold_price[]', 'class' => 'form-control form-control-sm']], 'sold_price' => ['label' => "契約成交價(元/月)", "value" => "", "tag" => 'number', 'attr' => ['required', 'colspan' => 2, 'name' => 'sold_price[]', 'placeholder' => '契約成交價', 'class' => 'form-control form-control-sm']],
]; ];
$con_maintance_examine_clear = DB::result("SELECT " . implode(',', array_keys($con_maintance_examine_clear_columm)) . $con_maintance_examine_clear = DB::result("SELECT " . implode(',', array_keys($con_maintance_examine_clear_columm)) .
" FROM con_maintance_examine_clear where 1=1 and apply_key='$apply_key' and cmstatus='Y' "); " FROM con_maintance_examine_clear where 1=1 and apply_key='$apply_key' and cmstatus='Y' ");
$j = 0; $j = 0;
$col_count = 12; $col_count = 12;
$cmecRow = " <tr>"; $cmecRow = " <tr>";
@ -205,8 +208,6 @@ foreach ($con_maintance_examine_clear_columm as $key => $val) {
$cmecRow .= "</tr><tr>"; $cmecRow .= "</tr><tr>";
} }
} }
$cmecRow .= "</tr>"; $cmecRow .= "</tr>";
function base_url($url) function base_url($url)
{ {
@ -227,7 +228,26 @@ function get_sequnece_no($seq_name = '', $p_yyyymm = '')
return $seq_no; return $seq_no;
} }
$sql = "SELECT * FROM account WHERE accountid = '$user_id' ";
list($result) = DB::result($sql);
if ($result['department_id'] == '511') {
$managerid = 'M0137';
$managername = '劉永德';
} else if ($result['department_id'] == '512') {
$managerid = 'M0137';
$managername = '劉永德';
} else if ($result['department_id'] == '513') {
$managerid = 'M0086';
$managername = '李烘銘';
} else if ($result['department_id'] == '514') {
$managerid = 'M0033';
$managername = '吳育宗';
}
if ($result['department_id'] == 'M0137' || $result['department_id'] == 'M0086' || $result['department_id'] == 'M0033') {
$managerid = 'M0008';
$managername = '詹益彰';
}
?> ?>
<link rel="stylesheet" type="text/css" href="<?php echo base_url('css/jquery.cleditor.css'); ?>" /> <link rel="stylesheet" type="text/css" href="<?php echo base_url('css/jquery.cleditor.css'); ?>" />
@ -320,20 +340,21 @@ function get_sequnece_no($seq_name = '', $p_yyyymm = '')
$("#next_users").empty(); $("#next_users").empty();
var _selected_status = $(this).children('option:selected').val(); //獲取被選擇的狀態 var _selected_status = $(this).children('option:selected').val(); //獲取被選擇的狀態
var _option_tmp = ""; //獲取下拉列表 var _option_tmp = ""; //獲取下拉列表
for (a in assigner) { //遍曆assigner // for (a in assigner) { //遍曆assigner
if (assigner[a][0] == _selected_status) { // if (assigner[a][0] == _selected_status) {
_tmp = assigner[a][1].split(','); // _tmp = assigner[a][1].split(',');
for (var b in _tmp) { // for (var b in _tmp) {
if (_tmp[b] == '') { // if (_tmp[b] == '') {
continue; // continue;
} // }
_uname = _tmp[b].split('-')[1]; // _uname = _tmp[b].split('-')[1];
_uid = _tmp[b].split('-')[0]; // _uid = _tmp[b].split('-')[0];
/* console.log(_tmp[b]);*/ // /* console.log(_tmp[b]);*/
_option_tmp += '<option value=' + _uid + '>' + _tmp[b] + '</option>'; // _option_tmp += '<option value=' + _uid + '>' + _tmp[b] + '</option>';
} // }
} // }
} // }
_option_tmp = '<option value=' + '<?php echo $managerid ?>' + '>' + '<?php echo $managername ?>' + '</option>';
$("#next_users").append(_option_tmp); $("#next_users").append(_option_tmp);
}); });
$('#maintain_kind').change(function() { $('#maintain_kind').change(function() {
@ -403,6 +424,7 @@ function get_sequnece_no($seq_name = '', $p_yyyymm = '')
//console.info(param1); //console.info(param1);
}); });
$("input[name^='floors']" + $("input[name^='floors']" +
",input[name^='speed']" + ",input[name^='speed']" +
",input[name^='persons']" + ",input[name^='persons']" +
@ -447,8 +469,7 @@ function get_sequnece_no($seq_name = '', $p_yyyymm = '')
//console.log($(btn).parent().parent().prev('tr').find('input[id=register_code]').val()); //console.log($(btn).parent().parent().prev('tr').find('input[id=register_code]').val());
regDelStr += $(btn).parent().parent().find('input[id=register_code]').val() + ","; regDelStr += $(btn).parent().parent().find('input[id=register_code]').val() + ",";
$(btn).parent().parent().next('tr').remove(); $(btn).parent().parent().next('tr').remove();
} } else {
else {
//console.log($(btn).parent().parent().find('input[id=register_code]').val()); //console.log($(btn).parent().parent().find('input[id=register_code]').val());
$(btn).parent().parent().next('tr').remove(); $(btn).parent().parent().next('tr').remove();
$(btn).parent().parent().remove(); $(btn).parent().parent().remove();
@ -463,7 +484,7 @@ function get_sequnece_no($seq_name = '', $p_yyyymm = '')
dataType: 'json', dataType: 'json',
//success: function(data) {}, //success: function(data) {},
success: function(data) { success: function(data) {
console.info(data); // console.info(data);
if (data.status == 'ok') { if (data.status == 'ok') {
$(obj).val(data.price); $(obj).val(data.price);
} else { } else {
@ -487,11 +508,11 @@ function get_sequnece_no($seq_name = '', $p_yyyymm = '')
type: 'post', type: 'post',
dataType: 'json', dataType: 'json',
success: function(data) { success: function(data) {
console.info(data); // console.info(data);
$("#brand").append("<option value='" + data.seq + "'>" + new_brand + "</option>"); $("#brand").append("<option value='" + data.seq + "'>" + new_brand + "</option>");
}, },
error: function(data) { error: function(data) {
console.info(data); // console.info(data);
} }
}); });
@ -600,31 +621,31 @@ function get_sequnece_no($seq_name = '', $p_yyyymm = '')
<tr> <tr>
<td colspan='18' ;><button onClick='addRow()' type="button" style='float:right' class="btn btn-link btn-md">+新增</button></td> <td colspan='18' ;><button onClick='addRow()' type="button" style='float:right' class="btn btn-link btn-md">+新增</button></td>
</tr> </tr>
<tr style='margin-top:0px;text-align:center'> <!-- <tr style='margin-top:0px;text-align:center'> -->
<?php <?php
$j = 0; $j = 0;
foreach ($con_maintance_examine_clear_columm as $val) { echo "<tr style='margin-top:0px;text-align:center'>";
$i = 0;
$cmecRow = '<tr>';
foreach ($con_maintance_examine_clear_columm as $col => $col_def) {
echo FormHelper::tag("th", ['colspan' => empty($col_def['attr']['colspan']) ? 1 : $col_def['attr']['colspan']], $col_def['label']);
echo FormHelper::tag("th", ['colspan' => empty($val['attr']['colspan']) ? 1 : $val['attr']['colspan']], $val['label']);
//echo "<th>" . $val['label'] . "</th>";
if ((++$j % $col_count) == 0) { if ((++$j % $col_count) == 0) {
if ($j == $col_count) echo "<th>操作</th>"; if ($j == $col_count) echo "<th>操作</th>";
echo "</tr><tr style='margin-top:0px;text-align:center'>"; echo "</tr><tr style='margin-top:0px;text-align:center'>";
} }
} }
echo '</tr>';
?> ?>
</tr>
</thead> </thead>
<tbody id='cmecTbody'> <tbody id='cmecTbody'>
<tr>
<?php <?php
foreach ($con_maintance_examine_clear as $key => $val) { foreach ($con_maintance_examine_clear as $key => $val) {
$j = 0; $j = 0;
$cmecRow = "<tr>"; $cmecRow = "<tr>";
@ -647,6 +668,7 @@ function get_sequnece_no($seq_name = '', $p_yyyymm = '')
echo $cmecRow . "</tr>"; echo $cmecRow . "</tr>";
} }
?> ?>
</tr>
</tbody> </tbody>
</table> </table>

912
wms/cont/apply_form1.php

@ -0,0 +1,912 @@
<?php
require_once '../header_nomenu.php';
require_once './FormHelper.php';
require_once './wf_common.php';
$vol_no = empty($_GET['vol_no']) ? "" : $_GET['vol_no'];
/***
* 检查是否重复生成价审单
* con_maintance_examine_apply
*/
/*
list($cnt)=DB::fields("select count(*) cnt from con_maintance_examine_apply where vol_no='$vol_no'");
if($cnt>0) {
echo"<script>alert('卷號".$vol_no."已生成價審單,請勿重複生成!');history.go(-1);</script>";
exit;
}
*/
#係統ID
$system_id = 'con';
#流程ID
$flow_id = 'con01';
#表單號 $form_id;
$form_id = "";
#價審單狀態
$apply_st = "";
list($apply_key, $form_key, $salesman) = DB::fields("SELECT apply_key, form_key,salesman FROM con_maintance_examine_apply WHERE vol_no='$vol_no' ORDER BY apply_key desc limit 0, 1");
// echo '<pre>';
// print_r($apply_key);
// echo '</pre>';
// exit;
// if ($salesman != $user_id) {
// echo '<script>alert("您並不是該單營業員,無法訪問。");history.go(-1);</script>';
// exit;
// }
if (empty($apply_key)) $apply_st = 1; // 準備新增
else {
//list($flow_code)=DB::fields("select flow_code from flow where form_key = '$form_key' and system_id = '$system_id' and flow_id = '$flow_id'");
list($current_assigner) = DB::fields("SELECT current_assigner FROM subflow WHERE form_key = '$form_key' ORDER BY seq desc limit 0, 1");
if ($current_assigner == $user_id) $apply_st = 2; // 修改中,還未提交
else $apply_st = 9; // 已到下一關,無法䖺改
}
// if ($apply_st > 2) {
// echo "<script>alert('卷號" . $vol_no . "已生成價審單,請勿重複生成!');history.go(-1);</script>";
// exit;
// }
if ($apply_st == 1) {
$wf = new WorkFlow($system_id, $flow_id, $form_id);
$wf->initWorkFlow($user_id);
$form_key = $wf->flowContext->getFormKey();
} else {
$wf = new WorkFlow($system_id, $flow_id, $form_id, $form_key);
}
#獲取簽核意見
$assign_opinions = Assign::get_records($form_key);
#會簽部門意見
$subflow_assign_opinions = SubflowManager::getCounterSignComments($form_key);
//預設冇有摺扣
$wf->setFormData(['discount' => 100]);
$flowName = $wf->getFlowName();
$assigner = $wf->getAssignerList();
$assign_status = $wf->getAssignStatus($assigner);
$if_show_assign = true;
//加載流程圖
//$fc = WorkFLowItems::get_records($flow->getSystemID(), $flow->getFlowID());
//$path = $fc[0]->wf_file;
//echo dirname(__DIR__)."/../"."$path";
//$flow_chart = file_get_contents(dirname(__DIR__) . '/' . $path);
#是否可會簽
$isSplitable = $wf->isSplitable();
//表單數據
#客戶表
#1.電梯品牌選項
$sql = "select code_name value ,content label from code where field_name='elevator_brand' order by code_name asc ";
$elevator_brand_opt = DB::result($sql);
#2.保養方式
$sql = "select code_name value ,content label from code where field_name='maintain_kind'";
$maintain_kind_opt = DB::result($sql);
#3.電梯類型
$sql = "select code_name value ,content label from code where field_name='maintain_elevator_kind'";
$elevator_kind_opt = DB::result($sql);
#4.付款方式
$sql = "select code_name value ,content label from code where field_name='payment_kind' order by code_name+ 0 asc";
$payment_kind_opt = DB::result($sql);
#5.契約性質
$sql = "select code_name value ,content label from code where field_name='contract_kind'";
$contract_kind_opt = DB::result($sql);
#6.是否贈送M1
$is_m1_bundle_opt = [
['label' => '是', 'value' => 'Y'],
['label' => '否', 'value' => 'N']
];
#7.機種
$sql = "select code_name value ,content label from code where field_name='fp_kind'";
$fp_kind_opt = DB::result($sql);
#抓取有望客戶資料
$vol_no = $_GET['vol_no'];
$where = " and vol_no='$vol_no'";
$sql = "SELECT * FROM hope_contract_customer where 1=1 $where ORDER BY vol_no";
$hope_contract = DB::result($sql);
$hope_contract = empty($hope_contract) ? [] : $hope_contract[0];
#寫入 con_maintance_examine_apply
if ($apply_st == 1) {
#獲取評審單號
$apply_key = get_sequnece_no('cmea_apply_key', date('ym'));
//var_dump($hope_contract);
$insert_data = [
'apply_key' => $apply_key,
'vol_no' => $vol_no,
'form_key' => $form_key,
'address' => $hope_contract['address'],
'case_name' => $hope_contract['customer'],
'num' => $hope_contract['num'],
'brand' => '',
'customer' => $hope_contract['customer'],
'salesman' => empty($hope_contract['salesman']) ? $user_id : $hope_contract['salesman'],
'progress_remark' => $hope_contract['progress_status']
//'platform_company'=>'',
// 'platforom_company_tel'=> ''
];
//var_dump($insert_data);
DB::insert_table('con_maintance_examine_apply', $insert_data);
}
#抓使用者主管
$sql = "SELECT * FROM account WHERE accountid = '$user_id' ";
list($result) = DB::result($sql);
if ($result['department_id'] == '511') {
$managerid = 'M0137';
$managername = '劉永德';
} else if ($result['department_id'] == '512') {
$managerid = 'M0137';
$managername = '劉永德';
} else if ($result['department_id'] == '513') {
$managerid = 'M0086';
$managername = '李烘銘';
} else if ($result['department_id'] == '514') {
$managerid = 'M0033';
$managername = '吳育宗';
}
if ($result['department_id'] == 'M0137' || $result['department_id'] == 'M0086' || $result['department_id'] == 'M0033') {
$managerid = 'M0008';
$managername = '詹益彰';
}
if ($result['department_id'] == 'M0008') {
$managerid = 'M0008';
$managername = '詹益彰';
}
$table = 'con_maintance_examine_apply';
#可編輯的列
$editableColumn = [
'apply_key' => [
'label' => "評審單號", "value" => "$apply_key", "tag" => 'text',
'attr' => [
'readonly=true ',
'class' => 'form-control form-control-sm'
]
],
'vol_no' => ['label' => "卷號", "value" => "", "tag" => 'text', 'attr' => ['readonly=true ', 'class' => 'form-control form-control-sm']],
'address' => ['label' => "現場地址", "value" => "", "tag" => 'text', 'attr' => ['required', 'class' => 'form-control form-control-sm']],
'case_name' => ['label' => "現場名稱", "value" => "", "tag" => 'text', 'attr' => ['required', 'class' => 'form-control form-control-sm']],
'brand' => ['label' => "電梯品牌", "value" => "", "tag" => 'select', 'attr' => ['required', 'class' => 'form-control form-control-sm'], 'options' => $elevator_brand_opt],
'num' => ['label' => "數量", "value" => "", "tag" => 'digits', 'attr' => ['required', 'min=1', 'class' => 'form-control form-control-sm']],
'salesman' => ['label' => "營業員", "value" => "", "tag" => 'text', 'attr' => ['required', 'class' => 'form-control form-control-sm']],
'maintain_kind' => ['label' => "保養方式", "value" => "", "tag" => 'select', 'attr' => ['required', 'class' => 'form-control form-control-sm'], 'options' => $maintain_kind_opt],
'contract_begin_date' => ['label' => "契約期限開始", "value" => "", "tag" => 'date', 'attr' => ['required', 'class' => 'date form-control form-control-sm']],
'contract_end_date' => ['label' => "契約期限結束", "value" => "", "tag" => 'date', 'attr' => ['required', 'class' => 'date form-control form-control-sm']],
'contract_kind' => ['label' => "契約性質", "value" => "", "tag" => 'select', 'attr' => ['class' => 'form-control form-control-sm'], 'options' => $contract_kind_opt],
'introducer' => ['label' => "介紹人", "value" => "", "tag" => 'text', 'attr' => ['class' => 'form-control form-control-sm']],
'payment_kind' => ['label' => "付款方式", "value" => "", "tag" => 'select', 'attr' => ['required', 'class' => 'form-control form-control-sm'], 'options' => $payment_kind_opt],
];
$where = " and apply_key='$apply_key'";
$sql = "SELECT * FROM $table where 1=1 $where ORDER BY vol_no";
$data = [];
$data = DB::result($sql);
#電梯詳細資料
$con_maintance_examine_clear_columm = [
'register_code' => ['label' => "電梯許可證代碼", "value" => "", "tag" => 'text', 'attr' => ['colspan' => 2, 'name' => 'register_code[]', 'required', 'class' => 'form-control form-control-sm']],
'elevator_brand' => ['label' => "品牌", "value" => "", "tag" => 'select', 'attr' => ['colspan' => 2, 'name' => 'elevator_brand[]', 'class' => 'form-control form-control-sm'], 'options' => $elevator_brand_opt],
'elevator_kind' => ['label' => "電梯類型", "value" => "", "tag" => 'select', 'attr' => ['name' => 'elevator_kind[]', 'required', 'colspan' => 2, 'class' => 'form-control form-control-sm'], 'options' => $elevator_kind_opt],
'spec' => ['label' => "規格型號", "value" => "", "tag" => 'select', 'attr' => ['colspan' => 2, 'name' => 'spec[]', 'class' => 'form-control form-control-sm'], 'options' => $fp_kind_opt],
'weight' => ['label' => "載重(KG)", "value" => "", "tag" => 'digits', 'attr' => ['name' => 'weight[]', "placeholder" => "載重", 'gt=0', 'min=0', 'required', 'class' => 'form-control form-control-sm']],
'speed' => ['label' => "速度(m/min)", "value" => "", "tag" => 'number', 'attr' => ['colspan' => 2, 'name' => 'speed[]', "placeholder" => "速度", 'gt=0', 'min=0', 'required', 'class' => 'form-control form-control-sm']],
'stop' => ['label' => "停數", "value" => "", "tag" => 'number', 'attr' => ['name' => 'stop[]', "placeholder" => "停數", 'class' => 'form-control form-control-sm']],
'floors' => ['label' => "層數", "value" => "", "tag" => 'digits', 'attr' => ['name' => 'floors[]', 'min=1', 'required', "placeholder" => "層數", 'class' => 'form-control form-control-sm']],
'persons' => ['label' => "人乘", "value" => "", "tag" => 'digits', 'attr' => ['name' => 'persons[]', 'min=1', 'required', "placeholder" => "人乘", 'class' => 'form-control form-control-sm']],
'maintain_times' => ['label' => "保養次數", "value" => "", "tag" => 'digits', 'attr' => ['name' => 'maintain_times[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']],
'maintain_months' => ['label' => "保養月數", "value" => "", "tag" => 'digits', 'attr' => ['name' => 'maintain_months[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']],
'maintain_period' => ['label' => "保養周期", "value" => "", "tag" => 'number', 'attr' => ['name' => 'maintain_period[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']],
'is_m1_bundle' => ['label' => "贈送M1", "value" => "", "tag" => 'select', 'attr' => ['name' => 'is_m1_bundle[]', 'required', 'class' => 'form-control form-control-sm'], 'options' => $is_m1_bundle_opt],
'useful_years' => ['label' => "竣工檢查年度", "value" => "", "tag" => 'digits', 'attr' => ['colspan' => 2, 'required', "placeholder" => "竣工檢查年度", 'gt=0', 'min=0', 'name' => 'useful_years[]', 'class' => 'form-control form-control-sm']],
'last_check_date' => ['label' => "上次年檢日期", "value" => "", "tag" => 'number', 'attr' => ['required', 'name' => 'last_check_date[]', "placeholder" => "上次年檢日期", 'colspan' => 2, 'class' => 'form-control form-control-sm']],
'annual_survey_expense' => ['label' => "年檢費用(元)", "value" => "", "tag" => 'number', 'attr' => ['required', 'name' => 'annual_survey_expense[]', "placeholder" => "年檢費用", 'colspan' => 2, 'class' => 'form-control form-control-sm ']],
'maintain_times' => ['label' => "保養次數", "tag" => 'digits', 'attr' => ['name' => 'maintain_times[]', "value" => "1", 'min=1', 'required', 'class' => 'form-control form-control-sm']],
'register_code' => ['label' => "電梯許可證代碼", "tag" => 'text', 'attr' => ['colspan' => 2, 'name' => 'register_code[]', "placeholder" => "無證號請輸入A,B...", 'required', 'class' => 'form-control form-control-sm']],
'maintain_months' => ['label' => "保養月數", "tag" => 'digits', 'attr' => ['name' => 'maintain_months[]', "value" => "12", 'min=12', 'required', 'class' => 'form-control form-control-sm']],
'maintain_period' => ['label' => "保養周期", "tag" => 'digits', 'attr' => ['name' => 'maintain_period[]', "value" => "1", 'min=1', 'required', 'class' => 'form-control form-control-sm']],
'is_m1_bundle' => ['label' => "贈送M1", "value" => "", "tag" => 'select', 'attr' => ['name' => 'is_m1_bundle[]', 'required', 'class' => 'form-control form-control-sm'], 'option' => 'disable', 'options' => $is_m1_bundle_opt],
'stand_price' => ['label' => "標準價格(元/月)", "value" => "", "tag" => 'text', 'attr' => ['required', "readonly", 'colspan' => 2, 'name' => 'stand_price[]', 'class' => 'form-control form-control-sm']],
'contract_price' => ['label' => "契約報價(元/月)", "value" => "", "tag" => 'number', 'attr' => ['required', 'colspan' => 2, "placeholder" => "契約報價", 'name' => 'contract_price[]', 'class' => 'form-control form-control-sm']],
'sold_price' => ['label' => "契約成交價(元/月)", "value" => "", "tag" => 'number', 'attr' => ['required', 'colspan' => 2, 'name' => 'sold_price[]', 'class' => 'form-control form-control-sm']],
];
$con_maintance_examine_clear = DB::result("SELECT " . implode(',', array_keys($con_maintance_examine_clear_columm)) .
" FROM con_maintance_examine_clear where 1=1 and apply_key='$apply_key' and cmstatus='Y' ");
$j = 0;
$col_count = 12;
$cmecRow = " <tr>";
foreach ($con_maintance_examine_clear_columm as $key => $val) {
$fieldVal = "";
$_input = $val['tag'] == 'select' ?
FormHelper::select('', $val['options'], $fieldVal, $val['attr'])
: FormHelper::text("$key", $fieldVal, $val['attr'], $val['tag']);
// : "<input type='" . $val['tag'] . "' class=' form-control form-control-sm' " . $val['attr'] . " value='" . $fieldVal . "' name='${key}[]' id='$key' placeholder='請輸入'>";
$cmecRow .= "<td colspan='" . (empty($val['attr']['colspan']) ? '' : $val['attr']['colspan']) . "' ><div class=' col-12' > $_input</td>";
if ((++$j % $col_count) == 0) {
if ($j == $col_count) $cmecRow .= "<td><button onClick='delRow(this)' type='button' class='btn btn-link btn-md'>刪除</button></td>";
$cmecRow .= "</tr><tr>";
}
}
$cmecRow .= "</tr>";
function base_url($url)
{
return "https://www.masada.com.tw/static/" . $url;
}
function get_sequnece_no($seq_name = '', $p_yyyymm = '')
{
if (empty($p_yyyymm) || empty($seq_name)) return null;
#當前年月
list($yyyymm, $prefix) = DB::fields("select yyyymm ,prefix from sequence where seq_name='$seq_name' ");
if ($p_yyyymm != $yyyymm) {
DB::query("update sequence set yyyymm='$p_yyyymm' , current_val='10000' where seq_name='$seq_name' ");
}
// echo "SELECT concat( $prefix,,substring(nextval('$seq_name'),2)) seq_no ";
list($seq_no) = DB::fields("SELECT concat( '$prefix','$p_yyyymm',substring( appwms.nextval('$seq_name'),2)) seq_no ");
return $seq_no;
}
?>
<link rel="stylesheet" type="text/css" href="<?php echo base_url('css/jquery.cleditor.css'); ?>" />
<link rel="stylesheet" type="text/css" href="<?php echo base_url('bootstrap4/css/bootstrap.min.css'); ?>" />
<link rel="stylesheet" type="text/css" href="<?php echo base_url('css/layui.css'); ?>" />
<script type="text/javascript" src="<?php echo base_url('js/jquery3.7.js'); ?>"></script>
<script type="text/javascript" src="<?php echo base_url('js/selectpage.min.js'); ?>"></script>
<script type="text/javascript" src="<?php echo base_url('js/jquery.cleditor.min.js'); ?>"></script>
<script type="text/javascript" src="<?php echo base_url('bootstrap4/js/bootstrap.min.js'); ?>"></script>
<script type="text/javascript" src="<?php echo base_url('js/layui.js?' . rand(10, 100)); ?>"></script>
<script type="text/javascript" src="<?php echo base_url('js/wf_property.js?') . rand(10, 100); ?>"></script>
<script type="text/javascript" src="<?php echo base_url('js/flow_chart.js?' . rand(10, 100)); ?>"></script>
<script src="<?php echo base_url('js/validate/jquery.validate.min.js?' . rand(10, 100)); ?>"></script>
<script src="<?php echo base_url('js/validate/messages_zh_TW.js?' . rand(10, 100)); ?>">
</script>
<link rel="stylesheet" type="text/css" href="<?php echo base_url('css/form.css?') . rand(10, 100); ?>" />
<script type="text/javascript">
window.param = {
elevator_type: '',
floors: 1,
speed: 1,
persons: 6,
weight: 1000,
maintain_times: 1, //病床梯一月2次保養
maintain_months: 12,
maintain_kind: 2,
maintain_period: 1, //預設為1月1次, 2是為2月一次
is_m1_bundle: 'N',
};
let regDelStr = "";
$(document).ready(function() {
var tag_data;
$.ajax({
url: 'https://www.masada.com.tw/fds/index.php/DesignFlow/get_assigner',
//url: 'http://localhost/fds/index.php/DesignFlow/get_assigner',
type: 'post',
dataType: 'json',
success: function(data) {
window.tag_data = data;
$('#selectPage').selectPage({
showField: 'show_name',
keyField: 'val',
data: data,
multiple: true,
multipleControlbar: true,
pagination: false,
focusDropList: false
});
}
});
$.validator.addMethod('gt', function(value, element, param) {
return value > param;
}, $.validator.format("輸入值必須大於0"));
var assigner = eval('<?= json_encode($assigner) ?>');
//console.log(assigner);
var cmecRow = "<?= str_replace('"', '\'', $cmecRow) ?>";
// $('#cmecTbody').append(cmecRow);
$('.sp_element_box').attr("disabled", true);
$("#assign_opinion").cleditor({
height: 100, // height not including margins, borders or padding
controls: // controls to add to the toolbar
"bold italic underline strikethrough subscript superscript | font size " +
"style | color highlight removeformat | bullets numbering | outdent " +
"indent | alignleft center alignright justify | undo redo | "
});
$('#contract_begin_date').on('input propertychange', function(e) {
var date = new Date(e.target.value);
var yyyy = date.getFullYear() + 1;
var mm = date.getMonth() + 1;
var dd = date.getDate();
var time = yyyy + `-` + (mm < 10 ? '0' + mm : mm) + '-' + (dd < 10 ? '0' + dd : dd);
$('#contract_end_date').val(time);
});
$('#brand').change(function() {
var _selected_status = $(this).children('option:selected').val(); //獲取被選擇的狀態
if (_selected_status == 'Z') {
$('#brandModal').modal('show')
}
});
$('#assign_status').change(function() {
$("#next_users").empty();
var _selected_status = $(this).children('option:selected').val(); //獲取被選擇的狀態
var _option_tmp = ""; //獲取下拉列表
// for (a in assigner) { //遍曆assigner
// if (assigner[a][0] == _selected_status) {
// _tmp = assigner[a][1].split(',');
// for (var b in _tmp) {
// if (_tmp[b] == '') {
// continue;
// }
// _uname = _tmp[b].split('-')[1];
// _uid = _tmp[b].split('-')[0];
// /* console.log(_tmp[b]);*/
// _option_tmp += '<option value=' + _uid + '>' + _tmp[b] + '</option>';
// }
// }
// }
_option_tmp += '<option value=' + '<?php echo $managerid ?>' + '>' + '<?php echo $managername ?>' + '</option>';
console.log(_option_tmp);
$("#next_users").append(_option_tmp);
});
$('#maintain_kind').change(function() {
if ($('#cmecTbody tr').length > 0) {
alert("保養方式已更動,請開始輸入電梯資料!");
$('#cmecTbody').find(':input').val('');
return false;
}
});
$("#form").validate();
$("form").submit(function(e) {
$('#reg_del').val(regDelStr);
});
});
addRow = function() {
if ($('#maintain_kind').val() == "") {
alert("請選擇保養方式!");
$('#maintain_kind').eq(0).focus();
return false;
}
const cmecRow = $('#elevator_list').html();
console.log(cmecRow);
$('#elevator_list').append(cmecRow);
$("select[name^='elevator_kind'],select[name^='is_m1_bundle']").on('change', function(obj) {
//console.log('#'+$(this).attr('name')+'#');
var elen = 1;
if ('elevator_kind[]' == $(this).attr('name')) {
var children = $(this).parent().parent().parent();
var elementObj = $(children).next('tr').find("input[name^='stand_price']");
//var is_m1_bundle = $(children).next('tr').find("select[name^='is_m1_bundle'] option:selected").val();
} else if ('is_m1_bundle[]' == $(this).attr('name')) {
var children = $(this).parent().parent().parent().prev('tr');
var elementObj = $(this).parent().parent().parent().find("input[name^='stand_price']");
//var is_m1_bundle = $(this).val();
}
var element = elementObj;
if ('elevator_kind[]' == $(this).attr('name')) {
var is_m1_bundle = $(children).next('tr').find("select[name^='is_m1_bundle'] option: selected").val("");
} else if ('is_m1_bundle[]' == $(this).attr('name')) {
var is_m1_bundle = $(children).next('tr').find("select[name^='is_m1_bundle']").val();
}
var floors = $(children).find("input[name^='floors']").val();
var speed = $(children).find("input[name^='speed']").val();
var weight = $(children).find("input[name^='weight']").val();
var persons = $(children).find("input[name^='persons']").val();
var maintain_times = $(children).find("input[name^='maintain_times']").val();
var maintain_months = $(children).find("input[name^='maintain_months']").val();
var maintain_period = $(children).find("input[name^='maintain_period']").val();
var maintain_kind = $('#maintain_kind').val();
var elevator_type = $(children).find("select[name^='elevator_kind'] option:selected").val();
var param1 = {
...param,
persons,
floors,
speed,
weight,
maintain_times,
maintain_months,
maintain_period,
maintain_kind,
elevator_type,
is_m1_bundle
}
setStandPrice(param1, element);
//console.info(param1);
});
$("input[name^='floors']" +
",input[name^='speed']" +
",input[name^='persons']" +
",input[name^='weight']" +
",input[name^='maintain_times']" +
",input[name^='maintain_months']" +
",input[name^='maintain_period']"
).on('input propertychange', function(obj) {
// $(obj).parent().parent().parent().remove();
var children = $(this).parent().parent().parent().children();
var floors = $(children).find("input[name^='floors']").val();
var speed = $(children).find("input[name^='speed']").val();
var weight = $(children).find("input[name^='weight']").val();
var persons = $(children).find("input[name^='persons']").val();
var maintain_times = $(children).find("input[name^='maintain_times']").val();
var maintain_months = $(children).find("input[name^='maintain_months']").val();
var maintain_period = $(children).find("input[name^='maintain_period']").val();
var maintain_kind = $('#maintain_kind').val();
var elevator_type = $(children).find("select[name^='elevator_kind'] option:selected").val();
var is_m1_bundle = $(this).parent().parent().parent().next('tr').find("select[name^='is_m1_bundle'] option:selected").val();
var param1 = {
...param,
persons,
floors,
speed,
weight,
maintain_times,
maintain_months,
maintain_period,
maintain_kind,
elevator_type,
is_m1_bundle
}
var element = $(this).parent().parent().parent().next().children().find("input[name^='stand_price']");
setStandPrice(param1, element);
});
}
delRow = function(btn) {
if ($(btn).attr('name') == 'btn1') {
// console.log($(btn).parent().parent().prev('tr').find('input[id=register_code]').val());
regDelStr += $(btn).parent().parent().parent().find('input[id=register_code]').val() + ",";
$(btn).parent().parent().next('tr').remove();
console.log(regDelStr)
} else {
// console.log($(btn).parent().parent().find('input[id=register_code]').val());
$(btn).parent().parent().next('tr').remove();
$(btn).parent().parent().remove();
}
$(btn).parent().parent().parent().parent().remove();
}
setStandPrice = function(p, obj) {
$.ajax({
url: '../cont/t.php',
data: p,
type: 'get',
dataType: 'json',
//success: function(data) {},
success: function(data) {
console.info(data);
if (data.status == 'ok') {
$(obj).val(data.price);
} else {
$(obj).val(data.message);
}
}
});
}
addNewBrand = function() {
var new_brand = $("#new_brand").val();
if (new_brand != '') {
p = {
new_brand: new_brand,
method: 'add_brand'
}
$.ajax({
url: 'async_req.php',
data: p,
type: 'post',
dataType: 'json',
success: function(data) {
console.info(data);
$("#brand").append("<option value='" + data.seq + "'>" + new_brand + "</option>");
},
error: function(data) {
console.info(data);
}
});
}
}
</script>
<body>
<div id="toolbarmenu">
<!--<span id="objName" style="font-size:16px;margin-bottom:0px;margin-top:1px">流程:<?php echo $flowName; ?></span>-->
<!-- 導航欄 -->
<ul class="nav nav-tabs" role="tablist" id="tablist">
<li class=" nav-item ">
<a href="#tabassign" aria-controls="tabassign" role="tab" class=" active nav-link" data-toggle="tab">簽核表單</a>
</li>
</ul>
</div>
<!-- 導航欄 END-->
<div class="tab-content ">
<div class="tab-pane active assign_content " id="tabassign">
<form action="submit.php" id='form' method="post" style='width:98%;margin:0 auto'>
<!-- hidden域 -->
<input type="hidden" name="form_key" value='<?php echo $form_key; ?>' />
<input type="hidden" name="token" value='<?= $_GET['token'] ?>' />
<input type="hidden" name="reg_del" id="reg_del">
<input type="hidden" name="form_src" id="form_src" value="apply_form">
<!--表單start-->
<div class=" form container-fluid pt-5">
<div class="row form_head ">
<div class=" col-12 form_head_title ">
<h4> 保養契約價格審核單</h4>
</div>
</div>
<div class="row " style='padding-top:30px;'>
<div class=" col-lg-12 form_row_header ">
<b>契約信息</b>
</div>
</div>
<?php
//一行顯示三列
$i = 0;
echo " <div class='row '>";
foreach ($editableColumn as $key => $val) {
$j = (($i++) % 4);
$fieldVal = empty($data) ? "" : $data[0][$key];
$_input = $val['tag'] == 'select' ?
FormHelper::select("$key", $val['options'], $fieldVal, $val['attr'])
: FormHelper::text("$key", $fieldVal, $val['attr'], $val['tag']);
//"<input type='" . $val['tag'] . "' class=' form-control form-control-sm " . $val['class'] . "'
// value='" . $fieldVal . "' name='$key' id='$key' placeholder='請輸入'>";
if ($i != 1 && $j == 0) {
echo "
</div>
<div class='row'>
";
}
echo " <div class='col-1 form_field_title'>
" . $val['label'] . "
</div>
<div class=' col-2 form_field_content ' >
$_input
</div>
";
}
echo "</div>";
?>
<div id="assign_area " class="row ">
<div class="col-12 form_row_header ">
<b>洽商進度</b>
</div>
<div class="col-12 " style="padding:0">
<textarea class='form-control textarea' id="progress_remark" name="progress_remark" value='12' rows='6'><?= $hope_contract['progress_status'] ?></textarea>
</div>
</div>
<div id="elevator_list_area " class="row ">
<div class="col-12 form_row_header ">
<b>電梯詳細資料</b>
</div>
<table style='margin-top:0px;text-align:center' class=' table-condensed' id='elevator_list1'>
<thead>
<tr>
<td colspan='18' style='text-align:left;font-size:13px'>
<b>註意事項:</b>
<p>1.速度單位是 米/分.</p>
<p>2.選擇贈送M1,保養月數需填寫60.</p>
<p>3.標準價格未帶出,請聯係業務部建立該規格報價.</p>
<p>4.無機房速度20~60米 以60米為標準.</p>
</td>
</tr>
<tr>
<td colspan='18' ;><button onClick='addRow()' type="button" style='float:right' class="btn btn-link btn-md">+新增</button></td>
</tr>
</thead>
</table>
<table class=' table-condensed' id='elevator_list'>
<thead>
<tr style=' margin-top:0px;text-align:center'>
<th colspan="2">電梯許可代碼</th>
<th colspan="2">品牌</th>
<th colspan="2">電梯類型</th>
<th colspan="2">規格型號</th>
<th>載重(KG)</th>
<th colspan="2">速度(m/min)</th>
<th>停數</th>
<th>層數</th>
<th>人乘</th>
<th colspan="2">保養次數</th>
<th>保養月數</th>
<th>保養周期</th>
<th>贈送M1</th>
</tr>
</thead>
<tbody id='cmecTbody'>
<tr>
<td colspan="2">
<div class=' col-12'><input id="register_code" name="register_code[]" type="text" value placeholder="無證號請輸入A、B..." repuired class="form-control form=control-sm"></div>
</td>
<td colspan="2">
<div class=' col-12'>
<select name="elevator_brand[]" id="" class="form-control form-control-sm">
<option value=""></option>
<?php foreach ($elevator_brand_opt as $data) : ?>
<option value="<?php echo $data['value']; ?>"><?php echo $data['label'] ?></option>
<?php endforeach ?>
</select>
</div>
</td>
<td colspan="2">
<div class=' col-12'>
<select name="elevator_kind[]" id="" class="form-control form-control-sm">
<option value=""></option>
<?php foreach ($elevator_kind_opt as $data) : ?>
<option value="<?php echo $data['value'] ?>"><?php echo $data['label'] ?></option>
<?php endforeach ?>
</select>
</div>
</td>
<td colspan="2">
<div class=' col-12'>
<select name="spec[]" id="" class="form-control form-control-sm">
<option value=""></option>
<?php foreach ($fp_kind_opt as $data) : ?>
<option value="<?php echo $data['value'] ?>"><?php echo $data['label'] ?></option>
<?php endforeach ?>
</select>
</div>
</td>
<!-- <td><section name='spec'></section></td> -->
<td>
<div class=' col-12'><input type="digits" id="weight" name="weight[]" value gt="0" min="0" required class="form-control form-control-sm"></div>
</td>
<td colspan="2">
<div class=' col-12'><input type="number" id="speed" name="speed[]" valaue gt="0" min="0" require class="form-control form-control-sm"></div>
</td>
<td>
<div class=' col-12'><input type="number" id="stop" name="stop[]" class="form-control form-control-sm"></div>
</td>
<td>
<div class=' col-12'><input type="digits" id="floors" name="floors[]" value min="1" required class="form-control form-control-sm"></div>
</td>
<td>
<div class=' col-12'><input type="digits" id="persons" name="persons[]" value min='1' required class="form-control form-contorl-sm"></div>
</td>
<td colspan="2">
<div class=' col-12'><input type="digits" id="maintain_times" name="maintain_times[]" value='1' min='1' required class="form-control form-control-sm"></div>
</td>
<td>
<div class=' col-12'><input type="digits" id="maintain_months" name="maintain_months[]" value="12" min='12' required class="form-control form-control-sm"></div>
</td>
<td>
<div class=' col-12'><input type="digits" id="maintain_period" name="maintain_period[]" value="1" min='1' require class="form-control form-control-sm"></div>
</td>
<td>
<div class='col-12'>
<select name="is_m1_bundle[]" id required class="form-control form-control-sm" id="">
<option value=""></option>
<?php foreach ($is_m1_bundle_opt as $data) : ?>
<option value="<?php $data['value'] ?>"><?php echo $data['label'] ?></option>
<?php endforeach ?>
</select>
</div>
</td>
</tr>
</tbody>
<thead>
<tr style='margin-top:0px;text-align:center'>
<th colspan="2">竣工檢查年度</th>
<th colspan="2">上次年檢日期</th>
<th colspan="2">年檢費用(元)</th>
<th colspan="2">標準價格(元/月)</th>
<th colspan="2">契約報價(元/月)</th>
<th colspan="2">契約成交價(元/月)</th>
<th>刪除</th>
<th colspan="6"></th>
</tr>
</thead>
<tbody id='cmecTbody2'>
<tr>
<td colspan="2">
<div class="col-12"><input type="text" id="useful_years" name="useful_years[]" type="digits" value colspan='2' required gt='0' min='0' class="form-control form-control-sm"></div>
</td>
<td colspan="2">
<div class="col-12"><input type="number" id="last_check_date" name="last_check_date[]" value required colspan="2" class="form-control form-control-sn"></div>
</td>
<td colspan="2">
<div class="col-12"><input type="text" id="annual_survey_expense" name="annual_survey_exoense[]" type="number" value required colspan='2' class="form-control form-control-sm"></div>
</td>
<td colspan="2">
<div class="col-12"><input type="text" id='stand_price' name="stand_price[]" value required readonly colspan='2' class="form-control form-control-sm"></div>
</td>
<td colspan="2">
<div class="col-12"><input type="number" id="contract_price" name="contract_price[]" required colsapn="2" class="form-control form-control-sm"></div>
</td>
<td colspan="2">
<div class="col-12"><input type="number" id="sold_price" name="sold_price[]" colspan='2' class="form-control form-control-sm"></div>
</td>
<td>
<div class=' col-12'><button onclick="delRow(this)" name='btn1' type="button" class="btn btn-link btn md">刪除</button></div>
</td>
<td colspan="6"></td>
</tr>
</tbody>
</table>
</div>
<div id="assign_area " class="row ">
<div class="col-12 form_row_header ">
<b>簽核操作</b>
</div>
<div class="col-12 col-3 form_field_content " style="padding:0">
<textarea id="assign_opinion" name="assign_opinion" required></textarea>
</div>
</div>
<div class="row">
<div class=" col-3 form_field_title">
<b style='float:right'>簽核狀態</b>
</div>
<div class=" col-2 form_field_content ">
<select name="assign_status" id="assign_status" required class='form-control form-control form-control-sm '>
<?php echo $assign_status; ?>
</select>
</div>
<div class=" col-2 form_field_title">
<b>下位簽核者</b>
</div>
<div class="col-2 form_field_content">
<select lect name="next_users" id="next_users" class='form-control form-control-sm '></select>
</div>
<div class="col-3 form_field_title ">
<button type="submit" name="btn_save" class="btn btn-warning btn-sm" value="save" style='float:left;margin-right:4px;'>保存</button>&nbsp;
<button type="submit" name="btn_save" class="btn btn-primary btn-sm" value="tosign" style='float:left'>提交</button>
</div>
</div>
<div id="opinion_area " class="row form_comment ">
<div class='col-12 '>
<ul class=" form-control-md nav nav-tabs" role="tablist" style='line-height:20px'>
<li class="active nav-item ">
<a href="#main_flow_assign" aria-controls="main_flow_assign" role="tab" class=" active nav-link" role="tab" data-toggle="tab">簽核意見</a>
</li>
</ul>
</div>
<div class="tab-content col-12">
<div role="tabpanel" class="tab-pane active" id="main_flow_assign">
<div class="comment_items ">
<?php $cnt = 1;
$tmp_code = "0";
foreach ($assign_opinions as $as) { ?>
<div class="comment-item">
<!-- <div class="comment-title">
<b></b>
</div>-->
<?php
if (($as['flow_code']) != $tmp_code)
echo ' <div class="comment-title">
<b>' . $wf->getNodeDescriptions($as['flow_code']) . '</b>
</div>';
$tmp_code = $as['flow_code'];
?>
<div class="comment-content <?php if ($cnt++ % 2 == 0) echo "comment-odd" ?>">
<div class="comment-content-header">
<span>
<strong>
<?php echo Employee::get_employee($as['assigner'], 'name-employee_no') ?>
&nbsp;
<?php if ($as['lead_code'] < 90) echo
" <label class='comment-content-tag'>" . $as['position_name'] . " </label>"; ?>
</strong>
</span>
<span>
<strong>
&nbsp;
<?php if ($as['assign_status'] == 'S') echo
" <label class='comment-content-tag'>申請人 </label>"; ?>
<?php if (substr($as['assign_status'], 0, 1) == 'B')
echo " <label class='comment-content-tag red-tag'>退回</label>"; ?>
<?php if (substr($as['assign_status'], 0, 2) == 'X3')
echo " <label class='comment-content-tag red-tag'>會簽</label>"; ?>
</strong>
</span>
<span class="comment-content-header-time">
簽核於:<?= $as['assign_date'] ?>
</span>
<!-- <ul class="comment-content-tags">
<li class="">不同意</li>
<li class="comment-content-tag-alert">退回</li>
</ul>-->
</div>
<div class="comment-content-body">
<?= $as['assign_opinion'] ?>
</div>
<!-- <div class="comment-content-footer">
<span>已上載附件:&nbsp;</span><a href="#">附件1</a>
</div>-->
</div>
</div>
<?php } ?>
</div>
</div>
</div>
</div>
</div>
</form>
<!-- 模態框(Modal) -->
<div class="modal fade" id="brandModal" tabindex="-1" role="dialog" aria-labelledby="brandModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
新增廠牌
</div>
<div class="modal-body">
<input type="text" class='form-control form-control form-control-sm ' id='new_brand'>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" onClick="addNewBrand()" data-dismiss="modal">保存</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal -->
</div>
</div>
</div>
</body>

3
wms/cont/sign_form.php

@ -1,5 +1,6 @@
<?php <?php
// phpinfo();
// exit;
#error_reporting(E_ALL); #error_reporting(E_ALL);
#ini_set("display_errors", "On"); #ini_set("display_errors", "On");

8
wms/cont/sign_list.php

@ -70,8 +70,11 @@ form_key,
f_return_content('payment_kind',payment_kind ) payment_kind FROM $table f_return_content('payment_kind',payment_kind ) payment_kind FROM $table
where 1=1 $where ORDER BY vol_no"; where 1=1 $where ORDER BY vol_no";
// echo $sql;
$data = mysqli_query($link, $sql); $data = mysqli_query($link, $sql);
// echo '<pre>';
// print_r($data);
// echo '</pre>';
?> ?>
<?php <?php
@ -91,8 +94,7 @@ if ($data) :
<div style="overflow-x:auto;"> <div style="overflow-x:auto;">
<form method='get' action='#'> <form method='get' action='#'>
<table class='table query-table table-striped table-bordered display compact' <table class='table query-table table-striped table-bordered display compact' style='width:98%;text-align:center;margin:0 auto'>
style='width:98%;text-align:center;margin:0 auto'>
<thead> <thead>
<tr> <tr>
<td colspan="8"> <td colspan="8">

7
wms/cont/submit.php

@ -3,8 +3,9 @@
require_once './wf_common.php'; require_once './wf_common.php';
require_once './model/ConMaintanceExamineApplyModel.php'; require_once './model/ConMaintanceExamineApplyModel.php';
require_once './model/ConMaintanceExamineClearModel.php'; require_once './model/ConMaintanceExamineClearModel.php';
//print_r($_POST);exit;
$request = $_SERVER['REQUEST_METHOD'] == "GET" ? $_GET : $_POST; $request = $_SERVER['REQUEST_METHOD'] == "GET" ? $_GET : $_POST;
// print_r($request);
// exit;
$tosign = ($request["btn_save"] == "tosign") ? 1 : 0; // 1:提交 $tosign = ($request["btn_save"] == "tosign") ? 1 : 0; // 1:提交
if ($request["form_src"] == "apply_form" && $tosign && (!isset($request["register_code"]) || empty($request["register_code"][0]) || !isset($request["next_users"]) || empty($request["next_users"]))) { if ($request["form_src"] == "apply_form" && $tosign && (!isset($request["register_code"]) || empty($request["register_code"][0]) || !isset($request["next_users"]) || empty($request["next_users"]))) {
@ -23,7 +24,7 @@ $cmea->update(['apply_key', $apply_key], array_diff_key($request, ['apply_key' =
if (!empty($request["reg_del"])) { if (!empty($request["reg_del"])) {
$register_code_del_arr = explode(",", rtrim($request["reg_del"], ",")); $register_code_del_arr = explode(",", rtrim($request["reg_del"], ","));
foreach ($register_code_del_arr as $val) { foreach ($register_code_del_arr as $val) {
$sql = "update con_maintance_examine_clear set cmstatus = 'D' where apply_key = '$apply_key' and register_code = '$val' and cmstatus <> 'D'"; $sql = "UPDATE con_maintance_examine_clear SET cmstatus = 'D' WHERE apply_key = '$apply_key' AND register_code = '$val' AND cmstatus <> 'D'";
DB::query($sql); DB::query($sql);
} }
} }
@ -70,7 +71,7 @@ echo "<script type = 'text/JavaScript'>";
//echo "<h4 style='text-align:center'>成功提交<a href='https://www.masada.com.tw/wms/sign/list.php?function_name=show&token=" . $request['token'] . "'>返回待签 </a></h4>"; //echo "<h4 style='text-align:center'>成功提交<a href='https://www.masada.com.tw/wms/sign/list.php?function_name=show&token=" . $request['token'] . "'>返回待签 </a></h4>";
if ($tosign) { if ($tosign) {
echo "alert('成功提交');"; echo "alert('成功提交');";
echo "location.href='../cont/sign_list.php?function_name=sign_list&token=".$request['token']."';"; echo "location.href='../wms/index.php.php?function_name=sign_list&token=" . $request['token'] . "';";
} else { } else {
echo "alert('資料已保存');"; echo "alert('資料已保存');";
echo "location.href='../crm/crmm02-index.php?function_name=contract_customer&token=" . $request['token'] . "';"; echo "location.href='../crm/crmm02-index.php?function_name=contract_customer&token=" . $request['token'] . "';";

34
wms/contract-repair/api/deleteNewContractData.php

@ -0,0 +1,34 @@
<?php
require_once("../conn.php");
ini_set('date.timezone', 'Asia/Taipei');
if (isset($_GET['contractid']) && $_GET['contractid'] != "" && isset($_GET['contracttype']) && $_GET['contracttype'] == 'r') {
try {
$id = $_GET['contractid'];
$user_id = $_GET['user_id'];
$date = date('Y-m-d H:i:s');
$del = '2';
$sql = "UPDATE contract_r_signed_back SET delete_status = :del,delete_userid= :user_id, delete_date = :date WHERE id = :id";
$stmt = $conn->prepare($sql);
$stmt->bindParam(":id", $id);
$stmt->bindParam(":del", $del);
$stmt->bindParam(":user_id", $user_id);
$stmt->bindParam(":date", $date);
$stmt->execute();
header("HTTP/1.1 204 NO Content");
} catch (PDOException $e) {
die("ERROR!!!" . $e->getMessage());
}
}
if (isset($_GET['contractid']) && $_GET['contractid'] != "") {
try {
$id = $_GET["contractid"];
$sql_str = "DELETE FROM contract_m_signed_back WHERE id = :contractid";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(":contractid", $id);
$stmt->execute();
header("HTTP/1.1 204 No Content");
} catch (PDOException $e) {
die("ERROR!!!: " . $e->getMessage());
}
}

59
wms/contract-repair/api/getComboNo.php

@ -0,0 +1,59 @@
<?php
class CreateComboNo{
private $comboarr = [
'week'=>'BW002',
'month'=>'EM002',
'quarter'=>'EQ002',
'half'=>'HY002',
'year'=>'EY002'
];
private $bwarr = [
'week','month','week','month','week','quarter',
'week','month','week','month','week','half',
'week','month','week','month','week','quarter',
'week','month','week','month','week','year'
];
private $emarr = [
'month','month','quarter','month','month','half',
'month','month','quarter','month','month','year'
];
private $combo;
private $startdate;
private $enddate;
public function __construct($combo, $startdate, $enddate){
$this->combo = $combo;
$this->startdate = $startdate;
$this->enddate = $enddate;
}
public function getComboNo(){
$comboarr = (array) $this->combo === 'bw' ? $this->bwarr : $this->emarr;
$startdate = new DateTime($this->startdate);
$enddate = new DateTime($this->enddate);
$interval = date_diff($startdate, $enddate);
$months = $interval->y * 12 + $interval->m;
$months = $this->combo === 'bw' ? $months*2 : $months;
$newarr = [];
$idx = 0;
$ori_first_month = date('m', strtotime($this->startdate));
$first_day = date('Y-m-d', strtotime($this->startdate. ' + 3 days'));
$new_first_month = date('m', strtotime($first_day));
if($ori_first_month != $new_first_month){
$first_day = date('Y-m-t', strtotime($this->startdate));
}
$scheduleDate = new DateTime($first_day);
for ($i = 0; $i < $months; $i++){
$newarr[] = [$this->comboarr[$comboarr[$idx]], $scheduleDate->format("Y-m-d")];
$idx ++;
$scheduleDate = $startdate->modify("+1 month");
if($idx >= count($comboarr)){
$idx = 0;
}
}
return json_encode($newarr);
}
}

122
wms/contract-repair/api/getContractData.php

@ -0,0 +1,122 @@
<?php
require_once('../conn.php');
if (isset($_GET['contractno']) && $_GET['contractno'] != '' && isset($_GET['contracttype']) && $_GET['contracttype'] == 'b') {
try {
$contractno = $_GET['contractno'];
$sql_str = "SELECT con_maintance_examine_apply.*, con_maintance_examine_clear.* FROM con_maintance_examine_apply
JOIN con_maintance_examine_clear on con_maintance_examine_apply.apply_key=con_maintance_examine_clear.apply_key
WHERE con_maintance_examine_apply.vol_no = :vol_no ;";
$sql_str = "SELECT * FROM con_maintance_examine_apply WHERE vol_no = :vol_no ORDER BY create_at DESC;";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':vol_no', $contractno);
$stmt->execute();
$contract = $stmt->fetch(PDO::FETCH_ASSOC);
if (empty($contract)) {
echo false;
exit;
}
$apply_key = $contract['apply_key'];
$sql_str = "SELECT * FROM con_maintance_examine_clear WHERE apply_key = :apply_key";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':apply_key', $apply_key);
$stmt->execute();
$elevators = $stmt->fetchAll(PDO::FETCH_ASSOC);
$count = COUNT($elevators);
$contract['elevators'] = $elevators;
$contract['num'] = $count;
$contractResponse = json_encode($contract);
// 設定回應標頭為 JSON
header('Content-Type: application/json');
// 將 JSON 回應返回給客戶端
echo $contractResponse;
// echo json_encode($contractResponse);
} catch (PDOException $e) {
die("ERROR!!!: " . $e->getMessage());
}
}
if (isset($_GET['contractno']) && $_GET['contractno'] != '' && isset($_GET['contracttype']) && $_GET['contracttype'] == 'm') {
try {
$contractno = $_GET['contractno'];
$sql_str = "SELECT * FROM hope_elevator_customer WHERE vol_no = :vol_no ORDER BY created_at DESC";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':vol_no', $contractno);
$stmt->execute();
$contract = $stmt->fetch(PDO::FETCH_ASSOC);
$contractResponse = json_encode($contract);
// 設定回應標頭為 JSON
header('Content-Type: application/json');
// 將 JSON 回應返回給客戶端
echo $contractResponse;
} catch (PDOException $e) {
die("ERROR!!!: " . $e->getMessage());
}
}
//////////////////////////////
//// 合約簽回(修理)
////
//// 製作人:梓誠
/// 時間 :
//////////////////////////////
if (isset($_GET['repair_no']) && $_GET['repair_no'] != '' && isset($_GET['contracttype']) && $_GET['contracttype'] == 'r') {
try {
$repair_no = $_GET['repair_no'];
$fail_arr = [];
$d_status = '1';
// 判斷單號是否在合約簽核已建立
$sql = "SELECT COUNT(*) AS num FROM contract_r_signed_back WHERE repair_no = :repair_no AND delete_status = :d_status ";
$stmt = $conn->prepare($sql);
$stmt->bindParam(":repair_no", $repair_no);
$stmt->bindParam(":d_status", $d_status);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
$count = $result['num'];
if ($count >= 1) {
$fail_arr[] = '合約單號重複,請至契約管理(修理)查看。';
header("HTTP/1.1 422 Unprocessable Entity");
echo json_encode($fail_arr);
exit();
}
// 判斷單號是否在價格審查中以建立。
$sql = "SELECT COUNT(*) AS num FROM pricereview_repair_main WHERE repair_no = :repair_no";
$stmt = $conn->prepare($sql);
$stmt->bindParam(":repair_no", $repair_no);
$stmt->execute();
$result2 = $stmt->fetch(PDO::FETCH_ASSOC);
$count2 = $result2['num'];
if ($count2 == 0) {
$fail_arr[] = '找不到單號,請再確認。';
header("HTTP/1.1 422 Unprocessable Entity");
echo json_encode($fail_arr);
exit();
}
// $contractno = $_GET['contractno'];
$sql = "SELECT a.*,b.name,b.accountid
FROM pricereview_repair_main AS a
LEFT JOIN account AS b
ON a.repairerid = b.accountid
WHERE a.repair_no = :repair_no ";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':repair_no', $repair_no);
$stmt->execute();
$contract = $stmt->fetch(PDO::FETCH_ASSOC);
$contractResponse = json_encode($contract);
// 設定回應標頭為 JSON
header('Content-Type : appliction/json');
// 將 JSON 回應給客戶端
echo $contractResponse;
} catch (PDOException $e) {
die("ERROR!!:" . $e->getMessage());
}
}

518
wms/contract-repair/api/getFacilityNo.php

@ -0,0 +1,518 @@
<?php
//ini_set('display_errors', 'on');
// 汰改 前三碼 流水號 + 後兩碼 號機
// 新梯 流水號
// 新增 seq 的初始值
// INSERT INTO `sequence` (`seq_name`, `current_val`, `increment_val`, `remark`, `yyyymm`, `prefix`, `creator`, `create_at`) VALUES ('bf_vol_no', '0', '1', '保養-作番編號', '202310', '', 'M0117', '2023-10-26 11:28:11'), ('mf_vol_no', '0', '1', '新梯-作番編號', '202310', '', 'M0117', '2023-10-26 11:28:11'), ('tf_vol_no', '0', '1', '汰改-作番編號', '202310', '', 'M0117', '2023-10-26 11:28:11')
class CreateFacilityNo
{
/**
* 連接資料庫
*/
function connectionDB()
{
$envFile = __DIR__ . '/../../../.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");
}
}
}
date_default_timezone_set("Asia/Taipei");
$host = getenv('DB_HOST');
$dbport = getenv('DB_PORT');
$dbuser = getenv('DB_USERNAME');
$dbpassword = getenv('DB_PASSWORD');
$dbname = getenv('DB_DATABASE');
try {
$options = [
PDO::ATTR_PERSISTENT => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_STRINGIFY_FETCHES => false,
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4',
];
$pdo = new PDO('mysql:host=' . $host . ';port=' . $dbport . ';dbname=' . $dbname . '', $dbuser, $dbpassword, $options);
$pdo->exec('SET CHARACTER SET utf8mb4');
return $pdo;
} catch (PDOException $e) {
die("Something wrong: {$e->getMessage()}");
}
}
/**
* 結束資料庫連線
*/
function endConnectionDB($pdo)
{
unset($pdo);
}
/**
* 取得下一個新的作番
* @param string $facility_type : M:新梯 T:汰改 B:保養
* @param string $sale_type : M:内銷 E:外銷 T:他社维保 J:汰改 X:特殊部品
* @param array $make_type : X:小機房 W:無機房 H:家用梯 Z:雜物梯 F:扶梯 B:部品 Q:品保對策 T:研究開發 N:設備 W:出貨現場要求購買 J:營業問題對策 Y:已出貨作番營業進行規格訂正
* @param int $num : 號機
* @return array $new_facility_arr
*/
function getNextFacilityNo($facility_type, $sale_type, $make_type, $num = 1)
{
$this->checkYearAndResetAllSeq();
$Y = substr(date("Y"), 3, 1);
switch ($facility_type) {
case "M":
$next_seq = $this->getNextFacilitySeq("mf_vol_no") + 1;
$new_facility_arr = [];
for ($start_num = 1; $start_num <= $num; $start_num++) {
$facility_no_tmp = $Y . $sale_type . $make_type[$start_num - 1]
. str_pad($next_seq, 5, "0", STR_PAD_LEFT);
array_push($new_facility_arr, $facility_no_tmp);
$next_seq++;
}
return $new_facility_arr;
case "T":
$next_seq = $this->getNextFacilitySeq("tf_vol_no");
$new_facility_arr = [];
for ($start_num = 1; $start_num <= $num; $start_num++) {
$facility_no_tmp = $Y . $sale_type . $make_type[$start_num - 1]
. str_pad($next_seq + 1, 3, "0", STR_PAD_LEFT)
. str_pad($start_num, 2, "0", STR_PAD_LEFT);
array_push($new_facility_arr, $facility_no_tmp);
}
return $new_facility_arr;
case "B":
$next_seq = $this->getNextFacilitySeq("bf_vol_no");
$new_facility_arr = [];
for ($start_num = 1; $start_num <= $num; $start_num++) {
$facility_no_tmp = $Y . $sale_type . $make_type[$start_num - 1]
. str_pad($next_seq + 1, 3, "0", STR_PAD_LEFT)
. str_pad($start_num, 2, "0", STR_PAD_LEFT);
array_push($new_facility_arr, $facility_no_tmp);
}
return $new_facility_arr;
default:
return "不存在的作番類型";
}
}
/**
* 建立新的作番
* @param string $facility_type : M:新梯 T:汰改 B:保養
* @param string $sale_type : M:内銷 E:外銷 T:他社维保 J:汰改 X:特殊部品
* @param array $make_type : X:小機房 W:無機房 H:家用梯 Z:雜物梯 F:扶梯 B:部品 Q:品保對策 T:研究開發 N:設備 W:出貨現場要求購買 J:營業問題對策 Y:已出貨作番營業進行規格訂正
* @param string $num : 號機 (非必填)
* @return string $new_facility_no
*/
function makeFacilityNo($facility_type, $sale_type, $make_type, $num = null)
{
$this->checkYearAndResetAllSeq();
$faclikity_details = array(
'facility_type' => $facility_type,
'sale_type' => $sale_type,
'make_type' => $make_type,
'num' => $num
);
switch ($facility_type) {
case "M":
return $this->makeNewMFacilityNo($faclikity_details);
break;
case "T":
return $this->makeNewTFacilityNo($faclikity_details);
break;
case "B":
return $this->makeNewBFacilityNo($faclikity_details);
break;
default:
return "不存在的作番類型";
}
}
/**
* 建立作番 -- 新梯
*/
function makeNewMFacilityNo($faclikity_details)
{
$Y = substr(date("Y"), 3, 1);
$sale_type = $faclikity_details['sale_type'];
$make_type = $faclikity_details['make_type'];
$num = $faclikity_details['num'];
$next_seq = $this->getNextFacilitySeq("mf_vol_no") + 1;
$new_facility_no_arr = [];
for ($i = 1; $i <= $num; $i++) {
$new_facility_no = $Y . $sale_type . $make_type[$i - 1]
. str_pad($next_seq, 5, "0", STR_PAD_LEFT);
array_push($new_facility_no_arr, $new_facility_no);
$next_seq++;
}
foreach ($new_facility_no_arr as $new_facility_no) {
if ($this->getMakeNewMFacilityNoStatus($faclikity_details) !== "1") {
return $new_facility_no . ":" . $this->getMakeNewTFacilityNoStatus($faclikity_details);
}
// seq +1
$this->facilitySeqAddOne("M");
}
return $new_facility_no_arr;
}
/**
* 建立作番 -- 汰改
*/
function makeNewTFacilityNo($faclikity_details)
{
$Y = substr(date("Y"), 3, 1);
$sale_type = $faclikity_details['sale_type'];
$make_type = $faclikity_details['make_type'];
$num = $faclikity_details['num'];
$next_seq = $this->getNextFacilitySeq("tf_vol_no");
$new_facility_no_arr = [];
for ($i = 1; $i <= $num; $i++) {
$new_facility_no = $Y . $sale_type . $make_type[$i - 1]
. str_pad($next_seq + 1, 3, "0", STR_PAD_LEFT)
. str_pad($i, 2, "0", STR_PAD_LEFT);
array_push($new_facility_no_arr, $new_facility_no);
}
foreach ($new_facility_no_arr as $new_facility_no) {
if ($this->getMakeNewTFacilityNoStatus($faclikity_details) !== "1") {
return $new_facility_no . ":" . $this->getMakeNewTFacilityNoStatus($faclikity_details);
}
// seq +1
$this->facilitySeqAddOne("T");
return $new_facility_no_arr;
}
}
/**
* 建立作番 -- 保養
*/
function makeNewBFacilityNo($faclikity_details)
{
$Y = substr(date("Y"), 3, 1);
$sale_type = $faclikity_details['sale_type'];
$make_type = $faclikity_details['make_type'];
$num = $faclikity_details['num'];
$next_seq = $this->getNextFacilitySeq("bf_vol_no");
$new_facility_no_arr = [];
for ($i = 1; $i <= $num; $i++) {
$new_facility_no = $Y . $sale_type . $make_type[$i - 1]
. str_pad($next_seq + 1, 3, "0", STR_PAD_LEFT)
. str_pad($i, 2, "0", STR_PAD_LEFT);
array_push($new_facility_no_arr, $new_facility_no);
}
foreach ($new_facility_no_arr as $new_facility_no) {
if ($this->getMakeNewBFacilityNoStatus($faclikity_details) !== "1") {
return $new_facility_no . ":" . $this->getMakeNewBFacilityNoStatus($faclikity_details);
}
// seq +1
$this->facilitySeqAddOne("B");
return $new_facility_no_arr;
}
}
/**
* 檢查作番編列狀態 - 新梯
* @param array $faclikity_details
* @return string $status : 1:正確 else:error message
*/
function getMakeNewMFacilityNoStatus($faclikity_details)
{
$sale_type = $faclikity_details['sale_type'];
$make_type = $faclikity_details['make_type'];
if ($this->checkSaleTypeStatus($sale_type) == false)
return "銷售代號錯誤";
if ($this->checkMakeTypeStatus($make_type) == false)
return "製造編號類型錯誤";
return "1";
}
/**
* 檢查作番編列狀態 - 汰改
* @param array $faclikity_details
* @return string $status : 1:正確 else:error message
*/
function getMakeNewTFacilityNoStatus($faclikity_details)
{
$sale_type = $faclikity_details['sale_type'];
$make_type = $faclikity_details['make_type'];
if ($this->checkSaleTypeStatus($sale_type) == false)
return "銷售代號錯誤";
if ($this->checkMakeTypeStatus($make_type) == false)
return "製造編號類型錯誤";
return "1";
}
/**
* 檢查作番編列狀態 - 保養
* @param array $faclikity_details
* @return string $status : 1:正確 else:error message
*/
function getMakeNewBFacilityNoStatus($faclikity_details)
{
$sale_type = $faclikity_details['sale_type'];
$make_type = $faclikity_details['make_type'];
if ($this->checkSaleTypeStatus($sale_type) == false)
return "銷售代號錯誤";
if ($this->checkMakeTypeStatus($make_type) == false)
return "製造編號類型錯誤";
return "1";
}
/**
* seq 取號
* @param string $type M:新梯 T:汰改 B:保養
*/
function facilitySeqAddOne($type)
{
$type_arr = array(
"M" => "mf_vol_no",
"T" => "tf_vol_no",
"B" => "bf_vol_no",
);
if (!empty($type_arr[$type])) {
$pdo = $this->connectionDB();
$pdo->exec('SET CHARACTER SET utf8mb4');
$sth = $pdo->prepare('UPDATE sequence SET current_val = current_val + 1 WHERE `seq_name` = ?');
$sth->bindValue(1, $type_arr[$type]);
$sth->execute();
}
}
/**
* 修正 seq 取號
* @param string $type M:新梯 T:汰改 B:保養
*/
function facilityFixSeq($type)
{
$pdo = $this->connectionDB();
$pdo->exec('SET CHARACTER SET utf8mb4');
$type_arr = array(
"M" => "mf_vol_no",
"T" => "tf_vol_no",
"B" => "bf_vol_no",
);
$after_fix_seq = $this->getMaxSeq($type);
$sql = "
UPDATE sequence
SET current_val = ?
WHERE seq_name = ?
";
$sth = $pdo->prepare($sql);
$sth->bindValue(1, $after_fix_seq);
$sth->bindValue(2, $type_arr[$type]);
$sth->execute();
}
function getMaxSeq($type)
{
$pdo = $this->connectionDB();
$pdo->exec('SET CHARACTER SET utf8mb4');
$Y = substr(date("Y"), 3, 1);
$seq_num = $type == 'M' ? 5 : 3;
$sql = "
SELECT MAX(SUBSTR(f.facilityno,4,?))+1 AS seq
FROM facility AS f
WHERE 1=1
AND SUBSTR(f.facilityno,1,1) = ?
AND f.define = ?
ORDER BY SUBSTR(f.facilityno,4,3) ASC
";
$sth = $pdo->prepare($sql);
$sth->bindValue(1, $seq_num);
$sth->bindValue(2, $Y);
$sth->bindValue(3, $type);
$sth->execute();
$result = $sth->fetch();
return $result['seq'];
}
/**
* 檢查年月後 新梯及汰改seq歸零
*/
function checkYearAndResetAllSeq()
{
$pdo = $this->connectionDB();
$pdo->exec('SET CHARACTER SET utf8mb4');
$sth = $pdo->prepare('SELECT * FROM `sequence` WHERE `seq_name` = ?');
$sth->bindValue(1, 'mf_vol_no');
$sth->execute();
$result = $sth->fetch();
$yyyymm = $result['yyyymm'];
$dataY = substr($yyyymm, 0, 4);
$today_Y = date("Y");
$today_Ym = date("Ym");
if ($dataY != $today_Y) {
$sth = $pdo->prepare('UPDATE `sequence` SET `current_val` = ? , `yyyymm` = ? WHERE `seq_name` = ?');
$sth->bindValue(1, '0');
$sth->bindValue(2, $today_Ym);
$sth->bindValue(3, 'mf_vol_no');
$sth->execute();
}
}
/**
* 檢查作番在 facility table 中是否重複
* @param string|array $facility_no
* @return boolean $status : true:沒重複 false:重複
*/
function checkFacilityRepeatStatus($facility_no)
{
if (gettype($facility_no) == "string") {
$pdo = $this->connectionDB();
$pdo->exec('SET CHARACTER SET utf8mb4');
$sth = $pdo->prepare('SELECT * FROM `facility` WHERE `facilityno` = ?');
$sth->bindValue(1, $facility_no);
$sth->execute();
if ($sth->rowCount() == 0)
return true;
return false;
}
if (gettype($facility_no) == "array") {
$pdo = $this->connectionDB();
$pdo->exec('SET CHARACTER SET utf8mb4');
$status = true;
foreach ($facility_no as $row) {
$sth = $pdo->prepare('SELECT * FROM `facility` WHERE `facilityno` = ?');
$sth->bindValue(1, $row);
$sth->execute();
if ($sth->rowCount() !== 0)
$status = false;
}
return $status;
}
}
/**
* 檢查 $sale_type 是否有存在規則之中
* @param string $sale_type : M:内銷 E:外銷 T:他社维保 J:汰改 X:特殊部品
* @return boolean $status : true:合法代碼 false:非法代碼
*/
function checkSaleTypeStatus($sale_type)
{
if (!in_array($sale_type, ['M', 'E', 'T', 'J', 'X']))
return false;
return true;
}
/**
* 檢查 $sale_type 是否有存在規則之中
* @param array $make_type : X:小機房 W:無機房 H:家用梯 Z:雜物梯 F:扶梯 B:部品 Q:品保對策 T:研究開發 N:設備 W:出貨現場要求購買 J:營業問題對策 Y:已出貨作番營業進行規格訂正
* @return boolean $status : true:合法代碼 false:非法代碼
*/
function checkMakeTypeStatus($make_type)
{
foreach ($make_type as $row)
if (!in_array($row, ['X', 'W', 'H', 'Z', 'F', 'B', 'Q', 'T', 'N', 'W', 'J', 'Y']))
return false;
return true;
}
/**
* 檢查 取得下個作番的 seq
* @param string $seq_name : 新梯:mf_vol_no 汰改:tf_vol_no 保養:bf_vol_no
* @return int $seq : 作番流水號
*/
function getNextFacilitySeq($seq_name)
{
$pdo = $this->connectionDB();
$pdo->exec('SET CHARACTER SET utf8mb4');
$sth = $pdo->prepare('SELECT * FROM `sequence` WHERE `seq_name` = ?');
$sth->bindValue(1, $seq_name);
$sth->execute();
$result = $sth->fetch();
return $result['current_val'];
}
/**
* 建立新的新梯作番
* @param string $sale_type : M:内銷 E:外銷 T:他社维保 J:汰改 X:特殊部品
* @param array $make_type : X:小機房 W:無機房 H:家用梯 Z:雜物梯 F:扶梯 B:部品 Q:品保對策 T:研究開發 N:設備 W:出貨現場要求購買 J:營業問題對策 Y:已出貨作番營業進行規格訂正
* @param int $seq_name : 幾個案場 0-99
* @return array $new_facilityno : 作番號
*/
function makeMFacilityNo($sale_type, $make_type, $num)
{
if (count($make_type) !== $num)
return "陣列數量不一致!";
$new_facility_no = $this->getNextFacilityNo("M", $sale_type, $make_type, $num);
if ($this->checkFacilityRepeatStatus($new_facility_no) == false) {
// 如果作番號重複 使用此函數修正
$this->facilityFixSeq("M");
}
return $this->makeFacilityNo("M", $sale_type, $make_type, $num);
}
/**
* 建立新的汰改作番
* @param array $sale_type : M:内銷 E:外銷 T:他社维保 J:汰改 X:特殊部品
* @param array $make_type : X:小機房 W:無機房 H:家用梯 Z:雜物梯 F:扶梯 B:部品 Q:品保對策 T:研究開發 N:設備 W:出貨現場要求購買 J:營業問題對策 Y:已出貨作番營業進行規格訂正
* @param int $seq_name : 幾個案場 0-99
* @return array $new_facilityno : 作番號
*/
function makeTFacilityNo($sale_type, $make_type, $num)
{
if (count($make_type) !== $num)
return "陣列數量不一致!";
$new_facility_no = $this->getNextFacilityNo("T", $sale_type, $make_type, $num);
if ($this->checkFacilityRepeatStatus($new_facility_no) == false) {
// 如果作番號重複 使用此函數修正
$this->facilityFixSeq("T");
}
return $this->makeFacilityNo("T", $sale_type, $make_type, $num);
}
/**
* 建立新的保養作番
* @param string $sale_type : M:内銷 E:外銷 T:他社维保 J:汰改 X:特殊部品
* @param array $make_type : X:小機房 W:無機房 H:家用梯 Z:雜物梯 F:扶梯 B:部品 Q:品保對策 T:研究開發 N:設備 W:出貨現場要求購買 J:營業問題對策 Y:已出貨作番營業進行規格訂正
* @param int $seq_name : 幾個案場 0-99
* @return array $new_facilityno : 作番號
*/
function makeBFacilityNo($sale_type, $make_type, $num = 1)
{
if (count($make_type) !== $num)
return "陣列數量不一致!";
$new_facility_no = $this->getNextFacilityNo("B", $sale_type, $make_type, $num);
if ($this->checkFacilityRepeatStatus($new_facility_no) == false) {
// 如果作番號重複 使用此函數修正
$this->facilityFixSeq("B");
}
return $this->makeFacilityNo("B", $sale_type, $make_type, $num);
}
}
// $cfn = new CreateFacilityNo;
// // 建立作番號 - 新梯
// print_r($cfn->makeMFacilityNo("M", ["X", "W"], 2));
// echo "<br/><br/>";
// // 建立作番號 - 汰改
// print_r($cfn->makeTFacilityNo("M", ["X", "W"], 2));
// echo "<br/><br/>";
// // 建立作番號 - 保養
// print_r($cfn->makeBFacilityNo("M", ["X", "W"], 2));
// echo "<br/><br/>";

16
wms/contract-repair/api/getPriceview.php

@ -0,0 +1,16 @@
<?php
require_once('../conn.php');
try{
$id = $_GET['id'];
$sql_str = "SELECT * FROM pricereview_main WHERE id = :id";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':id',$id);
$stmt->execute();
$prices = $stmt->fetch(PDO::FETCH_ASSOC);
header("Content-Type: application/json");
echo json_encode(['prices'=> $prices]);
}catch (PDOException $e ){
die("ERROR!!!: ". $e->getMessage());
}

423
wms/contract-repair/api/postContractData.php

@ -0,0 +1,423 @@
<?php
require_once("../conn.php");
include_once("./getFacilityNo.php");
include_once("./getComboNo.php");
include_once("./upload_chk.php");
ini_set('date.timezone', 'Asia/Taipei');
//保養簽回
if (isset($_POST["contractno"]) && $_POST["contractno"] != "" && isset($_POST['contracttype']) && $_POST['contracttype'] == 'b') {
try {
$created_at = date('Y-m-d H:i:s');
$contractno = !empty($_POST['contractno']) ? $_POST['contractno'] : null;
$total_price = !empty($_POST['total_price']) ? $_POST['total_price'] : null;
$vat = !empty($_POST['vat']) ? $_POST['vat'] : null;
$mtype = !empty($_POST['mtype']) ? $_POST['mtype'] : null;
$opendoor = !empty($_POST['opendoor']) ? $_POST['opendoor'] : null;
$phone = !empty($_POST['phone']) ? $_POST['phone'] : null;
$email = !empty($_POST['email']) ? $_POST['email'] : null;
$mworker = !empty($_POST['mworker']) ? $_POST['mworker'] : null;
$mcycle = !empty($_POST['mcycle']) ? $_POST['mcycle'] : null;
$salesman = !empty($_POST['salesman']) ? $_POST['salesman'] : null;
$contract_begin_date = !empty($_POST['contract_begin_date']) ? $_POST['contract_begin_date'] : null;
$contract_end_date = !empty($_POST['contract_end_date']) ? $_POST['contract_end_date'] : null;
$address = !empty($_POST['address']) ? $_POST['address'] : null;
$area = !empty($_POST['area']) ? $_POST['area'] : null;
$customer = !empty($_POST['customer']) ? $_POST['customer'] : null;
$partyA = !empty($_POST['partyA']) ? $_POST['partyA'] : null;
$partyAaddress = !empty($_POST['partyAaddress']) ? $_POST['partyAaddress'] : null;
$partyAphone = !empty($_POST['partyAphone']) ? $_POST['partyAphone'] : null;
$partyAemail = !empty($_POST['partyAemail']) ? $_POST['partyAemail'] : null;
$user_id = !empty($_POST['user_id']) ? $_POST['user_id'] : null;
$user_name = !empty($_POST['user_name']) ? $_POST['user_name'] : null;
$num = !empty($_POST['num']) ? $_POST['num'] : null;
$files = !empty($_FILES['files']) ? $_FILES['files'] : null;
$elevators = !empty($_POST['elevators']) ? json_decode($_POST['elevators'], true) : [];
// validate
$fail_arr = [];
if ($contractno === '') return $fail_arr[] = '合約號為必填';
if ($total_price == '') $fail_arr[] = '合約總價為必填';
if ($vat == '') $fail_arr[] = '統一編號為必填';
if ($mtype == '') $fail_arr[] = '維修型態為必填';
if ($phone == '') $fail_arr[] = '客戶電話為必填';
if ($email == '') $fail_arr[] = 'Email為必填';
if ($mworker == '') $fail_arr[] = '保養員為必填';
if ($mcycle == '') $fail_arr[] = '保養頻率為必填';
if ($salesman == '') $fail_arr[] = '營業員為必填';
if ($contract_begin_date == '') $fail_arr[] = '合約開始時間為必填';
if ($contract_end_date == '') $fail_arr[] = '合約結束時間為必填';
if ($address == '') $fail_arr[] = '地址為必填';
if ($area == '') $fail_arr[] = '區域為必填';
if ($customer == '') $fail_arr[] = '客戶為必填';
if ($partyA == '') $fail_arr[] = '業務聯繫人為必填';
if ($partyAaddress == '') $fail_arr[] = '業務聯繫人地址為必填';
if ($partyAphone == '') $fail_arr[] = '業務聯繫人電話為必填';
if ($partyAemail == '') $fail_arr[] = '業務聯繫人Email為必填';
if ($num == '') $fail_arr[] = '電梯數量為必填';
if (count($fail_arr) > 0) {
header("HTTP/1.1 422 Unprocessable Entity");
echo json_encode($fail_arr);
exit();
}
//create account table
$accounttype = "A";
$accountid = $vat;
$pwd = "123";
$name = $partyA;
$tel = $phone ?? '';
$repairerid = $mworker;
$creater = $user_id;
$create_at = date('Y-m-d H:i:s');
$conn->beginTransaction();
$sql_str = "INSERT INTO account (accounttype, accountid, pwd, name, tel, address, email, repairerid, creater, create_at) VALUES (:accounttype, :accountid, :pwd, :name, :tel, :address, :email, :repairerid, :creater, :create_at)";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':accounttype', $accounttype);
$stmt->bindParam(':accountid', $accountid);
$stmt->bindParam(':pwd', $pwd);
$stmt->bindParam(':name', $name);
$stmt->bindParam(':tel', $tel);
$stmt->bindParam(':address', $address);
$stmt->bindParam(':email', $email);
$stmt->bindParam(':repairerid', $repairerid);
$stmt->bindParam(':creater', $creater);
$stmt->bindParam(':create_at', $create_at);
$stmt->execute();
//create contract table
$contracttype = $mtype;
$company = $partyA;
$taxid = $vat;
$tel = $phone;
$promiser = $partyA;
$contractperson = $partyA;
$contractaddress = $address;
$contracttel = $phone;
$contractemail = $email;
$contract_employee = $salesman;
$start_date = $contract_begin_date;
$end_date = $contract_end_date;
$sql_str = "INSERT INTO contract (contracttype, contractno, company, taxid, address, tel, promiser, contractperson, contractaddress, contracttel, contractemail, contract_employee, start_date, end_date, creater, create_at) VALUES (:contracttype, :contractno, :company, :taxid, :address, :tel, :promiser, :contractperson, :contractaddress, :contracttel, :contractemail, :contract_employee, :start_date, :end_date, :creater, :create_at)";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':contracttype', $contracttype);
$stmt->bindParam(':contractno', $contractno);
$stmt->bindParam(':company', $company);
$stmt->bindParam(':taxid', $taxid);
$stmt->bindParam(':address', $address);
$stmt->bindParam(':tel', $tel);
$stmt->bindParam(':promiser', $promiser);
$stmt->bindParam(':contractperson', $contractperson);
$stmt->bindParam(':contractaddress', $contractaddress);
$stmt->bindParam(':contracttel', $contracttel);
$stmt->bindParam(':contractemail', $contractemail);
$stmt->bindParam(':contract_employee', $contract_employee);
$stmt->bindParam(':start_date', $start_date);
$stmt->bindParam(':end_date', $end_date);
$stmt->bindParam(':creater', $creater);
$stmt->bindParam(':create_at', $create_at);
$stmt->execute();
//create facility table
$createFacilityNo = new CreateFacilityNo();
$dailyNecessities = [
'MAE100' => 'X',
'MAM200' => 'W',
'MAH100' => 'H',
'MAQ100' => 'Z',
'MAF100' => 'F',
'MAZ100' => 'B',
];
$facility_arr = [];
foreach ($elevators as $elevator) {
$facility_arr[] = $dailyNecessities[$elevator['spec']];
}
echo json_encode($facility_arr);
$facilityno = $createFacilityNo->makeBFacilityNo("T", $facility_arr, (int)$num);
echo json_encode($facilityno);
echo '-------';
$sql_str = "SELECT accountid, name FROM account WHERE accountid = :accountid";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':accountid', $mworker);
$stmt->execute();
$worker = $stmt->fetch(PDO::FETCH_ASSOC);
$customerid = $vat;
$define = "B";
$repairtype = $mtype;
$repairerid = $mworker;
$repairername = $worker['name'];
foreach ($elevators as $idx => $elevator) {
$sql_str = "INSERT INTO facility (contractno, define, facilityno, latitude, longitude, customerid, weight, numberofpassenger, numberofstop, numberoffloor, opentype, speed, repairtype, maintainance, facility_kind, address, repairerid, repairername, creater, create_at, area, takecertificatedate, licensedate)
VALUES (:contractno, :define, :facilityno, :latitude, :longitude, :customerid, :weight, :numberofpassenger, :numberofstop, :numberoffloor, :opentype, :speed, :repairtype, :maintainance, :facility_kind, :address, :repairerid, :repairername, :creater, :create_at, :area, :takecertificatedate, :licensedate)";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':contractno', $contractno);
$stmt->bindParam(':define', $define);
$stmt->bindParam(':facilityno', $facilityno[$idx]);
$stmt->bindParam(':latitude', $elevator['latitude']);
$stmt->bindParam(':longitude', $elevator['longitude']);
$stmt->bindParam(':customerid', $customerid);
$stmt->bindParam(':weight', $elevator['weight']);
$stmt->bindParam(':numberofpassenger', $elevator['persons']);
$stmt->bindParam(':numberofstop', $elevator['stop']);
$stmt->bindParam(':numberoffloor', $elevator['floors']);
$stmt->bindParam(':opentype', $elevator['opendoor']);
$stmt->bindParam(':speed', $elevator['speed']);
$stmt->bindParam(':repairtype', $repairtype);
$stmt->bindParam(':maintainance', $elevator['maintainance']);
$stmt->bindParam(':facility_kind', $elevator['spec']);
$stmt->bindParam(':address', $address);
$stmt->bindParam(':repairerid', $repairerid);
$stmt->bindParam(':repairername', $repairername);
$stmt->bindParam(':creater', $creater);
$stmt->bindParam(':create_at', $create_at);
$stmt->bindParam(':area', $area);
$stmt->bindParam(':takecertificatedate', $elevator['takecertificatedate']);
$stmt->bindParam(':licensedate', $elevator['useful_date']);
$result = $stmt->execute();
}
//create schedule table
$comboNo = new CreateComboNo($mcycle, $contract_begin_date, $contract_end_date);
$comboArr = json_decode($comboNo->getComboNo(), true);
foreach ($facilityno as $no) {
foreach ($comboArr as $combo) {
$sql_str = 'INSERT INTO schedule (contractno, facilityno, combono, repairerid, repairername, duedate, creater, create_at) VALUES (:contractno, :facilityno, :combono, :repairerid, :repairername, :duedate, :creater, :create_at)';
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':contractno', $contractno);
$stmt->bindParam(':facilityno', $no);
$stmt->bindParam(':combono', $combo[0]);
$stmt->bindParam(':repairerid', $repairerid);
$stmt->bindParam(':repairername', $repairername);
$stmt->bindParam(':duedate', $combo[1]);
$stmt->bindParam(':creater', $creater);
$stmt->bindParam(':create_at', $create_at);
$result = $stmt->execute();
}
}
// create contract_b_signed_back table
$contract_type = $mtype;
$company = $customer;
$customer_no = $vat;
$salesperson = $salesman;
$customer_phone = $phone;
$customer_email = $email;
$repairman = $mworker;
$cycle = $mcycle;
$contact_person = $partyA;
$contact_address = $partyAaddress;
$contact_phone = $partyAphone;
$contract_email = $partyAemail;
$elevators_number = $num;
$bonus = 1000;
$max_bonus = 2000;
if (!empty($files)) {
$englisharr = range('a', 'z');
$file = $_FILES['files'];
$file_name = $file['name'];
$file_type = $file['type'];
$tmp_name = $file['tmp_name'];
$file_size = $file['size'];
$error = $file['error'];
$newfiles = [];
foreach ($files as $file) {
$i = 0; //新陣列的索引編號
foreach ($file as $key => $val) {
$newfiles[$i]['name'] = $files['name'][$key];
$newfiles[$i]['type'] = $files['type'][$key];
$newfiles[$i]['tmp_name'] = $files['tmp_name'][$key];
$newfiles[$i]['error'] = $files['error'][$key];
$newfiles[$i]['size'] = $files['size'][$key];
$i++;
} //foreach 第2層 end
}
$max_size = 4096 * 4096; //設定允許上傳檔案容量的最大值(1M)
$allow_ext = array('jpeg', 'jpg', 'png', 'JPG', 'JPEG', 'PNG', 'GIF'); //設定允許上傳檔案的類型
$path = '../images/contracts/';
if (!file_exists($path)) {
mkdir($path);
}
$msg_result = ''; //負責接收所有檔案檢測後的回傳訊息
$datetime = (string)date('YmdHis');
$files_id = 'b' . $datetime; // 保養=>b + 日期時間
foreach ($newfiles as $key => $file) {
$randNum = rand(1000, 9999);
$randEnglish = $englisharr[rand(0, 25)];
$file_name = 'b' . (string)date('YmdHis') . $randNum . $randEnglish . $randNum . $file['name'];
$msg = upload_chk($file, $path, $max_size, $allow_ext, $file_name);
if ($msg == 1) {
$msg = '檔案傳送成功!';
$sql_str = "INSERT INTO contract_back_files (files_id, file_name, file_mime, file_size, created_at, created_by) VALUES (:files_id, :file_name, :file_mime, :file_size, :created_at, :created_by)";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':files_id', $files_id);
$stmt->bindParam(':file_name', $file_name);
$stmt->bindParam(':file_mime', $file['type']);
$stmt->bindParam(':file_size', $file['size']);
$stmt->bindParam(':created_at', $created_at);
$stmt->bindParam(':created_by', $user_id);
$stmt->execute();
}
$msg_result .= '第' . ($key + 1) . '個上傳檔案的結果:' . $msg . '<br/>';
$src_name = $path . $file['name'];
if (file_exists($src_name)) {
//副檔名
$extname = pathinfo($src_name, PATHINFO_EXTENSION);
//主檔名
$basename = basename($src_name, '.' . $extname);
}
}
} else {
$files = null;
}
$sql_str = "INSERT INTO contract_b_signed_back (contract_no, contract_type, company, customer_no, salesperson, contract_start_date, contract_end_date, total_price, customer_phone, customer_email, repairman, cycle, contact_person, contact_address, contact_phone, contact_email, elevators_number, area, address, files_id, bonus, max_bonus, created_at, created_by)
VALUES (:contract_no, :contract_type, :company, :customer_no, :salesperson, :contract_start_date, :contract_end_date, :total_price, :customer_phone, :customer_email, :repairman, :cycle, :contact_person, :contact_address, :contact_phone, :contact_email, :elevators_number, :area, :address, :files_id, :bonus, :max_bonus, :created_at, :created_by)";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(":contract_no", $contractno);
$stmt->bindParam(":contract_type", $contract_type);
$stmt->bindParam(":company", $company);
$stmt->bindParam(":customer_no", $customer_no);
$stmt->bindParam(":salesperson", $salesperson);
$stmt->bindParam(":contract_start_date", $contract_begin_date);
$stmt->bindParam(":contract_end_date", $contract_end_date);
$stmt->bindParam(":total_price", $total_price);
$stmt->bindParam(":customer_phone", $customer_phone);
$stmt->bindParam(":customer_email", $customer_email);
$stmt->bindParam(":repairman", $repairman);
$stmt->bindParam(":cycle", $cycle);
$stmt->bindParam(":contact_person", $contact_person);
$stmt->bindParam(":contact_address", $contact_address);
$stmt->bindParam(":contact_phone", $contact_phone);
$stmt->bindParam(":contact_email", $contact_email);
$stmt->bindParam(":elevators_number", $elevators_number);
$stmt->bindParam(":area", $area);
$stmt->bindParam(":address", $address);
$stmt->bindParam(":files_id", $files_id);
$stmt->bindParam(":bonus", $bonus);
$stmt->bindParam(":max_bonus", $max_bonus);
$stmt->bindParam(":created_at", $created_at);
$stmt->bindParam(":created_by", $user_id);
$stmt->execute();
header('Content-Type: application/json');
// $jsonData = json_encode($files);
$conn->commit();
} catch (PDOException $e) {
$conn->rollback();
echo $e->getMessage();
die('Error!:' . $e->getMessage());
}
}
//////////////////////////////
//// 合約簽回(修理)
////
//// 製作人:梓誠
/// 時間 :
//////////////////////////////
if (isset($_POST['contractno']) && $_POST['contractno'] != "" && isset($_POST['contracttype']) && $_POST['contracttype'] == 'r') {
// echo $_POST;
// exit;
try {
$created_at = date('Y-m-d H:i:s');
$contractno = !empty($_POST['contractno']) ? $_POST['contractno'] : null;
$company = !empty($_POST['company']) ? $_POST['company'] : null;
$repairid = !empty($_POST['repairid']) ? $_POST['repairid'] : null;
$facilityno = !empty($_POST['facilityno']) ? $_POST['facilityno'] : null;
$taxid = !empty($_POST['taxid']) ? $_POST['taxid'] : null;
$invoice = !empty($_POST['invoice']) ? $_POST['invoice'] : null;
$address = !empty($_POST['address']) ? $_POST['address'] : null;
$repair_no = !empty($_POST['repair_no']) ? $_POST['repair_no'] : null;
$total_price = !empty($_POST['total_price']) ? $_POST['total_price'] : null;
$user_id = !empty($_POST['user_id']) ? $_POST['user_id'] : null;
$type = !empty($_POST['type']) ? $_POST['type'] : null;
$sign_date = !empty($_POST['sign_date']) ? $_POST['sign_date'] : null;
$contract_status = !empty($_POST['contract_status']) ? $_POST['contract_status'] : 1;
$fail_arr = [];
if (empty($contractno)) $fail_arr[] = '合約號為必填';
if (empty($repair_no)) $fail_arr[] = '報價單編號為必填';
if (empty($company)) $fail_arr[] = '客戶名稱為必填';
if (empty($repairid)) $fail_arr[] = '為保人員為必填';
// iempty(f($taxid === '') return $fail_arr[] = '統一編號為必填';
if (empty($facilityno)) $fail_arr[] = '電梯編號為必填';
if (empty($address)) $fail_arr[] = '工程地址為必填';
if (empty($type)) $fail_arr[] = '工程類別為必填';
if (empty($invoice)) $fail_arr[] = '發票抬頭為必填';
if (empty($taxid)) $fail_arr[] = '統一編號為必填';
// echo json_encode($fail_arr);
// exit;
if (count($fail_arr) > 0) {
header("HTTP/1.1 422 Unprocessable Entity");
echo json_encode($fail_arr);
exit();
}
// exit();
//create contrac_r_signed_back table
$conn->beginTransaction();
$sql = "INSERT INTO contract_r_signed_back(
repair_no,
contractno,
company,
taxid,
facilityno,
address,
type,
invoice,
repaireid,
total_price,
sign_date,
contract_status,
create_user,
create_date) VALUES(
:repair_no,
:contractno,
:company,
:taxid,
:facilityno,
:address,
:type,
:invoice,
:repaireid,
:total_price,
:sign_date,
:contract_status,
:create_userid,
:create_date
)";
$stmt = $conn->prepare($sql);
$stmt->bindParam(":repair_no", $repair_no);
$stmt->bindParam(":contractno", $contractno);
$stmt->bindParam(":company", $company);
$stmt->bindParam(":taxid", $taxid);
$stmt->bindParam(":facilityno", $facilityno);
$stmt->bindParam(":address", $address);
$stmt->bindParam(":type", $type);
$stmt->bindParam(":invoice", $invoice);
$stmt->bindParam(":repaireid", $repairid);
$stmt->bindParam(":total_price", $total_price);
$stmt->bindParam(":sign_date", $sign_date);
$stmt->bindParam(":contract_status", $contract_status);
$stmt->bindParam(":create_userid", $user_id);
$stmt->bindParam("create_date", $created_at);
$stmt->execute();
header('Content-Type: application/json');
// $jsonData = json_encode($files);
$conn->commit();
} catch (PDOException $e) {
$conn->rollback();
header("HTTP/1.1 422 Unprocessable Entity");
echo $e->getMessage();
die('Error!' . $e->getMessage());
}
}

68
wms/contract-repair/api/postContractNewApplyData.php

@ -0,0 +1,68 @@
<?php
require_once("../conn.php");
ini_set ( 'date.timezone' , 'Asia/Taipei' );
if(isset($_POST['vol_no']) && !empty($_POST['vol_no'])){
$mid = $_POST['mid'];
$vol_no = $_POST['vol_no'];
$salesman = $_POST['salesman'];
$apply_date = $_POST['apply_date'];
$apply_type = $_POST['apply_type'];
$case_name = $_POST['case_name'];
$customer = $_POST['company'];
$manager = $_POST['manager'];
$vat = $_POST['vat'];
$total_price = $_POST['total_price'];
$buy_fee = $_POST['price_a'];
$install_fee = $_POST['price_b'];
$contact_address = $_POST['address'];
$workdeadline_a = $_POST['workdeadline_a'];
$workdeadline_b = $_POST['workdeadline_b'];
$test_time = $_POST['regulations'];
$freedeadline = $_POST['freedeadline'];
$trade_address = $_POST['tradeaddress'];
$tradedeadline = $_POST['tradedeadline'];
$progress = 0;
$status = 0;
$created_at = date('Y-m-d H:i:s');
$created_by = $_POST['user_id'];
$isFirst = $_POST['isFirst'];
$conn->beginTransaction();
try{
if($isFirst == 1){
$sql_str = "INSERT INTO contract_new_apply (mid, contractno, sales_man, apply_date, apply_type, case_name, customer, manager, vat, total_price, buy_fee, install_fee, contact_address, workdeadline_a, workdeadline_b, test_time, freedeadline, trade_address, tradedeadline, progress, status, created_at, created_by) VALUES (:mid, :contractno, :sales_man, :apply_date, :apply_type, :case_name, :customer, :manager, :vat, :total_price, :buy_fee, :install_fee, :contact_address, :workdeadline_a, :workdeadline_b, :test_time, :freedeadline, :trade_address, :tradedeadline, :progress, :status, :created_at, :created_by)";
$stmt = $conn -> prepare($sql_str);
$stmt ->bindParam(':mid', $mid);
$stmt ->bindParam(':contractno', $vol_no);
$stmt ->bindParam(':sales_man', $salesman);
$stmt ->bindParam(':apply_date', $apply_date);
$stmt ->bindParam(':apply_type', $apply_type);
$stmt ->bindParam(':case_name', $case_name);
$stmt ->bindParam(':customer', $customer);
$stmt ->bindParam(':manager', $manager);
$stmt ->bindParam(':vat', $vat);
$stmt ->bindParam(':total_price', $total_price);
$stmt ->bindParam(':buy_fee', $buy_fee);
$stmt ->bindParam(':install_fee', $install_fee);
$stmt ->bindParam(':contact_address', $contact_address);
$stmt ->bindParam(':workdeadline_a', $workdeadline_a);
$stmt ->bindParam(':workdeadline_b', $workdeadline_b);
$stmt ->bindParam(':test_time', $test_time);
$stmt ->bindParam(':freedeadline', $freedeadline);
$stmt ->bindParam(':trade_address', $trade_address);
$stmt ->bindParam(':tradedeadline', $tradedeadline);
$stmt ->bindParam(':progress', $progress);
$stmt ->bindParam(':status', $status);
$stmt ->bindParam(':created_at', $created_at);
$stmt ->bindParam(':created_by', $created_by);
$stmt ->execute();
header("HTTP/1.1 201 success!");
$conn->commit();
}
}catch(PDOException $e){
$conn->rollback();
echo $e->getMessage();
die('Error!:'.$e->getMessage());
}
}

139
wms/contract-repair/api/postNewContractData.php

@ -0,0 +1,139 @@
<?php
require_once("../conn.php");
include_once("./getFacilityNo.php");
include_once("./getComboNo.php");
include_once("./upload_chk.php");
ini_set ( 'date.timezone' , 'Asia/Taipei' );
if($_SERVER['REQUEST_METHOD'] != 'POST'){
exit();
}
//新梯簽回
if(isset($_POST["contractno"]) && $_POST["contractno"] != "" && isset($_POST['contracttype']) && $_POST['contracttype'] == 'm') {
try{
$created_at = date('Y-m-d H:i:s');
$created_by = $_POST["user_id"];
$contractno = $_POST["contractno"];
$customer = $_POST["customer"];
$manager = $_POST["manager"];
$vat = $_POST["vat"];
$case_name = $_POST["case_name"];
$linkman = $_POST["linkman"];
$lm_tel = $_POST["lm_tel"];
$address = $_POST["address"];
$salesman = $_POST["salesman"];
$qc = $_POST["qc"];
$contracttype = $_POST["contracttype"];
$files = !empty($_FILES['files']) ? $_FILES['files'] : null;
$files_id = null;
$fail_arr = [];
if(empty($contractno)) $fail_arr[] = '合約號為必填';
if(empty($customer)) $fail_arr[] = '客戶名稱為必填';
if(empty($manager)) $fail_arr[] = '負責人為必填';
if(empty($vat)) $fail_arr[] = '統編/身分證為必填';
if(empty($case_name)) $fail_arr[] = '案名為必填';
if(empty($linkman)) $fail_arr[] = '聯絡人為必填';
if(empty($lm_tel)) $fail_arr[] = '聯絡人電話為必填';
if(empty($address)) $fail_arr[] = '地址為必填';
if(empty($salesman)) $fail_arr[] = '營業員為必填';
if(empty($qc)) $fail_arr[] = '請選擇QC或官檢';
if(count($fail_arr) > 0) {
header("HTTP/1.1 422 Unprocessable Entity");
echo json_encode($fail_arr);
exit();
}
$conn->beginTransaction();
$sql_str = "SELECT accountid, name FROM account WHERE accountid = :accountid ORDER BY create_at DESC";
$stmt = $conn -> prepare($sql_str);
$stmt -> bindParam(":accountid",$salesman);
$stmt -> execute();
$saleman = $stmt->fetch(PDO::FETCH_ASSOC);
$salesman_name = $saleman['name'];
if(!empty($files)){
$englisharr = range('a', 'z');
$files = $_FILES['files'];
$newfiles = [];
foreach( $files as $file ){
$i = 0; //新陣列的索引編號
foreach( $file as $key => $val ){
$newfiles[$i]['name'] = $files['name'][$key];
$newfiles[$i]['type'] = $files['type'][$key];
$newfiles[$i]['tmp_name'] = $files['tmp_name'][$key];
$newfiles[$i]['error'] = $files['error'][$key];
$newfiles[$i]['size'] = $files['size'][$key];
$i++;
} //foreach 第2層 end
}
$max_size = 4096*4096; //設定允許上傳檔案容量的最大值(1M)
$allow_ext = array('jpeg', 'jpg', 'png','JPG','JPEG','PNG','GIF'); //設定允許上傳檔案的類型
$path = '../images/contracts/';
if (!file_exists($path)) { mkdir($path); }
$msg_result = ''; //負責接收所有檔案檢測後的回傳訊息
$datetime = (string)date('YmdHis');
$files_id = 'm' . $datetime; // 保養=>b + 日期時間
foreach( $newfiles as $key => $file ){
$randNum = rand(1000,9999);
$randEnglish = $englisharr[rand(0,25)];
$file_name = 'm' . (string)date('YmdHis') . $randNum . $randEnglish . $randNum.$file['name'];
$msg = upload_chk( $file,$path, $max_size, $allow_ext, $file_name );
if($msg==1){
$msg = '檔案傳送成功!';
$sql_str = "INSERT INTO contract_back_files (files_id, file_name, file_mime, file_size, created_at, created_by) VALUES (:files_id, :file_name, :file_mime, :file_size, :created_at, :created_by)";
$stmt = $conn -> prepare($sql_str);
$stmt -> bindParam(':files_id' ,$files_id);
$stmt -> bindParam(':file_name' ,$file_name);
$stmt -> bindParam(':file_mime' ,$file['type']);
$stmt -> bindParam(':file_size' ,$file['size']);
$stmt -> bindParam(':created_at' ,$created_at);
$stmt -> bindParam(':created_by' ,$created_by);
$stmt ->execute();
}else{
throw new PDOException('檔案上傳失敗:' . $msg);
}
$msg_result .= '第' . ($key+1) . '個上傳檔案的結果:' . $msg . '<br/>';
$src_name = $path.$file['name'];
if( file_exists($src_name) ){
//副檔名
$extname = pathinfo($src_name, PATHINFO_EXTENSION);
//主檔名
$basename = basename($src_name, '.'.$extname);
}
}
}else{
$files = null;
}
$sql_str = "INSERT INTO contract_m_signed_back (contract_no, customer, manager, vat, case_name, linkman, lm_tel, address, salesman, salesman_name, files_id, created_at, created_by, qc_official_type) VALUES (:contract_no, :customer, :manager, :vat, :case_name, :linkman, :lm_tel, :address, :salesman, :salesman_name, :files_id, :created_at, :created_by, :qc)";
$stmt = $conn -> prepare($sql_str);
$stmt -> bindParam(":contract_no",$contractno);
$stmt -> bindParam(":customer",$customer);
$stmt -> bindParam(":manager",$manager);
$stmt -> bindParam(":vat",$vat);
$stmt -> bindParam(":case_name",$case_name);
$stmt -> bindParam(":linkman",$linkman);
$stmt -> bindParam(":lm_tel",$lm_tel);
$stmt -> bindParam(":address",$address);
$stmt -> bindParam(":salesman",$salesman);
$stmt -> bindParam(":salesman_name",$salesman_name);
$stmt -> bindParam(":files_id",$files_id);
$stmt -> bindParam(":created_at",$created_at);
$stmt -> bindParam(":created_by",$created_by);
$stmt -> bindParam(":qc",$qc);
$stmt -> execute();
$result = $conn->commit();
if($result){
header("HTTP/1.1 201 Created");
}
}catch(PDOException $e){
$conn->rollback();
header("HTTP/1.1 500 Internal Server Error");
die('Error!:'.$e->getMessage());
}
}

190
wms/contract-repair/api/putContractData.php

@ -0,0 +1,190 @@
<?php
require_once("../conn.php");
include_once("./upload_chk.php");
ini_set('date.timezone', 'Asia/Taipei');
// echo json_encode(explode(',', $_POST['deletefiles']));
if (isset($_POST['contracttype']) && $_POST['contracttype'] == 'r' && isset($_POST["id"]) && $_POST['id'] != "") {
try {
$create_date = date('Y-m-d H:i:s');
$repair_no = !empty($POST['repair_no']) ? $_POST['repair_no'] : null;
$contractno = !empty($_POST['contractno']) ? $_POST['contractno'] : null;
$company = !empty($_POST['company']) ? $_POST['company'] : null;
$taxid = !empty($_POST['taxid']) ? $_POST['taxid'] : null;
$facilityno = !empty($_POST['facilityno']) ? $_POST['facilityno'] : null;
$address = !empty($_POST['address']) ? $_POST['address'] : null;
$type = !empty($_POST['type']) ? $_POST['type'] : null;
$invoice = !empty($_POST['invoice']) ? $_POST['invoice'] : null;
$repaireid = !empty($_POST['repaireid']) ? $_POST['repaireid'] : null;
$contract_status = !empty($_POST['contract_status']) ? $_POST['contract_status'] : null;
// $total_price = !empty($_POST['total_price']) ? $_POST['total_price'] : null;
$user_id = !empty($_POST['user_id']) ? $_POST['user_id'] : null;
$fail_arr = [];
// if (empty($repair_no)) $fail_arr[] = '號為必填';
if (empty($contractno)) $fail_arr[] = '合約號為必填';
if (empty($company)) $fail_arr[] = '客戶名稱為必填';
if (empty($taxid)) $fail_arr[] = '統一編號為必填';
if (empty($facilityno)) $fail_arr[] = '電梯號為必填';
if (empty($address)) $fail_arr[] = '工程地址為必填';
if (empty($type)) $fail_arr[] = '工程類行為必填';
if (empty($invoice)) $fail_arr[] = '發票抬頭為必填';
if (empty($repaireid)) $fail_arr[] = '維修人員為必填';
if (empty($contract_status)) $fail_arr[] = '工程類別為必填';
if (count($fail_arr) > 0) {
header("HTTP/1.1 442 Unprocessable Entity");
echo json_encode($fail_arr);
exit();
}
// $conn->beginTransaction();
$sql = "UPDATE contract_r_signed_back SET
repaireid = :repaireid,facilityno= :facilityno, invoice=:invoice, taxid=:taxid, address=:address,type=:type,contract_status=:contract_status,update_user=:update_user,update_date=:update_date
WHERE id = :id";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':repaireid', $repaireid);
$stmt->bindParam(':facilityno', $facilityno);
$stmt->bindParam(':invoice', $invoice);
$stmt->bindParam(':taxid', $taxid);
$stmt->bindParam(':address', $address);
$stmt->bindParam(':type', $type);
$stmt->bindParam(':contract_status', $contract_status);
$stmt->bindParam(':update_user', $user_id);
$stmt->bindParam(':update_date', $create_date);
$stmt->bindParam(':id', $_POST['id']);
// echo json_encode($sql);
// exit;
$stmt->execute();
// header("HTTP/1.1 204 NO Content");
// $conn->commit();
} catch (PDOException $e) {
// $conn->rollback();
header("HTTPP/1.1 500 Internal Server Error");
die('Error!:' . $e->getMessage());
}
}
// if (isset($_POST['contractno']) && $_POST['contractno'] != "" && isset($_POST["id"]) && $_POST['id'] != "") {
// try {
// $created_at = date('Y-m-d H:i:s');
// $created_by = $_POST['user_id'];
// $id = $_POST["id"];
// $contract_no = !empty($_POST['contractno']) ? $_POST['contractno'] : null;
// $customer = !empty($_POST['customer']) ? $_POST['customer'] : null;
// $manager = !empty($_POST['manager']) ? $_POST['manager'] : null;
// $vat = !empty($_POST['vat']) ? $_POST['vat'] : null;
// $case_name = !empty($_POST['case_name']) ? $_POST['case_name'] : null;
// $linkman = !empty($_POST['linkman']) ? $_POST['linkman'] : null;
// $lm_tel = !empty($_POST['lm_tel']) ? $_POST['lm_tel'] : null;
// $address = !empty($_POST['address']) ? $_POST['address'] : null;
// $salesman = !empty($_POST['salesman']) ? $_POST['salesman'] : null;
// $qc = !empty($_POST['qc']) ? $_POST['qc'] : null;
// $deletefiles = !empty($_POST['deletefiles']) ? $_POST['deletefiles'] : null;
// $files_id = !empty($_POST['files_id']) ? $_POST['files_id'] : null;
// $files = !empty($_FILES['files']) ? $_FILES['files'] : null;
// $deletefilesArr = explode(',', $_POST['deletefiles']);
// $fail_arr = [];
// if (empty($contract_no)) $fail_arr[] = '合約號為必填';
// if (empty($customer)) $fail_arr[] = '客戶名稱為必填';
// if (empty($manager)) $fail_arr[] = '負責人為必填';
// if (empty($vat)) $fail_arr[] = '統編/身分證為必填';
// if (empty($case_name)) $fail_arr[] = '案名為必填';
// if (empty($linkman)) $fail_arr[] = '聯絡人為必填';
// if (empty($lm_tel)) $fail_arr[] = '聯絡人電話為必填';
// if (empty($address)) $fail_arr[] = '地址為必填';
// if (empty($salesman)) $fail_arr[] = '營業員為必填';
// if (empty($qc)) $fail_arr[] = '請選擇QC或管檢';
// if (count($fail_arr) > 0) {
// header("HTTP/1.1 422 Unprocessable Entity");
// echo json_encode($fail_arr);
// exit();
// }
// $conn->beginTransaction();
// $sql_str = "UPDATE contract_m_signed_back SET contract_no=:contract_no, customer=:customer, manager=:manager, vat=:vat, case_name=:case_name, linkman=:linkman, lm_tel=:lm_tel, address=:address, salesman=:salesman, qc_official_type=:qc WHERE id = :id";
// $stmt = $conn->prepare($sql_str);
// $stmt->bindParam(':contract_no', $contract_no);
// $stmt->bindParam(':customer', $customer);
// $stmt->bindParam(':manager', $manager);
// $stmt->bindParam(':vat', $vat);
// $stmt->bindParam(':case_name', $case_name);
// $stmt->bindParam(':linkman', $linkman);
// $stmt->bindParam(':lm_tel', $lm_tel);
// $stmt->bindParam(':address', $address);
// $stmt->bindParam(':salesman', $salesman);
// $stmt->bindParam(':qc', $qc);
// $stmt->bindParam(':id', $id);
// $stmt->execute();
// if (!empty($deletefiles)) {
// $sql_str = "DELETE FROM contract_back_files WHERE id IN ($deletefiles)";
// $stmt = $conn->prepare($sql_str);
// $stmt->execute();
// }
// if (!empty($files)) {
// $englisharr = range('a', 'z');
// $files = $_FILES['files'];
// $newfiles = [];
// foreach ($files as $file) {
// $i = 0; //新陣列的索引編號
// foreach ($file as $key => $val) {
// $newfiles[$i]['name'] = $files['name'][$key];
// $newfiles[$i]['type'] = $files['type'][$key];
// $newfiles[$i]['tmp_name'] = $files['tmp_name'][$key];
// $newfiles[$i]['error'] = $files['error'][$key];
// $newfiles[$i]['size'] = $files['size'][$key];
// $i++;
// } //foreach 第2層 end
// }
// $max_size = 4096 * 4096; //設定允許上傳檔案容量的最大值(1M)
// $allow_ext = array('jpeg', 'jpg', 'png', 'JPG', 'JPEG', 'PNG', 'GIF'); //設定允許上傳檔案的類型
// $path = '../images/contracts/';
// if (!file_exists($path)) {
// mkdir($path);
// }
// $msg_result = ''; //負責接收所有檔案檢測後的回傳訊息
// $datetime = (string)date('YmdHis');
// $files_id = ($files_id !== null) ? $files_id : 'm' . $datetime; // 新梯=>m + 日期時間
// foreach ($newfiles as $key => $file) {
// $randNum = rand(1000, 9999);
// $randEnglish = $englisharr[rand(0, 25)];
// $file_name = 'm' . (string)date('YmdHis') . $randNum . $randEnglish . $randNum . $file['name'];
// $msg = upload_chk($file, $path, $max_size, $allow_ext, $file_name);
// if ($msg == 1) {
// $msg = '檔案傳送成功!';
// $sql_str = "INSERT INTO contract_back_files (files_id, file_name, file_mime, file_size, created_at, created_by) VALUES (:files_id, :file_name, :file_mime, :file_size, :created_at, :created_by)";
// $stmt = $conn->prepare($sql_str);
// $stmt->bindParam(':files_id', $files_id);
// $stmt->bindParam(':file_name', $file_name);
// $stmt->bindParam(':file_mime', $file['type']);
// $stmt->bindParam(':file_size', $file['size']);
// $stmt->bindParam(':created_at', $created_at);
// $stmt->bindParam(':created_by', $created_by);
// $stmt->execute();
// } else {
// throw new PDOException('檔案上傳失敗:' . $msg);
// }
// $msg_result .= '第' . ($key + 1) . '個上傳檔案的結果:' . $msg . '<br/>';
// $src_name = $path . $file['name'];
// if (file_exists($src_name)) {
// //副檔名
// $extname = pathinfo($src_name, PATHINFO_EXTENSION);
// //主檔名
// $basename = basename($src_name, '.' . $extname);
// }
// }
// } else {
// $files = null;
// }
// $conn->commit();
// } catch (PDOException $e) {
// $conn->rollback();
// header("HTTP/1.1 500 Internal Server Error");
// die('Error!:' . $e->getMessage());
// }
// }

0
wms/contract-repair/api/store_contract.php

61
wms/contract-repair/api/upload_chk.php

@ -0,0 +1,61 @@
<?php
function upload_chk( $file, $path, $max_size, $allow_ext, $file_name ){
$source_file_name = $file['name']; //上傳檔案的原來檔案名稱
$file_type = $file['type']; //上傳檔案的類型(副檔名)
$tmp_name = $file['tmp_name']; //上傳到暫存空間的路徑/檔名
$file_size = $file['size']; //上傳檔案的檔案大小(容量)
$error = $file['error']; //上傳工作傳回的錯誤訊息編號
$msg = ''; //負責記錄回傳的訊息
//1.判斷錯誤編號只有為0時表示沒有錯誤發生,才表示上傳成功 =================
if( $error == 0 ){
//取得檔案延伸的副檔名, 以下函數可以取得檔案延伸的副檔名
//pathinfo(上傳檔案的原來檔案名稱, PATHINFO_EXTENSION)
$ext = pathinfo($source_file_name, PATHINFO_EXTENSION);
$ext = strtolower($ext); //將延伸的副檔名轉小寫
//2.判斷上傳檔案的大小 ====================================
if( $file_size > $max_size ){
//當目前檔案容量超過容量限制時, 以下準備顯示的資訊
if( $max_size >= 4096*4096 ){
$max_size /= (4096*4096);
$max_size .= 'M';
}elseif( $max_size >= 4096 ){
$max_size /= 4096;
$max_size .= 'K';
}
$msg ='上傳檔案過大,請選擇容量小於 '.$max_size.' 的檔案';
//3.判斷檔案類型 ===========================================
//in_array($ext, $allow_ext) 判斷 $ext變數的值 是否在 $allow_ext 這個陣列變數中
}elseif( !in_array( $ext, $allow_ext ) ){
$allow_str = ''; //準備將允許檔案類型的陣列內容, 組合成字串
foreach( $allow_ext as $key=>$value ){
//if的縮寫語法:條件?成立執行的工作:不成立執行的工作;
$key==0? $allow_str.= $value : $allow_str.=', '.$value;
}
$msg = '檔案類型不符合,請選擇 '.$allow_str.' 檔案';
//4.以上條件都沒問題的話, 則進行最後else中的工作===============
}else{
//搬移檔案 move_uploaded_file(要搬移的檔案, 目的地位置及目的檔案名稱), 成功傳回true(1)
$msg = @move_uploaded_file($tmp_name, $path.$file_name);
}
}else{
//這裡表示上傳有錯誤, 匹配錯誤編號顯示對應的訊息 ======================================
switch ($error) {
case 1: $msg = '上傳檔案超過 upload_max_filesize 容量最大值'; break;
case 2: $msg = '上傳檔案超過 post_max_size 總容量最大值'; break;
case 3: $msg = '檔案只有部份被上傳'; break;
case 4: $msg = '沒有檔案被上傳'; break;
case 6: $msg = '找不到主機端暫存檔案的目錄位置'; break;
case 7: $msg = '檔案寫入失敗'; break;
case 8: $msg = '上傳檔案被PHP程式中斷,表示主機端系統錯誤'; break;
}
} //if( $error == 0 ){ ..... end
return $msg; //回傳$msg的結果
}

43
wms/contract-repair/conn.php

@ -0,0 +1,43 @@
<?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'; //設定字元編碼
//建立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; //關閉資料庫的連線

214
wms/contract-repair/contract-repair-edit.php

@ -0,0 +1,214 @@
<?php
include("../header.php");
require_once("./conn.php");
$id = $_GET['contractid'];
$sql_str = "SELECT a.*,b.name FROM contract_r_signed_back AS a LEFT JOIN account AS b ON a.repaireid = b.accountid
WHERE a.id = :id ORDER BY id DESC";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':id', $id);
$stmt->execute();
$contract = $stmt->fetch(PDO::FETCH_ASSOC);
// echo '<pre>';
// print_r($contract['contract_status'] + 1);
// echo '</pre>';
// $files_id = $contract['files_id'];
// $sql_str = "SELECT * FROM contract_back_files WHERE files_id = :files_id ";
// $stmt = $conn->prepare($sql_str);
// $stmt->bindParam(':files_id', $files_id);
// $stmt->execute();
// $files= $stmt->fetchAll(PDO::FETCH_ASSOC);
// $files = json_encode($files);
$accounttype = "M";
$sql_str = "SELECT accountid, name FROM account WHERE accounttype = :accounttype";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(":accounttype", $accounttype);
$stmt->execute();
$persons = $stmt->fetchAll(PDO::FETCH_ASSOC);
$persons = array_map(function ($person) {
return [
'view' => $person['accountid'] . '-' . $person['name'],
'value' => $person['accountid'],
'name' => $person['name']
];
}, $persons);
$contract_stauts = ["合約簽回", "採購", "工程發包", "工程中", "修理完成"];
?>
<link rel="stylesheet" href="./styles/style.css">
<link rel="stylesheet" href="semantic/dist/semantic.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css" integrity="sha512-z3gLpd7yknf1YoNbCzqRKc4qyor8gaKU1qmn+CShxbuBusANI9QpRohGBreCFkKxLhei6S9CQXFEbbKuqLg0DA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
<script defer src="./js/alpinejs/cdn.min.js"></script>
<script src="./js/axios/axios.min.js"></script>
<!-- <script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script> -->
<script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0/dist/fancybox/fancybox.umd.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0/dist/fancybox/fancybox.css" />
<div class="contract-management" x-data='contract_edit'>
<div class="form" method="post" id="form" enctype="multipart/form-data">
<input type="hidden" name='form_name' value="main_form" />
<div>
<table class="table table-bordered query-table table-striped table-bordered display compact" style="width:99%;margin-left:.5%">
<thead>
<tr>
<td colspan="8">
<h3 style='text-align:center'>合約管理(修理)</h3>
</td>
</tr>
</thead>
<tbody style="font-weight: bolder;margin-bottom: 20px">
<tr>
<td colspan="7" style='vertical-align: middle;border-right:0px;'>
<h4>檢視合約</h4>
</td>
<td class="text-right" style='border-left:0px;'>
<button type="button" id="btn_close" class="btn btn-default" onclick="window.history.back();">返回</button>
<button type="button" id="btn_close" class="btn btn-default" onclick="window.close();">關閉分頁</button>
</td>
</tr>
<tr>
<td style="vertical-align: middle">立約人</td>
<td>
<input class="form-control disabled_select" type="text" x-model="data.company">
<p class="alerttext" x-show="data.company==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
</td>
<td style="vertical-align: middle">維保人員</td>
<td style="vertical-align: middle">
<select class="repaireid" id="repaireid" x-model="data.repaireid">
<option value="<?php echo $contract['repaireid'] ?>"><?php echo $contract['repaireid'] . '-' . $contract['name'] ?></option>
<?php foreach ($persons as $person) : ?>
<option value="<?php echo $person['value']; ?>"><?php echo $person['view']; ?></option>
<?php endforeach ?>
</select>
<p class="alerttext" x-show="data.repaireid==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
</td>
<td style="vertical-align: middle">電梯編號</td>
<td>
<input class="form-control disabled_select" type="text" name="uscc" x-model="data.facilityno">
<p class="alerttext" x-show="data.facilityno==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
</td>
<td style="vertical-align: middle">報價單編號</td>
<td>
<input class="form-control disabled_select" type="text" name="uscc" x-model="data.repair_no">
<p class="alerttext" x-show="data.repair_no==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
</td>
</tr>
<tr>
<td style="vertical-align: middle">工程類別</td>
<td>
<input class="form-control disabled_select" type="text" name="uscc" x-model="data.type">
<p class="alerttext" x-show="data.type==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
</td>
<td style="vertical-align: middle">簽訂時間</td>
<td>
<input class="form-control disabled_select" type="text" name="sign_date" x-model="data.sign_date">
<p class="alerttext" x-show="data.sign_date==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
</td>
<td style="vertical-align: middle">發票抬頭</td>
<td>
<input class="form-control disabled_select" type="text" name="uscc" x-model="data.invoice">
<p class="alerttext" x-show="data.invoice==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
</td>
<td style="vertical-align: middle">統一編號</td>
<td>
<input class="form-control disabled_select" type="text" x-model="data.taxid">
<p class="alerttext" x-show="data.taxid==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
</td>
</tr>
<tr>
<td style="vertical-align: middle">工程地址</td>
<td colspan=3>
<input class="form-control disabled_select" type="text" x-model="data.address">
<p class="alerttext" x-show="data.address==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
</td>
<!-- <td style="vertical-align: middle">附件上傳</td>
<td colspan=3>
<input type="file" name="file[]" multiple draggable="true" @change="uploadFiles($event)" />
<p class="alerttext" x-show="data.lm_tel==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
</td> -->
<td style="vertical-align: middle">工程進度</td>
<td style="vertical-align: middle">
<select class="contract_status" id="contract_status" x-model="data.contract_status">
<?php foreach ($contract_stauts as $key => $status) : ?>
<option value="<?php echo $key + 1 ?>"><?php echo $status; ?></option>
<?php endforeach ?>
</select>
<p class="alerttext" x-show="data.contract_status==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
</td>
<td></td>
<td></td>
</tr>
<!-- <tr>
<td style="vertical-align: middle">附件</td>
<td colspan=7>
<div class="images">
<template x-for="file in data.files" :key="file.id">
<div class="image">
<a :href="'./images/contracts/' + file.file_name" data-fancybox="gallery" :data-src="'./images/contracts/' + file.file_name" data-caption="">
<img :src="'./images/contracts/' + file.file_name" />
</a>
<i class="fas fa-times" @click="deleteFileFn(file.id)"></i>
</div>
</template>
</div>
</td>
</tr> -->
</tbody>
</table>
<button @click="save()" :disabled="isLoading" type="button" class="btn btn-primary btn-lg pull-right savebtn">
<template x-if="!isLoading">
<span>更新</span>
</template>
<template x-if="isLoading">
<div class="loader"></div>
</template>
</button>
<button type="button" class="btn btn-primary btn-lg pull-right savebtn" @click="window.location.href='./contract-repair-management.php?<?php echo $token_link; ?>'">回列表</button>
</div>
</div>
</div>
<script src="./js/jquery/jquery-3.1.1.min.js"></script>
<script src="semantic/dist/semantic.min.js"></script>
<script src="./js/alpine.js"></script>
<script>
const user_id = '<?php echo $user_id; ?>';
const user_name = '<?php echo $user_name; ?>';
const id = <?php echo $contract['id'] ?>;
const repair_no = '<?php echo $contract['repair_no']; ?>';
const contractno = '<?php echo $contract['contractno']; ?>';
const company = '<?php echo $contract['company']; ?>';
const taxid = '<?php echo $contract['taxid']; ?>';
const facilityno = '<?php echo $contract['facilityno']; ?>';
const address = '<?php echo $contract['address']; ?>';
const type = '<?php echo $contract['type']; ?>';
const repaireid = '<?php echo $contract['repaireid']; ?>';
const total_price = '<?php echo $contract['total_price']; ?>';
const sign_date = '<?php echo $contract['sign_date']; ?>';
const invoice = '<?php echo $contract['invoice']; ?>'
const contract_status = '<?php echo $contract['contract_status']; ?>'
// $('#table_index').DataTable(
// {
// "order": [
// [0, "desc"],
// ]
// }
// );
// Fancybox.bind('[data-fancybox="gallery"]', {
// });
</script>

185
wms/contract-repair/contract-repair-input.php

@ -0,0 +1,185 @@
<?php
include("../header.php");
require_once("./conn.php");
include_once("./api/getFacilityNo.php");
$accounttype = "B";
$sql_str = "SELECT accountid, name FROM account WHERE accounttype = :accounttype";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':accounttype', $accounttype);
$stmt->execute();
$workers = $stmt->fetchAll(PDO::FETCH_ASSOC);
$accounttype = "M";
$sql_str = "SELECT id,accountid, name FROM account WHERE accounttype = :accounttype";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':accounttype', $accounttype);
$stmt->execute();
$contractpersons = $stmt->fetchAll(PDO::FETCH_ASSOC);
$persons = array_map(function ($person) {
return [
'view' => $person['accountid'] . '-' . $person['name'],
'value' => $person['accountid'],
'name' => $person['name']
];
}, $contractpersons);
$contract_stauts = ["合約簽回", "採購", "工程發包", "工程中", "修理完成"];
?>
<link rel="stylesheet" href="./styles/style.css">
<link rel="stylesheet" href="semantic/dist/semantic.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css" integrity="sha512-z3gLpd7yknf1YoNbCzqRKc4qyor8gaKU1qmn+CShxbuBusANI9QpRohGBreCFkKxLhei6S9CQXFEbbKuqLg0DA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
<script defer src="./js/alpinejs/cdn.min.js"></script>
<script src="./js/axios/axios.min.js"></script>
<div class="contract-input-component" x-data="contractRepair">
<div class="form" method="post" id="form" enctype="multipart/form-data">
<input type="hidden" name='form_name' value="main_form" />
<div>
<table class="table table-bordered query-table table-striped table-bordered display compact" style="width:99%;margin-left:.5%">
<thead>
<tr>
<td colspan="8">
<h3 style='text-align:center'>合約入力(修理)</h3>
</td>
</tr>
</thead>
<template x-if="step==1">
<tbody style="font-weight: bolder;margin-bottom: 20px" x-show="step==1">
<tr>
<td style="vertical-align: middle">報價單編號</td>
<td colspan="5">
<input class="form-control" @keyup="nextStepKeyupFn($event)" type="text" name="repair_no" x-model="data.repair_no">
</td>
<td colspan="2" style="vertical-align: middle">
<label for="customize">
<input type="checkbox" x-model="customize" id="customize" />自定義欄位
</label>
</td>
</tr>
</tbody>
</template>
<template x-if="step==2">
<!-- <template x-if="step==1"> -->
<tbody style="font-weight: bolder;margin-bottom: 20px" x-show="step==2">
<!-- <tbody style="font-weight: bolder;margin-bottom: 20px" x-show="step==1"> -->
<tr>
<td colspan="7" style='vertical-align: middle;border-right:0px;'>
<h4>業務確認項</h4>
</td>
<td class="text-right" style='border-left:0px;'>
<button type="button" id="btn_close" class="btn btn-default" onclick="window.history.back();">返回</button>
<button type="button" id="btn_close" class="btn btn-default" onclick="window.close();">關閉分頁</button>
</td>
</tr>
<tr>
<td style="vertical-align: middle">立約人</td>
<td>
<input type="text" x-model="data.company" />
<p class="alerttext" x-show="data.company==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
</td>
<td style="vertical-align: middle">維保人員</td>
<td style="vertical-align: middle">
<select class="repaireid" id="repaireid" x-model="data.repairerid">
<option value="<?php echo $contract['repaireid'] ?>"><?php echo $contract['repairerid'] . '-' . $contract['name'] ?></option>
<?php foreach ($persons as $person) : ?>
<option value="<?php echo $person['value']; ?>"><?php echo $person['view']; ?></option>
<?php endforeach ?>
</select>
<p class="alerttext" x-show="data.repaireid==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
</td>
<td style="vertical-align: middle">電梯編號</td>
<td>
<input class="form-control disabled_select" type="text" name="facilityno" x-model="data.facilityno">
<p class="alerttext" x-show="data.facilityno==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
</td>
<td style="vertical-align: middle">報價單編號</td>
<td style="vertical-align: middle">
<input class="form-control disabled_select" type="text" name="repair_no" x-model="data.repair_no" disabled="disabled">
<p class="alerttext" x-show="data.repair_no==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
</td>
</tr>
<tr>
<td style="vertical-align: middle">工程進度</td>
<td>
<input class="form-control disabled_select" type="text" name="type" x-model="data.type">
<p class="alerttext" x-show="data.type==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
</td>
<td style="vertical-align: middle">簽訂時間</td>
<td>
<input class="form-control disabled_select" type="date" name="sign_date" x-model="data.sign_date">
<p class="alerttext" x-show="data.sign_date==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
</td>
<td style="vertical-align: middle">發票抬頭</td>
<td>
<input class="form-control disabled_select" type="text" name="invoice" x-model="data.invoice">
<p class="alerttext" x-show="data.invoice==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
</td>
<td style="vertical-align: middle">統一編號</td>
<td>
<input class="form-control disabled_select" type="text" name="taxid" x-model="data.taxid">
<p class="alerttext" x-show="data.taxid==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
</td>
</tr>
<tr>
<td style="vertical-align: middle">工程地址</td>
<td colspan=3>
<input class="form-control disabled_select" type="text" x-model="data.address">
<p class="alerttext" x-show="data.address==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
</td>
<td style="vertical-align: middle">工程確認</td>
<td style="vertical-align: middle">
<select class="contract_status" id="contract_status" x-model="data.contract_status">
<option value="">選擇工程類別</option>
<?php foreach ($contract_stauts as $key => $status) : ?>
<option value="<?php echo $key + 1; ?>"><?php echo $status; ?></option>
<?php endforeach ?>
</select>
<p class="alerttext" x-show="data.contract_status==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
</td>
<td></td>
<td></td>
</tr>
</tbody>
</template>
</table>
<button x-show="step==2" @click="save()" :disabled="isLoading" type="button" class="btn btn-primary btn-lg pull-right savebtn">
<template x-if="!isLoading">
<span>存檔</span>
</template>
<template x-if="isLoading">
<div class="loader"></div>
</template>
</button>
<button x-show="step<=1" @click="nextStepFn()" type="button" class="btn btn-primary btn-lg pull-right savebtn" :disabled="isLoading">
<template x-if="!isLoading">
<span>下一步</span>
</template>
<template x-if="isLoading">
<div class="loader"></div>
</template>
</button>
<button x-show="step>1" @click="preStepFn()" :disabled="isLoading" type="button" class="btn btn-primary btn-lg pull-right savebtn">
<template x-if="!isLoading">
<span>上一步</span>
</template>
<template x-if="isLoading">
<div class="loader"></div>
</template>
</button>
</div>
</div>
</div>
<script src="./js/jquery/jquery-3.1.1.min.js"></script>
<script src="semantic/dist/semantic.min.js"></script>
<script src="./js/alpine.js"></script>
<script>
const user_id = '<?php echo $user_id; ?>'
const user_name = '<?php echo $user_name; ?>'
</script>

131
wms/contract-repair/contract-repair-management.php

@ -0,0 +1,131 @@
<?php
include("../header.php");
require_once("./conn.php");
$sql_str = "SELECT * FROM contract_r_signed_back WHERE 1=1 AND delete_status = 1 ORDER BY id DESC";
$stmt = $conn->prepare($sql_str);
$stmt->execute();
$contracts = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<link rel="stylesheet" href="./styles/style.css">
<link rel="stylesheet" href="semantic/dist/semantic.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css" integrity="sha512-z3gLpd7yknf1YoNbCzqRKc4qyor8gaKU1qmn+CShxbuBusANI9QpRohGBreCFkKxLhei6S9CQXFEbbKuqLg0DA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
<script defer src="./js/alpinejs/cdn.min.js"></script>
<script src="./js/axios/axios.min.js"></script>
<div class="contract-management" x-data="{
deleteFn(id,user){
if(confirm('確定要刪除嗎?')){
axios.get('./api/deleteNewContractData.php?contracttype=r&contractid='+id+'&user_id='+user).then(res=> {
console.log(res);
if(res.status === 204){
alert('刪除成功!')
location.reload();
}
})
}
}
}">
<div style="overflow-x:auto;margin-top:12px">
<a href="contract-repair-input.php?function_name=repair&<?php echo $token_link; ?>" class="btn btn-info btn-sm">
<span class="glyphicon glyphicon-plus"></span>
</a>
<table id="table_index" class="table table-striped table-bordered" style="width:100%">
<thead>
<tr>
<th>項次</th>
<th>合約號</th>
<th>客戶名稱</th>
<th>統編</th>
<th>總金額</th>
<th>工程進度</th>
<th>建檔者</th>
<th>建立時間</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<?php foreach ($contracts as $key => $contract) : ?>
<tr>
<td><?php echo $contract['id']; ?></td>
<td><?php echo $contract['contractno'] ?></td>
<td><?php echo $contract['company'] ?></td>
<td><?php echo $contract['taxid'] ?></td>
<td><?php echo $contract['total_price'] ?></td>
<th><?php if ($contract['contract_status'] == 1) {
echo '合約簽回';
} else if ($contract['contract_status'] == 2) {
echo '採購';
} else if ($contract['contract_status'] == 3) {
echo '工程發包';
} else if ($contract['contract_status'] == 4) {
echo '工程中';
} else if ($contract['contract_status'] == 5) {
echo '修理完成';
}
?></th>
<td><?php echo $contract['create_user'] ?></td>
<td><?php echo $contract['create_date'] ?></td>
<td style="width:30px">
<p>
<a href="contract-repair-edit.php?&contractid=<?php echo $contract['id']; ?>&function_name=repair&<?php echo $token_link; ?>" class="btn btn-info btn-sm">
<span class="glyphicon glyphicon-pencil"></span>
</a>
<a href="javascript:;" class="btn btn-info btn-sm" style="margin-left:10px;" @click="deleteFn(<?php echo $contract['id']; ?>,'<?php echo $user_id; ?>')">
<span class="glyphicon glyphicon-remove"></span>
</a>
</p>
</td>
</tr>
<?php endforeach ?>
</tbody>
</table>
</div>
</div>
<style>
table {
table-layout: fixed;
width: 100%;
}
td {
word-wrap: break-word;
}
img {
width: 125px;
}
.width_style_1 {
width: 125px;
}
table {
width: 100%;
}
#table_index_filter {
float: right;
}
#table_index_paginate {
float: right;
}
label {
display: inline-flex;
margin-bottom: .5rem;
margin-top: .5rem;
}
</style>
<script src="semantic/dist/semantic.min.js"></script>
<script>
$('#table_index').DataTable({
"order": [
[0, "desc"],
]
});
</script>

1507
wms/contract-repair/js/alpine.js

File diff suppressed because it is too large

5
wms/contract-repair/js/alpinejs/cdn.min.js

File diff suppressed because one or more lines are too long

25
wms/contract-repair/js/axios.js

@ -0,0 +1,25 @@
const axiosClient = axios.create({
baseURL : `${import.meta.env.VITE_API_BASE_URL}/api`,
});
axiosClient.interceptors.request.use( (config)=> {
config.headers.Authorization = `Bearer ${store.state.user.token}`
return config;
}, (error)=> {
return Promise.reject(error);
});
axiosClient.interceptors.response.use( (response)=> {
return response;
}, (error)=>{
if(error.response.status === 401){
store.commit('setToken', null)
sessionStorage.removeItem('TOKEN')
router.push({name:'login'})
}
throw error;
});
export default axiosClient;

2
wms/contract-repair/js/axios/axios.min.js

File diff suppressed because one or more lines are too long

48
wms/contract-repair/js/el.js

@ -0,0 +1,48 @@
export default {
data() {
return {
options: [],
value: [],
list: [],
loading: false,
states: ["Alabama", "Alaska", "Arizona",
"Arkansas", "California", "Colorado",
"Connecticut", "Delaware", "Florida",
"Georgia", "Hawaii", "Idaho", "Illinois",
"Indiana", "Iowa", "Kansas", "Kentucky",
"Louisiana", "Maine", "Maryland",
"Massachusetts", "Michigan", "Minnesota",
"Mississippi", "Missouri", "Montana",
"Nebraska", "Nevada", "New Hampshire",
"New Jersey", "New Mexico", "New York",
"North Carolina", "North Dakota", "Ohio",
"Oklahoma", "Oregon", "Pennsylvania",
"Rhode Island", "South Carolina",
"South Dakota", "Tennessee", "Texas",
"Utah", "Vermont", "Virginia",
"Washington", "West Virginia", "Wisconsin",
"Wyoming"]
}
},
mounted() {
this.list = this.states.map(item => {
return { value: `value:${item}`, label: `label:${item}` };
});
},
methods: {
remoteMethod(query) {
if (query !== '') {
this.loading = true;
setTimeout(() => {
this.loading = false;
this.options = this.list.filter(item => {
return item.label.toLowerCase()
.indexOf(query.toLowerCase()) > -1;
});
}, 200);
} else {
this.options = [];
}
}
}
}

4
wms/contract-repair/js/jquery/jquery-3.1.1.min.js

File diff suppressed because one or more lines are too long

5
wms/contract-repair/semantic/.browserlistrc

@ -0,0 +1,5 @@
last 2 versions
> 1%
opera 12.1
bb 10
android 4

322
wms/contract-repair/semantic/.csscomb.json

@ -0,0 +1,322 @@
{
"remove-empty-rulesets": true,
"always-semicolon": true,
"color-case": "upper",
"block-indent": " ",
"color-shorthand": false,
"element-case": "lower",
"leading-zero": true,
"space-after-colon": " ",
"space-before-combinator": " ",
"space-after-combinator": " ",
"space-between-declarations": "\n",
"space-before-opening-brace": " ",
"space-after-opening-brace": "\n",
"space-after-selector-delimiter": "\n",
"space-before-selector-delimiter": "",
"space-before-closing-brace": "\n",
"strip-spaces": true,
"tab-size": true,
"vendor-prefix-align": true,
"sort-order": [
[
"display",
"visibility",
"float",
"clear",
"overflow",
"overflow-x",
"overflow-y",
"-webkit-box-sizing",
"-moz-box-sizing",
"box-sizing",
"-ms-overflow-x",
"-ms-overflow-y",
"clip",
"zoom",
"flex-direction",
"flex-order",
"flex-pack",
"flex-align"
],
[
"position",
"z-index",
"top",
"right",
"bottom",
"left"
],
[
"font",
"font-family",
"font-size",
"font-weight",
"font-style",
"font-variant",
"font-size-adjust",
"font-stretch",
"font-effect",
"font-emphasize",
"font-emphasize-position",
"font-emphasize-style",
"font-smooth",
"line-height"
],
[
"width",
"min-width",
"max-width",
"height",
"min-height",
"max-height",
"margin",
"margin-top",
"margin-right",
"margin-bottom",
"margin-left",
"padding",
"padding-top",
"padding-right",
"padding-bottom",
"padding-left"
],
[
"table-layout",
"empty-cells",
"caption-side",
"border-spacing",
"border-collapse",
"list-style",
"list-style-position",
"list-style-type",
"list-style-image"
],
[
"opacity",
"filter:progid:DXImageTransform.Microsoft.Alpha(Opacity",
"-ms-filter:\\'progid:DXImageTransform.Microsoft.Alpha",
"-ms-interpolation-mode",
"color",
"border",
"border-width",
"border-style",
"border-color",
"border-top",
"border-top-width",
"border-top-style",
"border-top-color",
"border-right",
"border-right-width",
"border-right-style",
"border-right-color",
"border-bottom",
"border-bottom-width",
"border-bottom-style",
"border-bottom-color",
"border-left",
"border-left-width",
"border-left-style",
"border-left-color",
"-webkit-border-radius",
"-moz-border-radius",
"border-radius",
"-webkit-border-top-left-radius",
"-moz-border-radius-topleft",
"border-top-left-radius",
"-webkit-border-top-right-radius",
"-moz-border-radius-topright",
"border-top-right-radius",
"-webkit-border-bottom-right-radius",
"-moz-border-radius-bottomright",
"border-bottom-right-radius",
"-webkit-border-bottom-left-radius",
"-moz-border-radius-bottomleft",
"border-bottom-left-radius",
"-webkit-border-image",
"-moz-border-image",
"-o-border-image",
"border-image",
"-webkit-border-image-source",
"-moz-border-image-source",
"-o-border-image-source",
"border-image-source",
"-webkit-border-image-slice",
"-moz-border-image-slice",
"-o-border-image-slice",
"border-image-slice",
"-webkit-border-image-width",
"-moz-border-image-width",
"-o-border-image-width",
"border-image-width",
"-webkit-border-image-outset",
"-moz-border-image-outset",
"-o-border-image-outset",
"border-image-outset",
"-webkit-border-image-repeat",
"-moz-border-image-repeat",
"-o-border-image-repeat",
"border-image-repeat",
"outline",
"outline-width",
"outline-style",
"outline-color",
"outline-offset",
"background",
"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader",
"background-color",
"background-image",
"background-repeat",
"background-attachment",
"background-position",
"background-position-x",
"-ms-background-position-x",
"background-position-y",
"-ms-background-position-y",
"-webkit-background-clip",
"-moz-background-clip",
"background-clip",
"background-origin",
"-webkit-background-size",
"-moz-background-size",
"-o-background-size",
"background-size",
"box-decoration-break",
"-webkit-box-shadow",
"-moz-box-shadow",
"box-shadow",
"filter:progid:DXImageTransform.Microsoft.gradient",
"-ms-filter:\\'progid:DXImageTransform.Microsoft.gradient",
"text-shadow"
],
[
"content",
"quotes",
"counter-reset",
"counter-increment",
"resize",
"cursor",
"-webkit-user-select",
"-moz-user-select",
"-ms-user-select",
"user-select",
"nav-index",
"nav-up",
"nav-right",
"nav-down",
"nav-left",
"-webkit-transition",
"-moz-transition",
"-ms-transition",
"-o-transition",
"transition",
"-webkit-transition-delay",
"-moz-transition-delay",
"-ms-transition-delay",
"-o-transition-delay",
"transition-delay",
"-webkit-transition-timing-function",
"-moz-transition-timing-function",
"-ms-transition-timing-function",
"-o-transition-timing-function",
"transition-timing-function",
"-webkit-transition-duration",
"-moz-transition-duration",
"-ms-transition-duration",
"-o-transition-duration",
"transition-duration",
"-webkit-transition-property",
"-moz-transition-property",
"-ms-transition-property",
"-o-transition-property",
"transition-property",
"-webkit-transform",
"-moz-transform",
"-ms-transform",
"-o-transform",
"transform",
"-webkit-transform-origin",
"-moz-transform-origin",
"-ms-transform-origin",
"-o-transform-origin",
"transform-origin",
"-webkit-animation",
"-moz-animation",
"-ms-animation",
"-o-animation",
"animation",
"-webkit-animation-name",
"-moz-animation-name",
"-ms-animation-name",
"-o-animation-name",
"animation-name",
"-webkit-animation-duration",
"-moz-animation-duration",
"-ms-animation-duration",
"-o-animation-duration",
"animation-duration",
"-webkit-animation-play-state",
"-moz-animation-play-state",
"-ms-animation-play-state",
"-o-animation-play-state",
"animation-play-state",
"-webkit-animation-timing-function",
"-moz-animation-timing-function",
"-ms-animation-timing-function",
"-o-animation-timing-function",
"animation-timing-function",
"-webkit-animation-delay",
"-moz-animation-delay",
"-ms-animation-delay",
"-o-animation-delay",
"animation-delay",
"-webkit-animation-iteration-count",
"-moz-animation-iteration-count",
"-ms-animation-iteration-count",
"-o-animation-iteration-count",
"animation-iteration-count",
"-webkit-animation-direction",
"-moz-animation-direction",
"-ms-animation-direction",
"-o-animation-direction",
"animation-direction",
"text-align",
"-webkit-text-align-last",
"-moz-text-align-last",
"-ms-text-align-last",
"text-align-last",
"vertical-align",
"white-space",
"text-decoration",
"text-emphasis",
"text-emphasis-color",
"text-emphasis-style",
"text-emphasis-position",
"text-indent",
"-ms-text-justify",
"text-justify",
"letter-spacing",
"word-spacing",
"-ms-writing-mode",
"text-outline",
"text-transform",
"text-wrap",
"text-overflow",
"-ms-text-overflow",
"text-overflow-ellipsis",
"text-overflow-mode",
"-ms-word-wrap",
"word-wrap",
"word-break",
"-ms-word-break",
"-moz-tab-size",
"-o-tab-size",
"tab-size",
"-webkit-hyphens",
"-moz-hyphens",
"hyphens",
"pointer-events"
]
]
}

18
wms/contract-repair/semantic/.csslintrc

@ -0,0 +1,18 @@
{
"vendor-prefix" : true,
"duplicate-properties" : true,
"display-property-grouping" : true,
"empty-rules" : true,
"adjoining-classes" : false,
"box-model" : false,
"compatible-vendor-prefixes" : false,
"box-sizing" : false,
"duplicate-background-images" : false,
"floats" : false,
"important" : false,
"overqualified-elements" : false,
"rules-count" : false,
"shorthand" : false,
"zero-units" : false
}

24
wms/contract-repair/semantic/.github/ISSUE_TEMPLATE.md

@ -0,0 +1,24 @@
✖ USAGE QUESTIONS → Use these dedicated resources:
Docs - http://www.semantic-ui.com
Chat - https://gitter.im/Semantic-Org/Semantic-UI
SO - https://stackoverflow.com/questions/tagged/semantic-ui?sort=votes
✔ Enhancements → Be specific. Assume backwards compatibility is a necessity. Suggest implementation when possible.
✔ BUGS → ❤❤❤. Keep in mind some bugs may not be immediately fixable due to backwards compatibility or CSS limitations.
### Title (Put in field above)
Use the format: [Component] Component Should Do X
i.e. [Checkbox] onChange Should Fire When Update Triggered via DOM
### Steps
### Expected Result
### Actual Result
### Version
x.y.z
### Testcase
[Fork, update, and replace to show the bug]:
https://jsfiddle.net/ca0rovs3/

28
wms/contract-repair/semantic/.github/PULL_REQUEST_TEMPLATE.md

@ -0,0 +1,28 @@
✖ Multiple features in one PR
✖ New Components Unless Previously Discussed with Maintainers (Consider creating separate repo, I'll link out to you)
✔ Add comments to complex/confusing code in "code" view of PR
✔ BUGS → This form is required:
✔ Enhancements → Only specific enhancements with detailed descriptions.
### Issue Titles
Use the format: [Component] Adds Support for Thing
For example: [Build Tools] Adds Source Map Support
Or: [Button] Fixes Inheritance for Red Basic Active State
### Closed Issues
#222 #333 #444
### Description
### Testcase
[Show before with this fiddle]
https://jsfiddle.net/ca0rovs3/
[Consider showing "fixed" case with your fiddle]()
You can link to your JS using https://rawgit.com/

33
wms/contract-repair/semantic/.github/stale.yml

@ -0,0 +1,33 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 90
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 90
# Issues with these labels will never be considered stale
exemptLabels:
- pinned
- security
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
There has been no activity in this thread for 90 days. While we care about
every issue and we’d love to see this fixed, the core team’s time is
limited so we have to focus our attention on the issues that are most
pressing. Therefore, we will likely not be able to get to this one.
However, PRs for this issue will of course be accepted and welcome!
If there is no more activity in the next 90 days, this issue will be closed
automatically for housekeeping. To prevent this, simply leave a reply here.
Thanks!
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: >
This issue will be closed due to lack of activity for 6 months. If you’d
like this to be reopened, just leave a comment; we do monitor them!

38
wms/contract-repair/semantic/.gitignore

@ -0,0 +1,38 @@
node_modules/
test/coverage/
coverage/
src/**/site/
theme.config
semantic.json
tasks/**/oauth.js
package-lock.json
# Numerous always-ignore extensions
*.diff
*.err
*.orig
*.log
*.rej
*.swo
*.swp
*.zip
*.vi
*~
*.sass-cache
*.ruby-version
# OS or Editor folders
.DS_Store
._*
Thumbs.db
.cache
.project
.settings
.tmproj
.docpad.db
*.esproj
nbproject
*.sublime-project
*.sublime-workspace
.build*
.idea

38
wms/contract-repair/semantic/.jshintrc

@ -0,0 +1,38 @@
{
"globals": {
"$" : true,
"afterEach" : true,
"AnimatedPNG" : true,
"beforeEach" : true,
"console" : true,
"describe" : true,
"expect" : true,
"it" : true,
"jQuery" : true,
"loadFixtures" : true,
"module" : true,
"requestAnimationFrame" : true,
"require" : true,
"semantic" : true
},
"debug" : false,
"devel" : true,
"browser" : true,
"curly" : true,
"immed" : true,
"latedef" : true,
"loopfunc" : true,
"noarg" : true,
"undef" : true,
"sub" : true,
"loopfunc" : true,
"laxbreak" : true,
"evil" : true,
"indent" : false,
"trailing" : false
}

58
wms/contract-repair/semantic/CONTRIBUTING.md

@ -0,0 +1,58 @@
# Contributing to Semantic UI
### Usage Questions
Questions about usage should be asked in our [Gitter chatroom](https://gitter.im/Semantic-Org/Semantic-UI), on [Semantic UI forums](http://forums.semantic-ui.com) or [StackOverflow](http://stackoverflow.com/questions/tagged/semantic-ui).
Examples of usage questions
* *Why isn't my code working?*
* *Can Semantic UI do this?*
Once you receive feedback through community channels you may find your question is actually a bug. At this point it's a good idea to submit it as a bug report. Just keep in mind the following suggestions.
### Creating Bug Reports
[Github Issues Tracker](https://github.com/Semantic-Org/Semantic-UI/issues) is used to track all upcoming milestones and changes to the project.
**Please create a fork of this [JSFiddle](https://jsfiddle.net/ca0rovs3/) to demonstrate bugs.**
When submiting a bug report, include a set of steps to reproduce the issue and any related information, browser, OS etc. If we can't reproduce the issue then it will make solving things much more difficult.
If your bug uses a third party framework like Ember, Meteor, or Angular. Be sure to submit the issue to their respective issues boards. If you are confident the bug is part of the 'vanilla' SUI release, keep in mind not all maintainers are familiar with all framework and a simple test case is greatly appreciated.
If your bug is reproduced by a maintainer it will be assigned the [`confirmed bug`](https://github.com/Semantic-Org/Semantic-UI/issues?q=is%3Aopen+is%3Aissue+label%3A%22Confirmed+Bug%22) tag. Browsing this tag is a good way to keep track of known issues with SUI.
#### Naming Issues
Semantic UI boards use a special naming convention to help tag issue titles by the component the issue is related to.
##### Bugs
Please tag titles in the format "[Component] *Sub-type* should do *correct behavior*". Please use standard [title case](http://www.titlecase.com) for titles, including the bracketed tag.
For example
* [Dropdown] Multiple Selection Should Preserve "Set Selected" Order
* [Validation] - E-mail Validation Should Handle Cyrillic
* [Button] - Grouped Buttons Should Display Correctly on Mobile
##### Enhancements
For new feature requests, you can use the format "[Component] Add *new feature*"
For example
* [Dropdown] Add "Clearable" Setting
* [Validation] Add Rules for Zipcode Validation
* [API] Add "onProgress" callback setting
### Tracking Issue Progress
As bugs and features are triaged they will be assigned to milestones. The best indication of when a change will land is to check the date on the [upcoming milestones](https://github.com/Semantic-Org/Semantic-UI/milestones) page.
### Creating Pull Requests
**All pull requests should be merged into the `next` branch.**
Anyone can jump on the issues board and grab off bugs to fix. This is probably the best way to become a contributor to Semantic. Be sure to adhere to the style guides when submitting code.
* [Create a Pull Request](https://github.com/Semantic-Org/Semantic-UI/compare)
* [View Open Issues](https://github.com/Semantic-Org/Semantic-UI/issues)

7
wms/contract-repair/semantic/LICENSE.md

@ -0,0 +1,7 @@
# The MIT License
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

112
wms/contract-repair/semantic/README.md

@ -0,0 +1,112 @@
![Semantic](http://semantic-ui.com/images/logo.png)
# Semantic UI
[![Join the chat at https://gitter.im/Semantic-Org/Semantic-UI](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/Semantic-Org/Semantic-UI?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![CDNJS](https://img.shields.io/cdnjs/v/semantic-ui.svg)](https://cdnjs.com/libraries/semantic-ui/)
[Semantic](http://www.semantic-ui.com) is a UI framework designed for theming.
Key Features
* 50+ UI elements
* 3000 + CSS variables
* 3 Levels of variable inheritance (similar to SublimeText)
* Built with EM values for responsive design
* Flexbox friendly
Semantic allows developers to build beautiful websites fast, with **concise HTML**, **intuitive javascript**, and **simplified debugging**, helping make front-end development a delightful experience. Semantic is responsively designed allowing your website to scale on multiple devices. Semantic is production ready and partnered with frameworks such as **React**, **Angular**, **Meteor**, and **Ember**, which means you can integrate it with any of these frameworks to organize your UI layer alongside your application logic.
## 2.5.0 Release (Oct 6, 2022)
Semantic UI is now compatible with Node 18 and Gulp 4.
## User Support
Please help us keep the issue tracker organized. For technical questions that do not include a specific [JSFiddle test case](https://jsfiddle.net/ca0rovs3/) (bug reports), or feature request please use [StackOverflow](http://stackoverflow.com/questions/tagged/semantic-ui) to find a solution.
Visit our [contributing guide](https://github.com/Semantic-Org/Semantic-UI/blob/master/CONTRIBUTING.md) for more on what should be posted to GitHub Issues.
## Install
#### Recommended Install
```bash
npm install semantic-ui # Use themes, import build/watch tasks into your own gulpfile.
```
Semantic UI includes an interactive installer to help setup your project.
* For more details on setup visit our [getting started guide](http://semantic-ui.com/introduction/getting-started.html).
* To learn more about theming please read our [theming guide](http://www.semantic-ui.com/usage/theming.html)
#### Additional Versions
Environment | Install Script | Repo
--- | --- | --- |
CSS Only | `npm install semantic-ui-css` | [CSS Repo](https://github.com/Semantic-Org/Semantic-UI-CSS)
[LESS](https://github.com/less/less.js/) Only | `npm install semantic-ui-less` | [LESS Repo](https://github.com/Semantic-Org/Semantic-UI-LESS)
[LESS](https://github.com/less/less.js/) plugin | `npm install less-plugin-semantic-ui` | [LESS Plugin Repo](https://github.com/bassjobsen/less-plugin-semantic-ui/)
[EmberJS](http://emberjs.com/) | `ember install:addon semantic-ui-ember` | [Ember Repo](https://github.com/Semantic-Org/Semantic-UI-Ember)
|[Meteor](https://www.meteor.com/) - [LESS](https://github.com/less/less.js/) | `meteor add semantic:ui` | [Meteor Repo](https://github.com/Semantic-Org/Semantic-UI-Meteor) |
|[Meteor](https://www.meteor.com/) - CSS | `meteor add semantic:ui-css` | [CSS Repo](https://github.com/Semantic-Org/Semantic-UI-CSS) |
[Bower](http://bower.io/) | `bower install semantic-ui` |
Check out our [integration wiki](https://github.com/Semantic-Org/Semantic-UI/wiki/Integration) for more options.
#### Browser Support
* Last 2 Versions FF, Chrome, Safari Mac
* IE 11+
* Android 4.4+, Chrome for Android 44+
* iOS Safari 7+
* Microsoft Edge 12+
Although some components will work in IE9, [grids](http://semantic-ui.com/collections/grid.html) and other [flexbox](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Flexible_boxes) components are not supported by IE9 and may not appear correctly.
## Community
#### Getting Help
Please **do not post** usage questions to GitHub Issues. For these types of questions use our [Gitter chatroom][Gitter.im Room] or [StackOverflow](http://stackoverflow.com/questions/tagged/semantic-ui).
#### Submitting Bugs and Enhancements
[GitHub Issues](https://github.com/Semantic-Org/Semantic-UI/issues) is for suggesting enhancements and reporting bugs. Before submiting a bug make sure you do the following:
* Check out our [contributing guide](https://github.com/Semantic-Org/Semantic-UI/blob/master/CONTRIBUTING.md) for info on our release cycle.
* [Fork this boilerplate JSFiddle](https://jsfiddle.net/ca0rovs3/) to create a test case for your bug. If a bug is apparent in the docs, that's ok as a test case, just make it clear exactly how to reproduce the issue. Only bugs that include a test case can be triaged.
#### Pull Requests
When adding pull requests, be sure to merge into the [next](https://github.com/Semantic-Org/Semantic-UI/tree/next) branch. If you need to demonstrate a fix in ``next`` release, you can use [this JSFiddle](https://jsfiddle.net/ca0rovs3/)
#### International
* **Chinese** A Chinese mirror site is available at [http://www.semantic-ui.cn](http://www.semantic-ui.cn).
* **Right-to-Left (RTL)** An RTL version can be created using our build tools by selecting `rtl` from the install script.
* **Translation** To help translate see the [Wiki Guide](https://github.com/Semantic-Org/Semantic-UI/wiki/Translating-Semantic-UI-Docs) for translations.
#### Resources
Resource | Description
--- | --- |
Bugs & Feature Requests | All bug submission **require** a link to a test case, and a set of steps to reproduce the issue. You can make a test case by forking this [JSFiddle](https://jsfiddle.net/ca0rovs3/), then submit your [bug report on GitHub Issues](https://github.com/Semantic-Org/Semantic-UI/issues)
Live Chat | Join our [Gitter.im Room][Gitter.im Room]
Newsletter Updates | Sign up for updates at [semantic-ui.com](http://www.semantic-ui.com)
Additional Resources | Submit a question on [StackOverflow](http://stackoverflow.com/questions/tagged/semantic-ui) or ask our [Google Group](https://groups.google.com/forum/#!forum/semantic-ui)
#### Places to Help
Project | How To Help | Next Step
--- | --- | --- |
Localization | Help us translate Semantic UI into your language | [Join our Translation Community](https://github.com/Semantic-Org/Semantic-UI/wiki/Translating-Semantic-UI-Docs)
[SCSS](http://sass-lang.com/) | SASS needs PR to support variables inside `@import` | [Add Pull Request](https://github.com/sass/sass/pulls) for [#739](https://github.com/sass/sass/issues/739#issuecomment-73984809)
[Angular](https://angularjs.org/) | Help develop angular bindings | Reach Out on [GitHub Issues](https://github.com/Semantic-Org/Semantic-UI-Angular/issues/8)
Guides & Tutorials | Help write guides and tutorials | [Join the discussion](https://github.com/Semantic-Org/Semantic-UI/issues/1571)
#### Reaching Out
If you'd like to start a conversation about Semantic feel free to e-mail me at [jack@semantic-ui.com](mailto:jack@semantic-ui.com)
<a href="http://packagequality.com/#?package=semantic-ui"><img src="http://npm.packagequality.com/badge/semantic-ui.png"/></a>
[Gitter.im Room]: https://gitter.im/Semantic-Org/Semantic-UI

2959
wms/contract-repair/semantic/RELEASE-NOTES.md

File diff suppressed because it is too large

5
wms/contract-repair/semantic/Semantic-UI-master/.browserlistrc

@ -0,0 +1,5 @@
last 2 versions
> 1%
opera 12.1
bb 10
android 4

322
wms/contract-repair/semantic/Semantic-UI-master/.csscomb.json

@ -0,0 +1,322 @@
{
"remove-empty-rulesets": true,
"always-semicolon": true,
"color-case": "upper",
"block-indent": " ",
"color-shorthand": false,
"element-case": "lower",
"leading-zero": true,
"space-after-colon": " ",
"space-before-combinator": " ",
"space-after-combinator": " ",
"space-between-declarations": "\n",
"space-before-opening-brace": " ",
"space-after-opening-brace": "\n",
"space-after-selector-delimiter": "\n",
"space-before-selector-delimiter": "",
"space-before-closing-brace": "\n",
"strip-spaces": true,
"tab-size": true,
"vendor-prefix-align": true,
"sort-order": [
[
"display",
"visibility",
"float",
"clear",
"overflow",
"overflow-x",
"overflow-y",
"-webkit-box-sizing",
"-moz-box-sizing",
"box-sizing",
"-ms-overflow-x",
"-ms-overflow-y",
"clip",
"zoom",
"flex-direction",
"flex-order",
"flex-pack",
"flex-align"
],
[
"position",
"z-index",
"top",
"right",
"bottom",
"left"
],
[
"font",
"font-family",
"font-size",
"font-weight",
"font-style",
"font-variant",
"font-size-adjust",
"font-stretch",
"font-effect",
"font-emphasize",
"font-emphasize-position",
"font-emphasize-style",
"font-smooth",
"line-height"
],
[
"width",
"min-width",
"max-width",
"height",
"min-height",
"max-height",
"margin",
"margin-top",
"margin-right",
"margin-bottom",
"margin-left",
"padding",
"padding-top",
"padding-right",
"padding-bottom",
"padding-left"
],
[
"table-layout",
"empty-cells",
"caption-side",
"border-spacing",
"border-collapse",
"list-style",
"list-style-position",
"list-style-type",
"list-style-image"
],
[
"opacity",
"filter:progid:DXImageTransform.Microsoft.Alpha(Opacity",
"-ms-filter:\\'progid:DXImageTransform.Microsoft.Alpha",
"-ms-interpolation-mode",
"color",
"border",
"border-width",
"border-style",
"border-color",
"border-top",
"border-top-width",
"border-top-style",
"border-top-color",
"border-right",
"border-right-width",
"border-right-style",
"border-right-color",
"border-bottom",
"border-bottom-width",
"border-bottom-style",
"border-bottom-color",
"border-left",
"border-left-width",
"border-left-style",
"border-left-color",
"-webkit-border-radius",
"-moz-border-radius",
"border-radius",
"-webkit-border-top-left-radius",
"-moz-border-radius-topleft",
"border-top-left-radius",
"-webkit-border-top-right-radius",
"-moz-border-radius-topright",
"border-top-right-radius",
"-webkit-border-bottom-right-radius",
"-moz-border-radius-bottomright",
"border-bottom-right-radius",
"-webkit-border-bottom-left-radius",
"-moz-border-radius-bottomleft",
"border-bottom-left-radius",
"-webkit-border-image",
"-moz-border-image",
"-o-border-image",
"border-image",
"-webkit-border-image-source",
"-moz-border-image-source",
"-o-border-image-source",
"border-image-source",
"-webkit-border-image-slice",
"-moz-border-image-slice",
"-o-border-image-slice",
"border-image-slice",
"-webkit-border-image-width",
"-moz-border-image-width",
"-o-border-image-width",
"border-image-width",
"-webkit-border-image-outset",
"-moz-border-image-outset",
"-o-border-image-outset",
"border-image-outset",
"-webkit-border-image-repeat",
"-moz-border-image-repeat",
"-o-border-image-repeat",
"border-image-repeat",
"outline",
"outline-width",
"outline-style",
"outline-color",
"outline-offset",
"background",
"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader",
"background-color",
"background-image",
"background-repeat",
"background-attachment",
"background-position",
"background-position-x",
"-ms-background-position-x",
"background-position-y",
"-ms-background-position-y",
"-webkit-background-clip",
"-moz-background-clip",
"background-clip",
"background-origin",
"-webkit-background-size",
"-moz-background-size",
"-o-background-size",
"background-size",
"box-decoration-break",
"-webkit-box-shadow",
"-moz-box-shadow",
"box-shadow",
"filter:progid:DXImageTransform.Microsoft.gradient",
"-ms-filter:\\'progid:DXImageTransform.Microsoft.gradient",
"text-shadow"
],
[
"content",
"quotes",
"counter-reset",
"counter-increment",
"resize",
"cursor",
"-webkit-user-select",
"-moz-user-select",
"-ms-user-select",
"user-select",
"nav-index",
"nav-up",
"nav-right",
"nav-down",
"nav-left",
"-webkit-transition",
"-moz-transition",
"-ms-transition",
"-o-transition",
"transition",
"-webkit-transition-delay",
"-moz-transition-delay",
"-ms-transition-delay",
"-o-transition-delay",
"transition-delay",
"-webkit-transition-timing-function",
"-moz-transition-timing-function",
"-ms-transition-timing-function",
"-o-transition-timing-function",
"transition-timing-function",
"-webkit-transition-duration",
"-moz-transition-duration",
"-ms-transition-duration",
"-o-transition-duration",
"transition-duration",
"-webkit-transition-property",
"-moz-transition-property",
"-ms-transition-property",
"-o-transition-property",
"transition-property",
"-webkit-transform",
"-moz-transform",
"-ms-transform",
"-o-transform",
"transform",
"-webkit-transform-origin",
"-moz-transform-origin",
"-ms-transform-origin",
"-o-transform-origin",
"transform-origin",
"-webkit-animation",
"-moz-animation",
"-ms-animation",
"-o-animation",
"animation",
"-webkit-animation-name",
"-moz-animation-name",
"-ms-animation-name",
"-o-animation-name",
"animation-name",
"-webkit-animation-duration",
"-moz-animation-duration",
"-ms-animation-duration",
"-o-animation-duration",
"animation-duration",
"-webkit-animation-play-state",
"-moz-animation-play-state",
"-ms-animation-play-state",
"-o-animation-play-state",
"animation-play-state",
"-webkit-animation-timing-function",
"-moz-animation-timing-function",
"-ms-animation-timing-function",
"-o-animation-timing-function",
"animation-timing-function",
"-webkit-animation-delay",
"-moz-animation-delay",
"-ms-animation-delay",
"-o-animation-delay",
"animation-delay",
"-webkit-animation-iteration-count",
"-moz-animation-iteration-count",
"-ms-animation-iteration-count",
"-o-animation-iteration-count",
"animation-iteration-count",
"-webkit-animation-direction",
"-moz-animation-direction",
"-ms-animation-direction",
"-o-animation-direction",
"animation-direction",
"text-align",
"-webkit-text-align-last",
"-moz-text-align-last",
"-ms-text-align-last",
"text-align-last",
"vertical-align",
"white-space",
"text-decoration",
"text-emphasis",
"text-emphasis-color",
"text-emphasis-style",
"text-emphasis-position",
"text-indent",
"-ms-text-justify",
"text-justify",
"letter-spacing",
"word-spacing",
"-ms-writing-mode",
"text-outline",
"text-transform",
"text-wrap",
"text-overflow",
"-ms-text-overflow",
"text-overflow-ellipsis",
"text-overflow-mode",
"-ms-word-wrap",
"word-wrap",
"word-break",
"-ms-word-break",
"-moz-tab-size",
"-o-tab-size",
"tab-size",
"-webkit-hyphens",
"-moz-hyphens",
"hyphens",
"pointer-events"
]
]
}

18
wms/contract-repair/semantic/Semantic-UI-master/.csslintrc

@ -0,0 +1,18 @@
{
"vendor-prefix" : true,
"duplicate-properties" : true,
"display-property-grouping" : true,
"empty-rules" : true,
"adjoining-classes" : false,
"box-model" : false,
"compatible-vendor-prefixes" : false,
"box-sizing" : false,
"duplicate-background-images" : false,
"floats" : false,
"important" : false,
"overqualified-elements" : false,
"rules-count" : false,
"shorthand" : false,
"zero-units" : false
}

24
wms/contract-repair/semantic/Semantic-UI-master/.github/ISSUE_TEMPLATE.md

@ -0,0 +1,24 @@
✖ USAGE QUESTIONS → Use these dedicated resources:
Docs - http://www.semantic-ui.com
Chat - https://gitter.im/Semantic-Org/Semantic-UI
SO - https://stackoverflow.com/questions/tagged/semantic-ui?sort=votes
✔ Enhancements → Be specific. Assume backwards compatibility is a necessity. Suggest implementation when possible.
✔ BUGS → ❤❤❤. Keep in mind some bugs may not be immediately fixable due to backwards compatibility or CSS limitations.
### Title (Put in field above)
Use the format: [Component] Component Should Do X
i.e. [Checkbox] onChange Should Fire When Update Triggered via DOM
### Steps
### Expected Result
### Actual Result
### Version
x.y.z
### Testcase
[Fork, update, and replace to show the bug]:
https://jsfiddle.net/ca0rovs3/

28
wms/contract-repair/semantic/Semantic-UI-master/.github/PULL_REQUEST_TEMPLATE.md

@ -0,0 +1,28 @@
✖ Multiple features in one PR
✖ New Components Unless Previously Discussed with Maintainers (Consider creating separate repo, I'll link out to you)
✔ Add comments to complex/confusing code in "code" view of PR
✔ BUGS → This form is required:
✔ Enhancements → Only specific enhancements with detailed descriptions.
### Issue Titles
Use the format: [Component] Adds Support for Thing
For example: [Build Tools] Adds Source Map Support
Or: [Button] Fixes Inheritance for Red Basic Active State
### Closed Issues
#222 #333 #444
### Description
### Testcase
[Show before with this fiddle]
https://jsfiddle.net/ca0rovs3/
[Consider showing "fixed" case with your fiddle]()
You can link to your JS using https://rawgit.com/

33
wms/contract-repair/semantic/Semantic-UI-master/.github/stale.yml

@ -0,0 +1,33 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 90
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 90
# Issues with these labels will never be considered stale
exemptLabels:
- pinned
- security
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
There has been no activity in this thread for 90 days. While we care about
every issue and we’d love to see this fixed, the core team’s time is
limited so we have to focus our attention on the issues that are most
pressing. Therefore, we will likely not be able to get to this one.
However, PRs for this issue will of course be accepted and welcome!
If there is no more activity in the next 90 days, this issue will be closed
automatically for housekeeping. To prevent this, simply leave a reply here.
Thanks!
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: >
This issue will be closed due to lack of activity for 6 months. If you’d
like this to be reopened, just leave a comment; we do monitor them!

38
wms/contract-repair/semantic/Semantic-UI-master/.gitignore

@ -0,0 +1,38 @@
node_modules/
test/coverage/
coverage/
src/**/site/
theme.config
semantic.json
tasks/**/oauth.js
package-lock.json
# Numerous always-ignore extensions
*.diff
*.err
*.orig
*.log
*.rej
*.swo
*.swp
*.zip
*.vi
*~
*.sass-cache
*.ruby-version
# OS or Editor folders
.DS_Store
._*
Thumbs.db
.cache
.project
.settings
.tmproj
.docpad.db
*.esproj
nbproject
*.sublime-project
*.sublime-workspace
.build*
.idea

38
wms/contract-repair/semantic/Semantic-UI-master/.jshintrc

@ -0,0 +1,38 @@
{
"globals": {
"$" : true,
"afterEach" : true,
"AnimatedPNG" : true,
"beforeEach" : true,
"console" : true,
"describe" : true,
"expect" : true,
"it" : true,
"jQuery" : true,
"loadFixtures" : true,
"module" : true,
"requestAnimationFrame" : true,
"require" : true,
"semantic" : true
},
"debug" : false,
"devel" : true,
"browser" : true,
"curly" : true,
"immed" : true,
"latedef" : true,
"loopfunc" : true,
"noarg" : true,
"undef" : true,
"sub" : true,
"loopfunc" : true,
"laxbreak" : true,
"evil" : true,
"indent" : false,
"trailing" : false
}

58
wms/contract-repair/semantic/Semantic-UI-master/CONTRIBUTING.md

@ -0,0 +1,58 @@
# Contributing to Semantic UI
### Usage Questions
Questions about usage should be asked in our [Gitter chatroom](https://gitter.im/Semantic-Org/Semantic-UI), on [Semantic UI forums](http://forums.semantic-ui.com) or [StackOverflow](http://stackoverflow.com/questions/tagged/semantic-ui).
Examples of usage questions
* *Why isn't my code working?*
* *Can Semantic UI do this?*
Once you receive feedback through community channels you may find your question is actually a bug. At this point it's a good idea to submit it as a bug report. Just keep in mind the following suggestions.
### Creating Bug Reports
[Github Issues Tracker](https://github.com/Semantic-Org/Semantic-UI/issues) is used to track all upcoming milestones and changes to the project.
**Please create a fork of this [JSFiddle](https://jsfiddle.net/ca0rovs3/) to demonstrate bugs.**
When submiting a bug report, include a set of steps to reproduce the issue and any related information, browser, OS etc. If we can't reproduce the issue then it will make solving things much more difficult.
If your bug uses a third party framework like Ember, Meteor, or Angular. Be sure to submit the issue to their respective issues boards. If you are confident the bug is part of the 'vanilla' SUI release, keep in mind not all maintainers are familiar with all framework and a simple test case is greatly appreciated.
If your bug is reproduced by a maintainer it will be assigned the [`confirmed bug`](https://github.com/Semantic-Org/Semantic-UI/issues?q=is%3Aopen+is%3Aissue+label%3A%22Confirmed+Bug%22) tag. Browsing this tag is a good way to keep track of known issues with SUI.
#### Naming Issues
Semantic UI boards use a special naming convention to help tag issue titles by the component the issue is related to.
##### Bugs
Please tag titles in the format "[Component] *Sub-type* should do *correct behavior*". Please use standard [title case](http://www.titlecase.com) for titles, including the bracketed tag.
For example
* [Dropdown] Multiple Selection Should Preserve "Set Selected" Order
* [Validation] - E-mail Validation Should Handle Cyrillic
* [Button] - Grouped Buttons Should Display Correctly on Mobile
##### Enhancements
For new feature requests, you can use the format "[Component] Add *new feature*"
For example
* [Dropdown] Add "Clearable" Setting
* [Validation] Add Rules for Zipcode Validation
* [API] Add "onProgress" callback setting
### Tracking Issue Progress
As bugs and features are triaged they will be assigned to milestones. The best indication of when a change will land is to check the date on the [upcoming milestones](https://github.com/Semantic-Org/Semantic-UI/milestones) page.
### Creating Pull Requests
**All pull requests should be merged into the `next` branch.**
Anyone can jump on the issues board and grab off bugs to fix. This is probably the best way to become a contributor to Semantic. Be sure to adhere to the style guides when submitting code.
* [Create a Pull Request](https://github.com/Semantic-Org/Semantic-UI/compare)
* [View Open Issues](https://github.com/Semantic-Org/Semantic-UI/issues)

7
wms/contract-repair/semantic/Semantic-UI-master/LICENSE.md

@ -0,0 +1,7 @@
# The MIT License
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

112
wms/contract-repair/semantic/Semantic-UI-master/README.md

@ -0,0 +1,112 @@
![Semantic](http://semantic-ui.com/images/logo.png)
# Semantic UI
[![Join the chat at https://gitter.im/Semantic-Org/Semantic-UI](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/Semantic-Org/Semantic-UI?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![CDNJS](https://img.shields.io/cdnjs/v/semantic-ui.svg)](https://cdnjs.com/libraries/semantic-ui/)
[Semantic](http://www.semantic-ui.com) is a UI framework designed for theming.
Key Features
* 50+ UI elements
* 3000 + CSS variables
* 3 Levels of variable inheritance (similar to SublimeText)
* Built with EM values for responsive design
* Flexbox friendly
Semantic allows developers to build beautiful websites fast, with **concise HTML**, **intuitive javascript**, and **simplified debugging**, helping make front-end development a delightful experience. Semantic is responsively designed allowing your website to scale on multiple devices. Semantic is production ready and partnered with frameworks such as **React**, **Angular**, **Meteor**, and **Ember**, which means you can integrate it with any of these frameworks to organize your UI layer alongside your application logic.
## 2.5.0 Release (Oct 6, 2022)
Semantic UI is now compatible with Node 18 and Gulp 4.
## User Support
Please help us keep the issue tracker organized. For technical questions that do not include a specific [JSFiddle test case](https://jsfiddle.net/ca0rovs3/) (bug reports), or feature request please use [StackOverflow](http://stackoverflow.com/questions/tagged/semantic-ui) to find a solution.
Visit our [contributing guide](https://github.com/Semantic-Org/Semantic-UI/blob/master/CONTRIBUTING.md) for more on what should be posted to GitHub Issues.
## Install
#### Recommended Install
```bash
npm install semantic-ui # Use themes, import build/watch tasks into your own gulpfile.
```
Semantic UI includes an interactive installer to help setup your project.
* For more details on setup visit our [getting started guide](http://semantic-ui.com/introduction/getting-started.html).
* To learn more about theming please read our [theming guide](http://www.semantic-ui.com/usage/theming.html)
#### Additional Versions
Environment | Install Script | Repo
--- | --- | --- |
CSS Only | `npm install semantic-ui-css` | [CSS Repo](https://github.com/Semantic-Org/Semantic-UI-CSS)
[LESS](https://github.com/less/less.js/) Only | `npm install semantic-ui-less` | [LESS Repo](https://github.com/Semantic-Org/Semantic-UI-LESS)
[LESS](https://github.com/less/less.js/) plugin | `npm install less-plugin-semantic-ui` | [LESS Plugin Repo](https://github.com/bassjobsen/less-plugin-semantic-ui/)
[EmberJS](http://emberjs.com/) | `ember install:addon semantic-ui-ember` | [Ember Repo](https://github.com/Semantic-Org/Semantic-UI-Ember)
|[Meteor](https://www.meteor.com/) - [LESS](https://github.com/less/less.js/) | `meteor add semantic:ui` | [Meteor Repo](https://github.com/Semantic-Org/Semantic-UI-Meteor) |
|[Meteor](https://www.meteor.com/) - CSS | `meteor add semantic:ui-css` | [CSS Repo](https://github.com/Semantic-Org/Semantic-UI-CSS) |
[Bower](http://bower.io/) | `bower install semantic-ui` |
Check out our [integration wiki](https://github.com/Semantic-Org/Semantic-UI/wiki/Integration) for more options.
#### Browser Support
* Last 2 Versions FF, Chrome, Safari Mac
* IE 11+
* Android 4.4+, Chrome for Android 44+
* iOS Safari 7+
* Microsoft Edge 12+
Although some components will work in IE9, [grids](http://semantic-ui.com/collections/grid.html) and other [flexbox](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Flexible_boxes) components are not supported by IE9 and may not appear correctly.
## Community
#### Getting Help
Please **do not post** usage questions to GitHub Issues. For these types of questions use our [Gitter chatroom][Gitter.im Room] or [StackOverflow](http://stackoverflow.com/questions/tagged/semantic-ui).
#### Submitting Bugs and Enhancements
[GitHub Issues](https://github.com/Semantic-Org/Semantic-UI/issues) is for suggesting enhancements and reporting bugs. Before submiting a bug make sure you do the following:
* Check out our [contributing guide](https://github.com/Semantic-Org/Semantic-UI/blob/master/CONTRIBUTING.md) for info on our release cycle.
* [Fork this boilerplate JSFiddle](https://jsfiddle.net/ca0rovs3/) to create a test case for your bug. If a bug is apparent in the docs, that's ok as a test case, just make it clear exactly how to reproduce the issue. Only bugs that include a test case can be triaged.
#### Pull Requests
When adding pull requests, be sure to merge into the [next](https://github.com/Semantic-Org/Semantic-UI/tree/next) branch. If you need to demonstrate a fix in ``next`` release, you can use [this JSFiddle](https://jsfiddle.net/ca0rovs3/)
#### International
* **Chinese** A Chinese mirror site is available at [http://www.semantic-ui.cn](http://www.semantic-ui.cn).
* **Right-to-Left (RTL)** An RTL version can be created using our build tools by selecting `rtl` from the install script.
* **Translation** To help translate see the [Wiki Guide](https://github.com/Semantic-Org/Semantic-UI/wiki/Translating-Semantic-UI-Docs) for translations.
#### Resources
Resource | Description
--- | --- |
Bugs & Feature Requests | All bug submission **require** a link to a test case, and a set of steps to reproduce the issue. You can make a test case by forking this [JSFiddle](https://jsfiddle.net/ca0rovs3/), then submit your [bug report on GitHub Issues](https://github.com/Semantic-Org/Semantic-UI/issues)
Live Chat | Join our [Gitter.im Room][Gitter.im Room]
Newsletter Updates | Sign up for updates at [semantic-ui.com](http://www.semantic-ui.com)
Additional Resources | Submit a question on [StackOverflow](http://stackoverflow.com/questions/tagged/semantic-ui) or ask our [Google Group](https://groups.google.com/forum/#!forum/semantic-ui)
#### Places to Help
Project | How To Help | Next Step
--- | --- | --- |
Localization | Help us translate Semantic UI into your language | [Join our Translation Community](https://github.com/Semantic-Org/Semantic-UI/wiki/Translating-Semantic-UI-Docs)
[SCSS](http://sass-lang.com/) | SASS needs PR to support variables inside `@import` | [Add Pull Request](https://github.com/sass/sass/pulls) for [#739](https://github.com/sass/sass/issues/739#issuecomment-73984809)
[Angular](https://angularjs.org/) | Help develop angular bindings | Reach Out on [GitHub Issues](https://github.com/Semantic-Org/Semantic-UI-Angular/issues/8)
Guides & Tutorials | Help write guides and tutorials | [Join the discussion](https://github.com/Semantic-Org/Semantic-UI/issues/1571)
#### Reaching Out
If you'd like to start a conversation about Semantic feel free to e-mail me at [jack@semantic-ui.com](mailto:jack@semantic-ui.com)
<a href="http://packagequality.com/#?package=semantic-ui"><img src="http://npm.packagequality.com/badge/semantic-ui.png"/></a>
[Gitter.im Room]: https://gitter.im/Semantic-Org/Semantic-UI

2959
wms/contract-repair/semantic/Semantic-UI-master/RELEASE-NOTES.md

File diff suppressed because it is too large

27
wms/contract-repair/semantic/Semantic-UI-master/bower.json

@ -0,0 +1,27 @@
{
"name" : "semantic",
"description" : "Semantic empowers designers and developers by creating a shared vocabulary for UI.",
"homepage" : "http://www.semantic-ui.com",
"author": {
"name" : "Jack Lukic",
"web" : "http://www.jacklukic.com"
},
"dependencies": {
"jquery" : ">=1.8"
},
"main": [
"src/semantic.less",
"dist/semantic.js"
],
"keywords": [
"semantic",
"ui",
"css3",
"framework"
],
"license" : "MIT",
"ignore": [
"src/site",
"test"
]
}

24
wms/contract-repair/semantic/Semantic-UI-master/composer.json

@ -0,0 +1,24 @@
{
"name" : "semantic/ui",
"description" : "Semantic empowers designers and developers by creating a shared vocabulary for UI.",
"homepage" : "http://www.semantic-ui.com",
"authors" : [
{
"name" : "Jack Lukic",
"email" : "jacklukic@gmail.com",
"homepage" : "http://www.jacklukic.com",
"role" : "Creator"
}
],
"support": {
"issues": "https://github.com/Semantic-Org/Semantic-UI/issues",
"source": "https://github.com/Semantic-Org/Semantic-UI"
},
"keywords" : [
"semantic",
"ui",
"css",
"framework"
],
"license" : "MIT"
}

244
wms/contract-repair/semantic/Semantic-UI-master/dist/components/accordion.css

@ -0,0 +1,244 @@
/*!
* # Semantic UI 2.5.0 - Accordion
* http://github.com/semantic-org/semantic-ui/
*
*
* Released under the MIT license
* http://opensource.org/licenses/MIT
*
*/
/*******************************
Accordion
*******************************/
.ui.accordion,
.ui.accordion .accordion {
max-width: 100%;
}
.ui.accordion .accordion {
margin: 1em 0em 0em;
padding: 0em;
}
/* Title */
.ui.accordion .title,
.ui.accordion .accordion .title {
cursor: pointer;
}
/* Default Styling */
.ui.accordion .title:not(.ui) {
padding: 0.5em 0em;
font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;
font-size: 1em;
color: rgba(0, 0, 0, 0.87);
}
/* Content */
.ui.accordion .title ~ .content,
.ui.accordion .accordion .title ~ .content {
display: none;
}
/* Default Styling */
.ui.accordion:not(.styled) .title ~ .content:not(.ui),
.ui.accordion:not(.styled) .accordion .title ~ .content:not(.ui) {
margin: '';
padding: 0.5em 0em 1em;
}
.ui.accordion:not(.styled) .title ~ .content:not(.ui):last-child {
padding-bottom: 0em;
}
/* Arrow */
.ui.accordion .title .dropdown.icon,
.ui.accordion .accordion .title .dropdown.icon {
display: inline-block;
float: none;
opacity: 1;
width: 1.25em;
height: 1em;
margin: 0em 0.25rem 0em 0rem;
padding: 0em;
font-size: 1em;
transition: transform 0.1s ease, opacity 0.1s ease;
vertical-align: baseline;
transform: none;
}
/*--------------
Coupling
---------------*/
/* Menu */
.ui.accordion.menu .item .title {
display: block;
padding: 0em;
}
.ui.accordion.menu .item .title > .dropdown.icon {
float: right;
margin: 0.21425em 0em 0em 1em;
transform: rotate(180deg);
}
/* Header */
.ui.accordion .ui.header .dropdown.icon {
font-size: 1em;
margin: 0em 0.25rem 0em 0rem;
}
/*******************************
States
*******************************/
.ui.accordion .active.title .dropdown.icon,
.ui.accordion .accordion .active.title .dropdown.icon {
transform: rotate(90deg);
}
.ui.accordion.menu .item .active.title > .dropdown.icon {
transform: rotate(90deg);
}
/*******************************
Types
*******************************/
/*--------------
Styled
---------------*/
.ui.styled.accordion {
width: 600px;
}
.ui.styled.accordion,
.ui.styled.accordion .accordion {
border-radius: 0.28571429rem;
background: #FFFFFF;
box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15);
}
.ui.styled.accordion .title,
.ui.styled.accordion .accordion .title {
margin: 0em;
padding: 0.75em 1em;
color: rgba(0, 0, 0, 0.4);
font-weight: bold;
border-top: 1px solid rgba(34, 36, 38, 0.15);
transition: background 0.1s ease, color 0.1s ease;
}
.ui.styled.accordion > .title:first-child,
.ui.styled.accordion .accordion .title:first-child {
border-top: none;
}
/* Content */
.ui.styled.accordion .content,
.ui.styled.accordion .accordion .content {
margin: 0em;
padding: 0.5em 1em 1.5em;
}
.ui.styled.accordion .accordion .content {
padding: 0em;
padding: 0.5em 1em 1.5em;
}
/* Hover */
.ui.styled.accordion .title:hover,
.ui.styled.accordion .active.title,
.ui.styled.accordion .accordion .title:hover,
.ui.styled.accordion .accordion .active.title {
background: transparent;
color: rgba(0, 0, 0, 0.87);
}
.ui.styled.accordion .accordion .title:hover,
.ui.styled.accordion .accordion .active.title {
background: transparent;
color: rgba(0, 0, 0, 0.87);
}
/* Active */
.ui.styled.accordion .active.title {
background: transparent;
color: rgba(0, 0, 0, 0.95);
}
.ui.styled.accordion .accordion .active.title {
background: transparent;
color: rgba(0, 0, 0, 0.95);
}
/*******************************
States
*******************************/
/*--------------
Active
---------------*/
.ui.accordion .active.content,
.ui.accordion .accordion .active.content {
display: block;
}
/*******************************
Variations
*******************************/
/*--------------
Fluid
---------------*/
.ui.fluid.accordion,
.ui.fluid.accordion .accordion {
width: 100%;
}
/*--------------
Inverted
---------------*/
.ui.inverted.accordion .title:not(.ui) {
color: rgba(255, 255, 255, 0.9);
}
/*******************************
Theme Overrides
*******************************/
@font-face {
font-family: 'Accordion';
src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjB5AAAAC8AAAAYGNtYXAPfOIKAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zryj6HgAAAFwAAAAyGhlYWT/0IhHAAACOAAAADZoaGVhApkB5wAAAnAAAAAkaG10eAJuABIAAAKUAAAAGGxvY2EAjABWAAACrAAAAA5tYXhwAAgAFgAAArwAAAAgbmFtZfC1n04AAALcAAABPHBvc3QAAwAAAAAEGAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDZ//3//wAB/+MPKwADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQASAEkAtwFuABMAADc0PwE2FzYXFh0BFAcGJwYvASY1EgaABQgHBQYGBQcIBYAG2wcGfwcBAQcECf8IBAcBAQd/BgYAAAAAAQAAAEkApQFuABMAADcRNDc2MzIfARYVFA8BBiMiJyY1AAUGBwgFgAYGgAUIBwYFWwEACAUGBoAFCAcFgAYGBQcAAAABAAAAAQAAqWYls18PPPUACwIAAAAAAM/9o+4AAAAAz/2j7gAAAAAAtwFuAAAACAACAAAAAAAAAAEAAAHg/+AAAAIAAAAAAAC3AAEAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAQAAAAC3ABIAtwAAAAAAAAAKABQAHgBCAGQAAAABAAAABgAUAAEAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADAAAAAEAAAAAAAIADgBAAAEAAAAAAAMADAAiAAEAAAAAAAQADABOAAEAAAAAAAUAFgAMAAEAAAAAAAYABgAuAAEAAAAAAAoANABaAAMAAQQJAAEADAAAAAMAAQQJAAIADgBAAAMAAQQJAAMADAAiAAMAAQQJAAQADABOAAMAAQQJAAUAFgAMAAMAAQQJAAYADAA0AAMAAQQJAAoANABaAHIAYQB0AGkAbgBnAFYAZQByAHMAaQBvAG4AIAAxAC4AMAByAGEAdABpAG4AZ3JhdGluZwByAGEAdABpAG4AZwBSAGUAZwB1AGwAYQByAHIAYQB0AGkAbgBnAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAASwAAoAAAAABGgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAS0AAAEtFpovuE9TLzIAAAIkAAAAYAAAAGAIIweQY21hcAAAAoQAAABMAAAATA984gpnYXNwAAAC0AAAAAgAAAAIAAAAEGhlYWQAAALYAAAANgAAADb/0IhHaGhlYQAAAxAAAAAkAAAAJAKZAedobXR4AAADNAAAABgAAAAYAm4AEm1heHAAAANMAAAABgAAAAYABlAAbmFtZQAAA1QAAAE8AAABPPC1n05wb3N0AAAEkAAAACAAAAAgAAMAAAEABAQAAQEBB3JhdGluZwABAgABADr4HAL4GwP4GAQeCgAZU/+Lix4KABlT/4uLDAeLa/iU+HQFHQAAAHkPHQAAAH4RHQAAAAkdAAABJBIABwEBBw0PERQZHnJhdGluZ3JhdGluZ3UwdTF1MjB1RjBEOXVGMERBAAACAYkABAAGAQEEBwoNVp38lA78lA78lA77lA773Z33bxWLkI2Qj44I9xT3FAWOj5CNkIuQi4+JjoePiI2Gi4YIi/uUBYuGiYeHiIiHh4mGi4aLho2Ijwj7FPcUBYeOiY+LkAgO+92L5hWL95QFi5CNkI6Oj4+PjZCLkIuQiY6HCPcU+xQFj4iNhouGi4aJh4eICPsU+xQFiIeGiYaLhouHjYePiI6Jj4uQCA74lBT4lBWLDAoAAAAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDZ//3//wAB/+MPKwADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAEAADfYOJZfDzz1AAsCAAAAAADP/aPuAAAAAM/9o+4AAAAAALcBbgAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAAAtwABAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAEAAAAAtwASALcAAAAAUAAABgAAAAAADgCuAAEAAAAAAAEADAAAAAEAAAAAAAIADgBAAAEAAAAAAAMADAAiAAEAAAAAAAQADABOAAEAAAAAAAUAFgAMAAEAAAAAAAYABgAuAAEAAAAAAAoANABaAAMAAQQJAAEADAAAAAMAAQQJAAIADgBAAAMAAQQJAAMADAAiAAMAAQQJAAQADABOAAMAAQQJAAUAFgAMAAMAAQQJAAYADAA0AAMAAQQJAAoANABaAHIAYQB0AGkAbgBnAFYAZQByAHMAaQBvAG4AIAAxAC4AMAByAGEAdABpAG4AZ3JhdGluZwByAGEAdABpAG4AZwBSAGUAZwB1AGwAYQByAHIAYQB0AGkAbgBnAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('woff');
font-weight: normal;
font-style: normal;
}
/* Dropdown Icon */
.ui.accordion .title .dropdown.icon,
.ui.accordion .accordion .title .dropdown.icon {
font-family: Accordion;
line-height: 1;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
font-weight: normal;
font-style: normal;
text-align: center;
}
.ui.accordion .title .dropdown.icon:before,
.ui.accordion .accordion .title .dropdown.icon:before {
content: '\f0da' /*rtl:'\f0d9'*/;
}
/*******************************
User Overrides
*******************************/

613
wms/contract-repair/semantic/Semantic-UI-master/dist/components/accordion.js

@ -0,0 +1,613 @@
/*!
* # Semantic UI 2.5.0 - Accordion
* http://github.com/semantic-org/semantic-ui/
*
*
* Released under the MIT license
* http://opensource.org/licenses/MIT
*
*/
;(function ($, window, document, undefined) {
'use strict';
window = (typeof window != 'undefined' && window.Math == Math)
? window
: (typeof self != 'undefined' && self.Math == Math)
? self
: Function('return this')()
;
$.fn.accordion = function(parameters) {
var
$allModules = $(this),
time = new Date().getTime(),
performance = [],
query = arguments[0],
methodInvoked = (typeof query == 'string'),
queryArguments = [].slice.call(arguments, 1),
requestAnimationFrame = window.requestAnimationFrame
|| window.mozRequestAnimationFrame
|| window.webkitRequestAnimationFrame
|| window.msRequestAnimationFrame
|| function(callback) { setTimeout(callback, 0); },
returnedValue
;
$allModules
.each(function() {
var
settings = ( $.isPlainObject(parameters) )
? $.extend(true, {}, $.fn.accordion.settings, parameters)
: $.extend({}, $.fn.accordion.settings),
className = settings.className,
namespace = settings.namespace,
selector = settings.selector,
error = settings.error,
eventNamespace = '.' + namespace,
moduleNamespace = 'module-' + namespace,
moduleSelector = $allModules.selector || '',
$module = $(this),
$title = $module.find(selector.title),
$content = $module.find(selector.content),
element = this,
instance = $module.data(moduleNamespace),
observer,
module
;
module = {
initialize: function() {
module.debug('Initializing', $module);
module.bind.events();
if(settings.observeChanges) {
module.observeChanges();
}
module.instantiate();
},
instantiate: function() {
instance = module;
$module
.data(moduleNamespace, module)
;
},
destroy: function() {
module.debug('Destroying previous instance', $module);
$module
.off(eventNamespace)
.removeData(moduleNamespace)
;
},
refresh: function() {
$title = $module.find(selector.title);
$content = $module.find(selector.content);
},
observeChanges: function() {
if('MutationObserver' in window) {
observer = new MutationObserver(function(mutations) {
module.debug('DOM tree modified, updating selector cache');
module.refresh();
});
observer.observe(element, {
childList : true,
subtree : true
});
module.debug('Setting up mutation observer', observer);
}
},
bind: {
events: function() {
module.debug('Binding delegated events');
$module
.on(settings.on + eventNamespace, selector.trigger, module.event.click)
;
}
},
event: {
click: function() {
module.toggle.call(this);
}
},
toggle: function(query) {
var
$activeTitle = (query !== undefined)
? (typeof query === 'number')
? $title.eq(query)
: $(query).closest(selector.title)
: $(this).closest(selector.title),
$activeContent = $activeTitle.next($content),
isAnimating = $activeContent.hasClass(className.animating),
isActive = $activeContent.hasClass(className.active),
isOpen = (isActive && !isAnimating),
isOpening = (!isActive && isAnimating)
;
module.debug('Toggling visibility of content', $activeTitle);
if(isOpen || isOpening) {
if(settings.collapsible) {
module.close.call($activeTitle);
}
else {
module.debug('Cannot close accordion content collapsing is disabled');
}
}
else {
module.open.call($activeTitle);
}
},
open: function(query) {
var
$activeTitle = (query !== undefined)
? (typeof query === 'number')
? $title.eq(query)
: $(query).closest(selector.title)
: $(this).closest(selector.title),
$activeContent = $activeTitle.next($content),
isAnimating = $activeContent.hasClass(className.animating),
isActive = $activeContent.hasClass(className.active),
isOpen = (isActive || isAnimating)
;
if(isOpen) {
module.debug('Accordion already open, skipping', $activeContent);
return;
}
module.debug('Opening accordion content', $activeTitle);
settings.onOpening.call($activeContent);
settings.onChanging.call($activeContent);
if(settings.exclusive) {
module.closeOthers.call($activeTitle);
}
$activeTitle
.addClass(className.active)
;
$activeContent
.stop(true, true)
.addClass(className.animating)
;
if(settings.animateChildren) {
if($.fn.transition !== undefined && $module.transition('is supported')) {
$activeContent
.children()
.transition({
animation : 'fade in',
queue : false,
useFailSafe : true,
debug : settings.debug,
verbose : settings.verbose,
duration : settings.duration
})
;
}
else {
$activeContent
.children()
.stop(true, true)
.animate({
opacity: 1
}, settings.duration, module.resetOpacity)
;
}
}
$activeContent
.slideDown(settings.duration, settings.easing, function() {
$activeContent
.removeClass(className.animating)
.addClass(className.active)
;
module.reset.display.call(this);
settings.onOpen.call(this);
settings.onChange.call(this);
})
;
},
close: function(query) {
var
$activeTitle = (query !== undefined)
? (typeof query === 'number')
? $title.eq(query)
: $(query).closest(selector.title)
: $(this).closest(selector.title),
$activeContent = $activeTitle.next($content),
isAnimating = $activeContent.hasClass(className.animating),
isActive = $activeContent.hasClass(className.active),
isOpening = (!isActive && isAnimating),
isClosing = (isActive && isAnimating)
;
if((isActive || isOpening) && !isClosing) {
module.debug('Closing accordion content', $activeContent);
settings.onClosing.call($activeContent);
settings.onChanging.call($activeContent);
$activeTitle
.removeClass(className.active)
;
$activeContent
.stop(true, true)
.addClass(className.animating)
;
if(settings.animateChildren) {
if($.fn.transition !== undefined && $module.transition('is supported')) {
$activeContent
.children()
.transition({
animation : 'fade out',
queue : false,
useFailSafe : true,
debug : settings.debug,
verbose : settings.verbose,
duration : settings.duration
})
;
}
else {
$activeContent
.children()
.stop(true, true)
.animate({
opacity: 0
}, settings.duration, module.resetOpacity)
;
}
}
$activeContent
.slideUp(settings.duration, settings.easing, function() {
$activeContent
.removeClass(className.animating)
.removeClass(className.active)
;
module.reset.display.call(this);
settings.onClose.call(this);
settings.onChange.call(this);
})
;
}
},
closeOthers: function(index) {
var
$activeTitle = (index !== undefined)
? $title.eq(index)
: $(this).closest(selector.title),
$parentTitles = $activeTitle.parents(selector.content).prev(selector.title),
$activeAccordion = $activeTitle.closest(selector.accordion),
activeSelector = selector.title + '.' + className.active + ':visible',
activeContent = selector.content + '.' + className.active + ':visible',
$openTitles,
$nestedTitles,
$openContents
;
if(settings.closeNested) {
$openTitles = $activeAccordion.find(activeSelector).not($parentTitles);
$openContents = $openTitles.next($content);
}
else {
$openTitles = $activeAccordion.find(activeSelector).not($parentTitles);
$nestedTitles = $activeAccordion.find(activeContent).find(activeSelector).not($parentTitles);
$openTitles = $openTitles.not($nestedTitles);
$openContents = $openTitles.next($content);
}
if( ($openTitles.length > 0) ) {
module.debug('Exclusive enabled, closing other content', $openTitles);
$openTitles
.removeClass(className.active)
;
$openContents
.removeClass(className.animating)
.stop(true, true)
;
if(settings.animateChildren) {
if($.fn.transition !== undefined && $module.transition('is supported')) {
$openContents
.children()
.transition({
animation : 'fade out',
useFailSafe : true,
debug : settings.debug,
verbose : settings.verbose,
duration : settings.duration
})
;
}
else {
$openContents
.children()
.stop(true, true)
.animate({
opacity: 0
}, settings.duration, module.resetOpacity)
;
}
}
$openContents
.slideUp(settings.duration , settings.easing, function() {
$(this).removeClass(className.active);
module.reset.display.call(this);
})
;
}
},
reset: {
display: function() {
module.verbose('Removing inline display from element', this);
$(this).css('display', '');
if( $(this).attr('style') === '') {
$(this)
.attr('style', '')
.removeAttr('style')
;
}
},
opacity: function() {
module.verbose('Removing inline opacity from element', this);
$(this).css('opacity', '');
if( $(this).attr('style') === '') {
$(this)
.attr('style', '')
.removeAttr('style')
;
}
},
},
setting: function(name, value) {
module.debug('Changing setting', name, value);
if( $.isPlainObject(name) ) {
$.extend(true, settings, name);
}
else if(value !== undefined) {
if($.isPlainObject(settings[name])) {
$.extend(true, settings[name], value);
}
else {
settings[name] = value;
}
}
else {
return settings[name];
}
},
internal: function(name, value) {
module.debug('Changing internal', name, value);
if(value !== undefined) {
if( $.isPlainObject(name) ) {
$.extend(true, module, name);
}
else {
module[name] = value;
}
}
else {
return module[name];
}
},
debug: function() {
if(!settings.silent && settings.debug) {
if(settings.performance) {
module.performance.log(arguments);
}
else {
module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
module.debug.apply(console, arguments);
}
}
},
verbose: function() {
if(!settings.silent && settings.verbose && settings.debug) {
if(settings.performance) {
module.performance.log(arguments);
}
else {
module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
module.verbose.apply(console, arguments);
}
}
},
error: function() {
if(!settings.silent) {
module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
module.error.apply(console, arguments);
}
},
performance: {
log: function(message) {
var
currentTime,
executionTime,
previousTime
;
if(settings.performance) {
currentTime = new Date().getTime();
previousTime = time || currentTime;
executionTime = currentTime - previousTime;
time = currentTime;
performance.push({
'Name' : message[0],
'Arguments' : [].slice.call(message, 1) || '',
'Element' : element,
'Execution Time' : executionTime
});
}
clearTimeout(module.performance.timer);
module.performance.timer = setTimeout(module.performance.display, 500);
},
display: function() {
var
title = settings.name + ':',
totalTime = 0
;
time = false;
clearTimeout(module.performance.timer);
$.each(performance, function(index, data) {
totalTime += data['Execution Time'];
});
title += ' ' + totalTime + 'ms';
if(moduleSelector) {
title += ' \'' + moduleSelector + '\'';
}
if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
console.groupCollapsed(title);
if(console.table) {
console.table(performance);
}
else {
$.each(performance, function(index, data) {
console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
});
}
console.groupEnd();
}
performance = [];
}
},
invoke: function(query, passedArguments, context) {
var
object = instance,
maxDepth,
found,
response
;
passedArguments = passedArguments || queryArguments;
context = element || context;
if(typeof query == 'string' && object !== undefined) {
query = query.split(/[\. ]/);
maxDepth = query.length - 1;
$.each(query, function(depth, value) {
var camelCaseValue = (depth != maxDepth)
? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
: query
;
if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
object = object[camelCaseValue];
}
else if( object[camelCaseValue] !== undefined ) {
found = object[camelCaseValue];
return false;
}
else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
object = object[value];
}
else if( object[value] !== undefined ) {
found = object[value];
return false;
}
else {
module.error(error.method, query);
return false;
}
});
}
if ( $.isFunction( found ) ) {
response = found.apply(context, passedArguments);
}
else if(found !== undefined) {
response = found;
}
if($.isArray(returnedValue)) {
returnedValue.push(response);
}
else if(returnedValue !== undefined) {
returnedValue = [returnedValue, response];
}
else if(response !== undefined) {
returnedValue = response;
}
return found;
}
};
if(methodInvoked) {
if(instance === undefined) {
module.initialize();
}
module.invoke(query);
}
else {
if(instance !== undefined) {
instance.invoke('destroy');
}
module.initialize();
}
})
;
return (returnedValue !== undefined)
? returnedValue
: this
;
};
$.fn.accordion.settings = {
name : 'Accordion',
namespace : 'accordion',
silent : false,
debug : false,
verbose : false,
performance : true,
on : 'click', // event on title that opens accordion
observeChanges : true, // whether accordion should automatically refresh on DOM insertion
exclusive : true, // whether a single accordion content panel should be open at once
collapsible : true, // whether accordion content can be closed
closeNested : false, // whether nested content should be closed when a panel is closed
animateChildren : true, // whether children opacity should be animated
duration : 350, // duration of animation
easing : 'easeOutQuad', // easing equation for animation
onOpening : function(){}, // callback before open animation
onClosing : function(){}, // callback before closing animation
onChanging : function(){}, // callback before closing or opening animation
onOpen : function(){}, // callback after open animation
onClose : function(){}, // callback after closing animation
onChange : function(){}, // callback after closing or opening animation
error: {
method : 'The method you called is not defined'
},
className : {
active : 'active',
animating : 'animating'
},
selector : {
accordion : '.accordion',
title : '.title',
trigger : '.title',
content : '.content'
}
};
// Adds easing
$.extend( $.easing, {
easeOutQuad: function (x, t, b, c, d) {
return -c *(t/=d)*(t-2) + b;
}
});
})( jQuery, window, document );

9
wms/contract-repair/semantic/Semantic-UI-master/dist/components/accordion.min.css

File diff suppressed because one or more lines are too long

1
wms/contract-repair/semantic/Semantic-UI-master/dist/components/accordion.min.js

File diff suppressed because one or more lines are too long

274
wms/contract-repair/semantic/Semantic-UI-master/dist/components/ad.css

@ -0,0 +1,274 @@
/*!
* # Semantic UI 2.5.0 - Ad
* http://github.com/semantic-org/semantic-ui/
*
*
* Copyright 2013 Contributors
* Released under the MIT license
* http://opensource.org/licenses/MIT
*
*/
/*******************************
Advertisement
*******************************/
.ui.ad {
display: block;
overflow: hidden;
margin: 1em 0em;
}
.ui.ad:first-child {
margin: 0em;
}
.ui.ad:last-child {
margin: 0em;
}
.ui.ad iframe {
margin: 0em;
padding: 0em;
border: none;
overflow: hidden;
}
/*--------------
Common
---------------*/
/* Leaderboard */
.ui.leaderboard.ad {
width: 728px;
height: 90px;
}
/* Medium Rectangle */
.ui[class*="medium rectangle"].ad {
width: 300px;
height: 250px;
}
/* Large Rectangle */
.ui[class*="large rectangle"].ad {
width: 336px;
height: 280px;
}
/* Half Page */
.ui[class*="half page"].ad {
width: 300px;
height: 600px;
}
/*--------------
Square
---------------*/
/* Square */
.ui.square.ad {
width: 250px;
height: 250px;
}
/* Small Square */
.ui[class*="small square"].ad {
width: 200px;
height: 200px;
}
/*--------------
Rectangle
---------------*/
/* Small Rectangle */
.ui[class*="small rectangle"].ad {
width: 180px;
height: 150px;
}
/* Vertical Rectangle */
.ui[class*="vertical rectangle"].ad {
width: 240px;
height: 400px;
}
/*--------------
Button
---------------*/
.ui.button.ad {
width: 120px;
height: 90px;
}
.ui[class*="square button"].ad {
width: 125px;
height: 125px;
}
.ui[class*="small button"].ad {
width: 120px;
height: 60px;
}
/*--------------
Skyscrapers
---------------*/
/* Skyscraper */
.ui.skyscraper.ad {
width: 120px;
height: 600px;
}
/* Wide Skyscraper */
.ui[class*="wide skyscraper"].ad {
width: 160px;
}
/*--------------
Banners
---------------*/
/* Banner */
.ui.banner.ad {
width: 468px;
height: 60px;
}
/* Vertical Banner */
.ui[class*="vertical banner"].ad {
width: 120px;
height: 240px;
}
/* Top Banner */
.ui[class*="top banner"].ad {
width: 930px;
height: 180px;
}
/* Half Banner */
.ui[class*="half banner"].ad {
width: 234px;
height: 60px;
}
/*--------------
Boards
---------------*/
/* Leaderboard */
.ui[class*="large leaderboard"].ad {
width: 970px;
height: 90px;
}
/* Billboard */
.ui.billboard.ad {
width: 970px;
height: 250px;
}
/*--------------
Panorama
---------------*/
/* Panorama */
.ui.panorama.ad {
width: 980px;
height: 120px;
}
/*--------------
Netboard
---------------*/
/* Netboard */
.ui.netboard.ad {
width: 580px;
height: 400px;
}
/*--------------
Mobile
---------------*/
/* Large Mobile Banner */
.ui[class*="large mobile banner"].ad {
width: 320px;
height: 100px;
}
/* Mobile Leaderboard */
.ui[class*="mobile leaderboard"].ad {
width: 320px;
height: 50px;
}
/*******************************
Types
*******************************/
/* Mobile Sizes */
.ui.mobile.ad {
display: none;
}
@media only screen and (max-width: 767px) {
.ui.mobile.ad {
display: block;
}
}
/*******************************
Variations
*******************************/
.ui.centered.ad {
margin-left: auto;
margin-right: auto;
}
.ui.test.ad {
position: relative;
background: #545454;
}
.ui.test.ad:after {
position: absolute;
top: 50%;
left: 50%;
width: 100%;
text-align: center;
transform: translateX(-50%) translateY(-50%);
content: 'Ad';
color: #FFFFFF;
font-size: 1em;
font-weight: bold;
}
.ui.mobile.test.ad:after {
font-size: 0.85714286em;
}
.ui.test.ad[data-text]:after {
content: attr(data-text);
}
/*******************************
Theme Overrides
*******************************/
/*******************************
User Variable Overrides
*******************************/

10
wms/contract-repair/semantic/Semantic-UI-master/dist/components/ad.min.css

@ -0,0 +1,10 @@
/*!
* # Semantic UI 2.5.0 - Ad
* http://github.com/semantic-org/semantic-ui/
*
*
* Copyright 2013 Contributors
* Released under the MIT license
* http://opensource.org/licenses/MIT
*
*/.ui.ad{display:block;overflow:hidden;margin:1em 0}.ui.ad:first-child{margin:0}.ui.ad:last-child{margin:0}.ui.ad iframe{margin:0;padding:0;border:none;overflow:hidden}.ui.leaderboard.ad{width:728px;height:90px}.ui[class*="medium rectangle"].ad{width:300px;height:250px}.ui[class*="large rectangle"].ad{width:336px;height:280px}.ui[class*="half page"].ad{width:300px;height:600px}.ui.square.ad{width:250px;height:250px}.ui[class*="small square"].ad{width:200px;height:200px}.ui[class*="small rectangle"].ad{width:180px;height:150px}.ui[class*="vertical rectangle"].ad{width:240px;height:400px}.ui.button.ad{width:120px;height:90px}.ui[class*="square button"].ad{width:125px;height:125px}.ui[class*="small button"].ad{width:120px;height:60px}.ui.skyscraper.ad{width:120px;height:600px}.ui[class*="wide skyscraper"].ad{width:160px}.ui.banner.ad{width:468px;height:60px}.ui[class*="vertical banner"].ad{width:120px;height:240px}.ui[class*="top banner"].ad{width:930px;height:180px}.ui[class*="half banner"].ad{width:234px;height:60px}.ui[class*="large leaderboard"].ad{width:970px;height:90px}.ui.billboard.ad{width:970px;height:250px}.ui.panorama.ad{width:980px;height:120px}.ui.netboard.ad{width:580px;height:400px}.ui[class*="large mobile banner"].ad{width:320px;height:100px}.ui[class*="mobile leaderboard"].ad{width:320px;height:50px}.ui.mobile.ad{display:none}@media only screen and (max-width:767px){.ui.mobile.ad{display:block}}.ui.centered.ad{margin-left:auto;margin-right:auto}.ui.test.ad{position:relative;background:#545454}.ui.test.ad:after{position:absolute;top:50%;left:50%;width:100%;text-align:center;transform:translateX(-50%) translateY(-50%);content:'Ad';color:#fff;font-size:1em;font-weight:700}.ui.mobile.test.ad:after{font-size:.85714286em}.ui.test.ad[data-text]:after{content:attr(data-text)}

1167
wms/contract-repair/semantic/Semantic-UI-master/dist/components/api.js

File diff suppressed because it is too large

1
wms/contract-repair/semantic/Semantic-UI-master/dist/components/api.min.js

File diff suppressed because one or more lines are too long

124
wms/contract-repair/semantic/Semantic-UI-master/dist/components/breadcrumb.css

@ -0,0 +1,124 @@
/*!
* # Semantic UI 2.5.0 - Breadcrumb
* http://github.com/semantic-org/semantic-ui/
*
*
* Released under the MIT license
* http://opensource.org/licenses/MIT
*
*/
/*******************************
Breadcrumb
*******************************/
.ui.breadcrumb {
line-height: 1;
display: inline-block;
margin: 0em 0em;
vertical-align: middle;
}
.ui.breadcrumb:first-child {
margin-top: 0em;
}
.ui.breadcrumb:last-child {
margin-bottom: 0em;
}
/*******************************
Content
*******************************/
/* Divider */
.ui.breadcrumb .divider {
display: inline-block;
opacity: 0.7;
margin: 0em 0.21428571rem 0em;
font-size: 0.92857143em;
color: rgba(0, 0, 0, 0.4);
vertical-align: baseline;
}
/* Link */
.ui.breadcrumb a {
color: #4183C4;
}
.ui.breadcrumb a:hover {
color: #1e70bf;
}
/* Icon Divider */
.ui.breadcrumb .icon.divider {
font-size: 0.85714286em;
vertical-align: baseline;
}
/* Section */
.ui.breadcrumb a.section {
cursor: pointer;
}
.ui.breadcrumb .section {
display: inline-block;
margin: 0em;
padding: 0em;
}
/* Loose Coupling */
.ui.breadcrumb.segment {
display: inline-block;
padding: 0.78571429em 1em;
}
/*******************************
States
*******************************/
.ui.breadcrumb .active.section {
font-weight: bold;
}
/*******************************
Variations
*******************************/
.ui.mini.breadcrumb {
font-size: 0.78571429rem;
}
.ui.tiny.breadcrumb {
font-size: 0.85714286rem;
}
.ui.small.breadcrumb {
font-size: 0.92857143rem;
}
.ui.breadcrumb {
font-size: 1rem;
}
.ui.large.breadcrumb {
font-size: 1.14285714rem;
}
.ui.big.breadcrumb {
font-size: 1.28571429rem;
}
.ui.huge.breadcrumb {
font-size: 1.42857143rem;
}
.ui.massive.breadcrumb {
font-size: 1.71428571rem;
}
/*******************************
Theme Overrides
*******************************/
/*******************************
Site Overrides
*******************************/

9
wms/contract-repair/semantic/Semantic-UI-master/dist/components/breadcrumb.min.css

@ -0,0 +1,9 @@
/*!
* # Semantic UI 2.5.0 - Breadcrumb
* http://github.com/semantic-org/semantic-ui/
*
*
* Released under the MIT license
* http://opensource.org/licenses/MIT
*
*/.ui.breadcrumb{line-height:1;display:inline-block;margin:0 0;vertical-align:middle}.ui.breadcrumb:first-child{margin-top:0}.ui.breadcrumb:last-child{margin-bottom:0}.ui.breadcrumb .divider{display:inline-block;opacity:.7;margin:0 .21428571rem 0;font-size:.92857143em;color:rgba(0,0,0,.4);vertical-align:baseline}.ui.breadcrumb a{color:#4183c4}.ui.breadcrumb a:hover{color:#1e70bf}.ui.breadcrumb .icon.divider{font-size:.85714286em;vertical-align:baseline}.ui.breadcrumb a.section{cursor:pointer}.ui.breadcrumb .section{display:inline-block;margin:0;padding:0}.ui.breadcrumb.segment{display:inline-block;padding:.78571429em 1em}.ui.breadcrumb .active.section{font-weight:700}.ui.mini.breadcrumb{font-size:.78571429rem}.ui.tiny.breadcrumb{font-size:.85714286rem}.ui.small.breadcrumb{font-size:.92857143rem}.ui.breadcrumb{font-size:1rem}.ui.large.breadcrumb{font-size:1.14285714rem}.ui.big.breadcrumb{font-size:1.28571429rem}.ui.huge.breadcrumb{font-size:1.42857143rem}.ui.massive.breadcrumb{font-size:1.71428571rem}

3561
wms/contract-repair/semantic/Semantic-UI-master/dist/components/button.css

File diff suppressed because it is too large

9
wms/contract-repair/semantic/Semantic-UI-master/dist/components/button.min.css

File diff suppressed because one or more lines are too long

937
wms/contract-repair/semantic/Semantic-UI-master/dist/components/card.css

@ -0,0 +1,937 @@
/*!
* # Semantic UI 2.5.0 - Item
* http://github.com/semantic-org/semantic-ui/
*
*
* Released under the MIT license
* http://opensource.org/licenses/MIT
*
*/
/*******************************
Standard
*******************************/
/*--------------
Card
---------------*/
.ui.cards > .card,
.ui.card {
max-width: 100%;
position: relative;
display: flex;
flex-direction: column;
width: 290px;
min-height: 0px;
background: #FFFFFF;
padding: 0em;
border: none;
border-radius: 0.28571429rem;
box-shadow: 0px 1px 3px 0px #D4D4D5, 0px 0px 0px 1px #D4D4D5;
transition: box-shadow 0.1s ease, transform 0.1s ease;
z-index: '';
}
.ui.card {
margin: 1em 0em;
}
.ui.cards > .card a,
.ui.card a {
cursor: pointer;
}
.ui.card:first-child {
margin-top: 0em;
}
.ui.card:last-child {
margin-bottom: 0em;
}
/*--------------
Cards
---------------*/
.ui.cards {
display: flex;
margin: -0.875em -0.5em;
flex-wrap: wrap;
}
.ui.cards > .card {
display: flex;
margin: 0.875em 0.5em;
float: none;
}
/* Clearing */
.ui.cards:after,
.ui.card:after {
display: block;
content: ' ';
height: 0px;
clear: both;
overflow: hidden;
visibility: hidden;
}
/* Consecutive Card Groups Preserve Row Spacing */
.ui.cards ~ .ui.cards {
margin-top: 0.875em;
}
/*--------------
Rounded Edges
---------------*/
.ui.cards > .card > :first-child,
.ui.card > :first-child {
border-radius: 0.28571429rem 0.28571429rem 0em 0em !important;
border-top: none !important;
}
.ui.cards > .card > :last-child,
.ui.card > :last-child {
border-radius: 0em 0em 0.28571429rem 0.28571429rem !important;
}
.ui.cards > .card > :only-child,
.ui.card > :only-child {
border-radius: 0.28571429rem !important;
}
/*--------------
Images
---------------*/
.ui.cards > .card > .image,
.ui.card > .image {
position: relative;
display: block;
flex: 0 0 auto;
padding: 0em;
background: rgba(0, 0, 0, 0.05);
}
.ui.cards > .card > .image > img,
.ui.card > .image > img {
display: block;
width: 100%;
height: auto;
border-radius: inherit;
}
.ui.cards > .card > .image:not(.ui) > img,
.ui.card > .image:not(.ui) > img {
border: none;
}
/*--------------
Content
---------------*/
.ui.cards > .card > .content,
.ui.card > .content {
flex-grow: 1;
border: none;
border-top: 1px solid rgba(34, 36, 38, 0.1);
background: none;
margin: 0em;
padding: 1em 1em;
box-shadow: none;
font-size: 1em;
border-radius: 0em;
}
.ui.cards > .card > .content:after,
.ui.card > .content:after {
display: block;
content: ' ';
height: 0px;
clear: both;
overflow: hidden;
visibility: hidden;
}
.ui.cards > .card > .content > .header,
.ui.card > .content > .header {
display: block;
margin: '';
font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;
color: rgba(0, 0, 0, 0.85);
}
/* Default Header Size */
.ui.cards > .card > .content > .header:not(.ui),
.ui.card > .content > .header:not(.ui) {
font-weight: bold;
font-size: 1.28571429em;
margin-top: -0.21425em;
line-height: 1.28571429em;
}
.ui.cards > .card > .content > .meta + .description,
.ui.cards > .card > .content > .header + .description,
.ui.card > .content > .meta + .description,
.ui.card > .content > .header + .description {
margin-top: 0.5em;
}
/*----------------
Floated Content
-----------------*/
.ui.cards > .card [class*="left floated"],
.ui.card [class*="left floated"] {
float: left;
}
.ui.cards > .card [class*="right floated"],
.ui.card [class*="right floated"] {
float: right;
}
/*--------------
Aligned
---------------*/
.ui.cards > .card [class*="left aligned"],
.ui.card [class*="left aligned"] {
text-align: left;
}
.ui.cards > .card [class*="center aligned"],
.ui.card [class*="center aligned"] {
text-align: center;
}
.ui.cards > .card [class*="right aligned"],
.ui.card [class*="right aligned"] {
text-align: right;
}
/*--------------
Content Image
---------------*/
.ui.cards > .card .content img,
.ui.card .content img {
display: inline-block;
vertical-align: middle;
width: '';
}
.ui.cards > .card img.avatar,
.ui.cards > .card .avatar img,
.ui.card img.avatar,
.ui.card .avatar img {
width: 2em;
height: 2em;
border-radius: 500rem;
}
/*--------------
Description
---------------*/
.ui.cards > .card > .content > .description,
.ui.card > .content > .description {
clear: both;
color: rgba(0, 0, 0, 0.68);
}
/*--------------
Paragraph
---------------*/
.ui.cards > .card > .content p,
.ui.card > .content p {
margin: 0em 0em 0.5em;
}
.ui.cards > .card > .content p:last-child,
.ui.card > .content p:last-child {
margin-bottom: 0em;
}
/*--------------
Meta
---------------*/
.ui.cards > .card .meta,
.ui.card .meta {
font-size: 1em;
color: rgba(0, 0, 0, 0.4);
}
.ui.cards > .card .meta *,
.ui.card .meta * {
margin-right: 0.3em;
}
.ui.cards > .card .meta :last-child,
.ui.card .meta :last-child {
margin-right: 0em;
}
.ui.cards > .card .meta [class*="right floated"],
.ui.card .meta [class*="right floated"] {
margin-right: 0em;
margin-left: 0.3em;
}
/*--------------
Links
---------------*/
/* Generic */
.ui.cards > .card > .content a:not(.ui),
.ui.card > .content a:not(.ui) {
color: '';
transition: color 0.1s ease;
}
.ui.cards > .card > .content a:not(.ui):hover,
.ui.card > .content a:not(.ui):hover {
color: '';
}
/* Header */
.ui.cards > .card > .content > a.header,
.ui.card > .content > a.header {
color: rgba(0, 0, 0, 0.85);
}
.ui.cards > .card > .content > a.header:hover,
.ui.card > .content > a.header:hover {
color: #1e70bf;
}
/* Meta */
.ui.cards > .card .meta > a:not(.ui),
.ui.card .meta > a:not(.ui) {
color: rgba(0, 0, 0, 0.4);
}
.ui.cards > .card .meta > a:not(.ui):hover,
.ui.card .meta > a:not(.ui):hover {
color: rgba(0, 0, 0, 0.87);
}
/*--------------
Buttons
---------------*/
.ui.cards > .card > .buttons,
.ui.card > .buttons,
.ui.cards > .card > .button,
.ui.card > .button {
margin: 0px -1px;
width: calc(100% + 2px );
}
/*--------------
Dimmer
---------------*/
.ui.cards > .card .dimmer,
.ui.card .dimmer {
background-color: '';
z-index: 10;
}
/*--------------
Labels
---------------*/
/*-----Star----- */
/* Icon */
.ui.cards > .card > .content .star.icon,
.ui.card > .content .star.icon {
cursor: pointer;
opacity: 0.75;
transition: color 0.1s ease;
}
.ui.cards > .card > .content .star.icon:hover,
.ui.card > .content .star.icon:hover {
opacity: 1;
color: #FFB70A;
}
.ui.cards > .card > .content .active.star.icon,
.ui.card > .content .active.star.icon {
color: #FFE623;
}
/*-----Like----- */
/* Icon */
.ui.cards > .card > .content .like.icon,
.ui.card > .content .like.icon {
cursor: pointer;
opacity: 0.75;
transition: color 0.1s ease;
}
.ui.cards > .card > .content .like.icon:hover,
.ui.card > .content .like.icon:hover {
opacity: 1;
color: #FF2733;
}
.ui.cards > .card > .content .active.like.icon,
.ui.card > .content .active.like.icon {
color: #FF2733;
}
/*----------------
Extra Content
-----------------*/
.ui.cards > .card > .extra,
.ui.card > .extra {
max-width: 100%;
min-height: 0em !important;
flex-grow: 0;
border-top: 1px solid rgba(0, 0, 0, 0.05) !important;
position: static;
background: none;
width: auto;
margin: 0em 0em;
padding: 0.75em 1em;
top: 0em;
left: 0em;
color: rgba(0, 0, 0, 0.4);
box-shadow: none;
transition: color 0.1s ease;
}
.ui.cards > .card > .extra a:not(.ui),
.ui.card > .extra a:not(.ui) {
color: rgba(0, 0, 0, 0.4);
}
.ui.cards > .card > .extra a:not(.ui):hover,
.ui.card > .extra a:not(.ui):hover {
color: #1e70bf;
}
/*******************************
Variations
*******************************/
/*-------------------
Raised
--------------------*/
.ui.raised.cards > .card,
.ui.raised.card {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);
}
.ui.raised.cards a.card:hover,
.ui.link.cards .raised.card:hover,
a.ui.raised.card:hover,
.ui.link.raised.card:hover {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.15), 0px 2px 10px 0px rgba(34, 36, 38, 0.25);
}
.ui.raised.cards > .card,
.ui.raised.card {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);
}
/*-------------------
Centered
--------------------*/
.ui.centered.cards {
justify-content: center;
}
.ui.centered.card {
margin-left: auto;
margin-right: auto;
}
/*-------------------
Fluid
--------------------*/
.ui.fluid.card {
width: 100%;
max-width: 9999px;
}
/*-------------------
Link
--------------------*/
.ui.cards a.card,
.ui.link.cards .card,
a.ui.card,
.ui.link.card {
transform: none;
}
.ui.cards a.card:hover,
.ui.link.cards .card:hover,
a.ui.card:hover,
.ui.link.card:hover {
cursor: pointer;
z-index: 5;
background: #FFFFFF;
border: none;
box-shadow: 0px 1px 3px 0px #BCBDBD, 0px 0px 0px 1px #D4D4D5;
transform: translateY(-3px);
}
/*-------------------
Colors
--------------------*/
/* Red */
.ui.red.cards > .card,
.ui.cards > .red.card,
.ui.red.card {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #DB2828, 0px 1px 3px 0px #D4D4D5;
}
.ui.red.cards > .card:hover,
.ui.cards > .red.card:hover,
.ui.red.card:hover {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #d01919, 0px 1px 3px 0px #BCBDBD;
}
/* Orange */
.ui.orange.cards > .card,
.ui.cards > .orange.card,
.ui.orange.card {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #F2711C, 0px 1px 3px 0px #D4D4D5;
}
.ui.orange.cards > .card:hover,
.ui.cards > .orange.card:hover,
.ui.orange.card:hover {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #f26202, 0px 1px 3px 0px #BCBDBD;
}
/* Yellow */
.ui.yellow.cards > .card,
.ui.cards > .yellow.card,
.ui.yellow.card {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #FBBD08, 0px 1px 3px 0px #D4D4D5;
}
.ui.yellow.cards > .card:hover,
.ui.cards > .yellow.card:hover,
.ui.yellow.card:hover {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #eaae00, 0px 1px 3px 0px #BCBDBD;
}
/* Olive */
.ui.olive.cards > .card,
.ui.cards > .olive.card,
.ui.olive.card {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #B5CC18, 0px 1px 3px 0px #D4D4D5;
}
.ui.olive.cards > .card:hover,
.ui.cards > .olive.card:hover,
.ui.olive.card:hover {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #a7bd0d, 0px 1px 3px 0px #BCBDBD;
}
/* Green */
.ui.green.cards > .card,
.ui.cards > .green.card,
.ui.green.card {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #21BA45, 0px 1px 3px 0px #D4D4D5;
}
.ui.green.cards > .card:hover,
.ui.cards > .green.card:hover,
.ui.green.card:hover {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #16ab39, 0px 1px 3px 0px #BCBDBD;
}
/* Teal */
.ui.teal.cards > .card,
.ui.cards > .teal.card,
.ui.teal.card {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #00B5AD, 0px 1px 3px 0px #D4D4D5;
}
.ui.teal.cards > .card:hover,
.ui.cards > .teal.card:hover,
.ui.teal.card:hover {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #009c95, 0px 1px 3px 0px #BCBDBD;
}
/* Blue */
.ui.blue.cards > .card,
.ui.cards > .blue.card,
.ui.blue.card {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #2185D0, 0px 1px 3px 0px #D4D4D5;
}
.ui.blue.cards > .card:hover,
.ui.cards > .blue.card:hover,
.ui.blue.card:hover {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #1678c2, 0px 1px 3px 0px #BCBDBD;
}
/* Violet */
.ui.violet.cards > .card,
.ui.cards > .violet.card,
.ui.violet.card {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #6435C9, 0px 1px 3px 0px #D4D4D5;
}
.ui.violet.cards > .card:hover,
.ui.cards > .violet.card:hover,
.ui.violet.card:hover {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #5829bb, 0px 1px 3px 0px #BCBDBD;
}
/* Purple */
.ui.purple.cards > .card,
.ui.cards > .purple.card,
.ui.purple.card {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #A333C8, 0px 1px 3px 0px #D4D4D5;
}
.ui.purple.cards > .card:hover,
.ui.cards > .purple.card:hover,
.ui.purple.card:hover {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #9627ba, 0px 1px 3px 0px #BCBDBD;
}
/* Pink */
.ui.pink.cards > .card,
.ui.cards > .pink.card,
.ui.pink.card {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #E03997, 0px 1px 3px 0px #D4D4D5;
}
.ui.pink.cards > .card:hover,
.ui.cards > .pink.card:hover,
.ui.pink.card:hover {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #e61a8d, 0px 1px 3px 0px #BCBDBD;
}
/* Brown */
.ui.brown.cards > .card,
.ui.cards > .brown.card,
.ui.brown.card {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #A5673F, 0px 1px 3px 0px #D4D4D5;
}
.ui.brown.cards > .card:hover,
.ui.cards > .brown.card:hover,
.ui.brown.card:hover {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #975b33, 0px 1px 3px 0px #BCBDBD;
}
/* Grey */
.ui.grey.cards > .card,
.ui.cards > .grey.card,
.ui.grey.card {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #767676, 0px 1px 3px 0px #D4D4D5;
}
.ui.grey.cards > .card:hover,
.ui.cards > .grey.card:hover,
.ui.grey.card:hover {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #838383, 0px 1px 3px 0px #BCBDBD;
}
/* Black */
.ui.black.cards > .card,
.ui.cards > .black.card,
.ui.black.card {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #1B1C1D, 0px 1px 3px 0px #D4D4D5;
}
.ui.black.cards > .card:hover,
.ui.cards > .black.card:hover,
.ui.black.card:hover {
box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #27292a, 0px 1px 3px 0px #BCBDBD;
}
/*--------------
Card Count
---------------*/
.ui.one.cards {
margin-left: 0em;
margin-right: 0em;
}
.ui.one.cards > .card {
width: 100%;
}
.ui.two.cards {
margin-left: -1em;
margin-right: -1em;
}
.ui.two.cards > .card {
width: calc( 50% - 2em );
margin-left: 1em;
margin-right: 1em;
}
.ui.three.cards {
margin-left: -1em;
margin-right: -1em;
}
.ui.three.cards > .card {
width: calc( 33.33333333% - 2em );
margin-left: 1em;
margin-right: 1em;
}
.ui.four.cards {
margin-left: -0.75em;
margin-right: -0.75em;
}
.ui.four.cards > .card {
width: calc( 25% - 1.5em );
margin-left: 0.75em;
margin-right: 0.75em;
}
.ui.five.cards {
margin-left: -0.75em;
margin-right: -0.75em;
}
.ui.five.cards > .card {
width: calc( 20% - 1.5em );
margin-left: 0.75em;
margin-right: 0.75em;
}
.ui.six.cards {
margin-left: -0.75em;
margin-right: -0.75em;
}
.ui.six.cards > .card {
width: calc( 16.66666667% - 1.5em );
margin-left: 0.75em;
margin-right: 0.75em;
}
.ui.seven.cards {
margin-left: -0.5em;
margin-right: -0.5em;
}
.ui.seven.cards > .card {
width: calc( 14.28571429% - 1em );
margin-left: 0.5em;
margin-right: 0.5em;
}
.ui.eight.cards {
margin-left: -0.5em;
margin-right: -0.5em;
}
.ui.eight.cards > .card {
width: calc( 12.5% - 1em );
margin-left: 0.5em;
margin-right: 0.5em;
font-size: 11px;
}
.ui.nine.cards {
margin-left: -0.5em;
margin-right: -0.5em;
}
.ui.nine.cards > .card {
width: calc( 11.11111111% - 1em );
margin-left: 0.5em;
margin-right: 0.5em;
font-size: 10px;
}
.ui.ten.cards {
margin-left: -0.5em;
margin-right: -0.5em;
}
.ui.ten.cards > .card {
width: calc( 10% - 1em );
margin-left: 0.5em;
margin-right: 0.5em;
}
/*-------------------
Doubling
--------------------*/
/* Mobile Only */
@media only screen and (max-width: 767px) {
.ui.two.doubling.cards {
margin-left: 0em;
margin-right: 0em;
}
.ui.two.doubling.cards > .card {
width: 100%;
margin-left: 0em;
margin-right: 0em;
}
.ui.three.doubling.cards {
margin-left: -1em;
margin-right: -1em;
}
.ui.three.doubling.cards > .card {
width: calc( 50% - 2em );
margin-left: 1em;
margin-right: 1em;
}
.ui.four.doubling.cards {
margin-left: -1em;
margin-right: -1em;
}
.ui.four.doubling.cards > .card {
width: calc( 50% - 2em );
margin-left: 1em;
margin-right: 1em;
}
.ui.five.doubling.cards {
margin-left: -1em;
margin-right: -1em;
}
.ui.five.doubling.cards > .card {
width: calc( 50% - 2em );
margin-left: 1em;
margin-right: 1em;
}
.ui.six.doubling.cards {
margin-left: -1em;
margin-right: -1em;
}
.ui.six.doubling.cards > .card {
width: calc( 50% - 2em );
margin-left: 1em;
margin-right: 1em;
}
.ui.seven.doubling.cards {
margin-left: -1em;
margin-right: -1em;
}
.ui.seven.doubling.cards > .card {
width: calc( 33.33333333% - 2em );
margin-left: 1em;
margin-right: 1em;
}
.ui.eight.doubling.cards {
margin-left: -1em;
margin-right: -1em;
}
.ui.eight.doubling.cards > .card {
width: calc( 33.33333333% - 2em );
margin-left: 1em;
margin-right: 1em;
}
.ui.nine.doubling.cards {
margin-left: -1em;
margin-right: -1em;
}
.ui.nine.doubling.cards > .card {
width: calc( 33.33333333% - 2em );
margin-left: 1em;
margin-right: 1em;
}
.ui.ten.doubling.cards {
margin-left: -1em;
margin-right: -1em;
}
.ui.ten.doubling.cards > .card {
width: calc( 33.33333333% - 2em );
margin-left: 1em;
margin-right: 1em;
}
}
/* Tablet Only */
@media only screen and (min-width: 768px) and (max-width: 991px) {
.ui.two.doubling.cards {
margin-left: 0em;
margin-right: 0em;
}
.ui.two.doubling.cards > .card {
width: 100%;
margin-left: 0em;
margin-right: 0em;
}
.ui.three.doubling.cards {
margin-left: -1em;
margin-right: -1em;
}
.ui.three.doubling.cards > .card {
width: calc( 50% - 2em );
margin-left: 1em;
margin-right: 1em;
}
.ui.four.doubling.cards {
margin-left: -1em;
margin-right: -1em;
}
.ui.four.doubling.cards > .card {
width: calc( 50% - 2em );
margin-left: 1em;
margin-right: 1em;
}
.ui.five.doubling.cards {
margin-left: -1em;
margin-right: -1em;
}
.ui.five.doubling.cards > .card {
width: calc( 33.33333333% - 2em );
margin-left: 1em;
margin-right: 1em;
}
.ui.six.doubling.cards {
margin-left: -1em;
margin-right: -1em;
}
.ui.six.doubling.cards > .card {
width: calc( 33.33333333% - 2em );
margin-left: 1em;
margin-right: 1em;
}
.ui.eight.doubling.cards {
margin-left: -1em;
margin-right: -1em;
}
.ui.eight.doubling.cards > .card {
width: calc( 33.33333333% - 2em );
margin-left: 1em;
margin-right: 1em;
}
.ui.eight.doubling.cards {
margin-left: -0.75em;
margin-right: -0.75em;
}
.ui.eight.doubling.cards > .card {
width: calc( 25% - 1.5em );
margin-left: 0.75em;
margin-right: 0.75em;
}
.ui.nine.doubling.cards {
margin-left: -0.75em;
margin-right: -0.75em;
}
.ui.nine.doubling.cards > .card {
width: calc( 25% - 1.5em );
margin-left: 0.75em;
margin-right: 0.75em;
}
.ui.ten.doubling.cards {
margin-left: -0.75em;
margin-right: -0.75em;
}
.ui.ten.doubling.cards > .card {
width: calc( 20% - 1.5em );
margin-left: 0.75em;
margin-right: 0.75em;
}
}
/*-------------------
Stackable
--------------------*/
@media only screen and (max-width: 767px) {
.ui.stackable.cards {
display: block !important;
}
.ui.stackable.cards .card:first-child {
margin-top: 0em !important;
}
.ui.stackable.cards > .card {
display: block !important;
height: auto !important;
margin: 1em 1em;
padding: 0 !important;
width: calc( 100% - 2em ) !important;
}
}
/*--------------
Size
---------------*/
.ui.cards > .card {
font-size: 1em;
}
/*******************************
Theme Overrides
*******************************/
/*******************************
User Variable Overrides
*******************************/

9
wms/contract-repair/semantic/Semantic-UI-master/dist/components/card.min.css

File diff suppressed because one or more lines are too long

608
wms/contract-repair/semantic/Semantic-UI-master/dist/components/checkbox.css

@ -0,0 +1,608 @@
/*!
* # Semantic UI 2.5.0 - Checkbox
* http://github.com/semantic-org/semantic-ui/
*
*
* Released under the MIT license
* http://opensource.org/licenses/MIT
*
*/
/*******************************
Checkbox
*******************************/
/*--------------
Content
---------------*/
.ui.checkbox {
position: relative;
display: inline-block;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
outline: none;
vertical-align: baseline;
font-style: normal;
min-height: 17px;
font-size: 1rem;
line-height: 17px;
min-width: 17px;
}
/* HTML Checkbox */
.ui.checkbox input[type="checkbox"],
.ui.checkbox input[type="radio"] {
cursor: pointer;
position: absolute;
top: 0px;
left: 0px;
opacity: 0 !important;
outline: none;
z-index: 3;
width: 17px;
height: 17px;
}
/*--------------
Box
---------------*/
.ui.checkbox .box,
.ui.checkbox label {
cursor: auto;
position: relative;
display: block;
padding-left: 1.85714em;
outline: none;
font-size: 1em;
}
.ui.checkbox .box:before,
.ui.checkbox label:before {
position: absolute;
top: 0px;
left: 0px;
width: 17px;
height: 17px;
content: '';
background: #FFFFFF;
border-radius: 0.21428571rem;
transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease;
border: 1px solid #D4D4D5;
}
/*--------------
Checkmark
---------------*/
.ui.checkbox .box:after,
.ui.checkbox label:after {
position: absolute;
font-size: 14px;
top: 0px;
left: 0px;
width: 17px;
height: 17px;
text-align: center;
opacity: 0;
color: rgba(0, 0, 0, 0.87);
transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease;
}
/*--------------
Label
---------------*/
/* Inside */
.ui.checkbox label,
.ui.checkbox + label {
color: rgba(0, 0, 0, 0.87);
transition: color 0.1s ease;
}
/* Outside */
.ui.checkbox + label {
vertical-align: middle;
}
/*******************************
States
*******************************/
/*--------------
Hover
---------------*/
.ui.checkbox .box:hover::before,
.ui.checkbox label:hover::before {
background: #FFFFFF;
border-color: rgba(34, 36, 38, 0.35);
}
.ui.checkbox label:hover,
.ui.checkbox + label:hover {
color: rgba(0, 0, 0, 0.8);
}
/*--------------
Down
---------------*/
.ui.checkbox .box:active::before,
.ui.checkbox label:active::before {
background: #F9FAFB;
border-color: rgba(34, 36, 38, 0.35);
}
.ui.checkbox .box:active::after,
.ui.checkbox label:active::after {
color: rgba(0, 0, 0, 0.95);
}
.ui.checkbox input:active ~ label {
color: rgba(0, 0, 0, 0.95);
}
/*--------------
Focus
---------------*/
.ui.checkbox input:focus ~ .box:before,
.ui.checkbox input:focus ~ label:before {
background: #FFFFFF;
border-color: #96C8DA;
}
.ui.checkbox input:focus ~ .box:after,
.ui.checkbox input:focus ~ label:after {
color: rgba(0, 0, 0, 0.95);
}
.ui.checkbox input:focus ~ label {
color: rgba(0, 0, 0, 0.95);
}
/*--------------
Active
---------------*/
.ui.checkbox input:checked ~ .box:before,
.ui.checkbox input:checked ~ label:before {
background: #FFFFFF;
border-color: rgba(34, 36, 38, 0.35);
}
.ui.checkbox input:checked ~ .box:after,
.ui.checkbox input:checked ~ label:after {
opacity: 1;
color: rgba(0, 0, 0, 0.95);
}
/*--------------
Indeterminate
---------------*/
.ui.checkbox input:not([type=radio]):indeterminate ~ .box:before,
.ui.checkbox input:not([type=radio]):indeterminate ~ label:before {
background: #FFFFFF;
border-color: rgba(34, 36, 38, 0.35);
}
.ui.checkbox input:not([type=radio]):indeterminate ~ .box:after,
.ui.checkbox input:not([type=radio]):indeterminate ~ label:after {
opacity: 1;
color: rgba(0, 0, 0, 0.95);
}
/*--------------
Active Focus
---------------*/
.ui.checkbox input:not([type=radio]):indeterminate:focus ~ .box:before,
.ui.checkbox input:not([type=radio]):indeterminate:focus ~ label:before,
.ui.checkbox input:checked:focus ~ .box:before,
.ui.checkbox input:checked:focus ~ label:before {
background: #FFFFFF;
border-color: #96C8DA;
}
.ui.checkbox input:not([type=radio]):indeterminate:focus ~ .box:after,
.ui.checkbox input:not([type=radio]):indeterminate:focus ~ label:after,
.ui.checkbox input:checked:focus ~ .box:after,
.ui.checkbox input:checked:focus ~ label:after {
color: rgba(0, 0, 0, 0.95);
}
/*--------------
Read-Only
---------------*/
.ui.read-only.checkbox,
.ui.read-only.checkbox label {
cursor: default;
}
/*--------------
Disabled
---------------*/
.ui.disabled.checkbox .box:after,
.ui.disabled.checkbox label,
.ui.checkbox input[disabled] ~ .box:after,
.ui.checkbox input[disabled] ~ label {
cursor: default !important;
opacity: 0.5;
color: #000000;
}
/*--------------
Hidden
---------------*/
/* Initialized checkbox moves input below element
to prevent manually triggering */
.ui.checkbox input.hidden {
z-index: -1;
}
/* Selectable Label */
.ui.checkbox input.hidden + label {
cursor: pointer;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
/*******************************
Types
*******************************/
/*--------------
Radio
---------------*/
.ui.radio.checkbox {
min-height: 15px;
}
.ui.radio.checkbox .box,
.ui.radio.checkbox label {
padding-left: 1.85714em;
}
/* Box */
.ui.radio.checkbox .box:before,
.ui.radio.checkbox label:before {
content: '';
transform: none;
width: 15px;
height: 15px;
border-radius: 500rem;
top: 1px;
left: 0px;
}
/* Bullet */
.ui.radio.checkbox .box:after,
.ui.radio.checkbox label:after {
border: none;
content: '' !important;
width: 15px;
height: 15px;
line-height: 15px;
}
/* Radio Checkbox */
.ui.radio.checkbox .box:after,
.ui.radio.checkbox label:after {
top: 1px;
left: 0px;
width: 15px;
height: 15px;
border-radius: 500rem;
transform: scale(0.46666667);
background-color: rgba(0, 0, 0, 0.87);
}
/* Focus */
.ui.radio.checkbox input:focus ~ .box:before,
.ui.radio.checkbox input:focus ~ label:before {
background-color: #FFFFFF;
}
.ui.radio.checkbox input:focus ~ .box:after,
.ui.radio.checkbox input:focus ~ label:after {
background-color: rgba(0, 0, 0, 0.95);
}
/* Indeterminate */
.ui.radio.checkbox input:indeterminate ~ .box:after,
.ui.radio.checkbox input:indeterminate ~ label:after {
opacity: 0;
}
/* Active */
.ui.radio.checkbox input:checked ~ .box:before,
.ui.radio.checkbox input:checked ~ label:before {
background-color: #FFFFFF;
}
.ui.radio.checkbox input:checked ~ .box:after,
.ui.radio.checkbox input:checked ~ label:after {
background-color: rgba(0, 0, 0, 0.95);
}
/* Active Focus */
.ui.radio.checkbox input:focus:checked ~ .box:before,
.ui.radio.checkbox input:focus:checked ~ label:before {
background-color: #FFFFFF;
}
.ui.radio.checkbox input:focus:checked ~ .box:after,
.ui.radio.checkbox input:focus:checked ~ label:after {
background-color: rgba(0, 0, 0, 0.95);
}
/*--------------
Slider
---------------*/
.ui.slider.checkbox {
min-height: 1.25rem;
}
/* Input */
.ui.slider.checkbox input {
width: 3.5rem;
height: 1.25rem;
}
/* Label */
.ui.slider.checkbox .box,
.ui.slider.checkbox label {
padding-left: 4.5rem;
line-height: 1rem;
color: rgba(0, 0, 0, 0.4);
}
/* Line */
.ui.slider.checkbox .box:before,
.ui.slider.checkbox label:before {
display: block;
position: absolute;
content: '';
border: none !important;
left: 0em;
z-index: 1;
top: 0.4rem;
background-color: rgba(0, 0, 0, 0.05);
width: 3.5rem;
height: 0.21428571rem;
transform: none;
border-radius: 500rem;
transition: background 0.3s ease;
}
/* Handle */
.ui.slider.checkbox .box:after,
.ui.slider.checkbox label:after {
background: #FFFFFF linear-gradient(transparent, rgba(0, 0, 0, 0.05));
position: absolute;
content: '' !important;
opacity: 1;
z-index: 2;
border: none;
box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;
width: 1.5rem;
height: 1.5rem;
top: -0.25rem;
left: 0em;
transform: none;
border-radius: 500rem;
transition: left 0.3s ease;
}
/* Focus */
.ui.slider.checkbox input:focus ~ .box:before,
.ui.slider.checkbox input:focus ~ label:before {
background-color: rgba(0, 0, 0, 0.15);
border: none;
}
/* Hover */
.ui.slider.checkbox .box:hover,
.ui.slider.checkbox label:hover {
color: rgba(0, 0, 0, 0.8);
}
.ui.slider.checkbox .box:hover::before,
.ui.slider.checkbox label:hover::before {
background: rgba(0, 0, 0, 0.15);
}
/* Active */
.ui.slider.checkbox input:checked ~ .box,
.ui.slider.checkbox input:checked ~ label {
color: rgba(0, 0, 0, 0.95) !important;
}
.ui.slider.checkbox input:checked ~ .box:before,
.ui.slider.checkbox input:checked ~ label:before {
background-color: #545454 !important;
}
.ui.slider.checkbox input:checked ~ .box:after,
.ui.slider.checkbox input:checked ~ label:after {
left: 2rem;
}
/* Active Focus */
.ui.slider.checkbox input:focus:checked ~ .box,
.ui.slider.checkbox input:focus:checked ~ label {
color: rgba(0, 0, 0, 0.95) !important;
}
.ui.slider.checkbox input:focus:checked ~ .box:before,
.ui.slider.checkbox input:focus:checked ~ label:before {
background-color: #000000 !important;
}
/*--------------
Toggle
---------------*/
.ui.toggle.checkbox {
min-height: 1.5rem;
}
/* Input */
.ui.toggle.checkbox input {
width: 3.5rem;
height: 1.5rem;
}
/* Label */
.ui.toggle.checkbox .box,
.ui.toggle.checkbox label {
min-height: 1.5rem;
padding-left: 4.5rem;
color: rgba(0, 0, 0, 0.87);
}
.ui.toggle.checkbox label {
padding-top: 0.15em;
}
/* Switch */
.ui.toggle.checkbox .box:before,
.ui.toggle.checkbox label:before {
display: block;
position: absolute;
content: '';
z-index: 1;
transform: none;
border: none;
top: 0rem;
background: rgba(0, 0, 0, 0.05);
box-shadow: none;
width: 3.5rem;
height: 1.5rem;
border-radius: 500rem;
}
/* Handle */
.ui.toggle.checkbox .box:after,
.ui.toggle.checkbox label:after {
background: #FFFFFF linear-gradient(transparent, rgba(0, 0, 0, 0.05));
position: absolute;
content: '' !important;
opacity: 1;
z-index: 2;
border: none;
box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;
width: 1.5rem;
height: 1.5rem;
top: 0rem;
left: 0em;
border-radius: 500rem;
transition: background 0.3s ease, left 0.3s ease;
}
.ui.toggle.checkbox input ~ .box:after,
.ui.toggle.checkbox input ~ label:after {
left: -0.05rem;
box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;
}
/* Focus */
.ui.toggle.checkbox input:focus ~ .box:before,
.ui.toggle.checkbox input:focus ~ label:before {
background-color: rgba(0, 0, 0, 0.15);
border: none;
}
/* Hover */
.ui.toggle.checkbox .box:hover::before,
.ui.toggle.checkbox label:hover::before {
background-color: rgba(0, 0, 0, 0.15);
border: none;
}
/* Active */
.ui.toggle.checkbox input:checked ~ .box,
.ui.toggle.checkbox input:checked ~ label {
color: rgba(0, 0, 0, 0.95) !important;
}
.ui.toggle.checkbox input:checked ~ .box:before,
.ui.toggle.checkbox input:checked ~ label:before {
background-color: #2185D0 !important;
}
.ui.toggle.checkbox input:checked ~ .box:after,
.ui.toggle.checkbox input:checked ~ label:after {
left: 2.15rem;
box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;
}
/* Active Focus */
.ui.toggle.checkbox input:focus:checked ~ .box,
.ui.toggle.checkbox input:focus:checked ~ label {
color: rgba(0, 0, 0, 0.95) !important;
}
.ui.toggle.checkbox input:focus:checked ~ .box:before,
.ui.toggle.checkbox input:focus:checked ~ label:before {
background-color: #0d71bb !important;
}
/*******************************
Variations
*******************************/
/*--------------
Fitted
---------------*/
.ui.fitted.checkbox .box,
.ui.fitted.checkbox label {
padding-left: 0em !important;
}
.ui.fitted.toggle.checkbox,
.ui.fitted.toggle.checkbox {
width: 3.5rem;
}
.ui.fitted.slider.checkbox,
.ui.fitted.slider.checkbox {
width: 3.5rem;
}
/*******************************
Theme Overrides
*******************************/
@font-face {
font-family: 'Checkbox';
src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBD8AAAC8AAAAYGNtYXAYVtCJAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zn4huwUAAAF4AAABYGhlYWQGPe1ZAAAC2AAAADZoaGVhB30DyAAAAxAAAAAkaG10eBBKAEUAAAM0AAAAHGxvY2EAmgESAAADUAAAABBtYXhwAAkALwAAA2AAAAAgbmFtZSC8IugAAAOAAAABknBvc3QAAwAAAAAFFAAAACAAAwMTAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADoAgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6AL//f//AAAAAAAg6AD//f//AAH/4xgEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAEUAUQO7AvgAGgAAARQHAQYjIicBJjU0PwE2MzIfAQE2MzIfARYVA7sQ/hQQFhcQ/uMQEE4QFxcQqAF2EBcXEE4QAnMWEP4UEBABHRAXFhBOEBCoAXcQEE4QFwAAAAABAAABbgMlAkkAFAAAARUUBwYjISInJj0BNDc2MyEyFxYVAyUQEBf9SRcQEBAQFwK3FxAQAhJtFxAQEBAXbRcQEBAQFwAAAAABAAAASQMlA24ALAAAARUUBwYrARUUBwYrASInJj0BIyInJj0BNDc2OwE1NDc2OwEyFxYdATMyFxYVAyUQEBfuEBAXbhYQEO4XEBAQEBfuEBAWbhcQEO4XEBACEm0XEBDuFxAQEBAX7hAQF20XEBDuFxAQEBAX7hAQFwAAAQAAAAIAAHRSzT9fDzz1AAsEAAAAAADRsdR3AAAAANGx1HcAAAAAA7sDbgAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAADuwABAAAAAAAAAAAAAAAAAAAABwQAAAAAAAAAAAAAAAIAAAAEAABFAyUAAAMlAAAAAAAAAAoAFAAeAE4AcgCwAAEAAAAHAC0AAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAIAAAAAQAAAAAAAgAHAGkAAQAAAAAAAwAIADkAAQAAAAAABAAIAH4AAQAAAAAABQALABgAAQAAAAAABgAIAFEAAQAAAAAACgAaAJYAAwABBAkAAQAQAAgAAwABBAkAAgAOAHAAAwABBAkAAwAQAEEAAwABBAkABAAQAIYAAwABBAkABQAWACMAAwABBAkABgAQAFkAAwABBAkACgA0ALBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhWZXJzaW9uIDIuMABWAGUAcgBzAGkAbwBuACAAMgAuADBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhDaGVja2JveABDAGgAZQBjAGsAYgBvAHhSZWd1bGFyAFIAZQBnAHUAbABhAHJDaGVja2JveABDAGgAZQBjAGsAYgBvAHhGb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('truetype');
}
/* Checkmark */
.ui.checkbox label:after,
.ui.checkbox .box:after {
font-family: 'Checkbox';
}
/* Checked */
.ui.checkbox input:checked ~ .box:after,
.ui.checkbox input:checked ~ label:after {
content: '\e800';
}
/* Indeterminate */
.ui.checkbox input:indeterminate ~ .box:after,
.ui.checkbox input:indeterminate ~ label:after {
font-size: 12px;
content: '\e801';
}
/* UTF Reference
.check:before { content: '\e800'; }
.dash:before { content: '\e801'; }
.plus:before { content: '\e802'; }
*/
/*******************************
Site Overrides
*******************************/

831
wms/contract-repair/semantic/Semantic-UI-master/dist/components/checkbox.js

@ -0,0 +1,831 @@
/*!
* # Semantic UI 2.5.0 - Checkbox
* http://github.com/semantic-org/semantic-ui/
*
*
* Released under the MIT license
* http://opensource.org/licenses/MIT
*
*/
;(function ($, window, document, undefined) {
'use strict';
window = (typeof window != 'undefined' && window.Math == Math)
? window
: (typeof self != 'undefined' && self.Math == Math)
? self
: Function('return this')()
;
$.fn.checkbox = function(parameters) {
var
$allModules = $(this),
moduleSelector = $allModules.selector || '',
time = new Date().getTime(),
performance = [],
query = arguments[0],
methodInvoked = (typeof query == 'string'),
queryArguments = [].slice.call(arguments, 1),
returnedValue
;
$allModules
.each(function() {
var
settings = $.extend(true, {}, $.fn.checkbox.settings, parameters),
className = settings.className,
namespace = settings.namespace,
selector = settings.selector,
error = settings.error,
eventNamespace = '.' + namespace,
moduleNamespace = 'module-' + namespace,
$module = $(this),
$label = $(this).children(selector.label),
$input = $(this).children(selector.input),
input = $input[0],
initialLoad = false,
shortcutPressed = false,
instance = $module.data(moduleNamespace),
observer,
element = this,
module
;
module = {
initialize: function() {
module.verbose('Initializing checkbox', settings);
module.create.label();
module.bind.events();
module.set.tabbable();
module.hide.input();
module.observeChanges();
module.instantiate();
module.setup();
},
instantiate: function() {
module.verbose('Storing instance of module', module);
instance = module;
$module
.data(moduleNamespace, module)
;
},
destroy: function() {
module.verbose('Destroying module');
module.unbind.events();
module.show.input();
$module.removeData(moduleNamespace);
},
fix: {
reference: function() {
if( $module.is(selector.input) ) {
module.debug('Behavior called on <input> adjusting invoked element');
$module = $module.closest(selector.checkbox);
module.refresh();
}
}
},
setup: function() {
module.set.initialLoad();
if( module.is.indeterminate() ) {
module.debug('Initial value is indeterminate');
module.indeterminate();
}
else if( module.is.checked() ) {
module.debug('Initial value is checked');
module.check();
}
else {
module.debug('Initial value is unchecked');
module.uncheck();
}
module.remove.initialLoad();
},
refresh: function() {
$label = $module.children(selector.label);
$input = $module.children(selector.input);
input = $input[0];
},
hide: {
input: function() {
module.verbose('Modifying <input> z-index to be unselectable');
$input.addClass(className.hidden);
}
},
show: {
input: function() {
module.verbose('Modifying <input> z-index to be selectable');
$input.removeClass(className.hidden);
}
},
observeChanges: function() {
if('MutationObserver' in window) {
observer = new MutationObserver(function(mutations) {
module.debug('DOM tree modified, updating selector cache');
module.refresh();
});
observer.observe(element, {
childList : true,
subtree : true
});
module.debug('Setting up mutation observer', observer);
}
},
attachEvents: function(selector, event) {
var
$element = $(selector)
;
event = $.isFunction(module[event])
? module[event]
: module.toggle
;
if($element.length > 0) {
module.debug('Attaching checkbox events to element', selector, event);
$element
.on('click' + eventNamespace, event)
;
}
else {
module.error(error.notFound);
}
},
event: {
click: function(event) {
var
$target = $(event.target)
;
if( $target.is(selector.input) ) {
module.verbose('Using default check action on initialized checkbox');
return;
}
if( $target.is(selector.link) ) {
module.debug('Clicking link inside checkbox, skipping toggle');
return;
}
module.toggle();
$input.focus();
event.preventDefault();
},
keydown: function(event) {
var
key = event.which,
keyCode = {
enter : 13,
space : 32,
escape : 27
}
;
if(key == keyCode.escape) {
module.verbose('Escape key pressed blurring field');
$input.blur();
shortcutPressed = true;
}
else if(!event.ctrlKey && ( key == keyCode.space || key == keyCode.enter) ) {
module.verbose('Enter/space key pressed, toggling checkbox');
module.toggle();
shortcutPressed = true;
}
else {
shortcutPressed = false;
}
},
keyup: function(event) {
if(shortcutPressed) {
event.preventDefault();
}
}
},
check: function() {
if( !module.should.allowCheck() ) {
return;
}
module.debug('Checking checkbox', $input);
module.set.checked();
if( !module.should.ignoreCallbacks() ) {
settings.onChecked.call(input);
settings.onChange.call(input);
}
},
uncheck: function() {
if( !module.should.allowUncheck() ) {
return;
}
module.debug('Unchecking checkbox');
module.set.unchecked();
if( !module.should.ignoreCallbacks() ) {
settings.onUnchecked.call(input);
settings.onChange.call(input);
}
},
indeterminate: function() {
if( module.should.allowIndeterminate() ) {
module.debug('Checkbox is already indeterminate');
return;
}
module.debug('Making checkbox indeterminate');
module.set.indeterminate();
if( !module.should.ignoreCallbacks() ) {
settings.onIndeterminate.call(input);
settings.onChange.call(input);
}
},
determinate: function() {
if( module.should.allowDeterminate() ) {
module.debug('Checkbox is already determinate');
return;
}
module.debug('Making checkbox determinate');
module.set.determinate();
if( !module.should.ignoreCallbacks() ) {
settings.onDeterminate.call(input);
settings.onChange.call(input);
}
},
enable: function() {
if( module.is.enabled() ) {
module.debug('Checkbox is already enabled');
return;
}
module.debug('Enabling checkbox');
module.set.enabled();
settings.onEnable.call(input);
// preserve legacy callbacks
settings.onEnabled.call(input);
},
disable: function() {
if( module.is.disabled() ) {
module.debug('Checkbox is already disabled');
return;
}
module.debug('Disabling checkbox');
module.set.disabled();
settings.onDisable.call(input);
// preserve legacy callbacks
settings.onDisabled.call(input);
},
get: {
radios: function() {
var
name = module.get.name()
;
return $('input[name="' + name + '"]').closest(selector.checkbox);
},
otherRadios: function() {
return module.get.radios().not($module);
},
name: function() {
return $input.attr('name');
}
},
is: {
initialLoad: function() {
return initialLoad;
},
radio: function() {
return ($input.hasClass(className.radio) || $input.attr('type') == 'radio');
},
indeterminate: function() {
return $input.prop('indeterminate') !== undefined && $input.prop('indeterminate');
},
checked: function() {
return $input.prop('checked') !== undefined && $input.prop('checked');
},
disabled: function() {
return $input.prop('disabled') !== undefined && $input.prop('disabled');
},
enabled: function() {
return !module.is.disabled();
},
determinate: function() {
return !module.is.indeterminate();
},
unchecked: function() {
return !module.is.checked();
}
},
should: {
allowCheck: function() {
if(module.is.determinate() && module.is.checked() && !module.should.forceCallbacks() ) {
module.debug('Should not allow check, checkbox is already checked');
return false;
}
if(settings.beforeChecked.apply(input) === false) {
module.debug('Should not allow check, beforeChecked cancelled');
return false;
}
return true;
},
allowUncheck: function() {
if(module.is.determinate() && module.is.unchecked() && !module.should.forceCallbacks() ) {
module.debug('Should not allow uncheck, checkbox is already unchecked');
return false;
}
if(settings.beforeUnchecked.apply(input) === false) {
module.debug('Should not allow uncheck, beforeUnchecked cancelled');
return false;
}
return true;
},
allowIndeterminate: function() {
if(module.is.indeterminate() && !module.should.forceCallbacks() ) {
module.debug('Should not allow indeterminate, checkbox is already indeterminate');
return false;
}
if(settings.beforeIndeterminate.apply(input) === false) {
module.debug('Should not allow indeterminate, beforeIndeterminate cancelled');
return false;
}
return true;
},
allowDeterminate: function() {
if(module.is.determinate() && !module.should.forceCallbacks() ) {
module.debug('Should not allow determinate, checkbox is already determinate');
return false;
}
if(settings.beforeDeterminate.apply(input) === false) {
module.debug('Should not allow determinate, beforeDeterminate cancelled');
return false;
}
return true;
},
forceCallbacks: function() {
return (module.is.initialLoad() && settings.fireOnInit);
},
ignoreCallbacks: function() {
return (initialLoad && !settings.fireOnInit);
}
},
can: {
change: function() {
return !( $module.hasClass(className.disabled) || $module.hasClass(className.readOnly) || $input.prop('disabled') || $input.prop('readonly') );
},
uncheck: function() {
return (typeof settings.uncheckable === 'boolean')
? settings.uncheckable
: !module.is.radio()
;
}
},
set: {
initialLoad: function() {
initialLoad = true;
},
checked: function() {
module.verbose('Setting class to checked');
$module
.removeClass(className.indeterminate)
.addClass(className.checked)
;
if( module.is.radio() ) {
module.uncheckOthers();
}
if(!module.is.indeterminate() && module.is.checked()) {
module.debug('Input is already checked, skipping input property change');
return;
}
module.verbose('Setting state to checked', input);
$input
.prop('indeterminate', false)
.prop('checked', true)
;
module.trigger.change();
},
unchecked: function() {
module.verbose('Removing checked class');
$module
.removeClass(className.indeterminate)
.removeClass(className.checked)
;
if(!module.is.indeterminate() && module.is.unchecked() ) {
module.debug('Input is already unchecked');
return;
}
module.debug('Setting state to unchecked');
$input
.prop('indeterminate', false)
.prop('checked', false)
;
module.trigger.change();
},
indeterminate: function() {
module.verbose('Setting class to indeterminate');
$module
.addClass(className.indeterminate)
;
if( module.is.indeterminate() ) {
module.debug('Input is already indeterminate, skipping input property change');
return;
}
module.debug('Setting state to indeterminate');
$input
.prop('indeterminate', true)
;
module.trigger.change();
},
determinate: function() {
module.verbose('Removing indeterminate class');
$module
.removeClass(className.indeterminate)
;
if( module.is.determinate() ) {
module.debug('Input is already determinate, skipping input property change');
return;
}
module.debug('Setting state to determinate');
$input
.prop('indeterminate', false)
;
},
disabled: function() {
module.verbose('Setting class to disabled');
$module
.addClass(className.disabled)
;
if( module.is.disabled() ) {
module.debug('Input is already disabled, skipping input property change');
return;
}
module.debug('Setting state to disabled');
$input
.prop('disabled', 'disabled')
;
module.trigger.change();
},
enabled: function() {
module.verbose('Removing disabled class');
$module.removeClass(className.disabled);
if( module.is.enabled() ) {
module.debug('Input is already enabled, skipping input property change');
return;
}
module.debug('Setting state to enabled');
$input
.prop('disabled', false)
;
module.trigger.change();
},
tabbable: function() {
module.verbose('Adding tabindex to checkbox');
if( $input.attr('tabindex') === undefined) {
$input.attr('tabindex', 0);
}
}
},
remove: {
initialLoad: function() {
initialLoad = false;
}
},
trigger: {
change: function() {
var
events = document.createEvent('HTMLEvents'),
inputElement = $input[0]
;
if(inputElement) {
module.verbose('Triggering native change event');
events.initEvent('change', true, false);
inputElement.dispatchEvent(events);
}
}
},
create: {
label: function() {
if($input.prevAll(selector.label).length > 0) {
$input.prev(selector.label).detach().insertAfter($input);
module.debug('Moving existing label', $label);
}
else if( !module.has.label() ) {
$label = $('<label>').insertAfter($input);
module.debug('Creating label', $label);
}
}
},
has: {
label: function() {
return ($label.length > 0);
}
},
bind: {
events: function() {
module.verbose('Attaching checkbox events');
$module
.on('click' + eventNamespace, module.event.click)
.on('keydown' + eventNamespace, selector.input, module.event.keydown)
.on('keyup' + eventNamespace, selector.input, module.event.keyup)
;
}
},
unbind: {
events: function() {
module.debug('Removing events');
$module
.off(eventNamespace)
;
}
},
uncheckOthers: function() {
var
$radios = module.get.otherRadios()
;
module.debug('Unchecking other radios', $radios);
$radios.removeClass(className.checked);
},
toggle: function() {
if( !module.can.change() ) {
if(!module.is.radio()) {
module.debug('Checkbox is read-only or disabled, ignoring toggle');
}
return;
}
if( module.is.indeterminate() || module.is.unchecked() ) {
module.debug('Currently unchecked');
module.check();
}
else if( module.is.checked() && module.can.uncheck() ) {
module.debug('Currently checked');
module.uncheck();
}
},
setting: function(name, value) {
module.debug('Changing setting', name, value);
if( $.isPlainObject(name) ) {
$.extend(true, settings, name);
}
else if(value !== undefined) {
if($.isPlainObject(settings[name])) {
$.extend(true, settings[name], value);
}
else {
settings[name] = value;
}
}
else {
return settings[name];
}
},
internal: function(name, value) {
if( $.isPlainObject(name) ) {
$.extend(true, module, name);
}
else if(value !== undefined) {
module[name] = value;
}
else {
return module[name];
}
},
debug: function() {
if(!settings.silent && settings.debug) {
if(settings.performance) {
module.performance.log(arguments);
}
else {
module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
module.debug.apply(console, arguments);
}
}
},
verbose: function() {
if(!settings.silent && settings.verbose && settings.debug) {
if(settings.performance) {
module.performance.log(arguments);
}
else {
module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
module.verbose.apply(console, arguments);
}
}
},
error: function() {
if(!settings.silent) {
module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
module.error.apply(console, arguments);
}
},
performance: {
log: function(message) {
var
currentTime,
executionTime,
previousTime
;
if(settings.performance) {
currentTime = new Date().getTime();
previousTime = time || currentTime;
executionTime = currentTime - previousTime;
time = currentTime;
performance.push({
'Name' : message[0],
'Arguments' : [].slice.call(message, 1) || '',
'Element' : element,
'Execution Time' : executionTime
});
}
clearTimeout(module.performance.timer);
module.performance.timer = setTimeout(module.performance.display, 500);
},
display: function() {
var
title = settings.name + ':',
totalTime = 0
;
time = false;
clearTimeout(module.performance.timer);
$.each(performance, function(index, data) {
totalTime += data['Execution Time'];
});
title += ' ' + totalTime + 'ms';
if(moduleSelector) {
title += ' \'' + moduleSelector + '\'';
}
if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
console.groupCollapsed(title);
if(console.table) {
console.table(performance);
}
else {
$.each(performance, function(index, data) {
console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
});
}
console.groupEnd();
}
performance = [];
}
},
invoke: function(query, passedArguments, context) {
var
object = instance,
maxDepth,
found,
response
;
passedArguments = passedArguments || queryArguments;
context = element || context;
if(typeof query == 'string' && object !== undefined) {
query = query.split(/[\. ]/);
maxDepth = query.length - 1;
$.each(query, function(depth, value) {
var camelCaseValue = (depth != maxDepth)
? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
: query
;
if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
object = object[camelCaseValue];
}
else if( object[camelCaseValue] !== undefined ) {
found = object[camelCaseValue];
return false;
}
else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
object = object[value];
}
else if( object[value] !== undefined ) {
found = object[value];
return false;
}
else {
module.error(error.method, query);
return false;
}
});
}
if ( $.isFunction( found ) ) {
response = found.apply(context, passedArguments);
}
else if(found !== undefined) {
response = found;
}
if($.isArray(returnedValue)) {
returnedValue.push(response);
}
else if(returnedValue !== undefined) {
returnedValue = [returnedValue, response];
}
else if(response !== undefined) {
returnedValue = response;
}
return found;
}
};
if(methodInvoked) {
if(instance === undefined) {
module.initialize();
}
module.invoke(query);
}
else {
if(instance !== undefined) {
instance.invoke('destroy');
}
module.initialize();
}
})
;
return (returnedValue !== undefined)
? returnedValue
: this
;
};
$.fn.checkbox.settings = {
name : 'Checkbox',
namespace : 'checkbox',
silent : false,
debug : false,
verbose : true,
performance : true,
// delegated event context
uncheckable : 'auto',
fireOnInit : false,
onChange : function(){},
beforeChecked : function(){},
beforeUnchecked : function(){},
beforeDeterminate : function(){},
beforeIndeterminate : function(){},
onChecked : function(){},
onUnchecked : function(){},
onDeterminate : function() {},
onIndeterminate : function() {},
onEnable : function(){},
onDisable : function(){},
// preserve misspelled callbacks (will be removed in 3.0)
onEnabled : function(){},
onDisabled : function(){},
className : {
checked : 'checked',
indeterminate : 'indeterminate',
disabled : 'disabled',
hidden : 'hidden',
radio : 'radio',
readOnly : 'read-only'
},
error : {
method : 'The method you called is not defined'
},
selector : {
checkbox : '.ui.checkbox',
label : 'label, .box',
input : 'input[type="checkbox"], input[type="radio"]',
link : 'a[href]'
}
};
})( jQuery, window, document );

9
wms/contract-repair/semantic/Semantic-UI-master/dist/components/checkbox.min.css

File diff suppressed because one or more lines are too long

1
wms/contract-repair/semantic/Semantic-UI-master/dist/components/checkbox.min.js

File diff suppressed because one or more lines are too long

268
wms/contract-repair/semantic/Semantic-UI-master/dist/components/comment.css

@ -0,0 +1,268 @@
/*!
* # Semantic UI 2.5.0 - Comment
* http://github.com/semantic-org/semantic-ui/
*
*
* Released under the MIT license
* http://opensource.org/licenses/MIT
*
*/
/*******************************
Standard
*******************************/
/*--------------
Comments
---------------*/
.ui.comments {
margin: 1.5em 0em;
max-width: 650px;
}
.ui.comments:first-child {
margin-top: 0em;
}
.ui.comments:last-child {
margin-bottom: 0em;
}
/*--------------
Comment
---------------*/
.ui.comments .comment {
position: relative;
background: none;
margin: 0.5em 0em 0em;
padding: 0.5em 0em 0em;
border: none;
border-top: none;
line-height: 1.2;
}
.ui.comments .comment:first-child {
margin-top: 0em;
padding-top: 0em;
}
/*--------------------
Nested Comments
---------------------*/
.ui.comments .comment .comments {
margin: 0em 0em 0.5em 0.5em;
padding: 1em 0em 1em 1em;
}
.ui.comments .comment .comments:before {
position: absolute;
top: 0px;
left: 0px;
}
.ui.comments .comment .comments .comment {
border: none;
border-top: none;
background: none;
}
/*--------------
Avatar
---------------*/
.ui.comments .comment .avatar {
display: block;
width: 2.5em;
height: auto;
float: left;
margin: 0.2em 0em 0em;
}
.ui.comments .comment img.avatar,
.ui.comments .comment .avatar img {
display: block;
margin: 0em auto;
width: 100%;
height: 100%;
border-radius: 0.25rem;
}
/*--------------
Content
---------------*/
.ui.comments .comment > .content {
display: block;
}
/* If there is an avatar move content over */
.ui.comments .comment > .avatar ~ .content {
margin-left: 3.5em;
}
/*--------------
Author
---------------*/
.ui.comments .comment .author {
font-size: 1em;
color: rgba(0, 0, 0, 0.87);
font-weight: bold;
}
.ui.comments .comment a.author {
cursor: pointer;
}
.ui.comments .comment a.author:hover {
color: #1e70bf;
}
/*--------------
Metadata
---------------*/
.ui.comments .comment .metadata {
display: inline-block;
margin-left: 0.5em;
color: rgba(0, 0, 0, 0.4);
font-size: 0.875em;
}
.ui.comments .comment .metadata > * {
display: inline-block;
margin: 0em 0.5em 0em 0em;
}
.ui.comments .comment .metadata > :last-child {
margin-right: 0em;
}
/*--------------------
Comment Text
---------------------*/
.ui.comments .comment .text {
margin: 0.25em 0em 0.5em;
font-size: 1em;
word-wrap: break-word;
color: rgba(0, 0, 0, 0.87);
line-height: 1.3;
}
/*--------------------
User Actions
---------------------*/
.ui.comments .comment .actions {
font-size: 0.875em;
}
.ui.comments .comment .actions a {
cursor: pointer;
display: inline-block;
margin: 0em 0.75em 0em 0em;
color: rgba(0, 0, 0, 0.4);
}
.ui.comments .comment .actions a:last-child {
margin-right: 0em;
}
.ui.comments .comment .actions a.active,
.ui.comments .comment .actions a:hover {
color: rgba(0, 0, 0, 0.8);
}
/*--------------------
Reply Form
---------------------*/
.ui.comments > .reply.form {
margin-top: 1em;
}
.ui.comments .comment .reply.form {
width: 100%;
margin-top: 1em;
}
.ui.comments .reply.form textarea {
font-size: 1em;
height: 12em;
}
/*******************************
State
*******************************/
.ui.collapsed.comments,
.ui.comments .collapsed.comments,
.ui.comments .collapsed.comment {
display: none;
}
/*******************************
Variations
*******************************/
/*--------------------
Threaded
---------------------*/
.ui.threaded.comments .comment .comments {
margin: -1.5em 0 -1em 1.25em;
padding: 3em 0em 2em 2.25em;
box-shadow: -1px 0px 0px rgba(34, 36, 38, 0.15);
}
/*--------------------
Minimal
---------------------*/
.ui.minimal.comments .comment .actions {
opacity: 0;
position: absolute;
top: 0px;
right: 0px;
left: auto;
transition: opacity 0.2s ease;
transition-delay: 0.1s;
}
.ui.minimal.comments .comment > .content:hover > .actions {
opacity: 1;
}
/*-------------------
Sizes
--------------------*/
.ui.mini.comments {
font-size: 0.78571429rem;
}
.ui.tiny.comments {
font-size: 0.85714286rem;
}
.ui.small.comments {
font-size: 0.92857143rem;
}
.ui.comments {
font-size: 1rem;
}
.ui.large.comments {
font-size: 1.14285714rem;
}
.ui.big.comments {
font-size: 1.28571429rem;
}
.ui.huge.comments {
font-size: 1.42857143rem;
}
.ui.massive.comments {
font-size: 1.71428571rem;
}
/*******************************
Theme Overrides
*******************************/
/*******************************
User Variable Overrides
*******************************/

9
wms/contract-repair/semantic/Semantic-UI-master/dist/components/comment.min.css

@ -0,0 +1,9 @@
/*!
* # Semantic UI 2.5.0 - Comment
* http://github.com/semantic-org/semantic-ui/
*
*
* Released under the MIT license
* http://opensource.org/licenses/MIT
*
*/.ui.comments{margin:1.5em 0;max-width:650px}.ui.comments:first-child{margin-top:0}.ui.comments:last-child{margin-bottom:0}.ui.comments .comment{position:relative;background:0 0;margin:.5em 0 0;padding:.5em 0 0;border:none;border-top:none;line-height:1.2}.ui.comments .comment:first-child{margin-top:0;padding-top:0}.ui.comments .comment .comments{margin:0 0 .5em .5em;padding:1em 0 1em 1em}.ui.comments .comment .comments:before{position:absolute;top:0;left:0}.ui.comments .comment .comments .comment{border:none;border-top:none;background:0 0}.ui.comments .comment .avatar{display:block;width:2.5em;height:auto;float:left;margin:.2em 0 0}.ui.comments .comment .avatar img,.ui.comments .comment img.avatar{display:block;margin:0 auto;width:100%;height:100%;border-radius:.25rem}.ui.comments .comment>.content{display:block}.ui.comments .comment>.avatar~.content{margin-left:3.5em}.ui.comments .comment .author{font-size:1em;color:rgba(0,0,0,.87);font-weight:700}.ui.comments .comment a.author{cursor:pointer}.ui.comments .comment a.author:hover{color:#1e70bf}.ui.comments .comment .metadata{display:inline-block;margin-left:.5em;color:rgba(0,0,0,.4);font-size:.875em}.ui.comments .comment .metadata>*{display:inline-block;margin:0 .5em 0 0}.ui.comments .comment .metadata>:last-child{margin-right:0}.ui.comments .comment .text{margin:.25em 0 .5em;font-size:1em;word-wrap:break-word;color:rgba(0,0,0,.87);line-height:1.3}.ui.comments .comment .actions{font-size:.875em}.ui.comments .comment .actions a{cursor:pointer;display:inline-block;margin:0 .75em 0 0;color:rgba(0,0,0,.4)}.ui.comments .comment .actions a:last-child{margin-right:0}.ui.comments .comment .actions a.active,.ui.comments .comment .actions a:hover{color:rgba(0,0,0,.8)}.ui.comments>.reply.form{margin-top:1em}.ui.comments .comment .reply.form{width:100%;margin-top:1em}.ui.comments .reply.form textarea{font-size:1em;height:12em}.ui.collapsed.comments,.ui.comments .collapsed.comment,.ui.comments .collapsed.comments{display:none}.ui.threaded.comments .comment .comments{margin:-1.5em 0 -1em 1.25em;padding:3em 0 2em 2.25em;box-shadow:-1px 0 0 rgba(34,36,38,.15)}.ui.minimal.comments .comment .actions{opacity:0;position:absolute;top:0;right:0;left:auto;transition:opacity .2s ease;transition-delay:.1s}.ui.minimal.comments .comment>.content:hover>.actions{opacity:1}.ui.mini.comments{font-size:.78571429rem}.ui.tiny.comments{font-size:.85714286rem}.ui.small.comments{font-size:.92857143rem}.ui.comments{font-size:1rem}.ui.large.comments{font-size:1.14285714rem}.ui.big.comments{font-size:1.28571429rem}.ui.huge.comments{font-size:1.42857143rem}.ui.massive.comments{font-size:1.71428571rem}

147
wms/contract-repair/semantic/Semantic-UI-master/dist/components/container.css

@ -0,0 +1,147 @@
/*!
* # Semantic UI 2.5.0 - Container
* http://github.com/semantic-org/semantic-ui/
*
*
* Released under the MIT license
* http://opensource.org/licenses/MIT
*
*/
/*******************************
Container
*******************************/
/* All Sizes */
.ui.container {
display: block;
max-width: 100% !important;
}
/* Mobile */
@media only screen and (max-width: 767px) {
.ui.container {
width: auto !important;
margin-left: 1em !important;
margin-right: 1em !important;
}
.ui.grid.container {
width: auto !important;
}
.ui.relaxed.grid.container {
width: auto !important;
}
.ui.very.relaxed.grid.container {
width: auto !important;
}
}
/* Tablet */
@media only screen and (min-width: 768px) and (max-width: 991px) {
.ui.container {
width: 723px;
margin-left: auto !important;
margin-right: auto !important;
}
.ui.grid.container {
width: calc( 723px + 2rem ) !important;
}
.ui.relaxed.grid.container {
width: calc( 723px + 3rem ) !important;
}
.ui.very.relaxed.grid.container {
width: calc( 723px + 5rem ) !important;
}
}
/* Small Monitor */
@media only screen and (min-width: 992px) and (max-width: 1199px) {
.ui.container {
width: 933px;
margin-left: auto !important;
margin-right: auto !important;
}
.ui.grid.container {
width: calc( 933px + 2rem ) !important;
}
.ui.relaxed.grid.container {
width: calc( 933px + 3rem ) !important;
}
.ui.very.relaxed.grid.container {
width: calc( 933px + 5rem ) !important;
}
}
/* Large Monitor */
@media only screen and (min-width: 1200px) {
.ui.container {
width: 1127px;
margin-left: auto !important;
margin-right: auto !important;
}
.ui.grid.container {
width: calc( 1127px + 2rem ) !important;
}
.ui.relaxed.grid.container {
width: calc( 1127px + 3rem ) !important;
}
.ui.very.relaxed.grid.container {
width: calc( 1127px + 5rem ) !important;
}
}
/*******************************
Types
*******************************/
/* Text Container */
.ui.text.container {
font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;
max-width: 700px !important;
line-height: 1.5;
}
.ui.text.container {
font-size: 1.14285714rem;
}
/* Fluid */
.ui.fluid.container {
width: 100%;
}
/*******************************
Variations
*******************************/
.ui[class*="left aligned"].container {
text-align: left;
}
.ui[class*="center aligned"].container {
text-align: center;
}
.ui[class*="right aligned"].container {
text-align: right;
}
.ui.justified.container {
text-align: justify;
-webkit-hyphens: auto;
-ms-hyphens: auto;
hyphens: auto;
}
/*******************************
Theme Overrides
*******************************/
/*******************************
Site Overrides
*******************************/

9
wms/contract-repair/semantic/Semantic-UI-master/dist/components/container.min.css

@ -0,0 +1,9 @@
/*!
* # Semantic UI 2.5.0 - Container
* http://github.com/semantic-org/semantic-ui/
*
*
* Released under the MIT license
* http://opensource.org/licenses/MIT
*
*/.ui.container{display:block;max-width:100%!important}@media only screen and (max-width:767px){.ui.container{width:auto!important;margin-left:1em!important;margin-right:1em!important}.ui.grid.container{width:auto!important}.ui.relaxed.grid.container{width:auto!important}.ui.very.relaxed.grid.container{width:auto!important}}@media only screen and (min-width:768px) and (max-width:991px){.ui.container{width:723px;margin-left:auto!important;margin-right:auto!important}.ui.grid.container{width:calc(723px + 2rem)!important}.ui.relaxed.grid.container{width:calc(723px + 3rem)!important}.ui.very.relaxed.grid.container{width:calc(723px + 5rem)!important}}@media only screen and (min-width:992px) and (max-width:1199px){.ui.container{width:933px;margin-left:auto!important;margin-right:auto!important}.ui.grid.container{width:calc(933px + 2rem)!important}.ui.relaxed.grid.container{width:calc(933px + 3rem)!important}.ui.very.relaxed.grid.container{width:calc(933px + 5rem)!important}}@media only screen and (min-width:1200px){.ui.container{width:1127px;margin-left:auto!important;margin-right:auto!important}.ui.grid.container{width:calc(1127px + 2rem)!important}.ui.relaxed.grid.container{width:calc(1127px + 3rem)!important}.ui.very.relaxed.grid.container{width:calc(1127px + 5rem)!important}}.ui.text.container{font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;max-width:700px!important;line-height:1.5}.ui.text.container{font-size:1.14285714rem}.ui.fluid.container{width:100%}.ui[class*="left aligned"].container{text-align:left}.ui[class*="center aligned"].container{text-align:center}.ui[class*="right aligned"].container{text-align:right}.ui.justified.container{text-align:justify;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto}

235
wms/contract-repair/semantic/Semantic-UI-master/dist/components/dimmer.css

@ -0,0 +1,235 @@
/*!
* # Semantic UI 2.5.0 - Dimmer
* http://github.com/semantic-org/semantic-ui/
*
*
* Released under the MIT license
* http://opensource.org/licenses/MIT
*
*/
/*******************************
Dimmer
*******************************/
.dimmable:not(body) {
position: relative;
}
.ui.dimmer {
display: none;
position: absolute;
top: 0em !important;
left: 0em !important;
width: 100%;
height: 100%;
text-align: center;
vertical-align: middle;
padding: 1em;
background-color: rgba(0, 0, 0, 0.85);
opacity: 0;
line-height: 1;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
-webkit-animation-duration: 0.5s;
animation-duration: 0.5s;
transition: background-color 0.5s linear;
flex-direction: column;
align-items: center;
justify-content: center;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
will-change: opacity;
z-index: 1000;
}
/* Dimmer Content */
.ui.dimmer > .content {
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
color: #FFFFFF;
}
/* Loose Coupling */
.ui.segment > .ui.dimmer {
border-radius: inherit !important;
}
/* Scrollbars */
.ui.dimmer:not(.inverted)::-webkit-scrollbar-track {
background: rgba(255, 255, 255, 0.1);
}
.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb {
background: rgba(255, 255, 255, 0.25);
}
.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb:window-inactive {
background: rgba(255, 255, 255, 0.15);
}
.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb:hover {
background: rgba(255, 255, 255, 0.35);
}
/*******************************
States
*******************************/
/* Animating */
.animating.dimmable:not(body),
.dimmed.dimmable:not(body) {
overflow: hidden;
}
/* Animating / Active / Visible */
.dimmed.dimmable > .ui.animating.dimmer,
.dimmed.dimmable > .ui.visible.dimmer,
.ui.active.dimmer {
display: flex;
opacity: 1;
}
/* Disabled */
.ui.disabled.dimmer {
width: 0 !important;
height: 0 !important;
}
/*******************************
Variations
*******************************/
/*--------------
Legacy
---------------*/
/* Animating / Active / Visible */
.dimmed.dimmable > .ui.animating.legacy.dimmer,
.dimmed.dimmable > .ui.visible.legacy.dimmer,
.ui.active.legacy.dimmer {
display: block;
}
/*--------------
Alignment
---------------*/
.ui[class*="top aligned"].dimmer {
justify-content: flex-start;
}
.ui[class*="bottom aligned"].dimmer {
justify-content: flex-end;
}
/*--------------
Page
---------------*/
.ui.page.dimmer {
position: fixed;
transform-style: '';
perspective: 2000px;
transform-origin: center center;
}
body.animating.in.dimmable,
body.dimmed.dimmable {
overflow: hidden;
}
body.dimmable > .dimmer {
position: fixed;
}
/*--------------
Blurring
---------------*/
.blurring.dimmable > :not(.dimmer) {
-webkit-filter: blur(0px) grayscale(0);
filter: blur(0px) grayscale(0);
transition: 800ms -webkit-filter ease;
transition: 800ms filter ease;
transition: 800ms filter ease, 800ms -webkit-filter ease;
}
.blurring.dimmed.dimmable > :not(.dimmer) {
-webkit-filter: blur(5px) grayscale(0.7);
filter: blur(5px) grayscale(0.7);
}
/* Dimmer Color */
.blurring.dimmable > .dimmer {
background-color: rgba(0, 0, 0, 0.6);
}
.blurring.dimmable > .inverted.dimmer {
background-color: rgba(255, 255, 255, 0.6);
}
/*--------------
Aligned
---------------*/
.ui.dimmer > .top.aligned.content > * {
vertical-align: top;
}
.ui.dimmer > .bottom.aligned.content > * {
vertical-align: bottom;
}
/*--------------
Inverted
---------------*/
.ui.inverted.dimmer {
background-color: rgba(255, 255, 255, 0.85);
}
.ui.inverted.dimmer > .content > * {
color: #FFFFFF;
}
/*--------------
Simple
---------------*/
/* Displays without javascript */
.ui.simple.dimmer {
display: block;
overflow: hidden;
opacity: 1;
width: 0%;
height: 0%;
z-index: -100;
background-color: rgba(0, 0, 0, 0);
}
.dimmed.dimmable > .ui.simple.dimmer {
overflow: visible;
opacity: 1;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.85);
z-index: 1;
}
.ui.simple.inverted.dimmer {
background-color: rgba(255, 255, 255, 0);
}
.dimmed.dimmable > .ui.simple.inverted.dimmer {
background-color: rgba(255, 255, 255, 0.85);
}
/*******************************
Theme Overrides
*******************************/
/*******************************
User Overrides
*******************************/

733
wms/contract-repair/semantic/Semantic-UI-master/dist/components/dimmer.js

@ -0,0 +1,733 @@
/*!
* # Semantic UI 2.5.0 - Dimmer
* http://github.com/semantic-org/semantic-ui/
*
*
* Released under the MIT license
* http://opensource.org/licenses/MIT
*
*/
;(function ($, window, document, undefined) {
'use strict';
window = (typeof window != 'undefined' && window.Math == Math)
? window
: (typeof self != 'undefined' && self.Math == Math)
? self
: Function('return this')()
;
$.fn.dimmer = function(parameters) {
var
$allModules = $(this),
time = new Date().getTime(),
performance = [],
query = arguments[0],
methodInvoked = (typeof query == 'string'),
queryArguments = [].slice.call(arguments, 1),
returnedValue
;
$allModules
.each(function() {
var
settings = ( $.isPlainObject(parameters) )
? $.extend(true, {}, $.fn.dimmer.settings, parameters)
: $.extend({}, $.fn.dimmer.settings),
selector = settings.selector,
namespace = settings.namespace,
className = settings.className,
error = settings.error,
eventNamespace = '.' + namespace,
moduleNamespace = 'module-' + namespace,
moduleSelector = $allModules.selector || '',
clickEvent = ('ontouchstart' in document.documentElement)
? 'touchstart'
: 'click',
$module = $(this),
$dimmer,
$dimmable,
element = this,
instance = $module.data(moduleNamespace),
module
;
module = {
preinitialize: function() {
if( module.is.dimmer() ) {
$dimmable = $module.parent();
$dimmer = $module;
}
else {
$dimmable = $module;
if( module.has.dimmer() ) {
if(settings.dimmerName) {
$dimmer = $dimmable.find(selector.dimmer).filter('.' + settings.dimmerName);
}
else {
$dimmer = $dimmable.find(selector.dimmer);
}
}
else {
$dimmer = module.create();
}
}
},
initialize: function() {
module.debug('Initializing dimmer', settings);
module.bind.events();
module.set.dimmable();
module.instantiate();
},
instantiate: function() {
module.verbose('Storing instance of module', module);
instance = module;
$module
.data(moduleNamespace, instance)
;
},
destroy: function() {
module.verbose('Destroying previous module', $dimmer);
module.unbind.events();
module.remove.variation();
$dimmable
.off(eventNamespace)
;
},
bind: {
events: function() {
if(settings.on == 'hover') {
$dimmable
.on('mouseenter' + eventNamespace, module.show)
.on('mouseleave' + eventNamespace, module.hide)
;
}
else if(settings.on == 'click') {
$dimmable
.on(clickEvent + eventNamespace, module.toggle)
;
}
if( module.is.page() ) {
module.debug('Setting as a page dimmer', $dimmable);
module.set.pageDimmer();
}
if( module.is.closable() ) {
module.verbose('Adding dimmer close event', $dimmer);
$dimmable
.on(clickEvent + eventNamespace, selector.dimmer, module.event.click)
;
}
}
},
unbind: {
events: function() {
$module
.removeData(moduleNamespace)
;
$dimmable
.off(eventNamespace)
;
}
},
event: {
click: function(event) {
module.verbose('Determining if event occurred on dimmer', event);
if( $dimmer.find(event.target).length === 0 || $(event.target).is(selector.content) ) {
module.hide();
event.stopImmediatePropagation();
}
},
},
addContent: function(element) {
var
$content = $(element)
;
module.debug('Add content to dimmer', $content);
if($content.parent()[0] !== $dimmer[0]) {
$content.detach().appendTo($dimmer);
}
},
create: function() {
var
$element = $( settings.template.dimmer() )
;
if(settings.dimmerName) {
module.debug('Creating named dimmer', settings.dimmerName);
$element.addClass(settings.dimmerName);
}
$element
.appendTo($dimmable)
;
return $element;
},
show: function(callback) {
callback = $.isFunction(callback)
? callback
: function(){}
;
module.debug('Showing dimmer', $dimmer, settings);
module.set.variation();
if( (!module.is.dimmed() || module.is.animating()) && module.is.enabled() ) {
module.animate.show(callback);
settings.onShow.call(element);
settings.onChange.call(element);
}
else {
module.debug('Dimmer is already shown or disabled');
}
},
hide: function(callback) {
callback = $.isFunction(callback)
? callback
: function(){}
;
if( module.is.dimmed() || module.is.animating() ) {
module.debug('Hiding dimmer', $dimmer);
module.animate.hide(callback);
settings.onHide.call(element);
settings.onChange.call(element);
}
else {
module.debug('Dimmer is not visible');
}
},
toggle: function() {
module.verbose('Toggling dimmer visibility', $dimmer);
if( !module.is.dimmed() ) {
module.show();
}
else {
module.hide();
}
},
animate: {
show: function(callback) {
callback = $.isFunction(callback)
? callback
: function(){}
;
if(settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {
if(settings.useFlex) {
module.debug('Using flex dimmer');
module.remove.legacy();
}
else {
module.debug('Using legacy non-flex dimmer');
module.set.legacy();
}
if(settings.opacity !== 'auto') {
module.set.opacity();
}
$dimmer
.transition({
displayType : settings.useFlex
? 'flex'
: 'block',
animation : settings.transition + ' in',
queue : false,
duration : module.get.duration(),
useFailSafe : true,
onStart : function() {
module.set.dimmed();
},
onComplete : function() {
module.set.active();
callback();
}
})
;
}
else {
module.verbose('Showing dimmer animation with javascript');
module.set.dimmed();
if(settings.opacity == 'auto') {
settings.opacity = 0.8;
}
$dimmer
.stop()
.css({
opacity : 0,
width : '100%',
height : '100%'
})
.fadeTo(module.get.duration(), settings.opacity, function() {
$dimmer.removeAttr('style');
module.set.active();
callback();
})
;
}
},
hide: function(callback) {
callback = $.isFunction(callback)
? callback
: function(){}
;
if(settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {
module.verbose('Hiding dimmer with css');
$dimmer
.transition({
displayType : settings.useFlex
? 'flex'
: 'block',
animation : settings.transition + ' out',
queue : false,
duration : module.get.duration(),
useFailSafe : true,
onStart : function() {
module.remove.dimmed();
},
onComplete : function() {
module.remove.variation();
module.remove.active();
callback();
}
})
;
}
else {
module.verbose('Hiding dimmer with javascript');
module.remove.dimmed();
$dimmer
.stop()
.fadeOut(module.get.duration(), function() {
module.remove.active();
$dimmer.removeAttr('style');
callback();
})
;
}
}
},
get: {
dimmer: function() {
return $dimmer;
},
duration: function() {
if(typeof settings.duration == 'object') {
if( module.is.active() ) {
return settings.duration.hide;
}
else {
return settings.duration.show;
}
}
return settings.duration;
}
},
has: {
dimmer: function() {
if(settings.dimmerName) {
return ($module.find(selector.dimmer).filter('.' + settings.dimmerName).length > 0);
}
else {
return ( $module.find(selector.dimmer).length > 0 );
}
}
},
is: {
active: function() {
return $dimmer.hasClass(className.active);
},
animating: function() {
return ( $dimmer.is(':animated') || $dimmer.hasClass(className.animating) );
},
closable: function() {
if(settings.closable == 'auto') {
if(settings.on == 'hover') {
return false;
}
return true;
}
return settings.closable;
},
dimmer: function() {
return $module.hasClass(className.dimmer);
},
dimmable: function() {
return $module.hasClass(className.dimmable);
},
dimmed: function() {
return $dimmable.hasClass(className.dimmed);
},
disabled: function() {
return $dimmable.hasClass(className.disabled);
},
enabled: function() {
return !module.is.disabled();
},
page: function () {
return $dimmable.is('body');
},
pageDimmer: function() {
return $dimmer.hasClass(className.pageDimmer);
}
},
can: {
show: function() {
return !$dimmer.hasClass(className.disabled);
}
},
set: {
opacity: function(opacity) {
var
color = $dimmer.css('background-color'),
colorArray = color.split(','),
isRGB = (colorArray && colorArray.length == 3),
isRGBA = (colorArray && colorArray.length == 4)
;
opacity = settings.opacity === 0 ? 0 : settings.opacity || opacity;
if(isRGB || isRGBA) {
colorArray[3] = opacity + ')';
color = colorArray.join(',');
}
else {
color = 'rgba(0, 0, 0, ' + opacity + ')';
}
module.debug('Setting opacity to', opacity);
$dimmer.css('background-color', color);
},
legacy: function() {
$dimmer.addClass(className.legacy);
},
active: function() {
$dimmer.addClass(className.active);
},
dimmable: function() {
$dimmable.addClass(className.dimmable);
},
dimmed: function() {
$dimmable.addClass(className.dimmed);
},
pageDimmer: function() {
$dimmer.addClass(className.pageDimmer);
},
disabled: function() {
$dimmer.addClass(className.disabled);
},
variation: function(variation) {
variation = variation || settings.variation;
if(variation) {
$dimmer.addClass(variation);
}
}
},
remove: {
active: function() {
$dimmer
.removeClass(className.active)
;
},
legacy: function() {
$dimmer.removeClass(className.legacy);
},
dimmed: function() {
$dimmable.removeClass(className.dimmed);
},
disabled: function() {
$dimmer.removeClass(className.disabled);
},
variation: function(variation) {
variation = variation || settings.variation;
if(variation) {
$dimmer.removeClass(variation);
}
}
},
setting: function(name, value) {
module.debug('Changing setting', name, value);
if( $.isPlainObject(name) ) {
$.extend(true, settings, name);
}
else if(value !== undefined) {
if($.isPlainObject(settings[name])) {
$.extend(true, settings[name], value);
}
else {
settings[name] = value;
}
}
else {
return settings[name];
}
},
internal: function(name, value) {
if( $.isPlainObject(name) ) {
$.extend(true, module, name);
}
else if(value !== undefined) {
module[name] = value;
}
else {
return module[name];
}
},
debug: function() {
if(!settings.silent && settings.debug) {
if(settings.performance) {
module.performance.log(arguments);
}
else {
module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
module.debug.apply(console, arguments);
}
}
},
verbose: function() {
if(!settings.silent && settings.verbose && settings.debug) {
if(settings.performance) {
module.performance.log(arguments);
}
else {
module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
module.verbose.apply(console, arguments);
}
}
},
error: function() {
if(!settings.silent) {
module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
module.error.apply(console, arguments);
}
},
performance: {
log: function(message) {
var
currentTime,
executionTime,
previousTime
;
if(settings.performance) {
currentTime = new Date().getTime();
previousTime = time || currentTime;
executionTime = currentTime - previousTime;
time = currentTime;
performance.push({
'Name' : message[0],
'Arguments' : [].slice.call(message, 1) || '',
'Element' : element,
'Execution Time' : executionTime
});
}
clearTimeout(module.performance.timer);
module.performance.timer = setTimeout(module.performance.display, 500);
},
display: function() {
var
title = settings.name + ':',
totalTime = 0
;
time = false;
clearTimeout(module.performance.timer);
$.each(performance, function(index, data) {
totalTime += data['Execution Time'];
});
title += ' ' + totalTime + 'ms';
if(moduleSelector) {
title += ' \'' + moduleSelector + '\'';
}
if($allModules.length > 1) {
title += ' ' + '(' + $allModules.length + ')';
}
if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
console.groupCollapsed(title);
if(console.table) {
console.table(performance);
}
else {
$.each(performance, function(index, data) {
console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
});
}
console.groupEnd();
}
performance = [];
}
},
invoke: function(query, passedArguments, context) {
var
object = instance,
maxDepth,
found,
response
;
passedArguments = passedArguments || queryArguments;
context = element || context;
if(typeof query == 'string' && object !== undefined) {
query = query.split(/[\. ]/);
maxDepth = query.length - 1;
$.each(query, function(depth, value) {
var camelCaseValue = (depth != maxDepth)
? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
: query
;
if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
object = object[camelCaseValue];
}
else if( object[camelCaseValue] !== undefined ) {
found = object[camelCaseValue];
return false;
}
else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
object = object[value];
}
else if( object[value] !== undefined ) {
found = object[value];
return false;
}
else {
module.error(error.method, query);
return false;
}
});
}
if ( $.isFunction( found ) ) {
response = found.apply(context, passedArguments);
}
else if(found !== undefined) {
response = found;
}
if($.isArray(returnedValue)) {
returnedValue.push(response);
}
else if(returnedValue !== undefined) {
returnedValue = [returnedValue, response];
}
else if(response !== undefined) {
returnedValue = response;
}
return found;
}
};
module.preinitialize();
if(methodInvoked) {
if(instance === undefined) {
module.initialize();
}
module.invoke(query);
}
else {
if(instance !== undefined) {
instance.invoke('destroy');
}
module.initialize();
}
})
;
return (returnedValue !== undefined)
? returnedValue
: this
;
};
$.fn.dimmer.settings = {
name : 'Dimmer',
namespace : 'dimmer',
silent : false,
debug : false,
verbose : false,
performance : true,
// whether should use flex layout
useFlex : true,
// name to distinguish between multiple dimmers in context
dimmerName : false,
// whether to add a variation type
variation : false,
// whether to bind close events
closable : 'auto',
// whether to use css animations
useCSS : true,
// css animation to use
transition : 'fade',
// event to bind to
on : false,
// overriding opacity value
opacity : 'auto',
// transition durations
duration : {
show : 500,
hide : 500
},
onChange : function(){},
onShow : function(){},
onHide : function(){},
error : {
method : 'The method you called is not defined.'
},
className : {
active : 'active',
animating : 'animating',
dimmable : 'dimmable',
dimmed : 'dimmed',
dimmer : 'dimmer',
disabled : 'disabled',
hide : 'hide',
legacy : 'legacy',
pageDimmer : 'page',
show : 'show'
},
selector: {
dimmer : '> .ui.dimmer',
content : '.ui.dimmer > .content, .ui.dimmer > .content > .center'
},
template: {
dimmer: function() {
return $('<div />').attr('class', 'ui dimmer');
}
}
};
})( jQuery, window, document );

9
wms/contract-repair/semantic/Semantic-UI-master/dist/components/dimmer.min.css

@ -0,0 +1,9 @@
/*!
* # Semantic UI 2.5.0 - Dimmer
* http://github.com/semantic-org/semantic-ui/
*
*
* Released under the MIT license
* http://opensource.org/licenses/MIT
*
*/.dimmable:not(body){position:relative}.ui.dimmer{display:none;position:absolute;top:0!important;left:0!important;width:100%;height:100%;text-align:center;vertical-align:middle;padding:1em;background-color:rgba(0,0,0,.85);opacity:0;line-height:1;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.5s;animation-duration:.5s;transition:background-color .5s linear;flex-direction:column;align-items:center;justify-content:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;will-change:opacity;z-index:1000}.ui.dimmer>.content{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;color:#fff}.ui.segment>.ui.dimmer{border-radius:inherit!important}.ui.dimmer:not(.inverted)::-webkit-scrollbar-track{background:rgba(255,255,255,.1)}.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb{background:rgba(255,255,255,.25)}.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb:window-inactive{background:rgba(255,255,255,.15)}.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.35)}.animating.dimmable:not(body),.dimmed.dimmable:not(body){overflow:hidden}.dimmed.dimmable>.ui.animating.dimmer,.dimmed.dimmable>.ui.visible.dimmer,.ui.active.dimmer{display:flex;opacity:1}.ui.disabled.dimmer{width:0!important;height:0!important}.dimmed.dimmable>.ui.animating.legacy.dimmer,.dimmed.dimmable>.ui.visible.legacy.dimmer,.ui.active.legacy.dimmer{display:block}.ui[class*="top aligned"].dimmer{justify-content:flex-start}.ui[class*="bottom aligned"].dimmer{justify-content:flex-end}.ui.page.dimmer{position:fixed;transform-style:'';perspective:2000px;transform-origin:center center}body.animating.in.dimmable,body.dimmed.dimmable{overflow:hidden}body.dimmable>.dimmer{position:fixed}.blurring.dimmable>:not(.dimmer){-webkit-filter:blur(0) grayscale(0);filter:blur(0) grayscale(0);transition:.8s -webkit-filter ease;transition:.8s filter ease;transition:.8s filter ease,.8s -webkit-filter ease}.blurring.dimmed.dimmable>:not(.dimmer){-webkit-filter:blur(5px) grayscale(.7);filter:blur(5px) grayscale(.7)}.blurring.dimmable>.dimmer{background-color:rgba(0,0,0,.6)}.blurring.dimmable>.inverted.dimmer{background-color:rgba(255,255,255,.6)}.ui.dimmer>.top.aligned.content>*{vertical-align:top}.ui.dimmer>.bottom.aligned.content>*{vertical-align:bottom}.ui.inverted.dimmer{background-color:rgba(255,255,255,.85)}.ui.inverted.dimmer>.content>*{color:#fff}.ui.simple.dimmer{display:block;overflow:hidden;opacity:1;width:0%;height:0%;z-index:-100;background-color:rgba(0,0,0,0)}.dimmed.dimmable>.ui.simple.dimmer{overflow:visible;opacity:1;width:100%;height:100%;background-color:rgba(0,0,0,.85);z-index:1}.ui.simple.inverted.dimmer{background-color:rgba(255,255,255,0)}.dimmed.dimmable>.ui.simple.inverted.dimmer{background-color:rgba(255,255,255,.85)}

1
wms/contract-repair/semantic/Semantic-UI-master/dist/components/dimmer.min.js

File diff suppressed because one or more lines are too long

258
wms/contract-repair/semantic/Semantic-UI-master/dist/components/divider.css

@ -0,0 +1,258 @@
/*!
* # Semantic UI 2.5.0 - Divider
* http://github.com/semantic-org/semantic-ui/
*
*
* Released under the MIT license
* http://opensource.org/licenses/MIT
*
*/
/*******************************
Divider
*******************************/
.ui.divider {
margin: 1rem 0rem;
line-height: 1;
height: 0em;
font-weight: bold;
text-transform: uppercase;
letter-spacing: 0.05em;
color: rgba(0, 0, 0, 0.85);
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
/*--------------
Basic
---------------*/
.ui.divider:not(.vertical):not(.horizontal) {
border-top: 1px solid rgba(34, 36, 38, 0.15);
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
/*--------------
Coupling
---------------*/
/* Allow divider between each column row */
.ui.grid > .column + .divider,
.ui.grid > .row > .column + .divider {
left: auto;
}
/*--------------
Horizontal
---------------*/
.ui.horizontal.divider {
display: table;
white-space: nowrap;
height: auto;
margin: '';
line-height: 1;
text-align: center;
}
.ui.horizontal.divider:before,
.ui.horizontal.divider:after {
content: '';
display: table-cell;
position: relative;
top: 50%;
width: 50%;
background-repeat: no-repeat;
}
.ui.horizontal.divider:before {
background-position: right 1em top 50%;
}
.ui.horizontal.divider:after {
background-position: left 1em top 50%;
}
/*--------------
Vertical
---------------*/
.ui.vertical.divider {
position: absolute;
z-index: 2;
top: 50%;
left: 50%;
margin: 0rem;
padding: 0em;
width: auto;
height: 50%;
line-height: 0em;
text-align: center;
transform: translateX(-50%);
}
.ui.vertical.divider:before,
.ui.vertical.divider:after {
position: absolute;
left: 50%;
content: '';
z-index: 3;
border-left: 1px solid rgba(34, 36, 38, 0.15);
border-right: 1px solid rgba(255, 255, 255, 0.1);
width: 0%;
height: calc(100% - 1rem );
}
.ui.vertical.divider:before {
top: -100%;
}
.ui.vertical.divider:after {
top: auto;
bottom: 0px;
}
/* Inside grid */
@media only screen and (max-width: 767px) {
.ui.stackable.grid .ui.vertical.divider,
.ui.grid .stackable.row .ui.vertical.divider {
display: table;
white-space: nowrap;
height: auto;
margin: '';
overflow: hidden;
line-height: 1;
text-align: center;
position: static;
top: 0;
left: 0;
transform: none;
}
.ui.stackable.grid .ui.vertical.divider:before,
.ui.grid .stackable.row .ui.vertical.divider:before,
.ui.stackable.grid .ui.vertical.divider:after,
.ui.grid .stackable.row .ui.vertical.divider:after {
position: static;
left: 0;
border-left: none;
border-right: none;
content: '';
display: table-cell;
position: relative;
top: 50%;
width: 50%;
background-repeat: no-repeat;
}
.ui.stackable.grid .ui.vertical.divider:before,
.ui.grid .stackable.row .ui.vertical.divider:before {
background-position: right 1em top 50%;
}
.ui.stackable.grid .ui.vertical.divider:after,
.ui.grid .stackable.row .ui.vertical.divider:after {
background-position: left 1em top 50%;
}
}
/*--------------
Icon
---------------*/
.ui.divider > .icon {
margin: 0rem;
font-size: 1rem;
height: 1em;
vertical-align: middle;
}
/*******************************
Variations
*******************************/
/*--------------
Hidden
---------------*/
.ui.hidden.divider {
border-color: transparent !important;
}
.ui.hidden.divider:before,
.ui.hidden.divider:after {
display: none;
}
/*--------------
Inverted
---------------*/
.ui.divider.inverted,
.ui.vertical.inverted.divider,
.ui.horizontal.inverted.divider {
color: #FFFFFF;
}
.ui.divider.inverted,
.ui.divider.inverted:after,
.ui.divider.inverted:before {
border-top-color: rgba(34, 36, 38, 0.15) !important;
border-left-color: rgba(34, 36, 38, 0.15) !important;
border-bottom-color: rgba(255, 255, 255, 0.15) !important;
border-right-color: rgba(255, 255, 255, 0.15) !important;
}
/*--------------
Fitted
---------------*/
.ui.fitted.divider {
margin: 0em;
}
/*--------------
Clearing
---------------*/
.ui.clearing.divider {
clear: both;
}
/*--------------
Section
---------------*/
.ui.section.divider {
margin-top: 2rem;
margin-bottom: 2rem;
}
/*--------------
Sizes
---------------*/
.ui.divider {
font-size: 1rem;
}
/*******************************
Theme Overrides
*******************************/
.ui.horizontal.divider:before,
.ui.horizontal.divider:after {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAACCAYAAACuTHuKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OThBRDY4OUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OThBRDY4QUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU5OEFENjg3Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU5OEFENjg4Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VU513gAAADVJREFUeNrs0DENACAQBDBIWLGBJQby/mUcJn5sJXQmOQMAAAAAAJqt+2prAAAAAACg2xdgANk6BEVuJgyMAAAAAElFTkSuQmCC');
}
@media only screen and (max-width: 767px) {
.ui.stackable.grid .ui.vertical.divider:before,
.ui.grid .stackable.row .ui.vertical.divider:before,
.ui.stackable.grid .ui.vertical.divider:after,
.ui.grid .stackable.row .ui.vertical.divider:after {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAACCAYAAACuTHuKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OThBRDY4OUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OThBRDY4QUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU5OEFENjg3Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU5OEFENjg4Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VU513gAAADVJREFUeNrs0DENACAQBDBIWLGBJQby/mUcJn5sJXQmOQMAAAAAAJqt+2prAAAAAACg2xdgANk6BEVuJgyMAAAAAElFTkSuQmCC');
}
}
/*******************************
Site Overrides
*******************************/

9
wms/contract-repair/semantic/Semantic-UI-master/dist/components/divider.min.css

File diff suppressed because one or more lines are too long

1460
wms/contract-repair/semantic/Semantic-UI-master/dist/components/dropdown.css

File diff suppressed because it is too large

3955
wms/contract-repair/semantic/Semantic-UI-master/dist/components/dropdown.js

File diff suppressed because it is too large

9
wms/contract-repair/semantic/Semantic-UI-master/dist/components/dropdown.min.css

File diff suppressed because one or more lines are too long

1
wms/contract-repair/semantic/Semantic-UI-master/dist/components/dropdown.min.js

File diff suppressed because one or more lines are too long

161
wms/contract-repair/semantic/Semantic-UI-master/dist/components/embed.css

@ -0,0 +1,161 @@
/*!
* # Semantic UI 2.5.0 - Video
* http://github.com/semantic-org/semantic-ui/
*
*
* Released under the MIT license
* http://opensource.org/licenses/MIT
*
*/
/*******************************
Types
*******************************/
.ui.embed {
position: relative;
max-width: 100%;
height: 0px;
overflow: hidden;
background: #DCDDDE;
padding-bottom: 56.25%;
}
/*-----------------
Embedded Content
------------------*/
.ui.embed iframe,
.ui.embed embed,
.ui.embed object {
position: absolute;
border: none;
width: 100%;
height: 100%;
top: 0px;
left: 0px;
margin: 0em;
padding: 0em;
}
/*-----------------
Embed
------------------*/
.ui.embed > .embed {
display: none;
}
/*--------------
Placeholder
---------------*/
.ui.embed > .placeholder {
position: absolute;
cursor: pointer;
top: 0px;
left: 0px;
display: block;
width: 100%;
height: 100%;
background-color: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));
}
/*--------------
Icon
---------------*/
.ui.embed > .icon {
cursor: pointer;
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
z-index: 2;
}
.ui.embed > .icon:after {
position: absolute;
top: 0%;
left: 0%;
width: 100%;
height: 100%;
z-index: 3;
content: '';
background: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));
opacity: 0.5;
transition: opacity 0.5s ease;
}
.ui.embed > .icon:before {
position: absolute;
top: 50%;
left: 50%;
z-index: 4;
transform: translateX(-50%) translateY(-50%);
color: #FFFFFF;
font-size: 6rem;
text-shadow: 0px 2px 10px rgba(34, 36, 38, 0.2);
transition: opacity 0.5s ease, color 0.5s ease;
z-index: 10;
}
/*******************************
States
*******************************/
/*--------------
Hover
---------------*/
.ui.embed .icon:hover:after {
background: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));
opacity: 1;
}
.ui.embed .icon:hover:before {
color: #FFFFFF;
}
/*--------------
Active
---------------*/
.ui.active.embed > .icon,
.ui.active.embed > .placeholder {
display: none;
}
.ui.active.embed > .embed {
display: block;
}
/*******************************
Video Overrides
*******************************/
/*******************************
Site Overrides
*******************************/
/*******************************
Variations
*******************************/
.ui.square.embed {
padding-bottom: 100%;
}
.ui[class*="4:3"].embed {
padding-bottom: 75%;
}
.ui[class*="16:9"].embed {
padding-bottom: 56.25%;
}
.ui[class*="21:9"].embed {
padding-bottom: 42.85714286%;
}

706
wms/contract-repair/semantic/Semantic-UI-master/dist/components/embed.js

@ -0,0 +1,706 @@
/*!
* # Semantic UI 2.5.0 - Embed
* http://github.com/semantic-org/semantic-ui/
*
*
* Released under the MIT license
* http://opensource.org/licenses/MIT
*
*/
;(function ($, window, document, undefined) {
"use strict";
window = (typeof window != 'undefined' && window.Math == Math)
? window
: (typeof self != 'undefined' && self.Math == Math)
? self
: Function('return this')()
;
$.fn.embed = function(parameters) {
var
$allModules = $(this),
moduleSelector = $allModules.selector || '',
time = new Date().getTime(),
performance = [],
query = arguments[0],
methodInvoked = (typeof query == 'string'),
queryArguments = [].slice.call(arguments, 1),
returnedValue
;
$allModules
.each(function() {
var
settings = ( $.isPlainObject(parameters) )
? $.extend(true, {}, $.fn.embed.settings, parameters)
: $.extend({}, $.fn.embed.settings),
selector = settings.selector,
className = settings.className,
sources = settings.sources,
error = settings.error,
metadata = settings.metadata,
namespace = settings.namespace,
templates = settings.templates,
eventNamespace = '.' + namespace,
moduleNamespace = 'module-' + namespace,
$window = $(window),
$module = $(this),
$placeholder = $module.find(selector.placeholder),
$icon = $module.find(selector.icon),
$embed = $module.find(selector.embed),
element = this,
instance = $module.data(moduleNamespace),
module
;
module = {
initialize: function() {
module.debug('Initializing embed');
module.determine.autoplay();
module.create();
module.bind.events();
module.instantiate();
},
instantiate: function() {
module.verbose('Storing instance of module', module);
instance = module;
$module
.data(moduleNamespace, module)
;
},
destroy: function() {
module.verbose('Destroying previous instance of embed');
module.reset();
$module
.removeData(moduleNamespace)
.off(eventNamespace)
;
},
refresh: function() {
module.verbose('Refreshing selector cache');
$placeholder = $module.find(selector.placeholder);
$icon = $module.find(selector.icon);
$embed = $module.find(selector.embed);
},
bind: {
events: function() {
if( module.has.placeholder() ) {
module.debug('Adding placeholder events');
$module
.on('click' + eventNamespace, selector.placeholder, module.createAndShow)
.on('click' + eventNamespace, selector.icon, module.createAndShow)
;
}
}
},
create: function() {
var
placeholder = module.get.placeholder()
;
if(placeholder) {
module.createPlaceholder();
}
else {
module.createAndShow();
}
},
createPlaceholder: function(placeholder) {
var
icon = module.get.icon(),
url = module.get.url(),
embed = module.generate.embed(url)
;
placeholder = placeholder || module.get.placeholder();
$module.html( templates.placeholder(placeholder, icon) );
module.debug('Creating placeholder for embed', placeholder, icon);
},
createEmbed: function(url) {
module.refresh();
url = url || module.get.url();
$embed = $('<div/>')
.addClass(className.embed)
.html( module.generate.embed(url) )
.appendTo($module)
;
settings.onCreate.call(element, url);
module.debug('Creating embed object', $embed);
},
changeEmbed: function(url) {
$embed
.html( module.generate.embed(url) )
;
},
createAndShow: function() {
module.createEmbed();
module.show();
},
// sets new embed
change: function(source, id, url) {
module.debug('Changing video to ', source, id, url);
$module
.data(metadata.source, source)
.data(metadata.id, id)
;
if(url) {
$module.data(metadata.url, url);
}
else {
$module.removeData(metadata.url);
}
if(module.has.embed()) {
module.changeEmbed();
}
else {
module.create();
}
},
// clears embed
reset: function() {
module.debug('Clearing embed and showing placeholder');
module.remove.data();
module.remove.active();
module.remove.embed();
module.showPlaceholder();
settings.onReset.call(element);
},
// shows current embed
show: function() {
module.debug('Showing embed');
module.set.active();
settings.onDisplay.call(element);
},
hide: function() {
module.debug('Hiding embed');
module.showPlaceholder();
},
showPlaceholder: function() {
module.debug('Showing placeholder image');
module.remove.active();
settings.onPlaceholderDisplay.call(element);
},
get: {
id: function() {
return settings.id || $module.data(metadata.id);
},
placeholder: function() {
return settings.placeholder || $module.data(metadata.placeholder);
},
icon: function() {
return (settings.icon)
? settings.icon
: ($module.data(metadata.icon) !== undefined)
? $module.data(metadata.icon)
: module.determine.icon()
;
},
source: function(url) {
return (settings.source)
? settings.source
: ($module.data(metadata.source) !== undefined)
? $module.data(metadata.source)
: module.determine.source()
;
},
type: function() {
var source = module.get.source();
return (sources[source] !== undefined)
? sources[source].type
: false
;
},
url: function() {
return (settings.url)
? settings.url
: ($module.data(metadata.url) !== undefined)
? $module.data(metadata.url)
: module.determine.url()
;
}
},
determine: {
autoplay: function() {
if(module.should.autoplay()) {
settings.autoplay = true;
}
},
source: function(url) {
var
matchedSource = false
;
url = url || module.get.url();
if(url) {
$.each(sources, function(name, source) {
if(url.search(source.domain) !== -1) {
matchedSource = name;
return false;
}
});
}
return matchedSource;
},
icon: function() {
var
source = module.get.source()
;
return (sources[source] !== undefined)
? sources[source].icon
: false
;
},
url: function() {
var
id = settings.id || $module.data(metadata.id),
source = settings.source || $module.data(metadata.source),
url
;
url = (sources[source] !== undefined)
? sources[source].url.replace('{id}', id)
: false
;
if(url) {
$module.data(metadata.url, url);
}
return url;
}
},
set: {
active: function() {
$module.addClass(className.active);
}
},
remove: {
data: function() {
$module
.removeData(metadata.id)
.removeData(metadata.icon)
.removeData(metadata.placeholder)
.removeData(metadata.source)
.removeData(metadata.url)
;
},
active: function() {
$module.removeClass(className.active);
},
embed: function() {
$embed.empty();
}
},
encode: {
parameters: function(parameters) {
var
urlString = [],
index
;
for (index in parameters) {
urlString.push( encodeURIComponent(index) + '=' + encodeURIComponent( parameters[index] ) );
}
return urlString.join('&amp;');
}
},
generate: {
embed: function(url) {
module.debug('Generating embed html');
var
source = module.get.source(),
html,
parameters
;
url = module.get.url(url);
if(url) {
parameters = module.generate.parameters(source);
html = templates.iframe(url, parameters);
}
else {
module.error(error.noURL, $module);
}
return html;
},
parameters: function(source, extraParameters) {
var
parameters = (sources[source] && sources[source].parameters !== undefined)
? sources[source].parameters(settings)
: {}
;
extraParameters = extraParameters || settings.parameters;
if(extraParameters) {
parameters = $.extend({}, parameters, extraParameters);
}
parameters = settings.onEmbed(parameters);
return module.encode.parameters(parameters);
}
},
has: {
embed: function() {
return ($embed.length > 0);
},
placeholder: function() {
return settings.placeholder || $module.data(metadata.placeholder);
}
},
should: {
autoplay: function() {
return (settings.autoplay === 'auto')
? (settings.placeholder || $module.data(metadata.placeholder) !== undefined)
: settings.autoplay
;
}
},
is: {
video: function() {
return module.get.type() == 'video';
}
},
setting: function(name, value) {
module.debug('Changing setting', name, value);
if( $.isPlainObject(name) ) {
$.extend(true, settings, name);
}
else if(value !== undefined) {
if($.isPlainObject(settings[name])) {
$.extend(true, settings[name], value);
}
else {
settings[name] = value;
}
}
else {
return settings[name];
}
},
internal: function(name, value) {
if( $.isPlainObject(name) ) {
$.extend(true, module, name);
}
else if(value !== undefined) {
module[name] = value;
}
else {
return module[name];
}
},
debug: function() {
if(!settings.silent && settings.debug) {
if(settings.performance) {
module.performance.log(arguments);
}
else {
module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
module.debug.apply(console, arguments);
}
}
},
verbose: function() {
if(!settings.silent && settings.verbose && settings.debug) {
if(settings.performance) {
module.performance.log(arguments);
}
else {
module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
module.verbose.apply(console, arguments);
}
}
},
error: function() {
if(!settings.silent) {
module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
module.error.apply(console, arguments);
}
},
performance: {
log: function(message) {
var
currentTime,
executionTime,
previousTime
;
if(settings.performance) {
currentTime = new Date().getTime();
previousTime = time || currentTime;
executionTime = currentTime - previousTime;
time = currentTime;
performance.push({
'Name' : message[0],
'Arguments' : [].slice.call(message, 1) || '',
'Element' : element,
'Execution Time' : executionTime
});
}
clearTimeout(module.performance.timer);
module.performance.timer = setTimeout(module.performance.display, 500);
},
display: function() {
var
title = settings.name + ':',
totalTime = 0
;
time = false;
clearTimeout(module.performance.timer);
$.each(performance, function(index, data) {
totalTime += data['Execution Time'];
});
title += ' ' + totalTime + 'ms';
if(moduleSelector) {
title += ' \'' + moduleSelector + '\'';
}
if($allModules.length > 1) {
title += ' ' + '(' + $allModules.length + ')';
}
if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
console.groupCollapsed(title);
if(console.table) {
console.table(performance);
}
else {
$.each(performance, function(index, data) {
console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
});
}
console.groupEnd();
}
performance = [];
}
},
invoke: function(query, passedArguments, context) {
var
object = instance,
maxDepth,
found,
response
;
passedArguments = passedArguments || queryArguments;
context = element || context;
if(typeof query == 'string' && object !== undefined) {
query = query.split(/[\. ]/);
maxDepth = query.length - 1;
$.each(query, function(depth, value) {
var camelCaseValue = (depth != maxDepth)
? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
: query
;
if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
object = object[camelCaseValue];
}
else if( object[camelCaseValue] !== undefined ) {
found = object[camelCaseValue];
return false;
}
else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
object = object[value];
}
else if( object[value] !== undefined ) {
found = object[value];
return false;
}
else {
module.error(error.method, query);
return false;
}
});
}
if ( $.isFunction( found ) ) {
response = found.apply(context, passedArguments);
}
else if(found !== undefined) {
response = found;
}
if($.isArray(returnedValue)) {
returnedValue.push(response);
}
else if(returnedValue !== undefined) {
returnedValue = [returnedValue, response];
}
else if(response !== undefined) {
returnedValue = response;
}
return found;
}
};
if(methodInvoked) {
if(instance === undefined) {
module.initialize();
}
module.invoke(query);
}
else {
if(instance !== undefined) {
instance.invoke('destroy');
}
module.initialize();
}
})
;
return (returnedValue !== undefined)
? returnedValue
: this
;
};
$.fn.embed.settings = {
name : 'Embed',
namespace : 'embed',
silent : false,
debug : false,
verbose : false,
performance : true,
icon : false,
source : false,
url : false,
id : false,
// standard video settings
autoplay : 'auto',
color : '#444444',
hd : true,
brandedUI : false,
// additional parameters to include with the embed
parameters: false,
onDisplay : function() {},
onPlaceholderDisplay : function() {},
onReset : function() {},
onCreate : function(url) {},
onEmbed : function(parameters) {
return parameters;
},
metadata : {
id : 'id',
icon : 'icon',
placeholder : 'placeholder',
source : 'source',
url : 'url'
},
error : {
noURL : 'No URL specified',
method : 'The method you called is not defined'
},
className : {
active : 'active',
embed : 'embed'
},
selector : {
embed : '.embed',
placeholder : '.placeholder',
icon : '.icon'
},
sources: {
youtube: {
name : 'youtube',
type : 'video',
icon : 'video play',
domain : 'youtube.com',
url : '//www.youtube.com/embed/{id}',
parameters: function(settings) {
return {
autohide : !settings.brandedUI,
autoplay : settings.autoplay,
color : settings.color || undefined,
hq : settings.hd,
jsapi : settings.api,
modestbranding : !settings.brandedUI
};
}
},
vimeo: {
name : 'vimeo',
type : 'video',
icon : 'video play',
domain : 'vimeo.com',
url : '//player.vimeo.com/video/{id}',
parameters: function(settings) {
return {
api : settings.api,
autoplay : settings.autoplay,
byline : settings.brandedUI,
color : settings.color || undefined,
portrait : settings.brandedUI,
title : settings.brandedUI
};
}
}
},
templates: {
iframe : function(url, parameters) {
var src = url;
if (parameters) {
src += '?' + parameters;
}
return ''
+ '<iframe src="' + src + '"'
+ ' width="100%" height="100%"'
+ ' frameborder="0" scrolling="no" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>'
;
},
placeholder : function(image, icon) {
var
html = ''
;
if(icon) {
html += '<i class="' + icon + ' icon"></i>';
}
if(image) {
html += '<img class="placeholder" src="' + image + '">';
}
return html;
}
},
// NOT YET IMPLEMENTED
api : false,
onPause : function() {},
onPlay : function() {},
onStop : function() {}
};
})( jQuery, window, document );

9
wms/contract-repair/semantic/Semantic-UI-master/dist/components/embed.min.css

@ -0,0 +1,9 @@
/*!
* # Semantic UI 2.5.0 - Video
* http://github.com/semantic-org/semantic-ui/
*
*
* Released under the MIT license
* http://opensource.org/licenses/MIT
*
*/.ui.embed{position:relative;max-width:100%;height:0;overflow:hidden;background:#dcddde;padding-bottom:56.25%}.ui.embed embed,.ui.embed iframe,.ui.embed object{position:absolute;border:none;width:100%;height:100%;top:0;left:0;margin:0;padding:0}.ui.embed>.embed{display:none}.ui.embed>.placeholder{position:absolute;cursor:pointer;top:0;left:0;display:block;width:100%;height:100%;background-color:radial-gradient(transparent 45%,rgba(0,0,0,.3))}.ui.embed>.icon{cursor:pointer;position:absolute;top:0;left:0;width:100%;height:100%;z-index:2}.ui.embed>.icon:after{position:absolute;top:0;left:0;width:100%;height:100%;z-index:3;content:'';background:radial-gradient(transparent 45%,rgba(0,0,0,.3));opacity:.5;transition:opacity .5s ease}.ui.embed>.icon:before{position:absolute;top:50%;left:50%;z-index:4;transform:translateX(-50%) translateY(-50%);color:#fff;font-size:6rem;text-shadow:0 2px 10px rgba(34,36,38,.2);transition:opacity .5s ease,color .5s ease;z-index:10}.ui.embed .icon:hover:after{background:radial-gradient(transparent 45%,rgba(0,0,0,.3));opacity:1}.ui.embed .icon:hover:before{color:#fff}.ui.active.embed>.icon,.ui.active.embed>.placeholder{display:none}.ui.active.embed>.embed{display:block}.ui.square.embed{padding-bottom:100%}.ui[class*="4:3"].embed{padding-bottom:75%}.ui[class*="16:9"].embed{padding-bottom:56.25%}.ui[class*="21:9"].embed{padding-bottom:42.85714286%}

1
wms/contract-repair/semantic/Semantic-UI-master/dist/components/embed.min.js

File diff suppressed because one or more lines are too long

281
wms/contract-repair/semantic/Semantic-UI-master/dist/components/feed.css

@ -0,0 +1,281 @@
/*!
* # Semantic UI 2.5.0 - Feed
* http://github.com/semantic-org/semantic-ui/
*
*
* Released under the MIT license
* http://opensource.org/licenses/MIT
*
*/
/*******************************
Activity Feed
*******************************/
.ui.feed {
margin: 1em 0em;
}
.ui.feed:first-child {
margin-top: 0em;
}
.ui.feed:last-child {
margin-bottom: 0em;
}
/*******************************
Content
*******************************/
/* Event */
.ui.feed > .event {
display: flex;
flex-direction: row;
width: 100%;
padding: 0.21428571rem 0em;
margin: 0em;
background: none;
border-top: none;
}
.ui.feed > .event:first-child {
border-top: 0px;
padding-top: 0em;
}
.ui.feed > .event:last-child {
padding-bottom: 0em;
}
/* Event Label */
.ui.feed > .event > .label {
display: block;
flex: 0 0 auto;
width: 2.5em;
height: auto;
align-self: stretch;
text-align: left;
}
.ui.feed > .event > .label .icon {
opacity: 1;
font-size: 1.5em;
width: 100%;
padding: 0.25em;
background: none;
border: none;
border-radius: none;
color: rgba(0, 0, 0, 0.6);
}
.ui.feed > .event > .label img {
width: 100%;
height: auto;
border-radius: 500rem;
}
.ui.feed > .event > .label + .content {
margin: 0.5em 0em 0.35714286em 1.14285714em;
}
/*--------------
Content
---------------*/
/* Content */
.ui.feed > .event > .content {
display: block;
flex: 1 1 auto;
align-self: stretch;
text-align: left;
word-wrap: break-word;
}
.ui.feed > .event:last-child > .content {
padding-bottom: 0em;
}
/* Link */
.ui.feed > .event > .content a {
cursor: pointer;
}
/*--------------
Date
---------------*/
.ui.feed > .event > .content .date {
margin: -0.5rem 0em 0em;
padding: 0em;
font-weight: normal;
font-size: 1em;
font-style: normal;
color: rgba(0, 0, 0, 0.4);
}
/*--------------
Summary
---------------*/
.ui.feed > .event > .content .summary {
margin: 0em;
font-size: 1em;
font-weight: bold;
color: rgba(0, 0, 0, 0.87);
}
/* Summary Image */
.ui.feed > .event > .content .summary img {
display: inline-block;
width: auto;
height: 10em;
margin: -0.25em 0.25em 0em 0em;
border-radius: 0.25em;
vertical-align: middle;
}
/*--------------
User
---------------*/
.ui.feed > .event > .content .user {
display: inline-block;
font-weight: bold;
margin-right: 0em;
vertical-align: baseline;
}
.ui.feed > .event > .content .user img {
margin: -0.25em 0.25em 0em 0em;
width: auto;
height: 10em;
vertical-align: middle;
}
/*--------------
Inline Date
---------------*/
/* Date inside Summary */
.ui.feed > .event > .content .summary > .date {
display: inline-block;
float: none;
font-weight: normal;
font-size: 0.85714286em;
font-style: normal;
margin: 0em 0em 0em 0.5em;
padding: 0em;
color: rgba(0, 0, 0, 0.4);
}
/*--------------
Extra Summary
---------------*/
.ui.feed > .event > .content .extra {
margin: 0.5em 0em 0em;
background: none;
padding: 0em;
color: rgba(0, 0, 0, 0.87);
}
/* Images */
.ui.feed > .event > .content .extra.images img {
display: inline-block;
margin: 0em 0.25em 0em 0em;
width: 6em;
}
/* Text */
.ui.feed > .event > .content .extra.text {
padding: 0em;
border-left: none;
font-size: 1em;
max-width: 500px;
line-height: 1.4285em;
}
/*--------------
Meta
---------------*/
.ui.feed > .event > .content .meta {
display: inline-block;
font-size: 0.85714286em;
margin: 0.5em 0em 0em;
background: none;
border: none;
border-radius: 0;
box-shadow: none;
padding: 0em;
color: rgba(0, 0, 0, 0.6);
}
.ui.feed > .event > .content .meta > * {
position: relative;
margin-left: 0.75em;
}
.ui.feed > .event > .content .meta > *:after {
content: '';
color: rgba(0, 0, 0, 0.2);
top: 0em;
left: -1em;
opacity: 1;
position: absolute;
vertical-align: top;
}
.ui.feed > .event > .content .meta .like {
color: '';
transition: 0.2s color ease;
}
.ui.feed > .event > .content .meta .like:hover .icon {
color: #FF2733;
}
.ui.feed > .event > .content .meta .active.like .icon {
color: #EF404A;
}
/* First element */
.ui.feed > .event > .content .meta > :first-child {
margin-left: 0em;
}
.ui.feed > .event > .content .meta > :first-child::after {
display: none;
}
/* Action */
.ui.feed > .event > .content .meta a,
.ui.feed > .event > .content .meta > .icon {
cursor: pointer;
opacity: 1;
color: rgba(0, 0, 0, 0.5);
transition: color 0.1s ease;
}
.ui.feed > .event > .content .meta a:hover,
.ui.feed > .event > .content .meta a:hover .icon,
.ui.feed > .event > .content .meta > .icon:hover {
color: rgba(0, 0, 0, 0.95);
}
/*******************************
Variations
*******************************/
.ui.small.feed {
font-size: 0.92857143rem;
}
.ui.feed {
font-size: 1rem;
}
.ui.large.feed {
font-size: 1.14285714rem;
}
/*******************************
Theme Overrides
*******************************/
/*******************************
User Variable Overrides
*******************************/

9
wms/contract-repair/semantic/Semantic-UI-master/dist/components/feed.min.css

@ -0,0 +1,9 @@
/*!
* # Semantic UI 2.5.0 - Feed
* http://github.com/semantic-org/semantic-ui/
*
*
* Released under the MIT license
* http://opensource.org/licenses/MIT
*
*/.ui.feed{margin:1em 0}.ui.feed:first-child{margin-top:0}.ui.feed:last-child{margin-bottom:0}.ui.feed>.event{display:flex;flex-direction:row;width:100%;padding:.21428571rem 0;margin:0;background:0 0;border-top:none}.ui.feed>.event:first-child{border-top:0;padding-top:0}.ui.feed>.event:last-child{padding-bottom:0}.ui.feed>.event>.label{display:block;flex:0 0 auto;width:2.5em;height:auto;align-self:stretch;text-align:left}.ui.feed>.event>.label .icon{opacity:1;font-size:1.5em;width:100%;padding:.25em;background:0 0;border:none;border-radius:none;color:rgba(0,0,0,.6)}.ui.feed>.event>.label img{width:100%;height:auto;border-radius:500rem}.ui.feed>.event>.label+.content{margin:.5em 0 .35714286em 1.14285714em}.ui.feed>.event>.content{display:block;flex:1 1 auto;align-self:stretch;text-align:left;word-wrap:break-word}.ui.feed>.event:last-child>.content{padding-bottom:0}.ui.feed>.event>.content a{cursor:pointer}.ui.feed>.event>.content .date{margin:-.5rem 0 0;padding:0;font-weight:400;font-size:1em;font-style:normal;color:rgba(0,0,0,.4)}.ui.feed>.event>.content .summary{margin:0;font-size:1em;font-weight:700;color:rgba(0,0,0,.87)}.ui.feed>.event>.content .summary img{display:inline-block;width:auto;height:10em;margin:-.25em .25em 0 0;border-radius:.25em;vertical-align:middle}.ui.feed>.event>.content .user{display:inline-block;font-weight:700;margin-right:0;vertical-align:baseline}.ui.feed>.event>.content .user img{margin:-.25em .25em 0 0;width:auto;height:10em;vertical-align:middle}.ui.feed>.event>.content .summary>.date{display:inline-block;float:none;font-weight:400;font-size:.85714286em;font-style:normal;margin:0 0 0 .5em;padding:0;color:rgba(0,0,0,.4)}.ui.feed>.event>.content .extra{margin:.5em 0 0;background:0 0;padding:0;color:rgba(0,0,0,.87)}.ui.feed>.event>.content .extra.images img{display:inline-block;margin:0 .25em 0 0;width:6em}.ui.feed>.event>.content .extra.text{padding:0;border-left:none;font-size:1em;max-width:500px;line-height:1.4285em}.ui.feed>.event>.content .meta{display:inline-block;font-size:.85714286em;margin:.5em 0 0;background:0 0;border:none;border-radius:0;box-shadow:none;padding:0;color:rgba(0,0,0,.6)}.ui.feed>.event>.content .meta>*{position:relative;margin-left:.75em}.ui.feed>.event>.content .meta>:after{content:'';color:rgba(0,0,0,.2);top:0;left:-1em;opacity:1;position:absolute;vertical-align:top}.ui.feed>.event>.content .meta .like{color:'';transition:.2s color ease}.ui.feed>.event>.content .meta .like:hover .icon{color:#ff2733}.ui.feed>.event>.content .meta .active.like .icon{color:#ef404a}.ui.feed>.event>.content .meta>:first-child{margin-left:0}.ui.feed>.event>.content .meta>:first-child::after{display:none}.ui.feed>.event>.content .meta a,.ui.feed>.event>.content .meta>.icon{cursor:pointer;opacity:1;color:rgba(0,0,0,.5);transition:color .1s ease}.ui.feed>.event>.content .meta a:hover,.ui.feed>.event>.content .meta a:hover .icon,.ui.feed>.event>.content .meta>.icon:hover{color:rgba(0,0,0,.95)}.ui.small.feed{font-size:.92857143rem}.ui.feed{font-size:1rem}.ui.large.feed{font-size:1.14285714rem}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save