Merge remote-tracking branch 'origin/develop' into develop

master
yixian 4 years ago
commit 7ea9605207

@ -9,7 +9,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>manage</artifactId>
<version>2.3.76-SNAPSHOT</version>
<version>2.3.77-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jib-maven-plugin.version>2.4.0</jib-maven-plugin.version>

@ -2,57 +2,63 @@
* Created by yixian on 2017-05-03.
*/
define(['angular', 'decimal', 'uiRouter', './report/analysis-report'], function (angular, Decimal) {
'use strict';
var app = angular.module('settleReportApp', ['ui.router']);
app.config(['$stateProvider', function ($stateProvider) {
'use strict'
var app = angular.module('settleReportApp', ['ui.router'])
app.config([
'$stateProvider',
function ($stateProvider) {
$stateProvider.state('analysis_report.settle_report', {
url: '/settle_report',
templateUrl: '/static/analysis/templates/settle_report.html',
controller: 'settleFinancialReportCtrl'
controller: 'settleFinancialReportCtrl',
})
}]);
app.controller('settleFinancialReportCtrl', ['$scope', '$http', '$filter', function ($scope, $http, $filter) {
$scope.params = {year: new Date().getFullYear()};
$scope.availableYears = [new Date().getFullYear() - 1, new Date().getFullYear()];
$scope.initMonth = function (year) {
$scope.params.year = year;
$scope.months = [];
},
])
app.controller('settleFinancialReportCtrl', [
'$scope',
'$http',
'$filter',
function ($scope, $http, $filter) {
$scope.params = { year: new Date() }
$scope.initMonth = function () {
const year = $scope.params.year.getFullYear()
$scope.months = []
for (var i = 1; i < 13; i++) {
var mon = '00' + i;
mon = mon.substr(mon.length - 2, 2);
$scope.months.push(year + '-' + mon);
var mon = '00' + i
mon = mon.substr(mon.length - 2, 2)
$scope.months.push(year + '-' + mon)
}
};
$scope.initMonth(new Date().getFullYear());
}
$scope.initMonth()
$scope.hasReport = function (mon) {
var start = '2017-02';//todo modify in different country
var end = $filter('date')(new Date(), 'yyyy-MM');
return start <= mon && end >= mon
};
var end = $filter('date')(new Date(), 'yyyy-MM')
return end >= mon
}
$scope.loadReport = function (mon) {
var monItems = mon.split('-');
var year = monItems[0];
var month = monItems[1];
var monStr = year + month;
var monItems = mon.split('-')
var year = monItems[0]
var month = monItems[1]
var monStr = year + month
$http.get('/sys/financial/settlement/month_reports/' + monStr).then(function (resp) {
$scope.report = {
month: monStr,
settlements: resp.data
};
settlements: resp.data,
}
$scope.analysis = {
gross_amount: 0,
wechat_settlement: 0,
net_amount: 0,
royalpay_charge: 0
};
royalpay_charge: 0,
}
angular.forEach($scope.report.settlements, function (settle) {
$scope.analysis.gross_amount = Decimal.add(settle.gross_amount, $scope.analysis.gross_amount).toFixed(2);
$scope.analysis.wechat_settlement = Decimal.add(settle.wechat_settlement, $scope.analysis.wechat_settlement).toFixed(2);
$scope.analysis.net_amount = Decimal.add(settle.net_amount, $scope.analysis.net_amount).toFixed(2);
$scope.analysis.royalpay_charge = Decimal.add(settle.royalpay_charge, $scope.analysis.royalpay_charge).toFixed(2);
});
$scope.analysis.gross_amount = Decimal.add(settle.gross_amount, $scope.analysis.gross_amount).toFixed(2)
$scope.analysis.wechat_settlement = Decimal.add(settle.wechat_settlement, $scope.analysis.wechat_settlement).toFixed(2)
$scope.analysis.net_amount = Decimal.add(settle.net_amount, $scope.analysis.net_amount).toFixed(2)
$scope.analysis.royalpay_charge = Decimal.add(settle.royalpay_charge, $scope.analysis.royalpay_charge).toFixed(2)
})
})
};
}]);
return app;
});
}
},
])
return app
})

@ -17,13 +17,16 @@
</ul>
</div>-->
<div ng-repeat="year in availableYears" style="display: inline">
<!-- <div ng-repeat="year in availableYears" style="display: inline">
<button class="btn btn-info"
ng-click="initMonth(year)"
ng-bind="year"
ng-class="{'active':year == params.year}"
></button>
</div>
</div> -->
<button class="btn btn-info" ng-bind="params.year.getFullYear()" ng-click="ctrl.viewyear=true"></button>
<input type="text" class="hidden" uib-datepicker-popup="yyyy" ng-model="params.year" is-open="ctrl.viewyear"
datepicker-options="{minMode: 'year'}" ng-change="initMonth()" placeholder="Select Year">
</div>
<div class="box-body">
<div class="row">
@ -40,7 +43,8 @@
<div class="box-header">
<span ng-bind="report.month"></span>
<span ng-bind="report.analysis.gross_amount"></span>
<a role="button" class="btn btn-primary pull-right" ng-href="/sys/financial/settlement/month_reports/{{report.month}}/xls">
<a role="button" class="btn btn-primary pull-right"
ng-href="/sys/financial/settlement/month_reports/{{report.month}}/xls">
<i class="fa fa-file-excel-o"></i> Export Excel
</a>
</div>

@ -2,326 +2,419 @@
* Created by yixian on 2017-02-08.
*/
define(['angular', '../../analysis/bd/analysis-bd'], function (angular) {
'use strict';
var app = angular.module('bdprize', ['ui.router']);
app.config(['$stateProvider', function ($stateProvider) {
$stateProvider.state('analysis_bd.bd_prizes', {
'use strict'
var app = angular.module('bdprize', ['ui.router'])
app.config([
'$stateProvider',
function ($stateProvider) {
$stateProvider
.state('analysis_bd.bd_prizes', {
url: '/bd_prizes',
templateUrl: '/static/config/bdprize/templates/bd_prize_root.html',
controller: 'bdPrizeRootCtrl'
}).state('analysis_bd.bd_prizes.month_report', {
controller: 'bdPrizeRootCtrl',
})
.state('analysis_bd.bd_prizes.month_report', {
url: '/{month}',
templateUrl: '/static/config/bdprize/templates/bd_prize_month_report.html',
controller: 'bdPrizeMonthReportCtrl',
resolve: {
report: ['$http', '$stateParams', function ($http, $stateParams) {
return $http.get('/sys/bd_prize/records/' + $stateParams.month);
}]
}
}).state('analysis_bd.bd_prizes.month_report.detail', {
report: [
'$http',
'$stateParams',
function ($http, $stateParams) {
return $http.get('/sys/bd_prize/records/' + $stateParams.month)
},
],
},
})
.state('analysis_bd.bd_prizes.month_report.detail', {
url: '/bd_user/{bdId}',
templateUrl: '/static/config/bdprize/templates/bd_prize_detail.html',
controller: 'bdPrizeDetailCtrl',
resolve: {
detail: ['$http', '$stateParams', function ($http, $stateParams) {
return $http.get('/sys/bd_prize/records/' + $stateParams.month + '/bd_users/' + $stateParams.bdId);
}]
}
}).state('analysis_bd.bd_prizes.bd_detail', {
detail: [
'$http',
'$stateParams',
function ($http, $stateParams) {
return $http.get('/sys/bd_prize/records/' + $stateParams.month + '/bd_users/' + $stateParams.bdId)
},
],
},
})
.state('analysis_bd.bd_prizes.bd_detail', {
url: '/{month}/my_report',
templateUrl: '/static/config/bdprize/templates/bd_prize_detail.html',
controller: 'bdPrizeDetailCtrl',
resolve: {
detail: ['$http', '$stateParams', function ($http, $stateParams) {
detail: [
'$http',
'$stateParams',
function ($http, $stateParams) {
return $http.get('/sys/bd_prize/records/' + $stateParams.month + '/bd_user_detail')
}]
}
},
],
},
})
}]);
},
])
app.controller('bdPrizeRootCtrl', ['$scope', '$http', '$uibModal', 'commonDialog','$filter', function ($scope, $http, $uibModal, commonDialog,$filter) {
$scope.params = {year: new Date().getFullYear()};
$scope.generate = {};
$scope.availableYears = [new Date().getFullYear() - 1, new Date().getFullYear()];
$scope.kpiRanges = [{value: 1, label: '0-50%'}, {value: 2, label: '50%~80%'}, {value: 3, label: '80%~100%'},
{value: 4, label: '100%-120%'}, {value: 5, label: '>=120%'}];
$scope.initMonth = function (year) {
$scope.params.year = year;
$scope.months = [];
app.controller('bdPrizeRootCtrl', [
'$scope',
'$http',
'$uibModal',
'commonDialog',
'$filter',
function ($scope, $http, $uibModal, commonDialog, $filter) {
$scope.params = { year: new Date() }
$scope.generate = {}
$scope.kpiRanges = [
{ value: 1, label: '0-50%' },
{ value: 2, label: '50%~80%' },
{ value: 3, label: '80%~100%' },
{ value: 4, label: '100%-120%' },
{ value: 5, label: '>=120%' },
]
$scope.initMonth = function () {
const year = $scope.params.year.getFullYear()
$scope.months = []
for (var i = 1; i < 13; i++) {
var mon = '00' + i;
mon = mon.substr(mon.length - 2, 2);
$scope.months.push(year + '-' + mon);
var mon = '00' + i
mon = mon.substr(mon.length - 2, 2)
$scope.months.push(year + '-' + mon)
}
}
};
$scope.hasReport = function (mon) {
if ($scope.reportMonths != null) {
var have = false;
var have = false
angular.forEach($scope.reportMonths, function (month) {
if (mon == month.month) {
have = true;
have = true
}
});
return have;
})
return have
} else {
return false;
return false
}
};
$scope.getYearReports = function (year) {
$scope.initMonth(year);
$http.get('/sys/bd_prize/records', {params: {year: year}}).then(function (resp) {
$scope.reportMonths = resp.data.data;
}
$scope.getYearReports = function () {
const year = $scope.params.year.getFullYear()
$scope.initMonth()
$http.get('/sys/bd_prize/records', { params: { year: year } }).then(function (resp) {
$scope.reportMonths = resp.data.data
})
};
$scope.getYearReports(new Date().getFullYear());
}
$scope.getYearReports()
$scope.generateReport = function () {
if (!$scope.generate.month) {
commonDialog.alert({
type: 'error', title: 'Error', content: 'Select a month first!'
});
return;
type: 'error',
title: 'Error',
content: 'Select a month first!',
})
return
}
commonDialog.confirm({
commonDialog
.confirm({
title: 'Warning',
content: 'This operation will clear the result of last month generated before. Are you sure?'
}).then(function () {
$scope.generate.status = {};
var params = {month: $filter('date')($scope.generate.month, 'yyyy-MM')};
$http.post('/sys/bd_prize/generate_record/'+params.month, null, {timeout: 60000}).then(function (resp) {
$scope.generate.status = null;
commonDialog.alert({title: 'Success', content: 'Generate Finished', type: 'success'});
$scope.getYearReports($scope.params.year);
}, function (resp) {
commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'});
$scope.generate.status = null;
content: 'This operation will clear the result of last month generated before. Are you sure?',
})
.then(function () {
$scope.generate.status = {}
var params = { month: $filter('date')($scope.generate.month, 'yyyy-MM') }
$http.post('/sys/bd_prize/generate_record/' + params.month, null, { timeout: 60000 }).then(
function (resp) {
$scope.generate.status = null
commonDialog.alert({ title: 'Success', content: 'Generate Finished', type: 'success' })
$scope.getYearReports()
},
function (resp) {
commonDialog.alert({ title: 'Error', content: resp.data.message, type: 'error' })
$scope.generate.status = null
}
)
})
};
}
$scope.loadRateConfigs = function () {
$http.get('/sys/bd_prize/config/rates').then(function (resp) {
$scope.bd_rate_configs = resp.data;
$scope.kpi_ranges = [];
var kpiStart = [];
$scope.bd_rate_configs = resp.data
$scope.kpi_ranges = []
var kpiStart = []
angular.forEach($scope.bd_rate_configs, function (cfg) {
if (kpiStart.indexOf(cfg.kpi_range) < 0) {
kpiStart.push(cfg.kpi_range);
$scope.kpi_ranges.push(cfg);
kpiStart.push(cfg.kpi_range)
$scope.kpi_ranges.push(cfg)
}
})
})
};
$scope.loadRateConfigs();
}
$scope.loadRateConfigs()
$scope.editRateConfig = function () {
$uibModal.open({
backdrop: 'static', keyboard: false,
$uibModal
.open({
backdrop: 'static',
keyboard: false,
templateUrl: '/static/config/bdprize/templates/rate_config_dialog.html',
controller: 'bdRateConfigCtrl',
resolve: {
rates: function () {
return angular.copy($scope.bd_rate_configs);
}
}
}).result.then(function () {
$scope.loadRateConfigs();
return angular.copy($scope.bd_rate_configs)
},
},
})
.result.then(function () {
$scope.loadRateConfigs()
})
};
}
$scope.editBDLevels = function () {
$uibModal.open({
backdrop: 'static', keyboard: false,
backdrop: 'static',
keyboard: false,
templateUrl: '/static/config/bdprize/templates/bd_level_config_dialog.html',
size: 'lg',
controller: 'bdLevelConfigCtrl'
controller: 'bdLevelConfigCtrl',
})
};
}
$scope.editCommissionConfig = function (monModal) {
$uibModal.open({
backdrop: 'static', keyboard: false,
backdrop: 'static',
keyboard: false,
templateUrl: '/static/config/bdprize/templates/bd_commission_config_dialog.html',
controller: 'bdCommissionConfigCtrl',
size: 'lg',
resolve: {
monModal: function () {
return angular.copy(monModal);
}
}
return angular.copy(monModal)
},
},
})
};
}
$scope.exportCommission = function (monModal) {
location.href = '/sys/bd_prize/commission/export/' + monModal;
};
location.href = '/sys/bd_prize/commission/export/' + monModal
}
$scope.loadPersonalCommission = function () {
if (($scope.currentUser.role & parseInt('100', 2)) > 0 && $scope.currentUser.org_id === 1) {
$http.get('/sys/bd_prize/commission/personal/bd_user').then(function (resp) {
$scope.personalCommission = resp.data;
$scope.personalCommission = resp.data
})
}
};
$scope.loadPersonalCommission();
}]);
app.controller('bdRateConfigCtrl', ['$scope', '$http', 'rates', function ($scope, $http, rates) {
$scope.bdLevels = [{value: 1, label: 'Junior'}, {value: 2, label: 'Intermediate'}, {value: 3, label: 'Senior'}];
$scope.months = [{value: 1, label: '1-3 Months'}, {value: 2, label: '4-6 Months'}, {
}
$scope.loadPersonalCommission()
},
])
app.controller('bdRateConfigCtrl', [
'$scope',
'$http',
'rates',
function ($scope, $http, rates) {
$scope.bdLevels = [
{ value: 1, label: 'Junior' },
{ value: 2, label: 'Intermediate' },
{ value: 3, label: 'Senior' },
]
$scope.months = [
{ value: 1, label: '1-3 Months' },
{ value: 2, label: '4-6 Months' },
{
value: 3,
label: '>=7 Months'
}];
$scope.kpiRanges = [{value: 1, label: '0-50%'}, {value: 2, label: '50%~80%'}, {value: 3, label: '80%~100%'},
{value: 4, label: '100%-120%'}, {value: 5, label: '>=120%'}];
$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;
label: '>=7 Months',
},
]
$scope.kpiRanges = [
{ value: 1, label: '0-50%' },
{ value: 2, label: '50%~80%' },
{ value: 3, label: '80%~100%' },
{ value: 4, label: '100%-120%' },
{ value: 5, label: '>=120%' },
]
$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;
$scope.errmsg = null;
var validation = null
$scope.errmsg = null
angular.forEach($scope.rates, function (rate) {
if (isNaN(rate.prize_rate)) {
validation = {months: rate.time_range, bd_level: rate.bd_level};
$scope.errmsg = 'Rate Value is NaN';
validation = { months: rate.time_range, bd_level: rate.bd_level }
$scope.errmsg = 'Rate Value is NaN'
}
if (rate.prize_rate > 1) {
validation = {months: rate.time_range, bd_level: rate.bd_level};
$scope.errmsg = 'Rate value shall no more than 1%';
validation = { months: rate.time_range, bd_level: rate.bd_level }
$scope.errmsg = 'Rate value shall no more than 1%'
}
if (rate.prize_rate < 0) {
validation = {months: rate.time_range, bd_level: rate.bd_level};
$scope.errmsg = 'Rate value shall be a positive value';
validation = { months: rate.time_range, bd_level: rate.bd_level }
$scope.errmsg = 'Rate value shall be a positive value'
}
});
if (!validation) {
$http.put('/sys/bd_prize/config/rates', $scope.rates).then(function () {
$scope.$close();
}, function (resp) {
$scope.errmsg = resp.data.message;
})
}
}
}]);
app.controller('bdLevelConfigCtrl', ['$scope', '$http', function ($scope, $http) {
$scope.bdtypes = [{id: 1, label: 'BD Manager(Sydney)'}, {id: 2, label: 'KA Manager(Sydney)'},{id: 6, label: 'BD Manager(Melbourne)'}, {id: 7, label: 'KA Manager(Melbourne)'}];
if (!validation) {
$http.put('/sys/bd_prize/config/rates', $scope.rates).then(
function () {
$scope.$close()
},
function (resp) {
$scope.errmsg = resp.data.message
}
)
}
}
},
])
app.controller('bdLevelConfigCtrl', [
'$scope',
'$http',
function ($scope, $http) {
$scope.bdtypes = [
{ id: 1, label: 'BD Manager(Sydney)' },
{ id: 2, label: 'KA Manager(Sydney)' },
{ id: 6, label: 'BD Manager(Melbourne)' },
{ id: 7, label: 'KA Manager(Melbourne)' },
]
$scope.getBDGroups = function () {
$http.get('/sys/manager_accounts/roles/bd_leader').then(function (resp) {
$scope.bdgroups = resp.data;
$scope.getBDLevels();
$scope.bdgroups = resp.data
$scope.getBDLevels()
})
};
$scope.getBDGroups();
}
$scope.getBDGroups()
$scope.getBDLevels = function () {
$http.get('/sys/bd_prize/config/bd_levels').then(function (resp) {
$scope.bds = resp.data;
$scope.bds = resp.data
})
};
}
$scope.bdLevels = [{value: 1, label: 'Junior'}, {value: 2, label: 'Intermediate'}, {value: 3, label: 'Senior'}];
$scope.bdLevels = [
{ value: 1, label: 'Junior' },
{ value: 2, label: 'Intermediate' },
{ value: 3, label: 'Senior' },
]
$scope.updateBDLevel = function (bdInfo) {
$http.put('/sys/bd_prize/config/bd_levels/' + bdInfo.manager_id, bdInfo).then(function () {
$scope.getBDGroups();
}, function (resp) {
$scope.errmsg = resp.data.message;
})
};
}]);
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: 'BD Manager(Sydney)'}, {id: 2, label: 'KA Manager(Sydney)'}, {id: 6, label: 'BD Manager(Melbourne)'}, {id: 7, label: 'KA Manager(Melbourne)'}];//, {id: 3, label: 'Sydney GM'},{id: 4, label: 'COO'},{id: 5, label: 'NJ Department'}];
$http.put('/sys/bd_prize/config/bd_levels/' + bdInfo.manager_id, bdInfo).then(
function () {
$scope.getBDGroups()
},
function (resp) {
$scope.errmsg = resp.data.message
}
)
}
},
])
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: 'BD Manager(Sydney)' },
{ id: 2, label: 'KA Manager(Sydney)' },
{ id: 6, label: 'BD Manager(Melbourne)' },
{ id: 7, label: 'KA Manager(Melbourne)' },
] //, {id: 3, label: 'Sydney GM'},{id: 4, label: 'COO'},{id: 5, label: 'NJ Department'}];
// $scope.bdmon;
// $scope.newSwitch;
$scope.initMonth = function (year) {
$scope.params.year = year;
$scope.months = [];
$scope.params.year = year
$scope.months = []
for (var i = 1; i < 13; i++) {
var mon = '00' + i;
mon = mon.substr(mon.length - 2, 2);
$scope.months.push(year + '-' + mon);
var mon = '00' + i
mon = mon.substr(mon.length - 2, 2)
$scope.months.push(year + '-' + mon)
}
}
};
$scope.initMonth(new Date().getFullYear());
$scope.initMonth(new Date().getFullYear())
$scope.hasReport = function (mon) {
var start = '2017-01';//todo change for different country
var end = $filter('date')(new Date(), 'yyyy-MM');
var start = '2017-01' //todo change for different country
var end = $filter('date')(new Date(), 'yyyy-MM')
return start <= mon && end >= mon
};
}
$scope.getBDLevels = function () {
$http.get('/sys/bd_prize/config/bd_levels').then(function (resp) {
$scope.bds = resp.data;
$scope.bds = resp.data
})
};
$scope.getBDLevels();
}
$scope.getBDLevels()
$scope.chooseLastConfig = function (mon) {
let year = new Date(mon).getFullYear();
let month = new Date(mon).getMonth();
if(month == 0){
year--;
month = year + '-12';
}else if(month <= 9){
month = year + '-0' + month;
}else {
month = year + '-' + month;
let year = new Date(mon).getFullYear()
let month = new Date(mon).getMonth()
if (month == 0) {
year--
month = year + '-12'
} else if (month <= 9) {
month = year + '-0' + month
} else {
month = year + '-' + month
}
$http.get('/sys/bd_prize/commission/le_ma/' + month).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.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;
$scope.bdmon = mon;
$scope.listConfig = true;
$scope.bdlm = resp.data
$scope.bdmon = mon
$scope.listConfig = true
})
};
$scope.listCurrentMonBDCommission($scope.monModal);
}
$scope.listCurrentMonBDCommission($scope.monModal)
$scope.deleteCommission = function (config) {
$http.delete('sys/bd_prize/commission/delete/' + config)
$scope.listCurrentMonBDCommission($scope.monModal);
$state.reload();
$scope.listCurrentMonBDCommission($scope.monModal)
$state.reload()
}
$scope.submitCommmissionConfig = function (mon, bdlm) {
$scope.check = true;
$scope.check = true
angular.forEach(bdlm, function (data, index) {
$scope.errmsg = null;
$scope.errmsg = null
if (!data.bd_type) {
$scope.errmsg = "BD Type not be null";
$scope.check = false;
return;
$scope.errmsg = 'BD Type not be null'
$scope.check = false
return
}
if (!data.bd_commission_rate) {
$scope.errmsg = "BD Rate not be null";
$scope.check = false;
return;
$scope.errmsg = 'BD Rate not be null'
$scope.check = false
return
}
if (data.bd_commission_rate) {
if (data.bd_commission_rate > 10) {
$scope.errmsg = "BD Rate is too big";
$scope.check = false;
return;
$scope.errmsg = 'BD Rate is too big'
$scope.check = false
return
}
}
if (!data.commission_start_amount && data.commission_start_amount != 0) {
$scope.errmsg = "Commission Amount not be null";
$scope.check = false;
return;
$scope.errmsg = 'Commission Amount not be null'
$scope.check = false
return
}
if (data.commission_end_amount || data.commission_end_amount == 0) {
if (data.commission_start_amount >= data.commission_end_amount) {
$scope.errmsg = "Commission Start Amount should less than End Amount";
$scope.check = false;
return;
$scope.errmsg = 'Commission Start Amount should less than End Amount'
$scope.check = false
return
}
}
});
})
if ($scope.check) {
$http.post('/sys/bd_prize/commission/le_ma/update/' + mon, bdlm).then(function (resp) {
$scope.$close();
$scope.$close()
// $scope.bdlm = null;
// $scope.bdmon;
// $scope.listConfig = false;
@ -330,99 +423,111 @@ define(['angular', '../../analysis/bd/analysis-bd'], function (angular) {
}
}
$scope.submitBdCommmissionConfig = function (mon, bds) {
$scope.check = true;
$scope.errmsg = null;
$scope.check = true
$scope.errmsg = null
angular.forEach(bds, function (data, index) {
if(data.get_prize){
if (data.get_prize) {
if (!data.kpi_amount) {
$scope.errmsg = "BD kpi Amount not be null";
$scope.check = false;
return;
$scope.errmsg = 'BD kpi Amount not be null'
$scope.check = false
return
}
}
});
})
if ($scope.check) {
$http.post('/sys/bd_prize/commission/kpi/update/' + mon, bds).then(function (resp) {
$scope.$close();
$scope.$close()
})
}
}
}]);
app.controller('bdPrizeMonthReportCtrl', ['$scope', '$http', 'report', function ($scope, $http, report) {
$scope.report = report.data;
}]);
app.controller('bdPrizeDetailCtrl', ['$scope', 'detail', function ($scope, detail) {
$scope.detail = detail.data;
}]);
},
])
app.controller('bdPrizeMonthReportCtrl', [
'$scope',
'$http',
'report',
function ($scope, $http, report) {
$scope.report = report.data
},
])
app.controller('bdPrizeDetailCtrl', [
'$scope',
'detail',
function ($scope, detail) {
$scope.detail = detail.data
},
])
app.filter('financialBdLevel', function () {
return function (level) {
switch (level) {
case 0:
return 'Leader';
return 'Leader'
case 1:
return 'Junior';
return 'Junior'
case 2:
return 'Intermediate';
return 'Intermediate'
case 3:
return 'Senior';
return 'Senior'
default:
return 'Unknown';
return 'Unknown'
}
}
});
})
app.filter('financialClientSource', function () {
return function (source) {
switch (source) {
case 1:
return 'BD';
return 'BD'
case 2:
return 'Apply';
return 'Apply'
case 3:
return 'Distribute';
return 'Distribute'
default:
return 'Unknown';
return 'Unknown'
}
}
});
app.filter('prizeLogsFilter', [function () {
})
app.filter('prizeLogsFilter', [
function () {
return function (arr, filterObj) {
if (arr == null || filterObj == null) {
return arr;
return arr
}
return arr.filter(function (item) {
return item.prize_type == filterObj
})
}
}]);
},
])
app.filter('channel_image', function () {
return function (channel) {
switch (channel) {
case 'Alipay':
return '/static/images/alipay_sign_lg.png';
return '/static/images/alipay_sign_lg.png'
case 'AlipayOnline':
return '/static/images/alipay_online.png';
return '/static/images/alipay_online.png'
case 'System':
return '/static/images/royalpay_sign.png';
return '/static/images/royalpay_sign.png'
case 'Bestpay':
return '/static/images/bestpay_sign_lg.png';
return '/static/images/bestpay_sign_lg.png'
case 'Wechat':
return '/static/images/wechatpay_sign_lg.png';
return '/static/images/wechatpay_sign_lg.png'
case 'jd':
return '/static/images/jd_sign_lg.png';
return '/static/images/jd_sign_lg.png'
case 'hf':
return '/static/images/hf_sign_lg.png';
return '/static/images/hf_sign_lg.png'
case 'Rpay':
return '/static/images/rpayplus_sign_lg.png';
return '/static/images/rpayplus_sign_lg.png'
case 'Yeepay':
return '/static/images/yeepay_sign_lg.png';
return '/static/images/yeepay_sign_lg.png'
case 'LakalaPay':
return '/static/images/lakalapay_sign_lg.png';
return '/static/images/lakalapay_sign_lg.png'
case 'rpaypmt_card':
return '/static/images/card_payment_sign_lg.png';
return '/static/images/card_payment_sign_lg.png'
case 'rpaypmt_dd':
return '/static/images/direct_debit_sign_lg.png';
return '/static/images/direct_debit_sign_lg.png'
}
}
});
return app;
});
})
return app
})

@ -20,8 +20,10 @@
<!--<button class="btn btn-primary" ng-click="generateReport()" ng-disabled="!generate.month">-->
<!--Generate Report-->
<!--</button>-->
<button class="btn btn-primary" ng-click="editRateConfig()"><i class="fa fa-cog"></i> Edit Rate Config</button>
<button class="btn btn-primary" ng-click="editBDLevels()"><i class="fa fa-user"></i> Edit BD Level</button>
<button class="btn btn-primary" ng-click="editRateConfig()"><i class="fa fa-cog"></i> Edit
Rate Config</button>
<button class="btn btn-primary" ng-click="editBDLevels()"><i class="fa fa-user"></i> Edit BD
Level</button>
<loadingbar ng-if="generate.status"></loadingbar>
</div>
</div>
@ -39,24 +41,23 @@
<li ng-repeat="year in availableYears" role="menuitem"><a role="button" ng-click="getYearReports(year)" ng-bind="year"></a></li>
</ul>
</div>-->
<div ng-repeat="year in availableYears" style="display: inline">
<button class="btn btn-info"
ng-click="getYearReports(year)"
ng-bind="year"
ng-class="{'active':year == params.year}"
></button>
</div>
<button class="btn btn-info" ng-bind="params.year.getFullYear()" ng-click="ctrl.viewyear=true"></button>
<input type="text" class="hidden" uib-datepicker-popup="yyyy" ng-model="params.year"
is-open="ctrl.viewyear" datepicker-options="{minMode: 'year'}" ng-change="getYearReports()"
placeholder="Select Year">
</div>
<div class="box-body">
<div class="row">
<div class="col-xs-2" style="text-align: center" ng-repeat="mon in months">
<a ng-if="hasReport(mon) && (('10000000000000'|withRole)||('1000'|withRole))">
<h2 ROLE="button" class="text-success" ui-sref=".month_report({month:mon})" ng-bind="mon.substring(5,7)"></h2>
<h2 ROLE="button" class="text-success" ui-sref=".month_report({month:mon})"
ng-bind="mon.substring(5,7)"></h2>
<span class="fa fa-edit btn" ng-click="editCommissionConfig(mon)"></span>
<span class="fa fa-download btn" ng-click="exportCommission(mon)"></span>
</a>
<a ng-if="hasReport(mon) && ('100'|withRole) && (!('1000'|withRole))">
<h2 ROLE="button" class="text-success" ui-sref=".bd_detail({month:mon})" ng-bind="mon.substring(5,7)"></h2>
<h2 ROLE="button" class="text-success" ui-sref=".bd_detail({month:mon})"
ng-bind="mon.substring(5,7)"></h2>
<span class="fa fa-edit btn" ng-click="editCommissionConfig(mon)"></span>
<span class="fa fa-download btn" ng-click="exportCommission(mon)"></span>
</a>
@ -105,7 +106,8 @@
<a ui-sref=".bd_detail({month:commission.month})" ng-if="commission.prize_type==0">
<i class="fa fa-search"></i>
</a>
<a ng-href="/sys/bd_prize/commission/export/{{commission.month}}/bd_users" ng-if="commission.prize_type==0">
<a ng-href="/sys/bd_prize/commission/export/{{commission.month}}/bd_users"
ng-if="commission.prize_type==0">
<i class="fa fa-download"></i>
</a>
</td>
@ -143,9 +145,11 @@
<td ng-bind="'#'+($index+1)"></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:{kpi_range:range.kpi_range,bd_level:level,rate_from:0.6})[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:{kpi_range:range.kpi_range,bd_level:level,rate_from:0.8})[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>
@ -155,11 +159,13 @@
<li>按月度发放</li>
<li>每月发放总提成额度的60%剩余40%按照“年度考评分数比例”于每年年底即12 月25 日圣诞前发放</li>
<li>提前离职者40%提成不予发放</li>
<li>年度考评根据销管中心每月考评表打分制进行统计按照考评分数对应比例发放40%的占比部分扣下部分如果第二年考评超出一定评分110%可以补发同样如果年度考评分数超过100 分按照同比例发放</li>
<li>年度考评根据销管中心每月考评表打分制进行统计按照考评分数对应比例发放40%的占比部分扣下部分如果第二年考评超出一定评分110%可以补发同样如果年度考评分数超过100 分按照同比例发放
</li>
<li>商户开通后连续 1 个月未产生流水的,上交主管,由主管重新分配</li>
<li>连续 2 个月不产生流水的商户,由销管部统一收回,重新分配</li>
<li>分配后的商户流水客户专员只能占一半</li>
<li>离职及调岗人员商户统一上交销管中心,由销管中心 leader 及跨境事业部总监相互协商及相互监督,按照公平公正的原则, 做出分配方案,并由总监确认后统一分配。调岗人员移交的商户,在移交后 1 个月内移交人员和接收人员平分该商家产生的提成,移交人员需配合接收人员做好商户对接和短期内的商户维护;
<li>离职及调岗人员商户统一上交销管中心,由销管中心 leader 及跨境事业部总监相互协商及相互监督,按照公平公正的原则, 做出分配方案,并由总监确认后统一分配。调岗人员移交的商户,在移交后 1
个月内移交人员和接收人员平分该商家产生的提成,移交人员需配合接收人员做好商户对接和短期内的商户维护;
离职人员交接的商户提成,接收人员享受一半的提成,另一半作为跨境客服专员福利会基金</li>
<li>被客户投诉情况严重者,此商户由销管中心无条件收回重新分配</li>
<li>活动执行未传达到位且出现舞弊、徇私、懒惰等行为的,商户上交由销管中心统一分配</li>

@ -1,204 +1,253 @@
/**
* Created by yixian on 2017-03-08.
*/
var commissionTypeMap = [{
"label": 1,
"value": "渠道计算法"
},
var commissionTypeMap = [
{
"label": 2,
"value": "总交易额比例"
label: 1,
value: '渠道计算法',
},
{
"label": 3,
"value": "收益比例"
}
];
define(['angular','../../analysis/org/analysis-org'], function (angular) {
'use strict';
var app = angular.module('orgcommission', ['ui.router']);
app.config(['$stateProvider', function ($stateProvider) {
$stateProvider.state('analysis_org.commission', {
label: 2,
value: '总交易额比例',
},
{
label: 3,
value: '收益比例',
},
]
define(['angular', '../../analysis/org/analysis-org'], function (angular) {
'use strict'
var app = angular.module('orgcommission', ['ui.router'])
app.config([
'$stateProvider',
function ($stateProvider) {
$stateProvider
.state('analysis_org.commission', {
url: '/org_commissions',
templateUrl: '/static/config/orgcommission/templates/org_commission_root.html',
controller: 'orgCommissionRootCtrl'
}).state('analysis_org.commission.month', {
controller: 'orgCommissionRootCtrl',
})
.state('analysis_org.commission.month', {
url: '/commissionorg/months/{monthStr}',
templateUrl: '/static/config/orgcommission/templates/org_commission_month_root.html',
controller: 'commissionMonthRootCtrl'
}).state('analysis_org.info', {
controller: 'commissionMonthRootCtrl',
})
.state('analysis_org.info', {
url: '/commissionorg/info',
templateUrl: '/static/config/orgcommission/templates/org_commission_info.html',
controller: 'commissionMonthRootCtrl'
}).state('analysis_org.commission.month.org', {
controller: 'commissionMonthRootCtrl',
})
.state('analysis_org.commission.month.org', {
url: '/org',
templateUrl: '/static/config/orgcommission/templates/org_commission_month.html',
controller: 'orgCommissionMonthViewCtrl',
resolve: {
monthData: ['$http', '$stateParams', function ($http, $stateParams) {
return $http.get('/sys/citypartner_prizes/months/' + $stateParams.monthStr);
}]
}
}).state('analysis_org.commission.month.referrer', {
monthData: [
'$http',
'$stateParams',
function ($http, $stateParams) {
return $http.get('/sys/citypartner_prizes/months/' + $stateParams.monthStr)
},
],
},
})
.state('analysis_org.commission.month.referrer', {
url: '/referrer',
templateUrl: '/static/config/referrercommission/templates/referrer_commission_month.html',
controller: 'referrerCommissionMonthViewCtrl',
resolve: {
monthData: ['$http', '$stateParams', function ($http, $stateParams) {
return $http.get('/sys/citypartner_prizes/referrer/months/' + $stateParams.monthStr);
}]
}
}).state('analysis_org.commission.month.org.orgdetail', {
monthData: [
'$http',
'$stateParams',
function ($http, $stateParams) {
return $http.get('/sys/citypartner_prizes/referrer/months/' + $stateParams.monthStr)
},
],
},
})
.state('analysis_org.commission.month.org.orgdetail', {
url: '/citypartners/{orgId}',
templateUrl: '/static/config/orgcommission/templates/org_commission_detail.html',
controller: 'orgCommissionOrgDetailCtrl',
resolve: {
detail: ['$http', '$stateParams', function ($http, $stateParams) {
return $http.get('/sys/citypartner_prizes/months/' + $stateParams.monthStr + '/orgs/' + $stateParams.orgId);
}]
}
}).state('analysis_org.commission.month.referrer.referrerdetail', {
detail: [
'$http',
'$stateParams',
function ($http, $stateParams) {
return $http.get('/sys/citypartner_prizes/months/' + $stateParams.monthStr + '/orgs/' + $stateParams.orgId)
},
],
},
})
.state('analysis_org.commission.month.referrer.referrerdetail', {
url: '/referrer_commissions/{orgId}',
templateUrl: '/static/config/referrercommission/templates/referrer_commission_detail.html',
controller: 'referrerCommissionOrgDetailCtrl',
resolve: {
detail: ['$http', '$stateParams', function ($http, $stateParams) {
return $http.get('/sys/citypartner_prizes/referrer/months/' + $stateParams.monthStr + '/orgs/' + $stateParams.orgId);
}]
}
detail: [
'$http',
'$stateParams',
function ($http, $stateParams) {
return $http.get('/sys/citypartner_prizes/referrer/months/' + $stateParams.monthStr + '/orgs/' + $stateParams.orgId)
},
],
},
})
}]);
app.controller('commissionMonthRootCtrl', ['$scope', '$state', function ($scope, $state) {
if($state.is('analysis_org.commission.month')){
$state.go('.org');
},
])
app.controller('commissionMonthRootCtrl', [
'$scope',
'$state',
function ($scope, $state) {
if ($state.is('analysis_org.commission.month')) {
$state.go('.org')
}
}]);
app.controller('orgCommissionRootCtrl', ['$scope', '$http', '$filter', '$state', 'commonDialog',
},
])
app.controller('orgCommissionRootCtrl', [
'$scope',
'$http',
'$filter',
'$state',
'commonDialog',
function ($scope, $http, $filter, $state, commonDialog) {
$scope.generate = {};
$scope.generate = {}
$scope.generateOrgCommission = function () {
$scope.generate.status = {};
$scope.generate.status = {}
if (!$scope.generate.month) {
commonDialog.alert({
type: 'error', title: 'Error', content: 'Select a month first!'
});
return;
type: 'error',
title: 'Error',
content: 'Select a month first!',
})
return
}
commonDialog.confirm({
commonDialog
.confirm({
title: 'Confirm',
content: 'This operation will clear the data generated before, Are you sure?'
}).then(function () {
var params = {month: $filter('date')($scope.generate.month, 'yyyy-MM')};
$http.post('/sys/citypartner_prizes/generate', params).then(function () {
$state.go('.org.month', {monthStr: params.month})
$scope.generate.status = null;
}, function (resp) {
commonDialog.alert({type: 'error', title: 'Error', content: resp.data.message});
content: 'This operation will clear the data generated before, Are you sure?',
})
.then(function () {
var params = { month: $filter('date')($scope.generate.month, 'yyyy-MM') }
$http.post('/sys/citypartner_prizes/generate', params).then(
function () {
$state.go('.org.month', { monthStr: params.month })
$scope.generate.status = null
},
function (resp) {
commonDialog.alert({ type: 'error', title: 'Error', content: resp.data.message })
}
)
})
}
$scope.params = { year: new Date() }
$scope.loadAvailableMonths = function () {
const year = $scope.params.year.getFullYear()
$http.get('/sys/citypartner_prizes/months', { params: { year: year } }).then(function (resp) {
$scope.availableMonths = resp.data
})
};
$scope.availableYears = [new Date().getFullYear()];
//当前年至2017年年份
for (var i = 1; i < new Date().getFullYear()-2017+1; i++) {
$scope.availableYears.push(new Date().getFullYear() - i);
}
$scope.params = {};
$scope.months = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
$scope.loadAvailableMonths = function (year) {
$scope.params.year = year;
$http.get('/sys/citypartner_prizes/months', {params: {year: $scope.params.year}}).then(function (resp) {
$scope.availableMonths = resp.data;
});
};
}
$scope.loadAvailableMonths(new Date().getFullYear());
$scope.loadAvailableMonths()
$scope.months = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
$scope.hasReport = function (mon) {
var has = false;
var has = false
angular.forEach($scope.availableMonths, function (m) {
if (mon == m.month) {
has = true;
has = true
}
})
return has
}
});
return has;
};
$scope.gotoMonth = function (mon) {
if(mon){
$scope.params.month = mon;
if (mon) {
$scope.params.month = mon
}
var monthStr = $scope.params.year + '-' + $scope.params.month;
$state.go('analysis_org.commission.month', {monthStr: monthStr})
};
}]);
app.controller('orgCommissionMonthViewCtrl', ['$scope', 'monthData','$http', function ($scope, monthData,$http) {
$scope.monthData = monthData.data;
$scope.ctrl = {};
$scope.commissionTypeMap = commissionTypeMap;
$scope.seniors = {};
var monthStr = $scope.params.year.getFullYear() + '-' + $scope.params.month
$state.go('analysis_org.commission.month', { monthStr: monthStr })
}
},
])
app.controller('orgCommissionMonthViewCtrl', [
'$scope',
'monthData',
'$http',
function ($scope, monthData, $http) {
$scope.monthData = monthData.data
$scope.ctrl = {}
$scope.commissionTypeMap = commissionTypeMap
$scope.seniors = {}
$scope.active = function (log) {
$http.get('/sys/citypartner_prizes/senior/'+log.org_id+'/details?monthStr='+$scope.monthData.monthstr).then(function (resp) {
$scope.seniors = resp.data;
if($scope.ctrl.activeLog && $scope.ctrl.activeLog.org_id==log.org_id){
$scope.ctrl.activeLog=null;
return;
$http.get('/sys/citypartner_prizes/senior/' + log.org_id + '/details?monthStr=' + $scope.monthData.monthstr).then(function (resp) {
$scope.seniors = resp.data
if ($scope.ctrl.activeLog && $scope.ctrl.activeLog.org_id == log.org_id) {
$scope.ctrl.activeLog = null
return
}
$scope.ctrl.activeLog=log;
$scope.ctrl.activeLog = log
})
}
}]);
app.controller('orgCommissionOrgDetailCtrl', ['$scope', 'detail', function ($scope, detail) {
$scope.detail = detail.data;
$scope.ctrl = {};
},
])
app.controller('orgCommissionOrgDetailCtrl', [
'$scope',
'detail',
function ($scope, detail) {
$scope.detail = detail.data
$scope.ctrl = {}
$scope.active = function (log) {
if($scope.ctrl.activeLog && $scope.ctrl.activeLog.client_moniker==log.client_moniker){
$scope.ctrl.activeLog=null;
return;
if ($scope.ctrl.activeLog && $scope.ctrl.activeLog.client_moniker == log.client_moniker) {
$scope.ctrl.activeLog = null
return
}
$scope.ctrl.activeLog=log;
$scope.ctrl.activeLog = log
}
}]);
},
])
app.controller('referrerCommissionMonthViewCtrl', ['$scope', 'monthData', function ($scope, monthData) {
$scope.monthData = monthData.data;
$scope.ctrl = {};
app.controller('referrerCommissionMonthViewCtrl', [
'$scope',
'monthData',
function ($scope, monthData) {
$scope.monthData = monthData.data
$scope.ctrl = {}
$scope.active = function (log) {
if($scope.ctrl.activeLog && $scope.ctrl.activeLog.org_id==log.org_id){
$scope.ctrl.activeLog=null;
return;
if ($scope.ctrl.activeLog && $scope.ctrl.activeLog.org_id == log.org_id) {
$scope.ctrl.activeLog = null
return
}
$scope.ctrl.activeLog=log;
$scope.ctrl.activeLog = log
}
}]);
},
])
app.controller('referrerCommissionOrgDetailCtrl', ['$scope', 'detail', function ($scope, detail) {
$scope.detail = detail.data;
$scope.ctrl = {};
app.controller('referrerCommissionOrgDetailCtrl', [
'$scope',
'detail',
function ($scope, detail) {
$scope.detail = detail.data
$scope.ctrl = {}
$scope.active = function (log) {
if($scope.ctrl.activeLog && $scope.ctrl.activeLog.client_moniker==log.client_moniker){
$scope.ctrl.activeLog=null;
return;
if ($scope.ctrl.activeLog && $scope.ctrl.activeLog.client_moniker == log.client_moniker) {
$scope.ctrl.activeLog = null
return
}
$scope.ctrl.activeLog=log;
$scope.ctrl.activeLog = log
}
}]);
},
])
app.filter('commission_type_filter', function () {
return function (sectorValue) {
var sectorLabel = '';
var sectorLabel = ''
angular.forEach(commissionTypeMap, function (sector) {
if (sector.label == sectorValue) {
sectorLabel = sector.value;
sectorLabel = sector.value
}
});
return sectorLabel;
})
return sectorLabel
}
});
return app;
})
});
return app
})

@ -11,8 +11,8 @@
<div class="form-inline">
<div class="form-group">
<input type="text" class="form-control" uib-datepicker-popup="yyyy-MM" ng-model="generate.month"
is-open="ctrl.genmonth" datepicker-options="{minMode: 'month'}"
ng-click="ctrl.genmonth=true" placeholder="Select Month"/>
is-open="ctrl.genmonth" datepicker-options="{minMode: 'month'}" ng-click="ctrl.genmonth=true"
placeholder="Select Month" />
</div>
<button class="btn btn-primary" ng-click="generateOrgCommission()" ng-disabled="!generate.month">
Generate
@ -28,18 +28,15 @@
placeholder="Select Year">
<span ng-bind="params.year.getFullYear()" ng-click="ctrl.viewyear=true"></span>-->
<div ng-repeat="year in availableYears" style="display: inline">
<button class="btn btn-info"
ng-click="loadAvailableMonths(year)"
ng-bind="year"
ng-class="{'active':year == params.year}"
></button>
</div>
<button class="btn btn-info" ng-bind="params.year.getFullYear()" ng-click="ctrl.viewyear=true"></button>
<input type="text" class="hidden" uib-datepicker-popup="yyyy" ng-model="params.year" is-open="ctrl.viewyear"
datepicker-options="{minMode: 'year'}" ng-change="loadAvailableMonths()" placeholder="Select Year">
</div>
<div class="row">
<div class="col-md-3 col-sm-6 col-xs-12" ng-repeat="mon in availableMonths">
<div class="info-box">
<div class="info-box-icon bg-aqua" ng-bind="mon.month" ng-click="gotoMonth(mon.month)" role="button">
<div class="info-box-icon bg-aqua" ng-bind="mon.month" ng-click="gotoMonth(mon.month)"
role="button">
</div>
<div class="info-box-content">
<!--<div class="info-box-text text-bold text-red" ng-bind="r.charge_date"></div>-->

@ -2,239 +2,241 @@
* Created by Tayl0r on 2017/5/24.
*/
define(['angular', 'decimal', 'uiRouter', 'angularEcharts', '../../analysis/report/analysis-report'], function (angular, Decimal) {
'use strict';
var app = angular.module('platformRevenue', ['ui.router']);
app.config(['$stateProvider', function ($stateProvider) {
$stateProvider.state('analysis_report.platformrevenue', {
'use strict'
var app = angular.module('platformRevenue', ['ui.router'])
app.config([
'$stateProvider',
function ($stateProvider) {
$stateProvider
.state('analysis_report.platformrevenue', {
url: '/platformrevenue',
templateUrl: '/static/config/platformrevenue/templates/platform_revenue_root.html',
controller: 'platformRevenueRootCtrl'
}).state('analysis_report.platformsettle', {
controller: 'platformRevenueRootCtrl',
})
.state('analysis_report.platformsettle', {
url: '/platformsettle',
templateUrl: '/static/config/platformrevenue/templates/platform_settle_logs.html',
controller: 'platformSettleLogCtrl',
});
}]);
app.controller('platformSettleLogCtrl', ['$scope', '$http', '$state','$filter','Upload','commonDialog', function ($scope, $http, $state,$filter,Upload, commonDialog) {
$scope.wechatPagination = {};
})
},
])
app.controller('platformSettleLogCtrl', [
'$scope',
'$http',
'$state',
'$filter',
'Upload',
'commonDialog',
function ($scope, $http, $state, $filter, Upload, commonDialog) {
$scope.wechatPagination = {}
$scope.loadWechatLogs = function (page) {
var params = $scope.queryParams || {};
params.page = page || $scope.wechatPagination.page || 1;
params.limit = 20;
params.channel = 'Wechat';
$http.get('/platform/analysis/settle/log', {params: params}).then(function (resp) {
$scope.wechatLogs = resp.data.data;
$scope.wechatPagination = resp.data.pagination;
});
};
$scope.loadWechatLogs(1);
var params = $scope.queryParams || {}
params.page = page || $scope.wechatPagination.page || 1
params.limit = 20
params.channel = 'Wechat'
$http.get('/platform/analysis/settle/log', { params: params }).then(function (resp) {
$scope.wechatLogs = resp.data.data
$scope.wechatPagination = resp.data.pagination
})
}
$scope.loadWechatLogs(1)
$scope.aliPagination = {};
$scope.aliPagination = {}
$scope.loadAliLogs = function (page) {
var params = $scope.queryParams || {};
params.page = page || $scope.aliPagination.page || 1;
params.limit = 20;
params.channel = 'Alipay';
$http.get('/platform/analysis/settle/log', {params: params}).then(function (resp) {
$scope.aliLogs = resp.data.data;
$scope.aliPagination = resp.data.pagination;
});
}
$scope.loadAliLogs(1);
$scope.aliOnlinePagination = {};
var params = $scope.queryParams || {}
params.page = page || $scope.aliPagination.page || 1
params.limit = 20
params.channel = 'Alipay'
$http.get('/platform/analysis/settle/log', { params: params }).then(function (resp) {
$scope.aliLogs = resp.data.data
$scope.aliPagination = resp.data.pagination
})
}
$scope.loadAliLogs(1)
$scope.aliOnlinePagination = {}
$scope.loadAliOnlineLogs = function (page) {
var params = $scope.queryParams || {};
params.page = page || $scope.aliOnlinePagination.page || 1;
params.limit = 20;
params.channel = 'AlipayOnline';
$http.get('/platform/analysis/settle/log', {params: params}).then(function (resp) {
$scope.aliOnlineLogs = resp.data.data;
$scope.aliOnlinePagination = resp.data.pagination;
});
}
$scope.loadAliOnlineLogs(1);
var params = $scope.queryParams || {}
params.page = page || $scope.aliOnlinePagination.page || 1
params.limit = 20
params.channel = 'AlipayOnline'
$http.get('/platform/analysis/settle/log', { params: params }).then(function (resp) {
$scope.aliOnlineLogs = resp.data.data
$scope.aliOnlinePagination = resp.data.pagination
})
}
$scope.loadAliOnlineLogs(1)
$scope.loadBestpayLog = function () {
$http.get('/platform/analysis/settle/Bestpay').then(function (resp) {
$scope.bestpayLogs = resp.data;
});
}
$scope.loadBestpayLog();
$scope.verifySettleLog = function(log){
$http.get('/platform/analysis/settle/verify',{params:log}).then(function () {
$scope.loadAliLogs(1);
$scope.loadAliOnlineLogs(1);
$scope.loadWechatLogs(1);
$scope.bestpayLogs = resp.data
})
}
$scope.loadBestpayLog()
$scope.verifySettleLog = function (log) {
$http.get('/platform/analysis/settle/verify', { params: log }).then(
function () {
$scope.loadAliLogs(1)
$scope.loadAliOnlineLogs(1)
$scope.loadWechatLogs(1)
commonDialog.alert({
title: 'Success',
content: '校验结果已经重新生成,请查看!',
type: 'success'
type: 'success',
})
},function (resp) {
},
function (resp) {
commonDialog.alert({
title: 'Error',
content: resp.data.message,
type: 'error'
type: 'error',
})
});
}
)
}
$scope.generateSettleLogs = function () {
$http.get('/platform/analysis/generate/settle/log').then(function () {
$scope.loadWechatLogs(1);
$scope.loadAliLogs(1);
$state.reload();
});
$state.reload();
$scope.loadWechatLogs(1)
$scope.loadAliLogs(1)
$state.reload()
})
$state.reload()
}
$scope.hfParam={};
$scope.hfPagination = {};
$scope.hfParam = {}
$scope.hfPagination = {}
$scope.loadhfLogs = function (page) {
var params = $scope.queryParams || {};
params.page = page || $scope.hfPagination.page || 1;
params.limit = 20;
params.channel = 'hf';
$http.get('/platform/analysis/settle/log', {params: params}).then(function (resp) {
$scope.hfLogs = resp.data.data;
$scope.hfPagination = resp.data.pagination;
});
};
var params = $scope.queryParams || {}
params.page = page || $scope.hfPagination.page || 1
params.limit = 20
params.channel = 'hf'
$http.get('/platform/analysis/settle/log', { params: params }).then(function (resp) {
$scope.hfLogs = resp.data.data
$scope.hfPagination = resp.data.pagination
})
}
$scope.loadhfLogs(1);
$scope.loadhfLogs(1)
$scope.uploadhfSettleFile = function (file) {
if (file != null) {
Upload.upload({
url: '/attachment/secret_files',
data: {file: file}
}).then(function (resp) {
$scope.hfParam.fileId = resp.data.fileid;
commonDialog.alert({title: 'Upload Success', content:'', type: 'success'})
}, function (resp) {
}, function (evt) {
})
data: { file: file },
}).then(
function (resp) {
$scope.hfParam.fileId = resp.data.fileid
commonDialog.alert({ title: 'Upload Success', content: '', type: 'success' })
},
function (resp) {},
function (evt) {}
)
}
}
};
$scope.dohfSettle = function () {
var param = angular.copy($scope.hfParam);
if(!param.start){
alert("请先选择开始时间");
var param = angular.copy($scope.hfParam)
if (!param.start) {
alert('请先选择开始时间')
}
if(!param.end){
alert("请先选择结束时间");
if (!param.end) {
alert('请先选择结束时间')
}
if(!param.fileId){
alert("请先上传汇付清算文件");
if (!param.fileId) {
alert('请先上传汇付清算文件')
}
param.start = $filter('date')(param.start, "yyyy-MM-dd");
param.end = $filter('date')(param.end, "yyyy-MM-dd");
$http.put('/platform/analysis/generate/hf/settle',param).then(function (resp) {
});
param.start = $filter('date')(param.start, 'yyyy-MM-dd')
param.end = $filter('date')(param.end, 'yyyy-MM-dd')
$http.put('/platform/analysis/generate/hf/settle', param).then(function (resp) {})
}
}]);
app.controller('platformRevenueRootCtrl', ['$scope', '$http', '$filter', 'chartParser', function ($scope, $http, $filter, chartParser) {
$scope.params = {year: new Date().getFullYear()};
$scope.availableYears = [];
var years = new Date().getFullYear() - 2016;
for( var i = years ; i>=0 ; i-- ){
$scope.availableYears.push(new Date().getFullYear() - i) ;
}
$scope.initMonth = function (year) {
$scope.months = [];
for (var i = 1; i < 13; i++) {
var mon = '00' + i;
mon = mon.substr(mon.length - 2, 2);
$scope.months.push(year + '-' + mon);
}
};
$scope.initMonth($scope.params.year);
},
])
app.controller('platformRevenueRootCtrl', [
'$scope',
'$http',
'$filter',
'chartParser',
function ($scope, $http, $filter, chartParser) {
$scope.params = { year: new Date() }
$scope.hasReport = function (mon) {
var start = '2017-01';
var end = $filter('date')(new Date(), 'yyyy-MM');
var start = '2017-01'
var end = $filter('date')(new Date(), 'yyyy-MM')
return start <= mon && end >= mon
};
$scope.loadYearReport = function (year) {
$scope.params.year = year;
}
$scope.loadYearReport = function () {
const year = $scope.params.year.getFullYear()
$http.get('/analysis/platform/revenue/year_reports/' + year).then(function (resp) {
$scope.report = resp.data;
loadChargeAnalysis(year);
$scope.report = resp.data
loadChargeAnalysis(year)
$scope.analysis = {
analysis_year: year,
partner_commission: 0,
bd_commission: 0,
royalpay_surcharge: 0
};
royalpay_surcharge: 0,
}
angular.forEach($scope.report, function (report) {
$scope.analysis.partner_commission = Decimal.add(report.partner_charge, $scope.analysis.partner_commission).toFixed(2);
$scope.analysis.bd_commission = Decimal.add(report.bd_charge, $scope.analysis.bd_commission).toFixed(2);
$scope.analysis.royalpay_surcharge = Decimal.add(report.royalpay_charge, $scope.analysis.royalpay_surcharge).toFixed(2);
});
$scope.analysis.partner_commission = Decimal.add(report.partner_charge, $scope.analysis.partner_commission).toFixed(2)
$scope.analysis.bd_commission = Decimal.add(report.bd_charge, $scope.analysis.bd_commission).toFixed(2)
$scope.analysis.royalpay_surcharge = Decimal.add(report.royalpay_charge, $scope.analysis.royalpay_surcharge).toFixed(2)
})
})
};
}
$scope.loadYearReport()
function loadChargeAnalysis(year) {
var analysisConfig = {
chart: {
tooltip: {
trigger: 'axis',
axisPointer: { // 坐标轴指示器,坐标轴触发有效
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
axisPointer: {
// 坐标轴指示器,坐标轴触发有效
type: 'shadow', // 默认为直线,可选为:'line' | 'shadow'
},
formatter: '{b}:AUD {c}'
formatter: '{b}:AUD {c}',
},
legend: {
data: ['BD Commission', 'Partner Commission', 'RoyalPay SurCharge']
data: ['BD Commission', 'Partner Commission', 'RoyalPay SurCharge'],
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
containLabel: true,
},
yAxis: [
{
type: 'value'
}
]
type: 'value',
},
],
},
xAxis: {
basic: {type: 'category'},
key: 'charge_date'
basic: { type: 'category' },
key: 'charge_date',
},
series: [
{
basic: {name: 'BD Commission', type: 'bar'},
column: {key: 'bd_charge'}
basic: { name: 'BD Commission', type: 'bar' },
column: { key: 'bd_charge' },
},
{
basic: {
name: 'Partner Commission',
type: 'bar'
type: 'bar',
},
column: {key: 'partner_charge'}
column: { key: 'partner_charge' },
},
{
basic: {name: 'RoyalPay SurCharge', type: 'bar', stack: 'RoyalPaySurcharge'},
column: {key: 'royalpay_charge'}
basic: { name: 'RoyalPay SurCharge', type: 'bar', stack: 'RoyalPaySurcharge' },
column: { key: 'royalpay_charge' },
},
],
}
]
};
$http.get('/analysis/platform/revenue/year_reports/' + year).then(function (resp) {
$scope.chargeAnalysis = chartParser.parse(analysisConfig, resp.data);
$scope.chargeAnalysis = chartParser.parse(analysisConfig, resp.data)
})
}
$scope.loadYearReport(new Date().getFullYear());
}]);
return app;
});
},
])
return app
})

@ -25,19 +25,17 @@
</ul>
</div>-->
<div ng-repeat="year in availableYears" style="display: inline">
<button class="btn btn-info"
ng-click="loadYearReport(year)"
ng-bind="year"
ng-class="{'active':year == params.year}"
></button>
</div>
<button class="btn btn-info" ng-bind="params.year.getFullYear()"
ng-click="ctrl.viewyear=true"></button>
<input type="text" class="hidden" uib-datepicker-popup="yyyy" ng-model="params.year"
is-open="ctrl.viewyear" datepicker-options="{minMode: 'year'}" ng-change="loadYearReport()"
placeholder="Select Year">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<section class="content">
<div class="row">
@ -48,7 +46,7 @@
</div>
<div class="info-box-content">
<!--<div class="info-box-text text-bold text-red" ng-bind="r.charge_date"></div>-->
<div >
<div>
<div class="info-box-number-right">
<span class="text-bold">Partner Commission:</span>
@ -59,11 +57,12 @@
<span ng-bind="r.bd_charge|currency:'$'" class="text-green"></span>
</div>
<div class="info-box-number-right">
<i class="fa fa-angle-double-down" aria-hidden="true" title="show detail"
uib-popover="
<i class="fa fa-angle-double-down" aria-hidden="true" title="show detail" uib-popover="
Wechat:{{r.channels.Wechat}} &#10 &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp
Alipay:{{r.channels.Alipay}} &#10
Bestpay:{{r.channels.Bestpay}}" popover-title="RoyalPay SurCharge Detail" popover-placement="bottom" popover-data-html="true"></i><span class="text-bold">RoyalPay SurCharge:</span>
Bestpay:{{r.channels.Bestpay}}" popover-title="RoyalPay SurCharge Detail"
popover-placement="bottom" popover-data-html="true"></i><span class="text-bold">RoyalPay
SurCharge:</span>
<span ng-bind="r.royalpay_charge|currency:'$'" class="text-green"></span>
</div>

Loading…
Cancel
Save