diff --git a/wms/contract/api/getComboNo.php b/wms/contract/api/getComboNo.php
index 5c0bb380..5c81120d 100644
--- a/wms/contract/api/getComboNo.php
+++ b/wms/contract/api/getComboNo.php
@@ -1,29 +1,53 @@
'BW002',
'month'=>'EM002',
'quarter'=>'EQ002',
'half'=>'HY002',
'year'=>'EY002'
];
- public $bwarr = [
+ private $bwarr = [
'week','month','week','month','week','quarter',
'week','month','week','month','week','half',
'week','month','week','month','week','quarter',
'week','month','week','month','week','year'
];
- public $emarr = [
+ private $emarr = [
'month','month','quarter','month','month','half',
'month','month','quarter','month','month','year'
];
- public $combo;
- public $startdate;
- public $enddate;
+ private $combo;
+ private $startdate;
+ private $enddate;
public function __construct($combo, $startdate, $enddate){
+ $this->combo = $combo;
+ $this->startdate = $startdate;
+ $this->enddate = $enddate;
}
public function getComboNo(){
-
+ $comboarr = (array) $this->combo === 'bw' ? $this->bwarr : $this->emarr;
+
+ $startdate = new DateTime($this->startdate);
+ $enddate = new DateTime($this->enddate);
+
+ $interval = date_diff($startdate, $enddate);
+
+ $months = $interval->y * 12 + $interval->m +1;
+ $months = $this->combo === 'bw' ? $months*2 : $months;
+
+ $newarr = [];
+ $idx = 0;
+ $scheduleDate = $startdate;
+ for ($i = 0; $i < $months; $i++){
+ $newarr[] = [$this->comboarr[$comboarr[$idx]], $scheduleDate->format("Y-m-d")];
+ $idx ++;
+ $scheduleDate = $startdate->modify("+1 month");
+ if($idx >= count($comboarr)){
+ $idx = 0;
+ }
+ }
+ return json_encode($newarr);
}
}
\ No newline at end of file
diff --git a/wms/contract/api/getFacilityNo.php b/wms/contract/api/getFacilityNo.php
index 3c92c600..af4ce122 100644
--- a/wms/contract/api/getFacilityNo.php
+++ b/wms/contract/api/getFacilityNo.php
@@ -486,7 +486,7 @@ class CreateFacilityNo
* @param int $seq_name : 幾個案場 0-99
* @return array $new_facilityno : 作番號
*/
- function makeBFacilityNo($sale_type, $make_type, $num)
+ function makeBFacilityNo($sale_type, $make_type, $num=1)
{
$new_facility_no = $this->getNextFacilityNo("B", $sale_type, $make_type, $num);
if ($this->checkFacilityRepeatStatus($new_facility_no) == false) {
diff --git a/wms/contract/api/postContractData.php b/wms/contract/api/postContractData.php
index fa67c1be..37238bc6 100644
--- a/wms/contract/api/postContractData.php
+++ b/wms/contract/api/postContractData.php
@@ -5,7 +5,7 @@ include_once("./getComboNo.php");
ini_set ( 'date.timezone' , 'Asia/Taipei' );
if(isset($_POST["contractno"]) && $_POST["contractno"] != "") {
try{
-
+ $created_at = date('Y-m-d H:i:s');
$contractno = !empty($_POST['contractno'])? $_POST['contractno'] : null;
$total_price = !empty($_POST['total_price']) ? $_POST['total_price'] : null;
$vat = !empty($_POST['vat']) ? $_POST['vat'] : null;
@@ -39,9 +39,48 @@ if(isset($_POST["contractno"]) && $_POST["contractno"] != "") {
$latitude = !empty($_POST['latitude']) ? $_POST['latitude'] : null;
$longitude = !empty($_POST['longitude']) ? $_POST['longitude'] : null;
$num = !empty($_POST['num']) ? $_POST['num'] : null;
-
$files = !empty($_FILES['files']) ? $_FILES['files'] : null;
-
+
+ // validate
+ $fail_arr = [];
+ if($contractno === '') return $fail_arr[] = '合約號為必填';
+
+ if($total_price == '') $fail_arr[] = '合約總價為必填';
+ if($vat == '') $fail_arr[] = '統一編號為必填';
+ if($mtype == '') $fail_arr[] = '維修型態為必填';
+ if($opendoor == '') $fail_arr[] = '開門方式為必填';
+ if($phone == '') $fail_arr[] = '客戶電話為必填';
+ if($email == '') $fail_arr[] = 'Email為必填';
+ if($mworker == '') $fail_arr[] = '保養員為必填';
+ if($mcycle == '') $fail_arr[] = '保養頻率為必填';
+ if($salesman == '') $fail_arr[] = '營業員為必填';
+ if($contract_begin_date == '') $fail_arr[] = '合約開始時間為必填';
+ if($contract_end_date == '') $fail_arr[] = '合約結束時間為必填';
+ if($address == '') $fail_arr[] = '地址為必填';
+ if($area == '') $fail_arr[] = '區域為必填';
+ if($customer == '') $fail_arr[] = '客戶為必填';
+ if($partyA == '') $fail_arr[] = '甲方為必填';
+ if($partyAaddress == '') $fail_arr[] = '甲方地址為必填';
+ if($partyAphone == '') $fail_arr[] = '甲方電話為必填';
+ if($partyAemail == '') $fail_arr[] = '甲方Email為必填';
+ if($spec == '') $fail_arr[] = '規格為必填';
+ if($weight == '') $fail_arr[] = '重量為必填';
+ if($numberofpassenger == '') $fail_arr[] = '乘客人數為必填';
+ if($numberofstop == '') $fail_arr[] = '停留站數為必填';
+ if($numberoffloor == '') $fail_arr[] = '停留樓層為必填';
+ if($speed == '') $fail_arr[] = '速度為必填';
+ if($takecertificatedate == '') $fail_arr[] = '取標日期為必填';
+ if($maintainance == '') $fail_arr[] = '保養為必填';
+ if($licensedate == '') $fail_arr[] = '營業員為必填';
+ if($latitude == '') $fail_arr[] = '緯度為必填';
+ if($longitude == '') $fail_arr[] = '經度為必填';
+ if($num == '') $fail_arr[] = '數量為必填';
+ if(count($fail_arr) > 0) {
+ header("HTTP/1.1 422 Unprocessable Entity");
+ echo json_encode($fail_arr);
+ exit();
+ }
+
//create account table
$accounttype = "A";
$accountid = $vat;
@@ -51,6 +90,8 @@ if(isset($_POST["contractno"]) && $_POST["contractno"] != "") {
$repairerid = $mworker;
$creater = $user_id;
$create_at = date('Y-m-d H:i:s');
+
+ $conn->beginTransaction();
$sql_str = "INSERT INTO account (accounttype, accountid, pwd, name, tel, address, email, repairerid, creater, create_at) VALUES (:accounttype, :accountid, :pwd, :name, :tel, :address, :email, :repairerid, :creater, :create_at)";
$stmt = $conn -> prepare($sql_str);
@@ -155,30 +196,209 @@ if(isset($_POST["contractno"]) && $_POST["contractno"] != "") {
$stmt -> bindParam(':create_at' ,$create_at);
$stmt -> bindParam(':area' ,$area);
$stmt -> bindParam(':takecertificatedate' ,$takecertificatedate);
- $stmt -> bindParam(':licensedate' ,$licensedate);
+ $stmt -> bindParam(':licensedate' ,$licensedateeeee);
$result = $stmt -> execute();
}
//create schedule table
- $comboMo = new CreateComboNo();
+ $comboNo = new CreateComboNo($mcycle, $contract_begin_date, $contract_end_date);
+ $comboArr = json_decode($comboNo->getComboNo(), true);
+ foreach($facilityno as $no){
+ foreach($comboArr as $combo){
+ $sql_str = 'INSERT INTO schedule (contractno, facilityno, combono, repairerid, repairername, duedate, creater, create_at) VALUES (:contractno, :facilityno, :combono, :repairerid, :repairername, :duedate, :creater, :create_at)';
+ $stmt = $conn -> prepare($sql_str);
+ $stmt -> bindParam(':contractno' ,$contractno);
+ $stmt -> bindParam(':facilityno' ,$no);
+ $stmt -> bindParam(':combono' ,$combo[0]);
+ $stmt -> bindParam(':repairerid' ,$repairerid);
+ $stmt -> bindParam(':repairername' ,$repairername);
+ $stmt -> bindParam(':duedate' ,$combo[1]);
+ $stmt -> bindParam(':creater' ,$creater);
+ $stmt -> bindParam(':create_at' ,$create_at);
+ $result = $stmt -> execute();
+ }
+ }
- $sql_str = 'INSERT INTO schedule (contractno, facilityno, combono, repairerid, repairername, duedate, creater, create_at) VALUES (:contractno, :facilityno, :combono, :repairerid, :repairername, :duedate, :creater, :create_at)';
- $stmt = $conn -> prepare($sql_str);
- $stmt -> bindParam(':contractno' ,$contractno);
- $stmt -> bindParam(':facilityno' ,$facilityno);
- $stmt -> bindParam(':combono' ,$combono);
- $stmt -> bindParam(':repairerid' ,$repairerid);
- $stmt -> bindParam(':repairername' ,$repairername);
- $stmt -> bindParam(':duedate' ,$duedate);
- $stmt -> bindParam(':creater' ,$creater);
- $stmt -> bindParam(':create_at' ,$create_at);
- $result = $stmt -> execute();
+ // create contract_b_signed_back table
+ $contract_type = $mtype;
+ $company = $customer;
+ $customer_no = $vat;
+ $salesperson = $salesman;
+ $customer_phone = $phone;
+ $customer_email = $email;
+ $repairman = $mworker;
+ $cycle = $mcycle;
+ $contact_person = $partyA;
+ $contact_address = $partyAaddress;
+ $contact_phone = $partyAphone;
+ $contract_email = $partyAemail;
+ $elevators_number = $num;
+ $bonus = 1000;
+ $max_bonus = 2000;
+ $englisharr = range('a', 'z');
+ $file = $_FILES['files'];
+ $file_name = $file['name'];
+ $file_type = $file['type'];
+ $tmp_name = $file['tmp_name'];
+ $file_size = $file['size'];
+ $error = $file['error'];
+ $newfiles = [];
+ foreach( $files as $file ){
+ $i = 0; //新陣列的索引編號
+ foreach( $file as $key => $val ){
+ $newfiles[$i]['name'] = $files['name'][$key];
+ $newfiles[$i]['type'] = $files['type'][$key];
+ $newfiles[$i]['tmp_name'] = $files['tmp_name'][$key];
+ $newfiles[$i]['error'] = $files['error'][$key];
+ $newfiles[$i]['size'] = $files['size'][$key];
+ $i++;
+ } //foreach 第2層 end
+ }
+ echo json_encode($newfiles);
+ $max_size = 4096*4096; //設定允許上傳檔案容量的最大值(1M)
+ $allow_ext = array('jpeg', 'jpg', 'png','JPG','JPEG','PNG','GIF'); //設定允許上傳檔案的類型
+ $path = '../images/contracts/';
+ if (!file_exists($path)) { mkdir($path); }
+ $msg_result = ''; //負責接收所有檔案檢測後的回傳訊息
+ $datetime = (string)date('YmdHis');
+ $files_id = 'c' . $datetime;
+ foreach( $newfiles as $key => $file ){
+ $randNum = rand(1000,9999);
+ $randEnglish = $englisharr[rand(0,25)];
+ $file_name = 'c' . (string)date('YmdHis') . $randNum . $randEnglish . $randNum.$file['name'];
+ $msg = upload_chk( $file,$path, $max_size, $allow_ext, $file_name );
+ if($msg==1){
+ $msg = '檔案傳送成功!';
+ $sql_str = "INSERT INTO contract_back_files (files_id, file_name, file_mime, file_size, created_at, created_by) VALUES (:files_id, :file_name, :file_mime, :file_size, :created_at, :created_by)";
+ $stmt = $conn -> prepare($sql_str);
+ $stmt -> bindParam(':files_id' ,$files_id);
+ $stmt -> bindParam(':file_name' ,$file_name);
+ $stmt -> bindParam(':file_mime' ,$file['type']);
+ $stmt -> bindParam(':file_size' ,$file['size']);
+ $stmt -> bindParam(':created_at' ,$created_at);
+ $stmt -> bindParam(':created_by' ,$user_id);
+ $stmt ->execute();
+ }
+ $msg_result .= '第' . ($key+1) . '個上傳檔案的結果:' . $msg . '
';
+ $src_name = $path.$file['name'];
+ if( file_exists($src_name) ){
+ //副檔名
+ $extname = pathinfo($src_name, PATHINFO_EXTENSION);
+ //主檔名
+ $basename = basename($src_name, '.'.$extname);
+ }
+
+ }
+ $sql_str = "INSERT INTO contract_b_signed_back (contract_no, contract_type, company, customer_no, salesperson, contract_start_date, contract_end_date, total_price, opendoor, customer_phone, customer_email, repairman, cycle, contact_person, contact_address, contact_phone, contact_email, takecertificatedate, license_date, elevators_number, spec, weight, speed, numberofpassenger, numberofstop, numberoffloor, latitude, longitude, area, address, files_id, bonus, max_bonus, created_at, created_by)
+ VALUES (:contract_no, :contract_type, :company, :customer_no, :salesperson, :contract_start_date, :contract_end_date, :total_price, :opendoor, :customer_phone, :customer_email, :repairman, :cycle, :contact_person, :contact_address, :contact_phone, :contact_email, :takecertificatedate, :license_date, :elevators_number, :spec, :weight, :speed, :numberofpassenger, :numberofstop, :numberoffloor, :latitude, :longitude, :area, :address, :files_id, :bonus, :max_bonus, :created_at, :created_by)";
+ $stmt = $conn -> prepare($sql_str);
+ $stmt -> bindParam(":contract_no",$contractno);
+ $stmt -> bindParam(":contract_type",$contract_type);
+ $stmt -> bindParam(":company",$company);
+ $stmt -> bindParam(":customer_no",$customer_no);
+ $stmt -> bindParam(":salesperson",$salesperson);
+ $stmt -> bindParam(":contract_start_date",$contract_begin_date);
+ $stmt -> bindParam(":contract_end_date",$contract_end_date);
+ $stmt -> bindParam(":total_price",$total_price);
+ $stmt -> bindParam(":opendoor",$opendoor);
+ $stmt -> bindParam(":customer_phone",$customer_phone);
+ $stmt -> bindParam(":customer_email",$customer_email);
+ $stmt -> bindParam(":repairman",$repairman);
+ $stmt -> bindParam(":cycle",$cycle);
+ $stmt -> bindParam(":contact_person",$contact_person);
+ $stmt -> bindParam(":contact_address",$contact_address);
+ $stmt -> bindParam(":contact_phone",$contact_phone);
+ $stmt -> bindParam(":contact_email",$contact_email);
+ $stmt -> bindParam(":takecertificatedate",$takecertificatedate);
+ $stmt -> bindParam(":license_date",$license_date);
+ $stmt -> bindParam(":elevators_number",$elevators_number);
+ $stmt -> bindParam(":spec",$spec);
+ $stmt -> bindParam(":weight",$weight);
+ $stmt -> bindParam(":speed",$speed);
+ $stmt -> bindParam(":numberofpassenger",$numberofpassenger);
+ $stmt -> bindParam(":numberofstop",$numberofstop);
+ $stmt -> bindParam(":numberoffloor",$numberoffloor);
+ $stmt -> bindParam(":latitude",$latitude);
+ $stmt -> bindParam(":longitude",$longitude);
+ $stmt -> bindParam(":area",$area);
+ $stmt -> bindParam(":address",$address);
+ $stmt -> bindParam(":files_id",$files_id);
+ $stmt -> bindParam(":bonus",$bonus);
+ $stmt -> bindParam(":max_bonus",$max_bonus);
+ $stmt -> bindParam(":created_at", $created_at);
+ $stmt -> bindParam(":created_by",$user_id);
+
+ $stmt -> execute();
+
header('Content-Type: application/json');
$jsonData = json_encode($files);
+ $conn->commit();
}catch(PDOException $e){
+ $r = $conn->rollback();
+ echo $r;
die('Error!:'.$e->getMessage());
}
-}
\ No newline at end of file
+}
+
+function upload_chk( $file, $path, $max_size, $allow_ext, $file_name ){
+
+ $source_file_name = $file['name']; //上傳檔案的原來檔案名稱
+ $file_type = $file['type']; //上傳檔案的類型(副檔名)
+ $tmp_name = $file['tmp_name']; //上傳到暫存空間的路徑/檔名
+ $file_size = $file['size']; //上傳檔案的檔案大小(容量)
+ $error = $file['error']; //上傳工作傳回的錯誤訊息編號
+ $msg = ''; //負責記錄回傳的訊息
+
+ //1.判斷錯誤編號只有為0時表示沒有錯誤發生,才表示上傳成功 =================
+ if( $error == 0 ){
+
+ //取得檔案延伸的副檔名, 以下函數可以取得檔案延伸的副檔名
+ //pathinfo(上傳檔案的原來檔案名稱, PATHINFO_EXTENSION)
+ $ext = pathinfo($source_file_name, PATHINFO_EXTENSION);
+ $ext = strtolower($ext); //將延伸的副檔名轉小寫
+
+ //2.判斷上傳檔案的大小 ====================================
+ if( $file_size > $max_size ){
+ //當目前檔案容量超過容量限制時, 以下準備顯示的資訊
+ if( $max_size >= 4096*4096 ){
+ $max_size /= (4096*4096);
+ $max_size .= 'M';
+ }elseif( $max_size >= 4096 ){
+ $max_size /= 4096;
+ $max_size .= 'K';
+ }
+ $msg ='上傳檔案過大,請選擇容量小於 '.$max_size.' 的檔案';
+
+ //3.判斷檔案類型 ===========================================
+ //in_array($ext, $allow_ext) 判斷 $ext變數的值 是否在 $allow_ext 這個陣列變數中
+ }elseif( !in_array( $ext, $allow_ext ) ){
+ $allow_str = ''; //準備將允許檔案類型的陣列內容, 組合成字串
+ foreach( $allow_ext as $key=>$value ){
+ //if的縮寫語法:條件?成立執行的工作:不成立執行的工作;
+ $key==0? $allow_str.= $value : $allow_str.=', '.$value;
+ }
+ $msg = '檔案類型不符合,請選擇 '.$allow_str.' 檔案';
+
+ //4.以上條件都沒問題的話, 則進行最後else中的工作===============
+ }else{
+ //搬移檔案 move_uploaded_file(要搬移的檔案, 目的地位置及目的檔案名稱), 成功傳回true(1)
+ $msg = @move_uploaded_file($tmp_name, $path.$file_name);
+ }
+ }else{
+ //這裡表示上傳有錯誤, 匹配錯誤編號顯示對應的訊息 ======================================
+ switch ($error) {
+ case 1: $msg = '上傳檔案超過 upload_max_filesize 容量最大值'; break;
+ case 2: $msg = '上傳檔案超過 post_max_size 總容量最大值'; break;
+ case 3: $msg = '檔案只有部份被上傳'; break;
+ case 4: $msg = '沒有檔案被上傳'; break;
+ case 6: $msg = '找不到主機端暫存檔案的目錄位置'; break;
+ case 7: $msg = '檔案寫入失敗'; break;
+ case 8: $msg = '上傳檔案被PHP程式中斷,表示主機端系統錯誤'; break;
+ }
+ } //if( $error == 0 ){ ..... end
+
+ return $msg; //回傳$msg的結果
+ }// function end
\ No newline at end of file
diff --git a/wms/contract/contract-input.php b/wms/contract/contract-input.php
index e9b49d7b..295542bc 100644
--- a/wms/contract/contract-input.php
+++ b/wms/contract/contract-input.php
@@ -17,7 +17,6 @@ $contractpersons = $stmt->fetchAll(PDO::FETCH_ASSOC);
$createFacilityNo = new CreateFacilityNo();
$facilityno = $createFacilityNo->makeTFacilityNo("T", 'X', 5);
-print_r($facilityno);
?>
@@ -72,8 +71,9 @@ print_r($facilityno);
customize:false,
step:1,
isLoading:false,
-
+ fail_arr:[],
nextStepFn(){
+ if(this.data.contractno == '') return alert('請輸入合約號');
this.isLoading = true
axios.get('./api/getContractData.php?contractno=' + this.data.contractno).then(res=>{
console.log(res)
@@ -114,6 +114,7 @@ print_r($facilityno);
},
nextStepKeyupFn(e){
if(e.keyCode !== 13) return
+ if(this.contractno == '') return alert('請輸入合約號');
this.isLoading = true
axios.get('./api/getContractData.php?contractno=' + this.data.contractno).then(res=>{
console.log(res)
@@ -171,7 +172,6 @@ print_r($facilityno);
},
save(){
this.isLoading = true
- console.log(this.data.files[0] instanceof File);
const form = new FormData();
form.append('contractno', this.data.contractno);
form.append('total_price', this.data.total_price);
@@ -215,15 +215,26 @@ print_r($facilityno);
console.log(res);
this.isLoading = false
}).catch(error=>{
- console.log(error);
+ let code = error.response.status;
+ if(code == 422){
+ this.fail_arr = error.response.data
+ this.errorFn();
+ }
+
this.isLoading = false
})
},
+ errorFn(){
+ let msg = ''
+ for(let i = 0; i < this.fail_arr.length; i++){
+ msg += this.fail_arr[i] + '、'
+ }
+ alert(msg)
+ },
uploadFiles(e){
this.data.files = e.target.files
}
}">
-
未填寫
未填寫
未填寫
未填寫
未填寫
未填寫
未填寫
未填寫
未填寫
未填寫
未填寫
未填寫
未填寫
未填寫
未填寫
未填寫
未填寫
未填寫
未填寫
未填寫
未填寫
未填寫
未填寫
未填寫
未填寫
未填寫
未填寫
未填寫
未填寫
未填寫
未填寫