ranking_salesman.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. function ranking_salesman(widget) {
  2. "use strict";
  3. var model = openerp;
  4. var Qweb = openerp.web.qweb;
  5. widget.RankingSalesman = widget.Base.extend({
  6. template: 'RankingSalesman',
  7. init: function (parent) {
  8. this._super(parent, {
  9. width: 6,
  10. height: 4
  11. });
  12. },
  13. start: function () {
  14. var self = this;
  15. self.fetchInitial();
  16. },
  17. fetchInitial: function(){
  18. var self = this;
  19. self.fetchDataSQL().then(function (DataSQL) {
  20. return DataSQL;
  21. }).then(function(DataSQL) {
  22. self.ResCompany = DataSQL.company;
  23. self.AccountInvoice = DataSQL.invoices;
  24. self.PosOrder = DataSQL.orders;
  25. self.ResUser = DataSQL.users;
  26. return self.SalesmanRanking();
  27. });
  28. },
  29. fetchDataSQL: function() {
  30. var data = $.get('/dashboard-RankingSalesman');
  31. return data;
  32. },
  33. getPosOrder:function(id) {
  34. var self = this;
  35. return _.flatten(_.filter(self.PosOrder,function (inv) {
  36. return inv.user_id === id;
  37. }));
  38. },
  39. getAccountInvoice:function(id) {
  40. var self = this;
  41. return _.flatten(_.filter(self.AccountInvoice,function (inv) {
  42. return inv.user_id === id && inv.type == 'out_invoice' && inv.origin.match(/SO/) != null;
  43. }));
  44. },
  45. getAccountInvoiceRefund:function(id) {
  46. var self = this;
  47. return _.flatten(_.filter(self.AccountInvoice,function (inv) {
  48. return inv.user_id === id && inv.type == 'out_refund';
  49. }));
  50. },
  51. SalesmanRanking: function() {
  52. var self = this;
  53. var ranking = [];
  54. var ResUser = self.ResUser;
  55. _.each(ResUser, function (item) {
  56. var PosOrder = self.getPosOrder(item.id);
  57. var AccountInvoice = self.getAccountInvoice(item.id);
  58. var AccountInvoiceRefund = self.getAccountInvoiceRefund(item.id);
  59. var pos_order_amount = _.reduce(_.map(PosOrder,function(item) {
  60. return item.amount;
  61. }),function(memo, num) {
  62. return memo + num;
  63. },0);
  64. var account_invoice_amount = _.reduce(_.map(AccountInvoice,function(item) {
  65. return item.amount;
  66. }),function(memo, num) {
  67. return memo + num;
  68. },0);
  69. var account_invoice_refund_amount = _.reduce(_.map(AccountInvoiceRefund,function(item) {
  70. return item.amount;
  71. }),function(memo, num) {
  72. return memo + num;
  73. },0);
  74. var amount = (pos_order_amount + account_invoice_amount) - account_invoice_refund_amount;
  75. if(amount > 0 ){
  76. ranking.push({
  77. name: item.name,
  78. amount: amount,
  79. });
  80. }
  81. });
  82. ranking.sort(function(a, b) {
  83. return b.amount - a.amount
  84. });
  85. self.BuildChart(ranking);
  86. },
  87. BuildChart: function (ranking){
  88. var self = this;
  89. var label = [];
  90. var body = [];
  91. var item;
  92. var CurrencyBase = self.ResCompany[0].currency_id;
  93. for (var i = 0; i < ranking.length; i++) {
  94. item = ranking[i];
  95. label.push(item.name)
  96. body.push(item.amount);
  97. }
  98. var name = '.ranking-salesman-chart';
  99. var chart = new widget.DashboardChartWidget(self);
  100. chart.BuildHorizontalBarChart(name,CurrencyBase,label,body);
  101. }
  102. });
  103. }