ranking_customer.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. function ranking_customer(widget) {
  2. "use strict";
  3. var model = openerp;
  4. var Qweb = openerp.web.qweb;
  5. widget.RankingCustomer = widget.Base.extend({
  6. template: 'RankingCustomer',
  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.ResPartner = DataSQL.partners;
  26. return self.CustomerRanking();
  27. });
  28. },
  29. fetchDataSQL: function() {
  30. var data = $.get('/dashboard-RankingCustomer');
  31. return data;
  32. },
  33. getPosOrder:function(id) {
  34. var self = this;
  35. return _.flatten(_.filter(self.PosOrder,function (inv) {
  36. return inv.customer_id === id;
  37. }));
  38. },
  39. getAccountInvoice:function(id, type) {
  40. var self = this;
  41. return _.flatten(_.filter(self.AccountInvoice,function (inv) {
  42. return inv.customer_id === id && inv.type == type;
  43. }));
  44. },
  45. CustomerRanking: function() {
  46. var self = this;
  47. var ranking = [];
  48. var ResPartner = self.ResPartner;
  49. _.each(ResPartner, function (item) {
  50. var PosOrder = self.getPosOrder(item.id);
  51. var AccountInvoice = self.getAccountInvoice(item.id,'out_invoice');
  52. var AccountInvoiceRefund = self.getAccountInvoice(item.id,'out_refund');
  53. var pos_order_amount = _.reduce(_.map(PosOrder,function(item) {
  54. return item.amount;
  55. }),function(memo, num) {
  56. return memo + num;
  57. },0);
  58. var account_invoice_amount = _.reduce(_.map(AccountInvoice,function(item) {
  59. return item.amount;
  60. }),function(memo, num) {
  61. return memo + num;
  62. },0);
  63. var account_invoice_refund_amount = _.reduce(_.map(AccountInvoiceRefund,function(item) {
  64. return item.amount;
  65. }),function(memo, num) {
  66. return memo + num;
  67. },0);
  68. var amount = (pos_order_amount + account_invoice_amount) - account_invoice_refund_amount;
  69. if(amount > 0 ){
  70. ranking.push({
  71. name: item.name,
  72. amount: amount,
  73. });
  74. }
  75. });
  76. ranking.sort(function(a, b) {
  77. return b.amount - a.amount
  78. });
  79. self.BuildChart(ranking);
  80. },
  81. BuildChart: function (ranking){
  82. var self = this;
  83. var label = [];
  84. var body = [];
  85. var rank = 10;
  86. var item;
  87. var CurrencyBase = self.ResCompany[0].currency_id;
  88. for (var i = 0; i < rank; i++) {
  89. if (ranking[i]){
  90. item = ranking[i];
  91. }else{
  92. item = {};
  93. item.name = "N/A";
  94. item.amount = 0;
  95. }
  96. label.push(item.name)
  97. body.push(item.amount);
  98. }
  99. var name = '.ranking-horizontalBar-chart';
  100. var chart = new widget.DashboardChartWidget(self);
  101. chart.BuildHorizontalBarChart(name,CurrencyBase,label,body);
  102. }
  103. });
  104. }