Browse Source

Merge branch 'main' into gary

gary
IA2301\IA_2301 1 year ago
parent
commit
8f83a5e12c
  1. 3
      .gitignore
  2. 50
      wms/T8_Authorization_curl.php
  3. BIN
      wms/account-receivable-contract.xlsx
  4. 88
      wms/account-receivable-excel.php
  5. 158
      wms/account-receivable-maintainance-index.php
  6. 99
      wms/account-receivable-new-index.php
  7. 182
      wms/account-receivable-renovate-index.php
  8. BIN
      wms/account-receivable-renovate.xlsx
  9. 476
      wms/account-receivable-test.php
  10. 422
      wms/bonus/elevator_new/elevator_new_deal_bonus.php
  11. 30
      wms/bonus/elevator_new/elevator_new_deal_bonus_v1_0_1.php
  12. 304
      wms/bonus/elevator_new/elevator_new_deal_bonus_v2_0_1.php
  13. 92
      wms/bonus/elevator_new/elevator_new_deal_bonus_v2_0_examination.php
  14. 106
      wms/chengyanUI/select3.css
  15. 1
      wms/chengyanUI/select3.css.map
  16. 88
      wms/chengyanUI/select3.php
  17. 110
      wms/chengyanUI/select3.scss
  18. 86
      wms/cont/api/getElevatorPrice.php
  19. 761
      wms/cont/api/maintaenance_contract_bonus.php
  20. 117
      wms/cont/api/postElevatorPricereview.php
  21. 3
      wms/cont/api/postFlow.php
  22. 127
      wms/cont/api/postPricereviewSign.php
  23. 49
      wms/cont/conn.php
  24. 2
      wms/cont/js/axios.min.js
  25. 302
      wms/cont/js/pricereviewAlpine.js
  26. BIN
      wms/cont/pricereview-uploads/m20240312185746914784kobe.jpg
  27. BIN
      wms/cont/pricereview-uploads/m20240312185839177524curry.jpg
  28. BIN
      wms/cont/pricereview-uploads/m202403121858392743201.png
  29. BIN
      wms/cont/pricereview-uploads/m202403121903019998611074565_507619045984793_769543820_o.jpg
  30. BIN
      wms/cont/pricereview-uploads/m202403121903566135334OlaIEQjXAZDasK9Pd1Jxb.jpg
  31. BIN
      wms/cont/pricereview-uploads/m202403121905046665914OlaIEQjXAZDasK9Pd1Jxb.jpg
  32. BIN
      wms/cont/pricereview-uploads/m202403121907016007094OlaIEQjXAZDasK9Pd1Jxb.jpg
  33. BIN
      wms/cont/pricereview-uploads/m202403121907512357761048100_507643175982380_1454281158_o.jpg
  34. BIN
      wms/cont/pricereview-uploads/m202403121907573946501074565_507619045984793_769543820_o.jpg
  35. BIN
      wms/cont/pricereview-uploads/m20240312191226166002431968299_122131716218151547_1355033508899312082_n.jpg
  36. BIN
      wms/cont/pricereview-uploads/m202403121912261887281074565_507619045984793_769543820_o.jpg
  37. BIN
      wms/cont/pricereview-uploads/m202403121914471012954OlaIEQjXAZDasK9Pd1Jxb.jpg
  38. BIN
      wms/cont/pricereview-uploads/m202403121914476694521705368342957.jpg
  39. BIN
      wms/cont/pricereview-uploads/m20240312192346343561kobe.jpg
  40. BIN
      wms/cont/pricereview-uploads/m20240312192346755323curry.jpg
  41. 676
      wms/cont/pricereviewCheck.php
  42. 72
      wms/cont/pricereviewCreate.php
  43. 2
      wms/cont/sign_list.php
  44. 8
      wms/cont/window-modal/modalElevaotr.php
  45. 2
      wms/cont/window-modal/otherOptionModal.php
  46. 194
      wms/contract/api/getContractData.php
  47. 46
      wms/contract/api/getFacilityNo.php
  48. 162
      wms/contract/api/newElevatorBonus.php
  49. 374
      wms/contract/api/newElevatorT8.php
  50. 379
      wms/contract/api/postContractData.php
  51. 526
      wms/contract/api/postNewContractData.php
  52. 4
      wms/contract/api/postRenovateContractData.php
  53. 150
      wms/contract/api/test copy.json
  54. 3
      wms/contract/conn.php
  55. 10
      wms/contract/contract-input.php
  56. 471
      wms/contract/contract-renovate-input.php
  57. 226
      wms/contract/js/alpine.js
  58. 3
      wms/mkt/api/postFlow.php
  59. 23
      wms/mkt/api/postNewElevatorPricereview.php
  60. 2
      wms/mkt/assets/js/pricereviewAlpine0311.js
  61. 4
      wms/mkt/pricereview-index.php
  62. 2
      wms/mkt/pricereviewCheck.php
  63. 11
      wms/mkt/pricereviewCreate.php
  64. 49
      wms/purchase-api.php
  65. 36
      wms/purchase-apply-index.php
  66. 15
      wms/sign/list.php

3
.gitignore

@ -30,3 +30,6 @@ wms/chinese.php
phpinfo.php
wms/account_receivable_sql_file.sql
wms/account_receivable_maintainance_sql.sql
wms/account-receivable-contract.xlsx
wms/account-receivable-maintainance.xlsx
wms/account_receivable_renovate_sql.sql

50
wms/T8_Authorization_curl.php

@ -0,0 +1,50 @@
<?php
function get_Auth($groupId='TEST',$accountId='M0122',$password='90493119')
{
$user_id = $accountId;
$user_password = $password;
$api_key = "A21181F1EE4966D3";
$GroupId = $groupId;
// 伺服器時間扣兩分鐘會比較穩定
// $now = gmdate("YmdHis");
$now = gmdate("YmdHis", strtotime("-2 minutes"));
$data = "$user_id." . $now;
$sign = hash_hmac('SHA256', $data, $api_key, false);
// 各種API連線網址
// $apiurl = 'https://erp.masada.com.tw:780/twWebAPI/GetAuth';
$apiurl = 'http://60.244.87.101:880//twWebAPI/GetAuth';
// $apiurl = 'http://10.10.145.2:880//twWebAPI/GetAuth';
// $apiurl = 'https://erp.masada.com.tw:780/twWebAPI/GetAuth';
$headerParam = [
"UserId: $user_id",
"Pwd: $user_password",
"TimestampUTC: $now",
"Sign: $sign",
"GroupId: $GroupId"
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiurl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerParam);
$response = curl_exec($ch);
if ($response === false) {
echo 'Curl error: ' . curl_error($ch);
} else {
$result = json_decode($response, true);
if ($result['Status'] == 'Success')
return $result['Data']['CHI_Authorization'];
if ($result['Status'] == 'Error')
return $result['ErrorMsg'];
print_r($result);
}
curl_close($ch);
}

BIN
wms/account-receivable-contract.xlsx

Binary file not shown.

88
wms/account-receivable-excel.php

@ -36,7 +36,7 @@ if ($type == 'newContract') {
'尾款催收金額', '尾款催收次數'
];
file_put_contents('account-receivable.txt', json_encode($Bill, JSON_UNESCAPED_UNICODE));
// file_put_contents('account-receivable.txt', json_encode($Bill, JSON_UNESCAPED_UNICODE));
$sheet->fromArray($colomnHeader, NULL, 'A2');
$rowIndex = 3;
foreach ($Bill as $key => $value) {
@ -59,79 +59,61 @@ if ($type == 'newContract') {
}
$writer = new Xlsx($spreadsheet);
$excelFileName = 'account-receivable-contract.xlsx';
$writer->save($excelFileName);
} elseif ($type == 'facility') {
} elseif ($type == 'maintainance') {
$sheet->mergeCells('A1:H1');
$sheet->setTitle('保養催收統整');
$sheet->setCellValue('A1', '保養催收統整');
$sheet->getStyle('A1')->getFont()->setBold(true);
$sheet->getStyle('A1')->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER);
$sheet->getStyle('A1')->getAlignment()->setVertical(Alignment::VERTICAL_CENTER);
$sheet->getStyle('A1')->getFont()->setSize(14);
$sheet->getRowDimension('1')->setRowHeight(38);
$colomnHeader = [
'T8單據日期', '作番號', '合約號', '部門', '經理', '營業員', '客戶名稱', '統一編號', '聯絡地址', '抬頭',
'訂金名稱', '訂金合約金額', '訂金應收日期', '訂金目前應收金額', '訂金已開金額', '訂金未開金額', '訂金已收金額', '訂金催收金額', '訂金催收次數',
'二次款名稱', '二次款合約金額', '二次款應收日期', '二次款目前應收金額', '二次款已開金額', '二次款未開金額', '二次款已收金額', '二次款催收金額', '二次款催收次數',
'貨抵工地款名稱', '貨抵工地款合約金額', '貨抵工地款應收日期', '貨抵工地款目前應收金額', '貨抵工地款已開金額', '貨抵工地款未開金額', '貨抵工地款已收金額', '貨抵工地款催收金額', '貨抵工地款催收次數',
'安裝款名稱', '安裝款合約金額', '安裝款應收日期', '安裝款目前應收金額', '安裝款已開金額', '安裝款未開金額', '安裝款已收金額', '安裝款催收金額', '安裝款催收次數',
'試車款名稱', '試車款合約金額', '試車款應收日期', '試車款目前應收金額', '試車款已開金額', '試車款未開金額', '試車款已收金額', '試車款催收金額', '試車款催收次數',
'官檢款名稱', '官檢款合約金額', '官檢款應收日期', '官檢款目前應收金額', '官檢款已開金額', '官檢款未開金額', '官檢款已收金額', '官檢款催收金額', '官檢款催收次數',
'交車款名稱', '交車款合約金額', '交車款應收日期', '交車款目前應收金額', '交車款已開金額', '交車款未開金額', '交車款已收金額', '交車款催收金額', '交車款催收次數',
'尾款名稱', '尾款金額', '尾款應收日期', '尾款應收金額', '尾款已開金額', '尾款未開金額', '尾款已收金額', '尾款催收金額', '尾款催收次數',
'作番狀態', '合約-設備金額', '合約-安裝金額', '作番合約總金額', '作番總應收金額'
'合約號','序號','作番號','部門','契約員','客戶','金額','催收次數'
];
$sheet->fromArray($colomnHeader, NULL, 'A1');
$rowIndex = 2;
// file_put_contents('account-receivable.txt', json_encode($Bill, JSON_UNESCAPED_UNICODE));
$sheet->fromArray($colomnHeader, NULL, 'A2');
$rowIndex = 3;
foreach ($Bill as $key => $value) {
$sheet->fromArray($value, NULL, 'A' . $rowIndex);
$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', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ',
'BA', 'BB', 'BC', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BK', 'BL', 'BM', 'BN', 'BO', 'BP', 'BQ', 'BR', 'BK'
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'
];
foreach ($column as $col) {
$sheet->getColumnDimension($col)->setAutoSize(true);
}
$rowIndex++;
}
$writer = new Xlsx($spreadsheet);
$excelFileName = 'account-receivable-facility.xlsx';
$writer->save($excelFileName);
} else {
$excelFileName = 'account-receivable-contract.xlsx';
}elseif ($type == 'renovate') {
$sheet->mergeCells('A1:K1');
$sheet->setTitle('汰改催收統整');
$sheet->setCellValue('A1', '汰改催收統整');
$sheet->getStyle('A1')->getFont()->setBold(true);
$sheet->getStyle('A1')->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER);
$sheet->getStyle('A1')->getAlignment()->setVertical(Alignment::VERTICAL_CENTER);
$sheet->getStyle('A1')->getFont()->setSize(14);
$sheet->getRowDimension('1')->setRowHeight(38);
$colomnHeader = [
'T8單據日期', '合約號', '部門', '經理', '營業員', '客戶名稱', '統一編號', '聯絡地址', '抬頭',
'訂金', '訂金目前應收', '訂金已開票金額', '訂金未開票金額', '訂金已收金額', '訂金催收金額', '訂金最大催收次數', '訂金最小催收次數',
'二次款', '二次款目前應收', '二次款已開票金額', '二次款未開票金額', '二次款已收金額', '二次款催收金額', '二次款最大催收次數', '二次款最小催收次數',
'貨抵工地款', '貨抵工地款目前應收', '貨抵工地款已開票金額', '貨抵工地款未開票金額', '貨抵工地款已收金額', '貨抵工地款催收金額', '貨抵工地款最大催收次數', '貨抵工地款最小催收次數',
'安裝款', '安裝款目前應收', '安裝款已開票金額', '安裝款未開票金額', '安裝款已收金額', '安裝款催收金額', '安裝款最大催收次數', '安裝款最小催收次數',
'試車款', '試車款目前應收', '試車款已開票金額', '試車款未開票金額', '試車款已收金額', '試車款催收金額', '試車款最大催收次數', '試車款最小催收次數',
'官檢款', '官檢款目前應收', '官檢款已開票金額', '官檢款未開票金額', '官檢款已收金額', '官檢款催收金額', '官檢款最大催收次數', '官檢款最小催收次數',
'交車款', '交車款目前應收', '交車款已開票金額', '交車款未開票金額', '交車款已收金額', '交車款催收金額', '交車款最大催收次數', '交車款最小催收次數',
'尾款', '尾款目前應收', '尾款已開票金額', '尾款未開票金額', '尾款已收金額', '尾款催收金額', '尾款最大催收次數', '尾款最小催收次數',
'合約設備金額', '合約安裝金額', '合約總金額', '目前應收', '已開發票金額', '已收金額', '作番總數', '作番狀態'
'合約號','作番號','部門','營業員','客戶','收款階段名稱','應收日期','金額','已收金額','催收金額','催收次數'
];
$sheet->fromArray($colomnHeader, NULL, 'A1');
$rowIndex = 2;
// file_put_contents('account-receivable.txt', json_encode($Bill, JSON_UNESCAPED_UNICODE));
$sheet->fromArray($colomnHeader, NULL, 'A2');
$rowIndex = 3;
foreach ($Bill as $key => $value) {
$sheet->fromArray($value, NULL, 'A' . $rowIndex);
$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', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ',
'BA', 'BB', 'BC', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BK', 'BL', 'BM', 'BN', 'BO', 'BP', 'BQ', 'BR', 'BS', 'BT', 'BU', 'BV', 'BW', 'BX', 'BY', 'BZ',
'CA', 'CB', 'CC', 'CD'
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H','I','J','K'
];
foreach ($column as $col) {
if ($col == 'CC') {
$sheet->getColumnDimension('CC')->setWidth(40);
$sheet->getStyle('CC')->getAlignment()->setWrapText(true);
} else {
$sheet->getColumnDimension($col)->setAutoSize(true);
}
}
$rowIndex++;
}
$writer = new Xlsx($spreadsheet);
$excelFileName = 'account-receivable-test.xlsx';
$writer->save($excelFileName);
$excelFileName = 'account-receivable-renovate.xlsx';
}
$writer->save($excelFileName);
echo $excelFileName;
?>
<!-- <script>

158
wms/account-receivable-maintainance-index.php

@ -77,7 +77,10 @@ LEFT JOIN arCheckBill
ON arCheckBill.BillNo = wod.FromBillNo
LEFT JOIN comDepartment AS cd
ON cd.DeptId = arCheckBill.DeptId
WHERE arCheckBill.TypeId = 'RVS'";
LEFT JOIN arWriteOffBill
ON arWriteOffBill.BillNo= wod.BillNo
WHERE arCheckBill.TypeId = 'RVS' AND arWriteOffBill.CreateTime >20240331235959";
// AND arWriteOffBill.CreateTime >20240229225959
$follower = find_follow($user_id);
if ((in_array($user_id, array('M0008', 'M0012'))) || (in_array(accountidToDepartId($user_id), array('220', '210', '501')))) {
@ -117,7 +120,7 @@ ORDER BY
siam.PersonId ASC,
siam.BillNo ASC,
siamd.RowCode ASC";
$sql_writeOff.=" GROUP BY
$sql_writeOff .= " GROUP BY
wod.FromBillNo
,arCheckBill.LAmountWithTax";
@ -125,9 +128,19 @@ $writeoff = array();
$query_T8 = $conn->query($sql);
$rows = $query_T8->fetchAll(PDO::FETCH_ASSOC);
$query_writeoff = $conn->query($sql_writeOff);
foreach($query_writeoff->fetchAll(PDO::FETCH_ASSOC) as $row){
$writeoff[$row['checkBillNo']]= ($row['TotalWriteOffAmount']==$row['LAmountWithTax'])?'V':'X';
foreach ($query_writeoff->fetchAll(PDO::FETCH_ASSOC) as $row) {
$writeoff[$row['checkBillNo']] = ($row['TotalWriteOffAmount'] == $row['LAmountWithTax']) ? 'V' : 'X';
}
$wms_initial = array();
$sql_wms_initial = "SELECT * FROM account-avaible-maintainance WHERE received =1";
$query_wms_initial = mysqli_query($link, $sql_wms_initial);
if (is_iterable($query_wms_initial) > 0) {
foreach ($query_wms_initial as $row) {
$wms_initial[$row['contract_no']][$row['RowCode']] = $row['received'];
}
}
$excel_all = array();
$today = strtotime(date('Ymt'));
$table = "";
@ -142,11 +155,14 @@ for ($i = 0; $i < count($rows); $i++) {
$data[$tmpname]['invoicedate'] = is_null($row['InvoiceTime']) ? null : date('Y-m-d', strtotime($row['InvoiceTime']));
$invoicedate = $data[$tmpname]['invoicedate'];
$data[$tmpname]['invoice'] = is_null($data[$tmpname]['invoicedate']) ? 0 : 1;
if(!is_null($data[$tmpname]['checkBillNo']) && isset($writeoff[$data[$tmpname]['checkBillNo']])){
if (!is_null($data[$tmpname]['checkBillNo']) && isset($writeoff[$data[$tmpname]['checkBillNo']])) {
$data[$tmpname]['WriteOff'] = $writeoff[$data[$tmpname]['checkBillNo']];
}else{
} else {
$data[$tmpname]['WriteOff'] = '--';
}
if (!is_null($data[$tmpname]['checkBillNo']) && isset($wms_initial[$row['ProjectId']][$row['RowCode']])) {
$data[$tmpname]['WriteOff'] = 'V';
}
$contract_no = $row['ProjectId'];
$facility_no = $row['CU_MaterialId'];
$RowCode = $row['RowCode'];
@ -157,37 +173,40 @@ for ($i = 0; $i < count($rows); $i++) {
$invoiceNo = $row['InvoiceNo'];
$tableinvoice_state = is_null($invoiceNo) ? 0 : 1;
$data[$tmpname]['invoice_budget'] = is_null($row['InvoiceOAmount']) ? 0 : $row['InvoiceOAmount'];
$invoice_budget = (is_null($data[$tmpname]['invoice_budget'])) ? 0 : $data[$tmpname]['invoice_budget'];
$table_writeoff = ($data[$tmpname]['WriteOff'] =='V') ? 1 : 0;
$table1 = "INSERT INTO account_receivable_maintainance(
`contract_no`,
`facility_no`,
`RowCode`,
`BillNo`,
`budget`,
`receivable`,
`invoice_state`,
`invoice_budget`,
`received`
";
$table2 = ") VALUES(
'$contract_no',
'$facility_no',
'$RowCode',
'$BillNo',
$budget,
$datahavetopay,
$tableinvoice_state,
$invoice_budget,
$table_writeoff
";
$table1 .= is_null($receivable_date) ? "" : ",`receivable_date`";
$table2 .= is_null($receivable_date) ? "" : ",'$receivable_date'";
$table1 .= is_null($invoicedate) ? "" : ",`invoice_date`";
$table2 .= is_null($invoicedate) ? "" : ",'$invoicedate'";
$table1 .= is_null($invoiceNo) ? "" : ",`invoice_no`";
$table2 .= is_null($invoiceNo) ? "" : ",'$invoiceNo'";
$table .= $table1 . $table2 . "); \n";
$invoice_budget = (is_null($data[$tmpname]['invoice_budget'])) ? 0 : $data[$tmpname]['invoice_budget'];
if(isset($data[$tmpname]['WriteOff']) && $data[$tmpname]['WriteOff'] !== 'V' && isset($data[$tmpname]['collecttime']) && $data[$tmpname]['collecttime']>0){
$excel_all[$tmpname] = [$data[$tmpname]['ProjectId'], $data[$tmpname]['RowCode'], $data[$tmpname]['CU_MaterialId'], $data[$tmpname]['DeptName'], $data[$tmpname]['PersonName'], $data[$tmpname]['BizPartnerName'], $data[$tmpname]['OAmountWithTax'], $data[$tmpname]['collecttime']];
}
// $table_writeoff = ($data[$tmpname]['WriteOff'] =='V') ? 1 : 0;
// $table1 = "INSERT INTO account_receivable_maintainance(
// `contract_no`,
// `facility_no`,
// `RowCode`,
// `BillNo`,
// `budget`,
// `receivable`,
// `invoice_state`,
// `invoice_budget`,
// `received`
// ";
// $table2 = ") VALUES(
// '$contract_no',
// '$facility_no',
// '$RowCode',
// '$BillNo',
// $budget,
// $datahavetopay,
// $tableinvoice_state,
// $invoice_budget,
// $table_writeoff
// ";
// $table1 .= is_null($receivable_date) ? "" : ",`receivable_date`";
// $table2 .= is_null($receivable_date) ? "" : ",'$receivable_date'";
// $table1 .= is_null($invoicedate) ? "" : ",`invoice_date`";
// $table2 .= is_null($invoicedate) ? "" : ",'$invoicedate'";
// $table1 .= is_null($invoiceNo) ? "" : ",`invoice_no`";
// $table2 .= is_null($invoiceNo) ? "" : ",'$invoiceNo'";
// $table .= $table1 . $table2 . "); \n";
}
// $file_path = 'account_receivable_maintainance_sql.sql';
@ -203,6 +222,8 @@ for ($i = 0; $i < count($rows); $i++) {
// echo "<br>------------<br>";
// }
// exit();
$total_data = json_encode($excel_all);
?>
<style>
table {
@ -250,11 +271,11 @@ for ($i = 0; $i < count($rows); $i++) {
}
</style>
<!-- <div style="width: 98%;margin: 1%;">
<div style="width: 98%;margin: 1%;">
<div class="btn-group btn-group-md " style="padding:10 px; width: 100%;">
<button type="button" style="width: 12%;" onclick="downloadData()" class="btn btn-success">下載 <span class="glyphicon glyphicon-download-alt"></span></button>
</div>
</div> -->
</div>
<div class="container">
<div class="text-center" style="margin-bottom: 20px;">
<h3><strong>應收帳款(保養)</strong></h3>
@ -347,17 +368,17 @@ include "./footer.php";
<thead>
<tr>
<th style='text-align:center;vertical-align: middle;width:100px'>合約號</th>
<th style='text-align:center;vertical-align: middle;'>序號</th>
<th style='text-align:center;vertical-align: middle;width:100px'>作番號</th>
<th style='text-align:center;vertical-align: middle;width:110px'>部門</th>
<th style='text-align:center;vertical-align: middle;width:80px'>序號</th>
<th style='text-align:center;vertical-align: middle;width:150px'>作番號</th>
<th style='text-align:center;vertical-align: middle;width:150px'>部門</th>
<!-- <th style='text-align:center;vertical-align: middle;'>主管</th> -->
<th style='text-align:center;vertical-align: middle;'>契約員</th>
<th style='text-align:center;vertical-align: middle;width:120px'>客戶名稱</th>
<th style='text-align:center;vertical-align: middle;width:180px'>客戶名稱</th>
<th style='text-align:center;vertical-align: middle;'>應收日期</th>
<th style='text-align:center;vertical-align: middle;'>是否應收</th>
<th style='text-align:center;vertical-align: middle;'>款別金額</th>
<th style='text-align:center;vertical-align: middle;'>是否收齊</th>
<th style='text-align:center;vertical-align: middle;width:100px'>是否收齊</th>
<th style='text-align:center;vertical-align: middle;'>催收次數</th>
</tr>
@ -378,7 +399,7 @@ include "./footer.php";
<td class="CBudget"><?= number_format(round($row['OAmountWithTax'])); ?></td>
<td><?= $row['WriteOff']; ?></td>
<td class="collect"><?= (($row['havetopay'] == "V") && ($row['WriteOff'] !== 'V'))? $row['collecttime']:0; ?></td>
<td class="collect"><?= (($row['havetopay'] == "V") && ($row['WriteOff'] !== 'V')) ? $row['collecttime'] : 0; ?></td>
</tr>
<?php } ?>
</tbody>
@ -400,29 +421,6 @@ include "./footer.php";
}
}
}
// function downloadData() {
// var xhr = new XMLHttpRequest();
// var url = window.location.origin + "/wms/account-receivable-renovate-excel.php?type=all&<?= $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-renovate.xlsx");
// link.setAttribute('download', name);
// link.style.display = 'none';
// document.body.appendChild(link);
// link.click();
// document.body.removeChild(link);
// }
// }
// xhr.send(JSON.stringify({
// Bill:
// }));
// }
function searchFront(area) {
var term = 'search_' + area;
@ -510,8 +508,28 @@ include "./footer.php";
}
}
function check(searchname) {
console.log(searchname);
function downloadData() {
var BillData = <?= $total_data ?>;
var filename = "保養催收帳款" + "<?= date('Ymd-Hm') ?>" + ".xlsx";
var xhr = new XMLHttpRequest();
var url = window.location.origin + "/wms/account-receivable-excel.php?type=maintainance&<?= $token_link ?>";
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
var link = document.createElement('a');
link.setAttribute('href', window.location.origin + "/wms/account-receivable-contract.xlsx");
link.setAttribute('download', filename);
link.style.display = 'none';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
}
xhr.send(JSON.stringify({
Bill: BillData
}));
}
</script>

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

@ -111,7 +111,7 @@ if (!is_null($end_date)) {
$end_date = (int)date('Ymd', strtotime($end_date));
$sql_all_contract .= " AND MainAll.BillDate <= $end_date ";
}
if ((in_array($user_id, array('M0060', 'M0175'))) || (in_array(accountidToDepartId($user_id), array('220', '210', '321')))) {
if ((in_array($user_id, array('M0060', 'M0175','M0168'))) || (in_array(accountidToDepartId($user_id), array('220', '210', '321')))) {
} else {
$sql_all_contract .= " AND (MainAll.PersonId = '$user_id'";
if (count($follower) > 0) {
@ -794,7 +794,6 @@ foreach ($final_paystage as $key => &$value) {
}
}
//合約資料填回arrayData
foreach ($final_paystage as $key => $value) {
for ($sequence = 1; $sequence <= count($value); $sequence++) {
@ -811,9 +810,6 @@ foreach ($final_paystage as $key => $value) {
$arvalue['receivable_budget'] += $value[$sequence]['PlanPayAmt'];
$arrayData[$key]['receivable_budget'] += $value[$sequence]['PlanPayAmt'];
}
// else {
// $arvalue['receivable_budget'] = 0;
// }
if ($arvalue['collect_month'] < $value[$sequence]['collect_month']) {
$arvalue['collect_month'] = $value[$sequence]['collect_month'];
}
@ -837,7 +833,7 @@ foreach ($final_paystage as $key => $value) {
$sum_received_budget += $value[$sequence]['received_budget'];
$sum_invoice_budget += $value[$sequence]['invoice_budget'];
}
if ($value[$sequence]['collect_month'] > $arrayData[$key]['collect_month']) {
if ((round($arvalue['receivable_budget'] - $arvalue['received_budget']) >2)&&($value[$sequence]['collect_month'] > $arrayData[$key]['collect_month'])) {
$arrayData[$key]['collect_month'] = $value[$sequence]['collect_month'];
}
}
@ -846,11 +842,17 @@ foreach ($final_paystage as $key => $value) {
}
}
$average_A40001 = $sum_A40001 / $sum_facility;
if($sum_facility>0){
$average_A40001 = $sum_A40001 / $sum_facility;
$average_A40008 = $sum_A40008 / $sum_facility;
$average_facility_budget = $sum_total_budget / $sum_facility;
$average_contract_budget = $sum_total_budget / $sum_contract;
$average_contract_facility = $sum_facility / $sum_contract;
}
if($sum_contract>0){
$average_contract_budget = $sum_total_budget / $sum_contract;
$average_contract_facility = $sum_facility / $sum_contract;
}
// excel 結果
@ -914,34 +916,34 @@ foreach ($arrayData as $key => &$value) {
$excel_contract_all_array[$key][5] = $excel_contract_array[$key][19];
$excel_contract_all_array[$key][6] = $excel_contract_array[$key][20];
$excel_contract_all_array[$key][7] = $excel_contract_array[$key][17];
$total_collect_budget += $excel_contract_all_array[$key][6];
$total_collect_facility += $excel_contract_all_array[$key][4];
$total_collect_budget += $excel_contract_all_array[$key][7];
$total_collect_facility += $excel_contract_all_array[$key][5];
$isBoga = 0;
if (stristr($value['PayStage'][1]['PayStage'], '寶佳')) {
$isBoga = 1;
$excel_contract_boga_array[$key] = array_fill(0, 24, '');
$excel_contract_boga_array[$key][0] = $excel_contract_array[$key][0];
$excel_contract_boga_array[$key][1] = $excel_contract_array[$key][3];
$excel_contract_boga_array[$key][2] = $excel_contract_array[$key][8];
$excel_contract_boga_array[$key][3] = $excel_contract_array[$key][11];
$excel_contract_boga_array[$key][4] = $excel_contract_array[$key][19];
$excel_contract_boga_array[$key][5] = $excel_contract_array[$key][20];
$excel_contract_boga_array[$key][6] = $excel_contract_array[$key][17];
$excel_contract_boga_array[$key][7] = $excel_contract_array[$key][18];
$boga_collect_budget += $excel_contract_boga_array[$key][6];
$boga_collect_facility += $excel_contract_boga_array[$key][4];
$excel_contract_boga_array[$key][2] = $excel_contract_array[$key][6];
$excel_contract_boga_array[$key][3] = $excel_contract_array[$key][8];
$excel_contract_boga_array[$key][4] = $excel_contract_array[$key][11];
$excel_contract_boga_array[$key][5] = $excel_contract_array[$key][19];
$excel_contract_boga_array[$key][6] = $excel_contract_array[$key][20];
$excel_contract_boga_array[$key][7] = $excel_contract_array[$key][17];
$boga_collect_budget += $excel_contract_boga_array[$key][7];
$boga_collect_facility += $excel_contract_boga_array[$key][5];
} else {
$excel_contract_noboga_array[$key] = array_fill(0, 24, '');
$excel_contract_noboga_array[$key][0] = $excel_contract_array[$key][0];
$excel_contract_noboga_array[$key][1] = $excel_contract_array[$key][3];
$excel_contract_noboga_array[$key][2] = $excel_contract_array[$key][8];
$excel_contract_noboga_array[$key][3] = $excel_contract_array[$key][11];
$excel_contract_noboga_array[$key][4] = $excel_contract_array[$key][19];
$excel_contract_noboga_array[$key][5] = $excel_contract_array[$key][20];
$excel_contract_noboga_array[$key][6] = $excel_contract_array[$key][17];
$excel_contract_noboga_array[$key][7] = $excel_contract_array[$key][18];
$noboga_collect_budget += $excel_contract_noboga_array[$key][6];
$noboga_collect_facility += $excel_contract_noboga_array[$key][4];
$excel_contract_noboga_array[$key][2] = $excel_contract_array[$key][6];
$excel_contract_noboga_array[$key][3] = $excel_contract_array[$key][8];
$excel_contract_noboga_array[$key][4] = $excel_contract_array[$key][11];
$excel_contract_noboga_array[$key][5] = $excel_contract_array[$key][19];
$excel_contract_noboga_array[$key][6] = $excel_contract_array[$key][20];
$excel_contract_noboga_array[$key][7] = $excel_contract_array[$key][17];
$noboga_collect_budget += $excel_contract_noboga_array[$key][7];
$noboga_collect_facility += $excel_contract_noboga_array[$key][5];
}
}
@ -981,7 +983,7 @@ foreach ($arrayData as $key => &$value) {
$excel_contract_array[$key][34] = (isset($payvalue['collect_month']) && !is_null($payvalue['collect_month']) && abs($excel_contract_array[$key][33]) > 10) ? round($payvalue['collect_month']) : 0;
if (isset($excel_contract_all_array[$key])) {
$excel_contract_all_array[$key][10] = $excel_contract_array[$key][33];
$excel_contract_all_array[$key][11] = (isset($payvalue['collect_month']) && !is_null($payvalue['collect_month'])) ? round($payvalue['collect_month']) : 0;
$excel_contract_all_array[$key][11] = $excel_contract_array[$key][34];
$total_second_collect_budget += $excel_contract_all_array[$key][10];
if ($isBoga == 1) {
$excel_contract_boga_array[$key][10] = $excel_contract_all_array[$key][10];
@ -1006,7 +1008,7 @@ foreach ($arrayData as $key => &$value) {
$excel_contract_array[$key][41] = (isset($payvalue['collect_month']) && !is_null($payvalue['collect_month']) && abs($excel_contract_array[$key][40]) > 10) ? round($payvalue['collect_month']) : 0;
if (isset($excel_contract_all_array[$key])) {
$excel_contract_all_array[$key][12] = $excel_contract_array[$key][40];
$excel_contract_all_array[$key][13] = (isset($payvalue['collect_month']) && !is_null($payvalue['collect_month'])) ? round($payvalue['collect_month']) : 0;
$excel_contract_all_array[$key][13] = $excel_contract_array[$key][41];
$total_arrival_collect_budget += $excel_contract_all_array[$key][12];
if ($isBoga == 1) {
$excel_contract_boga_array[$key][12] = $excel_contract_all_array[$key][12];
@ -1047,7 +1049,7 @@ foreach ($arrayData as $key => &$value) {
$excel_contract_array[$key][55] = (isset($payvalue['collect_month']) && !is_null($payvalue['collect_month']) && abs($excel_contract_array[$key][54]) > 10) ? round($payvalue['collect_month']) : 0;
if (isset($excel_contract_all_array[$key])) {
$excel_contract_all_array[$key][16] = $excel_contract_array[$key][54];
$excel_contract_all_array[$key][17] = (isset($payvalue['collect_month']) && !is_null($payvalue['collect_month'])) ? round($payvalue['collect_month']) : 0;
$excel_contract_all_array[$key][17] = $excel_contract_array[$key][55];
$total_tryrun_collect_budget += $excel_contract_all_array[$key][16];
if ($isBoga == 1) {
$excel_contract_boga_array[$key][16] = $excel_contract_all_array[$key][16];
@ -1070,7 +1072,7 @@ foreach ($arrayData as $key => &$value) {
$excel_contract_array[$key][62] = (isset($payvalue['collect_month']) && !is_null($payvalue['collect_month']) && abs($excel_contract_array[$key][61]) > 10) ? round($payvalue['collect_month']) : 0;
if (isset($excel_contract_all_array[$key])) {
$excel_contract_all_array[$key][18] = $excel_contract_array[$key][61];
$excel_contract_all_array[$key][19] = (isset($payvalue['collect_month']) && !is_null($payvalue['collect_month'])) ? round($payvalue['collect_month']) : 0;
$excel_contract_all_array[$key][19] = $excel_contract_array[$key][62];
$total_check_collect_budget += $excel_contract_all_array[$key][18];
$excel_contract_noboga_array[$key][18] = $excel_contract_all_array[$key][18];
@ -1088,7 +1090,7 @@ foreach ($arrayData as $key => &$value) {
$excel_contract_array[$key][69] = (isset($payvalue['collect_month']) && !is_null($payvalue['collect_month']) && abs($excel_contract_array[$key][68]) > 10) ? round($payvalue['collect_month']) : 0;
if (isset($excel_contract_all_array[$key])) {
$excel_contract_all_array[$key][20] = $excel_contract_array[$key][68];
$excel_contract_all_array[$key][21] = (isset($payvalue['collect_month']) && !is_null($payvalue['collect_month'])) ? round($payvalue['collect_month']) : 0;
$excel_contract_all_array[$key][21] = $excel_contract_array[$key][69];
$total_delivery_collect_budget += $excel_contract_all_array[$key][20];
$excel_contract_noboga_array[$key][20] = $excel_contract_all_array[$key][20];
$excel_contract_noboga_array[$key][21] = $excel_contract_all_array[$key][21];
@ -1105,7 +1107,7 @@ foreach ($arrayData as $key => &$value) {
$excel_contract_array[$key][76] = (isset($payvalue['collect_month']) && !is_null($payvalue['collect_month']) && abs($excel_contract_array[$key][75]) > 10) ? round($payvalue['collect_month']) : 0;
if (isset($excel_contract_all_array[$key])) {
$excel_contract_all_array[$key][22] = $excel_contract_array[$key][75];
$excel_contract_all_array[$key][23] = (isset($payvalue['collect_month']) && !is_null($payvalue['collect_month'])) ? round($payvalue['collect_month']) : 0;
$excel_contract_all_array[$key][23] = $excel_contract_array[$key][76];
$total_final_collect_budget += $excel_contract_all_array[$key][22];
if ($isBoga == 1) {
$excel_contract_boga_array[$key][22] = $excel_contract_all_array[$key][22];
@ -1138,9 +1140,9 @@ foreach ($arrayData as $key => &$value) {
}
}
// $excel_contract_all_array['last']= $excel_contract_boga_array['last'] = $excel_contract_noboga_array['last'] = array_fill(0, 23, '');
$excel_contract_all_array['last']= ['合計', '', '', '', $total_collect_facility, '', $total_collect_budget, '', $total_sign_collect_budget, '', $total_second_collect_budget, '', $total_arrival_collect_budget, '', $total_install_collect_budget, '', $total_tryrun_collect_budget, '', $total_check_collect_budget, '', $total_delivery_collect_budget, '', $total_final_collect_budget, ''];
$excel_contract_boga_array['last']= ['合計', '', '', '', $boga_collect_facility, '', $boga_collect_budget, '', $boga_sign_collect_budget, '', $boga_second_collect_budget, '', $boga_arrival_collect_budget, '', $boga_install_collect_budget, '', $boga_tryrun_collect_budget, '', $boga_check_collect_budget, '', $boga_delivery_collect_budget, '', $boga_final_collect_budget, ''];
$excel_contract_noboga_array['last']= ['合計', '', '', '', $noboga_collect_facility, '', $noboga_collect_budget, '', $noboga_sign_collect_budget, '', $noboga_second_collect_budget, '', $noboga_arrival_collect_budget, '', $noboga_install_collect_budget, '', $noboga_tryrun_collect_budget, '', $noboga_check_collect_budget, '', $noboga_delivery_collect_budget, '', $noboga_final_collect_budget, ''];
$excel_contract_all_array['last']= ['合計', '', '', '','', $total_collect_facility, '', $total_collect_budget, $total_sign_collect_budget, '', $total_second_collect_budget, '', $total_arrival_collect_budget, '', $total_install_collect_budget, '', $total_tryrun_collect_budget, '', $total_check_collect_budget, '', $total_delivery_collect_budget, '', $total_final_collect_budget, ''];
$excel_contract_boga_array['last']= ['合計', '', '', '','', $boga_collect_facility, '', $boga_collect_budget, $boga_sign_collect_budget, '', $boga_second_collect_budget, '', $boga_arrival_collect_budget, '', $boga_install_collect_budget, '', $boga_tryrun_collect_budget, '', $boga_check_collect_budget, '', $boga_delivery_collect_budget, '', $boga_final_collect_budget, ''];
$excel_contract_noboga_array['last']= ['合計', '', '', '','', $noboga_collect_facility, '', $noboga_collect_budget, $noboga_sign_collect_budget, '', $noboga_second_collect_budget, '', $noboga_arrival_collect_budget, '', $noboga_install_collect_budget, '', $noboga_tryrun_collect_budget, '', $noboga_check_collect_budget, '', $noboga_delivery_collect_budget, '', $noboga_final_collect_budget, ''];
// print_r($excel_contract_array['M230064']);
// echo "<br>---------------------------------------------------------<br>";
@ -1342,7 +1344,7 @@ $testtotal = 0;
</div>
<div class="col-md-3">
<label for="average_contract_facility">平均台數 (台/合約)</label>
<input type="text" class="form-control" id="average_contract_facility" name="average_contract_facility" value="<?= number_format($average_contract_facility) ?>" disabled>
<input type="text" class="form-control" id="average_contract_facility" name="average_contract_facility" value="<?= round($average_contract_facility,2) ?>" disabled>
</div>
</div>
</form>
@ -1362,9 +1364,9 @@ $testtotal = 0;
<tr>
<th class="text-center" style="vertical-align: middle;">合約催收次數</th>
<td colspan="2">
<input type="text" class='form-control' id='search_collectstart' name='collect_time_start' style='width:10%;display:inline;' oninput="searchFront('collectstart')">
<input type="text" class='form-control' id='search_collectstart' name='collect_time_start' style='width:40%;display:inline;' oninput="searchFront('collectstart')">
≤ 催收次數 ≤
<input type="text" class='form-control' id='search_collectend' name='collect_time_end' style='width:10%;display:inline;' oninput="searchFront('collectend')">
<input type="text" class='form-control' id='search_collectend' name='collect_time_end' style='width:40%;display:inline;' oninput="searchFront('collectend')">
<!-- <button type="submit" class="btn btn-primary btn-sm">搜尋</button> -->
</td>
</tr>
@ -1416,7 +1418,10 @@ $testtotal = 0;
<?php
include "./footer.php";
?>
<div style="width: 20%;float:right;margin-right:5%; ">
<label>查詢條件</label>
<input type="text" id="search" name="search" class="form-control" placeholder="請輸入查詢條件" oninput="searchData()">
</div>
<div style="width:98%;margin:1% ;overflow-x: auto;">
<table class="table table-striped table-bordered" style="width:100%;">
@ -1603,6 +1608,20 @@ include "./footer.php";
<script>
function searchData() {
var searchTerm = document.getElementById('search').value.toLowerCase();
var rows = document.getElementsByClassName('data-row');
for (var i = 0; i < rows.length; i++) {
var rowText = rows[i].textContent.toLowerCase();
// var rowText = rows[i].id.toLowerCase();
if (rowText.includes(searchTerm)) {
console.log(rowText);
rows[i].style.display = '';
} else {
rows[i].style.display = 'none';
}
}
}
function searchFront(area) {
var term = 'search_' + area;

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

@ -72,7 +72,7 @@ if (!is_null($end_date)) {
$end_date = (int)date('Ymd', strtotime($end_date));
$sql_contractNumber .= " AND MainAll.BillDate <= $end_date ";
}
if ((in_array($user_id, array('M0060', 'M0175'))) || (in_array(accountidToDepartId($user_id), array('220', '210', '321')))) {
if ((in_array($user_id, array('M0060', 'M0175','M0168'))) || (in_array(accountidToDepartId($user_id), array('220', '210', '321')))) {
} else {
$sql_contractNumber .= " AND (Leader.PersonId = '$user_id' OR MainAll.PersonId = '$user_id'";
if (count($follower) > 0) {
@ -101,29 +101,16 @@ CheckAll.FromSalSalesOrder AS BillNo
SELECT CheckDetail.BillNo, CheckDetail.FromSalSalesOrder, CheckDetail.RowNo
FROM arCheckBillDetail AS CheckDetail )
AS CheckAll ON CheckAll.BillNo= Detail.FromBillNo AND Detail.FromRowCode = CheckAll.RowNo
WHERE Main.InvoiceState!=2";
WHERE Main.InvoiceState!=2 AND Main.InvoiceDate>20240229 ";
// T8核銷
$sql_received = "SELECT
CheckDetail.OrderBillNo,
arWriteOffBillDetail.FromBillNo AS CheckBillNo,
arWriteOffBillDetail.FromRowCode AS CheckRowCode,
arWriteOffBillDetail.CurrStandOffOAmount,
CheckDetail.TypeId
FROM arWriteOffBillDetail
LEFT JOIN
(SELECT
arCheckBillDetail.BillNo,
arCheckBillDetail.RowCode,
arCheckBillDetail.FromSalSalesOrder AS OrderBillNo,
salSalesOrder.TypeId,
salSalesOrder.ModeId
FROM arCheckBillDetail
LEFT JOIN salSalesOrder
ON salSalesOrder.BillNo =arCheckBillDetail.FromSalSalesOrder )
AS CheckDetail
ON CheckDetail.BillNo=arWriteOffBillDetail.FromBillNo AND arWriteOffBillDetail.FromRowCode = CheckDetail.RowCode
WHERE CheckDetail.ModeId = 'T'";
$sql_received = "SELECT Detail.OrderBillNo,
Detail.CurrWriteOffLAmount,
Main.BillDate
FROM arWriteOffBillDetail AS Detail
LEFT JOIN arWriteOffBill AS Main
ON Detail.BillNo=Main.BillNo
WHERE LEN(Detail.OrderBillNo)>0 AND Main.BillDate>20240229 ";
$contractNumbers = array();
@ -215,9 +202,9 @@ LEFT JOIN (SELECT O.*, DE.DeptName, DE.LeaderId FROM salSalesOrder AS O LEFT JOI
LEFT JOIN comBusinessPartner AS c ON s.BizPartnerId=c.BizPartnerId
LEFT JOIN comGroupPerson AS Person ON s.PersonId = Person.PersonId
LEFT JOIN comGroupPerson AS Leader ON s.LeaderId = Leader.PersonId ";
// if (isset($str_numbers)) {
// $sql_contract .= "WHERE s.BillNo IN $str_numbers ";
// }
if (isset($str_numbers)) {
$sql_contract .= "WHERE a.BillNo IN $str_numbers ";
}
// T8 銷售訂單 作番金額
@ -294,6 +281,7 @@ foreach ($contract as $cont) {
$arrayData[$BillNo]['PayStage'][$RowNo]['type'] = "C";
}
}
// $received_array = $conn->query($sql_received);
$received_array = $conn->query($sql_received);
$invoice_data = $conn->query($sql_invoice);
$contract_budget_data = $conn->query($sql_contract_budget);
@ -647,6 +635,52 @@ foreach ($allPayStages as $key => &$payStage) {
}
}
// 將WMS內期初資料整理進arrayData
$sql_initial = "SELECT * FROM account_receivable_renovate";
$result_initial = mysqli_query($link, $sql_initial);
foreach($result_initial as $value){
$billno = $value['contract_no'];
switch ($value['contract_no']) {
case 'M220104':
$billNo = 'SO20230701001';
break;
case 'M230098':
$billNo = 'SO20230701002';
break;
case 'M230159':
$billNo = 'SO20230701003';
break;
case 'M230992':
$billNo = 'SO20230901001';
break;
case 'M230492':
$billNo = 'SO20231110001';
break;
case 'M230557':
$billNo = 'SO20231110002';
break;
case 'M230496':
$billNo = 'SO20231110003';
break;
case 'M230683':
$billNo = 'SP20240108001';
break;
case 'B230726':
$billNo = 'SP20240116004';
break;
case 'M220035':
$billNo = 'T220035';
break;
case 'M230098':
$billNo = 'T230098';
break;
}
if(isset($arrayData[$billNo])){
$arrayData[$billNo]['invoice_budget'] += intval($value['invoice_budget']);
$arrayData[$billNo]['received_budget'] += intval($value['received_budget']);
}
}
// [invoice][發票號碼][0 發票日期, 1 發票金額, 2 發票狀態, 3 收款日期, 4 收款金額, 5 手續費, 6 核銷單號]
foreach ($invoice_data as $invoice) {
if (isset($invoice['BillNo']) && isset($arrayData[$invoice['BillNo']])) {
@ -659,25 +693,10 @@ foreach ($invoice_data as $invoice) {
foreach ($received_array as $received) {
$BillNo = $received['OrderBillNo'];
if (isset($arrayData[$BillNo])) {
// if (isset($received['InvoiceNo']) && isset($arrayData[$BillNo]['invoice'][$received['InvoiceNo']])) {
$arrayData[$BillNo]['received_budget'] += $received['CurrStandOffOAmount'];
// array_push($arrayData[$BillNo]['invoice'][$received['InvoiceNo']], date($received['ReceivedDate']), $received['PayWriteOffOAmount'], $received['Fee'], $received['BillNo']);
// }
}
}
//未在T8的收款資料
$sql_wms = "SELECT * FROM account_received WHERE type='T' ";
$query_wms = mysqli_query($link, $sql_wms);
foreach ($query_wms as $wms) {
if (isset($arrayData[$wms['BillNo']]) && isset($arrayData[$wms['BillNo']]['invoice_budget'])) {
$arrayData[$wms['BillNo']]['invoice_budget'] += $wms['invoice_budget'];
$arrayData[$wms['BillNo']]['invoice'][$wms['invoice_no']] = [date("Y-m-d", strtotime($wms['invoice_date'])), $wms['invoice_budget'], 1];
}
if (isset($arrayData[$wms['BillNo']]) && isset($arrayData[$wms['BillNo']]['received_budget'])) {
$arrayData[$wms['BillNo']]['received_budget'] += $wms['received_budget'];
$arrayData[$BillNo]['received_budget'] += $received['CurrWriteOffLAmount'];
}
}
// $final_paystage ['type'] ['PlanPayDate'] ['PayAmount'] ['facilityno'] ['sequenceNumber'] ['name'] ['InvoiceAmount'] ['receivedAmount']
foreach ($final_paystage as $key => &$payStage) {
if (isset($arrayData[$key]['invoice_budget']) && isset($arrayData[$key]['received_budget'])) {
@ -766,14 +785,13 @@ foreach ($arrayData as $key => $value) {
} else {
$thisplanpaydate = $thisPayStage['PlanPayDate'];
}
if ($havetopay == "V" && $unReceivedAmount > 1) {
if ($havetopay == "V" && ($unReceivedAmount > 10) && ($final_paystage[$key][$sequence]['collect_month'] >0)) {
$print_array[$keyname] = [
$value[10], $thisPayStage['facilityno'], $value[0], $value[1], $value[11], $value['ManagerName'], $value[3], $value[4], $value[5], $value[6], $value[7], $value[8],
$thisPayStage['name'], $thisplanpaydate, $havetopay,
number_format(round($final_paystage[$key][$sequence]['PayAmount'])),
number_format(round($final_paystage[$key][$sequence]['InvoiceAmount'])), number_format(round($unInvoiceAmount)),
number_format(round($final_paystage[$key][$sequence]['receivedAmount'])), number_format(round($unReceivedAmount)),
number_format(round($final_paystage[$key][$sequence]['collect_month']))
$value[10], $thisPayStage['facilityno'], $value[1],$value[4], $value[5],
$thisPayStage['name'], $thisplanpaydate,
round($final_paystage[$key][$sequence]['PayAmount']),
round($final_paystage[$key][$sequence]['receivedAmount']), round($unReceivedAmount),
round($final_paystage[$key][$sequence]['collect_month'])
];
}
@ -793,48 +811,48 @@ foreach ($arrayData as $key => $value) {
} else {
$invoice_state = 0;
}
$table1 = "INSERT INTO account_receivable_renovate(
`contract_no`,
`facility_no`,
`stagename`,
`budget`,
`receivable`,
`invoice_state`,
`invoice_budget`,
`received_budget`
";
$table2 = ") VALUES (
'$value[10]',
'$thisPayStage[facilityno]',
'$thisPayStage[name]',
$table_budget,
$table_hadtopay,
$invoice_state,
$table_invoice_budget,
$table_received_budget
";
// $table1 = "INSERT INTO account_receivable_renovate(
// `contract_no`,
// `facility_no`,
// `stagename`,
// `budget`,
// `receivable`,
// `invoice_state`,
// `invoice_budget`,
// `received_budget`
// ";
// $table2 = ") VALUES (
// '$value[10]',
// '$thisPayStage[facilityno]',
// '$thisPayStage[name]',
// $table_budget,
// $table_hadtopay,
// $invoice_state,
// $table_invoice_budget,
// $table_received_budget
// ";
if (!is_null($final_paystage[$key][$sequence]['PlanPayDate']) && !empty($final_paystage[$key][$sequence]['PlanPayDate'])) {
$table1 .= ",`receivable_date`";
$receivable_date = date('Y-m-d', strtotime($final_paystage[$key][$sequence]['PlanPayDate']));
$table2 .= ",'$receivable_date' \n";
}
$table .= $table1 . $table2 . "); \n";
// if (!is_null($final_paystage[$key][$sequence]['PlanPayDate']) && !empty($final_paystage[$key][$sequence]['PlanPayDate'])) {
// $table1 .= ",`receivable_date`";
// $receivable_date = date('Y-m-d', strtotime($final_paystage[$key][$sequence]['PlanPayDate']));
// $table2 .= ",'$receivable_date' \n";
// }
// $table .= $table1 . $table2 . "); \n";
}
}
}
// $file_path = 'account_receivable_renovate_sql.sql';
// if (file_put_contents($file_path, $table) !== false) {
// // echo "SQL文件已成功生成:{$file_path}";
// echo "SQL文件已成功生成:{$file_path}";
// } else {
// // echo "生成SQL文件时出现错误。";
// echo "生成SQL文件时出现错误。";
// }
$total_data = json_encode($print_array);
$average_budget = $sum_total_budget / $sum_facility;
$average_A40002 = $sum_A40002 / $sum_facility_A40002;
$average_A40009 = $sum_A40009 / $sum_facility_A40009;
$average_A40010 = $sum_A40010 / $sum_facility_A40010;
$average_A40019 = $sum_A40019 / $sum_facility_A40019;
$average_A40002 = ($sum_facility_A40002>0)? ($sum_A40002 / $sum_facility_A40002):0;
$average_A40009 = ($sum_facility_A40009>0)? ($sum_A40009 / $sum_facility_A40009):0;
$average_A40010 = ($sum_facility_A40010>0)? ($sum_A40010 / $sum_facility_A40010):0;
$average_A40019 = ($sum_facility_A40019>0)? ($sum_A40019 / $sum_facility_A40019):0;
?>
<style>
@ -1089,7 +1107,7 @@ include "./footer.php";
function downloadData() {
var xhr = new XMLHttpRequest();
var url = window.location.origin + "/wms/account-receivable-renovate-excel.php?type=all&<?= $token_link ?>";
var url = window.location.origin + "/wms/account-receivable-excel.php?type=renovate&<?= $token_link ?>";
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onreadystatechange = function() {

BIN
wms/account-receivable-renovate.xlsx

Binary file not shown.

476
wms/account-receivable-test.php

@ -1,446 +1,30 @@
<?php
// $today = date('Ym01', strtotime('-1 month',strtotime(date('Ym01'))));
// $yesterday = date("Ym01", strtotime('-1 month',strtotime(date('2023-11-17'))));
// echo "today: " . $today . "<br>";
// echo "yesterday: " . $yesterday . "<br>";
// echo $today-$yesterday;
// echo "<br>";
// $test = date('Ymd', $today-$yesterday);
// echo $test;
include './header.php';
// $sql = "SELECT
// salOrderStagePay.BillNo,
// salOrderStagePay.PayStage
// FROM salOrderStagePay
// LEFT JOIN salSalesOrder
// ON salSalesOrder.BillNo = salOrderStagePay.BillNo WHERE salSalesOrder.ModeId = 'M' AND (salSalesOrder.CurrentState=2 OR salSalesOrder.CurrentState=4) ";
// $query = $conn->query($sql);
// $contracts = array();
// foreach ($query as $row) {
// if (!array_key_exists($row['BillNo'], $contracts)) {
// $contracts[$row['BillNo']] = [$row['BillNo'], $row['PayStage']];
// }else{
// array_push($contracts[$row['BillNo']], $row['PayStage']);
// }
// }
// foreach($contracts as $contract){
// foreach($contract as $con){
// echo $con.";";
// }
// echo "<br>";
// }
//只有一個作番的銷售訂單
// $sql = "select salSalesOrderDetail.BillNo,count(salSalesOrderDetail.MaterialId) AS number from salSalesOrderDetail
// LEFT JOIN salSalesOrder ON salSalesOrder.BillNo=salSalesOrderDetail.BillNo
// where salSalesOrderDetail.ItemType=0 AND salSalesOrder.ModeId='M'
// group by salSalesOrderDetail.BillNo ORDER BY number";
// $query = $conn->query($sql);
// foreach($query as $row){
// if($row['number']==1){
// echo $row['BillNo']."<br>";
// }
// }
// 找出已工收的作番 但沒在T8銷售訂單上出現的作番
// $material_array = "('2MH00028', '3MH00123', '2MH00026', '3MW00067', '3MH00124', '3MH00121',
// '3MH00122', '2MW00027', '3MH00297', '2MW00001', '3MH00111', '3MW00190',
// '3MW00118', '3MH00093', '3MH00002', '3MW00024', '3MH00130', '3MH00196',
// '3MW00119', '3MH00205', '3MH00259', '3MW00159', '3MW00243', '3MH00351',
// '3MH00352', '2MX00015', '3MH00353', '3MH00298', '3MH00113', '3MH00036',
// '3MH00206', '3MH00179', '3MH00180', '3MH00181', '3MW00350', '3MH00053',
// '3MH00054', '3MH00178', '3MH00296', '2MH00047', '3MW00114', '3MH00282',
// '2MH00048', '3MH00609', '3MH00148', '3MH00354', '3MX00021', '3MW00210',
// '3MH00184', '3MH00185', '3MH00283', '3MW00209', '3MH00182', '3MH00183',
// '3MH00189', '3MH00512', '3MH00355', '3MH00286', '3MH00511', '2MX00008',
// '2MX00014', '3MH00244', '3MH00555', '3MH00450', '3MW00211', '3MH00177',
// '2MX00009', '2MX00012', '3MW00139', '3MH00540', '3MH00504', '3MH00360',
// '3MH00301', '3MX00020', '2MX00013')";
// $material_array2 = array(
// '2MH00028', '3MH00123', '2MH00026', '3MW00067', '3MH00124', '3MH00121',
// '3MH00122', '2MW00027', '3MH00297', '2MW00001', '3MH00111', '3MW00190',
// '3MW00118', '3MH00093', '3MH00002', '3MW00024', '3MH00130', '3MH00196',
// '3MW00119', '3MH00205', '3MH00259', '3MW00159', '3MW00243', '3MH00351',
// '3MH00352', '2MX00015', '3MH00353', '3MH00298', '3MH00113', '3MH00036',
// '3MH00206', '3MH00179', '3MH00180', '3MH00181', '3MW00350', '3MH00053',
// '3MH00054', '3MH00178', '3MH00296', '2MH00047', '3MW00114', '3MH00282',
// '2MH00048', '3MH00609', '3MH00148', '3MH00354', '3MX00021', '3MW00210',
// '3MH00184', '3MH00185', '3MH00283', '3MW00209', '3MH00182', '3MH00183',
// '3MH00189', '3MH00512', '3MH00355', '3MH00286', '3MH00511', '2MX00008',
// '2MX00014', '3MH00244', '3MH00555', '3MH00450', '3MW00211', '3MH00177',
// '2MX00009', '2MX00012', '3MW00139', '3MH00540', '3MH00504', '3MH00360',
// '3MH00301', '3MX00020', '2MX00013'
// );
//找出已工收 在採購單上有的作番
// $sql_purBill = "SELECT * FROM purBillOrderDetail WHERE MaterialId IN ('2MH00028P','3MH00123P','2MH00026P','3MW00067P','3MH00124P','3MH00121P','3MH00122P','2MW00027P','3MH00297P','2MW00001P','3MH00111P','3MW00190P','3MW00118P','3MH00093P','3MH00002P','3MW00024P','3MH00130P','3MH00196P','3MW00119P','3MH00205P','3MH00259P','3MW00159P','3MW00243P','3MH00351P','3MH00352P','2MX00015P','3MH00353P','3MH00298P','3MH00113P','3MH00036P','3MH00206P','3MH00179P','3MH00180P','3MH00181P','3MW00350P','3MH00053P','3MH00054P','3MH00178P','3MH00296P','2MH00047P','3MW00114P','3MH00282P','2MH00048P','3MH00609P','3MH00148P','3MH00354P','3MX00021P','3MW00210P','3MH00184P','3MH00185P','3MH00283P','3MW00209P','3MH00182P','3MH00183P','3MH00189P','3MH00512P','3MH00355P','3MH00286P','3MH00511P','2MX00008P','2MX00014P','3MH00244P','3MH00555P','3MH00450P','3MW00211P','3MH00177P','2MX00009P','2MX00012P','3MW00139P','3MH00540P','3MH00504P','3MH00360P','3MH00301P','3MX00020P','2MX00013P')";
// $query_purBill = $conn->query($sql_purBill);
// foreach ($query_purBill as $row) {
// echo substr($row['MaterialId'],0,-1) . ";" . $row['BillNo'] . "<br>";
// }
// $find_array = array();
// $sql_Bill = "SELECT * FROM salSalesOrderDetail
// WHERE MaterialId
// IN $material_array";
// $query = $conn->query($sql_Bill);
// foreach ($query as $row) {
// echo $row['MaterialId'] . ",";
// if (($key = array_search($row['MaterialId'], $material_array2)) !== false) {
// unset($material_array2[$key]);
// }
// }
// echo "<br><br>";
// foreach ($material_array2 as $material) {
// echo $material . ",";
// }
//-------------------------沒有3MH00540--------------------------------------------
//找已工收 已發貨的作番
// $sql_out_warehouse = "SELECT B.MaterialId FROM stkWareHouseIn AS A LEFT JOIN stkWareHouseInDetail AS B ON A.BillNo=B.BillNo WHERE A.IOProperty = 0 AND B.MaterialId IN $material_array";
// $query_out_warehouse = $conn->query($sql_out_warehouse);
// foreach ($query_out_warehouse as $row) {
// echo $row['MaterialId'] . "<br>";
// }
// 已工收 有庫存的作番
// $sql_in_warehouse = "SELECT MaterialId, Quantity FROM stkWareHouseAccountDetail WHERE MaterialId IN $material_array AND Quantity >0";
// $query_in_warehouse = $conn->query($sql_in_warehouse);
// foreach ($query_in_warehouse as $row) {
// echo $row['MaterialId'].", ".$row['Quantity'] . "<br>";
// if (($key = array_search($row['MaterialId'], $material_array2)) !== false) {
// unset($material_array2[$key]);
// }
// }
// echo "<br><br>";
// foreach ($material_array2 as $material) {
// echo $material . "<br>";
// }
//已工收 有組裝單
// $sql_assemble = "SELECT * FROM stkAssyMast WHERE MaterialId IN $material_array";
// $query_assemble = $conn->query($sql_assemble);
// foreach ($query_assemble as $row) {
// echo $row['MaterialId'] . "<br>";
// }
//已工收 P有庫存
// $sql_p_in_warehouse = "SELECT MaterialId, Quantity FROM stkWareHouseAccountDetail WHERE MaterialId IN
// ('2MH00028P','3MH00123P','2MH00026P','3MW00067P','3MH00124P','3MH00121P','3MH00122P',
// '2MW00027P','3MH00297P','2MW00001P','3MH00111P','3MW00190P','3MW00118P','3MH00093P',
// '3MH00002P','3MW00024P','3MH00130P','3MH00196P','3MW00119P','3MH00205P','3MH00259P',
// '3MW00159P','3MW00243P','3MH00351P','3MH00352P','2MX00015P','3MH00353P','3MH00298P',
// '3MH00113P','3MH00036P','3MH00206P','3MH00179P','3MH00180P','3MH00181P','3MW00350P',
// '3MH00053P','3MH00054P','3MH00178P','3MH00296P','2MH00047P','3MW00114P','3MH00282P',
// '2MH00048P','3MH00609P','3MH00148P','3MH00354P','3MX00021P','3MW00210P','3MH00184P',
// '3MH00185P','3MH00283P','3MW00209P','3MH00182P','3MH00183P','3MH00189P','3MH00512P',
// '3MH00355P','3MH00286P','3MH00511P','2MX00008P','2MX00014P','3MH00244P','3MH00555P',
// '3MH00450P','3MW00211P','3MH00177P','2MX00009P','2MX00012P','3MW00139P','3MH00540P',
// '3MH00504P','3MH00360P','3MH00301P','3MX00020P','2MX00013P') AND Quantity >0";
// $query_p_in_warehouse = $conn->query($sql_p_in_warehouse);
// foreach ($query_p_in_warehouse as $row) {
// echo substr($row['MaterialId'],0,-1). "<br>";
// }
//------------------------------------------------------------------------------------------------------------------------------
$finished_array = array('2MH00028', '3MH00123', '2MH00026', '3MW00067', '3MH00124', '3MH00121', '3MH00122', '2MW00027', '3MH00297');
$finished = "('2MH00028','3MH00123','2MH00026','3MW00067','3MH00124','3MH00121','3MH00122','2MW00027','3MH00297')";
//有向普來特富下單的作番
// $sql_all = "SELECT `contractno`,`facilityno`,`custom` FROM `wipwholestatus`
// WHERE (prattford_order_date IS NOT NULL)
// AND facilityno NOT IN ('2MH00028','3MH00123','2MH00026','3MW00067','3MH00124','3MH00121','3MH00122','2MW00027','3MH00297')
// AND contract_type='A'";
// $query_all = mysqli_query($link, $sql_all);
// $facilities = mysqli_fetch_all($query_all, MYSQLI_ASSOC);
// foreach ($facilities as $key => $value) {
// // echo $value['contractno'] . ";" . $value['facilityno']. ";" . $value['custom'] . "<br>";
// echo $value['contractno'] ."<br>";
// }
$all = "('2MW00001','2MW00002','2MW00003','2MW00004','2MW00005','2MX00006','2MX00007','2MX00008','2MX00009','2MX00010','2MX00011','2MX00012','2MX00013','2MX00014','2MX00015',
'2MX00016','2MX00017','2MX00018','2MX00019','2MX00020','2MX00021','2MX00022','2MX00023','2MX00024','2MX00025','2MW00038','2MX00044','2MH00046','2MH00047','2MH00048','3MH00002',
'3MX00003','3MX00004','3MX00005','3MX00006','3MX00007','3MX00008','3MX00009','3MX00010','3MX00011','3MX00012','3MX00013','3MX00014','3MX00015','3MX00016','3MX00017','3MX00018',
'3MX00019','3MX00020','3MX00021','3MX00022','3MH00023','3MW00024','3MH00025','3MX00026','3MH00027','3MH00028','3MH00029','3MH00030','3MH00031','3MH00032','3MH00033','3MH00034',
'3MH00035','3MH00036','3MX00037','3MF00038','3MH00039','3MH00040','3MH00041','3MH00042','3MH00043','3MH00044','3MH00045','3MH00046','3MH00047','3MX00048','3MH00049','3MW00050',
'3MW00051','3MW00052','3MH00053','3MX00924','3MH00054','3MH00055','3MH00056','3MH00057','3MH00058','3MH00059','3MH00060','3MH00061','3MH00062','3MH00063','3MH00064','3MX00065',
'3MH00066','3MX00068','3MX00069','3MX00070','3MX00071','3MX00072','3MX00073','3MX00074','3MX00075','3MH00076','3MH00077','3MX00078','3MX00079','3MX00080','3MX00081','3MX00082',
'3MX00083','3MX00084','3MX00085','3MX00086','3MX00087','3MX00088','3MX00089','3MX00090','3MX00091','3MX00092','3MH00093','3MH00094','3MH00095','3MH00096','3MH00097','3MH00098',
'3MH00099','3MH00100','3MH00101','3MH00102','3MH00103','3MH00104','3MH00105','3MH00106','3MH00107','3MW00108','3MX00109','3MW00110','3MH00111','3MH00112','3MH00113','3MW00114',
'3MH00115','3MH00116','3MW00117','3MW00118','3MW00119','3MH00120','3MH00125','3MH00126','3MH00127','3MW00128','3MW00129','3MH00130','3MH00131','3MX00132','3MX00133','3MX00134',
'3MX00135','3MX00136','3MX00137','3MX00138','3MW00139','3MX00141','3MX00142','3MX00144','3MX00147','3MX00140','3MX00143','3MX00145','3MX00146','3MH00148','3MH00149','3MH00150',
'3MH00151','3MH00152','3MH00153','3MW00154','3MW00155','3MH00156','3MH00157','3MH00158','3MW00159','3MW00160','3MW00161','3MW00162','3MW00163','3MW00164','3MW00165','3MW00166',
'3MW00167','3MW00168','3MW00169','3MW00170','3MW00171','3MH00172','3MH00173','3MH00174','3MH00175','3MX00176','3MH00177','3MH00178','3MH00179','3MH00180','3MH00181','3MH00182',
'3MH00183','3MH00184','3MH00185','3MH00186','3MH00187','3MH00188','3MH00189','3MW00190','3MX00191','3MX00192','3MX00193','3MH00194','3MH00195','3MH00196','3MH00197','3MW00198',
'3MW00199','3MW00200','3MX00201','3MH00202','3MX00203','3MX00204','3MH00205','3MH00206','3MH00207','3MH00208','3MW00209','3MW00210','3MW00211','3MW00212','3MW00213','3MW00214',
'3MW00215','3MH00216','3MW00217','3MX00218','3MX00219','3MX00220','3MX00221','3MX00222','3MX00223','3MX00224','3MX00225','3MX00226','3MX00227','3MX00228','3MX00229','3MX00230',
'3MX00231','3MX00232','3MX00233','3MX00234','3MX00235','3MX00236','3MX00237','3MX00238','3MX00239','3MX00240','3MX00241','3MH00242','3MW00243','3MH00244','3MH00245','3MH00246',
'3MH00247','3MW00248','3MW00249','3MH00250','3MH00251','3MH00252','3MW00253','3MP00254','3MH00255','3MW00256','3MX00257','3MW00258','3MH00259','3MW00260','3MW00261','3MH00262',
'3MH00263','3MH00264','3MH00265','3MH00281','3MH00280','3MW00279','3MW00278','3MW00277','3MW00276','3MW00275','3MW00274','3MH00273','3MH00272','3MH00271','3MH00270','3MH00268',
'3MH00269','3MH00266','3MW00267','3MH00282','3MH00283','3MH00284','3MH00285','3MH00286','3MX00287','3MX00288','3MX00289','3MX00290','3MX00291','3MW00292','3MH00293','3MH00294',
'3MX00295','3MH00296','3MH00298','3MH00299','3MW00300','3MH00301','3MH00302','3MH00303','3MH00304','3MH00305','3MH00306','3MH00307','3MH00308','3MH00309','3MX00310','3MW00311',
'3MH00312','3MH00313','3MX00314','3MX00324','3MX00325','3MX00334','3MX00335','3MX00315','3MX00318','3MX00319','3MX00322','3MX00326','3MX00329','3MX00331','3MX00332','3MX00316',
'3MX00317','3MX00320','3MX00321','3MX00327','3MX00328','3MX00330','3MX00333','3MW00323','3MW00336','3MH00337','3MH00338','3MH00339','3MH00340','3MH00341','3MH00342','3MH00343',
'3MH00344','3MH00345','3MH00346','3MH00347','3MH00348','3MH00349','3MW00350','3MH00351','3MH00352','3MH00353','3MH00354','3MH00355','3MH00356','3MH00357','3MH00358','3MH00359',
'3MH00360','3MH00361','3MH00362','3MH00363','3MH00364','3MH00365','3MH00366','3MH00367','3MH00368','3MW00369','3MP00370','3MH00371','3MX00372','3MX00373','3MX00374','3MX00375',
'3MW00376','3MH00377','3MH00378','3MH00379','3MH00380','3MH00381','3MH00382','3MH00383','3MH00384','3MH00385','3MH00386','3MH00387','3MH00388','3MH00389','3MH00393','3MH00394',
'3MH00395','3MH00396','3MH00397','3MH00398','3MH00399','3MH00400','3MH00401','3MH00402','3MH00403','3MX00404','3MX00405','3MX00406','3MH00407','3MH00408','3MH00409','3MH00410',
'3MH00411','3MH00412','3MW00413','3MW00414','3MW00415','3MH00416','3MH00417','3MH00418','3MW00419','3MH00420','3MH00421','3MH00422','3MH00423','3MH00424','3MH00425','3MH00426',
'3MH00427','3MH00428','3MH00429','3MX00430','3MX00431','3MX00432','3MX00433','3MX00434','3MX00435','3MX00436','3MX00437','3MX00438','3MX00439','3MX00440','3MX00441','3MX00442',
'3MX00443','3MX00444','3MH00445','3MX00448','3MH00449','3MH00450','3MW00451','3MX00452','3MW00453','3MH00454','3MH00455','3MH00456','3MH00457','3MH00458','3MH00459','3MH00460',
'3MH00461','3MH00462','3MH00463','3MH00464','3MH00465','3MH00466','3MH00467','3MH00468','3MH00469','3MH00470','3MH00471','3MH00472','3MH00473','3MH00474','3MH00475','3MH00476',
'3MH00477','3MH00478','3MH00479','3MH00480','3MH00481','3MH00482','3MX00483','3MH00484','3MH00485','3MH00486','3MX00487','3MX00488','3MW00489','3MW00490','3MH00491','3MH00492',
'3MH00493','3MH00494','3MH00495','3MH00496','3MH00497','3MH00498','3MH00499','3MW00500','3MX00501','3MX00502','3MH00503','3MH00554','3MH00540','3MX00551','3MX00552','3MH00504',
'3MW00505','3MW00506','3MH00507','3MH00508','3MW00509','3MX00510','3MH00511','3MH00512','3MH00513','3MW00514','3MW00515','3MH00516','3MH00517','3MH00518','3MH00519','3MH00520',
'3MH00521','3MH00522','3MH00523','3MH00524','3MH00525','3MH00526','3MH00527','3MH00528','3MH00529','3MH00530','3MH00531','3MH00532','3MX00533','3MH00534','3MH00535','3MX00536',
'3MX00537','3MH00538','3MH00539','3MW00824','3MH00541','3MW00542','3MX00543','3MH00544','3MH00545','3MH00546','3MH00547','3MX00548','3MX00559','3MH00550','3MH00555','3MH00557',
'3MH00556','3MX00549','3MW00558','3MH00560','3MH00561','3MH00562','3MH00563','3MH00564','3MH00565','3MH00566','3MH00567','3MH00568','3MH00569','3MH00570','3MH00571','3MH00572',
'3MH00573','3MH00574','3MH00575','3MH00576','3MH00577','3MH00578','3MW00579','3MW00580','3MH00581','3MH00582','3MH00583','3MH00584','3MH00585','3MH00586','3MH00587','3MH00588',
'3MH00589','3MH00590','3MH00591','3MH00592','3MH00593','3MH00594','3MX00595','3MH00596','3MX00597','3MX00598','3MX00599','3MX00600','3MX00601','3MX00602','3MX00604','3MX00603',
'3MX00605','3MX00606','3MX00607','3MX00608','3MH00609','3MH00610','3MH00611','3MW00613','3MW00612','3MX00614','3MX00615','3MW00616','3MH00617','3MH00618','3MX00619','3MH00620',
'3MH00621','3MH00622','3MH00623','3MH00624','3MH00625','3MH00626','3MH00627','3MX00628','3MX00629','3MX00630','3MX00631','3MX00632','3MX00633','3MX00634','3MX00635','3MX00636',
'3MX00637','3MX00638','3MH00639','3MH00640','3MH00641','3MH00642','3MH00643','3MH00644','3MH00645','3MH00646','3MH00647','3MH00648','3MH00649','3MH00650','3MH00651','3MH00652',
'3MH00653','3MH00654','3MH00655','3MH00656','3MH00657','3MH00658','3MH00659','3MH00660','3MW00695','3MH00661','3MW00662','3MX00663','3MX00664','3MX00665','3MX00666','3MX00667',
'3MX00668','3MX00669','3MX00670','3MX00671','3MX00672','3MX00673','3MX00674','3MX00675','3MX00676','3MX00677','3MX00678','3MX00679','3MX00680','3MH00681','3MH00682','3MH00683',
'3MH00684','3MH00685','3MH00686','3MH00687','3MH00688','3MH00689','3MH00690','3MW00691','3MW00692','3MH00693','3MW00694','3MW00697','3MW00698','3MW00699','3MW00696','3MW00702',
'3MW00703','3MH00704','3MH00705','3MH00706','3MH00707','3MH00708','3MH00709','3MH00710','3MH00711','3MH00712','3MH00713','3MH00714','3MH00715','3MH00716','3MH00717','3MH00718',
'3MH00719','3MH00720','3MH00721','3MH00722','3MH00723','3MH00724','3MH00725','3MH00726','3MH00727','3MH00728','3MX00729','3MX00730','3MX00731','3MX00732','3MH00733','3MH00734',
'3MH00735','3MH00736','3MH00737','3MW00739','3MX00770','3MX00771','3MX00446','3MX00447','3MH00772','3MX00740','3MX00741','3MX00742','3MX00743','3MX00744','3MX00745','3MX00746',
'3MX00747','3MX00748','3MX00749','3MH00738','3MH00768','3MX00775','3MH00774','3MP00773','3MH00779','3MH00777','3MH00778','3MH00793','3MH00794','3MH00795','3MH00796','3MH00790',
'3MH00791','3MH00789','3MX00776','3MH00797','3MH00787','3MH00792','3MW00805','3MW00806','3MH00807','3MH00808','3MX00809','3MX00810','3MX00811','3MX00812','3MH00813','3MH00864',
'3MW00863','3MH00813','3MH00814','3MX00815','3MW00818','3MW00819','3MW00821','3MW00822','3MW00823','3MW00825','3MW00826','3MW00827','3MW00828','3MW00829','3MW00830','3MW00820',
'3MW00831','3MH00817','3MH00816','3MX00758','3MX00760','3MX00759','3MX00761','3MH00832','3MW00841','3MW00842','3MW00843','3MW00844','3MH00833','3MH00834','3MH00835','3MH00836',
'3MH00837','3MH00838','3MH00839','3MH00840','3MW00845','3MW00846','3MW00847','3MH00848','3MH00849','3MH00850','3MH00851','3MH00852','3MH00853','3MH00854','3MW00855','3MW00856',
'3MW00857','3MW00858','3MX00859','3MX00860','3MX00750','3MX00752','3MX00754','3MX00757','3MX00751','3MX00753','3MX00755','3MX00756','3MX00766','3MX00767','3MW00788','3MP00865',
'3MH00866','3MH00867','3MH00868','3MH00869','3MH00870','3MH00871','3MH00872','3MH00873','3MX00874','3MX00875','3MX00876','3MX00877','3MX00762','3MX00765','3MX00763','3MX00764',
'3MX00861','3MX00862','3MX00878','3MH00879','3MH00880','3MH00881','3MH00882','3MH00926','3MH00874','3MH00875','3MH00876','3MH00877','3MH00878','3MH00883','3MH00884','3MW00886',
'3MX00919','3MX00920','3MX00921','3MX00922','3MX00915','3MX00916','3MX00917','3MX00918','3MX00911','3MX00912','3MX00913','3MX00914','3MX00905','3MX00906','3MX00907','3MX00908',
'3MX00909','3MX00910','3MX00903','3MX00904','3MX00897','3MX00900','3MX00901','3MX00898','3MX00899','3MX00902','3MX00893','3MX00894','3MX00895','3MX00896','3MX00887','3MX00888',
'3MX00889','3MX00890','3MX00891','3MX00892','3MH00885','3MH00923','3MW00925','3MW00927','3MH00928','3MH00929','3MH00930','3MH00931','3MH00932','3MH00933','3MX00934','3MX00935',
'3MP00936','3MP00937','3MH00938','3MW00939','3MW00940','3MH00941','3MH00942','3MH00943','3MH00944','3MH00945','3MH00946','3MH00947','3MH00948','3MH00949','3MH00950','3MH00951',
'3MH00952','3MH00953','3MH00954','3MH00955','3MH00956','3MH00957','3MW00958','3MW00959','3MW00960','3MQ00961','3MH00962','3MW00963','3MH00964','3MW00965','3MP00966','3MH00967',
'3MX00968','3MX00969','3MH00970','3MH00970','3MH00971','3MH00972','3MH00973','3MH00974','3MH00975','3MH00976','3MH00977','3MH00978','3MX00979','3MX00980','3MX00983','3MX00984',
'3MX00981','3MX00982','3MX00985','3MX00986','3MX00987','3MX00988','3MX00989','3MX00990','3MX00991','3MX00992','3MX00993','3MX00994','3MX00995','3MX00996','3MX00999','3MX01000',
'3MX01003','3MX01005','3MX01006','3MX00997','3MX00998','3MX01001','3MX01002','3MX01004','3MX01007','3MX01008','3MX01011','3MX01012','3MX01015','3MX01016','3MX01009','3MX01010',
'3MX01013','3MX01014','3MX01017','3MH01018','3MH01019','3MH01020','3MQ01021','3MP01022','3MH01023','3MX01024','3MX01025','3MX01026','3MX01027','3MW01028','3MH01029','3MH01030',
'3MH01031','3MP01032','3MH01033','3MH01034','3MW01035','3MP01036','3MX01037','3MX01038','3MX01039','3MX01040','3MX01041','3MX01042','3MH01043','3MH01044','3MH01045','3MH01046',
'3MH01047','3MH01048','3MX00775','3MX00776')";
$P_all = "
('2MW00001P','2MW00002P','2MW00003P','2MW00004P','2MW00005P','2MX00006P','2MX00007P','2MX00008P','2MX00009P','2MX00010P','2MX00011P','2MX00012P','2MX00013P','2MX00014P','2MX00015P',
'2MX00016P','2MX00017P','2MX00018P','2MX00019P','2MX00020P','2MX00021P','2MX00022P','2MX00023P','2MX00024P','2MX00025P','2MW00038P','2MX00044P','2MH00046P','2MH00047P','2MH00048P',
'3MH00002P','3MX00003P','3MX00004P','3MX00005P','3MX00006P','3MX00007P','3MX00008P','3MX00009P','3MX00010P','3MX00011P','3MX00012P','3MX00013P','3MX00014P','3MX00015P','3MX00016P',
'3MX00017P','3MX00018P','3MX00019P','3MX00020P','3MX00021P','3MX00022P','3MH00023P','3MW00024P','3MH00025P','3MX00026P','3MH00027P','3MH00028P','3MH00029P','3MH00030P','3MH00031P',
'3MH00032P','3MH00033P','3MH00034P','3MH00035P','3MH00036P','3MX00037P','3MF00038P','3MH00039P','3MH00040P','3MH00041P','3MH00042P','3MH00043P','3MH00044P','3MH00045P','3MH00046P',
'3MH00047P','3MX00048P','3MH00049P','3MW00050P','3MW00051P','3MW00052P','3MH00053P','3MX00924P','3MH00054P','3MH00055P','3MH00056P','3MH00057P','3MH00058P','3MH00059P','3MH00060P',
'3MH00061P','3MH00062P','3MH00063P','3MH00064P','3MX00065P','3MH00066P','3MX00068P','3MX00069P','3MX00070P','3MX00071P','3MX00072P','3MX00073P','3MX00074P','3MX00075P','3MH00076P',
'3MH00077P','3MX00078P','3MX00079P','3MX00080P','3MX00081P','3MX00082P','3MX00083P','3MX00084P','3MX00085P','3MX00086P','3MX00087P','3MX00088P','3MX00089P','3MX00090P','3MX00091P',
'3MX00092P','3MH00093P','3MH00094P','3MH00095P','3MH00096P','3MH00097P','3MH00098P','3MH00099P','3MH00100P','3MH00101P','3MH00102P','3MH00103P','3MH00104P','3MH00105P','3MH00106P',
'3MH00107P','3MW00108P','3MX00109P','3MW00110P','3MH00111P','3MH00112P','3MH00113P','3MW00114P','3MH00115P','3MH00116P','3MW00117P','3MW00118P','3MW00119P','3MH00120P','3MH00125P',
'3MH00126P','3MH00127P','3MW00128P','3MW00129P','3MH00130P','3MH00131P','3MX00132P','3MX00133P','3MX00134P','3MX00135P','3MX00136P','3MX00137P','3MX00138P','3MW00139P','3MX00141P',
'3MX00142P','3MX00144P','3MX00147P','3MX00140P','3MX00143P','3MX00145P','3MX00146P','3MH00148P','3MH00149P','3MH00150P','3MH00151P','3MH00152P','3MH00153P','3MW00154P','3MW00155P',
'3MH00156P','3MH00157P','3MH00158P','3MW00159P','3MW00160P','3MW00161P','3MW00162P','3MW00163P','3MW00164P','3MW00165P','3MW00166P','3MW00167P','3MW00168P','3MW00169P','3MW00170P',
'3MW00171P','3MH00172P','3MH00173P','3MH00174P','3MH00175P','3MX00176P','3MH00177P','3MH00178P','3MH00179P','3MH00180P','3MH00181P','3MH00182P','3MH00183P','3MH00184P','3MH00185P',
'3MH00186P','3MH00187P','3MH00188P','3MH00189P','3MW00190P','3MX00191P','3MX00192P','3MX00193P','3MH00194P','3MH00195P','3MH00196P','3MH00197P','3MW00198P','3MW00199P','3MW00200P',
'3MX00201P','3MH00202P','3MX00203P','3MX00204P','3MH00205P','3MH00206P','3MH00207P','3MH00208P','3MW00209P','3MW00210P','3MW00211P','3MW00212P','3MW00213P','3MW00214P','3MW00215P',
'3MH00216P','3MW00217P','3MX00218P','3MX00219P','3MX00220P','3MX00221P','3MX00222P','3MX00223P','3MX00224P','3MX00225P','3MX00226P','3MX00227P','3MX00228P','3MX00229P','3MX00230P',
'3MX00231P','3MX00232P','3MX00233P','3MX00234P','3MX00235P','3MX00236P','3MX00237P','3MX00238P','3MX00239P','3MX00240P','3MX00241P','3MH00242P','3MW00243P','3MH00244P','3MH00245P',
'3MH00246P','3MH00247P','3MW00248P','3MW00249P','3MH00250P','3MH00251P','3MH00252P','3MW00253P','3MP00254P','3MH00255P','3MW00256P','3MX00257P','3MW00258P','3MH00259P','3MW00260P',
'3MW00261P','3MH00262P','3MH00263P','3MH00264P','3MH00265P','3MH00281P','3MH00280P','3MW00279P','3MW00278P','3MW00277P','3MW00276P','3MW00275P','3MW00274P','3MH00273P','3MH00272P',
'3MH00271P','3MH00270P','3MH00268P','3MH00269P','3MH00266P','3MW00267P','3MH00282P','3MH00283P','3MH00284P','3MH00285P','3MH00286P','3MX00287P','3MX00288P','3MX00289P','3MX00290P',
'3MX00291P','3MW00292P','3MH00293P','3MH00294P','3MX00295P','3MH00296P','3MH00298P','3MH00299P','3MW00300P','3MH00301P','3MH00302P','3MH00303P','3MH00304P','3MH00305P','3MH00306P',
'3MH00307P','3MH00308P','3MH00309P','3MX00310P','3MW00311P','3MH00312P','3MH00313P','3MX00314P','3MX00324P','3MX00325P','3MX00334P','3MX00335P','3MX00315P','3MX00318P','3MX00319P',
'3MX00322P','3MX00326P','3MX00329P','3MX00331P','3MX00332P','3MX00316P','3MX00317P','3MX00320P','3MX00321P','3MX00327P','3MX00328P','3MX00330P','3MX00333P','3MW00323P','3MW00336P',
'3MH00337P','3MH00338P','3MH00339P','3MH00340P','3MH00341P','3MH00342P','3MH00343P','3MH00344P','3MH00345P','3MH00346P','3MH00347P','3MH00348P','3MH00349P','3MW00350P','3MH00351P',
'3MH00352P','3MH00353P','3MH00354P','3MH00355P','3MH00356P','3MH00357P','3MH00358P','3MH00359P','3MH00360P','3MH00361P','3MH00362P','3MH00363P','3MH00364P','3MH00365P','3MH00366P',
'3MH00367P','3MH00368P','3MW00369P','3MP00370P','3MH00371P','3MX00372P','3MX00373P','3MX00374P','3MX00375P','3MW00376P','3MH00377P','3MH00378P','3MH00379P','3MH00380P','3MH00381P',
'3MH00382P','3MH00383P','3MH00384P','3MH00385P','3MH00386P','3MH00387P','3MH00388P','3MH00389P','3MH00393P','3MH00394P','3MH00395P','3MH00396P','3MH00397P','3MH00398P','3MH00399P',
'3MH00400P','3MH00401P','3MH00402P','3MH00403P','3MX00404P','3MX00405P','3MX00406P','3MH00407P','3MH00408P','3MH00409P','3MH00410P','3MH00411P','3MH00412P','3MW00413P','3MW00414P',
'3MW00415P','3MH00416P','3MH00417P','3MH00418P','3MW00419P','3MH00420P','3MH00421P','3MH00422P','3MH00423P','3MH00424P','3MH00425P','3MH00426P','3MH00427P','3MH00428P','3MH00429P',
'3MX00430P','3MX00431P','3MX00432P','3MX00433P','3MX00434P','3MX00435P','3MX00436P','3MX00437P','3MX00438P','3MX00439P','3MX00440P','3MX00441P','3MX00442P','3MX00443P','3MX00444P',
'3MH00445P','3MX00448P','3MH00449P','3MH00450P','3MW00451P','3MX00452P','3MW00453P','3MH00454P','3MH00455P','3MH00456P','3MH00457P','3MH00458P','3MH00459P','3MH00460P','3MH00461P',
'3MH00462P','3MH00463P','3MH00464P','3MH00465P','3MH00466P','3MH00467P','3MH00468P','3MH00469P','3MH00470P','3MH00471P','3MH00472P','3MH00473P','3MH00474P','3MH00475P','3MH00476P',
'3MH00477P','3MH00478P','3MH00479P','3MH00480P','3MH00481P','3MH00482P','3MX00483P','3MH00484P','3MH00485P','3MH00486P','3MX00487P','3MX00488P','3MW00489P','3MW00490P','3MH00491P',
'3MH00492P','3MH00493P','3MH00494P','3MH00495P','3MH00496P','3MH00497P','3MH00498P','3MH00499P','3MW00500P','3MX00501P','3MX00502P','3MH00503P','3MH00554P','3MH00540P','3MX00551P',
'3MX00552P','3MH00504P','3MW00505P','3MW00506P','3MH00507P','3MH00508P','3MW00509P','3MX00510P','3MH00511P','3MH00512P','3MH00513P','3MW00514P','3MW00515P','3MH00516P','3MH00517P',
'3MH00518P','3MH00519P','3MH00520P','3MH00521P','3MH00522P','3MH00523P','3MH00524P','3MH00525P','3MH00526P','3MH00527P','3MH00528P','3MH00529P','3MH00530P','3MH00531P','3MH00532P',
'3MX00533P','3MH00534P','3MH00535P','3MX00536P','3MX00537P','3MH00538P','3MH00539P','3MW00824P','3MH00541P','3MW00542P','3MX00543P','3MH00544P','3MH00545P','3MH00546P','3MH00547P',
'3MX00548P','3MX00559P','3MH00550P','3MH00555P','3MH00557P','3MH00556P','3MX00549P','3MW00558P','3MH00560P','3MH00561P','3MH00562P','3MH00563P','3MH00564P','3MH00565P','3MH00566P',
'3MH00567P','3MH00568P','3MH00569P','3MH00570P','3MH00571P','3MH00572P','3MH00573P','3MH00574P','3MH00575P','3MH00576P','3MH00577P','3MH00578P','3MW00579P','3MW00580P','3MH00581P',
'3MH00582P','3MH00583P','3MH00584P','3MH00585P','3MH00586P','3MH00587P','3MH00588P','3MH00589P','3MH00590P','3MH00591P','3MH00592P','3MH00593P','3MH00594P','3MX00595P','3MH00596P',
'3MX00597P','3MX00598P','3MX00599P','3MX00600P','3MX00601P','3MX00602P','3MX00604P','3MX00603P','3MX00605P','3MX00606P','3MX00607P','3MX00608P','3MH00609P','3MH00610P','3MH00611P',
'3MW00613P','3MW00612P','3MX00614P','3MX00615P','3MW00616P','3MH00617P','3MH00618P','3MX00619P','3MH00620P','3MH00621P','3MH00622P','3MH00623P','3MH00624P','3MH00625P','3MH00626P',
'3MH00627P','3MX00628P','3MX00629P','3MX00630P','3MX00631P','3MX00632P','3MX00633P','3MX00634P','3MX00635P','3MX00636P','3MX00637P','3MX00638P','3MH00639P','3MH00640P','3MH00641P',
'3MH00642P','3MH00643P','3MH00644P','3MH00645P','3MH00646P','3MH00647P','3MH00648P','3MH00649P','3MH00650P','3MH00651P','3MH00652P','3MH00653P','3MH00654P','3MH00655P','3MH00656P',
'3MH00657P','3MH00658P','3MH00659P','3MH00660P','3MW00695P','3MH00661P','3MW00662P','3MX00663P','3MX00664P','3MX00665P','3MX00666P','3MX00667P','3MX00668P','3MX00669P','3MX00670P',
'3MX00671P','3MX00672P','3MX00673P','3MX00674P','3MX00675P','3MX00676P','3MX00677P','3MX00678P','3MX00679P','3MX00680P','3MH00681P','3MH00682P','3MH00683P','3MH00684P','3MH00685P',
'3MH00686P','3MH00687P','3MH00688P','3MH00689P','3MH00690P','3MW00691P','3MW00692P','3MH00693P','3MW00694P','3MW00697P','3MW00698P','3MW00699P','3MW00696P','3MW00702P','3MW00703P',
'3MH00704P','3MH00705P','3MH00706P','3MH00707P','3MH00708P','3MH00709P','3MH00710P','3MH00711P','3MH00712P','3MH00713P','3MH00714P','3MH00715P','3MH00716P','3MH00717P','3MH00718P',
'3MH00719P','3MH00720P','3MH00721P','3MH00722P','3MH00723P','3MH00724P','3MH00725P','3MH00726P','3MH00727P','3MH00728P','3MX00729P','3MX00730P','3MX00731P','3MX00732P','3MH00733P',
'3MH00734P','3MH00735P','3MH00736P','3MH00737P','3MW00739P','3MX00770P','3MX00771P','3MX00446P','3MX00447P','3MH00772P','3MX00740P','3MX00741P','3MX00742P','3MX00743P','3MX00744P',
'3MX00745P','3MX00746P','3MX00747P','3MX00748P','3MX00749P','3MH00738P','3MH00768P','3MX00775P','3MH00774P','3MP00773P','3MH00779P','3MH00777P','3MH00778P','3MH00793P','3MH00794P',
'3MH00795P','3MH00796P','3MH00790P','3MH00791P','3MH00789P','3MX00776P','3MH00797P','3MH00787P','3MH00792P','3MW00805P','3MW00806P','3MH00807P','3MH00808P','3MX00809P','3MX00810P',
'3MX00811P','3MX00812P','3MH00813P','3MH00864P','3MW00863P','3MH00813P','3MH00814P','3MX00815P','3MW00818P','3MW00819P','3MW00821P','3MW00822P','3MW00823P','3MW00825P','3MW00826P',
'3MW00827P','3MW00828P','3MW00829P','3MW00830P','3MW00820P','3MW00831P','3MH00817P','3MH00816P','3MX00758P','3MX00760P','3MX00759P','3MX00761P','3MH00832P','3MW00841P','3MW00842P',
'3MW00843P','3MW00844P','3MH00833P','3MH00834P','3MH00835P','3MH00836P','3MH00837P','3MH00838P','3MH00839P','3MH00840P','3MW00845P','3MW00846P','3MW00847P','3MH00848P','3MH00849P',
'3MH00850P','3MH00851P','3MH00852P','3MH00853P','3MH00854P','3MW00855P','3MW00856P','3MW00857P','3MW00858P','3MX00859P','3MX00860P','3MX00750P','3MX00752P','3MX00754P','3MX00757P',
'3MX00751P','3MX00753P','3MX00755P','3MX00756P','3MX00766P','3MX00767P','3MW00788P','3MP00865P','3MH00866P','3MH00867P','3MH00868P','3MH00869P','3MH00870P','3MH00871P','3MH00872P',
'3MH00873P','3MX00874P','3MX00875P','3MX00876P','3MX00877P','3MX00762P','3MX00765P','3MX00763P','3MX00764P','3MX00861P','3MX00862P','3MX00878P','3MH00879P','3MH00880P','3MH00881P',
'3MH00882P','3MH00926P','3MH00874P','3MH00875P','3MH00876P','3MH00877P','3MH00878P','3MH00883P','3MH00884P','3MW00886P','3MX00919P','3MX00920P','3MX00921P','3MX00922P','3MX00915P',
'3MX00916P','3MX00917P','3MX00918P','3MX00911P','3MX00912P','3MX00913P','3MX00914P','3MX00905P','3MX00906P','3MX00907P','3MX00908P','3MX00909P','3MX00910P','3MX00903P','3MX00904P',
'3MX00897P','3MX00900P','3MX00901P','3MX00898P','3MX00899P','3MX00902P','3MX00893P','3MX00894P','3MX00895P','3MX00896P','3MX00887P','3MX00888P','3MX00889P','3MX00890P','3MX00891P',
'3MX00892P','3MH00885P','3MH00923P','3MW00925P','3MW00927P','3MH00928P','3MH00929P','3MH00930P','3MH00931P','3MH00932P','3MH00933P','3MX00934P','3MX00935P','3MP00936P','3MP00937P',
'3MH00938P','3MW00939P','3MW00940P','3MH00941P','3MH00942P','3MH00943P','3MH00944P','3MH00945P','3MH00946P','3MH00947P','3MH00948P','3MH00949P','3MH00950P','3MH00951P','3MH00952P',
'3MH00953P','3MH00954P','3MH00955P','3MH00956P','3MH00957P','3MW00958P','3MW00959P','3MW00960P','3MQ00961P','3MH00962P','3MW00963P','3MH00964P','3MW00965P','3MP00966P','3MH00967P',
'3MX00968P','3MX00969P','3MH00970P','3MH00970P','3MH00971P','3MH00972P','3MH00973P','3MH00974P','3MH00975P','3MH00976P','3MH00977P','3MH00978P','3MX00979P','3MX00980P','3MX00983P',
'3MX00984P','3MX00981P','3MX00982P','3MX00985P','3MX00986P','3MX00987P','3MX00988P','3MX00989P','3MX00990P','3MX00991P','3MX00992P','3MX00993P','3MX00994P','3MX00995P','3MX00996P',
'3MX00999P','3MX01000P','3MX01003P','3MX01005P','3MX01006P','3MX00997P','3MX00998P','3MX01001P','3MX01002P','3MX01004P','3MX01007P','3MX01008P','3MX01011P','3MX01012P','3MX01015P',
'3MX01016P','3MX01009P','3MX01010P','3MX01013P','3MX01014P','3MX01017P','3MH01018P','3MH01019P','3MH01020P','3MQ01021P','3MP01022P','3MH01023P','3MX01024P','3MX01025P','3MX01026P',
'3MX01027P','3MW01028P','3MH01029P','3MH01030P','3MH01031P','3MP01032P','3MH01033P','3MH01034P','3MW01035P','3MP01036P','3MX01037P','3MX01038P','3MX01039P','3MX01040P','3MX01041P',
'3MX01042P','3MH01043P','3MH01044P','3MH01045P','3MH01046P','3MH01047P','3MH01048P','3MX00775P','3MX00776P')
";
//已發貨
// $sql_out_warehouse = "SELECT B.MaterialId FROM stkWareHouseIn AS A
// LEFT JOIN stkWareHouseInDetail AS B ON A.BillNo=B.BillNo
// WHERE A.IOProperty = 0
// AND B.MaterialId IN $all
// AND B.ItemType =0";
// $query_out_warehouse = $conn->query($sql_out_warehouse);
// foreach ($query_out_warehouse as $row) {
// echo $row['MaterialId'] . "<br>";
// }
//有庫存與多少
// $sql_in_warehouse = "SELECT MaterialId, Quantity FROM stkWareHouseAccountDetail WHERE MaterialId IN $all AND Quantity >0";
// $query_in_warehouse = $conn->query($sql_in_warehouse);
// foreach ($query_in_warehouse as $row) {
// echo $row['MaterialId'] . ", " . $row['Quantity'] . "<br>";
// }
//有無組裝申請單
// $sql_assemble = "SELECT * FROM stkAssyMast WHERE MaterialId IN $all";
// $query_assemble = $conn->query($sql_assemble);
// foreach ($query_assemble as $row) {
// echo $row['MaterialId'].";" .$row['BillNo']. "<br>";
// }
//p 有庫存
// $sql_p_in_warehouse = "SELECT MaterialId, Quantity FROM stkWareHouseAccountDetail WHERE MaterialId IN $P_all AND Quantity >0";
// $query_p_in_warehouse = $conn->query($sql_p_in_warehouse);
// foreach ($query_p_in_warehouse as $row) {
// echo substr($row['MaterialId'],0,-1).";".$row['Quantity']."<br>";
// }
//P 收貨單號
// $sql_reveive = "SELECT BillNo, MaterialId, ReceivingSQty FROM purReceivingOrderDetail WHERE MaterialId IN $P_all";
// $query_reveive = $conn->query($sql_reveive);
// foreach ($query_reveive as $row) {
// echo substr($row['MaterialId'],0,-1) . ";".$row['BillNo'] .";". $row['ReceivingSQty'] . "<br>";
// }
// P 採購單號
// $sql_purBill = "SELECT * FROM purBillOrderDetail WHERE MaterialId IN $P_all";
// $query_purBill = $conn->query($sql_purBill);
// foreach ($query_purBill as $row) {
// echo substr($row['MaterialId'],0,-1) . ";" . $row['BillNo'] . "<br>";
// }
//貨抵工地的作番
// $sql_arrive = "SELECT `contractno`,`facilityno`,`real_arrival_date` FROM `wipwholestatus`
// WHERE (real_arrival_date IS NOT NULL) AND (real_arrival_date !='')
// AND facilityno IN $all
// AND contract_type='A'";
// $query_arrive = mysqli_query($link, $sql_arrive);
// foreach ($query_arrive as $key => $value) {
// echo $value['facilityno']. ";" . $value['real_arrival_date'] . "<br>";
// }
//實際到貨日期
// $sql_arrive = "SELECT `contractno`,`facilityno`,`actual_tofactory_date` FROM `wipwholestatus`
// WHERE (actual_tofactory_date IS NOT NULL) AND (actual_tofactory_date !='')
// AND facilityno IN $all
// AND contract_type='A'";
// $query_arrive = mysqli_query($link, $sql_arrive);
// foreach ($query_arrive as $key => $value) {
// echo $value['facilityno']. ";" . $value['actual_tofactory_date'] . "<br>";
// }
// $sql_paystage = "SELECT A.PayStage, A.BillNo FROM salOrderStagePay AS A
// LEFT JOIN salSalesOrder AS s on a.BillNo = s.BillNo WHERE s.ModeId = 'T' AND (s.CurrentState=2 OR s.CurrentState=4)";
// $query_paystage = $conn->query($sql_paystage);
// foreach($query_paystage as $key => $value) {
// echo $value['PayStage'] .";".$value['BillNo']. "<br>";
// }
// $sql = "SELECT A.BillNo,B.CU_MaterialId, B.ProjectId FROM salSalesOrder AS A
// LEFT JOIN salSalesOrderDetail AS B ON A.BillNo=B.BillNo
// WHERE A.ModeId='T' AND B.ItemType=0 AND A.BillNo != B.ProjectId AND A.CurrentState=4";
// $query = $conn->query($sql);
// foreach($query as $key => $value) {
// echo $value['BillNo'] .";".$value['CU_MaterialId'].";".$value['ProjectId']. "<br>";
// }
// 發貨單 沒有ProjectId的資料
// $sql = "SELECT DISTINCT salDispatchListMaster.BillNo, salDispatchListMaster.ModeId,salDispatchListMaster.BillDate FROM salDispatchListDetail
// LEFT JOIN salDispatchListMaster ON salDispatchListMaster.BillNo=salDispatchListDetail.BillNo
// WHERE salDispatchListDetail.ItemType=0 AND LEN(salDispatchListDetail.ProjectId)=0";
// $query = $conn->query($sql);
// foreach($query as $key => $value) {
// switch($value['ModeId']) {
// case 'B':
// $mode = '保養';
// break;
// case 'T':
// $mode = '汰改';
// break;
// case 'M':
// $mode = '新梯';
// break;
// case 'Z':
// $mode = '維修';
// break;
// }
// echo $value['BillNo'] .";".$mode.";".$value['BillDate']. "<br>";
// }
// 銷售訂單 沒有ProjectId的資料
// $sql = "SELECT Main.*, comBusinessPartner.BizPartnerName, salDispatchListMaster.BillNo AS DispBillNo , salDispatchListMaster.BillDate AS DispBillDate FROM
// (SELECT DISTINCT salSalesOrder.BillNo,salSalesOrder.BizPartnerId, salSalesOrder.TypeId, salSalesOrder.ModeId, salSalesOrderDetail.ProjectId, salSalesOrderDetail.CU_MaterialId FROM salSalesOrderDetail
// LEFT JOIN salSalesOrder ON salSalesOrder.BillNo= salSalesOrderDetail.BillNo
// WHERE (LEN(salSalesOrderDetail.ProjectId)=0 AND salSalesOrderDetail.ItemType=0) OR LEN(salSalesOrderDetail.CU_MaterialId)=0 ) AS Main
// LEFT JOIN comBusinessPartner ON comBusinessPartner.BizPartnerId = Main.BizPartnerId
// LEFT JOIN salDispatchListMaster ON salDispatchListMaster.FromBillNo= Main.BillNo
// WHERE salDispatchListMaster.BillDate >20231031 OR salDispatchListMaster.BillDate IS NULL";
// $query = $conn->query($sql);
// foreach ($query as $key => $value) {
// $mode = '';
// switch ($value['ModeId']) {
// case 'B':
// $mode = '保養';
// break;
// case 'T':
// $mode = '汰改';
// break;
// case 'M':
// $mode = '新梯';
// break;
// case 'Z':
// $mode = '維修';
// break;
// }
// echo $value['BillNo'] . ";" . $mode . ";" . $value['BizPartnerId'] .";".$value['BizPartnerName'].";".$value['ProjectId']. ";".$value['CU_MaterialId']. ";".$value['DispBillNo'].";" . $value['DispBillDate'] ."<br>";
// }
$sql = "SELECT salOrderStagePay.BillNo, salOrderStagePay.PayStage FROM salOrderStagePay LEFT JOIN salSalesOrder ON salSalesOrder.BillNo = salOrderStagePay.BillNo WHERE salSalesOrder.ModeId = 'M'
ORDER BY salOrderStagePay.BillNo, salOrderStagePay.PayStage";
$query = mysqli_query($link, $sql);
<script defer src="./contract/js/alpinejs/cdn.min.js"></script>
<style>
.opacity-0 { opacity: 0; }
.opacity-100 { opacity: 1; }
.transition-slow { transition-duration: 300ms; }
.transition-medium { transition-duration: 200ms; }
.transition-faster { transition-duration: 100ms; }
.scale-90 { transform: scale(0.9); }
.scale-100 { transform: scale(1); }
.ease-in { transition-timing-function: cubic-bezier(0.4, 0, 1, 1); }
.ease-out { transition-timing-function: cubic-bezier(0, 0, 0.2, 1); }
</style>
<div x-data="{ items: ['foo', 'bar'] }">
<input type="checkbox" x-model="items" value="foo">
<input type="checkbox" x-model="items" value="bar">
<input type="checkbox" x-model="items" value="baz">
<button @click="items = ['bar', 'bob']">hey</button>
<template x-for="item in items" :key="item">
<div x-text="item"
x-transition:enter-start="opacity-0 scale-90"
x-transition:enter="ease-out transition-medium"
x-transition:enter-end="opacity-100 scale-100"
x-transition:leave-start="opacity-100 scale-100"
x-transition:leave="ease-in transition-faster"
x-transition:leave-end="opacity-0 scale-90"></div>
</template>
</div>

422
wms/bonus/elevator_new/elevator_new_deal_bonus.php

@ -1,112 +1,165 @@
<?php
function elevator_new_deal_bonus_v2_0($ver, $contract_type, $elevator_type, $elevator_list_price, $elevator_knockdown_price, $sales_id, $region_manger_id)
function elevator_new_deal_bonus_v2_0($ver, $contract_type, $elevator_type, $elevator_list_price, $elevator_knockdown_price, $elevator_pay_kind, $sales_id, $region_manger_id)
{
$bonus_array = [];
if ($ver == "2.0") {
$discount = round($elevator_knockdown_price / $elevator_list_price, 3); #銷售點數,取到小數點第三位。
foreach ($elevator_pay_kind as $elevator_pay_kind) {
// 單次款項的種類
// $pay_amount = round($elevator_pay_kind['pay_amount'] / 1.05); //不含稅
$pay_amount = $elevator_pay_kind['pay_amount']; //不含稅
#合約總類($contract_type):戰略客戶(strategy_customer)、一般客戶(general_customer)
switch ($contract_type) {
case "strategy_customer":
#契約員獎金($sales_bonus)
$sales_bonus = $elevator_knockdown_price * 0.007;
#地區經理提成獎金($region_manager_bonus)
$region_manager_bonus = 400;
break;
case "general_customer":
switch ($elevator_type) {
#客梯(passenger)、貨梯(cargo)
case ($elevator_type == "passenger" or $elevator_type == "cargo"):
switch ($discount) {
case ($discount >= 1.0):
$sales_bonus = $elevator_knockdown_price * 0.02;
break;
case ($discount >= 0.9 and $discount < 1.0):
$sales_bonus = $elevator_knockdown_price * 0.018;
break;
case ($discount >= 0.75 and $discount < 0.9):
$sales_bonus = $elevator_knockdown_price * 0.015;
break;
case ($discount < 0.75):
$sales_bonus = $elevator_knockdown_price * 0.008;
break;
};
break;
#小電梯(dumbwaiter)、平台梯(flatbase)、強驅(positive_drive)
case ($elevator_type == "dumbwaiter" or $elevator_type == "flatbase" or $elevator_type == "positive_drive"):
switch ($discount) {
case ($discount >= 1.0):
$sales_bonus = $elevator_knockdown_price * 0.02;
break;
case ($discount >= 0.9 and $discount < 1.0):
$sales_bonus = $elevator_knockdown_price * 0.018;
break;
case ($discount >= 0.72 and $discount < 0.9):
$sales_bonus = $elevator_knockdown_price * 0.015;
break;
case ($discount < 0.72):
$sales_bonus = $elevator_knockdown_price * 0.008;
break;
};
break;
};
#區域經理提成獎金($region_manager_bonus)
$region_manager_bonus = 600;
break;
};
#營銷人員銷售獎金水庫-----訂金已收款20%,發放總獎金20%
array_push($bonus_array, [
"bonus_type" => "1-訂金段", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => round($sales_bonus * 0.2), #金額
"payment_schedul_due" => "deposit", #訂金已收款20%
"payment_schedul_regulation" => "訂金已收款20%,發放總獎金20%" #發放規定
]);
#營銷人員銷售獎金水庫-----出貨前期所有款項已收齊,且出貨款已收款50%,發放總獎金50%
array_push($bonus_array, [
"bonus_type" => "1-出貨款段", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => round($sales_bonus * 0.5), #金額
"payment_schedul_due" => "shipping", #訂金已收款20%
"payment_schedul_regulation" => "出貨前期所有款項已收齊,且出貨款已收款50%,發放總獎金50%" #發放規定
]);
#合約總類($contract_type):戰略客戶(strategy_customer)、一般客戶(general_customer)
switch ($contract_type) {
case "strategy_customer":
#契約員獎金($sales_bonus)
$sales_bonus = $pay_amount * 0.007;
#地區經理提成獎金($region_manager_bonus)
$region_manager_bonus = 400;
break;
#營銷人員銷售獎金水庫-----驗收前期所有款項已收齊,且驗收款已收款30%,發放總獎金30%
array_push($bonus_array, [
"bonus_type" => "1-驗收款段", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => round($sales_bonus * 0.3), #金額
"payment_schedul_due" => "acceptance", #訂金已收款20%
"payment_schedul_regulation" => "驗收前期所有款項已收齊,且驗收款已收款30%,發放總獎金30%" #發放規定
]);
case "general_customer":
switch ($elevator_type) {
#客梯(passenger)、貨梯(cargo)
case ($elevator_type == "passenger" or $elevator_type == "cargo"):
switch ($discount) {
case ($discount >= 1.0):
$sales_bonus = $pay_amount * 0.02;
break;
case ($discount >= 0.9 and $discount < 1.0):
$sales_bonus = $pay_amount * 0.018;
break;
case ($discount >= 0.75 and $discount < 0.9):
$sales_bonus = $pay_amount * 0.015;
break;
case ($discount < 0.75):
$sales_bonus = $pay_amount * 0.008;
break;
};
break;
#區域經理提成獎金水庫-----訂金已收款100%,發放總獎金50%
array_push($bonus_array, [
"bonus_type" => "2-訂金段", #獎金名稱
"bonus_receiver" => $region_manger_id, #發放人員
"bonus_amount" => round($region_manager_bonus * 0.5), #金額
"payment_schedul_due" => "deposit", #訂金已收款100%
"payment_schedul_regulation" => "訂金已收款100%,發放總獎金50%" #發放規定
]);
#小電梯(dumbwaiter)、平台梯(flatbase)、強驅(positive_drive)
case ($elevator_type == "dumbwaiter" or $elevator_type == "flatbase" or $elevator_type == "positive_drive"):
switch ($discount) {
case ($discount >= 1.0):
$sales_bonus = $pay_amount * 0.02;
break;
case ($discount >= 0.9 and $discount < 1.0):
$sales_bonus = $pay_amount * 0.018;
break;
case ($discount >= 0.72 and $discount < 0.9):
$sales_bonus = $pay_amount * 0.015;
break;
case ($discount < 0.72):
$sales_bonus = $pay_amount * 0.008;
break;
};
break;
};
#區域經理提成獎金($region_manager_bonus)
$region_manager_bonus = 600;
break;
};
$sales_bonus = round($sales_bonus);
$pay_scale = $elevator_pay_kind['pay_scale'];
switch ($elevator_pay_kind['pay_kind']) {
//訂金
case '1':
#營銷人員銷售獎金水庫-----訂金已收款20%,發放總獎金20%
array_push($bonus_array, [
"bonus_type" => "4", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => $sales_bonus, #金額
"payment_schedul_due" => "deposit", #訂金已收款20%
"payment_schedul_regulation" => "訂金已收款$pay_scale%,發放總獎金$pay_scale%" #發放規定
]);
#區域經理獎金水庫-----貨到工地款(含)之前所有款項已收款100%,發放總獎金50%
array_push($bonus_array, [
"bonus_type" => "2-貨到工地款段", #獎金名稱
"bonus_receiver" => $region_manger_id, #發放人員
"bonus_amount" => round($region_manager_bonus * 0.5), #金額
"payment_schedul_due" => "deliveried", #貨到工地款(含)之前所有款項已收款100%
"payment_schedul_regulation" => "貨到工地款(含)之前所有款項已收款100%,發放總獎金50%" #發放規定
]);
#區域經理提成獎金水庫-----訂金已收款100%,發放總獎金50%
array_push($bonus_array, [
"bonus_type" => "11", #獎金名稱
"bonus_receiver" => $region_manger_id, #發放人員
"bonus_amount" => round($region_manager_bonus * 0.5), #金額
"payment_schedul_due" => "deposit", #訂金已收款100%
"payment_schedul_regulation" => "訂金已收款100%,發放總獎金50%" #發放規定
]);
break;
//二次
case '2':
#營銷人員銷售獎金水庫-----訂金已收款20%,發放總獎金20%
array_push($bonus_array, [
"bonus_type" => "5", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => round($sales_bonus), #金額
"payment_schedul_due" => "twice", #訂金已收款20%
"payment_schedul_regulation" => "訂金已收款$pay_scale%,發放總獎金$pay_scale%" #發放規定
]);
break;
//貨抵工地
case '3':
array_push($bonus_array, [
"bonus_type" => "6", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => $sales_bonus, #金額
"payment_schedul_due" => "shipping", #訂金已收款20%
"payment_schedul_regulation" => "出貨前期所有款項已收齊,且出貨款已收款$pay_scale%,發放總獎金$pay_scale%" #發放規定
]);
#區域經理獎金水庫-----貨到工地款(含)之前所有款項已收款100%,發放總獎金50%
array_push($bonus_array, [
"bonus_type" => "12", #獎金名稱
"bonus_receiver" => $region_manger_id, #發放人員
"bonus_amount" => round($region_manager_bonus * 0.5), #金額
"payment_schedul_due" => "shipping", #貨到工地款(含)之前所有款項已收款100%
"payment_schedul_regulation" => "貨到工地款(含)之前所有款項已收款100%,發放總獎金50%" #發放規定
]);
// 材料其他
case '4':
array_push($bonus_array, [
"bonus_type" => "7", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => $sales_bonus, #金額
"payment_schedul_due" => "other", #訂金已收款20%
"payment_schedul_regulation" => "訂金已收款$pay_scale%,發放總獎金$pay_scale%" #發放規定
]);
break;
//安裝完畢
case '5':
array_push($bonus_array, [
"bonus_type" => "8", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => $sales_bonus, #金額
"payment_schedul_due" => "installed", #訂金已收款20%
"payment_schedul_regulation" => "訂金已收款$pay_scale%,發放總獎金$pay_scale%" #發放規定
]);
break;
//驗收
case '6':
array_push($bonus_array, [
"bonus_type" => "9", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => $sales_bonus, #金額
"payment_schedul_due" => "acceptance", #訂金已收款20%
"payment_schedul_regulation" => "訂金已收款$pay_scale%,發放總獎金$pay_scale%" #發放規定
]);
break;
//安裝其他
case '7':
array_push($bonus_array, [
"bonus_type" => "10", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => $sales_bonus, #金額
"payment_schedul_due" => "installOther", #訂金已收款20%
"payment_schedul_regulation" => "訂金已收款$pay_scale%,發放總獎金$pay_scale%" #發放規定
]);
break;
}
$result_array = [
"ver" => $ver, #獎金版本
"result_status" => "success", #計算結果
"bonus_array" => $bonus_array #獎金水庫
];
$result_array = [
"ver" => $ver, #獎金版本
"result_status" => "success", #計算結果
"bonus_array" => $bonus_array #獎金水庫
];
}
} else {
array_push($bonus_array, [
"bonus_type" => "error", #獎金名稱
@ -125,79 +178,126 @@ function elevator_new_deal_bonus_v2_0($ver, $contract_type, $elevator_type, $ele
return $result_array;
};
function elevator_new_deal_bonus_v1_0($ver, $contract_type, $elevator_knockdown_price, $sales_id, $region_manger_id)
function elevator_new_deal_bonus_v1_0($ver, $contract_type, $elevator_pay_kind, $sales_id, $region_manger_id)
{
$bonus_array = [];
if ($ver == "1.0") {
#合約總類($contract_type):戰略客戶(strategy_customer)、一般客戶(general_customer)
switch ($contract_type) {
case "strategy_customer":
#契約員獎金($sales_bonus)
$sales_bonus = $elevator_knockdown_price * 0.007;
#地區經理經理獎金($region_manager_bonus)
$region_manager_bonus = 400;
break;
case "general_customer":
#契約員獎金($sales_bonus)
$sales_bonus = $elevator_knockdown_price * 0.015;
#區域經理獎金($region_manager_bonus)
$region_manager_bonus = 600;
break;
};
#營銷人員銷售獎金水庫-----訂金已收款20%,發放總獎金20%
array_push($bonus_array, [
"bonus_type" => "1-訂金段", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => round($sales_bonus * 0.2), #金額
"payment_schedul_due" => "deposit", #訂金已收款20%
"payment_schedul_regulation" => "訂金已收款20%,發放總獎金20%" #發放規定
]);
foreach ($elevator_pay_kind as $elevator_pay_kind) {
$elevator_pay_kind['pay_amount'] = round($elevator_pay_kind['pay_amount'] / 1.05);
switch ($contract_type) {
case "strategy_customer":
#契約員獎金($sales_bonus)
$sales_bonus = $elevator_pay_kind['pay_amount'] * 0.007;
#地區經理經理獎金($region_manager_bonus)
$region_manager_bonus = 400;
break;
#營銷人員銷售獎金水庫-----出貨前期所有款項已收齊,且出貨款已收款50%,發放總獎金50%
array_push($bonus_array, [
"bonus_type" => "1-出貨款段", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => round($sales_bonus * 0.5), #金額
"payment_schedul_due" => "shipping", #訂金已收款20%
"payment_schedul_regulation" => "出貨前期所有款項已收齊,且出貨款已收款50%,發放總獎金50%" #發放規定
]);
case "general_customer":
#契約員獎金($sales_bonus)
$sales_bonus = $elevator_pay_kind['pay_amount'] * 0.015;
#區域經理獎金($region_manager_bonus)
$region_manager_bonus = 600;
break;
};
$pay_scale = $elevator_pay_kind['pay_scale'];
#營銷人員銷售獎金水庫-----驗收前期所有款項已收齊,且驗收款已收款30%,發放總獎金30%
array_push($bonus_array, [
"bonus_type" => "1-驗收款段", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => round($sales_bonus * 0.3), #金額
"payment_schedul_due" => "acceptance", #訂金已收款20%
"payment_schedul_regulation" => "驗收前期所有款項已收齊,且驗收款已收款30%,發放總獎金30%" #發放規定
]);
switch ($elevator_pay_kind['pay_kind']) {
// 訂金
case '1':
array_push($bonus_array, [
"bonus_type" => "4", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => $sales_bonus, #金額
"payment_schedul_due" => "deposit", #訂金已收款20%
"payment_schedul_regulation" => "訂金已收款$pay_scale%,發放總獎金$pay_scale%" #發放規定
]);
#區域經理獎金水庫-----訂金已收款100%,發放總獎金50%
array_push($bonus_array, [
"bonus_type" => "2-訂金段", #獎金名稱
"bonus_receiver" => $region_manger_id, #發放人員
"bonus_amount" => round($region_manager_bonus * 0.5), #金額
"payment_schedul_due" => "deposit", #訂金已收款100%
"payment_schedul_regulation" => "訂金已收款100%,發放總獎金50%" #發放規定
]);
array_push($bonus_array, [
"bonus_type" => "11", #獎金名稱
"bonus_receiver" => $region_manger_id, #發放人員
"bonus_amount" => round($region_manager_bonus * 0.5), #金額
"payment_schedul_due" => "deposit", #訂金已收款100%
"payment_schedul_regulation" => "訂金已收款100%,發放總獎金50%" #發放規定
]);
break;
// 二次款
case '2':
array_push($bonus_array, [
"bonus_type" => "5", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => $sales_bonus, #金額
"payment_schedul_due" => "twice", #訂金已收款20%
"payment_schedul_regulation" => "訂金已收款$pay_scale%,發放總獎金$pay_scale%" #發放規定
]);
break;
// 貨抵工地
case '3':
array_push($bonus_array, [
"bonus_type" => "6", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => $sales_bonus, #金額
"payment_schedul_due" => "shipping", #訂金已收款20%
"payment_schedul_regulation" => "出貨前期所有款項已收齊,且出貨款已收款$pay_scale%,發放總獎金$pay_scale%" #發放規定
]);
#區域經理獎金水庫-----貨到工地款(含)之前所有款項已收款100%,發放總獎金50%
array_push($bonus_array, [
"bonus_type" => "2-貨到工地款段", #獎金名稱
"bonus_receiver" => $region_manger_id, #發放人員
"bonus_amount" => round($region_manager_bonus * 0.5), #金額
"payment_schedul_due" => "deliveried", #貨到工地款(含)之前所有款項已收款100%
"payment_schedul_regulation" => "貨到工地款(含)之前所有款項已收款100%,發放總獎金50%" #發放規定
]);
array_push($bonus_array, [
"bonus_type" => "12", #獎金名稱
"bonus_receiver" => $region_manger_id, #發放人員
"bonus_amount" => round($region_manager_bonus * 0.5), #金額
"payment_schedul_due" => "deliveried", #貨到工地款(含)之前所有款項已收款100%
"payment_schedul_regulation" => "貨到工地款(含)之前所有款項已收款100%,發放總獎金50%" #發放規定
]);
break;
// 材料其他
case '4':
array_push($bonus_array, [
"bonus_type" => "7", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => $sales_bonus, #金額
"payment_schedul_due" => "other", #訂金已收款20%
"payment_schedul_regulation" => "訂金已收款$pay_scale%,發放總獎金$pay_scale%" #發放規定
]);
break;
//安裝完畢
case '5':
array_push($bonus_array, [
"bonus_type" => "8", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => $sales_bonus, #金額
"payment_schedul_due" => "installed", #訂金已收款20%
"payment_schedul_regulation" => "訂金已收款$pay_scale%,發放總獎金$pay_scale%" #發放規定
]);
break;
//驗收
case '6':
array_push($bonus_array, [
"bonus_type" => "9", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => $sales_bonus, #金額
"payment_schedul_due" => "acceptance", #訂金已收款20%
"payment_schedul_regulation" => "驗收前期所有款項已收齊,且驗收款已收款$pay_scale%,發放總獎金$pay_scale%" #發放規定
]);
break;
//安裝其他
case '7':
array_push($bonus_array, [
"bonus_type" => "10", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => $sales_bonus, #金額
"payment_schedul_due" => "installOther", #訂金已收款20%
"payment_schedul_regulation" => "訂金已收款$pay_scale%,發放總獎金$pay_scale%" #發放規定
]);
break;
}
$result_array = [
"ver" => $ver, #獎金版本
"result_status" => "success", #計算結果
"bonus_array" => $bonus_array #獎金水庫
];
$result_array = [
"ver" => $ver, #獎金版本
"result_status" => "success", #計算結果
"bonus_array" => $bonus_array #獎金水庫
];
}
} else {
array_push($bonus_array, [
"bonus_type" => "error", #獎金名稱

30
wms/bonus/elevator_new/elevator_new_deal_bonus_v1_0_1.php

@ -59,6 +59,7 @@ function elevator_new_deal_bonus_v1_0($ver, $contract_type, $elevator_pay_kind,
#合約總類($contract_type):戰略客戶(strategy_customer)、一般客戶(general_customer)
foreach ($elevator_pay_kind as $elevator_pay_kind) {
$elevator_pay_kind['pay_amount'] = round($elevator_pay_kind['pay_amount'] / 1.05);
switch ($contract_type) {
case "strategy_customer":
#契約員獎金($sales_bonus)
@ -79,10 +80,10 @@ function elevator_new_deal_bonus_v1_0($ver, $contract_type, $elevator_pay_kind,
// print_r($pay_scale);
// echo "</pre>";
switch ($elevator_pay_kind['pay_kind']) {
// 訂金
case '1':
array_push($bonus_array, [
"bonus_type" => "營銷人員銷售獎金-訂金段", #獎金名稱
"bonus_type" => "4", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => $sales_bonus, #金額
"payment_schedul_due" => "deposit", #訂金已收款20%
@ -90,25 +91,27 @@ function elevator_new_deal_bonus_v1_0($ver, $contract_type, $elevator_pay_kind,
]);
array_push($bonus_array, [
"bonus_type" => "區域經理提成獎金-訂金段", #獎金名稱
"bonus_type" => "11", #獎金名稱
"bonus_receiver" => $region_manger_id, #發放人員
"bonus_amount" => round($region_manager_bonus * 0.5), #金額
"payment_schedul_due" => "deposit", #訂金已收款100%
"payment_schedul_regulation" => "訂金已收款100%,發放總獎金50%" #發放規定
]);
break;
// 二次款
case '2':
array_push($bonus_array, [
"bonus_type" => "營銷人員銷售獎金-二次段", #獎金名稱
"bonus_type" => "5", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => $sales_bonus, #金額
"payment_schedul_due" => "twice", #訂金已收款20%
"payment_schedul_regulation" => "訂金已收款$pay_scale%,發放總獎金$pay_scale%" #發放規定
]);
break;
// 貨抵工地
case '3':
array_push($bonus_array, [
"bonus_type" => "營銷人員銷售獎金-貨到工地款段", #獎金名稱
"bonus_type" => "6", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => $sales_bonus, #金額
"payment_schedul_due" => "shipping", #訂金已收款20%
@ -116,46 +119,47 @@ function elevator_new_deal_bonus_v1_0($ver, $contract_type, $elevator_pay_kind,
]);
array_push($bonus_array, [
"bonus_type" => "區域經理提成獎金-貨到工地款段", #獎金名稱
"bonus_type" => "12", #獎金名稱
"bonus_receiver" => $region_manger_id, #發放人員
"bonus_amount" => round($region_manager_bonus * 0.5), #金額
"payment_schedul_due" => "deliveried", #貨到工地款(含)之前所有款項已收款100%
"payment_schedul_regulation" => "貨到工地款(含)之前所有款項已收款100%,發放總獎金50%" #發放規定
]);
break;
// 材料其他
case '4':
array_push($bonus_array, [
"bonus_type" => "營銷人員銷售獎金-材料其他段", #獎金名稱
"bonus_type" => "7", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => $sales_bonus, #金額
"payment_schedul_due" => "other", #訂金已收款20%
"payment_schedul_regulation" => "訂金已收款$pay_scale%,發放總獎金$pay_scale%" #發放規定
]);
break;
//安裝完畢
case '5':
array_push($bonus_array, [
"bonus_type" => "營銷人員銷售獎金-安裝完畢段", #獎金名稱
"bonus_type" => "8", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => $sales_bonus, #金額
"payment_schedul_due" => "installed", #訂金已收款20%
"payment_schedul_regulation" => "訂金已收款$pay_scale%,發放總獎金$pay_scale%" #發放規定
]);
break;
//驗收
case '6':
array_push($bonus_array, [
"bonus_type" => "營銷人員銷售獎金-驗收款段", #獎金名稱
"bonus_type" => "9", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => $sales_bonus, #金額
"payment_schedul_due" => "acceptance", #訂金已收款20%
"payment_schedul_regulation" => "驗收前期所有款項已收齊,且驗收款已收款$pay_scale%,發放總獎金$pay_scale%" #發放規定
]);
break;
//安裝其他
case '7':
array_push($bonus_array, [
"bonus_type" => "營銷人員銷售獎金-安裝其他段", #獎金名稱
"bonus_type" => "10", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => $sales_bonus, #金額
"payment_schedul_due" => "installOther", #訂金已收款20%

304
wms/bonus/elevator_new/elevator_new_deal_bonus_v2_0_1.php

@ -33,119 +33,225 @@ result_array[
"$bonus_array"=>$bonus_array #所有獎金水庫
];
$elevator_pay_kind[]
ex :
[
]
*/
function elevator_new_deal_bonus_v2_0($ver, $contract_type, $elevator_type, $elevator_list_price, $elevator_knockdown_price, $sales_id, $region_manger_id)
function elevator_new_deal_bonus_v2_0($ver, $contract_type, $elevator_type, $elevator_list_price, $elevator_knockdown_price, $elevator_pay_kind, $sales_id, $region_manger_id)
{
$bonus_array = [];
if ($ver == "2.0") {
$elevator_knockdown_price = round($elevator_knockdown_price / 1.05); //不含稅
$discount = round($elevator_knockdown_price / $elevator_list_price, 3); #銷售點數,取到小數點第三位。
// echo "<pre>";
// print_r($elevator_pay_kind);
// echo "</pre>";
foreach ($elevator_pay_kind as $elevator_pay_kind) {
// 單次款項的種類
// $pay_amount = round($elevator_pay_kind['pay_amount'] / 1.05); //不含稅
$pay_amount = $elevator_pay_kind['pay_amount']; //不含稅
#合約總類($contract_type):戰略客戶(strategy_customer)、一般客戶(general_customer)
switch ($contract_type) {
case "strategy_customer":
#契約員獎金($sales_bonus)
$sales_bonus = $elevator_knockdown_price * 0.007;
#地區經理提成獎金($region_manager_bonus)
$region_manager_bonus = 400;
break;
case "general_customer":
switch ($elevator_type) {
#客梯(passenger)、貨梯(cargo)
case ($elevator_type == "passenger" or $elevator_type == "cargo"):
switch ($discount) {
case ($discount >= 1.0):
$sales_bonus = $elevator_knockdown_price * 0.02;
break;
case ($discount >= 0.9 and $discount < 1.0):
$sales_bonus = $elevator_knockdown_price * 0.018;
break;
case ($discount >= 0.75 and $discount < 0.9):
$sales_bonus = $elevator_knockdown_price * 0.015;
break;
case ($discount < 0.75):
$sales_bonus = $elevator_knockdown_price * 0.008;
break;
};
break;
#小電梯(dumbwaiter)、平台梯(flatbase)、強驅(positive_drive)
case ($elevator_type == "dumbwaiter" or $elevator_type == "flatbase" or $elevator_type == "positive_drive"):
switch ($discount) {
case ($discount >= 1.0):
$sales_bonus = $elevator_knockdown_price * 0.02;
break;
case ($discount >= 0.9 and $discount < 1.0):
$sales_bonus = $elevator_knockdown_price * 0.018;
break;
case ($discount >= 0.72 and $discount < 0.9):
$sales_bonus = $elevator_knockdown_price * 0.015;
break;
case ($discount < 0.72):
$sales_bonus = $elevator_knockdown_price * 0.008;
break;
};
break;
};
#區域經理提成獎金($region_manager_bonus)
$region_manager_bonus = 600;
break;
};
#營銷人員銷售獎金水庫-----訂金已收款20%,發放總獎金20%
array_push($bonus_array, [
"bonus_type" => "營銷人員銷售獎金-訂金段", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => round($sales_bonus * 0.2), #金額
"payment_schedul_due" => "deposit", #訂金已收款20%
"payment_schedul_regulation" => "訂金已收款20%,發放總獎金20%" #發放規定
]);
#營銷人員銷售獎金水庫-----出貨前期所有款項已收齊,且出貨款已收款50%,發放總獎金50%
array_push($bonus_array, [
"bonus_type" => "營銷人員銷售獎金-出貨款段", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => round($sales_bonus * 0.5), #金額
"payment_schedul_due" => "shipping", #訂金已收款20%
"payment_schedul_regulation" => "出貨前期所有款項已收齊,且出貨款已收款50%,發放總獎金50%" #發放規定
]);
#合約總類($contract_type):戰略客戶(strategy_customer)、一般客戶(general_customer)
switch ($contract_type) {
case "strategy_customer":
#契約員獎金($sales_bonus)
$sales_bonus = $pay_amount * 0.007;
#地區經理提成獎金($region_manager_bonus)
$region_manager_bonus = 400;
break;
#營銷人員銷售獎金水庫-----驗收前期所有款項已收齊,且驗收款已收款30%,發放總獎金30%
array_push($bonus_array, [
"bonus_type" => "營銷人員銷售獎金-驗收款段", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => round($sales_bonus * 0.3), #金額
"payment_schedul_due" => "acceptance", #訂金已收款20%
"payment_schedul_regulation" => "驗收前期所有款項已收齊,且驗收款已收款30%,發放總獎金30%" #發放規定
]);
case "general_customer":
switch ($elevator_type) {
#客梯(passenger)、貨梯(cargo)
case ($elevator_type == "passenger" or $elevator_type == "cargo"):
switch ($discount) {
case ($discount >= 1.0):
$sales_bonus = $pay_amount * 0.02;
break;
case ($discount >= 0.9 and $discount < 1.0):
$sales_bonus = $pay_amount * 0.018;
break;
case ($discount >= 0.75 and $discount < 0.9):
$sales_bonus = $pay_amount * 0.015;
break;
case ($discount < 0.75):
$sales_bonus = $pay_amount * 0.008;
break;
};
break;
#區域經理提成獎金水庫-----訂金已收款100%,發放總獎金50%
array_push($bonus_array, [
"bonus_type" => "區域經理提成獎金-訂金段", #獎金名稱
"bonus_receiver" => $region_manger_id, #發放人員
"bonus_amount" => round($region_manager_bonus * 0.5), #金額
"payment_schedul_due" => "deposit", #訂金已收款100%
"payment_schedul_regulation" => "訂金已收款100%,發放總獎金50%" #發放規定
]);
#小電梯(dumbwaiter)、平台梯(flatbase)、強驅(positive_drive)
case ($elevator_type == "dumbwaiter" or $elevator_type == "flatbase" or $elevator_type == "positive_drive"):
switch ($discount) {
case ($discount >= 1.0):
$sales_bonus = $pay_amount * 0.02;
break;
case ($discount >= 0.9 and $discount < 1.0):
$sales_bonus = $pay_amount * 0.018;
break;
case ($discount >= 0.72 and $discount < 0.9):
$sales_bonus = $pay_amount * 0.015;
break;
case ($discount < 0.72):
$sales_bonus = $pay_amount * 0.008;
break;
};
break;
};
#區域經理提成獎金($region_manager_bonus)
$region_manager_bonus = 600;
break;
};
$sales_bonus = round($sales_bonus);
$pay_scale = $elevator_pay_kind['pay_scale'];
switch ($elevator_pay_kind['pay_kind']) {
//訂金
case '1':
#營銷人員銷售獎金水庫-----訂金已收款20%,發放總獎金20%
array_push($bonus_array, [
"bonus_type" => "4", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => $sales_bonus, #金額
"payment_schedul_due" => "deposit", #訂金已收款20%
"payment_schedul_regulation" => "訂金已收款$pay_scale%,發放總獎金$pay_scale%" #發放規定
]);
#區域經理獎金水庫-----貨到工地款(含)之前所有款項已收款100%,發放總獎金50%
array_push($bonus_array, [
"bonus_type" => "區域經理提成獎金-貨到工地款段", #獎金名稱
"bonus_receiver" => $region_manger_id, #發放人員
"bonus_amount" => round($region_manager_bonus * 0.5), #金額
"payment_schedul_due" => "deliveried", #貨到工地款(含)之前所有款項已收款100%
"payment_schedul_regulation" => "貨到工地款(含)之前所有款項已收款100%,發放總獎金50%" #發放規定
]);
#區域經理提成獎金水庫-----訂金已收款100%,發放總獎金50%
array_push($bonus_array, [
"bonus_type" => "11", #獎金名稱
"bonus_receiver" => $region_manger_id, #發放人員
"bonus_amount" => round($region_manager_bonus * 0.5), #金額
"payment_schedul_due" => "deposit", #訂金已收款100%
"payment_schedul_regulation" => "訂金已收款100%,發放總獎金50%" #發放規定
]);
break;
//二次
case '2':
#營銷人員銷售獎金水庫-----訂金已收款20%,發放總獎金20%
array_push($bonus_array, [
"bonus_type" => "5", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => round($sales_bonus), #金額
"payment_schedul_due" => "twice", #訂金已收款20%
"payment_schedul_regulation" => "訂金已收款$pay_scale%,發放總獎金$pay_scale%" #發放規定
]);
break;
//貨抵工地
case '3':
array_push($bonus_array, [
"bonus_type" => "6", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => $sales_bonus, #金額
"payment_schedul_due" => "shipping", #訂金已收款20%
"payment_schedul_regulation" => "出貨前期所有款項已收齊,且出貨款已收款$pay_scale%,發放總獎金$pay_scale%" #發放規定
]);
#區域經理獎金水庫-----貨到工地款(含)之前所有款項已收款100%,發放總獎金50%
array_push($bonus_array, [
"bonus_type" => "12", #獎金名稱
"bonus_receiver" => $region_manger_id, #發放人員
"bonus_amount" => round($region_manager_bonus * 0.5), #金額
"payment_schedul_due" => "shipping", #貨到工地款(含)之前所有款項已收款100%
"payment_schedul_regulation" => "貨到工地款(含)之前所有款項已收款100%,發放總獎金50%" #發放規定
]);
// 材料其他
case '4':
array_push($bonus_array, [
"bonus_type" => "7", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => $sales_bonus, #金額
"payment_schedul_due" => "other", #訂金已收款20%
"payment_schedul_regulation" => "訂金已收款$pay_scale%,發放總獎金$pay_scale%" #發放規定
]);
break;
//安裝完畢
case '5':
array_push($bonus_array, [
"bonus_type" => "8", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => $sales_bonus, #金額
"payment_schedul_due" => "installed", #訂金已收款20%
"payment_schedul_regulation" => "訂金已收款$pay_scale%,發放總獎金$pay_scale%" #發放規定
]);
break;
//驗收
case '6':
array_push($bonus_array, [
"bonus_type" => "9", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => $sales_bonus, #金額
"payment_schedul_due" => "acceptance", #訂金已收款20%
"payment_schedul_regulation" => "訂金已收款$pay_scale%,發放總獎金$pay_scale%" #發放規定
]);
break;
//安裝其他
case '7':
array_push($bonus_array, [
"bonus_type" => "10", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => $sales_bonus, #金額
"payment_schedul_due" => "installOther", #訂金已收款20%
"payment_schedul_regulation" => "訂金已收款$pay_scale%,發放總獎金$pay_scale%" #發放規定
]);
break;
}
$result_array = [
"ver" => $ver, #獎金版本
"result_status" => "success", #計算結果
"bonus_array" => $bonus_array #獎金水庫
];
// #營銷人員銷售獎金水庫-----訂金已收款20%,發放總獎金20%
// array_push($bonus_array, [
// "bonus_type" => "營銷人員銷售獎金-訂金段", #獎金名稱
// "bonus_receiver" => $sales_id, #發放人員
// "bonus_amount" => round($sales_bonus), #金額
// "payment_schedul_due" => "deposit", #訂金已收款20%
// "payment_schedul_regulation" => "訂金已收款20%,發放總獎金20%" #發放規定
// ]);
// #營銷人員銷售獎金水庫-----出貨前期所有款項已收齊,且出貨款已收款50%,發放總獎金50%
// array_push($bonus_array, [
// "bonus_type" => "營銷人員銷售獎金-出貨款段", #獎金名稱
// "bonus_receiver" => $sales_id, #發放人員
// "bonus_amount" => round($sales_bonus * 0.5), #金額
// "payment_schedul_due" => "shipping", #訂金已收款20%
// "payment_schedul_regulation" => "出貨前期所有款項已收齊,且出貨款已收款50%,發放總獎金50%" #發放規定
// ]);
// #營銷人員銷售獎金水庫-----驗收前期所有款項已收齊,且驗收款已收款30%,發放總獎金30%
// array_push($bonus_array, [
// "bonus_type" => "營銷人員銷售獎金-驗收款段", #獎金名稱
// "bonus_receiver" => $sales_id, #發放人員
// "bonus_amount" => round($sales_bonus * 0.3), #金額
// "payment_schedul_due" => "acceptance", #訂金已收款20%
// "payment_schedul_regulation" => "驗收前期所有款項已收齊,且驗收款已收款30%,發放總獎金30%" #發放規定
// ]);
// #區域經理提成獎金水庫-----訂金已收款100%,發放總獎金50%
// array_push($bonus_array, [
// "bonus_type" => "區域經理提成獎金-訂金段", #獎金名稱
// "bonus_receiver" => $region_manger_id, #發放人員
// "bonus_amount" => round($region_manager_bonus * 0.5), #金額
// "payment_schedul_due" => "deposit", #訂金已收款100%
// "payment_schedul_regulation" => "訂金已收款100%,發放總獎金50%" #發放規定
// ]);
// #區域經理獎金水庫-----貨到工地款(含)之前所有款項已收款100%,發放總獎金50%
// array_push($bonus_array, [
// "bonus_type" => "區域經理提成獎金-貨到工地款段", #獎金名稱
// "bonus_receiver" => $region_manger_id, #發放人員
// "bonus_amount" => round($region_manager_bonus * 0.5), #金額
// "payment_schedul_due" => "deliveried", #貨到工地款(含)之前所有款項已收款100%
// "payment_schedul_regulation" => "貨到工地款(含)之前所有款項已收款100%,發放總獎金50%" #發放規定
// ]);
$result_array = [
"ver" => $ver, #獎金版本
"result_status" => "success", #計算結果
"bonus_array" => $bonus_array #獎金水庫
];
}
} else {
array_push($bonus_array, [
"bonus_type" => "error", #獎金名稱

92
wms/bonus/elevator_new/elevator_new_deal_bonus_v2_0_examination.php

@ -34,10 +34,31 @@ result_array[
*/
require_once("elevator_new_deal_bonus_v2_0.php");
require_once("elevator_new_deal_bonus_v2_0_1.php");
#$ver, $contract_type, $elevator_type, $elevator_list_price, $elevator_knockdown_price, $sales_id, $region_manger_id
$pay_kind_arr = [
[
"pay_kind" => '1',
"pay_scale" => 20,
"pay_amount" => 0
],
[
"pay_kind" => '3',
"pay_scale" => 50,
"pay_amount" => 0
],
[
"pay_kind" => '5',
"pay_scale" => 20,
"pay_amount" => 0
],
[
"pay_kind" => '6',
"pay_scale" => 10,
"pay_amount" => 0
]
];
#獎金測試
$examination_array = [
#錯誤版本
@ -55,50 +76,59 @@ $examination_array = [
["2.0", "strategy_customer", "dumbwaiter", 1000000, 900000, "M0001", "M0003"], #戰略客戶、小電梯、銷售點數90%
["2.0", "strategy_customer", "dumbwaiter", 1000000, 720000, "M0001", "M0003"], #戰略客戶、小電梯、銷售點數75%
["2.0", "strategy_customer", "dumbwaiter", 1000000, 600000, "M0001", "M0003"], #戰略客戶、小電梯、銷售點數60%
["2.0", "strategy_customer", "flatbase", 1000000, 1000000, "M0001", "M0003"], #戰略客戶、平台梯、銷售點數100%
["2.0", "strategy_customer", "flatbase", 1000000, 900000, "M0001", "M0003"], #戰略客戶、平台梯、銷售點數90%
["2.0", "strategy_customer", "flatbase", 1000000, 720000, "M0001", "M0003"], #戰略客戶、平台梯、銷售點數75%
["2.0", "strategy_customer", "flatbase", 1000000, 600000, "M0001", "M0003"], #戰略客戶、平台梯、銷售點數60%
["2.0", "strategy_customer", "positive_drive", 1000000, 1000000, "M0001", "M0003"], #戰略客戶、強驅、銷售點數100%
["2.0", "strategy_customer", "positive_drive", 1000000, 900000, "M0001", "M0003"], #戰略客戶、強驅、銷售點數90%
["2.0", "strategy_customer", "positive_drive", 1000000, 720000, "M0001", "M0003"], #戰略客戶、強驅、銷售點數75%
["2.0", "strategy_customer", "positive_drive", 1000000, 600000, "M0001", "M0003"], #戰略客戶、強驅、銷售點數60%
// ["2.0", "strategy_customer", "flatbase", 1000000, 1000000, "M0001", "M0003"], #戰略客戶、平台梯、銷售點數100%
// ["2.0", "strategy_customer", "flatbase", 1000000, 900000, "M0001", "M0003"], #戰略客戶、平台梯、銷售點數90%
// ["2.0", "strategy_customer", "flatbase", 1000000, 720000, "M0001", "M0003"], #戰略客戶、平台梯、銷售點數75%
// ["2.0", "strategy_customer", "flatbase", 1000000, 600000, "M0001", "M0003"], #戰略客戶、平台梯、銷售點數60%
// ["2.0", "strategy_customer", "positive_drive", 1000000, 1000000, "M0001", "M0003"], #戰略客戶、強驅、銷售點數100%
// ["2.0", "strategy_customer", "positive_drive", 1000000, 900000, "M0001", "M0003"], #戰略客戶、強驅、銷售點數90%
// ["2.0", "strategy_customer", "positive_drive", 1000000, 720000, "M0001", "M0003"], #戰略客戶、強驅、銷售點數75%
// ["2.0", "strategy_customer", "positive_drive", 1000000, 600000, "M0001", "M0003"], #戰略客戶、強驅、銷售點數60%
#一般客戶(general_customer)
["2.0", "general_customer", "passenger", 1000000, 1000000, "M0001", "M0003"], #一般客戶、客梯、銷售點數100%
["2.0", "general_customer", "passenger", 1000000, 900000, "M0001", "M0003"], #一般客戶、客梯、銷售點數90%
["2.0", "general_customer", "passenger", 1000000, 750000, "M0001", "M0003"], #一般客戶、客梯、銷售點數75%
["2.0", "general_customer", "passenger", 1000000, 600000, "M0001", "M0003"], #一般客戶、客梯、銷售點數60%
["2.0", "general_customer", "cargo", 1000000, 1000000, "M0001", "M0003"], #一般客戶、貨梯、銷售點數100%
["2.0", "general_customer", "cargo", 1000000, 900000, "M0001", "M0003"], #一般客戶、貨梯、銷售點數90%
["2.0", "general_customer", "cargo", 1000000, 750000, "M0001", "M0003"], #一般客戶、貨梯、銷售點數75%
["2.0", "general_customer", "cargo", 1000000, 600000, "M0001", "M0003"], #一般客戶、貨梯、銷售點數60%
["2.0", "general_customer", "dumbwaiter", 1000000, 1000000, "M0001", "M0003"], #一般客戶、小電梯、銷售點數100%
["2.0", "general_customer", "dumbwaiter", 1000000, 900000, "M0001", "M0003"], #一般客戶、小電梯、銷售點數90%
["2.0", "general_customer", "dumbwaiter", 1000000, 720000, "M0001", "M0003"], #一般客戶、小電梯、銷售點數75%
["2.0", "general_customer", "dumbwaiter", 1000000, 600000, "M0001", "M0003"], #一般客戶、小電梯、銷售點數60%
["2.0", "general_customer", "flatbase", 1000000, 1000000, "M0001", "M0003"], #一般客戶、平台梯、銷售點數100%
["2.0", "general_customer", "flatbase", 1000000, 900000, "M0001", "M0003"], #一般客戶、平台梯、銷售點數90%
["2.0", "general_customer", "flatbase", 1000000, 720000, "M0001", "M0003"], #一般客戶、平台梯、銷售點數75%
["2.0", "general_customer", "flatbase", 1000000, 600000, "M0001", "M0003"], #一般客戶、平台梯、銷售點數60%
["2.0", "general_customer", "positive_drive", 1000000, 1000000, "M0001", "M0003"], #一般客戶、強驅、銷售點數100%
["2.0", "general_customer", "positive_drive", 1000000, 900000, "M0001", "M0003"], #一般客戶、強驅、銷售點數90%
["2.0", "general_customer", "positive_drive", 1000000, 720000, "M0001", "M0003"], #一般客戶、強驅、銷售點數75%
["2.0", "general_customer", "positive_drive", 1000000, 600000, "M0001", "M0003"] #一般客戶、強驅、銷售點數60%
// #一般客戶(general_customer)
// ["2.0", "general_customer", "passenger", 1000000, 1000000, "M0001", "M0003"], #一般客戶、客梯、銷售點數100%
// ["2.0", "general_customer", "passenger", 1000000, 900000, "M0001", "M0003"], #一般客戶、客梯、銷售點數90%
// ["2.0", "general_customer", "passenger", 1000000, 750000, "M0001", "M0003"], #一般客戶、客梯、銷售點數75%
// ["2.0", "general_customer", "passenger", 1000000, 600000, "M0001", "M0003"], #一般客戶、客梯、銷售點數60%
// ["2.0", "general_customer", "cargo", 1000000, 1000000, "M0001", "M0003"], #一般客戶、貨梯、銷售點數100%
// ["2.0", "general_customer", "cargo", 1000000, 900000, "M0001", "M0003"], #一般客戶、貨梯、銷售點數90%
// ["2.0", "general_customer", "cargo", 1000000, 750000, "M0001", "M0003"], #一般客戶、貨梯、銷售點數75%
// ["2.0", "general_customer", "cargo", 1000000, 600000, "M0001", "M0003"], #一般客戶、貨梯、銷售點數60%
// ["2.0", "general_customer", "dumbwaiter", 1000000, 1000000, "M0001", "M0003"], #一般客戶、小電梯、銷售點數100%
// ["2.0", "general_customer", "dumbwaiter", 1000000, 900000, "M0001", "M0003"], #一般客戶、小電梯、銷售點數90%
// ["2.0", "general_customer", "dumbwaiter", 1000000, 720000, "M0001", "M0003"], #一般客戶、小電梯、銷售點數75%
// ["2.0", "general_customer", "dumbwaiter", 1000000, 600000, "M0001", "M0003"], #一般客戶、小電梯、銷售點數60%
// ["2.0", "general_customer", "flatbase", 1000000, 1000000, "M0001", "M0003"], #一般客戶、平台梯、銷售點數100%
// ["2.0", "general_customer", "flatbase", 1000000, 900000, "M0001", "M0003"], #一般客戶、平台梯、銷售點數90%
// ["2.0", "general_customer", "flatbase", 1000000, 720000, "M0001", "M0003"], #一般客戶、平台梯、銷售點數75%
// ["2.0", "general_customer", "flatbase", 1000000, 600000, "M0001", "M0003"], #一般客戶、平台梯、銷售點數60%
// ["2.0", "general_customer", "positive_drive", 1000000, 1000000, "M0001", "M0003"], #一般客戶、強驅、銷售點數100%
// ["2.0", "general_customer", "positive_drive", 1000000, 900000, "M0001", "M0003"], #一般客戶、強驅、銷售點數90%
// ["2.0", "general_customer", "positive_drive", 1000000, 720000, "M0001", "M0003"], #一般客戶、強驅、銷售點數75%
// ["2.0", "general_customer", "positive_drive", 1000000, 600000, "M0001", "M0003"] #一般客戶、強驅、銷售點數60%
];
for ($i = 0; $i < count($examination_array); $i++) {
$arr = [];
foreach ($pay_kind_arr as $key => $pay_kind) {
$pay_kind['pay_amount'] = $examination_array[$i][4] * $pay_kind['pay_scale'] / 100;
array_push($arr, $pay_kind);
}
$result = elevator_new_deal_bonus_v2_0(
$examination_array[$i][0],
$examination_array[$i][1],
$examination_array[$i][2],
$examination_array[$i][3],
$examination_array[$i][4],
$arr,
$examination_array[$i][5],
$examination_array[$i][6]
);
echo "<pre>";
print_r($result);
echo "</pre>";
$customer = [
'strategy_customer' => '戰略客戶',
'general_customer' => '一般客戶'

106
wms/chengyanUI/select3.css

@ -0,0 +1,106 @@
body {
background-color: #aaa;
padding: 150px;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box !important;
}
.select3 {
position: relative;
}
.select3 > .input {
width: 250px;
padding: 12px 15px;
border-radius: 10px;
background-color: #fff;
font-size: 13px;
cursor: pointer;
position: relative;
}
.select3 > .input > i {
position: absolute;
top: 50%;
right: 8px;
transform: translateY(-50%);
font-size: 12px;
}
.select3 > .select {
display: none;
position: absolute;
top: 44px;
left: 0;
width: 250px;
padding: 16px 10px;
background-color: #fff;
border-radius: 10px;
box-sizing: border-box !important;
overflow: hidden;
animation: fadein 0.085s linear;
}
.select3 > .select > input[type=text] {
outline: none;
border: 1px #999 solid;
width: 100%;
border-radius: 4px;
height: 31px;
padding: 12px;
margin-bottom: 3px;
}
.select3 > .select > .options {
overflow-y: scroll;
max-height: 205px;
height: auto;
}
.select3 > .select > .options::-webkit-scrollbar {
width: 7px;
}
.select3 > .select > .options::-webkit-scrollbar-track {
background-color: transparent;
background-size: 10px 10px;
}
.select3 > .select > .options::-webkit-scrollbar-thumb {
background: #aaa;
border-radius: 5px;
}
.select3 > .select > .options > label {
width: 100%;
display: block;
padding: 10px;
cursor: pointer;
border-bottom: 1px #ccc solid;
transition: 0.2s;
}
.select3 > .select > .options > label:hover {
transform: scale(1.05);
}
.select3 > .select > .options > label.check {
background-color: #5BC0DE;
color: #fff;
animation: check 0.1s linear;
}
@keyframes fadein {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@keyframes check {
0% {
transform: translateX(0px);
background-color: rgba(91, 192, 222, 0);
}
0% {
transform: translateX(180px);
}
100% {
transform: translateX(0px);
background-color: rgb(91, 192, 222);
}
}/*# sourceMappingURL=select3.css.map */

1
wms/chengyanUI/select3.css.map

@ -0,0 +1 @@
{"version":3,"sources":["select3.scss","select3.css"],"names":[],"mappings":"AAAA;EACI,sBAAA;EACA,cAAA;ACCJ;;ADCA;EACI,SAAA;EACA,UAAA;EACA,iCAAA;ACEJ;;ADAA;EACI,kBAAA;ACGJ;ADFI;EACI,YAAA;EACA,kBAAA;EACA,mBAAA;EACA,sBAAA;EAEA,eAAA;EACA,eAAA;EACA,kBAAA;ACGR;ADFQ;EACI,kBAAA;EACA,QAAA;EACA,UAAA;EACA,2BAAA;EACA,eAAA;ACIZ;ADDI;EACI,aAAA;EACA,kBAAA;EACA,SAAA;EACA,OAAA;EACA,YAAA;EACA,kBAAA;EACA,sBAAA;EACA,mBAAA;EACA,iCAAA;EACA,gBAAA;EACA,+BAAA;ACGR;ADFQ;EACI,aAAA;EACA,sBAAA;EACA,WAAA;EACA,kBAAA;EACA,YAAA;EACA,aAAA;EACC,kBAAA;ACIb;ADDQ;EACI,kBAAA;EACA,iBAAA;EACA,YAAA;ACGZ;ADFY;EACI,UAAA;ACIhB;ADFY;EACI,6BAAA;EACA,0BAAA;ACIhB;ADFY;EACI,gBAAA;EACA,kBAAA;ACIhB;ADAY;EACI,WAAA;EACA,cAAA;EACA,aAAA;EACA,eAAA;EACA,6BAAA;EACA,gBAAA;ACEhB;ADDgB;EACI,sBAAA;ACGpB;ADDgB;EACI,yBAAA;EACA,WAAA;EACA,4BAAA;ACGpB;;ADKA;EACI;IACI,UAAA;ECFN;EDIE;IACI,UAAA;ECFN;AACF;ADKA;EACI;IACI,0BAAA;IACA,uCAAA;ECHN;EDKE;IACI,4BAAA;ECHN;EDKE;IACI,0BAAA;IACA,mCAAA;ECHN;AACF","file":"select3.css"}

88
wms/chengyanUI/select3.php

@ -0,0 +1,88 @@
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
<style>
</style>
<link rel="stylesheet" href="select3.css">
<div class="select3">
<div class="input">
<span>請選擇</span>
<i class="fa-solid fa-chevron-down"></i>
</div>
<div class="select">
<input type="text" />
<div class="options">
</div>
</div>
</div>
<script>
const select3 =document.querySelector('.select3');
const inputArr = [{
value:'123',
name:'123',
check:false,
},
{
value:'456',
name:'456',
check:false,
},
{
value:'789',
name:'789',
check:false,
},
{
value:'111',
name:'111',
check:false,
},
{
value:'555',
name:'555',
check:false,
},
{
value:'989',
name:'989',
check:false,
},
{
value:'000',
name:'000',
check:false,
}];
const result = [];
const showSelect = (e)=>{
console.log(e.target);
if(e.target.parentNode.querySelector('.select').style.display == 'block'){
e.target.parentNode.querySelector('.select').style.display = "none"
}else{
e.target.parentNode.querySelector('.select').style.display = "block"
}
}
let html ="";
select3.querySelector('.input').addEventListener('click', showSelect)
inputArr.forEach(item=>{
html += `<label class="option">
<span>${item.name}</span>
</label>`
})
console.log(select3.querySelector('.options'));
const options = select3.querySelector('.options');
options.innerHTML = html;
for(let i=0;i<options.querySelectorAll('.option').length;i++){
options.querySelectorAll('.option')[i].addEventListener('click', checkFn)
}
function checkFn(e){
console.log(e.target);
e.target.classList.add('check')
}
</script>

110
wms/chengyanUI/select3.scss

@ -0,0 +1,110 @@
body{
background-color: #aaa;
padding: 150px;
}
*{
margin:0;
padding: 0;
box-sizing: border-box !important;
}
.select3{
position: relative;
>.input {
width: 250px;
padding: 12px 15px;
border-radius: 10px;
background-color: #fff;
font-size: 13px;
cursor: pointer;
position: relative;
>i{
position: absolute;
top: 50%;
right:8px;
transform: translateY(-50%);
font-size: 12px;
}
}
>.select{
display: none;
position: absolute;
top: 44px;;
left:0;
width:250px;
padding: 16px 10px;
background-color: #fff;
border-radius: 10px;
box-sizing: border-box !important;
overflow: hidden;
animation: fadein .085s linear;
>input[type='text']{
outline: none;
border:1px #999 solid;
width: 100%;
border-radius: 4px;
height: 31px;
padding: 12px ;
margin-bottom: 3px;
}
>.options{
overflow-y: scroll;
max-height: 205px;
height:auto;
&::-webkit-scrollbar {
width: 7px;
}
&::-webkit-scrollbar-track {
background-color: transparent;
background-size: 10px 10px;
}
&::-webkit-scrollbar-thumb {
background: #aaa;
border-radius: 5px;
}
>label{
width:100%;
display: block;
padding: 10px;
cursor: pointer;
border-bottom: 1px #ccc solid;
transition: .2s;
&:hover{
transform: scale(1.05);
}
&.check{
background-color:#5BC0DE;
color:#fff;
animation: check .1s linear;
}
}
}
}
}
@keyframes fadein {
0%{
opacity: 0;
}
100%{
opacity: 1;
}
}
@keyframes check {
0%{
transform: translateX(0px);
background-color:rgba(91, 192, 222,0);
}
0%{
transform: translateX(180px);
}
100%{
transform: translateX(0px);
background-color:rgba(91, 192, 222,1);
}
}

86
wms/cont/api/getElevatorPrice.php

@ -1,42 +1,52 @@
<?php
require_once "../../mkt/conn.php";
try{
$spec = $_GET['spec'] ?? '';
$person = $_GET['person'] ?? '';
$stop = $_GET['stop'] ?? '';
$weight = $_GET['weight'] ?? '';
$speed = $_GET['speed'] ?? '';
$m1 = $_GET['m1'] ?? '';
$method = $_GET['method'] ?? '';
$cycle = $_GET['cycle'] ?? '';
$specArr = [
"MAE100" => "A",
"MAF100" => "B",
"MAM200" => "D",
"MAH100" => "E",
""=>""
];
// $elevator_type = match($spec){
// "MAE100" => "A",
// "MAF100" => "B",
// "MAM200" => "D",
// "MAH100" => "E",
// };
$elevator_type = $specArr[$spec];
$sql_str = "SELECT * FROM maintain_standard_option
WHERE elevator_type=:elevator_type AND min_speed<=:speed AND max_speed>=:speed AND min_persons <= :person AND max_persons >= :person AND is_m1_bundle=:m1
ORDER bY id DESC";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':elevator_type', $elevator_type);
$stmt->bindParam(':person', $person);
$stmt->bindParam(':speed', $speed);
$stmt->bindParam(':m1', $m1);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
if(!$result){
echo 0;
exit;
}
$differ = $stop > $result['max_floors'] ? $result['max_floors'] - $result['min_floors'] : ($stop - $result['min_floors']);
$price = $result['base_price'] + $differ * $result['floors_price'] +$result['m1_bundle_fee'];
if($cycle == 2){
$price += $price * $result['maintenance_fee_coefficient'];
}
if($method == "A"){
$price += $result['all_inclusive_fee'];
}
$spec = $_GET['spec'] ?? '';
$person = $_GET['person'] ?? '';
$stop = $_GET['stop'] ?? '';
$weight = $_GET['weight'] ?? '';
$speed = $_GET['speed'] ?? '';
$m1 = $_GET['m1'] ?? '';
$method = $_GET['method'] ?? '';
$cycle = $_GET['cycle'] ?? '';
$elevator_type = match($spec){
"MAE100" => "A",
"MAF100" => "B",
"MAM200" => "D",
"MAH100" => "E",
};
$sql_str = "SELECT * FROM maintain_standard_option
WHERE elevator_type=:elevator_type AND min_speed<=:speed AND max_speed>=:speed AND min_persons <= :person AND max_persons >= :person AND is_m1_bundle=:m1
ORDER bY id DESC";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':elevator_type', $elevator_type);
$stmt->bindParam(':person', $person);
$stmt->bindParam(':speed', $speed);
$stmt->bindParam(':m1', $m1);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
if(!$result){
echo 0;
exit;
}
$differ = $stop > $result['max_floors'] ? $result['max_floors'] - $result['min_floors'] : ($stop - $result['min_floors']);
$price = $result['base_price'] + $differ * $result['floors_price'] +$result['m1_bundle_fee'];
if($cycle == 2){
$price += $price * $result['maintenance_fee_coefficient'];
echo $price;
}catch(PDOException $e){
echo $e->getMessage();
}
if($method == "A"){
$price += $result['all_inclusive_fee'];
}
echo $price;

761
wms/cont/api/maintaenance_contract_bonus.php

@ -0,0 +1,761 @@
<?php
## 3/31 前套用 2.0 版本
$ver = isset($_GET['ver']) ? $_GET['ver'] : null;
$contract_type = isset($_GET['contract_type']) ? trim($_GET['contract_type']) : null; // 请注意删除可能的尾随空格
$contract_years = isset($_GET['contract_years']) ? $_GET['contract_years'] : null;
$discount = isset($_GET['discount']) ? $_GET['discount'] : null;
$fee_per_st = isset($_GET['fee_per_st']) ? $_GET['fee_per_st'] : null;
$receivable_date_due = isset($_GET['receivable_date_due']) ? $_GET['receivable_date_due'] : null;
$sales_id = isset($_GET['sales_id']) ? $_GET['sales_id'] : null;
$region_manager_id = isset($_GET['region_manager_id']) ? $_GET['region_manager_id'] : null;
$regular_contract_manager_id = isset($_GET['regular_contract_manager_id']) ? $_GET['regular_contract_manager_id'] : null;
$bonus = maintenance_contract_bonus_v2_0($ver, $contract_type, $contract_years, $discount, $fee_per_st, $receivable_date_due, $sales_id, $region_manager_id, $regular_contract_manager_id);
echo json_encode($bonus);
function maintenance_contract_bonus_v2_0($ver, $contract_type, $contract_years, $discount, $fee_per_st, $receivable_date_due, $sales_id, $region_manger_id, $regular_contract_manger_id = '')
{
$bonus_array = [];
if ($ver == "2.0") {
#契約總類($contract_type):新簽約(new)、免保轉有費(free_to_charge)、續簽約(原價或僅契約金額異動)(renew_priceissue)
switch ($contract_type) {
case "new":
#契約員獎金($sales_bonus)
switch ($fee_per_st) {
case ($fee_per_st <= 3000):
$sales_bonus = ($fee_per_st) * 0.6;
break;
case ($fee_per_st >= 3001 and $fee_per_st <= 3499):
$sales_bonus = ($fee_per_st) * 0.7;
break;
case ($fee_per_st >= 3500 and $fee_per_st <= 3999):
$sales_bonus = ($fee_per_st) * 0.8;
break;
case ($fee_per_st >= 4000):
$sales_bonus = ($fee_per_st) * 0.9;
break;
};
#地區經理經理獎金($region_manager_bonus)
$region_manager_bonus = 170;
#專任契約經理獎金($regular_contract_manger_bonus)
if (($regular_contract_manger_id) != '') {
$regular_contract_manger_bonus = 100;
}
break;
case "free_to_charge":
switch ($fee_per_st) {
case ($fee_per_st <= 3000):
$sales_bonus = ($fee_per_st) * 0.3;
break;
case ($fee_per_st >= 3001 and $fee_per_st <= 3499):
$sales_bonus = ($fee_per_st) * 0.35;
break;
case ($fee_per_st >= 3500 and $fee_per_st <= 3999):
$sales_bonus = ($fee_per_st) * 0.4;
break;
case ($fee_per_st >= 4000):
$sales_bonus = ($fee_per_st) * 0.5;
break;
};
#地區經理經理獎金($region_manager_bonus)
$region_manager_bonus = 100;
#專任契約經理獎金($regular_contract_manger_bonus)
if (($regular_contract_manger_id) != '') {
$regular_contract_manger_bonus = 100;
}
break;
case "renew_priceissue":
switch ($fee_per_st) {
case ($fee_per_st <= 3000):
$sales_bonus = ($fee_per_st) * 0.25;
break;
case ($fee_per_st >= 3001 and $fee_per_st <= 3499):
$sales_bonus = ($fee_per_st) * 0.3;
break;
case ($fee_per_st >= 3500 and $fee_per_st <= 3999):
$sales_bonus = ($fee_per_st) * 0.35;
break;
case ($fee_per_st >= 4000):
$sales_bonus = ($fee_per_st) * 0.4;
break;
};
#地區經理經理獎金($region_manager_bonus)
$region_manager_bonus = 100;
#專任契約經理獎金($regular_contract_manger_bonus)
if (($regular_contract_manger_id) != '') {
$regular_contract_manger_bonus = 100;
}
break;
};
#合約折扣率($discount):大於80%以上(含)(above_80)、60-79%(含)以上(60_to_79)、折扣率59% (含)以下(below_59)
switch ($discount) {
case ($discount < 0.6):
$sales_bonus = $sales_bonus * 0.7;
break;
case ($discount >= 0.6 and $discount < 0.8):
$sales_bonus = $sales_bonus * 0.8;
break;
case ($discount >= 0.8):
$sales_bonus = $sales_bonus * 1.0;
break;
};
#簽約年數($contract_years):1年(1),超過1年(above)
switch ($contract_years) {
case $contract_years == "one":
#契約員獎金
array_push($bonus_array, [
"bonus_type" => "1", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => round($sales_bonus), #金額
"pay_day_due" => date("Y-m-d", strtotime("$receivable_date_due +1 months")), #預計發放時間
"bonus_regulation" => "合約簽回及保養款項收回的次月一次性發" #發放規定
]);
#地區經理經理獎金
array_push($bonus_array, [
"bonus_type" => "2", #獎金名稱
"bonus_receiver" => $region_manger_id, #發放人員
"bonus_amount" => round($region_manager_bonus), #金額
"pay_day_due" => date("Y-m-d", strtotime("$receivable_date_due +1 months")), #預計發放時間
"bonus_regulation" => "合約簽回及保養款項收回的次月一次性發" #發放規定
]);
#專任契約經理獎金
if (($regular_contract_manger_id) != '') {
array_push($bonus_array, [
"bonus_type" => "3", #獎金名稱
"bonus_receiver" => $regular_contract_manger_id, #發放人員
"bonus_amount" => round($regular_contract_manger_bonus), #金額
"pay_day_due" => date("Y-m-d", strtotime("$receivable_date_due +1 months")), #預計發放時間
"bonus_regulation" => "合約簽回及保養款項收回的次月一次性發" #發放規定
]);
}
$result_array = [
"ver" => $ver, #獎金版本
"result_status" => "success", #計算結果
"bonus_array" => $bonus_array #獎金水庫
];
break;
case $contract_years == "above_two":
/*** 以下第1年獎金 ***/
#契約員獎金
array_push($bonus_array, [
"bonus_type" => "1", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => round($sales_bonus), #金額
"pay_day_due" => date("Y-m-d", strtotime("$receivable_date_due +1 months")), #預計發放時間
"bonus_regulation" => "合約簽回及保養款項收回的次月一次性發" #發放規定
]);
#地區經理經理獎金
array_push($bonus_array, [
"bonus_type" => "2", #獎金名稱
"bonus_receiver" => $region_manger_id, #發放人員
"bonus_amount" => round($region_manager_bonus), #金額
"pay_day_due" => date("Y-m-d", strtotime("$receivable_date_due +1 months")), #預計發放時間
"bonus_regulation" => "合約簽回及保養款項收回的次月一次性發" #發放規定
]);
#專任契約經理獎金
if (($regular_contract_manger_id) != '') {
array_push($bonus_array, [
"bonus_type" => "3", #獎金名稱
"bonus_receiver" => $regular_contract_manger_id, #發放人員
"bonus_amount" => round($regular_contract_manger_bonus), #金額
"pay_day_due" => date("Y-m-d", strtotime("$receivable_date_due +1 months")), #預計發放時間
"bonus_regulation" => "合約簽回及保養款項收回的次月一次性發" #發放規定
]);
}
/*** 以上第1年獎金 ***/
/*** 以下第2年獎金 ***/
#第2年契約員獎金
array_push($bonus_array, [
"bonus_type" => "1", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => round($sales_bonus), #金額
"pay_day_due" => date("Y-m-d", strtotime("$receivable_date_due +13 months")), #預計發放時間
"bonus_regulation" => "合約簽回及保養款項收回的次月一次性發" #發放規定
]);
#第2年地區經理經理獎金
array_push($bonus_array, [
"bonus_type" => "2", #獎金名稱
"bonus_receiver" => $region_manger_id, #發放人員
"bonus_amount" => round($region_manager_bonus), #金額
"pay_day_due" => date("Y-m-d", strtotime("$receivable_date_due +13 months")), #預計發放時間
"bonus_regulation" => "合約簽回及保養款項收回的次月一次性發" #發放規定
]);
#第2年專任契約經理獎金
if (($regular_contract_manger_id) != '') {
array_push($bonus_array, [
"bonus_type" => "3", #獎金名稱
"bonus_receiver" => $regular_contract_manger_id, #發放人員
"bonus_amount" => round($regular_contract_manger_bonus), #金額
"pay_day_due" => date("Y-m-d", strtotime("$receivable_date_due +13 months")), #預計發放時間
"bonus_regulation" => "合約簽回及保養款項收回的次月一次性發" #發放規定
]);
}
/*** 以上第2年獎金 ***/
$result_array = [
"ver" => $ver, #獎金版本
"result_status" => "success", #計算結果
"bonus_array" => $bonus_array #獎金水庫
];
break;
}
} else {
array_push($bonus_array, [
"bonus_type" => "error", #獎金名稱
"bonus_receiver" => "error", #發放人員
"bonus_amount" => 0, #金額
"pay_day_due" => "9999-1-1", #預計發放時間
"bonus_regulation" => "error" #發放規定
]);
$result_array = [
"ver" => $ver, #獎金版本
"result_status" => "error", #計算結果
"bonus_array" => $bonus_array #獎金水庫
];
}
return $result_array;
};
## 4/1 後套用 2.1 版本
function maintenance_contract_bonus_v2_1($ver, $contract_type, $payment_period, $elevator_list_price, $fee_per_st, $commission_fee, $receivable_date_due, $sales_id, $region_director_id, $regular_contract_manger_id = '')
{
// $fee_per_st = round($fee_per_st);
$bonus_array = [];
if ($ver == "2.1") {
$discount = round(($fee_per_st - $commission_fee) / $elevator_list_price, 2);
// $discount = ($fee_per_st - $commission_fee) / $elevator_list_price;
#契約總類($contract_type):新簽約(new)、免保轉有費(free_to_charge)、續簽約(原價或僅契約金額異動)(renew_priceissue)
switch ($contract_type) {
case "new":
#契約員獎金($sales_bonus)
#合約折扣率($discount):大於80%以上(含)(above_80)、60-79%(含)以上(60_to_79)、折扣率59% (含)以下(below_59)
switch ($discount) {
case ($discount >= 0.8):
switch ($fee_per_st) {
case ($fee_per_st < 3000):
$sales_bonus = ($fee_per_st) * 0.6;
break;
case ($fee_per_st >= 3000 and $fee_per_st <= 3499):
$sales_bonus = ($fee_per_st) * 0.7;
break;
case ($fee_per_st >= 3500 and $fee_per_st <= 3999):
$sales_bonus = ($fee_per_st) * 0.8;
break;
case ($fee_per_st >= 4000):
$sales_bonus = ($fee_per_st) * 0.9;
break;
};
break;
case ($discount >= 0.6 and $discount < 0.8):
switch ($fee_per_st) {
case ($fee_per_st < 3000):
$sales_bonus = ($fee_per_st) * 0.48;
break;
case ($fee_per_st >= 3000 and $fee_per_st <= 3499):
$sales_bonus = ($fee_per_st) * 0.56;
break;
case ($fee_per_st >= 3500 and $fee_per_st <= 3999):
$sales_bonus = ($fee_per_st) * 0.64;
break;
case ($fee_per_st >= 4000):
$sales_bonus = ($fee_per_st) * 0.72;
break;
};
break;
case ($discount < 0.6):
switch ($fee_per_st) {
case ($fee_per_st < 3000):
$sales_bonus = ($fee_per_st) * 0.42;
break;
case ($fee_per_st >= 3000 and $fee_per_st <= 3499):
$sales_bonus = ($fee_per_st) * 0.49;
break;
case ($fee_per_st >= 3500 and $fee_per_st <= 3999):
$sales_bonus = ($fee_per_st) * 0.56;
break;
case ($fee_per_st >= 4000):
$sales_bonus = ($fee_per_st) * 0.63;
break;
};
break;
};
#地區處長獎金($region_director_bonus)
$region_director_bonus = 170;
#專任契約經理獎金($regular_contract_manger_bonus)
$regular_contract_manger_bonus = 300;
break;
case "free_to_charge":
switch ($fee_per_st) {
case ($fee_per_st < 3000):
$sales_bonus = ($fee_per_st) * 0.3;
break;
case ($fee_per_st >= 3000 and $fee_per_st <= 3499):
$sales_bonus = ($fee_per_st) * 0.35;
break;
case ($fee_per_st >= 3500 and $fee_per_st <= 3999):
$sales_bonus = ($fee_per_st) * 0.4;
break;
case ($fee_per_st >= 4000):
$sales_bonus = ($fee_per_st) * 0.45;
break;
};
#地區處長獎金($region_director_bonus)
$region_director_bonus = 170;
#專任契約經理獎金($regular_contract_manger_bonus)
$regular_contract_manger_bonus = 300;
break;
case "renew_priceissue":
switch ($fee_per_st) {
case ($fee_per_st < 3000):
$sales_bonus = ($fee_per_st) * 0.25;
break;
case ($fee_per_st >= 3000 and $fee_per_st <= 3499):
$sales_bonus = ($fee_per_st) * 0.3;
break;
case ($fee_per_st >= 3500 and $fee_per_st <= 3999):
$sales_bonus = ($fee_per_st) * 0.35;
break;
case ($fee_per_st >= 4000):
$sales_bonus = ($fee_per_st) * 0.4;
break;
};
#地區處長獎金($region_director_bonus)
$region_director_bonus = 170;
#專任契約經理獎金($regular_contract_manger_bonus)
$regular_contract_manger_bonus = 300;
break;
};
#地區處長獎金
array_push($bonus_array, [
"bonus_type" => "2", #獎金名稱
"bonus_receiver" => $region_director_id, #發放人員
"bonus_amount" => round($region_director_bonus), #金額
"pay_day_due" => date("Y-m-d", strtotime("$receivable_date_due +1 months")), #預計發放時間
"bonus_regulation" => "第1次款項收回後,次月發放" #發放規定
]);
#專任契約經理獎金
if ($regular_contract_manger_id != '') {
array_push($bonus_array, [
"bonus_type" => "3", #獎金名稱
"bonus_receiver" => $regular_contract_manger_id, #發放人員
"bonus_amount" => round($regular_contract_manger_bonus), #金額
"pay_day_due" => date("Y-m-d", strtotime("$receivable_date_due +1 months")), #預計發放時間
"bonus_regulation" => "第1次款項收回後,次月發放" #發放規定
]);
}
#契約員獎金
switch ($payment_period) {
#年付
case "annually":
array_push($bonus_array, [
"bonus_type" => "1", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => round($sales_bonus), #金額
"pay_day_due" => date("Y-m-d", strtotime("$receivable_date_due +1 months")), #預計發放時間
"bonus_regulation" => "每月收款後,按收款比率次月發放" #發放規定
]);
break;
#半年付
case "semiannually":
$payment_ratio_due_array = array(0.5, 0.5);
$payday_due_array = array(1, 7);
for ($i = 0; $i < count($payment_ratio_due_array); $i++) {
if ($i < count($payment_ratio_due_array) - 1) {
$current_bonus = round($sales_bonus * $payment_ratio_due_array[$i]); #金額
} else {
$current_bonus = round($sales_bonus - $i * round($sales_bonus * $payment_ratio_due_array[$i])); #最後一次金額
};
array_push($bonus_array, [
"bonus_type" => "1", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => round($current_bonus), #金額
"pay_day_due" => date("Y-m-d", strtotime("$receivable_date_due +$payday_due_array[$i] months")), #預計發放時間
"bonus_regulation" => "每月收款後,按收款比率次月發放" #發放規定
]);
}
break;
#季付
case "quarterly":
$payment_ratio_due_array = array(0.25, 0.25, 0.25, 0.25);
$payday_due_array = array(1, 4, 7, 10);
for ($i = 0; $i < count($payment_ratio_due_array); $i++) {
if ($i < count($payment_ratio_due_array) - 1) {
$current_bonus = round($sales_bonus * $payment_ratio_due_array[$i]); #金額
} else {
$current_bonus = round($sales_bonus - $i * round($sales_bonus * $payment_ratio_due_array[$i])); #最後一次金額
};
array_push($bonus_array, [
"bonus_type" => "1", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => round($current_bonus), #金額
"pay_day_due" => date("Y-m-d", strtotime("$receivable_date_due +$payday_due_array[$i] months")), #預計發放時間
"bonus_regulation" => "每月收款後,按收款比率次月發放" #發放規定
]);
}
break;
#2月1次
case "bimonthly":
$payment_ratio_due_array = array();
for ($i = 0; $i < 6; $i++) {
array_push($payment_ratio_due_array, 1 / 6);
}
$payday_due_array = array(1, 3, 5, 7, 9, 11);
for ($i = 0; $i < count($payment_ratio_due_array); $i++) {
if ($i < count($payment_ratio_due_array) - 1) {
$current_bonus = round($sales_bonus * $payment_ratio_due_array[$i]); #金額
} else {
$current_bonus = round($sales_bonus - $i * round($sales_bonus * $payment_ratio_due_array[$i])); #最後一次金額
};
array_push($bonus_array, [
"bonus_type" => "1", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => round($current_bonus), #金額
"pay_day_due" => date("Y-m-d", strtotime("$receivable_date_due +$payday_due_array[$i] months")), #預計發放時間
"bonus_regulation" => "每月收款後,按收款比率次月發放" #發放規定
]);
}
break;
#月付
case "monthly":
$payment_ratio_due_array = array();
// $payment_ratio_due_array = array();
for ($i = 0; $i < 12; $i++) {
array_push($payment_ratio_due_array, 1 / 12);
}
$payday_due_array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
for ($i = 0; $i < count($payment_ratio_due_array); $i++) {
if ($i < count($payment_ratio_due_array) - 1) {
$current_bonus = round($sales_bonus * $payment_ratio_due_array[$i]); #金額
} else {
$current_bonus = round($sales_bonus - $i * round($sales_bonus * $payment_ratio_due_array[$i])); #最後一次金額
};
array_push($bonus_array, [
"bonus_type" => "1", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => round($current_bonus), #金額
"pay_day_due" => date("Y-m-d", strtotime("$receivable_date_due +$payday_due_array[$i] months")), #預計發放時間
"bonus_regulation" => "每月收款後,按收款比率次月發放" #發放規定
]);
}
break;
}
$result_array = [
"ver" => $ver, #獎金版本
"result_status" => "success", #計算結果
"bonus_array" => $bonus_array #獎金水庫
];
} else {
array_push($bonus_array, [
"bonus_type" => "error", #獎金名稱
"bonus_receiver" => "error", #發放人員
"bonus_amount" => 0, #金額
"pay_day_due" => "9999-1-1", #預計發放時間
"bonus_regulation" => "error" #發放規定
]);
$result_array = [
"ver" => $ver, #獎金版本
"result_status" => "error", #計算結果
"bonus_array" => $bonus_array #獎金水庫
];
}
return $result_array;
};
## 五年以上長約
function maintenance_longterm_contract_m1_free_charge_bonus_v2_1($ver, $contract_type, $payment_period, $payment_period_amount, $elevator_list_price, $fee_per_st, $commission_fee, $receivable_date_due, $sales_id, $region_director_id, $regular_contract_manger_id = '')
{
$bonus_array = [];
if ($ver == "2.1") {
$discount = ($fee_per_st - $commission_fee) / $elevator_list_price;
#契約總類($contract_type):簽長約並免費送M1 (longcontract_m1_free_charge)
switch ($contract_type) {
case "longcontract_m1_free_charge":
#契約員獎金($sales_bonus)
#合約折扣率($discount):大於80%以上(含)(above_80)、60-79%(含)以上(60_to_79)、折扣率59% (含)以下(below_59)
switch ($discount) {
case ($discount >= 0.8):
switch ($fee_per_st) {
case ($fee_per_st < 3000):
$sales_bonus = ($fee_per_st) * 0.6;
break;
case ($fee_per_st >= 3000 and $fee_per_st < 4000):
$sales_bonus = ($fee_per_st) * 0.7;
break;
case ($fee_per_st >= 4000 and $fee_per_st < 5000):
$sales_bonus = ($fee_per_st) * 0.8;
break;
case ($fee_per_st >= 5000 and $fee_per_st < 6000):
$sales_bonus = ($fee_per_st) * 0.9;
break;
case ($fee_per_st >= 6000):
$sales_bonus = ($fee_per_st) * 1.0;
break;
};
break;
case ($discount >= 0.6 and $discount < 0.8):
switch ($fee_per_st) {
case ($fee_per_st < 3000):
$sales_bonus = ($fee_per_st) * 0.42;
break;
case ($fee_per_st >= 3000 and $fee_per_st <= 4000):
$sales_bonus = ($fee_per_st) * 0.49;
break;
case ($fee_per_st >= 4000 and $fee_per_st < 5000):
$sales_bonus = ($fee_per_st) * 0.56;
break;
case ($fee_per_st >= 5000 and $fee_per_st < 6000):
$sales_bonus = ($fee_per_st) * 0.63;
break;
case ($fee_per_st >= 6000):
$sales_bonus = ($fee_per_st) * 0.7;
break;
};
break;
case ($discount < 0.6):
switch ($fee_per_st) {
case ($fee_per_st < 3000):
$sales_bonus = ($fee_per_st) * 0.3;
break;
case ($fee_per_st >= 3000 and $fee_per_st < 4000):
$sales_bonus = ($fee_per_st) * 0.35;
break;
case ($fee_per_st >= 4000 and $fee_per_st < 5000):
$sales_bonus = ($fee_per_st) * 0.4;
break;
case ($fee_per_st >= 5000 and $fee_per_st < 6000):
$sales_bonus = ($fee_per_st) * 0.45;
break;
case ($fee_per_st >= 6000):
$sales_bonus = ($fee_per_st) * 0.5;
break;
};
break;
};
#地區處長獎金($region_director_bonus)
$region_director_bonus = 170;
#專任契約經理獎金($regular_contract_manger_bonus)
$regular_contract_manger_bonus = 300;
break;
};
#付款方式$payment_period: 每月支付(monthly), 2月1次(bimonthly), 季付(quarterly), 半年付(semiannually), 年付(annually)
array_push($bonus_array, [
"bonus_type" => "2", #獎金名稱
"bonus_receiver" => $region_director_id, #發放人員
"bonus_amount" => round($region_director_bonus), #金額
"pay_day_due" => date("Y-m-d", strtotime("$receivable_date_due +12 months")), #預計發放時間
"bonus_regulation" => "訂金收回後次月發放" #發放規定
]);
#專任契約經理獎金
if ($regular_contract_manger_id != '') {
array_push($bonus_array, [
"bonus_type" => "3", #獎金名稱
"bonus_receiver" => $regular_contract_manger_id, #發放人員
"bonus_amount" => round($regular_contract_manger_bonus), #金額
"pay_day_due" => date("Y-m-d", strtotime("$receivable_date_due +12 months")), #預計發放時間
"bonus_regulation" => "訂金收回後次月發放" #發放規定
]);
}
#地區處長獎金、專任契約經理、契約員獎金
switch ($payment_period) {
#簽長約免費贈送控制系統,因屬於公司特殊政策,所以無汰改獎金,合約期內每月領取契約獎金
#總支付期數$payment_period_amount: 總支付期數,依規定5年約至少60期,
#年繳
case 'annually':
$payment_ratio_due_array = array();
$a = $payment_period_amount / 12;
for ($i = 0; $i < $a; $i++) {
array_push($payment_ratio_due_array, 1 / $a);
}
$payday_due_array = array();
for ($i = 0; $i < $a; $i++) {
array_push($payday_due_array, $i + 1);
}
for ($i = 0; $i < count($payment_ratio_due_array); $i++) {
if ($i < count($payment_ratio_due_array) - 1) {
$current_bonus = round($sales_bonus * $payment_ratio_due_array[$i]); #金額
} else {
$current_bonus = round($sales_bonus - $i * round($sales_bonus * $payment_ratio_due_array[$i])); #最後一次金額
};
array_push($bonus_array, [
"bonus_type" => "1", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => round($current_bonus), #金額
"pay_day_due" => date("Y-m-d", strtotime("$receivable_date_due +$payday_due_array[$i] year")), #預計發放時間
"bonus_regulation" => "每次收款後,按收款比率次月發放" #發放規定
]);
}
break;
#半年繳
case 'semiannually':
$payment_ratio_due_array = array();
$a = $payment_period_amount / 6;
for ($i = 0; $i < $a; $i++) {
array_push($payment_ratio_due_array, 1 / $a);
}
$payday_due_array = array();
for ($i = 0; $i < $a; $i++) {
array_push($payday_due_array, ($i + 1) * 6);
}
for ($i = 0; $i < count($payment_ratio_due_array); $i++) {
if ($i < count($payment_ratio_due_array) - 1) {
$current_bonus = round($sales_bonus * $payment_ratio_due_array[$i]); #金額
} else {
$current_bonus = round($sales_bonus - $i * round($sales_bonus * $payment_ratio_due_array[$i])); #最後一次金額
};
array_push($bonus_array, [
"bonus_type" => "1", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => round($current_bonus), #金額
"pay_day_due" => date("Y-m-d", strtotime("$receivable_date_due +$payday_due_array[$i] months")), #預計發放時間
"bonus_regulation" => "每次收款後,按收款比率次月發放" #發放規定
]);
}
break;
#季繳
case 'quarterly':
$a = $payment_period_amount / 3;
$payment_ratio_due_array = array();
for ($i = 0; $i < $a; $i++) {
array_push($payment_ratio_due_array, 1 / $a);
}
$payday_due_array = array();
for ($i = 0; $i < $a; $i++) {
array_push($payday_due_array, ($i + 1) * 4);
}
for ($i = 0; $i < count($payment_ratio_due_array); $i++) {
if ($i < count($payment_ratio_due_array) - 1) {
$current_bonus = round($sales_bonus * $payment_ratio_due_array[$i]); #金額
} else {
$current_bonus = round($sales_bonus - $i * round($sales_bonus * $payment_ratio_due_array[$i])); #最後一次金額
};
array_push($bonus_array, [
"bonus_type" => "1", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => round($current_bonus), #金額
"pay_day_due" => date("Y-m-d", strtotime("$receivable_date_due +$payday_due_array[$i] months")), #預計發放時間
"bonus_regulation" => "每月收款後,按收款比率次月發放" #發放規定
]);
}
break;
#雙月繳
case 'bimonthly':
$a = $payment_period_amount / 2;
$payment_ratio_due_array = array();
for ($i = 0; $i < $a; $i++) {
array_push($payment_ratio_due_array, 1 / $a);
}
$payday_due_array = array();
for ($i = 0; $i < $a; $i++) {
array_push($payday_due_array, ($i + 1) * 2);
}
for ($i = 0; $i < count($payment_ratio_due_array); $i++) {
if ($i < count($payment_ratio_due_array) - 1) {
$current_bonus = round($sales_bonus * $payment_ratio_due_array[$i]); #金額
} else {
$current_bonus = round($sales_bonus - $i * round($sales_bonus * $payment_ratio_due_array[$i])); #最後一次金額
};
array_push($bonus_array, [
"bonus_type" => "1", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => round($current_bonus), #金額
"pay_day_due" => date("Y-m-d", strtotime("$receivable_date_due +$payday_due_array[$i] months")), #預計發放時間
"bonus_regulation" => "每月收款後,按收款比率次月發放" #發放規定
]);
}
break;
break;
#月繳
case 'monthly':
#產生契約員每個月的獎金應發比例
$payment_ratio_due_array = array();
for ($i = 0; $i < $payment_period_amount; $i++) {
array_push($payment_ratio_due_array, 1 / $payment_period_amount);
}
$payday_due_array = array();
for ($i = 0; $i < $payment_period_amount; $i++) {
array_push($payday_due_array, $i + 1);
}
for ($i = 0; $i < count($payment_ratio_due_array); $i++) {
if ($i < count($payment_ratio_due_array) - 1) {
$current_bonus = round($sales_bonus * $payment_ratio_due_array[$i]); #金額
} else {
$current_bonus = round($sales_bonus - $i * round($sales_bonus * $payment_ratio_due_array[$i])); #最後一次金額
};
array_push($bonus_array, [
"bonus_type" => "1", #獎金名稱
"bonus_receiver" => $sales_id, #發放人員
"bonus_amount" => round($current_bonus), #金額
"pay_day_due" => date("Y-m-d", strtotime("$receivable_date_due +$payday_due_array[$i] months")), #預計發放時間
"bonus_regulation" => "每月收款後,按收款比率次月發放" #發放規定
]);
}
break;
}
$result_array = [
"ver" => $ver, #獎金版本
"result_status" => "success", #計算結果
"bonus_array" => $bonus_array #獎金水庫
];
} else {
array_push($bonus_array, [
"bonus_type" => "error", #獎金名稱
"bonus_receiver" => "error", #發放人員
"bonus_amount" => 0, #金額
"pay_day_due" => "9999-1-1", #預計發放時間
"bonus_regulation" => "error" #發放規定
]);
$result_array = [
"ver" => $ver, #獎金版本
"result_status" => "error", #計算結果
"bonus_array" => $bonus_array #獎金水庫
];
}
return $result_array;
};

117
wms/cont/api/postElevatorPricereview.php

@ -26,24 +26,111 @@ $status = $_POST['status'];
$elevators = json_decode($_POST['elevators'], true);
$otherOptions = json_decode($_POST['otherOptions'], true);
$payment_kind = $_POST['pay_method'];
$current_date = date("Y-M-d H:i:s");
$current_date = date("Y-m-d H:i:s");
$total_price = $_POST['total_price'];
$total_sale_price = $_POST['total_sale_price'];
$sql_str = "SELECT status FROM con_maintance_examine_apply WHERE (vol_no, apply_key) = (:vol_no, :apply_key) ";
$attatch1 = !empty($_FILES['attatch1']) ? $_FILES['attatch1'] : null;
$attatch2 = !empty($_FILES['attatch2']) ? $_FILES['attatch2'] : null;
$attatch1_src = null;
$attatch2_src = null;
$sql_str = "SELECT status, attatch1, attatch2 FROM con_maintance_examine_apply WHERE (vol_no, apply_key) = (:vol_no, :apply_key) ";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':vol_no', $vol_no);
$stmt->bindParam(':apply_key', $apply_key);
$stmt->execute();
$contract = $stmt->fetch(PDO::FETCH_ASSOC);
if(!empty($attatch1)){
$file = $attatch1;
$file_name = $file['name'];
$file_type = $file['type'];
$tmp_name = $file['tmp_name'];
$file_size = $file['size'];
$error = $file['error'];
$rand = strval(rand(1000,1000000));
$now = (string)date('YmdHis');
$imgsrc = 'm'.$now.$rand.$file_name;
$allow_ext = array('jpeg', 'jpg', 'png', 'gif','JPG','JPEG','PNG','pdf','PDF','docx', 'doc', 'DOCX', 'DOC', 'xlsx', 'xls', 'XLSX', 'XLS');
//設定上傳位置
$path = './pricereview-uploads/';
$attatch1_src = $path.$imgsrc;
if (!file_exists($path)) { mkdir($path); }
if ($error == 0) {
$ext = pathinfo($file_name, PATHINFO_EXTENSION);
if (!in_array($ext, $allow_ext)) {
echo "<script>alert('檔案類型不符合,請選擇 jpg、png、excel、word 、pdf檔案');window.history.go(-1);</script>";
exit('檔案類型不符合,請選擇 jpg、png、excel、word 、pdf檔案');
}
$result = move_uploaded_file($tmp_name, '.'.$attatch1_src);
} else {
//這裡表示上傳有錯誤, 匹配錯誤編號顯示對應的訊息
switch ($error) {
case 1: echo '上傳檔案超過 upload_max_filesize 容量最大值'; break;
case 2: echo '上傳檔案超過 post_max_size 總容量最大值'; break;
case 3: echo '檔案只有部份被上傳'; break;
case 4: echo '沒有檔案被上傳'; break;
case 6: echo '找不到主機端暫存檔案的目錄位置'; break;
case 7: echo '檔案寫入失敗'; break;
case 8: echo '上傳檔案被PHP程式中斷,表示主機端系統錯誤'; break;
}
}
}else{
if($contract){
$attatch1_src = $contract['attatch1'];
}
}
if(!empty($attatch2)){
$file = $attatch2;
$file_name = $file['name'];
$file_type = $file['type'];
$tmp_name = $file['tmp_name'];
$file_size = $file['size'];
$error = $file['error'];
$rand = strval(rand(1000,1000000));
$now = (string)date('YmdHis');
$imgsrc = 'm'.$now.$rand.$file_name;
$allow_ext = array('jpeg', 'jpg', 'png', 'gif','JPG','JPEG','PNG','pdf','PDF','docx', 'doc', 'DOCX', 'DOC', 'xlsx', 'xls', 'XLSX', 'XLS');
//設定上傳位置
$path = './pricereview-uploads/';
$attatch2_src = $path.$imgsrc;
if (!file_exists($path)) { mkdir($path); }
if ($error == 0) {
$ext = pathinfo($file_name, PATHINFO_EXTENSION);
if (!in_array($ext, $allow_ext)) {
echo "<script>alert('檔案類型不符合,請選擇 jpg、png、excel、word 、pdf檔案');window.history.go(-1);</script>";
exit('檔案類型不符合,請選擇 jpg、png、excel、word 、pdf檔案');
}
$result = move_uploaded_file($tmp_name, '.'.$attatch2_src);
} else {
//這裡表示上傳有錯誤, 匹配錯誤編號顯示對應的訊息
switch ($error) {
case 1: echo '上傳檔案超過 upload_max_filesize 容量最大值'; break;
case 2: echo '上傳檔案超過 post_max_size 總容量最大值'; break;
case 3: echo '檔案只有部份被上傳'; break;
case 4: echo '沒有檔案被上傳'; break;
case 6: echo '找不到主機端暫存檔案的目錄位置'; break;
case 7: echo '檔案寫入失敗'; break;
case 8: echo '上傳檔案被PHP程式中斷,表示主機端系統錯誤'; break;
}
}
}else{
if($contract){
$attatch2_src = $contract['attatch2'];
}
}
$conn->beginTransaction();
try{
if(!$contract){
$sql_str = "INSERT INTO con_maintance_examine_apply (apply_key, vol_no, customer, address, case_name ,brand, num, salesman, maintain_kind, contract_begin_date, contract_end_date, contract_kind, payment_kind, progress_remark, service_fee, total_price, total_sale_price, penalty, deposit_rate, keep_rate, warranty_rate, memo, status, creater, create_at)
VALUES (:apply_key, :vol_no, :customer, :address, :case_name ,:brand, :num, :salesman, :maintain_kind, :contract_begin_date, :contract_end_date, :contract_kind, :payment_kind, :progress_remark, :service_fee, :total_price, :total_sale_price, :penalty, :deposit_rate, :keep_rate, :warranty_rate, :memo, :status, :creater, :create_at)";
$sql_str = "INSERT INTO con_maintance_examine_apply (apply_key, vol_no, customer, address, case_name ,brand, num, salesman, maintain_kind, contract_begin_date, contract_end_date, contract_kind, payment_kind, progress_remark, service_fee, total_price, total_sale_price, penalty, deposit_rate, keep_rate, warranty_rate, memo, status, attatch1, attatch2, creater, create_at)
VALUES (:apply_key, :vol_no, :customer, :address, :case_name ,:brand, :num, :salesman, :maintain_kind, :contract_begin_date, :contract_end_date, :contract_kind, :payment_kind, :progress_remark, :service_fee, :total_price, :total_sale_price, :penalty, :deposit_rate, :keep_rate, :warranty_rate, :memo, :status, :attatch1, :attatch2, :creater, :create_at)";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':apply_key', $apply_key);
$stmt->bindParam(':vol_no', $vol_no);
@ -68,15 +155,17 @@ try{
$stmt->bindParam(':warranty_rate', $warranty_rate);
$stmt->bindParam(':memo', $remark);
$stmt->bindParam(':status', $status);
$stmt->bindParam(':attatch1', $attatch1_src);
$stmt->bindParam(':attatch2', $attatch2_src);
$stmt->bindParam(':creater', $creater);
$stmt->bindParam(':create_at', $current_date);
$stmt->execute();
$sql_str = "INSERT INTO con_maintance_examine_clear (apply_key, item_no, register_code, elevator_brand, elevator_kind, spec, weight, speed, stop, floors, persons, elevator_num, useful_years, last_check_date, speed_governors_check_expense, maintain_times, is_m1_bundle, maintain_months, maintain_period, maintain_method, stand_price, contract_price, sold_price, commission_expense, management_expense, annual_survey_expense, service_expense, cmstatus, updated_at, creater, created_at)
VALUES (:apply_key, :item_no, :register_code, :elevator_brand, :elevator_kind, :spec, :weight, :speed, :stop, :floors, :persons, :elevator_num, :useful_years, :last_check_date, :speed_governors_check_expense, :maintain_times, :is_m1_bundle, :maintain_months, :maintain_period, :maintain_method, :stand_price, :contract_price, :sold_price, :commission_expense, :management_expense, :annual_survey_expense, :service_expense, :cmstatus, :updated_at, :creater, :created_at) ";
$sql_str = "INSERT INTO con_maintance_examine_clear (apply_key, item_no, register_code, elevator_brand, elevator_kind, spec, weight, speed, stop, floors, persons, elevator_num, useful_years, last_check_date, speed_governors_check_expense, maintain_times, is_m1_bundle, maintain_months, maintain_period, maintain_method, stand_price, contract_price, sold_price, commission_expense, management_expense, annual_survey_expense, service_expense, inspection_fee, cmstatus, updated_at, creater, created_at)
VALUES (:apply_key, :item_no, :register_code, :elevator_brand, :elevator_kind, :spec, :weight, :speed, :stop, :floors, :persons, :elevator_num, :useful_years, :last_check_date, :speed_governors_check_expense, :maintain_times, :is_m1_bundle, :maintain_months, :maintain_period, :maintain_method, :stand_price, :contract_price, :sold_price, :commission_expense, :management_expense, :annual_survey_expense, :service_expense, :inspection_fee, :cmstatus, :updated_at, :creater, :created_at) ";
foreach($elevators as $elevator){
if(empty($elevator['permitNumber'])) $register_code = "A";
$register_code = (empty($elevator['permitNumber'])) ? "A" : $elevator['permitNumber'];
if($elevator['spec'] == "MAE100") $elevator_kind = "A";
if($elevator['spec'] == "MAF100") $elevator_kind = "B";
@ -118,6 +207,7 @@ try{
$stmt->bindParam(':management_expense', $elevator['management_expense']);
$stmt->bindParam(':annual_survey_expense', $elevator['yearCheckFee']);
$stmt->bindParam(':service_expense', $elevator['service_expense']);
$stmt->bindParam(':inspection_fee', $elevator['inspectionFee']);
$stmt->bindParam(':cmstatus', $cmstatus);
$stmt->bindParam(':updated_at', $updated_at);
$stmt->bindParam(':creater', $creater);
@ -164,6 +254,8 @@ try{
memo=:memo,
brand=:brand,
status=:status,
attatch1=:attatch1,
attatch2=:attatch2,
updated_at=:updated_at,
progress_remark=:progress_remark
WHERE apply_key=:apply_key AND vol_no=:vol_no";
@ -188,6 +280,8 @@ try{
$stmt->bindParam(':memo', $remark);
$stmt->bindParam(':brand', $brand);
$stmt->bindParam(':status', $status);
$stmt->bindParam(':attatch1', $attatch1_src);
$stmt->bindParam(':attatch2', $attatch2_src);
$stmt->bindParam(':updated_at', $current_date);
$stmt->execute();
@ -213,8 +307,8 @@ try{
$stmt->execute();
}
foreach($onlyInNewIds as $newidx){
$sql_str = "INSERT INTO con_maintance_examine_clear (apply_key, item_no, register_code, elevator_brand, elevator_kind, spec, weight, speed, stop, floors, persons, elevator_num, useful_years, last_check_date, speed_governors_check_expense, maintain_times, is_m1_bundle, maintain_months, maintain_period, maintain_method, stand_price, contract_price, sold_price, commission_expense, management_expense, annual_survey_expense, service_expense, cmstatus, updated_at, creater, created_at)
VALUES (:apply_key, :item_no, :register_code, :elevator_brand, :elevator_kind, :spec, :weight, :speed, :stop, :floors, :persons, :elevator_num, :useful_years, :last_check_date, :speed_governors_check_expense, :maintain_times, :is_m1_bundle, :maintain_months, :maintain_period, :maintain_method, :stand_price, :contract_price, :sold_price, :commission_expense, :management_expense, :annual_survey_expense, :service_expense, :cmstatus, :updated_at, :creater, :created_at) ";
$sql_str = "INSERT INTO con_maintance_examine_clear (apply_key, item_no, register_code, elevator_brand, elevator_kind, spec, weight, speed, stop, floors, persons, elevator_num, useful_years, last_check_date, speed_governors_check_expense, maintain_times, is_m1_bundle, maintain_months, maintain_period, maintain_method, stand_price, contract_price, sold_price, commission_expense, management_expense, annual_survey_expense, service_expense, inspection_fee, cmstatus, updated_at, creater, created_at)
VALUES (:apply_key, :item_no, :register_code, :elevator_brand, :elevator_kind, :spec, :weight, :speed, :stop, :floors, :persons, :elevator_num, :useful_years, :last_check_date, :speed_governors_check_expense, :maintain_times, :is_m1_bundle, :maintain_months, :maintain_period, :maintain_method, :stand_price, :contract_price, :sold_price, :commission_expense, :management_expense, :annual_survey_expense, :service_expense, :inspection_fee, :cmstatus, :updated_at, :creater, :created_at) ";
$elevator = array_values(array_filter($elevators, fn($el)=> $el['id'] == $newidx))[0];
$register_code = empty($elevator['permitNumber']) ? "A" : $elevator['permitNumber'];
if($elevator['spec'] == "MAE100") $elevator_kind = "A";
@ -257,6 +351,7 @@ try{
$stmt->bindParam(':management_expense', $elevator['management_expense']);
$stmt->bindParam(':annual_survey_expense', $elevator['yearCheckFee']);
$stmt->bindParam(':service_expense', $elevator['service_expense']);
$stmt->bindParam(':inspection_fee', $elevator['inspectionFee']);
$stmt->bindParam(':cmstatus', $cmstatus);
$stmt->bindParam(':updated_at', $updated_at);
$stmt->bindParam(':creater', $creater);
@ -290,6 +385,7 @@ try{
management_expense=:management_expense,
annual_survey_expense=:annual_survey_expense,
service_expense=:service_expense,
inspection_fee=:inspection_fee,
cmstatus=:cmstatus,
updated_at=:updated_at
WHERE (apply_key, item_no) = (:apply_key, :item_no)";
@ -336,6 +432,7 @@ try{
$stmt->bindParam(':management_expense', $elevator['management_expense']);
$stmt->bindParam(':annual_survey_expense', $elevator['yearCheckFee']);
$stmt->bindParam(':service_expense', $elevator['service_expense']);
$stmt->bindParam(':inspection_fee', $elevator['inspectionFee']);
$stmt->bindParam(':cmstatus', $cmstatus);
$stmt->bindParam(':updated_at', $updated_at);
@ -469,7 +566,7 @@ try{
$permissions = [$manager];
$creater = "system";
$create_at = $current_date;
$url = "cont/pricereviewCheck.php?id=" . $apply_key;
$url = "cont/pricereviewCheck.php?apply_key=" . $apply_key;
sendSystemNotice($kind, $related_id, $title, $content, $havaread, $permissions, $creater, $create_at, $url);
}
echo "success";

3
wms/cont/api/postFlow.php

@ -7,7 +7,8 @@ function createFlow($mid, $current_assigner, $flow_code, $ekind, $form_key=null)
$system_id = "prm";
if($ekind == "新梯") $flow_id = "prm01";
if($ekind == "汰改") $flow_id = "prm02";
if($ekind == "保養") $flow_id = "prm03";
if($ekind == "修理") $flow_id = "prm03";
if($ekind == "保養") $flow_id = "prm04";
if($form_key == null){
$sql_str = "SELECT appwms.nextval('form_key') form_key";

127
wms/cont/api/postPricereviewSign.php

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

49
wms/cont/conn.php

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

2
wms/cont/js/axios.min.js

File diff suppressed because one or more lines are too long

302
wms/cont/js/pricereviewAlpine.js

@ -38,10 +38,11 @@ const pricereviewCreate = ()=>{
method:'', //保養方式
checkYear:'', //竣工檢查年度
lastDate:'', // 上次年檢日期
yearCheckFee:'', //年檢費用
yearCheckFee:1260, //年檢費用
price:'', //公司發布價(月)
qty:1, //電梯數量
sale_price:'', //契約報價
inspectionFee:0, //檢驗費
},
otherOptions: otherOptions,
modalOtherOptionInfo:{
@ -61,6 +62,9 @@ const pricereviewCreate = ()=>{
deposit_rate: deposit_rate,
keep_rate: keep_rate,
warranty_rate: warranty_rate,
attatch1:'',
attatch2:'',
error:[],
openCreateElevatorModal(){
this.modalShow.elevator = true;
body.style.overflow = 'hidden';
@ -82,10 +86,11 @@ const pricereviewCreate = ()=>{
method:'', //保養方式
checkYear:'', //竣工檢查年度
lastDate:'', // 上次年檢日期
yearCheckFee:'', //年檢費用
yearCheckFee:1260, //年檢費用
price:'', //公司發布價(月)
qty:1, //電梯數量
sale_price:'', //契約報價
inspectionFee:0,
};
},
createElevatorFn(){
@ -96,6 +101,7 @@ const pricereviewCreate = ()=>{
// if(this.modalElevatorInfo.speed == '') return alert("請選擇速度");
// if(this.modalElevatorInfo.brand == '') return alert("請選擇品牌");
// if(this.modalElevatorInfo.months == '') return alert("請輸入保養月數");
if(this.modalElevatorInfo.m1 == 'Y' && this.modalElevatorInfo.months < 60) return alert('贈送M1保養月數不得小於60!')
// if(this.modalElevatorInfo.method == '') return alert("請選擇保養方式");
// if(this.modalElevatorInfo.cycle == '') return alert("請選擇保養週期");
// if(this.modalElevatorInfo.checkYear == '') return alert("請輸入竣工檢查年度");
@ -120,7 +126,8 @@ const pricereviewCreate = ()=>{
yearCheckFee: this.modalElevatorInfo.yearCheckFee,
price: this.modalElevatorInfo.price,
qty: this.modalElevatorInfo.qty,
sale_price: this.modalElevatorInfo.sale_price
sale_price: this.modalElevatorInfo.sale_price,
inspectionFee: this.modalElevatorInfo.inspectionFee
})
this.hideCreateElevatorModal();
},
@ -141,6 +148,7 @@ const pricereviewCreate = ()=>{
const price = this.elevators[idx].price;
const qty = this.elevators[idx].qty;
const sale_price = this.elevators[idx].sale_price;
const inspectionFee = this.elevators[idx].inspectionFee;
this.total_spec ++;
this.elevators.push({
id: this.total_spec,
@ -160,7 +168,8 @@ const pricereviewCreate = ()=>{
yearCheckFee: yearCheckFee,
price: price,
qty: qty,
sale_price: sale_price
sale_price: sale_price,
inspectionFee: inspectionFee
})
},
removeElevator(id){
@ -268,6 +277,25 @@ const pricereviewCreate = ()=>{
removeOtherOption(id){
this.otherOptions = this.otherOptions.filter(option=> option.id != id)
},
checkMonths(idx=null){
if(this.elevators[idx].months < 60 && this.elevators[idx].m1 == 'Y'){
alert('贈送M1保養月數不得小於60!')
this.elevators[idx].months = 60
}
},
changeMonths(idx=null){
if(idx===null){
if(this.modalElevatorInfo.m1 == 'N') return;
if(this.modalElevatorInfo.months < 60){
this.modalElevatorInfo.months = 60
}
return;
}
if(this.elevators[idx].m1 == 'N') return;
if(this.elevators[idx].months < 60){
this.elevators[idx].months = 60
}
},
get totalPrice(){
let total_price = this.elevators.reduce((accumulator, el) => accumulator + Number(el.price*el.months), 0);
let total_other_price = this.otherOptions.reduce((accumulator, option) => accumulator + Number(option.price*option.num), 0);
@ -275,7 +303,7 @@ const pricereviewCreate = ()=>{
},
get totalSalePrice(){
let total_sale_price = this.elevators.reduce((accumulator, el) => accumulator + Number(el.sale_price*el.months), 0);
return total_sale_price + Number(this.serviceFee);
return total_sale_price;
},
get totalElevatorsNum(){
let total_num = this.elevators.reduce((accumulator, el) => accumulator + Number(el.qty), 0);
@ -289,6 +317,9 @@ const pricereviewCreate = ()=>{
let total_other_price = this.otherOptions.reduce((accumulator, option) => accumulator + Number(option.price*option.num), 0);
return total_other_price;
},
get discountRate(){
return Math.round((Number(this.totalSalePrice) - Number(this.serviceFee)) / Number(this.totalPrice) * 1000) / 1000
},
async getModalElevatorPrice(){
const spec = this.modalElevatorInfo.spec
const person = this.modalElevatorInfo.person
@ -345,6 +376,8 @@ const pricereviewCreate = ()=>{
form.append('warranty_rate', this.warranty_rate);
form.append('remark', this.remark);
form.append('creater', user_id);
form.append('attatch1', this.attatch1);
form.append('attatch2', this.attatch2);
form.append('pay_method', this.pay_method);
form.append('status', 'Y1');
@ -362,7 +395,53 @@ const pricereviewCreate = ()=>{
}
})
},
validation(){
this.error = [];
if(this.totalElevatorsNum == 0) this.error.push("請至少輸入一種電梯");
for(let i=0;i<this.elevators.length;i++){
if(this.elevators[i].spec =='') this.error.push("整機單價:規格不能為空");
if(this.elevators[i].person =='') this.error.push("整機單價:人數不能為空");
if(this.elevators[i].stop =='' || this.elevators[i].stop <= 0 || !Number.isInteger(Number(this.elevators[i].stop))) this.error.push("整機單價:停數需為正整數");
if(this.elevators[i].speed =='') this.error.push("整機單價:速度不能為空");
if(this.elevators[i].price =='') this.error.push("整機單價:公司發布價無此規格");
if(this.elevators[i].sale_price == '' || this.elevators[i].spec_price <= 0) this.error.push("整機單價:售價需大於0");
if(this.elevators[i].brand == '') this.error.push("整機單價:請選擇電梯品牌");
if(this.elevators[i].cycle == '') this.error.push("整機單價:請選擇保養週期");
if(this.elevators[i].checkYear == '') this.error.push("整機單價:請輸入竣檢年度");
if(this.elevators[i].yearCheckFee == '') this.error.push("整機單價:請輸入年檢日期");
if(this.elevators[i].lastDate == '' || this.elevators[i].lastDate == '0000-00-00') this.error.push("整機單價:請輸入最後年檢日期");
if(this.elevators[i].months == '' || this.elevators[i].months <= 0) this.error.push("整機單價:保養月數需大於0");
if(this.elevators[i].qty <= 0) this.error.push("整機單價:電梯數量需大於0");
if(this.elevators[i].weight ==='' || this.elevators[i].weight <= 0) this.error.push("整機單價:電梯載重需大於0");
if(this.elevators[i].inspectionFee ==='' || this.elevators[i].inspectionFee < 0) this.error.push("整機單價:檢測費用需大於0");
}
for(let i=0;i<this.otherOptions.length;i++){
if(this.otherOptions[i].name == '' ) this.error.push("附加項目:名稱不得為空");
if(this.otherOptions[i].price === '' ) this.error.push("附加項目:價錢需大於0");
if(this.otherOptions[i].num == '' ) this.error.push("附加項目:數量需大於0");
if(this.otherOptions[i].toElevator.length <= 0) this.error.push("附加項目:需配對至電梯")
}
if(this.contract_status == '') this.error.push("請選擇契約性質");
if(this.pay_method == '') this.error.push("請選擇付款方式");
if(this.case_name == '') this.error.push("請輸入案件名稱");
if(this.startDate == '' || this.startDate == '0000-00-00') this.error.push("請輸入合約開始日期");
if(this.endDate == '' ||this.endDate == '0000-00-00') this.error.push("請輸入合約結束日期");
if(this.error.length > 0){
let errortext = '';
this.error.forEach(err=>{
errortext += err+'\n';
})
alert(errortext)
console.log(this.error);
}
return this.error.length > 0 ? false : true
},
submit(){
const validation = this.validation();
if(!validation) return
const form = new FormData();
form.append('vol_no', this.vol_no);
form.append('apply_key', this.apply_key);
@ -384,6 +463,8 @@ const pricereviewCreate = ()=>{
form.append('warranty_rate', this.warranty_rate);
form.append('remark', this.remark);
form.append('creater', user_id);
form.append('attatch1', this.attatch1);
form.append('attatch2', this.attatch2);
form.append('pay_method', this.pay_method);
form.append('status', 'YS');
@ -398,7 +479,7 @@ const pricereviewCreate = ()=>{
if(res.data == 'success'){
alert("送審成功!");
// window.location.reload();
// window.location.href = './pricereview-index.php?' + token;
window.location.href = '../index.php?' + token;
}
})
},
@ -407,5 +488,214 @@ const pricereviewCreate = ()=>{
const res = await axios.get('./api/getUsername.php', {params: {user_id: user_id}})
return res.data ;
},
uploadFiles(e, attatch){
if(attatch == 1){
this.attatch1 = e.target.files[0]
}
if(attatch == 2){
this.attatch2 = e.target.files[0]
}
},
async getBonus(idx){
let contract_type = '';
if(this.contract_status == 1){
contract_type = 'new'
}else if(this.contract_status == 2){
contract_type = 'free_to_charge'
}else if(this.contract_status == 3){
contract_type = 'renew_priceissue'
}
const contract_years = this.isDifferenceMoreThanAYear(this.startDate, this.endDate);
const receivable_date_due = this.getNext25thDate(this.startDate);
const res = await axios.get('./api/maintaenance_contract_bonus.php', {params:
{
'contract_type':contract_type,
'contract_years': contract_years,
'discount': this.discountRate,
'fee_per_st': this.elevators[idx].sale_price,
'receivable_date_due':receivable_date_due,
'sales_id': user_id,
'region_manger_id': 'M0174',
'regular_contract_manger_id': 'M0174',
}})
console.log(res.data);
},
isDifferenceMoreThanAYear(startDate, endDate) {
const oneYear = 1000 * 60 * 60 * 24 * 365; // 毫秒數
const difference = Math.abs(endDate - startDate);
return difference > oneYear ? 'above_two' : 'one';
},
getNext25thDate(dateString) {
// 將傳入的日期字串轉換為 Date 物件
let date = new Date(dateString);
// 如果日期大於 25,則將月份加一
if (date.getDate() > 25) {
// 增加一個月
date.setMonth(date.getMonth() + 1);
}
// 設定日期為 25 號
date.setDate(25);
// 將 Date 物件格式化為 YYYY-MM-DD 字串
let year = date.getFullYear();
let month = date.getMonth() + 1; // 月份是從 0 開始的,所以加 1
month = month < 10 ? '0' + month : month; // 確保月份是兩位數
return `${year}-${month}-25`;
}
}
}
const pricereviewCheck = ()=>{
return {
init(){
console.log(123);
this.elevators = elevators;
this.otherOptions = otherOptions;
this.elevators.forEach(el=>{
el.otherOptions = []
el.otherOptionsTotalPrice = 0;
})
this.elevators.forEach((elevator, idx)=>{
if(elevator.maintain_method == 'A'){
elevator.maintain_method = '全包'
}else if(elevator.maintain_method == 'B'){
elevator.maintain_method = '半包'
}else if(elevator.maintain_method == 'C'){
elevator.maintain_method = '清包'
}
if(elevator.maintain_period == 1){
elevator.maintain_period = '月保'
}else if(elevator.maintain_period == 2){
elevator.maintain_period = '月保兩次'
}else if(elevator.maintain_period == 3){
elevator.maintain_period = '雙月保'
}else if(elevator.maintain_period == 4){
elevator.maintain_period = '季保'
}
this.elevators_total_price += elevator.stand_price*elevator.maintain_months
this.otherOptions.forEach(option=>{
if(option.option_relate_spec == elevator.item_no){
elevator.otherOptionsTotalPrice += option.item_unit_price * option.item_qty
this.elevators[idx].otherOptions.push({
'id': option.id,
'item_spec': option.item_spec,
'item_unit_price': option.item_unit_price,
'item_qty': option.item_qty,
'mi': Math.round(option.item_unit_price),
})
}
})
})
console.log(this.elevators);
if(payment_kind == "A40006"){
this.payment_kind = "年繳";
}else if(payment_kind == "A40007"){
this.payment_kind = "季繳";
}else if(payment_kind == "A40003"){
this.payment_kind = "月繳";
}else if(payment_kind == "A40004"){
this.payment_kind = "雙月繳";
}else if(payment_kind == "A40005"){
this.payment_kind = "半年繳";
}
this.sign1 = this.getUsername(sign1)
this.sign2 = this.getUsername(sign2)
this.sign3 = this.getUsername(sign3)
this.sign4 = this.getUsername(sign4)
},
user_id:user_id,
apply_key:apply_key,
contractno: vol_no,
salesman: salesman,
customer: customer,
total_price: total_price,
total_sale_price: Number(total_sale_price),
elevators: [],
otherOptions:[],
elevators_total_price:0,
payment_kind: payment_kind,
memo: memo,
address: address,
case_name: case_name,
maintain_months: maintain_months,
service_fee: service_fee,
penalty: penalty,
deposit_rate: deposit_rate,
keep_rate: keep_rate,
warranty_rate: warranty_rate,
contract_begin_date: contract_begin_date,
contract_end_date: contract_end_date,
sign1:'',
sign2:'',
sign3:'',
sign4:'',
reviewcomment:'',
get single_amount(){
console.log(this.payment_kind);
let month_amount = Number(this.total_sale_price) / Number(this.maintain_months);
let pay_times = 0;
let amount_times = 0;
if(payment_kind == "A40006"){
amount_times = Math.round(month_amount*12)
pay_times = this.maintain_months / 12
}
if(payment_kind == "A40007"){
amount_times = Math.round(month_amount*3)
pay_times = this.maintain_months / 3
}
if(payment_kind == "A40003"){
amount_times = Math.round(month_amount)
pay_times = this.maintain_months / 1
}
if(payment_kind == "A40004"){
amount_times = Math.round(month_amount*2)
pay_times = this.maintain_months / 2
}
if(payment_kind == "A40005"){
amount_times = Math.round(month_amount*6)
pay_times = this.maintain_months / 6
}
return {
'amount_times': amount_times,
'pay_times': pay_times
}
},
get otherOptionsTotalPrice(){
return this.otherOptions.reduce((total, option) => {
return total + (option.item_qty * option.item_unit_price);
}, 0);
},
async getUsername(user_id){
if(user_id == '') return '---'
const res = await axios.get('./api/getUsername.php', {params: {user_id: user_id}})
return res.data ;
},
check(sign, status, user_id = this.user_id ){
console.log(sign);
const form = new FormData();
form.append('sign', sign);
form.append('mid', this.apply_key);
form.append('result', status);
form.append('user_id', user_id);
form.append('reviewcomment', this.reviewcomment);
form.append('currentSignId', currentSignId);
form.append('token', token);
form.append('form_key', form_key);
axios.post('./api/postPricereviewSign.php', form).then(res=>{
console.log(res.data);
if(res.data == 1){
alert("簽核成功!");
window.location.reload()
}
})
},
}
}

BIN
wms/cont/pricereview-uploads/m20240312185746914784kobe.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
wms/cont/pricereview-uploads/m20240312185839177524curry.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
wms/cont/pricereview-uploads/m202403121858392743201.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
wms/cont/pricereview-uploads/m202403121903019998611074565_507619045984793_769543820_o.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

BIN
wms/cont/pricereview-uploads/m202403121903566135334OlaIEQjXAZDasK9Pd1Jxb.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
wms/cont/pricereview-uploads/m202403121905046665914OlaIEQjXAZDasK9Pd1Jxb.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
wms/cont/pricereview-uploads/m202403121907016007094OlaIEQjXAZDasK9Pd1Jxb.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
wms/cont/pricereview-uploads/m202403121907512357761048100_507643175982380_1454281158_o.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 KiB

BIN
wms/cont/pricereview-uploads/m202403121907573946501074565_507619045984793_769543820_o.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

BIN
wms/cont/pricereview-uploads/m20240312191226166002431968299_122131716218151547_1355033508899312082_n.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 614 KiB

BIN
wms/cont/pricereview-uploads/m202403121912261887281074565_507619045984793_769543820_o.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

BIN
wms/cont/pricereview-uploads/m202403121914471012954OlaIEQjXAZDasK9Pd1Jxb.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
wms/cont/pricereview-uploads/m202403121914476694521705368342957.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
wms/cont/pricereview-uploads/m20240312192346343561kobe.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
wms/cont/pricereview-uploads/m20240312192346755323curry.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

676
wms/cont/pricereviewCheck.php

@ -1,4 +1,678 @@
<?php
include_once "../header.php";
require_once('../mkt/conn.php');
$apply_key = null;
$form_key = null;
if(isset($_GET['apply_key']) && $_GET['apply_key'] != ""){
$apply_key = $_GET['apply_key'];
}elseif(isset($_GET['form_key']) && $_GET['form_key'] != ""){
$form_key = $_GET['form_key'];
$sql_str = "SELECT form_id FROM flow WHERE form_key = :form_key";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':form_key', $form_key);
$stmt->execute();
$flow = $stmt->fetch(PDO::FETCH_ASSOC);
$apply_key = $flow['form_id'];
}
if(!isset($_GET['apply_key']) && !isset($_GET['form_key'])){
echo "找不到此紀錄。";
exit;
}
$sql_str = "SELECT * FROM con_maintance_examine_apply WHERE apply_key = :apply_key ORDER BY create_at DESC LIMIT 1";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':apply_key', $apply_key);
$stmt->execute();
$contract = $stmt->fetch(PDO::FETCH_ASSOC);
if(!$contract){
echo "找不到此紀錄!";
exit;
}
$sql_str = "SELECT * FROM con_maintance_examine_clear WHERE (apply_key, cmstatus) = (:apply_key, 'Y') ORDER BY created_at ASC";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':apply_key', $apply_key);
$stmt->execute();
$elevators = $stmt->fetchAll(PDO::FETCH_ASSOC);
$sql_str = "SELECT * FROM pricereview_maintain_item WHERE (mid, item_group) = (:apply_key, 'E') ORDER BY item_no ASC";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':apply_key', $apply_key);
$stmt->execute();
$otherOptions = $stmt->fetchAll(PDO::FETCH_ASSOC);
$contract_begin_date = new DateTime($contract['contract_begin_date']);
$contract_end_date = new DateTime($contract['contract_end_date']);
// 計算差異
$interval = $contract_begin_date->diff($contract_end_date);
// 獲取總月數
$contract_months = $interval->m + 12 * $interval->y + 1;
if($contract_months <= 0){ $contract_months = 1;}
$sql_str = "SELECT * FROM pricereview_maintain_sign WHERE mid = :apply_key ORDER BY id ASC";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':apply_key', $apply_key);
$stmt->execute();
$sign_all = $stmt->fetchAll(PDO::FETCH_ASSOC);
$sign = $sign_all ? $sign_all[count($sign_all)-1] : [];
$currentSigner = '';
$currentSign = 0;
$currentSignId = $sign['id'] ?? '';
$historySign = [];
if($sign_all){
foreach($sign_all as $key=>$sign_item){
if($key == count($sign_all)-1){
break;
}
$signer1 = getSignerName(explode(",", $sign_item['sign1'])[0]);
$sign1_result = explode(",", $sign_item['sign1'])[1];
$sign1_date = explode(",", $sign_item['sign1'])[2];
$sign1_note = $sign_item['sign1_note'];
if($sign1_result == "Y"){
$sign1_result = "同意";
}elseif($sign1_result == "YY"){
$sign1_result = "結案同意";
}elseif($sign1_result == "N"){
$sign1_result = "不同意";
}else{
$sign1_result = "---";
}
if(!empty($sign_item['sign2'])){
$signer2 = getSignerName(explode(",", $sign_item['sign2'])[0]);
$sign2_result = explode(",", $sign_item['sign2'])[1];
$sign2_note = $sign_item['sign2_note'];
$sign2_date = explode(",", $sign_item['sign2'])[2];
if($sign2_result == "Y"){
$sign2_result = "同意";
}elseif($sign2_result == "YY"){
$sign2_result = "結案同意";
}elseif($sign2_result == "N"){
$sign2_result = "不同意";
}else{
$sign2_result = "---";
}
}else{
$signer2 = "---";
$sign2_result = "---";
$sign2_note = "---";
$sign2_date = "---";
$sign2_result = "---";
}
$signer3 = getSignerName(explode(",", $sign_item['sign3'])[0]);
$sign3_result = explode(",", $sign_item['sign3'])[1];
$sign3_note = $sign_item['sign3_note'];
$sign3_date = explode(",", $sign_item['sign3'])[2];
if($sign3_result == "Y"){
$sign3_result = "同意";
}elseif($sign3_result == "YY"){
$sign3_result = "結案同意";
}elseif($sign3_result == "N"){
$sign3_result = "不同意";
}else{
$sign3_result = "---";
}
if(!empty($sign_item['sign4'])){
$signer4 = getSignerName(explode(",", $sign_item['sign4'])[0]);
$sign4_result = explode(",", $sign_item['sign4'])[1];
$sign4_note = $sign_item['sign4_note'];
$sign4_date = explode(",", $sign_item['sign4'])[2];
if($sign4_result == "Y"){
$sign4_result = "同意";
}elseif($sign4_result == "YY"){
$sign4_result = "結案同意";
}elseif($sign4_result == "N"){
$sign4_result = "不同意";
}else{
$sign4_result = "---";
}
}else{
$signer4 = "---";
$sign4_result = "---";
$sign4_note = "---";
$sign4_date = "---";
$sign4_result = "---";
}
$historySign[] = [
'signer1'=>$signer1,
'sign1_result'=> $sign1_result,
'sign1_note'=>$sign1_note,
'sign1_date'=>$sign1_date,
'signer2'=>$signer2,
'sign2_result'=> $sign2_result,
'sign2_note'=>$sign2_note,
'sign2_date'=>$sign2_date,
'signer3'=>$signer3,
'sign3_result'=> $sign3_result,
'sign3_note'=>$sign3_note,
'sign3_date'=>$sign3_date,
'signer4'=>$signer4,
'sign4_result'=> $sign4_result,
'sign4_note'=>$sign4_note,
'sign4_date'=>$sign4_date,
];
}
}
if($sign){
// Y:已同意 N:不同意 W:待簽
// sign1 => 處長, sign2 => 業務承辦人, sign3 => 協理, sign4 => 總經理
if($sign['sign1'] == NULL || $sign['sign1'] ==''){
$sign1 = NULL;
}else{
if( explode(",", $sign['sign1'])[1] != ''){
$sign1 = explode(",", $sign['sign1'])[1] == 'Y' ? 'Y' : 'N';
}else{
$sign1 = 'W';
}
}
if($sign['sign2'] == NULL || $sign['sign2'] ==''){
$sign2 = NULL;
}else{
if( explode(",", $sign['sign2'])[1] != ''){
$sign2 = explode(",", $sign['sign2'])[1] == 'Y' ? 'Y' : 'N';
}else{
$sign2 = 'W';
}
}
if($sign['sign3'] == NULL || $sign['sign3'] ==''){
$sign3 = NULL;
}else{
if( explode(",", $sign['sign3'])[1] != ''){
// $sign3 = explode(",", $sign['sign3'])[1] == 'Y' ? 'Y' : 'N';
if(explode(",", $sign['sign3'])[1] == 'YY') $sign3 = 'YY';
if(explode(",", $sign['sign3'])[1] == 'Y') $sign3 = 'Y';
if(explode(",", $sign['sign3'])[1] == 'N') $sign3 = 'N';
}else{
$sign3 = 'W';
}
}
if($sign['sign4'] == NULL || $sign['sign4'] ==''){
$sign4 = NULL;
}else{
if( explode(",", $sign['sign4'])[1] != ''){
// $sign4 = explode(",", $sign['sign4'])[1] == 'Y' ? 'Y' : 'N';
if(explode(",", $sign['sign4'])[1] == 'YY') $sign4 = 'YY';
if(explode(",", $sign['sign4'])[1] == 'Y') $sign4 = 'Y';
if(explode(",", $sign['sign4'])[1] == 'N') $sign4 = 'N';
}else{
$sign4 = 'W';
}
}
if($sign1 == 'W'){
$currentSigner = explode(",", $sign['sign1'])[0];
$currentSign = 1;
}elseif($sign2 == 'W'){
$currentSigner = explode(",", $sign['sign2'])[0];
$currentSign = 2;
}elseif($sign3 == 'W'){
$currentSigner = explode(",", $sign['sign3'])[0];
$currentSign = 3;
}elseif($sign4 == 'W'){
$currentSigner = explode(",", $sign['sign4'])[0];
$currentSign = 4;
}
}else{
$sign1 = NULL;
$sign2 = NULL;
$sign3 = NULL;
$sign4 = NULL;
}
$permissions = false;
//開啟工務權限
if($user_id == "M0174" || $user_id == "M0008" || $user_id == "M0012" || $user_id == "M0007"){
$permissions = true;
}
function getSignerName($signer){
if($signer == null || $signer == '') return "---";
global $conn;
$sql_str = "SELECT name FROM account WHERE accountid = :signer";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':signer', $signer);
$stmt->execute();
$signer = $stmt->fetch(PDO::FETCH_ASSOC);
return $signer['name'];
}
?>
<link rel="stylesheet" href="./css/pricereview.css">
<script src="./js/axios.min.js" integrity="sha512-aoTNnqZcT8B4AmeCFmiSnDlc4Nj/KPaZyB5G7JnOnUEkdNpCZs1LCankiYi01sLTyWy+m2P+W4XM+BuQ3Q4/Dg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script defer src="./js/alpinejs/cdn.min.js"></script>
<script src="./js/pricereviewAlpine.js"></script>
<div id="pricereviewCheck" x-data=pricereviewCheck>
<div class="container">
<table class="table customerinfo-table" >
<tbody>
<tr>
<th>價審單號</th>
<th>卷號</th>
<th>營業員</th>
<th>客戶名稱</th>
<th>牌價總額(A)</th>
<th>售價總額(B)</th>
<th >破價總額(B-A)</th>
</tr>
<tr>
<td><input type="text" class="form-control" x-model="apply_key" disabled /></td>
<td><input type="text" class="form-control" x-model="contractno" disabled /></td>
<td><input type="text" class="form-control" x-model="salesman" disabled /></td>
<td><input type="text" class="form-control" x-model="customer" disabled /></td>
<td><input type="text" class="form-control" x-model="Number(total_price).toLocaleString()" disabled /></td>
<td><input type="text" class="form-control" x-model="Number(total_sale_price).toLocaleString()" disabled /></td>
<td><input type="text" class="form-control" x-model="(total_sale_price - total_price).toLocaleString()" disabled /></td>
</tr>
</tbody>
</table>
<table class="table mi-table" border=1>
<thead>
<tr>
<th colspan=5>整機單價</th>
<?php if($permissions): ?>
<th colspan=4>業務部作業區</th>
<?php endif; ?>
</tr>
<tr>
<th>項次</th>
<th>規格</th>
<th>單價(月)</th>
<th>保養月數</th>
<th>總價</th>
<?php if($permissions): ?>
<th>成本(月)</th>
<th>售價(月)</th>
<th>利潤(月)</th>
<th>利潤率(%)</th>
<?php endif; ?>
</tr>
</thead>
<template x-for="elevator in elevators">
<tbody>
<tr>
<td x-html="'<b>' + elevator.item_no + '</b>'"></td>
<td > <a href="javascript:;" x-text="elevator.spec + '-' + elevator.persons + '*' + elevator.stop + '-' + elevator.speed"></a></td>
<td><input type="text" class="form-control" x-model="Number(elevator.stand_price).toLocaleString()" disabled /></td>
<td><input type="text" class="form-control" x-model="elevator.maintain_months" disabled /></td>
<td><input type="text" class="form-control" x-model="Number(elevator.stand_price * elevator.maintain_months).toLocaleString()" disabled /></td>
<?php if($permissions): ?>
<td>
<input x-show="true" type="text" class="form-control" x-model="Number(elevator.stand_price).toLocaleString()">
</td>
<td><input type="text" class="form-control" x-model="(Number(elevator.contract_price)).toLocaleString()" disabled /></td>
<td><input type="text" class="form-control" x-model="(Number(elevator.contract_price) - Number(elevator.stand_price)).toLocaleString()" disabled /></td>
<td><input type="text" class="form-control" x-model="((Number(elevator.contract_price) - Number(elevator.stand_price) ) / Number(elevator.stand_price) * 100).toFixed(1) + '%'" disabled /></td>
<?php endif; ?>
</tr>
<?php if($permissions): ?>
<tr>
<td colspan=5>
<div class="mi-info">
<span>電梯資訊</span>
<ul>
<li x-html="'電梯許可證號:<b>' + elevator.register_code + '</b>'"></li>
<li x-html="'電梯廠牌<b>:' + elevator.elevator_brand + '</b>'"></li>
<li x-html="'停數<b>:' + elevator.stop + '</b>'"></li>
<li x-html="'人乘<b>:' + elevator.persons + '</b>'"></li>
<li x-html="'速度<b>:' + elevator.speed + '</b>'"></li>
<li x-html="'載重<b>:' + elevator.weight + '</b>'"></li>
<li x-html="'保養方式<b>:' + elevator.maintain_method + '</b>'"></li>
<li x-html="'保養週期<b>:' + elevator.maintain_period + '</b>'"></li>
<li x-html="elevator.is_m1_bundle=='Y' ? '贈送M1::<b>是</b>' : '贈送M1::<b>否</b>'"></li>
<li x-html="'年檢費用<b>:' + elevator.annual_survey_expense.toLocaleString() + '</b>'"></li>
<li x-html="'檢測費用<b>:' + elevator.inspection_fee.toLocaleString() + '</b>'"></li>
</ul>
</div>
</td>
<td colspan=4 style="max-width:400px">
<div class="mi-info">
<span>電梯規格</span>
<ul>
<li x-html="elevator.spec + '*'+elevator.maintain_months+':<b>' + (elevator.stand_price*elevator.maintain_months).toLocaleString() + '</b>'"></li>
</ul>
<span>附加項目</span>
<ul>
<template x-for="option in elevator.otherOptions">
<li x-html="option.item_spec + (option.option_memo ? ('(' + option.option_memo + ')') : '') + '*' + option.item_qty + ':<b>' + (option.mi * option.item_qty).toLocaleString() + '</b>'"></li>
</template>
</ul>
<p x-html="'以上合計:<b>' + Math.round(Number(elevator.otherOptionsTotalPrice) + Number(elevator.stand_price*elevator.maintain_months)).toLocaleString() + '</b>'"></p>
</div>
</td>
</tr>
<?php endif ;?>
</tbody>
</template>
<tr>
<td colspan=4>小計</td>
<td><input type="text" class="form-control" x-model="elevators_total_price.toLocaleString()" disabled></td>
</tr>
</table>
<table class="table mi-table" border=1>
<thead>
<tr>
<th colspan=8>除外項目</th>
</tr>
<tr>
<th>項次</th>
<th>詢價單號</th>
<th>名稱</th>
<th>單價</th>
<th>數量</th>
<th>複價</th>
<th>所屬電梯項次</th>
</tr>
</thead>
<tbody>
<template x-for="option in otherOptions">
<tr>
<td x-html="'<b>' + option.item_no + '</b>'"></td>
<td x-text="option.price_id"></td>
<td><input type="text" class="form-control" x-model="option.item_spec" disabled /></td>
<td><input type="text" class="form-control" x-model="Number(option.item_unit_price).toLocaleString()" disabled /></td>
<td><input type="text" class="form-control" x-model="option.item_qty" disabled /></td>
<td><input type="text" class="form-control" x-model="(option.item_unit_price * option.item_qty).toLocaleString()" disabled /></td>
<td x-text="option.option_relate_spec"></td>
</tr>
</template>
<template x-if="otherOptions.length > 0">
<tr>
<td colspan=5>小計</td>
<td >
<input type="text" x-model="otherOptionsTotalPrice.toLocaleString()" disabled class="form-control">
</td>
<td colspan=3></td>
</tr>
</template>
</tbody>
</table>
<table class="table mi-table" border=1 style="width:800px">
<thead>
<tr>
<th style="width:100px">付款方式</th>
<th>金額(次)</th>
<th>付款次數</th>
<th>總付款金額</th>
</tr>
</thead>
<tbody>
<tr>
<td x-text="payment_kind"></td>
<td><input type="text" class="form-control" x-model="single_amount.amount_times.toLocaleString()" disabled /></td>
<td><input type="text" class="form-control" :value="single_amount.pay_times.toLocaleString()" disabled /></td>
<td><input type="text" class="form-control" x-model="total_sale_price.toLocaleString()" disabled /></td>
</tr>
</tbody>
</table>
<table class="table customerinfo-table" >
<tbody>
<tr>
<th>卷號</th>
<th>營業員</th>
<th>客戶名稱</th>
<th>案件名稱</th>
<th colspan="2">地址</th>
</tr>
<tr>
<td><input type="text" class="form-control" x-model="contractno" disabled /></td>
<td><input type="text" class="form-control" x-model="salesman" disabled /></td>
<td><input type="text" class="form-control" x-model="customer" disabled /></td>
<td><input type="text" class="form-control" x-model="case_name" disabled /></td>
<td colspan="2"><input type="text" class="form-control" x-model="address" disabled /></td>
</tr>
<tr>
<th>牌價總額(A)</th>
<th>售價總額(B)</th>
<th>破價總額(B-A)</th>
<th>總台數</th>
<th>服務費(介紹費)</th>
<th>價率%(B/A)</th>
</tr>
<tr>
<td><input type="text" class="form-control" x-model="Number(total_price).toLocaleString()" disabled /></td>
<td><input type="text" class="form-control" x-model="Number(total_sale_price).toLocaleString()" disabled /></td>
<td><input type="text" class="form-control" x-model="(total_sale_price - total_price).toLocaleString()" disabled /></td>
<td><input type="text" class="form-control" x-model="elevators.length" disabled /></td>
<td><input type="text" class="form-control" x-model="service_fee.toLocaleString()" disabled /></td>
<td><input type="text" class="form-control" x-model="Math.round(total_sale_price/total_price * 1000)/10" disabled /></td>
</tr>
<tr>
<th>合約開始日</th>
<th>合約結束日</th>
<th></th>
<th></th>
<th></th>
<th></th>
</tr>
<tr>
<td><input type="date" disabled class="form-control" x-model="contract_begin_date" /></td>
<td><input type="date" disabled class="form-control" x-model="contract_end_date" /></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<th>罰則</th>
<th>訂金保證金(函)%</th>
<th>履約保證金(函)%</th>
<th>保固保證金(函)%</th>
<th></th>
<th></th>
</tr>
<tr>
<td><input type="text" disabled class="form-control" x-model="penalty"></td>
<td><input type="text" disabled class="form-control" x-model="deposit_rate"></td>
<td><input type="text" disabled class="form-control" x-model="keep_rate"></td>
<td><input type="text" disabled class="form-control" x-model="warranty_rate"></td>
<td></td>
<td></td>
</tr>
<tr>
<th colspan="6">特記事項</th>
</tr>
<tr>
<td colspan="6">
<textarea name="" id="" cols="30" rows="5" class="form-control" x-model="memo" disabled></textarea>
</td>
</tr>
</tbody>
</table>
<table class="table" style="width:700px">
<thead>
<tr>
<th style="width:150px">審核</th>
<th style="width:100px">審核人</th>
<th>結果</th>
<th>意見</th>
<th>時間</th>
</tr>
</thead>
<tbody>
<tr>
<td>區經理</td>
<td x-text="sign1"></td>
<td>
<?php
if($sign1 == 'Y'){
echo "同意";
}elseif($sign1 == 'N'){
echo "不同意";
}elseif($sign1 == 'W'){
echo "待簽核";
}else{
echo "---";
}
?>
</td>
<td><?php echo isset($sign['sign1_note']) ? $sign['sign1_note'] : "" ?></td>
<td><?php echo isset($sign['sign1']) ? explode(',', $sign['sign1'])[2] : "---" ?></td>
</tr>
<tr>
<td x-text="'服務助理'"></td>
<td x-text="sign2"></td>
<td>
<?php
if($sign2 == 'Y'){
echo "同意";
}elseif($sign2 == 'N'){
echo "不同意";
}elseif($sign2 == 'W' && $contract['status'] == 'YS'){
echo "待簽核";
}else{
echo "---";
}
?>
</td>
<td><?php echo (isset($sign['sign2']) && $sign['sign2']!=NULL) ? $sign['sign2_note'] : '---'?></td>
<td><?php echo (isset($sign['sign2']) && $sign['sign2']!=NULL) ? explode(',', $sign['sign2'])[2] : '---' ?></td>
</tr>
<tr>
<td x-text="'服務副總'"></td>
<td x-text="sign3"></td>
<td>
<?php
if($sign3 == 'Y'){
echo "同意";
}elseif($sign3 == 'YY'){
echo "結案同意";
}elseif($sign3 == 'N'){
echo "不同意";
}elseif($sign3 == 'W' && $contract['status'] == 'YS'){
echo "待簽核";
}else{
echo "---";
}
?>
</td>
<td><?php echo (isset($sign['sign3']) && $sign['sign3']!=NULL) ? $sign['sign3_note'] : '---'?></td>
<td><?php echo (isset($sign['sign3']) && $sign['sign3']!=NULL) ? explode(',', $sign['sign3'])[2] : '---' ?></td>
</tr>
<tr>
<td>總經理</td>
<td x-text="sign4"></td>
<td>
<?php
if($contract['status'] == 'YY'){
if($sign3 == 'YY'){
echo "---";
}elseif($sign3 == 'Y' && $sign4 == 'YY'){
echo "結案同意";
}
}else{
if($sign4 == 'Y' && $contract['status'] == 'YY'){
echo "同意";
}elseif($sign4 == 'N' && $contract['status'] == 'YN'){
echo "不同意";
}elseif($sign4 == 'W' && $contract['status'] == 'YS' ){
echo "待簽核";
}else{
echo "---";
}
}
?>
</td>
<td><?php echo (isset($sign['sign4']) && $sign['sign4']!=NULL) ? $sign['sign4_note'] : '---'?></td>
<td><?php echo (isset($sign['sign4']) && $sign['sign4']!=NULL) ? explode(',', $sign['sign4'])[2] : '---' ?></td>
</tr>
</tbody>
</table>
<table class="table" style="width:700px">
<thead>
<tr>
<th>審核意見</th>
<th>批示售價</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<textarea name="" <?php if($currentSigner != $user_id) echo "disabled" ?> class="form-control" id="" cols="40" rows="5" x-model="reviewcomment"></textarea>
</td>
<td>
<input type="text" class="form-control" disabled />
</td>
</tr>
</tbody>
</table>
<div>
<button class="btn btn-primary" @click="window.history.go(-1)">回上頁</button>
<?php if($contract['status'] == "YS"){ ?>
<?php if($currentSigner == "M0006" && $user_id == "M0008"): ?>
<button class="btn btn-primary" @click="check(<?php echo $currentSign; ?>, 'YN', 'M0006')">總經理權限(退回)</button>
<?php endif; ?>
<?php if($currentSigner == $user_id): ?>
<button class="btn btn-primary" @click="check(<?php echo $currentSign; ?>, 'YN')">不同意(退回)</button>
<?php if($sign1=='W' || ($sign1=='Y' && $sign2 =='W') || ($sign1 == 'Y' && ($sign2 == 'Y' || $sign2 == NULL) && $sign3 == 'W' && $sign4 == 'W')): ?>
<button class="btn btn-primary" @click="check(<?php echo $currentSign; ?>, 'YS')">同意(上呈)</button>
<?php endif ; ?>
<?php if(($sign3 == 'W' && $sign2 == 'Y') || ($sign3 == 'W' && $sign2 == null && $sign1 == 'Y') || ($sign3 == 'Y' && $sign4 == 'W') ): ?>
<button class="btn btn-primary" @click="check(<?php echo $currentSign; ?>, 'YY')">同意(結案)</button>
<?php endif ; ?>
<?php endif; ?>
<?php } ?>
<?php if($contract['attatch1']!=null): ?>
<a class="btn btn-primary" href="./<?php echo $contract['attatch1']; ?>" download="<?php echo $contract['vol_no'] . "報價單"; ?>">下載報價單</a>
<?php else: ?>
<a href="javascript:;" class="btn btn-primary" @click="alert('營業員未上傳報價單!')">下載報價單</a>
<?php endif; ?>
<?php if($contract['attatch2']!=null): ?>
<a class="btn btn-primary" href="./<?php echo $contract['attatch2']; ?>" download="<?php echo $contract['vol_no'] . "合約用印申請表"; ?>">下載合約用印申請表</a>
<?php else: ?>
<a href="javascript:;" style="width:180px" class="btn btn-primary" @click="alert('營業員未上傳合約用印申請表!')">下載合約用印申請表</a>
<?php endif; ?>
</div>
</div>
</div>
<script>
const apply_key = '<?php echo $contract['apply_key']; ?>';
const vol_no = '<?php echo $contract['vol_no']; ?>';
const salesman = '<?php echo $contract['salesman']; ?>';
const customer = '<?php echo $contract['customer']; ?>';
const total_price = '<?php echo $contract['total_price']; ?>';
const total_sale_price = '<?php echo $contract['total_sale_price']; ?>';
const elevators = [...<?php echo json_encode($elevators) ?>];
const otherOptions = [...<?php echo json_encode($otherOptions) ?>];
const payment_kind = '<?php echo $contract['payment_kind']; ?>';
const case_name = '<?php echo $contract['case_name']; ?>';
const address = '<?php echo $contract['address']; ?>';
const service_fee = '<?php echo $contract['service_fee']; ?>';
const memo = `<?php echo $contract['memo']; ?>`;
const maintain_months = '<?php echo $contract_months; ?>';
const penalty = '<?php echo $contract['penalty']; ?>';
const deposit_rate = '<?php echo $contract['deposit_rate']; ?>';
const keep_rate = '<?php echo $contract['keep_rate']; ?>';
const warranty_rate = '<?php echo $contract['warranty_rate']; ?>';
const contract_begin_date = '<?php echo $contract['contract_begin_date']; ?>';
const contract_end_date = '<?php echo $contract['contract_end_date']; ?>';
const sign1 = '<?php echo ($sign) ? explode(',', $sign['sign1'])[0] : "---" ?>';
const sign2 = '<?php echo ($sign) ? explode(',', $sign['sign2'])[0] : "---" ?>';
const sign3 = '<?php echo ($sign) ? explode(',', $sign['sign3'])[0] : "---" ?>';
const sign4 = '<?php echo ($sign) ? explode(',', $sign['sign4'])[0] : "---" ?>';
const currentSignId = '<?php echo $currentSignId; ?>';
const token = '<?php echo $para = "function_name=pricereview&" . $token_link;; ?>';
const form_key = '<?php echo $form_key; ?>';
const user_id = '<?php echo $user_id; ?>';
</script>

72
wms/cont/pricereviewCreate.php

@ -19,13 +19,13 @@ $stmt = $conn->prepare($sql_str);
$stmt->bindParam(':vol_no', $vol_no);
$stmt->execute();
$apply = $stmt->fetch(PDO::FETCH_ASSOC);
if($apply['status'] == 'D'){
if($apply && $apply['status'] == 'D'){
echo "<script>alert('非法訪問');window.history.go(-1);</script>";
}
if($apply['status'] == 'YS'){
if($apply &&$apply['status'] == 'YS'){
echo "<script>alert('此單正在審核中!');window.history.go(-1);</script>";
}
if($apply['status'] == 'YY' || $apply['status'] == 'YN'){
if($apply &&$apply['status'] == 'YY'){
echo "<script>alert('此單已申請過!');window.history.go(-1);</script>";
}
@ -76,9 +76,6 @@ $otherOptionKey = 0;
foreach($items as $item){
if($item['item_no'] > $otherOptionKey){
$otherOptionKey = (int)$item['item_no'];
}
if($item['option_relate_spec']!= 0 ){
}
$toElevator = $item['option_relate_spec']==0 ? [] : [[
'id'=>$item['option_relate_spec'],
@ -131,7 +128,7 @@ function getApplyKey($p_yyyymm, $seq_name){
}
?>
<link rel="stylesheet" href="./css/pricereview.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/1.5.0/axios.min.js" integrity="sha512-aoTNnqZcT8B4AmeCFmiSnDlc4Nj/KPaZyB5G7JnOnUEkdNpCZs1LCankiYi01sLTyWy+m2P+W4XM+BuQ3Q4/Dg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="./js/axios.min.js" integrity="sha512-aoTNnqZcT8B4AmeCFmiSnDlc4Nj/KPaZyB5G7JnOnUEkdNpCZs1LCankiYi01sLTyWy+m2P+W4XM+BuQ3Q4/Dg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script defer src="./js/alpinejs/cdn.min.js"></script>
<script src="./js/pricereviewAlpine.js"></script>
<div id="pricereviewCreate" x-data=pricereviewCreate()>
@ -265,12 +262,13 @@ function getApplyKey($p_yyyymm, $seq_name){
<th colspan=1>項次</th>
<th colspan=7 style="text-align: left; padding-left: 15px;" x-text="elevator.id"></th>
<th colspan="2" >
<button class="copyBtn btn btn-secondary" @click="copyElevator(idx)">複製</button>
<button class="btn btn-primary" @click="getBonus(idx)">獎金</button>
<button class="copyBtn btn btn-secondary" @click="copyElevator(idx)">複製</button>
<button class="btn btn-danger" @click="removeElevator(elevator.id)">刪除</button>
</th>
</tr>
<tr>
<th >電梯</th>
<th>電梯</th>
<td>
<select class="form-control" x-model="elevator.spec" @change="getElevatorPrice(idx)">
<option value="">請選擇</option>
@ -279,15 +277,20 @@ function getApplyKey($p_yyyymm, $seq_name){
<option value="MAH100">MAH100小電梯</option>
<option value="MAF100">MAF100貨梯(有機房)</option>
</select>
<span class="errortext" x-show="elevator.spec==''" x-cloak date-type="errortext">請選擇電梯機型</span>
</td>
<th>載重(KG)</th>
<td>
<input type="number" class="form-control" x-model="elevator.weight" @change="getElevatorPrice(idx)" @keyup="getElevatorPrice(idx)" />
<span class="errortext" x-show="elevator.weight==''" x-cloak date-type="errortext">請輸入電梯載重</span>
<span class="errortext" x-show="elevator.weight!=='' && elevator.weight<=0" x-cloak date-type="errortext">載重需大於0</span>
</td>
<th>停數</th>
<td>
<input type="number" class="form-control" x-model="elevator.stop" @keyup="getElevatorPrice(idx)" />
<span class="errortext" x-show="elevator.stop===''" x-cloak date-type="errortext">請輸入電梯停數</span>
<span class="errortext" x-show="elevator.stop!=='' && elevator.stop<2" x-cloak date-type="errortext">停數不得小於2</span>
</td>
<th>速度(m/min)</th>
<td>
@ -303,6 +306,7 @@ function getApplyKey($p_yyyymm, $seq_name){
<option value="120">120</option>
<option value="150">150</option>
</select>
<span class="errortext" x-show="elevator.speed===''" x-cloak date-type="errortext">請選擇電梯速度</span>
</td>
<th>人乘</th>
<td>
@ -320,13 +324,20 @@ function getApplyKey($p_yyyymm, $seq_name){
<option value="20">20</option>
<option value="24">24</option>
</select>
<span class="errortext" x-show="elevator.person==''" x-cloak date-type="errortext">請選擇電梯人乘</span>
</td>
</tr>
<tr>
<th>電梯許可證號碼</th>
<td colspan=3>
<td>
<input type="text" class="form-control" x-model="elevator.permitNumber" />
</td>
<th>檢測費用</th>
<td>
<input type="text" class="form-control" x-model="elevator.inspectionFee" />
<span class="errortext" x-show="elevator.inspectionFee===''" x-cloak date-type="errortext">請輸入檢測費用</span>
<span class="errortext" x-show="elevator.inspectionFee!=='' && elevator.inspectionFee<0" x-cloak date-type="errortext">檢測費用不得小於0</span>
</td>
<th>品牌</th>
<td>
<select class="form-control" x-model="elevator.brand">
@ -355,20 +366,25 @@ function getApplyKey($p_yyyymm, $seq_name){
<option value='永勝'>永勝</option>
<option value='其他'>其他</option>
</select>
<span class="errortext" x-show="elevator.brand==''" x-cloak date-type="errortext">請選擇電梯品牌</span>
</td>
<th>竣工檢查年度(民國)</th>
<td>
<input type="number" class="form-control" x-model="elevator.checkYear" />
<span class="errortext" x-show="elevator.checkYear==''" x-cloak date-type="errortext">請輸入竣檢年度</span>
</td>
<th>上次年檢日期</th>
<td>
<input type="date" class="form-control" x-model="elevator.lastDate" />
<span class="errortext" x-show="elevator.lastDate=='' || elevator.lastDate=='0000-00-00'" x-cloak date-type="errortext">請輸入年檢日期</span>
</td>
</tr>
<tr>
<th>年檢費用(元)</th>
<td>
<input type="number" class="form-control" x-model="elevator.yearCheckFee" />
<span class="errortext" x-show="elevator.yearCheckFee===''" x-cloak date-type="errortext">請輸入年檢費用</span>
<span class="errortext" x-show="elevator.yearCheckFee!=='' && elevator.yearCheckFee<0" x-cloak date-type="errortext">年檢費用不得小於0</span>
</td>
<th>電梯數量</th>
<td>
@ -384,6 +400,7 @@ function getApplyKey($p_yyyymm, $seq_name){
<option value="3">雙月保</option>
<option value="4">季保</option>
</select>
<span class="errortext" x-show="elevator.cycle==''" x-cloak date-type="errortext">請輸入保養週期</span>
</td>
<th>保養方式</th>
<td>
@ -393,10 +410,11 @@ function getApplyKey($p_yyyymm, $seq_name){
<option value="B">半包</option>
<option value="C">清包</option>
</select>
<span class="errortext" x-show="elevator.method==''" x-cloak date-type="errortext">請輸入保養方式</span>
</td>
<th>贈送M1</th>
<td>
<select class="form-control" x-model="elevator.m1" @change="getElevatorPrice(idx)">
<select class="form-control" x-model="elevator.m1" @change="getElevatorPrice(idx);changeMonths(idx)">
<option value="N"></option>
<option value="Y"></option>
</select>
@ -406,11 +424,13 @@ function getApplyKey($p_yyyymm, $seq_name){
<th>公司發布價(月)</th>
<td>
<input type="text" class="form-control" disabled x-model="elevator.price.toLocaleString()" />
<span class="errortext" x-show="elevator.price <= 0">公司無提供此規格牌價</span>
<span class="errortext" x-show="elevator.spec!='' && elevator.stop!='' && elevator.speed!='' && elevator.person!='' && elevator.price <= 0">公司無提供此規格牌價</span>
</td>
<th>保養月數</th>
<td>
<input type="number" class="form-control" x-model="elevator.months" />
<input type="number" class="form-control" x-model="elevator.months" @blur="checkMonths(idx)" />
<span class="errortext" x-show="elevator.months ===''">請輸入保養月數</span>
<span class="errortext" x-show="elevator.months!=='' && elevator.months!='' && elevator.months < 1">保養月數不得低於1</span>
</td>
<th>公司發布價(總價)</th>
<td>
@ -419,6 +439,8 @@ function getApplyKey($p_yyyymm, $seq_name){
<th>契約報價(月)</th>
<td>
<input type="number" class="form-control" x-model="elevator.sale_price" />
<span class="errortext" x-show="elevator.sale_price ===''">請輸入契約報價</span>
<span class="errortext" x-show="elevator.sale_price!=='' && elevator.sale_price < 0">契約報價不得小於0</span>
</td>
<th>契約報價(總價)</th>
<td>
@ -431,7 +453,7 @@ function getApplyKey($p_yyyymm, $seq_name){
</div>
<div class="divitem">
<div class="title">
<h4>除外項目</h4>
<h4>附加項目</h4>
<button class="addbtn btn" @click="openCreateOtherOptionFn()" >+</button>
</div>
<table class="table" border=1>
@ -502,7 +524,7 @@ function getApplyKey($p_yyyymm, $seq_name){
<td><input type="text" class="form-control" x-model="totalSalePrice.toLocaleString()" disabled style="width:180px" /></td>
<td><input type="text" class="form-control" x-model="(totalSalePrice - totalPrice).toLocaleString()" disabled style="width:180px" /></td>
<td>
<input type="text" class="form-control" x-show="totalPrice!=0" x-model="Math.round(totalSalePrice / totalPrice * 100* 10) /10 + '%'" disabled />
<input type="text" class="form-control" x-show="totalPrice!=0" x-model="discountRate.toFixed(3)*100 + '%'" disabled />
<input type="text" class="form-control" x-show="totalPrice==0" value="0" disabled />
</td>
<td><input type="text" class="form-control" x-model="totalElevatorsNum" disabled /></td>
@ -547,11 +569,11 @@ function getApplyKey($p_yyyymm, $seq_name){
<input type="file" class="form-control" multiple draggable="true" @change="uploadFiles($event, 2)" />
</label>
<label for="">
<?php if(!empty($main) && $main['attatch1'] != null): ?>
<a class="btn btn-primary" href="<?php echo $main['attatch1']; ?>" download="<?php echo $main['contractno']; ?>報價單">下載報價單</a>
<?php if(!empty($apply) && $apply['attatch1'] != null): ?>
<a class="btn btn-primary" href="<?php echo $apply['attatch1']; ?>" download="<?php echo $apply['vol_no']; ?>報價單">下載報價單</a>
<?php endif; ?>
<?php if(!empty($main) && $main['attatch2'] != null): ?>
<a class="btn btn-primary" href="<?php echo $main['attatch2']; ?>" download="<?php echo $main['contractno']; ?>附表一">下載附表一</a>
<?php if(!empty($apply) && $apply['attatch2'] != null): ?>
<a class="btn btn-primary" style="width:180px" href="<?php echo $apply['attatch2']; ?>" download="<?php echo $apply['vol_no']; ?>合約用印申請表">下載合約用印申請表</a>
<?php endif; ?>
<button class="btn btn-primary" @click="save()">保存</button>
<button class="btn btn-primary" @click="submit()">送審</button>
@ -577,7 +599,7 @@ function getApplyKey($p_yyyymm, $seq_name){
const user_name = '<?php echo $user_name ?>';
const progress_remark = `<?php echo nl2br($hope_customer['progress_status']); ?>`;
const memo = `<?php echo nl2br($apply['memo']); ?>`;
const memo = `<?php echo $apply ? nl2br($apply['memo']) : ''; ?>`;
const contract_kind = '<?php echo $apply ? $apply['contract_kind'] : '' ?>';
const payment_kind = '<?php echo $apply ? $apply['payment_kind'] : '' ?>';
@ -591,10 +613,10 @@ function getApplyKey($p_yyyymm, $seq_name){
const otherOptions = [...<?php echo json_encode($otherOptions); ?>];
const token = '<?php echo $para = "function_name=pricereview&" . $token_link;; ?>';
const penalty = '<?php echo $apply['penalty']; ?>';
const deposit_rate = '<?php echo $apply['deposit_rate']; ?>';
const keep_rate = '<?php echo $apply['keep_rate']; ?>';
const warranty_rate = '<?php echo $apply['warranty_rate']; ?>';
const service_fee = '<?php echo $apply['service_fee']; ?>';
const penalty = '<?php echo $apply ? $apply['penalty'] : ''; ?>';
const deposit_rate = '<?php echo $apply ? $apply['deposit_rate'] : 0; ?>';
const keep_rate = '<?php echo $apply ? $apply['keep_rate'] : 0; ?>';
const warranty_rate = '<?php echo $apply ? $apply['warranty_rate'] : 0; ?>';
const service_fee = '<?php echo $apply ? $apply['service_fee'] : 0; ?>';
</script>

2
wms/cont/sign_list.php

@ -190,7 +190,7 @@ if ($data) :
<?php
foreach ($editableColumn as $key => $val) {
if ($key == 'apply_key') {
echo "<td> <a href='query_form.php?apply_key=$row[$key]&token=" . $_GET['token'] . "'>" . $row[$key] . "</td>";
echo "<td> <a href='pricereviewCheck.php?apply_key=$row[$key]&token=" . $_GET['token'] . "'>" . $row[$key] . "</td>";
} elseif ($key == 'brand') {
echo "<td>" . (!empty($row[$key]) ? $elevator_brand_arr[$row[$key]] : "") . "</td>";
} else {

8
wms/cont/window-modal/modalElevaotr.php

@ -99,7 +99,7 @@
</select>
</td>
<td>
<select class="form-control" x-model="modalElevatorInfo.m1" @change="getModalElevatorPrice()">
<select class="form-control" x-model="modalElevatorInfo.m1" @change="getModalElevatorPrice();changeMonths()">
<option value="N"></option>
<option value="Y"></option>
</select>
@ -107,11 +107,13 @@
</tr>
<tr class="table-active">
<th colspan=2>電梯許可證號</th>
<th colspan=2>保養方式</th>
<th>檢測費</th>
<th>保養方式</th>
</tr>
<tr class="table-active">
<td colspan=2><input type="text" class="form-control" x-model="modalElevatorInfo.permitNumber" /></td>
<td colspan=2>
<td><input type="number" class="form-control" x-model="modalElevatorInfo.inspectionFee" /></td>
<td>
<select class="form-control" x-model="modalElevatorInfo.method" @change="getModalElevatorPrice()">
<option value="">請選擇</option>
<option value="A">全包</option>

2
wms/cont/window-modal/otherOptionModal.php

@ -1,7 +1,7 @@
<div class="window-modal" x-cloak data-type="window-modal" x-show="modalShow.other" x-ref="createOtherOptionModal" id="createOtherOptionModal">
<div class="window-modal-content modal-xl">
<div class="window-modal-header">
<h4>新增除外項目</h4>
<h4>新增附加項目</h4>
<button class="btn btn-close" @click="hideCreateOtherOptionModal()">X</button>
</div>
<div class="window-modal-body">

194
wms/contract/api/getContractData.php

@ -49,7 +49,9 @@ if (isset($_GET['contractno']) && $_GET['contractno'] != '' && isset($_GET['cont
$contractno = $_GET['contractno'];
$sql_str = "SELECT a.*,b.lm_tel,b.uscc,b.manager,b.linkman FROM pricereview_main AS a
LEFT JOIN hope_elevator_customer AS b ON a.contractno = b.vol_no
WHERE a.contractno = :contractno AND a.status != 'YN' ";
WHERE a.contractno = :contractno
-- AND a.status != 'YN'
";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':contractno', $contractno);
$stmt->execute();
@ -73,11 +75,11 @@ if (isset($_GET['contractno']) && $_GET['contractno'] != '' && isset($_GET['cont
$elevators_results = $stmt->fetchAll(PDO::FETCH_ASSOC);
$elevators_detail_arr = [];
$contract_elevator_qty = 0;
$sql = "SELECT * FROM pricereview_pay WHERE mid = :mid";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':mid', $mid);
$stmt->execute();
$pay_amount = $stmt->fetchAll(PDO::FETCH_ASSOC);
$pay_arr = [
'equipment_total' => 0, //設備款
@ -91,10 +93,10 @@ if (isset($_GET['contractno']) && $_GET['contractno'] != '' && isset($_GET['cont
$pay_arr['equipment_total'] += $pay['pay_amount'];
if ($pay['pay_scale'] > 0) {
$elevotor_pay_detail = [
'kind' => $pay['pay_kind'],
'pay_kind' => $pay['pay_kind'],
'pay_scale' => $pay['pay_scale'],
'pay_period' => $pay['pay_period'],
'amount' => $pay['pay_amount']
'pay_amount' => $pay['pay_amount']
];
// $elevotor_pay_detail['pay_scale'] = $pay['pay_scale'];
// $pay_arr['elevotor_pay_detail']['kind'] = $pay['pay_kind'];
@ -108,18 +110,12 @@ if (isset($_GET['contractno']) && $_GET['contractno'] != '' && isset($_GET['cont
if ($pay['pay_scale'] > 0) {
$a = $pay['pay_kind'];
$elevotor_pay_detail = [
'kind' => "$a",
'pay_kind' => "$a",
'pay_scale' => $pay['pay_scale'],
'pay_period' => $pay['pay_period'],
'amount' => $pay['pay_amount']
'pay_amount' => $pay['pay_amount']
];
array_push($pay_arr['elevotor_pay_detail'], $elevotor_pay_detail);
// $elevotor_pay_detail[] = $pay['pay_kind'];
// $pay_arr['elevotor_pay_detail']['kind'] = $pay['pay_kind'];
// $pay_arr['elevotor_pay_detail']['pay_scale'] = $pay['pay_scale'];
// $pay_arr['elevotor_pay_detail']['pay_period'] = $pay['pay_period'];
// $pay_arr['elevotor_pay_detail']['amount'] = $pay['pay_amount'];
}
}
}
@ -127,6 +123,7 @@ if (isset($_GET['contractno']) && $_GET['contractno'] != '' && isset($_GET['cont
// print_r($pay_arr);
// echo "</pre>";
// 計算電梯數
foreach ($elevators_results as $keys) {
$contract_elevator_qty += $keys['item_qty'];
}
@ -212,6 +209,179 @@ if (isset($_GET['contractno']) && $_GET['contractno'] != '' && isset($_GET['cont
}
}
// 汰改
if (isset($_GET['contractno']) && $_GET['contractno'] != '' && isset($_GET['contracttype']) && $_GET['contracttype'] == 't') {
try {
$contractno = $_GET['contractno'];
$sql = "SELECT a.*,b.lm_tel,b.uscc,b.manager,b.linkman FROM pricereview_main AS a
LEFT JOIN hope_elevator_customer AS b ON a.contractno = b.vol_no
WHERE a.contractno = :contractno
-- AND a.status != 'YN'
";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':contractno', $contractno);
$stmt->execute();
$contract = $stmt->fetch(PDO::FETCH_ASSOC);
$id = $contract['id'];
// 查詢 manager and departno
$salesman = $contract['person'];
$sql = "SELECT * FROM account WHERE accountid = :accountid ";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':accountid', $salesman);
$stmt->execute();
$account_detail = $stmt->fetch(PDO::FETCH_ASSOC);
$contract['manager'] = $account_detail['manager'];
$contract['salesman_departno'] = $account_detail['department_id'];
// 價格審查單-明細項目
$mid = $contract['id'];
$sql = "SELECT * FROM pricereview_item WHERE mid = :mid AND item_group = 'A' ";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':mid', $mid);
$stmt->execute();
$elevators_results = $stmt->fetchAll(PDO::FETCH_ASSOC);
$elevators_detail_arr = [];
$contract_elevator_qty = 0;
// 合約付款項目
$sql = "SELECT * FROM pricereview_pay WHERE mid =:id";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':id', $id);
$stmt->execute();
$pay_amount = $stmt->fetchAll(PDO::FETCH_ASSOC);
// $pay_kind[] = $result;
// $contract['pay_kind'] = $pay_kind;
$pay_arr = [
'equipment_total' => 0, //設備款
'install_total' => 0, //安裝款
'elevotor_pay_detail' => []
];
// echo "<pre>";
// print_r($pay_amount);
// echo "</pre>";
$elevotor_pay_detail = [];
foreach ($pay_amount as $i => $pay) {
if ($pay['pay_kind'] <= 4) {
// 設備款總價
$pay_arr['equipment_total'] += $pay['pay_amount'];
if ($pay['pay_scale'] > 0) {
$elevotor_pay_detail = [
'pay_kind' => $pay['pay_kind'],
'pay_scale' => $pay['pay_scale'],
'pay_period' => $pay['pay_period'],
'pay_amount' => $pay['pay_amount']
];
// $elevotor_pay_detail['pay_scale'] = $pay['pay_scale'];
// $pay_arr['elevotor_pay_detail']['kind'] = $pay['pay_kind'];
// $pay_arr['elevotor_pay_detail']['pay_scale'] = $pay['pay_scale'];
// $pay_arr['elevotor_pay_detail']['pay_period'] = $pay['pay_period'];
// $pay_arr['elevotor_pay_detail']['amount'] = $pay['pay_amount'];
array_push($pay_arr['elevotor_pay_detail'], $elevotor_pay_detail);
}
} else {
$pay_arr['install_total'] += $pay['pay_amount'];
if ($pay['pay_scale'] > 0) {
$a = $pay['pay_kind'];
$elevotor_pay_detail = [
'pay_kind' => "$a",
'pay_scale' => $pay['pay_scale'],
'pay_period' => $pay['pay_period'],
'pay_amount' => $pay['pay_amount']
];
array_push($pay_arr['elevotor_pay_detail'], $elevotor_pay_detail);
}
}
}
// 計算電梯數
foreach ($elevators_results as $keys) {
$contract_elevator_qty += $keys['item_qty'];
}
foreach ($elevators_results as $keys => $result) {
$item_no = $result['item_no']; //電梯項次
// 電梯 OPTION
$sql = "SELECT * FROM pricereview_item WHERE mid =:mid AND item_group ='B' AND option_relate_spec = :item_no";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':item_no', $item_no);
$stmt->execute();
$option_results = $stmt->fetchAll(PDO::FETCH_ASSOC);
$option_arr[] = $option_results;
// echo "<pre>";
// print_r($option_arr);
// echo "</pre>";
if (!empty($option_results)) {
$result['option_price'] = 0;
// 電梯 OPTION 價格分別加到各台電梯
foreach ($option_results as $key => $option) {
if ($option['item_qty'] == $result['item_qty']) {
$result['option_price'] += intval($option['item_unit_price']);
} else if ($option['item_qty'] / $result['item_qty'] != 1) {
$item_qty = intval($option['item_qty']) / intval($result['item_qty']); // 總option數量 / 總電梯台數
$result['option_price'] += intval($option['item_unit_price']) * $item_qty;
} else {
$result['option_price'] += $option['item_unit_price'] * intval($option['item_qty']);
}
}
}
// 電梯 拆梯 價格分配到每台電梯
$sql = "SELECT * FROM pricereview_item WHERE mid =:mid AND item_group ='D' AND option_relate_spec = :item_no";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':mid', $mid);
$stmt->bindParam(':item_no', $item_no);
$stmt->execute();
$dismantle_arr = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (!empty($dismantle_arr)) {
$result['dismantle_price'] = 0;
// 電梯 OPTION 價格分別加到各台電梯
foreach ($dismantle_arr as $key => $dismantle) {
if ($dismantle['item_qty'] == $result['item_qty']) {
$result['dismantle_price'] += intval($dismantle['item_unit_price']);
} else if ($dismantle['item_qty'] / $result['item_qty'] != 1) {
$item_qty = intval($dismantle['item_qty']) / intval($result['item_qty']); // 總option數量 / 總電梯台數
$result['dismantle_price'] += intval($dismantle['item_unit_price']) * $item_qty;
} else {
$result['dismantle_price'] += $dismantle['item_unit_price'] * intval($dismantle['item_qty']);
}
}
}
$note = explode(',', $result['note']);
$result['spec'] = $note[0]; //型號
$result['person'] = $note[1]; // 人承
$result['floor'] = $note[2]; // 樓層
$result['speed'] = $note[3]; // 速度
$count_qty = $result['item_qty'];
for ($i = 0; $i < $count_qty; $i++) {
$result['elevator_price'] = round($result['item_price_ct'] / $result['item_qty']); //合約單台電提價格
$result['commission_fee'] = round($contract['special_fee']) / $contract_elevator_qty;
$result['item_no'] = $i + 1;
$result['item_qty'] = 1;
array_push($elevators_detail_arr, $result);
}
}
$count = COUNT($elevators_detail_arr);
$contract['elevators'] = $elevators_results;
$contract['elevators_detail_arr'] = $elevators_detail_arr;
$contract['pay_arr'] = $pay_arr;
$contract['nums'] = $count;
// echo "<pre>";
// print_r($contract);
// echo "</pre>";
header('Content-Type: application/json');
echo json_encode($contract);
} catch (PDOException $e) {
die("ERROR!!!: " . $e->getMessage());
}
}
if (!empty($_GET['contracttype']) && $_GET['contracttype'] == 'accountManger' && !empty($_GET['salesman'])) {
try {
$salesman = $_GET['salesman'];

46
wms/contract/api/getFacilityNo.php

@ -49,6 +49,21 @@ class CreateFacilityNo
}
}
function connectionT8DB()
{
try {
$connT8 = new PDO("sqlsrv:Server=220.130.203.251;Database=T8TEST", "M0225", "IFFBU1E=");
if ($connT8) {
$connT8->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
// $connT8->exec('SET CHARACTER SET utf8mb4');
return $connT8;
//如果連接錯誤,將抛出一個PDOException異常對象
} catch (PDOException $e) {
//如果連結資料庫失敗則顯示錯誤訊並停止本頁的工作
die("ERROR!!!: " . $e->getMessage());
}
}
/**
* 結束資料庫連線
*/
@ -381,11 +396,15 @@ class CreateFacilityNo
function checkFacilityRepeatStatus($facility_no)
{
include_once('../conn.php');
// worksite wipwholestatus
// 檢查 substring 後五碼
if (gettype($facility_no) == "string") {
$pdo = $this->connectionDB();
$pdo->exec('SET CHARACTER SET utf8mb4');
$connT8 = $this->connectionDB();
$sth = $pdo->prepare('SELECT * FROM `worksite` WHERE `facilityno` = ?');
$sth->bindValue(1, $facility_no);
$sth->execute();
@ -393,29 +412,48 @@ class CreateFacilityNo
return true;
}
$facility_no = substr($facility_no, -5);
echo $facility_no;
$pdo = $this->connectionDB();
$pdo->exec('SET CHARACTER SET utf8mb4');
$sth = $pdo->prepare("SELECT * FROM `wipwholestatus` WHERE `facilityno` LIKE '%?'");
$sth = $pdo->prepare("SELECT * FROM `wipwholestatus` WHERE `facilityno` LIKE ? ");
$sth->bindValue(1, '%' . $facility_no . '%');
$sth->execute();
if ($sth->rowCount() == 0) {
return true;
}
$sql = "SELECT * FROM comMaterial WHERE MaterialId like '%$facility_no%'";
$stmt = $connT8->prepare($sql);
$stmt->execute();
$count = $stmt->rowCount();
echo $count;
if ($count == 0) {
return true;
}
return false;
}
if (gettype($facility_no) == "array") {
$pdo = $this->connectionDB();
$pdo->exec('SET CHARACTER SET utf8mb4');
$connT8 = $this->connectionT8DB();
$status = true;
foreach ($facility_no as $row) {
$sth = $pdo->prepare('SELECT * FROM `worksite` WHERE `facilityno` = ?');
$sth->bindValue(1, $row);
$sth->execute();
if ($sth->rowCount() !== 0)
if ($sth->rowCount() !== 0) {
$status = false;
}
$sql = "SELECT * FROM comMaterial WHERE MaterialId like '%$row%' ";
echo $sql;
$stmt = $connT8->prepare($sql);
$stmt->execute();
$count = $stmt->rowCount();
echo $count;
if ($count != 0) {
$status = false;
}
$row = substr($row, -5);
$pdo = $this->connectionDB();
$pdo->exec('SET CHARACTER SET utf8mb4');

162
wms/contract/api/newElevatorBonus.php

@ -0,0 +1,162 @@
<?php
function BounsCount($data, $conn, $facilityno)
{
try {
require_once("../../bonus/elevator_new/elevator_new_deal_bonus.php");
$dailyNecessities = [
'MAE100' => 'passenger', //小機房
'MAM200' => 'passenger', //無機房
'MAH100' => 'dumbwaiter', //小電梯
'MAQ100' => 'positive_drive', //強趨梯
'MAF100' => 'cargo', //貨梯
'MAP100' => 'flatbase', // 平台踢
];
$contractType = [
'1' => 'strategy_customer',
'2' => 'general_customer'
];
$signing_date = $data['signing_date'];
$bonus_v1_0_date = '2024-01-02';
$bonus_v2_0_date = '2024-01-03';
$contract_type = $data['contract_type'];
$total = $data['price_total'];
$type = $contractType[$contract_type]; //戰略客戶 or 一般客戶
// $elevator_knockdown_price = $data['price_total']; //受價總額
$elevators = json_decode($data['elevators_detail_arr'], true);
$contract_no = $data['contractno'];
$salesman = $data['salesman'];
$manager = $data['manager'];
$contract_kind = 1;
$pay_arr = !empty($data['pay_arr']) ? json_decode($data['pay_arr'], true) : []; //電梯
$create_id = $data['user_id'];
$create_at = date("Y-m-d H:i:s");
$status = 1;
$result_bonus = [];
$result_bonus_arr = [];
if ($signing_date <= $bonus_v1_0_date) {
$ver = '1.0';
foreach ($elevators as $key => $elevator) {
$other_price = !empty($elevator['option_other_price']) ? $elevator['option_other_price'] : 0;
$elevator_knockdown_price = $elevator['elevator_price']; // 單台電梯售價
$elevator_list_price = $other_price + $elevator['option_price'] + $elevator['elevator_price']; //牌價
$result_bonus = elevator_new_deal_bonus_v1_0($ver, $type, $pay_arr['elevotor_pay_detail'], $salesman, $manager);
$facility_no = $facilityno[$key];
$bonus_json = [
'contract_type' => $type,
'total' => $elevator_list_price,
'fee_per_st' => $elevator_knockdown_price
];
echo "<pre>";
print_r($result_bonus);
echo "</pre>";
if (!empty($result_bonus)) {
if ($result_bonus['result_status'] != "error") {
foreach ($result_bonus['bonus_array'] as $i => $result) {
// $bonus_type = explode('-', $result['bonus_type']);
$pay_man_type = $result['bonus_type']; //發放類別
// $bonus_kind = $bonus_type[1];
$amount = round($result['bonus_amount']); //獎金水庫
$bonus_receiver = $result['bonus_receiver']; //發放人員
$bonus_json['payment_schedul_due'] = $result['payment_schedul_due'];
$bonus_json['payment_schedul_regulation'] = $result['payment_schedul_regulation'];
$bonus_json['bonus_kind'] = $result['payment_schedul_due'];
$a = json_encode($bonus_json, JSON_UNESCAPED_UNICODE);
$sql = "INSERT INTO bonus
(bonus_type,bonus_verson,contract_no,contract_type,facility_no,amount,receiver,status,bonus_json,create_id,create_at) VALUES
($pay_man_type,'$ver','$contract_no',$contract_kind,'$facility_no',$amount,'$bonus_receiver',$status,'$a','$create_id','$create_at')
";
$stmt = $conn->prepare($sql);
$stmt->execute();
}
} else {
$status = 0;
}
} else {
$status = 0;
}
}
if ($status == 0) {
$response = [
"status" => "2",
"data" => "create_bonus_error"
];
} else {
$response = [
"status" => "1",
"data" => "Success"
];
}
return $response;
} else if ($signing_date >= $bonus_v2_0_date) {
$ver = '2.0';
foreach ($elevators as $key => $elevator) {
$option_other_price = !empty($elevator['option_other_price']) ? intval($elevator['option_other_price']) : 0;
$elevator_type = $dailyNecessities[$elevator['spec']];
$elevator_list_price = $option_other_price + $elevator['option_price'] + $elevator['elevator_price'];
$elevator_knockdown_price = $elevator['elevator_price'];
$commission_fee = $elevator['commission_fee'];
$result_bonus = elevator_new_deal_bonus_v2_0(
$ver,
$type,
$elevator_type,
$elevator_list_price,
$elevator_knockdown_price,
$pay_arr['elevotor_pay_detail'],
$salesman,
$manager
);
$facility_no = $facilityno[$key];
$bonus_json = [
'contract_type' => $type,
'total' => $elevator_list_price,
'fee_per_st' => $elevator_knockdown_price
];
if (!empty($result_bonus)) {
if ($result_bonus['result_status'] != "error") {
foreach ($result_bonus['bonus_array'] as $i => $result) {
// $bonus_type = explode('-', $result['bonus_type']);
$pay_man_type = $result['bonus_type']; //發放類別
$amount = $result['bonus_amount']; //獎金水庫
$bonus_receiver = $result['bonus_receiver']; //發放人員
$bonus_json['payment_schedul_due'] = $result['payment_schedul_due'];
$bonus_json['payment_schedul_regulation'] = $result['payment_schedul_regulation'];
$bonus_json['bonus_kind'] = $result['payment_schedul_due'];
$a = json_encode($bonus_json, JSON_UNESCAPED_UNICODE);
$sql = "INSERT INTO bonus
(bonus_type,bonus_verson,contract_no,contract_type,facility_no,amount,receiver,status,bonus_json,create_id,create_at) VALUES
($pay_man_type,'$ver','$contract_no',$contract_kind,'$facility_no',$amount,'$bonus_receiver',$status,'$a','$create_id','$create_at')
";
$stmt = $conn->prepare($sql);
$stmt->execute();
}
} else {
$status = 0;
}
} else {
$status = 0;
}
}
if ($status == 0) {
$response = [
"status" => "2",
"data" => "create_bonus_error"
];
} else {
$response = [
"status" => "1",
"data" => "Success"
];
}
}
return $response;
} catch (PDOException $e) {
header("HTTP/1.1 500 Internal Server Error");
die('Error!:' . $e->getMessage());
}
}

374
wms/contract/api/newElevatorT8.php

@ -0,0 +1,374 @@
<?php
function T8Insert($data, $facilityno, $connT8)
{
// try {
// 引入銷售訂單 API
require_once("./T8API.php");
$contractno = $data['contractno'];
$partyA = $data['customer'];
$phone = $data['lm_tel'];
$vat = $data['vat'];
$partyAaddress = $data['address'];
$user_id = $data['user_id'];
$salesman = $data['salesman'];
$createAt = date("Y-m-dH-i-s");
$elevators = !empty($data['elevators_detail_arr']) ? json_decode($data['elevators_detail_arr'], true) : []; //電梯
$pay_arr = !empty($data['pay_arr']) ? json_decode($data['pay_arr'], true) : []; //電梯
$createTime = str_replace('-', '', $createAt);
$signing_date = intval(str_replace("-", '', $data['signing_date'])); //簽訂日期
// echo
// $pay_kind = [
// '1' => '簽約',
// '2' => '二次款',
// '3' => '貨抵工地',
// '4' => '材料其他',
// '5' => '試車完工', //安裝完畢
// '6' => '交車' //交車
// ];
$pay_kind = [
'1' => '簽約',
'2' => '二次款',
'3' => '貨抵工地',
'4' => '材料其他',
'5' => '試車完工', //安裝完畢
'6' => '交車' //交車
];
$sql = "SELECT * FROM comCustomer
WHERE BizPartnerId = :BizPartnerId
";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':BizPartnerId', $contractno);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
// 新增客戶 table
if (empty($result)) {
// 若 客戶資料為空,新增一筆到 comCustomer
// 新增客戶資料
$sql = "INSERT INTO comBusinessPartner
(BizPartnerId,BizPartnerName,BusinessAttr,CountryId,WorkTelNo,BizToDate,TaxNo,EnterpriseName,ContactAddress,CreatorId,CreateTime,BizPartnerTypeId)
VALUES(:BizPartnerId,:BizPartnerName,1,'TW',:WorkTelNo,99999999,:TaxNo,:EnterpriseName,:ContactAddress,:CreatorId,:CreateTime,'10')";
// $sql = "INSERT INTO comBusinessPartner
// (BizPartnerId,BizPartnerName,BusinessAttr,CountryId,WorkTelNo,BizToDate,TaxNo,EnterpriseName,ContactAddress,CreatorId,CreateTime,BizPartnerTypeId)
// VALUES('$contractno','$partyA',1,'TW','$phone',99999999,'$vat', '$partyA','$partyAaddress','$user_id',$createTime,'10')";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':BizPartnerId', $contractno);
$stmt->bindParam(':BizPartnerName', $partyA); //客戶名稱
$stmt->bindParam(':WorkTelNo', $phone);
$stmt->bindParam(':TaxNo', $vat);
$stmt->bindParam(':EnterpriseName', $partyA); //企業名稱
$stmt->bindParam(':ContactAddress', $partyAaddress);
$stmt->bindParam(':CreatorId', $user_id);
$stmt->bindParam(':CreateTime', $createTime);
$stmt->execute();
$sql = "INSERT INTO comCustomer
(OrgId,BizPartnerTypeId,ConditionId,CurrId,BizPartnerId,PersonId,CreatorId,IsInUsed,InvoiceAddress,CreateTime,InvoiceId)VALUES
('1000','10','0008','TWD',:BizPartnerId,:PersonId,:CreatorId,1,:InvoiceAddress,:CreateTime,'35')";
// $sql = "INSERT INTO comCustomer
// (OrgId,BizPartnerTypeId,CurrId,BizPartnerId,PersonId,CreatorId,IsInUsed,InvoiceAddress,CreateTime,InvoiceId)
// VALUES('1000','10','TWD','$contractno','$salesman','$user_id',1,'$partyAaddress','$createTime','35')";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':BizPartnerId', $contractno);
$stmt->bindParam(':PersonId', $salesman);
$stmt->bindParam(':CreatorId', $user_id);
$stmt->bindParam(':InvoiceAddress', $partyAaddress);
$stmt->bindParam(':CreateTime', $createTime);
$stmt->execute();
exit();
} else {
// 若客戶資料不為空,更新該客戶資訊。
$sql = "UPDATE comCustomer SET
PersonId=:PersonId,
ConditionId='0008',
CurrId='TWD',
InvoiceAddress=:InvoiceAddress,
LastOperatorId=:LastOperatorId,
LastOperateTime=:LastOperateTime
WHERE BizPartnerId=:BizPartnerId
";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':PersonId', $salesman);
$stmt->bindParam(':InvoiceAddress', $partyAaddress);
$stmt->bindParam(':LastOperatorId', $user_id);
$stmt->bindParam(':LastOperateTime', $createTime);
$stmt->bindParam(':BizPartnerId', $contractno);
$stmt->execute();
$sql = "UPDATE comBusinessPartner SET
BizPartnerName=:BizPartnerName,
WorkTelNo=:WorkTelNo,
TaxNo=:TaxNo,
EnterpriseName=:EnterpriseName,
ContactAddress=:ContactAddress,
LastOperatorId=:LastOperatorId,
LastOperateTime=:LastOperateTime
WHERE BizPartnerId = :BizPartnerId
";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':BizPartnerName', $partyA);
$stmt->bindParam(':WorkTelNo', $phone);
$stmt->bindParam(':TaxNo', $vat);
$stmt->bindParam(':EnterpriseName', $partyA);
$stmt->bindParam(':ContactAddress', $partyAaddress);
// $stmt->bindParam(':EMail', $email);
$stmt->bindParam(':LastOperatorId', $user_id);
$stmt->bindParam(':LastOperateTime', $createTime);
$stmt->bindParam(':BizPartnerId', $contractno);
$stmt->execute();
}
$sql = "SELECT * FROM comProject WHERE ProjectId = :ProjectId";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':ProjectId', $contractno);
$stmt->execute();
$resultProject = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (empty($resultProject)) {
//新增於 comProject。合約 table
$sql = "INSERT INTO comProject(ProjectId,ProjectName,TypeId,CreateTime,CreatorId,IsInUsed)
VALUES(:ProjectId,:ProjectName,'C0',:CreateTime,:CreatorId,1)";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':ProjectId', $contractno);
$stmt->bindParam(':ProjectName', $partyA);
$stmt->bindParam(':CreateTime', $createTime);
$stmt->bindParam(':CreatorId', $user_id);
$stmt->execute();
}
$sql = "SELECT * FROM salSalesOrder WHERE BillNo = :BillNo";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':BillNo', $contractno);
$contractT8 = $stmt->fetch(PDO::FETCH_ASSOC);
if (empty($contractT8)) {
foreach ($elevators as $index => $elevator) {
$count = 1;
// 產品集成維護
$facility_no = $facilityno[$index];
$MaterialName = "$partyA($facility_no)";
$contract_arrival_a = $elevator['contract_arrival_date'];
$sql = "SELECT * FROM comMaterial WHERE MaterialId = '$facility_no'";
$stmt = $connT8->prepare($sql);
$stmt->execute();
$MaterialisIt = $stmt->fetch(PDO::FETCH_ASSOC);
if (empty($MaterialisIt)) {
$sql = "INSERT INTO comMaterial
(FOrgid,MaterialId,MaterialTypeId,MaterialCategoryId,CreatorId,CreateTime,IsInUsed)
VALUES ('1000',:MaterialId,'10','A',:CreatorId,:CreateTime,1)";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':MaterialId', $facility_no);
$stmt->bindParam(':CreatorId', $user_id);
$stmt->bindParam(':CreateTime', $createTime);
$stmt->execute();
$sql = "INSERT INTO comMaterialGroup
(MaterialTypeId,MaterialId,MaterialName,MaterialCategoryId,IsInUsed,UnitId,CreatorId,CreateTime)
VALUES ('10',:MaterialId,:MaterialName,'A',1,'SET',:CreatorId,:CreateTime)";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':MaterialId', $facility_no);
$stmt->bindParam(':MaterialName', $MaterialName);
$stmt->bindParam(':CreatorId', $user_id);
$stmt->bindParam(':CreateTime', $createTime);
$stmt->execute();
$sql = "INSERT INTO comMaterialPurchases
(Orgid,MaterialTypeId,MaterialId,CurrId,SUnitId,TaxId,CreatorId,CreateTime)
VALUES ('1000','10',:MaterialId,'TWD','SET','ST005',:CreatorId,:CreateTime)";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':MaterialId', $facility_no);
$stmt->bindParam(':CreatorId', $user_id);
$stmt->bindParam(':CreateTime', $createTime);
$stmt->execute();
$sql = "INSERT INTO plsMaterialPlanData
(PlanRangeId,MaterialId,FOrgId,MaterialTypeId,CreatorId,CreateTime,DefaultDemandOrg) VALUES
(1000,:MaterialId,1000,10,:CreatorId,:CreateTime,1000)
";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':MaterialId', $facility_no);
$stmt->bindParam(':CreatorId', $user_id);
$stmt->bindParam(':CreateTime', $createTime);
$stmt->execute();
$sql = "INSERT INTO comMaterialSales
(OrgId,MAterialTypeId,MaterialId,CurrId,SUnitId,SupplyOrgId,CreatorId,CreateTime,IsInUsed) VALUES
(1000,10,:MaterialId,'TWD','SET',1000,:CreatorId,:CreateTime,1)
";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':MaterialId', $facility_no);
$stmt->bindParam(':CreatorId', $user_id);
$stmt->bindParam(':CreateTime', $createTime);
$stmt->execute();
}
// 階段收款資訊
$salOrderStagePay_row = [];
$equipment_total = 0;
$install_total = 0;
$equipment_total = $pay_arr['equipment_total'];
$install_total = $pay_arr['install_total'];
$count_a = 0;
$count_month = 1;
foreach ($pay_arr['elevotor_pay_detail'] as $key => $detail) {
if ($detail['pay_kind'] == 3) {
$PlanPayDate = $contract_arrival_a;
} else if ($detail['pay_kind'] > 3) {
$PlanPayDate = date("Y-m-d", strtotime($contract_arrival_a . '+' . $count_month . ' month'));
$count_month++;
} else {
$PlanPayDate = $signing_date;
$count_a++;
if ($count_a == 1) {
$PlanPayDate = date("Y-m-d", strtotime($signing_date . '+' . $count_a . ' month'));
}
}
$contract_arrival_date = intval(str_replace("-", '', $PlanPayDate)); //貨到工地日
$PayStage = $pay_kind[$detail['pay_kind']];
$PlanPercentage = intval($detail['pay_scale']) / 100;
$rows = [
"PayStage" => "$PayStage", //收款階段
"PlanPercentage" => $PlanPercentage, //計劃收款比例(%)
"PlanPayAmt" => $detail['pay_amount'], //計劃收款金額
"PlanPayDate" => $contract_arrival_date, //計劃收款日期 1.第一筆都是簽約日
"BillNo" => "$contractno",
"RowCode" => $key + 1,
"RowNo" => $key + 1,
"UnWriteOffOAmount" => $detail['pay_amount'] //未核銷金額
];
$salOrderStagePay_row[] = $rows;
}
// 設備
$row1 = [
"TaxId" => "ST005",
"RequirementDate" => $signing_date, //出貨日期
"ConsignmentDate" => $signing_date, //發貨日期
"BillNo" => "$contractno", //合約號
"RowCode" => $count, //全部筆數排列
"ItemType" => 1,
"MaterialId" => "A40001", //1.設備(A40001)、2.安裝(A4008)、3.作番號(作番)
"SUnitId" => "SET",
"SQuantity" => 1, //交易數量
"SPrice" => $equipment_total, //交易價格
"CU_MaterialId" => $facility_no
];
$count++;
// 安裝
$row2 = [
"TaxId" => "ST005",
"RequirementDate" => $signing_date, //出貨日期
"ConsignmentDate" => $signing_date, //發貨日期
"BillNo" => "$contractno", //合約號
"RowCode" => $count, //全部筆數排列
"ItemType" => 1,
"MaterialId" => "A40008", //1.設備(A40001)、2.安裝(A4008)、3.作番號(作番)
"SUnitId" => "SET",
"SQuantity" => 1, //交易數量
"SPrice" => $install_total, //交易價格
"CU_MaterialId" => $facility_no
];
$count++;
// 產品(作番)
$row3 = [
"TaxId" => "ST005",
"RequirementDate" => $signing_date, //出貨日期
"ConsignmentDate" => $signing_date, //發貨日期
"BillNo" => "$contractno", //合約號
"RowCode" => $count, //全部筆數排列
"ItemType" => 0,
"MaterialId" => "$facility_no", //1.設備(A40001)、2.安裝(A4008)、3.作番號(作番)
"SUnitId" => "SET",
"SQuantity" => 1, //交易數量
"SPrice" => 0, //交易價格
"CU_MaterialId" => $facility_no // 歸屬作番號
];
$count++;
$SubOrder_row[] = $row1;
$SubOrder_row[] = $row2;
$SubOrder_row[] = $row3;
$count++;
}
$MainSalesOrder_row = [
"BillNo" => "$contractno", //合約單號
"BillDate" => $signing_date, //簽約日期
"TypeId" => "SO", //
"FOrgId" => "1000",
"OrgId" => "1000",
"ModeId" => "M", // T汰改 M新梯
"BizPartnerId" => "$contractno", //客戶代碼
"CurrId" => "TWD",
"CurrOAmount" => 1,
"CurrLAmount" => 1,
"PersonId" => "$salesman", //業務人員
"DueToId" => "$contractno", //債務方
"TradeConditionId" => "",
"TaxId" => "ST005",
"CreditorCompId" => "1001",
"CreditorOrgId" => "1000",
"CreatorId" => "$user_id"
// "CompId" => "1001",
// "CreditorCurrOAmount" => 1,
// "CreditorCurrLAmount" => 1
];
$MainSalesOrder = [
"name" => "MainSalesOrder",
'rows' => [$MainSalesOrder_row]
];
$SubOrder = [
"name" => "SubOrder",
"rows" => $SubOrder_row
];
$salOrderStagePay = [
"name" => "salOrderStagePay",
"rows" => $salOrderStagePay_row
];
$API_body = [];
$API_body[] = $MainSalesOrder;
$API_body[] = $SubOrder;
$API_body[] = $salOrderStagePay;
if ($user_id == 'M0225') {
echo "<pre>";
print_r(json_encode($API_body, JSON_UNESCAPED_UNICODE));
echo "</pre>";
}
// $api_url = 'http://10.10.145.2:880/twWebAPI/V1/SALSALESORDER/PostERPData'; //正式區
$api_url = "http://60.244.87.101:880/twWebAPI/V1/SALSALESORDER/PostERPData"; //測試區
$result = T8salIncomeApply($API_body, $api_url);
if ($user_id == 'M0225') {
echo "<pre>";
print_r($result);
echo "</pre>";
}
if (!empty($result) && ($result['Status'] == 'Fails' || $result['Status'] == 'Error')) {
$Error_msg = $result['ErrorMsg'];
// echo "<script>alert('$Error_msg')</script>";
// exit();
// echo $result['ErrorMsg'];
// echo "</script>";
echo $Error_msg;
}
} else {
echo '資料已新增過,請洽資訊人員';
// exit();
}
// $connT8->commit();
// } catch (PDOException $e) {
// $connT8->rollback();
// header("HTTP/1.1 500 Internal Server Error");
// die('Error!:' . $e->getMessage());
// }
}

379
wms/contract/api/postContractData.php

@ -1,7 +1,6 @@
<?php
header("Content-Type: text/html; charset=utf-8");
require_once("../conn.php");
// require_once("../connt8.php");
include_once("./getFacilityNo.php");
include_once("./getComboNo.php");
include_once("./upload_chk.php");
@ -68,9 +67,10 @@ if (isset($_POST["contractno"]) && $_POST["contractno"] != "" && isset($_POST['c
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);
// exit();
// if ($user_id == 'M0225') {
// echo '<pre>';
@ -79,7 +79,7 @@ if (isset($_POST["contractno"]) && $_POST["contractno"] != "" && isset($_POST['c
// exit();
// }
$fail_arr = [];
// if ($contractno === '') return $fail_arr[] = '合約號為必填';
if ($contractno === '') return $fail_arr[] = '合約號為必填';
if ($total_price == '') $fail_arr[] = '合約總價為必填';
if ($salesman == '') $fail_arr[] = '營業員為必填';
if ($contract_begin_date == '') $fail_arr[] = '合約開始時間為必填';
@ -108,11 +108,10 @@ if (isset($_POST["contractno"]) && $_POST["contractno"] != "" && isset($_POST['c
echo json_encode($fail_arr, JSON_UNESCAPED_UNICODE);
exit();
}
exit();
T8insert($_POST, $facilityno, $depId, $connT8);
exit();
// T8insert($_POST, $facilityno, $depId, $connT8);
/// 獎金計算
$aaa = bonusCreate($_POST, $facilityno, $conn);
exit();
if (!empty($aaa) && $aaa['status'] == 2) {
header("HTTP/1.1 422 Unprocessable Entity");
echo $aaa['data'];
@ -292,7 +291,7 @@ if (isset($_POST["contractno"]) && $_POST["contractno"] != "" && isset($_POST['c
}
// $regular_contract_manger_id = $elevators[$idx]['regular_contract_manger_id'];
$regular_contract_manger_id = $elevators[$idx]['regular_contract_manger_id'];
// $sql = "SELECT * FROM account WHERE accountid = '' ";
$sql = "SELECT * FROM account WHERE accountid = '$maintance_manager' ";
$stmt = $conn->prepare($sql);
@ -306,17 +305,15 @@ if (isset($_POST["contractno"]) && $_POST["contractno"] != "" && isset($_POST['c
// 南部 : M0077
// 保養組長之後調整
$mail_title = "保養計畫 : 合約號:" . $contractno . "作番號:" . $no . "-請安排此作番的保養人員";
$mail_content = "保養計畫 : 合約號:" . $contractno . "作番號:" . $no . "-請安排此作番的保養人員 <a href='https://www.masada.com.tw/wms/schedule-index.php?contractno=$contractno&facilityno=$no&token=$token'>點我</a>";
$mail_content = "保養計畫 : 合約號:" . $contractno . "作番號:" . $no . "-請安排此作番的保養人員 <a href='https://www.masada.com.tw/wms/schedule-index.php?check=1&contractno=$contractno&facilityno=$no&token=$token'>點我</a>";
// exit();
$mail->sendx(
$mail_title,
$mail_content,
[
// [$user_id, $user_detail['email']],
[$user_id, $user_detail['email']],
// [$maintance_manager, $maintance_manager_detail['email']],
// ['M0012', 'Yingying@masada.com.tw']
// [$regular_contract_manger_id, $regular_contract_manger_mail['mail']],
['M0225', 'lkmd555@masada.com.tw']
// ['M0225', 'lkmd555@masada.com.tw']
// ['M0012', 'Yingying@masada.com.tw']
],
"永佳捷科技"
@ -400,10 +397,17 @@ if (isset($_POST["contractno"]) && $_POST["contractno"] != "" && isset($_POST['c
} 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,payType, customer_phone, customer_email, repairman, contact_person, contact_address, contact_phone, contact_email, elevators_number, area, address, files_id, bonus, max_bonus, created_at, created_by,signing_date)
VALUES (:contract_no, :contract_type, :company, :customer_no, :salesperson, :contract_start_date, :contract_end_date, :total_price, :payType ,:customer_phone, :customer_email, :repairman, :contact_person, :contact_address, :contact_phone, :contact_email, :elevators_number, :area, :address, :files_id, :bonus, :max_bonus, :created_at, :created_by,:signing_date)";
$kind = [
'new' => '1',
'free_to_charge' => '2',
'renew_priceissue' => '3',
'longcontract_m1_free_charge' => '4'
];
$sql_str = "INSERT INTO contract_b_signed_back (contract_no,contract_kind, contract_type, company, customer_no, salesperson, contract_start_date, contract_end_date, total_price,payType, customer_phone, customer_email, maintance_manager, contact_person, contact_address, contact_phone, contact_email, elevators_number, area, address, files_id, created_at, created_by,signing_date)
VALUES (:contract_no, :contract_type,:contract_kind, :company, :customer_no, :salesperson, :contract_start_date, :contract_end_date, :total_price, :payType ,:customer_phone, :customer_email, :maintance_manager, :contact_person, :contact_address, :contact_phone, :contact_email, :elevators_number, :area, :address, :files_id, :created_at, :created_by,:signing_date)";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(":contract_no", $contractno);
$stmt->bindParam(":contract_kind", $kind[$contract_type]);
$stmt->bindParam(":contract_type", $contract_type);
$stmt->bindParam(":company", $company);
$stmt->bindParam(":customer_no", $customer_no);
@ -413,8 +417,7 @@ if (isset($_POST["contractno"]) && $_POST["contractno"] != "" && isset($_POST['c
$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); // 保養頻率在做番上,這邊不 insert。
$stmt->bindParam(":maintance_manager", $maintance_manager);
$stmt->bindParam(":contact_person", $contact_person);
$stmt->bindParam(":contact_address", $contact_address);
$stmt->bindParam(":contact_phone", $contact_phone);
@ -423,13 +426,13 @@ if (isset($_POST["contractno"]) && $_POST["contractno"] != "" && isset($_POST['c
$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->bindParam(':payType', $payType);
$stmt->bindParam(':signing_date', $signing_date);
// $stmt->bindParam(":cycle", $cycle); // 保養頻率在做番上,這邊不 insert。
// $stmt->bindParam(":bonus", $bonus);
// $stmt->bindParam(":max_bonus", $max_bonus);
$stmt->execute();
// T8insert($_POST, $facilityno);
@ -471,6 +474,7 @@ function T8insert($data, $facilityno, $depId, $connT8)
$invoice = !empty($_POST['invoice']) ? $_POST['invoice'] : '';
$invoice_address = !empty($_POST['invoice_address']) ? $_POST['invoice_address'] : '';
$total_price = !empty($_POST['total_price']) ? intval($_POST['total_price']) : 0;
// $email = !empty($data['email']) ? $data['email'] : null;
// $partyAaddress = !empty($data['partyAaddress']) ? $data['partyAaddress'] : null; // 業務聯絡人地址
// $num = !empty($data['num']) ? $data['num'] : null; // 電梯數量
@ -566,6 +570,7 @@ function T8insert($data, $facilityno, $depId, $connT8)
// echo '<pre>';
// print_r($elevators['maintainance']);
// echo '</pre>';
foreach ($elevators as $index => $elevator) {
$maintainance_type = $elevator['maintainance'];
if ($maintainance_type == 'A') {
@ -581,16 +586,17 @@ function T8insert($data, $facilityno, $depId, $connT8)
$stmt->bindParam(':ProjectId', $contractno);
$stmt->execute();
$resultProject = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (empty($resultProject)) {
//新增於 comProject。合約 table
$sql = "INSERT INTO comProject(ProjectId,ProjectName,TypeId,ValidityFromDate,ValidityToDate,CreateTime,CreatorId,IsInUsed)
VALUES(:ProjectId,:ProjectName,:TypeId,:ValidityFromDate,:ValidityToDate,:CreateTime,:CreatorId,1)";
$sql = "INSERT INTO comProject(ProjectId,ProjectName,TypeId,CreateTime,CreatorId,IsInUsed)
VALUES(:ProjectId,:ProjectName,:TypeId,:CreateTime,:CreatorId,1)";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':ProjectId', $contractno);
$stmt->bindParam(':ProjectName', $customer);
$stmt->bindParam(':TypeId', $type);
$stmt->bindParam(':ValidityFromDate', $beginDate);
$stmt->bindParam(':ValidityToDate', $endDate);
// $stmt->bindParam(':ValidityFromDate', $beginDate);
// $stmt->bindParam(':ValidityToDate', $endDate);
$stmt->bindParam(':CreateTime', $createTime);
$stmt->bindParam(':CreatorId', $user_id);
$stmt->execute();
@ -598,7 +604,6 @@ function T8insert($data, $facilityno, $depId, $connT8)
$row = 0;
// // 新增電梯數
foreach ($elevators as $index => $elevator) {
$facility_no = $facilityno[$index];
$sql = "INSERT INTO comMaterial
(FOrgid,MaterialId,MaterialTypeId,MaterialCategoryId,CreatorId,CreateTime)
@ -638,14 +643,11 @@ function T8insert($data, $facilityno, $depId, $connT8)
];
// 幾年
// $SQuantityYear = $elevator['maintain_months'] / 12;
// 單台電梯契約報價
$price_of_month = intval($elevator['sold_price']);
print_r($price_of_month);
exit;
//分幾期 () => 總共保養月 / 分期月
$SQuantitya = $elevator['maintain_months'] / $IncomeId[$payType];
$SQuantity = $IncomeId[$payType];
$date_1 = getNext25thDate($contract_begin_date);
// 依每台電梯去加入各個的付款項
@ -673,11 +675,13 @@ function T8insert($data, $facilityno, $depId, $connT8)
}
}
$count_rows_data = COUNT($salIncomeApplyDetail_rows);
$T8total = $price_of_month * $count_rows_data;
$T8total = $price_of_month * $elevator['maintain_months'];
// echo "<pre>";
// print_r($salIncomeApplyDetail_rows);
// print_r($T8total);
// echo "</pre>";
// exit;
if ($T8total != $total_price) {
echo '1';
$difference = $T8total - $total_price;
$salIncomeApplyDetail_rows[$count_rows_data - 1]['SPrice'] = $salIncomeApplyDetail_rows[$count_rows_data - 1]['SPrice'] - $difference;
}
@ -706,7 +710,8 @@ function T8insert($data, $facilityno, $depId, $connT8)
"DeptId" => "$depId",
"IsPriceWithTax" => 1,
"CU_ContractStart" => intval($beginDate),
"CU_ContractEnd" => intval($endDate)
"CU_ContractEnd" => intval($endDate),
"AddrId" => "$invoice_address"
];
$salIncomeApplyMaster = [
@ -724,14 +729,12 @@ function T8insert($data, $facilityno, $depId, $connT8)
echo '<pre>';
print_r(json_encode($API_body));
echo '</pre>';
// exit();
// $api_url = 'http://10.10.145.2:880/twWebAPI/V1/SALINCOMEAPPLY/PostERPData'; //正式區
$api_url = "http://60.244.87.101:880/twWebAPI/V1/SALINCOMEAPPLY/PostERPData"; //測試區
$result = T8salIncomeApply($API_body, $api_url);
// echo '<pre>';
// print_r($result);
// echo '</pre>';
// exit();
if ($result['Status'] == 'Error' || $result['Status'] == 'Fails') {
http_response_code(404);
die('Error!:' . $result['ErrorMsg']);
@ -741,143 +744,142 @@ function T8insert($data, $facilityno, $depId, $connT8)
function bonusCreate($data, $facilityno, $conn)
{
try {
require_once("../../bonus/maintance/maintaenance_contract_bonus.php");
// require_once("../../bonus/other/maintenance_longterm_contract_m1_free_charge_bonus_v2_1_1.php");
$elevators = !empty($_POST['elevators']) ? json_decode($_POST['elevators'], true) : [];
$contract_begin_date = !empty($data['contract_begin_date']) ? $data['contract_begin_date'] : '';
$salesman = !empty($data['salesman']) ? $data['salesman'] : '';
$payType = !empty($data['payType']) ? $data['payType'] : '';
$contract_type = $data['contract_type']; //合約類別
$status = 1;
$bonus_json = [];
$create_id = $data['user_id'];
$create_at = date('Y-m-d H:i:s');
$contract_no = !empty($data['contractno']) ? $data['contractno'] : '';
$contract_kind = 3;
$payment = [
'A40006' => 'annually', //年繳
'A40007' => 'quarterly', //季繳
'A40004' => 'bimonthly', // 雙月繳
'A40005' => 'semiannually', // 半年繳
'A40003' => 'monthly' //月繳
];
// try {
require_once("../../bonus/maintance/maintaenance_contract_bonus.php");
// require_once("../../bonus/other/maintenance_longterm_contract_m1_free_charge_bonus_v2_1_1.php");
$elevators = !empty($_POST['elevators']) ? json_decode($_POST['elevators'], true) : [];
$contract_begin_date = !empty($data['contract_begin_date']) ? $data['contract_begin_date'] : '';
$salesman = !empty($data['salesman']) ? $data['salesman'] : '';
$payType = !empty($data['payType']) ? $data['payType'] : '';
$contract_type = $data['contract_type']; //合約類別
$status = 1;
$bonus_json = [];
$create_id = $data['user_id'];
$create_at = date('Y-m-d H:i:s');
$contract_no = !empty($data['contractno']) ? $data['contractno'] : '';
$contract_kind = 3;
$payment = [
'A40006' => 'annually', //年繳
'A40007' => 'quarterly', //季繳
'A40004' => 'bimonthly', // 雙月繳
'A40005' => 'semiannually', // 半年繳
'A40003' => 'monthly' //月繳
];
$fail_arr = [];
$payDay = getNext25thDate($contract_begin_date);
foreach ($elevators as $key => $elevator) {
$facility_no = $facilityno[$key];
$ver = $elevator['bonus_verson']; //獎金版本
$payment_period = $payment[$payType]; //付款方式
$elevator_list_price = !empty(($elevator['stand_price'])) ? intval($elevator['stand_price']) : ''; //牌價
$fee_per_st = !empty($elevator['sold_price']) ? intval(round($elevator['sold_price'] / 1.05, 2)) : ''; //作翻契約金額 (不含稅)
$commission_fee = !empty($elevator['service_expense']) ? $elevator['service_expense'] : ''; //服務費(月/台)
$receivable_date_due = $payDay; //第一筆保養款項收回日
$sales_id = $salesman; //營業人員
$discount = $elevator['discount'] / 100;
$region_director_id = $elevator['manager'];
$regular_contract_manger_id = !empty($elevator['regular_contract_manger_id']) ? $elevator['regular_contract_manger_id'] : '';
$maintain_months = intval($elevator['maintain_months']);
$years = $maintain_months / 12;
// echo $years;
if ($maintain_months == '') $fail_arr[] = "保養月費為必填";
if ($fee_per_st == '') $fail_arr[] = "契約金額為必填";
if ($elevator_list_price == '') $fail_arr[] = "牌價為必填";
if ($region_director_id == '') $fail_arr[] = '區處長為必填';
if ($sales_id == '') $fail_arr[] = "契約人為必填";
if (COUNT($fail_arr) > 0) {
return $fail_arr;
break;
}
$renew_priceissue_bonus = [];
// $years = ($maintain_months % 12) == 0 ? $maintain_months / 12 : '';
/////////////////////////////////
// 如果保養合約 大於一年 2.0版本
// if (!empty($maintain_months)) {
// if ($ver == '2.1') {
// if ($maintain_months > 12 && $contract_type == 'new') {
// // 第一年為 "新簽約"
// $results = maintenance_contract_bonus_v2_1(
// $ver,
// $contract_type,
// $payment_period,
// $elevator_list_price,
// $fee_per_st,
// $commission_fee,
// $receivable_date_due,
// $sales_id,
// $region_director_id,
// $regular_contract_manger_id
// );
// for ($i = 1; $i <= $years - 1; $i++) {
// $contract_type = 'renew_priceissue';
// $receivable_date_due_renew = date("Y-m-d", strtotime("$receivable_date_due + $i year"));
// // 第二年以上改 "續約"
// $renew_priceissue_bonus[] = maintenance_contract_bonus_v2_1(
// $ver,
// $contract_type,
// $payment_period,
// $elevator_list_price,
// $fee_per_st,
// $commission_fee,
// $receivable_date_due_renew,
// $sales_id,
// $region_director_id,
// $regular_contract_manger_id
// );
// }
// } else if ($maintain_months > 12 && $contract_type == 'renew_priceissue') {
// // 超過一年的 "續約"
// for ($i = 0; $i < $years; $i++) {
// $contract_type = 'renew_priceissue';
// $renew_priceissue_bonus[] = maintenance_contract_bonus_v2_1(
// $ver,
// $contract_type,
// $payment_period,
// $elevator_list_price,
// $fee_per_st,
// $commission_fee,
// $receivable_date_due,
// $sales_id,
// $region_director_id,
// $regular_contract_manger_id
// );
// }
// } else if ($maintain_months >= 60 && $contract_type = 'longcontract_m1_free_charge') {
// // 五年以上長約
// $results = maintenance_longterm_contract_m1_free_charge_bonus_v2_1(
// $ver,
// $contract_type,
// $payment_period,
// $maintain_months,
// $elevator_list_price,
// $fee_per_st,
// $commission_fee,
// $receivable_date_due,
// $sales_id,
// $region_director_id,
// $regular_contract_manger_id
// );
// } else {
// $results = maintenance_contract_bonus_v2_1(
// $ver,
// $contract_type,
// $payment_period,
// $elevator_list_price,
// $fee_per_st,
// $commission_fee,
// $receivable_date_due,
// $sales_id,
// $region_director_id,
// $regular_contract_manger_id
// );
// }
// } else
if ($ver == '2.0') {
$fail_arr = [];
$payDay = getNext25thDate($contract_begin_date);
foreach ($elevators as $key => $elevator) {
$facility_no = $facilityno[$key];
$ver = $elevator['bonus_verson']; //獎金版本
$payment_period = $payment[$payType]; //付款方式
$elevator_list_price = !empty(($elevator['stand_price'])) ? intval($elevator['stand_price']) : 0; //牌價
$fee_per_st = !empty($elevator['sold_price']) ? intval(round($elevator['sold_price'] / 1.05, 2)) : 0; //作翻契約金額 (不含稅)
$commission_fee = !empty($elevator['service_expense']) ? intval($elevator['service_expense']) : 0; //服務費(月/台)
$receivable_date_due = $payDay; //第一筆保養款項收回日
$sales_id = $salesman; //營業人員
$discount = $elevator['discount'] / 100;
$region_director_id = $elevator['manager'];
$regular_contract_manger_id = !empty($elevator['regular_contract_manger_id']) ? $elevator['regular_contract_manger_id'] : '';
$maintain_months = intval($elevator['maintain_months']);
$years = $maintain_months / 12;
// echo $years;
if ($maintain_months == '') $fail_arr[] = "保養月費為必填";
if ($fee_per_st == '') $fail_arr[] = "契約金額為必填";
if ($elevator_list_price == '') $fail_arr[] = "牌價為必填";
if ($region_director_id == '') $fail_arr[] = '區處長為必填';
if ($sales_id == '') $fail_arr[] = "契約人為必填";
if (COUNT($fail_arr) > 0) {
return $fail_arr;
break;
}
$renew_priceissue_bonus = [];
$years = ($maintain_months % 12) == 0 ? $maintain_months / 12 : '';
///////////////////////////////
// 如果保養合約 大於一年 2.0版本
if (!empty($maintain_months)) {
if ($ver == '2.1') {
if ($maintain_months > 12 && $contract_type == 'new') {
// 第一年為 "新簽約"
$results = maintenance_contract_bonus_v2_1(
$ver,
$contract_type,
$payment_period,
$elevator_list_price,
$fee_per_st,
$commission_fee,
$receivable_date_due,
$sales_id,
$region_director_id,
$regular_contract_manger_id
);
for ($i = 1; $i <= $years - 1; $i++) {
$contract_type = 'renew_priceissue';
$receivable_date_due_renew = date("Y-m-d", strtotime("$receivable_date_due + $i year"));
// 第二年以上改 "續約"
$renew_priceissue_bonus[] = maintenance_contract_bonus_v2_1(
$ver,
$contract_type,
$payment_period,
$elevator_list_price,
$fee_per_st,
$commission_fee,
$receivable_date_due_renew,
$sales_id,
$region_director_id,
$regular_contract_manger_id
);
}
} else if ($maintain_months > 12 && $contract_type == 'renew_priceissue') {
// 超過一年的 "續約"
for ($i = 0; $i < $years; $i++) {
$contract_type = 'renew_priceissue';
$renew_priceissue_bonus[] = maintenance_contract_bonus_v2_1(
$ver,
$contract_type,
$payment_period,
$elevator_list_price,
$fee_per_st,
$commission_fee,
$receivable_date_due,
$sales_id,
$region_director_id,
$regular_contract_manger_id
);
}
} else if ($maintain_months >= 60 && $contract_type = 'longcontract_m1_free_charge') {
// 五年以上長約
$results = maintenance_longterm_contract_m1_free_charge_bonus_v2_1(
$ver,
$contract_type,
$payment_period,
$maintain_months,
$elevator_list_price,
$fee_per_st,
$commission_fee,
$receivable_date_due,
$sales_id,
$region_director_id,
$regular_contract_manger_id
);
} else {
$results = maintenance_contract_bonus_v2_1(
$ver,
$contract_type,
$payment_period,
$elevator_list_price,
$fee_per_st,
$commission_fee,
$receivable_date_due,
$sales_id,
$region_director_id,
$regular_contract_manger_id
);
}
} else if ($ver == '2.0') {
$contract_years = $years > 2 ? 'above_two' : 'one';
// echo $contract_years;
@ -896,9 +898,9 @@ function bonusCreate($data, $facilityno, $conn)
}
// }
/////////////////////////////////
// echo "<pre>";
// print_r($results);
// echo "</pre>";
echo "<pre>";
print_r($results);
echo "</pre>";
/////////////////////////////////
$bonus_json = [
'contract_type' => $contract_type,
@ -943,26 +945,27 @@ function bonusCreate($data, $facilityno, $conn)
$stmt->execute();
}
}
$request = [
"status" => "1",
"data" => "Success"
];
} else {
$request = [
"status" => "2",
"data" => "create_bonus_error"
];
}
$request = [
"status" => "1",
"data" => "Success"
];
} else {
$request = [
"status" => "2",
"data" => "create_bonus_error"
];
}
// exit();
}
return $request;
// exit();
} catch (PDOException $e) {
http_response_code(404);
echo $e->getMessage();
die('Error!:' . $e->getMessage());
}
return $request;
// exit();
// } catch (PDOException $e) {
// http_response_code(404);
// echo $e->getMessage();
// die('Error!:' . $e->getMessage());
// }
}
// 計算保養開始日期的當月25號

526
wms/contract/api/postNewContractData.php

@ -8,6 +8,8 @@ require_once("../conn.php");
include_once("./getFacilityNo.php");
include_once("./getComboNo.php");
include_once("./upload_chk.php");
include_once("./newElevatorBonus.php");
include_once("./newElevatorT8.php");
ini_set('date.timezone', 'Asia/Taipei');
@ -33,10 +35,8 @@ if (isset($_POST["contractno"]) && $_POST["contractno"] != "" && isset($_POST['c
$area_no = $_POST['area_no'];
$elevators = json_decode($_POST['elevators'], JSON_UNESCAPED_UNICODE);
$elevators_detail_arr = json_decode($_POST['elevators_detail_arr'], JSON_UNESCAPED_UNICODE);
// echo "<pre>";
// print_r($elevators_detail_arr);
// echo "</pre>";
// exit();
$files = !empty($_FILES['files']) ? $_FILES['files'] : null;
$files_id = null;
@ -44,13 +44,14 @@ if (isset($_POST["contractno"]) && $_POST["contractno"] != "" && isset($_POST['c
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($elevators_detail_arr['qc'])) $fail_arr[] = '請選擇QC或官檢';
// if (empty($vat)) $fail_arr[] = '統編/身分證為必填';
if (count($fail_arr) > 0) {
header("HTTP/1.1 422 Unprocessable Entity");
echo json_encode($fail_arr, JSON_UNESCAPED_UNICODE);
@ -76,7 +77,10 @@ if (isset($_POST["contractno"]) && $_POST["contractno"] != "" && isset($_POST['c
echo json_encode($facilityno);
// $bonus_result = BounsCount($_POST, $conn, $facilityno);
// echo "<pre>";
// print_r($bonus_result);
// echo "</pre>";
// exit();
// if (!empty($bonus_result) && $bonus_result['status'] == "2") {
// $fail_arr[] = '獎金計算錯誤,請再檢查或連繫資訊人員';
// // header("HTTP/1.1 422 Unprocessable Entity");
@ -85,7 +89,7 @@ if (isset($_POST["contractno"]) && $_POST["contractno"] != "" && isset($_POST['c
// }
T8Insert($_POST, $facilityno, $connT8);
// exit();
exit();
try {
$conn->beginTransaction();
@ -296,515 +300,7 @@ if (isset($_POST["contractno"]) && $_POST["contractno"] != "" && isset($_POST['c
}
}
function T8Insert($data, $facilityno, $connT8)
{
// try {
// 引入銷售訂單 API
require_once("./T8API.php");
$contractno = $data['contractno'];
$partyA = $data['customer'];
$phone = $data['lm_tel'];
$vat = $data['vat'];
$partyAaddress = $data['address'];
$user_id = $data['user_id'];
$salesman = $data['salesman'];
$createAt = date("Y-m-dH-i-s");
$elevators = !empty($data['elevators_detail_arr']) ? json_decode($data['elevators_detail_arr'], true) : []; //電梯
$pay_arr = !empty($data['pay_arr']) ? json_decode($data['pay_arr'], true) : []; //電梯
$createTime = str_replace('-', '', $createAt);
$signing_date = intval(str_replace("-", '', $data['signing_date'])); //簽訂日期
// echo
// $pay_kind = [
// '1' => '簽約',
// '2' => '二次款',
// '3' => '貨抵工地',
// '4' => '材料其他',
// '5' => '試車完工', //安裝完畢
// '6' => '交車' //交車
// ];
$pay_kind = [
'1' => '簽約',
'2' => '二次款',
'3' => '貨抵工地',
'4' => '材料其他',
'5' => '試車完工', //安裝完畢
'6' => '交車' //交車
];
$sql = "SELECT * FROM comCustomer
WHERE BizPartnerId = :BizPartnerId
";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':BizPartnerId', $contractno);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
// 新增客戶 table
if (empty($result)) {
// 若 客戶資料為空,新增一筆到 comCustomer
// 新增客戶資料
$sql = "INSERT INTO comBusinessPartner
(BizPartnerId,BizPartnerName,BusinessAttr,CountryId,WorkTelNo,BizToDate,TaxNo,EnterpriseName,ContactAddress,CreatorId,CreateTime,BizPartnerTypeId)
VALUES(:BizPartnerId,:BizPartnerName,1,'TW',:WorkTelNo,99999999,:TaxNo,:EnterpriseName,:ContactAddress,:CreatorId,:CreateTime,'10')";
// $sql = "INSERT INTO comBusinessPartner
// (BizPartnerId,BizPartnerName,BusinessAttr,CountryId,WorkTelNo,BizToDate,TaxNo,EnterpriseName,ContactAddress,CreatorId,CreateTime,BizPartnerTypeId)
// VALUES('$contractno','$partyA',1,'TW','$phone',99999999,'$vat', '$partyA','$partyAaddress','$user_id',$createTime,'10')";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':BizPartnerId', $contractno);
$stmt->bindParam(':BizPartnerName', $partyA); //客戶名稱
$stmt->bindParam(':WorkTelNo', $phone);
$stmt->bindParam(':TaxNo', $vat);
$stmt->bindParam(':EnterpriseName', $partyA); //企業名稱
$stmt->bindParam(':ContactAddress', $partyAaddress);
$stmt->bindParam(':CreatorId', $user_id);
$stmt->bindParam(':CreateTime', $createTime);
$stmt->execute();
$sql = "INSERT INTO comCustomer
(OrgId,BizPartnerTypeId,ConditionId,CurrId,BizPartnerId,PersonId,CreatorId,IsInUsed,InvoiceAddress,CreateTime,InvoiceId)VALUES
('1000','10','0008','TWD',:BizPartnerId,:PersonId,:CreatorId,1,:InvoiceAddress,:CreateTime,'35')";
// $sql = "INSERT INTO comCustomer
// (OrgId,BizPartnerTypeId,CurrId,BizPartnerId,PersonId,CreatorId,IsInUsed,InvoiceAddress,CreateTime,InvoiceId)
// VALUES('1000','10','TWD','$contractno','$salesman','$user_id',1,'$partyAaddress','$createTime','35')";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':BizPartnerId', $contractno);
$stmt->bindParam(':PersonId', $salesman);
$stmt->bindParam(':CreatorId', $user_id);
$stmt->bindParam(':InvoiceAddress', $partyAaddress);
$stmt->bindParam(':CreateTime', $createTime);
$stmt->execute();
} else {
// 若客戶資料不為空,更新該客戶資訊。
$sql = "UPDATE comCustomer SET
PersonId=:PersonId,
ConditionId='0008',
CurrId='TWD',
InvoiceAddress=:InvoiceAddress,
LastOperatorId=:LastOperatorId,
LastOperateTime=:LastOperateTime
WHERE BizPartnerId=:BizPartnerId
";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':PersonId', $salesman);
$stmt->bindParam(':InvoiceAddress', $partyAaddress);
$stmt->bindParam(':LastOperatorId', $user_id);
$stmt->bindParam(':LastOperateTime', $createTime);
$stmt->bindParam(':BizPartnerId', $contractno);
$stmt->execute();
$sql = "UPDATE comBusinessPartner SET
BizPartnerName=:BizPartnerName,
WorkTelNo=:WorkTelNo,
TaxNo=:TaxNo,
EnterpriseName=:EnterpriseName,
ContactAddress=:ContactAddress,
LastOperatorId=:LastOperatorId,
LastOperateTime=:LastOperateTime
WHERE BizPartnerId = :BizPartnerId
";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':BizPartnerName', $partyA);
$stmt->bindParam(':WorkTelNo', $phone);
$stmt->bindParam(':TaxNo', $vat);
$stmt->bindParam(':EnterpriseName', $partyA);
$stmt->bindParam(':ContactAddress', $partyAaddress);
// $stmt->bindParam(':EMail', $email);
$stmt->bindParam(':LastOperatorId', $user_id);
$stmt->bindParam(':LastOperateTime', $createTime);
$stmt->bindParam(':BizPartnerId', $contractno);
$stmt->execute();
}
$sql = "SELECT * FROM comProject WHERE ProjectId = :ProjectId";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':ProjectId', $contractno);
$stmt->execute();
$resultProject = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (empty($resultProject)) {
//新增於 comProject。合約 table
$sql = "INSERT INTO comProject(ProjectId,ProjectName,TypeId,CreateTime,CreatorId,IsInUsed)
VALUES(:ProjectId,:ProjectName,'C0',:CreateTime,:CreatorId,1)";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':ProjectId', $contractno);
$stmt->bindParam(':ProjectName', $partyA);
$stmt->bindParam(':CreateTime', $createTime);
$stmt->bindParam(':CreatorId', $user_id);
$stmt->execute();
}
$sql = "SELECT * FROM salSalesOrder WHERE BillNo = :BillNo";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':BillNo', $contractno);
$contractT8 = $stmt->fetch(PDO::FETCH_ASSOC);
if (empty($contractT8)) {
foreach ($elevators as $index => $elevator) {
$count = 1;
// 產品集成維護
$facility_no = $facilityno[$index];
$MaterialName = "$partyA($facility_no)";
$contract_arrival_a = $elevator['contract_arrival_date'];
$sql = "SELECT * FROM comMaterial WHERE MaterialId = '$facility_no'";
$stmt = $connT8->prepare($sql);
$stmt->execute();
$MaterialisIt = $stmt->fetch(PDO::FETCH_ASSOC);
if (empty($MaterialisIt)) {
$sql = "INSERT INTO comMaterial
(FOrgid,MaterialId,MaterialTypeId,MaterialCategoryId,CreatorId,CreateTime,IsInUsed)
VALUES ('1000',:MaterialId,'10','A',:CreatorId,:CreateTime,1)";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':MaterialId', $facility_no);
$stmt->bindParam(':CreatorId', $user_id);
$stmt->bindParam(':CreateTime', $createTime);
$stmt->execute();
$sql = "INSERT INTO comMaterialGroup
(MaterialTypeId,MaterialId,MaterialName,MaterialCategoryId,IsInUsed,UnitId,CreatorId,CreateTime)
VALUES ('10',:MaterialId,:MaterialName,'A',1,'SET',:CreatorId,:CreateTime)";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':MaterialId', $facility_no);
$stmt->bindParam(':MaterialName', $MaterialName);
$stmt->bindParam(':CreatorId', $user_id);
$stmt->bindParam(':CreateTime', $createTime);
$stmt->execute();
$sql = "INSERT INTO comMaterialPurchases
(Orgid,MaterialTypeId,MaterialId,CurrId,SUnitId,TaxId,CreatorId,CreateTime)
VALUES ('1000','10',:MaterialId,'TWD','SET','ST005',:CreatorId,:CreateTime)";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':MaterialId', $facility_no);
$stmt->bindParam(':CreatorId', $user_id);
$stmt->bindParam(':CreateTime', $createTime);
$stmt->execute();
$sql = "INSERT INTO plsMaterialPlanData
(PlanRangeId,MaterialId,FOrgId,MaterialTypeId,CreatorId,CreateTime,DefaultDemandOrg) VALUES
(1000,:MaterialId,1000,10,:CreatorId,:CreateTime,1000)
";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':MaterialId', $facility_no);
$stmt->bindParam(':CreatorId', $user_id);
$stmt->bindParam(':CreateTime', $createTime);
$stmt->execute();
$sql = "INSERT INTO comMaterialSales
(OrgId,MAterialTypeId,MaterialId,CurrId,SUnitId,SupplyOrgId,CreatorId,CreateTime,IsInUsed) VALUES
(1000,10,:MaterialId,'TWD','SET',1000,:CreatorId,:CreateTime,1)
";
$stmt = $connT8->prepare($sql);
$stmt->bindParam(':MaterialId', $facility_no);
$stmt->bindParam(':CreatorId', $user_id);
$stmt->bindParam(':CreateTime', $createTime);
$stmt->execute();
}
// 階段收款資訊
$salOrderStagePay_row = [];
$equipment_total = 0;
$install_total = 0;
$equipment_total = $pay_arr['equipment_total'];
$install_total = $pay_arr['install_total'];
$count_a = 0;
$count_month = 1;
foreach ($pay_arr['elevotor_pay_detail'] as $key => $detail) {
if ($detail['kind'] == 3) {
$PlanPayDate = $contract_arrival_a;
} else if ($detail['kind'] > 3) {
$PlanPayDate = date("Y-m-d", strtotime($contract_arrival_a . '+' . $count_month . ' month'));
$count_month++;
} else {
$PlanPayDate = $signing_date;
$count_a++;
if ($count_a == 1) {
$PlanPayDate = date("Y-m-d", strtotime($signing_date . '+' . $count_a . ' month'));
}
}
$contract_arrival_date = intval(str_replace("-", '', $PlanPayDate)); //貨到工地日
$PayStage = $pay_kind[$detail['kind']];
$PlanPercentage = intval($detail['pay_scale']) / 100;
$rows = [
"PayStage" => "$PayStage", //收款階段
"PlanPercentage" => $PlanPercentage, //計劃收款比例(%)
"PlanPayAmt" => $detail['amount'], //計劃收款金額
"PlanPayDate" => $contract_arrival_date, //計劃收款日期 1.第一筆都是簽約日
"BillNo" => "$contractno",
"RowCode" => $key + 1,
"RowNo" => $key + 1,
"UnWriteOffOAmount" => $detail['amount'] //未核銷金額
];
$salOrderStagePay_row[] = $rows;
}
// 設備
$row1 = [
"TaxId" => "ST005",
"RequirementDate" => $signing_date, //出貨日期
"ConsignmentDate" => $signing_date, //發貨日期
"BillNo" => "$contractno", //合約號
"RowCode" => $count, //全部筆數排列
"ItemType" => 1,
"MaterialId" => "A40001", //1.設備(A40001)、2.安裝(A4008)、3.作番號(作番)
"SUnitId" => "SET",
"SQuantity" => 1, //交易數量
"SPrice" => $equipment_total, //交易價格
"CU_MaterialId" => $facility_no
];
$count++;
// 安裝
$row2 = [
"TaxId" => "ST005",
"RequirementDate" => $signing_date, //出貨日期
"ConsignmentDate" => $signing_date, //發貨日期
"BillNo" => "$contractno", //合約號
"RowCode" => $count, //全部筆數排列
"ItemType" => 1,
"MaterialId" => "A40008", //1.設備(A40001)、2.安裝(A4008)、3.作番號(作番)
"SUnitId" => "SET",
"SQuantity" => 1, //交易數量
"SPrice" => $install_total, //交易價格
"CU_MaterialId" => $facility_no
];
$count++;
// 產品(作番)
$row3 = [
"TaxId" => "ST005",
"RequirementDate" => $signing_date, //出貨日期
"ConsignmentDate" => $signing_date, //發貨日期
"BillNo" => "$contractno", //合約號
"RowCode" => $count, //全部筆數排列
"ItemType" => 0,
"MaterialId" => "$facility_no", //1.設備(A40001)、2.安裝(A4008)、3.作番號(作番)
"SUnitId" => "SET",
"SQuantity" => 1, //交易數量
"SPrice" => 0, //交易價格
"CU_MaterialId" => $facility_no // 歸屬作番號
];
$count++;
$SubOrder_row[] = $row1;
$SubOrder_row[] = $row2;
$SubOrder_row[] = $row3;
$count++;
}
$MainSalesOrder_row = [
"BillNo" => "$contractno", //合約單號
"BillDate" => $signing_date, //簽約日期
"TypeId" => "SO", //
"FOrgId" => "1000",
"OrgId" => "1000",
"ModeId" => "M", // T汰改 M新梯
"BizPartnerId" => "$contractno", //客戶代碼
"CurrId" => "TWD",
"CurrOAmount" => 1,
"CurrLAmount" => 1,
"PersonId" => "$salesman", //業務人員
"DueToId" => "$contractno", //債務方
"TradeConditionId" => "",
"TaxId" => "ST005",
"CreditorCompId" => "1001",
"CreditorOrgId" => "1000",
"CreatorId" => "$user_id"
// "CompId" => "1001",
// "CreditorCurrOAmount" => 1,
// "CreditorCurrLAmount" => 1
];
$MainSalesOrder = [
"name" => "MainSalesOrder",
'rows' => [$MainSalesOrder_row]
];
$SubOrder = [
"name" => "SubOrder",
"rows" => $SubOrder_row
];
$salOrderStagePay = [
"name" => "salOrderStagePay",
"rows" => $salOrderStagePay_row
];
$API_body = [];
$API_body[] = $MainSalesOrder;
$API_body[] = $SubOrder;
$API_body[] = $salOrderStagePay;
echo "<pre>";
print_r(json_encode($API_body, JSON_UNESCAPED_UNICODE));
echo "</pre>";
// $api_url = "https://erp.masada.com.tw:780/twWebAPI/V1/SALSALESORDER/PostERPData";
// $api_url = "http://127.0.0.1:880/twWebAPI/V1/SALSALESORDER/PostERPData";
$api_url = 'http://10.10.145.2:880/twWebAPI/V1/SALSALESORDER/PostERPData';
$result = T8salIncomeApply($API_body, $api_url);
echo "<pre>";
print_r($result);
echo "</pre>";
if (!empty($result) && ($result['Status'] == 'Fails' || $result['Status'] == 'Error')) {
echo $result['ErrorMsg'];
}
} else {
echo '資料已新增過,請洽資訊人員';
// exit();
}
$connT8->commit();
// } catch (PDOException $e) {
// $connT8->rollback();
// header("HTTP/1.1 500 Internal Server Error");
// die('Error!:' . $e->getMessage());
// }
}
function BounsCount($data, $conn, $facilityno)
{
try {
require_once("../../bonus/elevator_new/elevator_new_deal_bonus.php");
$dailyNecessities = [
'MAE100' => 'passenger', //小機房
'MAM200' => 'passenger', //無機房
'MAH100' => 'dumbwaiter', //小電梯
'MAQ100' => 'positive_drive', //強趨梯
'MAF100' => 'cargo', //貨梯
'MAP100' => 'flatbase', // 平台踢
];
$contractType = [
'1' => 'strategy_customer',
'2' => 'general_customer'
];
$signing_date = $data['signing_date'];
$bonus_v1_0_date = '2024-01-02';
$bonus_v2_0_date = '2024-01-03';
$contract_type = $data['contract_type'];
$total = $data['price_total'];
$type = $contractType[$contract_type]; //戰略客戶 or 一般客戶
// $elevator_knockdown_price = $data['price_total']; //受價總額
$elevators = json_decode($data['elevators_detail_arr'], true);
$contract_no = $data['contractno'];
$salesman = $data['salesman'];
$manager = $data['manager'];
$contract_kind = 1;
$create_id = $data['user_id'];
$create_at = date("Y-m-d H:i:s");
$status = 1;
$result_bonus = [];
$result_bonus_arr = [];
if ($signing_date <= $bonus_v1_0_date) {
$ver = '1.0';
foreach ($elevators as $key => $elevator) {
$elevator_knockdown_price = $elevator['elevator_price']; // 單台電梯售價
$elevator_list_price = $elevator['option_other_price'] + $elevator['option_price'] + $elevator['elevator_price']; //牌價
$result_bonus = elevator_new_deal_bonus_v1_0($ver, $type, $elevator_knockdown_price, $salesman, $manager);
$facility_no = $facilityno[$key];
$bonus_json = [
'contract_type' => $type,
'total' => $elevator_list_price,
'fee_per_st' => $elevator_knockdown_price
];
if (!empty($result_bonus)) {
if ($result_bonus['result_status'] != "error") {
foreach ($result_bonus['bonus_array'] as $i => $result) {
$bonus_type = explode('-', $result['bonus_type']);
$pay_man_type = $bonus_type[0]; //發放類別
$bonus_kind = $bonus_type[1];
$amount = $result['bonus_amount']; //獎金水庫
$bonus_receiver = $result['bonus_receiver']; //發放人員
$bonus_json['payment_schedul_due'] = $result['payment_schedul_due'];
$bonus_json['payment_schedul_regulation'] = $result['payment_schedul_regulation'];
$bonus_json['bonus_kind'] = $bonus_kind;
$a = json_encode($bonus_json, JSON_UNESCAPED_UNICODE);
$sql = "INSERT INTO bonus
(bonus_type,bonus_verson,contract_no,contract_type,facility_no,amount,receiver,status,bonus_json,create_id,create_at) VALUES
($pay_man_type,'$ver','$contract_no',$contract_kind,'$facility_no',$amount,'$bonus_receiver',$status,'$a','$create_id','$create_at')
";
$stmt = $conn->prepare($sql);
$stmt->execute();
}
$request = [
"status" => "1",
"data" => "Success"
];
return $request;
}
$request = [
"status" => "2",
"data" => "create_bonus_error"
];
return $request;
}
}
} else if ($signing_date >= $bonus_v2_0_date) {
$ver = '2.0';
foreach ($elevators as $key => $elevator) {
$option_other_price = !empty($elevator['option_other_price']) ? intval($elevator['option_other_price']) : 0;
$elevator_type = $dailyNecessities[$elevator['spec']];
$elevator_list_price = $option_other_price + $elevator['option_price'] + $elevator['elevator_price'];
$elevator_knockdown_price = $elevator['elevator_price'];
$commission_fee = $elevator['commission_fee'];
$result_bonus = elevator_new_deal_bonus_v2_0(
$ver,
$type,
$elevator_type,
$elevator_list_price,
$elevator_knockdown_price,
$salesman,
$manager
);
$facility_no = $facilityno[$key];
$bonus_json = [
'contract_type' => $type,
'total' => $elevator_list_price,
'fee_per_st' => $elevator_knockdown_price
];
if (!empty($result_bonus)) {
if ($result_bonus['result_status'] != "error") {
foreach ($result_bonus['bonus_array'] as $i => $result) {
$bonus_type = explode('-', $result['bonus_type']);
$pay_man_type = $bonus_type[0]; //發放類別
$bonus_kind = $bonus_type[1];
$amount = $result['bonus_amount']; //獎金水庫
$bonus_receiver = $result['bonus_receiver']; //發放人員
$bonus_json['payment_schedul_due'] = $result['payment_schedul_due'];
$bonus_json['payment_schedul_regulation'] = $result['payment_schedul_regulation'];
$bonus_json['bonus_kind'] = $bonus_kind;
$a = json_encode($bonus_json, JSON_UNESCAPED_UNICODE);
$sql = "INSERT INTO bonus
(bonus_type,bonus_verson,contract_no,contract_type,facility_no,amount,receiver,status,bonus_json,create_id,create_at) VALUES
($pay_man_type,'$ver','$contract_no',$contract_kind,'$facility_no',$amount,'$bonus_receiver',$status,'$a','$create_id','$create_at')
";
$stmt = $conn->prepare($sql);
$stmt->execute();
}
}
$request = [
"status" => "1",
"data" => "Success"
];
} else {
$request = [
"status" => "2",
"data" => "create_bonus_error"
];
}
}
}
return $request;
} catch (PDOException $e) {
header("HTTP/1.1 500 Internal Server Error");
die('Error!:' . $e->getMessage());
}
}
function do_wws_assign1($user_id, $form_id, $flow_code, $conn)
{

4
wms/contract/api/postRenovateContractData.php

@ -0,0 +1,4 @@
<?php
echo "<pre>";
print_r($_POST);
echo "</pre>";

150
wms/contract/api/test copy.json

@ -1,43 +1,115 @@
[
{
"apply_key": "11111111",
"register_code": "B32510261185",
"elevator_brand": "1",
"elevator_kind": "E",
"spec": "MAH100",
"weight": "450",
"speed": "45.00",
"stop": "3",
"floors": "3",
"persons": "6",
"elevator_num": "0",
"useful_years": "106",
"last_check_date": "1",
"speed_governors_check_expense": "0",
"maintain_times": "1",
"is_m1_bundle": "N",
"maintainance": "B",
"maintain_months": "12",
"maintain_period": "1",
"stand_price": "1250.00",
"contract_price": "1250.00",
"sold_price": 1250,
"commission_expense": null,
"management_expense": null,
"annual_survey_expense": "0.00",
"service_expense": 0,
"cmstatus": "Y",
"updated_at": null,
"creater": null,
"created_at": "2024-02-26 15:24:23",
"discount": 100,
"latitude": "112",
"longitude": "11",
"takecertificatedate": "112",
"opendoor": "2PCO",
"useful_date": "113-01-01",
"bonus_verson": "2.0",
"manager": "M0029",
"regular_contract_manger_id": "M0054"
"name": "MainSalesOrder",
"rows": [
{
"BillNo": "M24020076",
"BillDate": 20240306,
"TypeId": "SO",
"FOrgId": "1000",
"OrgId": "1000",
"ModeId": "M",
"BizPartnerId": "M24020076",
"CurrId": "TWD",
"CurrOAmount": 1,
"CurrLAmount": 1,
"PersonId": "M0073",
"DueToId": "M24020076",
"TradeConditionId": "",
"TaxId": "ST005",
"CreditorCompId": "1001",
"CreditorOrgId": "1000",
"CreatorId": "M0225"
}
]
},
{
"name": "SubOrder",
"rows": [
{
"TaxId": "ST005",
"RequirementDate": 20240306,
"ConsignmentDate": 20240306,
"BillNo": "M24020076",
"RowCode": 1,
"ItemType": 1,
"MaterialId": "A40001",
"SUnitId": "SET",
"SQuantity": 1,
"SPrice": 910000,
"CU_MaterialId": "4MW00001"
},
{
"TaxId": "ST005",
"RequirementDate": 20240306,
"ConsignmentDate": 20240306,
"BillNo": "M24020076",
"RowCode": 2,
"ItemType": 1,
"MaterialId": "A40008",
"SUnitId": "SET",
"SQuantity": 1,
"SPrice": 390000,
"CU_MaterialId": "4MW00001"
},
{
"TaxId": "ST005",
"RequirementDate": 20240306,
"ConsignmentDate": 20240306,
"BillNo": "M24020076",
"RowCode": 3,
"ItemType": 0,
"MaterialId": "4MW00001",
"SUnitId": "SET",
"SQuantity": 1,
"SPrice": 0,
"CU_MaterialId": "4MW00001"
}
]
},
{
"name": "salOrderStagePay",
"rows": [
{
"PayStage": "簽約",
"PlanPercentage": 0.2,
"PlanPayAmt": 260000,
"PlanPayDate": 20240406,
"BillNo": "M24020076",
"RowCode": 1,
"RowNo": 1,
"UnWriteOffOAmount": 260000
},
{
"PayStage": "貨抵工地",
"PlanPercentage": 0.5,
"PlanPayAmt": 650000,
"PlanPayDate": 20240306,
"BillNo": "M24020076",
"RowCode": 2,
"RowNo": 2,
"UnWriteOffOAmount": 650000
},
{
"PayStage": "試車完工",
"PlanPercentage": 0.2,
"PlanPayAmt": 260000,
"PlanPayDate": 20240306,
"BillNo": "M24020076",
"RowCode": 3,
"RowNo": 3,
"UnWriteOffOAmount": 260000
},
{
"PayStage": "交車",
"PlanPercentage": 0.1,
"PlanPayAmt": 130000,
"PlanPayDate": 20240306,
"BillNo": "M24020076",
"RowCode": 4,
"RowNo": 4,
"UnWriteOffOAmount": 130000
}
]
}
]

3
wms/contract/conn.php

@ -34,11 +34,10 @@ try {
//設定主動以警告的形式報錯
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$connT8 = new PDO("sqlsrv:Server=220.130.203.251;Database=T8TEST", "M0225", "IFFBU1E=");
// $connT8 = new PDO("sqlsrv:Server=10.10.145.2;Database=T8MASADA", "masada", "@m222222");
// $connT8 = new PDO("sqlsrv:Server=220.130.203.251;Database=T8MASADA", "masada", "@m222222");
$connT8 = new PDO("sqlsrv:Server=220.130.203.251;Database=T8TEST", "M0225", "IFFBU1E=");
if ($connT8) {
$connT8->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}

10
wms/contract/contract-input.php

@ -119,7 +119,7 @@ $contractpersons = $stmt->fetchAll(PDO::FETCH_ASSOC);
<tr>
<td style="vertical-align: middle">簽約日</td>
<td>
<input class="form-control disabled_select" type="date" name="end_date" x-model="data.signing_date">
<input class="form-control disabled_select" type="date" name="end_date" x-model="data.signing_date" @change="console.log($event.target.value)">
<p class="alerttext" x-show="data.signing_date==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
</td>
<td style="vertical-align: middle">合約開始時間</td>
@ -134,7 +134,7 @@ $contractpersons = $stmt->fetchAll(PDO::FETCH_ASSOC);
</td>
<td style="vertical-align: middle">契約成交價</td>
<td style="vertical-align: middle">契約成交價(月)</td>
<td>
<input class="form-control disabled_select" type="number" name="tel" x-model="data.total_price" :disabled="data.disabled">
<p class="alerttext" x-show="data.total_price==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
@ -143,8 +143,8 @@ $contractpersons = $stmt->fetchAll(PDO::FETCH_ASSOC);
<tr>
<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> -->
<input class="form-control disabled_select" type="text" name="uscc" x-model="data.invoice" @change="console.log($event.target.value)">
<!-- <p class=" alerttext" x-show="data.invoice==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p> -->
</td>
<td style="vertical-align: middle">統一編號/身分證</td>
<td>
@ -217,7 +217,7 @@ $contractpersons = $stmt->fetchAll(PDO::FETCH_ASSOC);
<td style="vertical-align: middle">保養經理</td>
<td>
<select class="ui search dropdown" name="repairer_name" x-model="data.maintance_manager">
<select class="ui search dropdown" name="maintance_manager" x-model="data.maintance_manager">
<option value="">選擇保養經理</option>
<option value="M0090">M0090--顏慶豪(北北基)</option>
<option value="M0223">M0223--鄭登元(桃竹)</option>

471
wms/contract/contract-renovate-input.php

@ -0,0 +1,471 @@
<?php
include('../header.php');
require_once('./conn.php');
$accounttype = "M";
$sql_str = "SELECT accountid, name FROM account WHERE accounttype = :accounttype ORDER BY accountid";
$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['name'] . '-' . $person['accountid'],
'value' => $person['accountid'],
'name' => $person['name']
];
}, $persons);
?>
<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 src="./js/alpine.js"></script>
<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
<script defer src="./js/alpinejs/cdn.min.js"></script>
<script src="./js/axios/axios.min.js"></script>
<script src="./js/jquery/jquery-3.1.1.min.js"></script>
<!-- <script src="./semantic/dist/semantic.min.js"></script> -->
<div class="renovate_input" x-data="renovateInput">
<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-borderd 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:botton 20px">
<tr>
<td style="vertical-align:middle;">合約號</td>
<td colspan="6">
<input type="text" class="form-control" @keyup="nextStepKeyupFn($event)" name="contract_no" x-model="data.contract_no">
</td>
<td colspan="1" style="vertical-align:middle"></td>
</tr>
</tbody>
</template>
<template x-if="step==2">
<tbody style="font-weight:bolder; margin:botton 20px" x-show="step==2">
<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_back" class="btn btn-default" onclick="location.reload()">返回</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" name="" x-model="data.customer">
<p class="alerttext" x-show="data.customer==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
</td>
<td style="vertical-align:middle">電梯數量</td>
<td>
<input type="text" class="form-control disabled_select" name="num" x-model="data.nums" disabled>
</td>
<td style="vertical-align: middle">統一編號/身分證</td>
<td>
<input class="form-control disabled_select" type="text" name="" x-model="data.vat">
<p class="alerttext" x-show="data.vat==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
</td>
<td style="vertical-align: middle">營業員</td>
<td style="vertical-align: middle">
<div class="ui form">
<select class="salesman" id="salesman" x-model="data.salesman">
<option value="">請選擇營業員</option>
<?php foreach ($persons as $person) : ?>
<option value="<?php echo $person['value']; ?>"><?php echo $person['view']; ?></option>
<?php endforeach ?>
</select>
</div>
<p class="alerttext" x-show="data.salesman==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
</td>
</tr>
<tr>
<td style="vertical-align: middle">負責人</td>
<td>
<input type="text" class="form-control disabled_select" name="" x-model="data.main_linkman">
<p class="alerttext" x-show="data.main_linkman==''"><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="" x-model="data.linkman">
<p class="alerttext" x-show="data.linkman==''"><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="" x-model="data.lm_tel">
<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>
<input class="form-control disabled_select" type="text" name="" x-model="data.case_name">
<p class="alerttext" x-show="data.case_name==''"><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="date" name="" x-model="data.signing_date">
<p class="alerttext" x-show="data.signing_date==''"><i class="fa-solid fa-circle-xmark"></i>未填寫</p>
</td>
<td style="vertical-align: middle">客戶類型</td>
<td>
<select name="contract_type" id="contract_type" x-model="data.contract_type">
<option value="">請選擇</option>
<option value="1">戰略客戶</option>
<option value="2">一般客戶</option>
</select>
</td>
<td style="vertical-align: middle">附件上傳</td>
<td colspan="3">
<input type="file" name="file[]" multiple draggable="true" @change="uploadFiles($event)" />
</td>
</tr>
<tr>
<td style="vertical-align: middle">區域</td>
<td>
<select id="area_no" name="area_no" x-model="data.area_no">
<option value="">請選擇</option>
<option value="N">北區</option>
<option value="Y">宜蘭</option>
<option value="T">桃園</option>
<option value="C">中區</option>
<option value="K">南區</option>
</select>
</td>
</tr>
</tbody>
</template>
<!-- 客戶款別分別如何分期 -->
<template x-if="step==4">
<tbody style="font-weight:bolder; margin:botton 20px" x-show="step==4">
<div>
<tr>
<td colspan='8' style="vertical-align:middle ">款別分期</td>
</tr>
<tr>
<!-- <td colspan='1'>付款辦法</td> -->
<td colspan='1'>款別</td>
<td colspan='1'>比例%</td>
<td colspan='1'>金額</td>
<td colspan='1'>繳款方式(月)</td>
<td colspan="4"></td>
</tr>
<tr>
<!-- <td rowspan="3">材料</td> -->
<td>1、訂金</td>
<td>
<input type="text" x-model='data.scale[0]' disabled>
</td>
<td colspan="1">
<input type="text" x-model="data.amount[0]" disabled>
</td>
<td>
<!-- <select x-model=data.paykind[0] @change="totalFn()">
<template x-for="pay in data.payarr" :key="pay">
<option x-text="pay" :disabled="data.amount[0] == 0"></option>
</template> -->
<input type="text" x-model="data.paykind[0]" :disabled="data.amount[0] == 0" @input="totalFn()">
</select>
</td>
<td colspan="4"></td>
</tr>
<tr>
<td>2、二次款</td>
<td>
<input type="text" x-model='data.scale[1]' disabled>
</td>
<td colspan="1">
<input type="text" x-model="data.amount[1]" disabled>
</td>
<td>
<!-- <select x-model=data.paykind[1] @change="totalFn()">
<template x-for="pay in data.payarr" :key="pay">
<option x-text="pay" :disabled="data.amount[1] == 0"></option>
</template>
</select> -->
<input type="text" x-model="data.paykind[1]" :disabled="data.amount[1] == 0" @input="totalFn()">
</td>
<td colspan="4"></td>
</tr>
<tr>
<td>3、貨到工地款</td>
<td>
<input type="text" x-model='data.scale[2]' disabled>
</td>
<td colspan="1">
<input type="text" x-model="data.amount[2]" disabled>
</td>
<td>
<!-- <select x-model=data.paykind[2] @change="totalFn()">
<template x-for="pay in data.payarr" :key="pay">
<option x-text="pay" :disabled="data.amount[2] == 0"></option>
</template>
</select> -->
<input type="text" x-model="data.paykind[2]" :disabled="data.amount[2] == 0" @input="totalFn()">
</td>
<td colspan="4"></td>
</tr>
<tr>
<!-- <td rowspan="3">安裝</td> -->
<td>5、安裝完畢款</td>
<td>
<input type="text" x-model='data.scale[4]' disabled>
</td>
<td colspan="1">
<input type="text" x-model="data.amount[4]" disabled>
</td>
<td>
<!-- <select x-model=data.paykind[4] @change="totalFn()" :disabled="data.amount[4] == 0">
<template x-for="pay in data.payarr" :key="pay">
<option x-text="pay"></option>
</template>
</select> -->
<input type="text" x-model="data.paykind[4]" :disabled="data.amount[4] == 0" @input="totalFn()">
</td>
<td colspan="4"></td>
</tr>
<tr>
<td>6、驗收款</td>
<td>
<input type="text" x-model="data.scale[5]" disabled>
</td>
<td colspan="1">
<input type="text" x-model="data.amount[5]" disabled>
</td>
<td>
<!-- <select x-model=data.paykind[5] @change="totalFn()" :disabled="data.amount[5] == 0">
<template x-for="pay in data.payarr" :key="pay">
<option x-text="pay"></option>
</template>
</select> -->
<input type="text" x-model="data.paykind[5]" :disabled="data.amount[5] == 0" @input="totalFn()">
</td>
<td colspan="4"></td>
</tr>
<tr>
<td>7、其他</td>
<td>
<input type="text" x-model='data.scale[6]' disabled>
</td>
<td colspan="1">
<input type="text" x-model="data.amount[6]" disabled>
</td>
<td>
<!-- <select x-model=data.paykind[6] @change=" totalFn()" :disabled="data.amount[6] == 0">
<template x-for="pay in data.payarr" :key="pay">
<option :value="pay" x-text="pay"></option>
</template>
</select> -->
<input type="text" x-model="data.paykind[6]" :disabled="data.amount[6] == 0" x-on:input="console.log(data.paykind[6])">
</td>
<td colspan="4"></td>
</tr>
<tr>
<td colspan="1">合計</td>
<td>
<input type="text" x-model="data.total_scale" disabled>
</td>
<td colspan="1">
<input type="text" x-model="data.total_amount" disabled>
</td>
<td>
<input type="text" x-model="data.total_month" disabled>
</td>
<td colspan="4"></td>
</tr>
</div>
</tbody>
</template>
<template x-if="step == 3">
<template x-for="(elevator, idx) in data.elevators_detail_arr" :key="idx">
<tbody style="font-weight: bolder;margin-bottom: 20px" x-show="step==3">
<tr>
<td colspan=8>
<p x-text="'電梯' + Number(idx+1)"></p>
</td>
</tr>
<tr>
<td style="vertical-align: middle">電梯型號</td>
<td>
<input class="form-control disabled_select" type="text" x-model="elevator.spec" disabled>
</td>
<td style="vertical-align: middle">開門方式</td>
<td>
<input class="form-control disabled_select" type="text" x-model="elevator.item_op" disabled>
</td>
<td style="vertical-align: middle">電梯載重</td>
<td>
<input class="form-control disabled_select" type="text" x-model="elevator.item_weight" disabled>
</td>
<td style="vertical-align: middle">電梯人乘</td>
<td>
<input class="form-control disabled_select" type="text" x-model="elevator.person" disabled>
</td>
</tr>
<tr>
<td style="vertical-align: middle">電梯速度</td>
<td>
<input class="form-control disabled_select" type="text" x-model="elevator.speed" disabled>
</td>
<td style="vertical-align: middle">電梯樓停</td>
<td>
<input class="form-control disabled_select" type="text" x-model="elevator.floor" disabled>
</td>
<td style="vertical-align: middle">電梯樓層</td>
<td>
<input class="form-control disabled_select" type="text" x-model="elevator.floor">
</td>
<td style="vertical-align: middle">合約交期(到工地)</td>
<td>
<input class="form-control disabled_select" type="date" x-model="elevator.contract_arrival_date">
</td>
</tr>
<tr>
<td style="vertical-align: middle">QC和官檢</td>
<td>
<select class="" id="qc" x-model="elevator.qc">
<option value="">請選擇QC或官檢</option>
<option value="Q">只需QC</option>
<option value="O">只需官檢</option>
<option value="QO">QC和官檢</option>
</select>
<p class="alerttext" x-show="data.qc==''"><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="elevator.manage">
</td>
<td style="vertical-align: middle">工務部門負責人</td>
<td style="vertical-align: middle">
<select class="form-control " id="warehouseid" name="warehouseid" x-model="elevator.warehouseid">
<option value="">未選擇</option>
<optgroup label="北區">
<option value="M0041">張潘榮(桃竹以北)</option>
<option value="M0150">羅盛騰(桃竹)</option>
<option value="M0040">吳宗紘</option>
</optgroup>
<optgroup label="中區">
<option value="M0198">廖堉勝</option>
<option value="M0158">劉子睿(新梯)</option>
<option value="M0161">鄭永典(汰改)</option>
<option value="M0159">孫仲凱</option>
<option value="M0202">徐錦潤</option>
<option value="M0113">林瑋隆</option>
</optgroup>
<optgroup label="南區">
<option value="M0078">許益連</option>
<option value="M0102">鄭存邑(高屏、台東)</option>
<option value="M0187">田祖豪(台南、嘉義)</option>
<option value="M0077">鍾玉龍</option>
</optgroup>
<optgroup label="宜蘭">
<option value="M0087">高培軒</option>
</optgroup>
</select>
</td>
<td style="vertical-align: middle">汰改種類</td>
<td style="vertical-align: middle">
<!-- <select multiple x-model="elevator.selectedOptions">
<template x-for="option in data.options">
<option x-text="option" :value="option"></option>
</template>
</select>
<p>選擇的選項: <span x-text="elevator.selectedOptions.join(', ')"></span></p> -->
<select x-model="elevator.selectedItems" :id="'renovate_type'+idx" name="renovate_type[]" x-on:change="cons()">
<option value="M1">M1</option>
<option value="M2">M2</option>
<option value="M3">M3</option>
<option value="M4">M4</option>
<option value="MA">MA</option>
</select>
</td>
</tr>
<tr>
<td style="vertical-align: middle">現場地址</td>
<td colspan="3">
<input class="form-control disabled_select" type="text" x-model="data.address">
</td>
<td style="vertical-align: middle">經度</td>
<td>
<input class="form-control disabled_select" type="text" x-model="elevator.latitude">
</td>
<td style="vertical-align: middle">緯度</td>
<td>
<input class="form-control disabled_select" type="text" x-model="elevator.longitude">
</td>
</tr>
<tr>
<td></td>
</tr>
</tbody>
</template>
</template>
</table>
<button x-show="step==4" @click="save()" type="button" class="btn btn-primary btn-lg pull-right savebutton" :disabled="isLoading">
<template x-if="!isLoading">
<span>存檔</span>
</template>
<template x-if="isLoading">
<span class="loader"></span>
</template>
</button>
<button x-show="step<=3" @click="nextStepFn()" class="btn btn-primary btn-lg pull-right savebutton" :disabled="isLoading">
<template x-if="!isLoading">
<span>下一步</span>
</template>
<template x-if="isLoading">
<span class="loader"></span>
</template>
</button>
<button x-show="step>1" @click="preStepFn()" class="btn btn-primary btn-lg pull-right savebutton" :disabled="isLoading">
<template x-if="!isLoading">
<span>上一步</span>
</template>
<template x-if="isLoading">
<span class="loaders"></span>
</template>
</button>
</div>
</div>
</div>
<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
<script type="text/javascript">
const user_id = '<?= $user_id ?>';
</script>

226
wms/contract/js/alpine.js

@ -757,9 +757,9 @@ const contractDownload = () => {
this.buydata.list.plaintext[1].text = '產品規格:如附表' + this.affixArr[Number(this.buyAffix)] + '。'
this.buystandardData.list.plaintext[1].text = '產品規格:如附表' + this.affixArr[Number(this.buyAffix)] + '。'
this.buyonstandardViewData.list.plaintext[1].text = '產品規格:如附表' + this.affixArr[Number(this.buyAffix)] + '。'
this.buydata.list.plaintext[5].text = '交貨期限及甲方配合事項:<br>乙方應於接獲甲方圖色確認第&nbsp;' + this.buyfill1 + '&nbsp;日(應於合約簽訂日起兩年內),將本工程所需之全部設備、器材 運抵工地,甲方應提供適當的場所供乙方貯放設備、器材。'
this.buystandardData.list.plaintext[5].text = '交貨期限及甲方配合事項:<br>乙方應於接獲甲方圖色確認第&nbsp;' + this.buyfill1 + '&nbsp;日(應於合約簽訂日起兩年內),將本工程所需之全部設備、器材 運抵工地,甲方應提供適當的場所供乙方貯放設備、器材。'
this.buyonstandardViewData.list.plaintext[5].text = '交貨期限及甲方配合事項:<br>乙方應於接獲甲方圖色確認第&nbsp;' + this.buyfill1 + '&nbsp;日(應於合約簽訂日起兩年內),將本工程所需之全部設備、器材 運抵工地,甲方應提供適當的場所供乙方貯放設備、器材。'
this.buydata.list.plaintext[5].text = '交貨期限及甲方配合事項:<br>乙方應於接獲甲方圖色確認第&nbsp;' + this.buyfill1 + '&nbsp;日(應於合約簽訂日起兩年內),將本工程所需之全部設備、器材 運抵工地,甲方應提供適當的場所供乙方貯放設備、器材。於指定出貨日期,且乙方備妥材料後,如甲方向後延展出貨日期,如延展日期逾三個月,乙方得酌收額外增生之倉儲保管費用。'
this.buystandardData.list.plaintext[5].text = '交貨期限及甲方配合事項:<br>乙方應於接獲甲方圖色確認第&nbsp;' + this.buyfill1 + '&nbsp;日(應於合約簽訂日起兩年內),將本工程所需之全部設備、器材 運抵工地,甲方應提供適當的場所供乙方貯放設備、器材。於指定出貨日期,且乙方備妥材料後,如甲方向後延展出貨日期,如延展日期逾三個月,乙方得酌收額外增生之倉儲保管費用。'
this.buyonstandardViewData.list.plaintext[5].text = '交貨期限及甲方配合事項:<br>乙方應於接獲甲方圖色確認第&nbsp;' + this.buyfill1 + '&nbsp;日(應於合約簽訂日起兩年內),將本工程所需之全部設備、器材 運抵工地,甲方應提供適當的場所供乙方貯放設備、器材。於指定出貨日期,且乙方備妥材料後,如甲方向後延展出貨日期,如延展日期逾三個月,乙方得酌收額外增生之倉儲保管費用。'
let buyAffixHtml = ''
for (let i = 0; i < Number(this.buyAffix); i++) {
buyAffixHtml += `<br>${numberToSmallChinese(i + 1)}、附表${numberToSmallChinese(i + 1)}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;共&nbsp;1&nbsp;張`
@ -789,9 +789,9 @@ const contractDownload = () => {
this.buydata.list.plaintext[1].text = '產品規格:如附表' + this.affixArr[Number(this.buyAffix)] + '。'
this.buystandardData.list.plaintext[1].text = '產品規格:如附表' + this.affixArr[Number(this.buyAffix)] + '。'
this.buyonstandardViewData.list.plaintext[1].text = '產品規格:如附表' + this.affixArr[Number(this.buyAffix)] + '。'
this.buydata.list.plaintext[5].text = '交貨期限及甲方配合事項:<br>乙方應於接獲甲方圖色確認第&nbsp;' + this.buyfill1 + '&nbsp;日(應於合約簽訂日起兩年內),將本工程所需之全部設備、器材 運抵工地,甲方應提供適當的場所供乙方貯放設備、器材。'
this.buystandardData.list.plaintext[5].text = '交貨期限及甲方配合事項:<br>乙方應於接獲甲方圖色確認第&nbsp;' + this.buyfill1 + '&nbsp;日(應於合約簽訂日起兩年內),將本工程所需之全部設備、器材 運抵工地,甲方應提供適當的場所供乙方貯放設備、器材。'
this.buyonstandardViewData.list.plaintext[5].text = '交貨期限及甲方配合事項:<br>乙方應於接獲甲方圖色確認第&nbsp;' + this.buyfill1 + '&nbsp;日(應於合約簽訂日起兩年內),將本工程所需之全部設備、器材 運抵工地,甲方應提供適當的場所供乙方貯放設備、器材。'
this.buydata.list.plaintext[5].text = '交貨期限及甲方配合事項:<br>乙方應於接獲甲方圖色確認第&nbsp;' + this.buyfill1 + '&nbsp;日(應於合約簽訂日起兩年內),將本工程所需之全部設備、器材 運抵工地,甲方應提供適當的場所供乙方貯放設備、器材。於指定出貨日期,且乙方備妥材料後,如甲方向後延展出貨日期,如延展日期逾三個月,乙方得酌收額外增生之倉儲保管費用。'
this.buystandardData.list.plaintext[5].text = '交貨期限及甲方配合事項:<br>乙方應於接獲甲方圖色確認第&nbsp;' + this.buyfill1 + '&nbsp;日(應於合約簽訂日起兩年內),將本工程所需之全部設備、器材 運抵工地,甲方應提供適當的場所供乙方貯放設備、器材。於指定出貨日期,且乙方備妥材料後,如甲方向後延展出貨日期,如延展日期逾三個月,乙方得酌收額外增生之倉儲保管費用。'
this.buyonstandardViewData.list.plaintext[5].text = '交貨期限及甲方配合事項:<br>乙方應於接獲甲方圖色確認第&nbsp;' + this.buyfill1 + '&nbsp;日(應於合約簽訂日起兩年內),將本工程所需之全部設備、器材 運抵工地,甲方應提供適當的場所供乙方貯放設備、器材。於指定出貨日期,且乙方備妥材料後,如甲方向後延展出貨日期,如延展日期逾三個月,乙方得酌收額外增生之倉儲保管費用。'
let buyAffixHtml = ''
for (let i = 0; i < Number(this.buyAffix); i++) {
buyAffixHtml += `<br>${numberToSmallChinese(i + 1)}、附表${numberToSmallChinese(i + 1)}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;共&nbsp;1&nbsp;張`
@ -808,7 +808,11 @@ const contractDownload = () => {
const contractNewInput = () => {
return {
init() { },
init() {
// nextTick(() => {
// $('#renovate_type').select2();
// });
},
data: {
contractno: 'M24020076',
customer: '',
@ -828,7 +832,7 @@ const contractNewInput = () => {
pay_arr: [], //電梯付款種類
nums: 0, //電梯數量
area_no: 'T',
contract_arrival_date: ''
contract_arrival_date: '',
},
fail_arr: [],
step: 1,
@ -841,7 +845,7 @@ const contractNewInput = () => {
this.getContractDate();
} else if (this.step == 2) {
if (this.data.nums <= 0) return alert('請填寫電梯數量!')
checkInput();
// checkInput();
this.getElevatorsData();
} else if (this.step == 3) {
this.getElevatorsData();
@ -1039,7 +1043,8 @@ const contractInput = () => {
contract_type: 'new',
signing_date: '',
token: token,
maintance_manager: ''
maintance_manager: '',
// bonus_verson: 2.1,
// manager: '',
// regular_contract_manger_id: '',
@ -1227,7 +1232,6 @@ const contractInput = () => {
form.append('phone', this.data.phone);
form.append('email', this.data.email);
form.append('mworker', this.data.mworker);
// form.append('mcycle', this.data.mcycle);
form.append('salesman', this.data.salesman);
form.append('contract_begin_date', this.data.contract_begin_date);
form.append('contract_end_date', this.data.contract_end_date);
@ -1248,6 +1252,8 @@ const contractInput = () => {
form.append('contract_type', this.data.contract_type);
form.append('signing_date', this.data.signing_date);
form.append('maintance_manager', this.data.maintance_manager);
form.append('invoice', this.data.invoice);
form.append('invoice_address', this.data.invoice_address);
// 如果有附件檔案,可以逐一加入
for (var i = 0; i < this.data.files.length; i++) {
@ -1605,3 +1611,201 @@ const contractNewApply = () => {
}
}
const renovateInput = () => {
return {
// init() {
// this.initSelect2();
// },
// initSelect2() {
// console.log(123);
// $('#renovate_type').select2();
// },
data: {
contract_no: 'T24030025',
customer: '',
salesman: '',
main_linkman: '', //負責人
linkman: '',
lm_tel: '',
vat: '',
case_name: '',
address: '',
area_no: '',
manager: '',
price_total: '', //合約總價
files: [],
contract_type: '1',
signing_date: '',
elevators: [], //電梯總類
elevators_detail_arr: [], // 電梯台數 Array
payarr: ['', 1, 2, 6, 12],
paykind: [0, 0, 0, 0, 0, 0, 0], //電梯付款種類的分期方式
scale: [0, 0, 0, 0, 0, 0, 0],
amount: [0, 0, 0, 0, 0, 0, 0],
pay_arr: [], // 電梯付款種類
total_month: 0,
total_scale: 0,
total_amount: 0,
// disable: false
// options: ['Option 1', 'Option 2', 'Option 3']
// paykindTotal: this.total(),
},
step: 1,
isLoading: false,
nextStepFn() {
if (this.step == 1) {
if (this.data.contract_no == '') return alert('請輸入合約號');
this.isLoading = true;
this.getContractData();
} else if (this.step == 2) {
if (this.data.nums <= 0) return alert('請填寫電梯數量!')
this.getElevatorsData();
} else if (this.step == 3) {
this.totalFn();
this.checkDisableStatus();
this.step = 4;
}
// this.step = 3;
},
getContractData() {
axios.get('./api/getContractData.php?contracttype=t&contractno=' + this.data.contract_no).then(res => {
console.log(res.data);
if (!res.data) {
this.step = 2;
this.isLoading = false;
return;
}
this.data.pay_arr = res.data.pay_arr;
for (let i = 0; i < this.data.pay_arr['elevotor_pay_detail'].length; i++) {
let kind = this.data.pay_arr['elevotor_pay_detail'][i].pay_kind - 1;
let amount = this.data.pay_arr['elevotor_pay_detail'][i].pay_amount;
let scale = this.data.pay_arr['elevotor_pay_detail'][i].pay_scale;
console.log(kind);
this.data.amount[kind] = amount;
this.data.scale[kind] = scale;
}
this.data.customer = res.data.company
this.data.main_linkman = res.data.manager
this.data.vat = res.data.uscc
this.data.case_name = res.data.case_name
this.data.linkman = res.data.linkman
this.data.lm_tel = res.data.lm_tel
this.data.address = res.data.address
this.data.salesman = res.data.person
// this.data.qc = res.data.qc;
this.data.price_total = res.data.price_total;
this.data.elevators = res.data.elevators;
this.data.elevators_detail_arr = res.data.elevators_detail_arr;
this.data.nums = res.data.nums;
this.data.contract_arrival_date = res.data.facilitok_date;
this.step = 2;
this.isLoading = false;
}).catch(err => {
console.log(err);
this.isLoading = false;
})
},
getElevatorsData() {
if (this.step == 2) {
for (let i = 0; i < this.data.nums; i++) {
// this.initSelect2(i);
// console.log(this.data.elevators_detail_arr[i]);
this.data.elevators_detail_arr[i].warehouseid = ''; // 公務部門負責人
this.data.elevators_detail_arr[i].latitude = ''; // 經度
this.data.elevators_detail_arr[i].longitude = ''; // 緯度
this.data.elevators_detail_arr[i].manage = ''; // 工地負責人
this.data.elevators_detail_arr[i].qc = 'QO'; // QC和官檢
this.data.elevators_detail_arr[i].contract_arrival_date = this.data.contract_arrival_date; //合約交期(到工地)
this.data.elevators_detail_arr[i].selectedItems = '';
// this.data.elevators_detail_arr[i].area_no = ''; //區域
}
this.step = 3;
this.isLoading = false;
} else if (this.step == 3) {
console.log(this.data.elevators_detail_arr);
// this.step = 4;
// this.isLoading = false;
}
},
cons() {
console.log(this.data.elevators_detail_arr);
},
// 計算總共分期月數
totalFn() {
let total_month = 0
for (let i = 0; i < this.data.paykind.length; i++) {
if (this.data.paykind[i] != '0') {
total_month += Number(this.data.paykind[i]);
}
}
this.data.total_month = total_month;
let total_scale = 0
for (let i = 0; i < this.data.scale.length; i++) {
if (this.data.scale[i] != '0') {
total_scale += Number(this.data.scale[i]);
}
}
let total_amount = 0
for (let i = 0; i < this.data.scale.length; i++) {
if (this.data.scale[i] != '0') {
total_amount += Number(this.data.amount[i]);
}
}
// console.log(123);
this.data.total_month = total_month;
this.data.total_scale = total_scale;
this.data.total_amount = total_amount;
},
checkDisableStatus() {
for (let i = 0; i < this.data.amount.length; i++) {
if (this.data.amount[i] == 0) {
this.data.disable = true;
}
}
},
// initSelect2(idx) {
// this.data.elevators_detail_arr[idx].selectedItems = $('#renovate_type' + idx).select2().val();
// },
nextStepKeyupFn(e) {
if (e.keyCode != 13) return
if (this.step == 1) {
this.getContractData();
// console.log(this.step);
}
},
preStepFn() {
this.step -= 1;
console.log(this.step);
},
save() {
console.log(this.data);
const form = new FormData();
form.append('contractno', this.data.contract_no);
form.append('customer', this.data.customer);
form.append('manager', this.data.main_linkman);
form.append('vat', this.data.vat);
form.append('area_no', this.data.area_no);
form.append('case_name', this.data.case_name);
form.append('linkman', this.data.linkman);
form.append('lm_tel', this.data.lm_tel);
form.append('address', this.data.address);
form.append('salesman', this.data.salesman);
form.append('signing_date', this.data.signing_date);
form.append('nums', this.data.nums);
form.append('price_total', this.data.price_total);
form.append('contract_type', this.data.contract_type);
form.append('elevators_detail_arr', JSON.stringify(this.data.elevators_detail_arr));
form.append('elevators', JSON.stringify(this.data.elevators));
form.append('pay_arr', JSON.stringify(this.data.pay_arr));
form.append('scale', JSON.stringify(this.data.scale));
form.append('contracttype', 'm');
form.append('user_id', user_id);
axios.post('./api/postRenovateContractData.php', form).then(res => {
})
}
}
}

3
wms/mkt/api/postFlow.php

@ -7,7 +7,8 @@ function createFlow($mid, $current_assigner, $flow_code, $ekind, $form_key=null)
$system_id = "prm";
if($ekind == "新梯") $flow_id = "prm01";
if($ekind == "汰改") $flow_id = "prm02";
if($ekind == "保養") $flow_id = "prm03";
if($ekind == "修理") $flow_id = "prm03";
if($ekind == "保養") $flow_id = "prm04";
if($form_key == null){
$sql_str = "SELECT appwms.nextval('form_key') form_key";

23
wms/mkt/api/postNewElevatorPricereview.php

@ -695,13 +695,24 @@ try{
$sign3,
];
$sign_total = count(array_filter($signArr, fn($item)=> $item != NULL));
//是否呈核至總經理(M0006) ,暫時不送至總經理,所以加入false
if((false && $price_rate < 80 || $special_fee > 0)){
$sign4 = "M0006,,";
$sign_total += 1;
}else{
$sign4 = NULL;
if($ekind == "新梯"){
//是否呈核至總經理(M0006) ,暫時不送至總經理,所以加入false
if((false && $price_rate < 80 || $special_fee > 0)){
$sign4 = "M0006,,";
$sign_total += 1;
}else{
$sign4 = NULL;
}
}
if($ekind == "汰改"){{
if(($price_rate < 75 || $special_fee > 0)){
$sign4 = "M0006,,";
$sign_total += 1;
}else{
$sign4 = NULL;
}
}
$sql_str = "INSERT INTO pricereview_sign (mid, sign1, sign2, sign3, sign4, sign_total)
VALUES (:mid, :sign1, :sign2, :sign3, :sign4, :sign_total)";
$stmt = $conn->prepare($sql_str);

2
wms/mkt/assets/js/pricereviewAlpine0311.js

@ -819,6 +819,7 @@ const pricereviewCreate = ()=>{
error: [],
validation(){
this.error = []
if(this.totalElevatorsNum() == 0) this.error.push("請至少輸入一種電梯");
for(let i=0;i<this.elevators.length;i++){
if(this.elevators[i].specifications =='') this.error.push("整機單價:規格不能為空");
if(this.elevators[i].person =='') this.error.push("整機單價:人數不能為空");
@ -862,7 +863,6 @@ const pricereviewCreate = ()=>{
return this.error.length > 0 ? false : true
},
submit(){
console.log(this.is_renovation);
const validation = this.validation();
if(!validation) return
const form = new FormData();

4
wms/mkt/pricereview-index.php

@ -497,6 +497,10 @@ if ($data) :
} elseif ($data['status'] == 'YN' && $data['id'] == $maxContractID) {
?>
<a href="pricereviewCreate.php?id=<?= $data['id']; ?>&function_name=specsurvey&token=<?= $token; ?>" class="btn btn-danger btn-sm">重填價審</a>
<?php
}elseif($data['status'] == 'YY' && $data['id'] == $maxContractID){
?>
<a href="pricereviewCreate.php?id=<?= $data['id']; ?>&function_name=specsurvey&token=<?= $token; ?>" class="btn btn-success btn-sm">重新提交</a>
<?php
}
}

2
wms/mkt/pricereviewCheck.php

@ -269,7 +269,7 @@ function getSignerName($signer){
<div id="pricereviewCheck" x-data=pricereviewCheck()>
<?php include_once('./window-modal/historySignModal.php'); ?>
<div class="container">
<table class="table customerinfo-table" >
<table class="table customerinfo-table" >
<tbody>
<tr>
<th>卷號</th>

11
wms/mkt/pricereviewCreate.php

@ -34,10 +34,13 @@ if(isset($_GET['id'])){
$main = $stmt->fetch(PDO::FETCH_ASSOC);
$vol_no = $main['contractno'];
}
if($main && $main['status'] == 'YS'){
echo "<script>alert('此單正在審核中!');window.history.go(-1);</script>";
exit;
if($main){
if((!($main['status'] == 'Y1' || $main['status'] == 'YY' || $main['status'] == 'YN')) ){
echo "<script>alert('此單正在審核中!');window.history.go(-1);</script>";
exit;
}
}
$hope_status = [
'A'=>'有望簽約(已報價)',
'B'=>'觀望考慮(等待時機報價)',
@ -274,7 +277,7 @@ if($main){
$stmt->bindParam(':form_id', $id);
$stmt->execute();
$flow = $stmt->fetch(PDO::FETCH_ASSOC);
$form_key = $flow['form_key'];
$form_key = $flow['form_key'] ?? null;
}else{
//獲取有望客戶電梯規格
$sql_str = "SELECT

49
wms/purchase-api.php

@ -0,0 +1,49 @@
<?php
include "./header.php";
include "T8_Authorization_curl.php";
$account_id = "M0122";
$password = "90493119";
$GroupId = 'TEST';
$validation = get_Auth($GroupId,$account_id,$password);
// print_r(get_purchaseApply($conn, '123'));
$sql_purchaseApply = "SELECT * FROM purCharge";
$result = get_purchaseApply($conn, $sql_purchaseApply);
print_r($result);
function get_purchaseApply($conn){
$sql_purchaseApply = "SELECT * FROM purCharge";
$query_purchaseApply = $conn -> prepare($sql_purchaseApply);
$query_purchaseApply -> execute();
$result = $query_purchaseApply -> fetchAll();
return $result;
}
// print_r(get_purchase_apply($validation,$GroupId,"S230300001-14"));
//費用申請單API 不能用
function get_purchase_apply($validation,$GroupId,$BillNo){
$apiurl = "http://60.244.87.101:880//twWebAPI/V1/PURFEEAPPLY/GetERPData?pkValue=$BillNo";
// echo $apiurl . "\n";
$headerParam = [
'CHI_Authorization: ' . $validation,
'GroupId:'.$GroupId
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiurl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerParam);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
$response = curl_exec($ch);
if ($response === false) {
echo 'Curl error: ' . curl_error($ch);
} else {
$result = json_decode($response, true);
print_r($result);
}
curl_close($ch);
}

36
wms/purchase-apply-index.php

@ -0,0 +1,36 @@
<?php
include "./header.php";
include "T8_Authorization_curl.php";
$account_id = "M0122";
$password = "90493119";
$GroupId = 'TEST';
$validation = get_Auth();
// print_r(get_purchase_apply($validation,$GroupId,"S230300001-14"));
//費用申請單API 不能用
function get_purchase_apply($validation,$GroupId,$BillNo){
$apiurl = "http://60.244.87.101:880//twWebAPI/V1/PURFEEAPPLY/GetERPData?pkValue=$BillNo";
// echo $apiurl . "\n";
$headerParam = [
'CHI_Authorization: ' . $validation,
'GroupId:'.$GroupId
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiurl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerParam);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
$response = curl_exec($ch);
if ($response === false) {
echo 'Curl error: ' . curl_error($ch);
} else {
$result = json_decode($response, true);
print_r($result);
}
curl_close($ch);
}

15
wms/sign/list.php

@ -114,8 +114,7 @@ JOIN
subflow
GROUP BY
form_key
ORDER BY update_date DESC) AS sf ON d.form_key = sf.form_key
) AS sf ON d.form_key = sf.form_key
JOIN
subflow c ON c.form_key = sf.form_key AND c.seq = sf.max_seq
WHERE
@ -123,6 +122,7 @@ WHERE
AND b.flow_id NOT IN ('wws04')
$where_system_id
$where_flow_id
ORDER BY c.update_date DESC, c.form_key DESC
";
// echo '<pre>';
// print_r($sql_get);
@ -196,6 +196,7 @@ function getPricereviewDataByFormkey($form_key){
text-align: right;
}
</style>
<form method='post' action='#'>
<table class='table query-table table-striped table-bordered display compact' style='width:90%;text-align:center;margin:0 auto'>
<thead>
@ -240,7 +241,7 @@ function getPricereviewDataByFormkey($form_key){
</tfoot>
</table>
<div style="overflow-x:auto;width:92%;margin:0 auto">
<table id="table_index" style='width:100%;margin:0 auto' class="table table-striped table-bordered display compact">
<table id="table_index2" style='width:100%;margin:0 auto' class="table table-striped table-bordered display compact">
<thead>
<tr>
<th style="width:400px;">序號</th>
@ -313,6 +314,13 @@ function getPricereviewDataByFormkey($form_key){
</table>
</div>
</form>
<script>
$(document).ready(function() {
$('#table_index2').DataTable( {
order: [[ 3, 'desc' ]]
} );
} );
</script>
<?php
#代錶結束連線
mysqli_close($link);
@ -320,3 +328,4 @@ require_once "../footer.php";
?>

Loading…
Cancel
Save