14 changed files with 1632 additions and 835 deletions
@ -0,0 +1,748 @@ |
|||||
|
<?php |
||||
|
## 3/31 前套用 2.0 版本 |
||||
|
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; |
||||
|
}; |
@ -1,115 +1,72 @@ |
|||||
[ |
[ |
||||
{ |
{ |
||||
"name": "MainSalesOrder", |
"apply_key": "MB24010007", |
||||
"rows": [ |
"register_code": "036B017432", |
||||
{ |
"elevator_brand": "1", |
||||
"BillNo": "M24020076", |
"elevator_kind": "A", |
||||
"BillDate": 20240320, |
"spec": "MAE100", |
||||
"TypeId": "SO", |
"weight": 550, |
||||
"FOrgId": "1000", |
"speed": 60, |
||||
"OrgId": "1000", |
"stop": 12, |
||||
"ModeId": "M", |
"floors": 12, |
||||
"BizPartnerId": "M24020076", |
"persons": 8, |
||||
"CurrId": "TWD", |
"elevator_num": 0, |
||||
"CurrOAmount": 1, |
"useful_years": 83, |
||||
"CurrLAmount": 1, |
"last_check_date": 1121109, |
||||
"PersonId": "M0073", |
"speed_governors_check_expense": 0, |
||||
"DueToId": "M24020076", |
"maintain_times": 1, |
||||
"TradeConditionId": "", |
"is_m1_bundle": "N", |
||||
"TaxId": "ST005", |
"maintainance": "A", |
||||
"CreditorCompId": "1001", |
"maintain_months": "12", |
||||
"CreditorOrgId": "1000", |
"maintain_period": 1, |
||||
"CreatorId": "M0225" |
"stand_price": 3140, |
||||
} |
"contract_price": 1666.67, |
||||
] |
"sold_price": 1667, |
||||
}, |
"commission_expense": null, |
||||
{ |
"management_expense": null, |
||||
"name": "SubOrder", |
"annual_survey_expense": 0, |
||||
"rows": [ |
"service_expense": 2, |
||||
{ |
"cmstatus": "Y", |
||||
"TaxId": "ST005", |
"updated_at": null, |
||||
"RequirementDate": 20240320, |
"creater": null, |
||||
"ConsignmentDate": 20240320, |
"created_at": "2024-01-10 11:16:26", |
||||
"BillNo": "M24020076", |
"discount": 0.5301496815286625, |
||||
"RowCode": 1, |
"bonus_verson": "2.0", |
||||
"ItemType": 1, |
"manager": "M0137" |
||||
"MaterialId": "A40001", |
|
||||
"SUnitId": "SET", |
|
||||
"SQuantity": 1, |
|
||||
"SPrice": 910000, |
|
||||
"CU_MaterialId": "4MW00001" |
|
||||
}, |
}, |
||||
{ |
{ |
||||
"TaxId": "ST005", |
"apply_key": "MB24010007", |
||||
"RequirementDate": 20240320, |
"register_code": "036B032903", |
||||
"ConsignmentDate": 20240320, |
"elevator_brand": "1", |
||||
"BillNo": "M24020076", |
"elevator_kind": "A", |
||||
"RowCode": 2, |
"spec": "MAE100", |
||||
"ItemType": 1, |
"weight": 450, |
||||
"MaterialId": "A40008", |
"speed": 60, |
||||
"SUnitId": "SET", |
"stop": 7, |
||||
"SQuantity": 1, |
"floors": 7, |
||||
"SPrice": 390000, |
"persons": 6, |
||||
"CU_MaterialId": "4MW00001" |
"elevator_num": 0, |
||||
}, |
"useful_years": 83, |
||||
{ |
"last_check_date": 1121109, |
||||
"TaxId": "ST005", |
"speed_governors_check_expense": 0, |
||||
"RequirementDate": 20240320, |
"maintain_times": 1, |
||||
"ConsignmentDate": 20240320, |
"is_m1_bundle": "N", |
||||
"BillNo": "M24020076", |
"maintainance": "A", |
||||
"RowCode": 3, |
"maintain_months": "12", |
||||
"ItemType": 0, |
"maintain_period": 1, |
||||
"MaterialId": "4MW00001", |
"stand_price": 2540, |
||||
"SUnitId": "SET", |
"contract_price": 1666.67, |
||||
"SQuantity": 1, |
"sold_price": 1667, |
||||
"SPrice": 0, |
"commission_expense": null, |
||||
"CU_MaterialId": "4MW00001" |
"management_expense": null, |
||||
} |
"annual_survey_expense": 0, |
||||
] |
"service_expense": 2, |
||||
}, |
"cmstatus": "Y", |
||||
{ |
"updated_at": null, |
||||
"name": "salOrderStagePay", |
"creater": null, |
||||
"rows": [ |
"created_at": "2024-01-10 11:16:26", |
||||
{ |
"discount": 0.6553818897637795, |
||||
"PayStage": "簽約", |
"bonus_verson": "2.0", |
||||
"PlanPercentage": 0.2, |
"manager": "M0137" |
||||
"PlanPayAmt": 260000, |
|
||||
"PlanPayDate": 20240420, |
|
||||
"BillNo": "M24020076", |
|
||||
"RowCode": 1, |
|
||||
"RowNo": 1, |
|
||||
"UnWriteOffOAmount": 260000 |
|
||||
}, |
|
||||
{ |
|
||||
"PayStage": "貨抵工地", |
|
||||
"PlanPercentage": 0.5, |
|
||||
"PlanPayAmt": 650000, |
|
||||
"PlanPayDate": 20241220, |
|
||||
"BillNo": "M24020076", |
|
||||
"RowCode": 2, |
|
||||
"RowNo": 2, |
|
||||
"UnWriteOffOAmount": 650000 |
|
||||
}, |
|
||||
{ |
|
||||
"PayStage": "試車完工", |
|
||||
"PlanPercentage": 0.2, |
|
||||
"PlanPayAmt": 260000, |
|
||||
"PlanPayDate": 20250120, |
|
||||
"BillNo": "M24020076", |
|
||||
"RowCode": 3, |
|
||||
"RowNo": 3, |
|
||||
"UnWriteOffOAmount": 260000 |
|
||||
}, |
|
||||
{ |
|
||||
"PayStage": "交車", |
|
||||
"PlanPercentage": 0.1, |
|
||||
"PlanPayAmt": 130000, |
|
||||
"PlanPayDate": 20250220, |
|
||||
"BillNo": "M24020076", |
|
||||
"RowCode": 4, |
|
||||
"RowNo": 4, |
|
||||
"UnWriteOffOAmount": 130000 |
|
||||
} |
|
||||
] |
|
||||
} |
} |
||||
] |
] |
Loading…
Reference in new issue