fix BD Commissions

master
yuan 6 years ago
parent ac40e858da
commit c86e760dc8

@ -611,4 +611,8 @@ CREATE TABLE `pre_apply_handle_log` (
ALTER TABLE `sys_client_pre_apply`
ADD COLUMN `status` tinyint(2) NULL DEFAULT 0 COMMENT '0:未处理1处理中2处理完成';
alter table sys_clients add column hfindustry varchar(10) DEFAULT NULL COMMENT 'HF行业';
alter table sys_clients add column hfindustry varchar(10) DEFAULT NULL COMMENT 'HF行业';
alter table financial_bd_prize_rate_config add column `kpi_range` smallint(6) NOT NULL;
alter table financial_bd_config add column `kpi_amount` decimal(15,2) NOT NULL;
alter table financial_bd_prize_log add column `kpi_amount` decimal(15,2) DEFAULT NULL;

@ -9,7 +9,8 @@
c.bd_level,
c.city,
c.get_prize,
c.bd_group
c.bd_group,
c.kpi_amount
FROM sys_managers m
LEFT JOIN financial_bd_config c ON c.manager_id = m.manager_id
WHERE m.role & 4 > 0 AND m.is_valid = 1 AND (m.org_id = 1 OR m.org_id IS NULL)

@ -42,6 +42,8 @@ define(['angular', '../../analysis/bd/analysis-bd'], function (angular) {
app.controller('bdPrizeRootCtrl', ['$scope', '$http', '$uibModal', 'commonDialog', function ($scope, $http, $uibModal, commonDialog) {
$scope.params = {year: new Date().getFullYear()};
$scope.availableYears = [new Date().getFullYear() - 1, new Date().getFullYear()];
$scope.kpiRanges = [{value: 1, label: '0-0.5'}, {value: 2, label: '0.5-0.8'}, {value: 3, label: '0.8-1'},
{value: 4, label: '1-1.2'}, {value: 5, label: '>=1.2'}];
$scope.initMonth = function (year) {
$scope.params.year = year;
$scope.months = [];
@ -87,12 +89,12 @@ define(['angular', '../../analysis/bd/analysis-bd'], function (angular) {
$scope.loadRateConfigs = function () {
$http.get('/sys/bd_prize/config/rates').then(function (resp) {
$scope.bd_rate_configs = resp.data;
$scope.bd_rate_ranges = [];
var rangeStart = [];
$scope.kpi_ranges = [];
var kpiStart = [];
angular.forEach($scope.bd_rate_configs, function (cfg) {
if (rangeStart.indexOf(cfg.rate_from) < 0) {
rangeStart.push(cfg.rate_from);
$scope.bd_rate_ranges.push(cfg);
if (kpiStart.indexOf(cfg.kpi_range) < 0) {
kpiStart.push(cfg.kpi_range);
$scope.kpi_ranges.push(cfg);
}
})
})
@ -137,9 +139,10 @@ define(['angular', '../../analysis/bd/analysis-bd'], function (angular) {
value: 3,
label: '>=7 Months'
}];
$scope.kpiRanges = [{value: 1, label: '<50%'}, {value: 2, label: '50%<=kpi<80%'}, {value: 3, label: '80%<=kpi<100%'},
{value: 4, label: '100%<=kpi<120%'}, {value: 5, label: '>=120%'}];
$scope.filter = {bd_level: 1, months: 1,kpi_range:1};
$scope.kpiRanges = [{value: 1, label: '0-0.5'}, {value: 2, label: '0.5-0.8'}, {value: 3, label: '0.8-1'},
{value: 4, label: '1-1.2'}, {value: 5, label: '>=1.2'}];
$scope.clientRate = [{value: 0.6, label: '0.6-0.79'}, {value: 0.8, label: '0.8-2.0'}];
$scope.filter = {bd_level: 1,rate_from:0.6};
$scope.rates = rates;
$scope.submitRates = function () {
var validation = null;
@ -194,7 +197,7 @@ define(['angular', '../../analysis/bd/analysis-bd'], function (angular) {
app.controller('bdCommissionConfigCtrl', ['$scope', '$state', '$http', '$filter', 'monModal', function ($scope, $state, $http, $filter, monModal) {
$scope.monModal = monModal;
$scope.params = {year: new Date().getFullYear()};
$scope.bdtypes = [{id: 1, label: 'Director'}, {id: 2, label: 'Manager'}, {id: 3, label: 'Sydney GM'},{id: 4, label: 'COO'},{id: 5, label: 'NJ Department'}];
$scope.bdtypes = [{id: 1, label: 'BD Manager'}, {id: 2, label: 'KA Manager'}, {id: 3, label: 'Sydney GM'},{id: 4, label: 'COO'},{id: 5, label: 'NJ Department'}];
// $scope.bdmon;
// $scope.newSwitch;
$scope.initMonth = function (year) {
@ -218,6 +221,28 @@ define(['angular', '../../analysis/bd/analysis-bd'], function (angular) {
})
};
$scope.getBDLevels();
$scope.chooseLastConfig = function (mon) {
var index = $scope.months.indexOf(mon);
if(index == 0){
var year = new Date().getFullYear();
year--;
mon = year + '-12';
}else {
mon = $scope.months[index-1];
}
$http.get('/sys/bd_prize/commission/le_ma/' + mon).then(function (resp) {
$scope.bdlm = [];
angular.forEach(resp.data,function (e) {
var bdC = {};
bdC.commission_start_amount = e.commission_start_amount;
bdC.commission_end_amount = e.commission_end_amount;
bdC.bd_commission_rate = e.bd_commission_rate;
bdC.bd_type = e.bd_type;
$scope.bdlm.push(bdC);
});
$scope.listConfig = true;
})
};
$scope.listCurrentMonBDCommission = function (mon) {
$http.get('/sys/bd_prize/commission/le_ma/' + mon).then(function (resp) {
$scope.bdlm = resp.data;
@ -277,12 +302,14 @@ define(['angular', '../../analysis/bd/analysis-bd'], function (angular) {
}
$scope.submitBdCommmissionConfig = function (mon, bds) {
$scope.check = true;
$scope.errmsg = null;
angular.forEach(bds, function (data, index) {
$scope.errmsg = null;
if (!data.kpi_amount) {
$scope.errmsg = "BD kpi Amount not be null";
$scope.check = false;
return;
if(data.get_prize){
if (!data.kpi_amount) {
$scope.errmsg = "BD kpi Amount not be null";
$scope.check = false;
return;
}
}
});
if ($scope.check) {

@ -6,75 +6,142 @@
<button class="btn btn-primary" ng-bind="bdmon" style="margin-bottom: 10px"></button>
<uib-tabset>
<uib-tab heading="Leader">
<div class="table-responsive margin-top">
<table class="table table-hover">
<thead>
<tr>
<th>Commission Amount</th>
<th>Commission Rate</th>
<th>BD Type</th>
<th>
<span class="fa fa-plus" style="color: #0bb20c" ng-click="bdlm.push({})"></span>
</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="bd in bdlm">
<td class="col-sm-5">
<div class="input-group">
<input class="form-control" id="re-from-input" type="number"
ng-model="bd.commission_start_amount"
placeholder="Start Amount">
<span class="input-group-addon">~</span>
<input class="form-control" id="re-to-input" type="number"
ng-model="bd.commission_end_amount"
placeholder="End Amount">
</div>
</td>
<td class="col-sm-3">
<div class="input-group">
<input placeholder="rate" class="form-control" type="number" step="0.01"
ng-model="bd.bd_commission_rate">
<span class="input-group-addon">%</span>
</div>
</td>
<td>
<select class="form-control" ng-model="bd.bd_type" ng-options="bdtype.id as bdtype.label for bdtype in bdtypes"></select>
</td>
<td>
<span class="fa fa-close" style="color: #b92c28" ng-click="deleteCommission(bd.bc_config_id)"></span>
</td>
</tr>
</tbody>
</table>
<div class="alert alert-danger" ng-if="errmsg" ng-bind="errmsg"></div>
<div class="modal-footer" ng-if="listConfig">
<button class="btn btn-success" type="button" ng-click="submitCommmissionConfig(bdmon,bdlm)">Submit</button>
<button class="btn btn-danger" ng-click="$dismiss()">Cancel</button>
<div class="box margin-top" >
<div class="box-body no-padding table-responsive">
<div class="table-responsive margin-top">
<table class="table table-hover">
<thead>
<tr>
<th>Commission Amount</th>
<th>Commission Rate</th>
<th>BD Type</th>
<th>
<button class="btn btn-primary" ng-click="chooseLastConfig(bdmon)" ng-if="bdlm.length<=0">启用上月设置</button>
<span class="fa fa-plus" style="color: #0bb20c" ng-click="bdlm.push({})"></span>
</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="bd in bdlm">
<td class="col-sm-5">
<div class="input-group">
<input class="form-control" id="re-from-input" type="number"
ng-model="bd.commission_start_amount"
placeholder="Start Amount">
<span class="input-group-addon">~</span>
<input class="form-control" id="re-to-input" type="number"
ng-model="bd.commission_end_amount"
placeholder="End Amount">
</div>
</td>
<td class="col-sm-3">
<div class="input-group">
<input placeholder="rate" class="form-control" type="number" step="0.01"
ng-model="bd.bd_commission_rate">
<span class="input-group-addon">%</span>
</div>
</td>
<td>
<select class="form-control" ng-model="bd.bd_type" ng-options="bdtype.id as bdtype.label for bdtype in bdtypes"></select>
</td>
<td>
<span class="fa fa-close" style="color: #b92c28" ng-click="deleteCommission(bd.bc_config_id)"></span>
</td>
</tr>
</tbody>
</table>
<div class="alert alert-danger" ng-if="errmsg" ng-bind="errmsg"></div>
<div class="modal-footer" ng-if="listConfig">
<button class="btn btn-success" type="button" ng-click="submitCommmissionConfig(bdmon,bdlm)">Submit</button>
<button class="btn btn-danger" ng-click="$dismiss()">Cancel</button>
</div>
</div>
</div>
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">跨境事业部总监提成制度</h3>
</div>
<div class="box-body">
<ul>
<li>享受墨尔本和悉尼两地部门流水总和提成</li>
<li>完成当月指标低于 51%,提成按照 0.005%提取</li>
<li>完成当月指标高于 80%,提成按照 0.008%提取</li>
<li>完成当月指标 100%,提成按照 0.01%</li>
<li>连续六个月未完成指标,撤职处理或回归原有职位</li>
<li>销售总监任职后需将自己手头客户按照公司规定公平分配给客户专员,本人可挂靠 50%,每个商户享受 50%的流水提成</li>
</ul>
</div>
<div class="box-header with-border">
<h3 class="box-title">大客户部门 Manager 提成考核指标</h3>
</div>
<div class="box-body">
<ul>
<li>完成月度指标,当月部门提成为该部门总流水的 0.01%</li>
<li>未完成月度指标,当月部门提成为该部门总流水的 0.005%</li>
</ul>
</div>
<div class="box-header with-border">
<h3 class="box-title">悉尼分公司总经理</h3>
</div>
<div class="box-body">
<ul>
<li>完成月度指标,当月提成为该分公司总流水的 0.005%</li>
<li>未完成月度指标,当月提成为该分公司总流水的 0.0025%</li>
</ul>
</div>
<div class="box-header with-border">
<h3 class="box-title">南京分公司技术部提成</h3>
</div>
<div class="box-body">
<ul>
<li>完成月度指标,当月提成为公司总流水的 0.01%</li>
<li>未完成月度指标,当月提成为公司总流水的 0.005%</li>
<li>【发放原则:季度一发放;分配原则由总经理 Leo Huang 制定。】</li>
</ul>
</div>
<div class="box-header with-border">
<h3 class="box-title">COO考核及提成政策</h3>
</div>
<div class="box-body">
<ul>
<li>需完成董事会下达的指标任务</li>
<li>按照公司总流水进行提取(包含合伙人)</li>
<li>每月商户数量递增不得少于 100 家</li>
<li>需带领团队按时保质完成每月 KPI 任务</li>
<li>需带领团队配合公司的每一个活动执行;</li>
<li>及时做好培训、后台管理</li>
<li>完成 KPI 按照 0.03%提取;未完成 KPI 按照 0.02%提取</li>
</ul>
</div>
</div>
</div>
</uib-tab>
<uib-tab heading="BD">
<table class="table table-hover" style="text-align: center">
<thead>
<tr>
<th style="text-align: center;">BD Name</th>
<th style="text-align: center;">KPI Amount</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="bd in bds">
<td ng-bind="bd.display_name"></td>
<td>
<input ng-model="bd.kpi_amount">
</td>
</tr>
</tbody>
</table>
<div class="alert alert-danger" ng-if="errmsg" ng-bind="errmsg"></div>
<div class="modal-footer">
<button class="btn btn-success" type="button" ng-click="submitBdCommmissionConfig(bdmon,bds)">Submit</button>
<button class="btn btn-danger" ng-click="$dismiss()">Cancel</button>
<div class="box margin-top">
<div class="box-body no-padding table-responsive">
<table class="table table-hover" style="text-align: center">
<thead>
<tr>
<th style="text-align: center;">BD Name</th>
<th style="text-align: center;">KPI Amount</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="bd in bds|filter:{get_prize:true}">
<td ng-bind="bd.display_name"></td>
<td>
<input type="number" ng-model="bd.kpi_amount" min="0">
</td>
</tr>
</tbody>
</table>
<div class="alert alert-danger" ng-if="errmsg" ng-bind="errmsg"></div>
<div class="modal-footer">
<button class="btn btn-success" type="button" ng-click="submitBdCommmissionConfig(bdmon,bds)">Submit</button>
<button class="btn btn-danger" ng-click="$dismiss()">Cancel</button>
</div>
</div>
</div>
</uib-tab>
</uib-tabset>

@ -41,9 +41,9 @@
<img uib-tooltip="Wechat" src="/static/images/wechatpay_sign_lg.png">
</div>
<div class="info-box-content">
<h5>BD Taotal Commission: ${{report.WechatReport.total_prize}}</h5>
<h5>BD Taotal Send: ${{report.WechatReport.total_send_prize}}</h5>
<h5>BD Taotal Fund: ${{report.WechatReport.total_donation}}</h5>
<h5>BD Total Commission: ${{report.WechatReport.total_prize}}</h5>
<h5>BD Total Send: ${{report.WechatReport.total_send_prize}}</h5>
<h5>BD Total Fund: ${{report.WechatReport.total_donation}}</h5>
</div>
</div>
</div>
@ -54,7 +54,7 @@
</div>
<div class="info-box-content">
<h5>BD Total Commission: ${{report.AlipayReport.total_prize}}</h5>
<h5>BD Taotal Send: ${{report.AlipayReport.total_send_prize}}</h5>
<h5>BD Total Send: ${{report.AlipayReport.total_send_prize}}</h5>
<h5>BD Total Fund: ${{report.AlipayReport.total_donation}}</h5>
</div>
</div>
@ -65,9 +65,9 @@
<img uib-tooltip="Bestpay" src="/static/images/bestpay_sign_lg.png">
</div>
<div class="info-box-content">
<h5>BD Taotal Commission: ${{report.BestpayReport.total_prize}}</h5>
<h5>BD Taotal Send: ${{report.BestpayReport.total_send_prize}}</h5>
<h5>BD Taotal Fund: ${{report.BestpayReport.total_donation}}</h5>
<h5>BD Total Commission: ${{report.BestpayReport.total_prize}}</h5>
<h5>BD Total Send: ${{report.BestpayReport.total_send_prize}}</h5>
<h5>BD Total Fund: ${{report.BestpayReport.total_donation}}</h5>
</div>
</div>
</div>
@ -94,7 +94,7 @@
<td>{{log.kpi_amount}}</td>
<td ng-if="log.is_valid==0"><s>{{log.bd_name}}</s><span style="color: red"> (Left Company)</span></td>
<td ng-bind="log.bd_level|financialBdLevel"></td>
<td>{{log.total_amount|currency:'AUD '}} (({{log.total_amount}}/{{log.kpi_amount}})|percentage)</td>
<td>{{log.total_amount|currency:'AUD '}}</td>
<td ng-bind="log.total_prize|currency:'AUD '"></td>
<td ng-bind="log.send_prize|currency:'AUD '"></td>
<td>
@ -112,7 +112,7 @@
</div>
</div>
<div class="box box-default">
<div class="box-header">BD Manager Commission</div>
<div class="box-header">Manager Commission</div>
<div class="box-body table-responsive">
<table class="table table-bordered table-hover table-striped">
<thead>
@ -154,7 +154,7 @@
</div>
</div>-->
<div class="box box-success">
<div class="box-header">Director Commission</div>
<div class="box-header">COO Commission</div>
<div class="box-body">
<div class="row">
<div class="col-xs-6 col-sm-6">
@ -166,6 +166,32 @@
</div>
</div>
</div>
<div class="box box-success">
<div class="box-header">Sydney GM Commission</div>
<div class="box-body">
<div class="row">
<div class="col-xs-6 col-sm-6">
Transaction Amount: <span ng-bind="report.sydneyPrizeLog.total_amount|currency:'AUD '"></span>
</div>
<div class="col-xs-6 col-sm-6">
Total Commission: <span ng-bind="report.sydneyPrizeLog.total_prize|currency:'AUD '"></span>
</div>
</div>
</div>
</div>
<div class="box box-success">
<div class="box-header">NJ Department Commission</div>
<div class="box-body">
<div class="row">
<div class="col-xs-6 col-sm-6">
Transaction Amount: <span ng-bind="report.ngDepartmentPrizeLog.total_amount|currency:'AUD '"></span>
</div>
<div class="col-xs-6 col-sm-6">
Total Commission: <span ng-bind="report.ngDepartmentPrizeLog.total_prize|currency:'AUD '"></span>
</div>
</div>
</div>
</div>
<!--<div class="box-header">Manager Commission</div>-->
<!--<div class="box-body table-responsive">-->
<!--<table class="table table-bordered table-hover table-striped">-->

@ -59,49 +59,48 @@
<thead>
<tr>
<th>BD Level</th>
<th rowspan="2">费率</th>
<th rowspan="2">费率</th>
<th colspan="3">Junior BD</th>
<th colspan="3">Intermediate BD</th>
<th colspan="3">Senior BD</th>
<th rowspan="2">KPI</th>
<th colspan="2">Junior BD</th>
<th colspan="2">Intermediate BD</th>
<th colspan="2">Senior BD</th>
</tr>
<tr>
<th>商户开通时长</th>
<th>1-3个月</th>
<th>4-6个月</th>
<th>&gt;=7个月</th>
<th>1-3个月</th>
<th>4-6个月</th>
<th>&gt;=7个月</th>
<th>1-3个月</th>
<th>4-6个月</th>
<th>&gt;=7个月</th>
<th>费率</th>
<th>0.6-0.79</th>
<th>0.8-2.0</th>
<th>0.6-0.79</th>
<th>0.8-2.0</th>
<th>0.6-0.79</th>
<th>0.8-2.0</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="range in bd_rate_ranges">
<tr ng-repeat="range in kpi_ranges">
<td ng-bind="'#'+($index+1)"></td>
<td ng-bind="range.rate_from"></td>
<td ng-bind="range.rate_to"></td>
<td ng-bind="(kpiRanges|filter:{value:range.kpi_range})[0].label"></td>
<td ng-repeat-start="level in [1,2,3] track by $index"
ng-bind="(bd_rate_configs|filter:{rate_from:range.rate_from,bd_level:level,time_range:1})[0].prize_rate+'%'"></td>
<td ng-bind="(bd_rate_configs|filter:{rate_from:range.rate_from,bd_level:level,time_range:2})[0].prize_rate+'%'"></td>
ng-bind="(bd_rate_configs|filter:{kpi_range:range.kpi_range,bd_level:level,rate_from:0.6})[0].prize_rate+'%'"></td>
<td ng-repeat-end
ng-bind="(bd_rate_configs|filter:{rate_from:range.rate_from,bd_level:level,time_range:3})[0].prize_rate+'%'"></td>
ng-bind="(bd_rate_configs|filter:{kpi_range:range.kpi_range,bd_level:level,rate_from:0.8})[0].prize_rate+'%'"></td>
</tr>
</tbody>
</table>
</div>
<h4>补充说明</h4>
<ul>
<li>商户费率变更,提成比随之变更</li>
<li>商户开通时长从商户开通时间起算</li>
<li>后台系统自主申请商户提成按照前三个月0.05%后期0.01%发放自主申请商户在详情列表中的Client Source标注为Apply</li>
<li>调岗人员移交的商户移交后6个月内移交人员和接收人员平分提成应在商户BD配置里进行设置分配比例请关注详情列表中的Coefficient正常情况下应当为1</li>
<li>离职人员移交的商户接收人员享受一半提成另一半作为BD福利基金离职转交商户在详情列表中用红色标注</li>
<li>BD提成按月发放</li>
<li>每月发放总额的80%剩余20%于每年年底即12月25日圣诞节前发放</li>
<li>按月度发放</li>
<li>每月发放总提成额度的 80%,剩余 20%按照“年度考评分数比例”于每年年底即 12 月 25 日圣诞前发放</li>
<li>提前离职者20%提成不予发放</li>
<li>年度考评(根据销管中心每月考评表打分制进行统计)按照考评分数对应比例发放 20%的占比部分,扣下部分如果第二年考评超出一定评分 110%可以补发;同样,如果年度考评分数超过 100 分按照同比例发放</li>
<li>商户开通后连续 1 个月未产生流水的,上交主管,由主管重新分配</li>
<li>连续 2 个月不产生流水的商户,由销管部统一收回,重新分配</li>
<li>分配后的商户流水客户专员只能占一半</li>
<li>离职及调岗人员商户统一上交销管中心,由销管中心 leader 及跨境事业部总监相互协商及相互监督,按照公平公正的原则, 做出分配方案,并由总监确认后统一分配。调岗人员移交的商户,在移交后 1 个月内移交人员和接收人员平分该商家产生的提成,移交人员需配合接收人员做好商户对接和短期内的商户维护;
离职人员交接的商户提成,接收人员享受一半的提成,另一半作为跨境客服专员福利会基金</li>
<li>被客户投诉情况严重者,此商户由销管中心无条件收回重新分配</li>
<li>活动执行未传达到位且出现舞弊、徇私、懒惰等行为的,商户上交由销管中心统一分配</li>
<li>后期维护不及时,连续一个月不跟踪者,此商户上交销管中心,统一重新分配</li>
<li>以上分配,销管中心 leader 和跨境支付事业部商量好之后需做好方案后经 COO 审批方可执行</li>
</ul>
</div>
</div>

@ -9,29 +9,29 @@
<select ng-model="filter.bd_level" class="form-control" ng-options="lv.value as lv.label for lv in bdLevels"
id="levelFilter"></select>
</div>
<div class="form-group">
<!-- <div class="form-group">
<label class="control-label" for="monthFilter">Months</label>
<select ng-model="filter.months" class="form-control" ng-options="mon.value as mon.label for mon in months"
id="monthFilter"></select>
</div>
</div>-->
<div class="form-group">
<label class="control-label" for="monthFilter">KPI Range</label>
<select ng-model="filter.kpi_range" class="form-control" ng-options="ran.value as ran.label for ran in kpiRanges"
id="kpiFilter"></select>
<label class="control-label" for="rateFilter">Client Rate</label>
<select ng-model="filter.rate_from" class="form-control" ng-options="rate.value as rate.label for rate in clientRate"
id="rateFilter"></select>
</div>
</div>
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Client Rate</th>
<th>KPI</th>
<th>BD Rate</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="rate in rates|filter:{bd_level:filter.bd_level,time_range:filter.months,kpi_range:filter.kpi_range}">
<td>{{rate.rate_from}}-{{rate.rate_to}}</td>
<tr ng-repeat="rate in rates|filter:{bd_level:filter.bd_level,rate_from:filter.rate_from}">
<td ng-bind="(kpiRanges|filter:{value:rate.kpi_range})[0].label"></td>
<td>
<div class="input-group">
<input placeholder="bd rate" class="form-control" type="number" step="0.01" ng-model="rate.prize_rate">

Loading…
Cancel
Save