ranking_doctores.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. function ranking_doctores(widget) {
  2. "use strict";
  3. var model = openerp;
  4. var Qweb = openerp.web.qweb;
  5. widget.RankingDoctores = widget.Base.extend({
  6. template: 'RankingDoctores',
  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.AccountInvoiceLine = DataSQL.invoiceslines;
  25. self.ResUser = DataSQL.users;
  26. return self.SalesmanRanking();
  27. });
  28. },
  29. fetchDataSQL: function() {
  30. var data = $.get('/dashboard-RankingDoctores');
  31. return data;
  32. },
  33. getAccountInvoiceLine:function(id) {
  34. var self = this;
  35. return _.flatten(_.filter(self.AccountInvoiceLine,function (inv) {
  36. return inv.medic_id === id;
  37. }));
  38. },
  39. // getAccountInvoice:function(id) {
  40. // var self = this;
  41. // return _.flatten(_.filter(self.AccountInvoice,function (inv) {
  42. // return inv.id === id && inv.type == 'out_invoice';
  43. // }));
  44. // },
  45. SalesmanRanking: function() {
  46. var self = this;
  47. var ranking = [];
  48. var amount = 0;
  49. var ResUser = self.ResUser;
  50. var InvoiceLine= self.AccountInvoiceLine
  51. _.each(ResUser, function (item) {
  52. var AccountInvoiceLine = self.getAccountInvoiceLine(item.id);
  53. var account_invoice_amount = _.reduce(_.map(AccountInvoiceLine,function(item) {
  54. return item.subtotal;
  55. }),function(memo, num) {
  56. return memo + num;
  57. },0);
  58. amount = (account_invoice_amount);
  59. if(amount > 0 ){
  60. ranking.push({
  61. name: item.name,
  62. amount: amount,
  63. });
  64. }
  65. });
  66. ranking.sort(function(a, b) {
  67. return b.amount - a.amount
  68. });
  69. self.BuildChart(ranking);
  70. },
  71. BuildChart: function (ranking){
  72. var self = this;
  73. var label = [];
  74. var body = [];
  75. var item;
  76. var CurrencyBase = self.ResCompany[0].currency_id;
  77. for (var i = 0; i < ranking.length; i++) {
  78. item = ranking[i];
  79. label.push(item.name)
  80. body.push(item.amount);
  81. }
  82. var name = '.ranking-doctores-chart';
  83. var chart = new widget.DashboardChartWidget3(self);
  84. chart.BuildHorizontalBarChart(name,CurrencyBase,label,body);
  85. }
  86. });
  87. }