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