product_product_utility.js 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. openerp.product_product_utility = function (instance, local) {
  2. local.widgetInstance = null;
  3. local.ProductUtilityWidget = instance.Widget.extend({
  4. template: 'product_product_utility.ProductProductUtility',
  5. productUtility:[],
  6. accountInvoice:[],
  7. lineInvoice:[],
  8. currencyRate:[],
  9. resCompany:[],
  10. init: function (parent) {
  11. this._super(parent);
  12. },
  13. actualizar: function (id) {
  14. var self = this;
  15. var table = this.$el.find('#table');
  16. table.bootstrapTable({data : self.productUtility});
  17. self.fetchInitial(id);
  18. },
  19. // Iniciar
  20. fetchInitial: function(id){
  21. var self= this;
  22. self.fetchInvoiceLine(id).then(function(lineInvoice){
  23. return lineInvoice;
  24. }).then(function(lineInvoice){
  25. self.lineInvoice = lineInvoice;
  26. return self.fetchInvoice(lineInvoice);
  27. }).then(function(accountInvoice){
  28. self.accountInvoice = accountInvoice;
  29. return self.fecthCurrencyRate();
  30. }).then(function(currencyRate){
  31. self.currencyRate =currencyRate;
  32. return self.fetchResCompany();
  33. }).then(function(resCompany){
  34. self.resCompany = resCompany;
  35. return self.fetchFilterInvoice();
  36. });
  37. },
  38. // Obtener Linea de la compra/ venta
  39. fetchInvoiceLine: function(product_id){
  40. var self = this;
  41. var defer = $.Deferred();
  42. var fields=['id','invoice_id','price_unit','product_id','quantity'];
  43. var domain=[['product_id', '=', product_id]]
  44. var invoiceLine = new instance.web.Model('account.invoice.line');
  45. invoiceLine.query(fields).filter(domain).all().then(function(results){
  46. defer.resolve(results);
  47. });
  48. return defer;
  49. },
  50. // obtener la factura de compra / venta
  51. fetchInvoice: function(invoice_id){
  52. var self= this
  53. var defer = $.Deferred();
  54. var id =_.flatten(_.map(invoice_id,function(map){
  55. return map.invoice_id[0];
  56. }));
  57. fields=['id','type','state','origen', 'date_invoice','currency_id'];
  58. domain=[['id', '=', id],['state', '=', ['open','paid']]];
  59. var invoice = new instance.web.Model('account.invoice');
  60. invoice.query(fields).filter(domain).all().then(function(results){
  61. defer.resolve(results);
  62. });
  63. return defer;
  64. },
  65. // Cambio de la moneda
  66. fecthCurrencyRate:function(){
  67. var defer = $.Deferred();
  68. var currency_Rate = new instance.web.Model('res.currency.rate');
  69. var fields = ['id', 'name', 'currency_id', 'rate', 'create_date'];
  70. var domain = [['currency_id', '=', [166 , 20, 7, 3]]];
  71. currency_Rate.query(fields).filter(domain).all().then(function (results) {
  72. defer.resolve(results);
  73. });
  74. return defer;
  75. },
  76. //Comapnia
  77. fetchResCompany: function () {
  78. var self = this;
  79. var defer = $.Deferred();
  80. var fields =['id','name', 'currency_id','logo'];
  81. var domain =[['id', '=', 1]];
  82. var resCompany = new instance.web.Model('res.company');
  83. resCompany.query(fields).filter(domain).all().then(function (results) {
  84. defer.resolve(results);
  85. });
  86. return defer;
  87. },
  88. // Separa Invoice
  89. fetchFilterInvoice(){
  90. var self = this;
  91. var invoicepurchase;
  92. var invoicesale;
  93. var linepurchase;
  94. var linesale;
  95. var company;
  96. company = _.map(self.resCompany, function(map){
  97. return map.currency_id[1];
  98. });
  99. invoicesale = _.filter(self.accountInvoice, function(filter){
  100. return filter.type==='out_invoice';
  101. });
  102. linesale= self.getTotInvoiceLine(invoicesale);
  103. if(!linesale){
  104. linesale={};
  105. linesale.total=0;
  106. linesale.qty =0;
  107. }
  108. // Facturas Compras
  109. invoicepurchase = _.filter(self.accountInvoice, function(filter){
  110. return filter.type==='in_invoice';
  111. });
  112. linepurchase = self.getTotInvoiceLine(invoicepurchase);
  113. if(!linepurchase){
  114. linepurchase={};
  115. linepurchase.total=0;
  116. linepurchase.qty =0;
  117. }
  118. var venta = linesale.total / linesale.qty;
  119. var compra = linepurchase.total / linepurchase.qty;
  120. self.$el.find('.product_utility-content.sale').find('a').text(accounting.formatNumber((venta),2, ".", ","));
  121. self.$el.find('.product_utility-content.puchase').find('a').text(accounting.formatNumber((compra),2, ".", ","));
  122. self.$el.find('.product_utility-content.utility').find('a').text(accounting.formatNumber((venta - compra),2, ".", ","));
  123. self.$el.find('.product_utility-footer').find('span').text("Moneda Base "+company);
  124. },
  125. //Get Invoice
  126. getTotInvoiceLine: function(invoice){
  127. var self = this;
  128. var itemInvoice;
  129. var itemRate;
  130. var itemLine;
  131. var qty = 0;
  132. var total = 0;
  133. var invoiceNew = [];
  134. for (var i = 0; i < invoice.length; i++) {
  135. itemInvoice = invoice[i];
  136. // Consultar currency_Rate
  137. itemRate = self.getCutrrencyRate(itemInvoice.currency_id[0]);
  138. if (!itemRate){
  139. itemRate={};
  140. itemRate.rate=1;
  141. }
  142. // Consultar invoice line
  143. itemLine = self.getInvoiceLine(itemInvoice.id);
  144. if (!itemLine){
  145. itemLine={};
  146. itemLine.quantity=0;
  147. itemLine.price_unit=0;
  148. }
  149. _.each(itemLine, function(line){
  150. qty = qty+line.quantity;
  151. total = total+((line.price_unit / itemRate.rate) * line.quantity);
  152. });
  153. }
  154. invoiceNew.push({ qty :qty,
  155. total :total
  156. });
  157. return invoiceNew.shift();
  158. },
  159. // Obtener Cambio
  160. getCutrrencyRate: function(currency_id){
  161. return _.filter(this.currencyRate, function(rate){
  162. return rate.currency_id[0] === currency_id;
  163. }).shift();
  164. },
  165. // FIltar la Linea de la factura
  166. getInvoiceLine: function(id_invoice){
  167. var self = this;
  168. return _.filter(self.lineInvoice,function(item){
  169. return item.invoice_id[0] == id_invoice;
  170. });
  171. },
  172. });
  173. if (instance.web && instance.web.FormView) {
  174. instance.web.FormView.include({
  175. load_record: function (record) {
  176. this._super.apply(this, arguments);
  177. if (this.model !== 'product.product') return;
  178. if (local.widgetInstance) {
  179. local.widgetInstance.actualizar(record.id);
  180. }
  181. if (this.$el.find('.product_utility_class').length != 0) return;
  182. local.widgetInstance = new local.ProductUtilityWidget(this);
  183. var elemento = this.$el.find('.notebook-page-utility');
  184. local.widgetInstance.appendTo(elemento);
  185. local.widgetInstance.actualizar(record.id);
  186. }
  187. });
  188. }
  189. }