0) {
// header("HTTP/1.1 422 Unprocessable Entity");
// echo json_encode($fail_arr, JSON_UNESCAPED_UNICODE);
// exit();
// }
//create facility table
$createFacilityNo = new CreateFacilityNo();
$dailyNecessities = [
'MAE100' => 'X', //小機房客梯
'MAM200' => 'W', //無機房客梯
'MAH100' => 'H', //小電梯
'MAQ100' => 'Z', //強趨梯
'MAF100' => 'F', //貨梯
'MAP100' => 'B', //平台梯
];
$arr = [];
// 建立作番號
foreach ($elevators_detail_arr as $elevator) {
// $spec = explode('-', $elevator['item_spec']);
$arr[] = $dailyNecessities[$elevator['spec']];
}
$facilityno = $createFacilityNo->makeMFacilityNo('M', $arr, intval($elevators_nums));
echo json_encode($facilityno);
// $bonus_result = BounsCount($_POST, $conn, $facilityno);
// if (!empty($bonus_result) && $bonus_result['status'] == "2") {
// $fail_arr[] = '獎金計算錯誤,請再檢查或連繫資訊人員';
// // header("HTTP/1.1 422 Unprocessable Entity");
// echo json_encode($fail_arr, JSON_UNESCAPED_UNICODE);
// exit();
// }
T8Insert($_POST, $facilityno, $connT8);
exit();
$conn->beginTransaction();
$sql_str = "SELECT accountid, name FROM account WHERE accountid = :accountid ORDER BY create_at DESC";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(":accountid", $salesman);
$stmt->execute();
$saleman = $stmt->fetch(PDO::FETCH_ASSOC);
$salesman_name = $saleman['name'];
if (!empty($files)) {
$englisharr = range('a', 'z');
$files = $_FILES['files'];
$newfiles = [];
foreach ($files as $file) {
$i = 0; //新陣列的索引編號
foreach ($file as $key => $val) {
$newfiles[$i]['name'] = $files['name'][$key];
$newfiles[$i]['type'] = $files['type'][$key];
$newfiles[$i]['tmp_name'] = $files['tmp_name'][$key];
$newfiles[$i]['error'] = $files['error'][$key];
$newfiles[$i]['size'] = $files['size'][$key];
$i++;
} //foreach 第2層 end
}
$max_size = 4096 * 4096; //設定允許上傳檔案容量的最大值(1M)
$allow_ext = array('jpeg', 'jpg', 'png', 'JPG', 'JPEG', 'PNG', 'GIF'); //設定允許上傳檔案的類型
$path = '../images/contracts/';
if (!file_exists($path)) {
mkdir($path);
}
$msg_result = ''; //負責接收所有檔案檢測後的回傳訊息
$datetime = (string)date('YmdHis');
$files_id = 'm' . $datetime; // 保養=>b + 日期時間
foreach ($newfiles as $key => $file) {
$randNum = rand(1000, 9999);
$randEnglish = $englisharr[rand(0, 25)];
$file_name = 'm' . (string)date('YmdHis') . $randNum . $randEnglish . $randNum . $file['name'];
$msg = upload_chk($file, $path, $max_size, $allow_ext, $file_name);
if ($msg == 1) {
$msg = '檔案傳送成功!';
$sql_str = "INSERT INTO contract_back_files (files_id, file_name, file_mime, file_size, created_at, created_by) VALUES (:files_id, :file_name, :file_mime, :file_size, :created_at, :created_by)";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(':files_id', $files_id);
$stmt->bindParam(':file_name', $file_name);
$stmt->bindParam(':file_mime', $file['type']);
$stmt->bindParam(':file_size', $file['size']);
$stmt->bindParam(':created_at', $created_at);
$stmt->bindParam(':created_by', $created_by);
// $stmt->execute();
} else {
throw new PDOException('檔案上傳失敗:' . $msg);
}
$msg_result .= '第' . ($key + 1) . '個上傳檔案的結果:' . $msg . '
';
$src_name = $path . $file['name'];
if (file_exists($src_name)) {
//副檔名
$extname = pathinfo($src_name, PATHINFO_EXTENSION);
//主檔名
$basename = basename($src_name, '.' . $extname);
}
}
} else {
$files = null;
}
$sql_str = "INSERT INTO contract_m_signed_back (contract_no, customer, manager, vat, case_name, linkman, lm_tel, address, salesman, salesman_name, files_id, created_at, created_by, qc_official_type) VALUES (:contract_no, :customer, :manager, :vat, :case_name, :linkman, :lm_tel, :address, :salesman, :salesman_name, :files_id, :created_at, :created_by, :qc)";
$stmt = $conn->prepare($sql_str);
$stmt->bindParam(":contract_no", $contractno);
$stmt->bindParam(":customer", $customer);
$stmt->bindParam(":manager", $manager);
$stmt->bindParam(":vat", $vat);
$stmt->bindParam(":case_name", $case_name);
$stmt->bindParam(":linkman", $linkman);
$stmt->bindParam(":lm_tel", $lm_tel);
$stmt->bindParam(":address", $address);
$stmt->bindParam(":salesman", $salesman);
$stmt->bindParam(":salesman_name", $salesman_name);
$stmt->bindParam(":files_id", $files_id);
$stmt->bindParam(":created_at", $created_at);
$stmt->bindParam(":created_by", $created_by);
$stmt->bindParam(":qc", $qc);
// $stmt->execute();
$result = $conn->commit();
if ($result) {
header("HTTP/1.1 201 Created");
}
} catch (PDOException $e) {
$conn->rollback();
header("HTTP/1.1 500 Internal Server Error");
die('Error!:' . $e->getMessage());
}
}
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' => '交車' //交車
];
$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(':EMail', $email);
$stmt->bindParam(':CreatorId', $user_id);
$stmt->bindParam(':CreateTime', $createTime);
$stmt->execute();
$sql = "INSERT INTO comCustomer
(OrgId,BizPartnerTypeId,CurrId,BizPartnerId,PersonId,CreatorId,IsInUsed,InvoiceAddress,CreateTime,InvoiceId)
VALUES('1000','10','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,
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();
}
foreach ($elevators as $index => $elevator) {
$count = 1;
// 產品集成維護
$facility_no = $facilityno[$index];
$MaterialName = "$partyA($facility_no)";
$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'];
foreach ($pay_arr['elevotor_pay_detail'] as $key => $detail) {
$PayStage = $pay_kind[$detail['kind']];
$PlanPercentage = intval($detail['pay_scale']) / 100;
$rows = [
"PayStage" => "$PayStage", //收款階段
"PlanPercentage" => $PlanPercentage, //計劃收款比例(%)
"PlanPayAmt" => $detail['amount'], //計劃收款金額
"PlanPayDate" => 20240101, //計劃收款日期 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 //交易價格
];
$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 //交易價格
];
$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 //交易價格
];
$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" => "$user_id", //業務人員
"DueToId" => "$contractno", //債務方
"TradeConditionId" => "",
"TaxId" => "ST005",
"CreditorCompId" => "1001",
"CreditorOrgId" => "1000",
// "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 "
"; print_r(json_encode($API_body, JSON_UNESCAPED_UNICODE)); echo ""; $api_url = "https://erp.masada.com.tw:780/twWebAPI/V1/SALSALESORDER/PostERPData"; $result = T8salIncomeApply($API_body, $api_url); echo "
"; print_r($result); echo ""; $connT8->commit(); } catch (PDOException $e) { $connT8->rollback(); header("HTTP/1.1 500 Internal Server Error"); die('Error!:' . $e->getMessage()); } } function BounsCount($data, $conn, $facilityno) { // echo '
'; // print_r($facilityno); // echo ''; // exit; 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) { $elevator_type = $dailyNecessities[$elevator['spec']]; $elevator_list_price = $elevator['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 ); // echo '
'; // print_r($result_bonus); // echo ''; $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; try { } catch (PDOException $e) { header("HTTP/1.1 500 Internal Server Error"); die('Error!:' . $e->getMessage()); } }