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.
770 lines
38 KiB
770 lines
38 KiB
<?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']) ? (int)$_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;
|
|
$payment_period = isset($_GET['payment_period']) ? $_GET['payment_period'] : 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;
|
|
|
|
if($ver == '2.0'){
|
|
$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);
|
|
}
|
|
if($ver == '2.1'){
|
|
$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 = '');
|
|
}
|
|
|
|
|
|
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") {
|
|
$sales_bonus = 0;
|
|
$region_manager_bonus = 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, $discount, $fee_per_st, $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;
|
|
};
|
|
|