sale_order_curve.js 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. openerp.eiru_sale_order = function (instance, local) {
  2. local.widgetInstance = null;
  3. local.parentInstance = null;
  4. local.SaleOrderCurveWidget = instance.Widget.extend({
  5. template : "eiru_sale_order.SaleOrderCurve",
  6. init:function(parent){
  7. this._super(parent);
  8. this.buttons = parent.$buttons;
  9. },
  10. updateId : function(id){
  11. var self = this;
  12. self.id=id;
  13. },
  14. reloadLine: function() {
  15. local.parentInstance.reload();
  16. },
  17. start: function () {
  18. var self = this;
  19. this.$el.click(function () {
  20. self.fecthInitial();
  21. });
  22. },
  23. fecthInitial: function(){
  24. var id= openerp.webclient._current_state.id;
  25. var self = this;
  26. self.fecthSale(id).then(function(sale){
  27. return sale;
  28. }).then(function(sale){
  29. self.sale = sale;
  30. return self.fetchProductTemplate();
  31. }).then(function(ProductTemplate){
  32. self.ProductTemplate = ProductTemplate;
  33. return self.fetchProductProduct();
  34. }).then(function(ProductProduct){
  35. self.ProductProduct = ProductProduct;
  36. self.inicializarBuscador();
  37. });
  38. return false;
  39. },
  40. fecthSale: function(id){
  41. var defer = $.Deferred();
  42. var fields=['id','name','partner_id','state'];
  43. var domain=[['id','=', id]];
  44. var Sale = new instance.web.Model('sale.order');
  45. Sale.query(fields).filter(domain).order_by('id').all().then(function(results){
  46. defer.resolve(results);
  47. });
  48. return defer;
  49. },
  50. fetchProductTemplate: function () {
  51. var defer = $.Deferred();
  52. var fields=['id','name','curva'];
  53. var domain=[['active','=', true],['product_website_sale_type','=', true],['sale_ok','=', true]];
  54. var ProductTemplate = new instance.web.Model('product.template');
  55. ProductTemplate.query(fields).filter(domain).order_by('id').all().then(function(results){
  56. defer.resolve(results);
  57. });
  58. return defer;
  59. },
  60. fetchProductProduct: function () {
  61. var defer = $.Deferred();
  62. var fields=['id','name','product_tmpl_id','attribute_str','default_code','ean13'];
  63. var domain=[['active','=', true],['sale_ok','=', true]];
  64. var ProductProduct = new instance.web.Model('product.product');
  65. ProductProduct.query(fields).filter(domain).order_by('id').all().then(function(results){
  66. defer.resolve(results);
  67. });
  68. return defer;
  69. },
  70. valorNull:function(dato){
  71. var valor ="";
  72. if (dato){
  73. valor=dato;
  74. }
  75. return valor;
  76. },
  77. getTemplate : function(id){
  78. var self = this;
  79. return _.filter(self.ProductTemplate, function(item){
  80. return item.id == id;
  81. });
  82. },
  83. getProduct : function(product_tmpl_id){
  84. var self = this;
  85. return _.filter(self.ProductProduct, function(item){
  86. return item.product_tmpl_id[0] == product_tmpl_id;
  87. });
  88. },
  89. getProductProduct : function(id){
  90. var self = this;
  91. return _.filter(self.ProductProduct, function(item){
  92. return item.id == id;
  93. });
  94. },
  95. inicializarBuscador: function () {
  96. var self = this;
  97. var selectProduct;
  98. var searchType = $('#SearchByCurve').is(":checked");
  99. if(searchType){
  100. var results = self.ProductTemplate;
  101. results = _.map(results, function (item) {
  102. return {
  103. label: item.name,
  104. value: item.id + '-'+ item.name
  105. }
  106. });
  107. self.$('#productSearch').autocomplete({
  108. source: results,
  109. minLength:4,
  110. response: function (e, ui){
  111. if (ui.content instanceof Array && ui.content.length === 1) {
  112. selectProduct = ui.content[0];
  113. $(this).autocomplete("close");
  114. $(this).val('');
  115. self.factInsert(selectProduct);
  116. }
  117. },
  118. select: function (e, ui) {
  119. $(this).val('');
  120. selectProduct = ui.item;
  121. self.factInsert(selectProduct);
  122. return false;
  123. }
  124. });
  125. }else{
  126. var results = self.ProductProduct;
  127. results = _.map(results, function (item) {
  128. return {
  129. label: '[ ' + self.valorNull(item.default_code) + ' - ' + self.valorNull(item.ean13) + ' ] ' + item.name + ' (' + self.valorNull(item.attribute_str) + ')',
  130. value: item.id + ' - '+ item.name + ' (' + item.attribute_str + ')'
  131. }
  132. });
  133. $('#productSearch').autocomplete({
  134. source: results,
  135. minLength: 4,
  136. response: function (e, ui){
  137. if (ui.content instanceof Array && ui.content.length === 1) {
  138. selectProduct = ui.content[0];
  139. $(this).autocomplete("close");
  140. $(this).val('');
  141. self.factInsertProduct(selectProduct);
  142. return false;
  143. }
  144. },
  145. select: function (e, ui) {
  146. $(this).val('');
  147. selectProduct = ui.item;
  148. self.factInsertProduct(selectProduct);
  149. return false;
  150. }
  151. });
  152. }
  153. },
  154. factInsert:function(selectProduct){
  155. var self = this;
  156. var product = selectProduct.value.split('-');
  157. var template = self.getTemplate(product[0]);
  158. var variant = self.getProduct(product[0]);
  159. template = template[0].curva.split(',');
  160. var qty = 0;
  161. var contador = 0;
  162. for (var i = 0; i < variant.length; i++) {
  163. qty = template[contador];
  164. contador += 1;
  165. self.joinSaleLine(variant[i].id, qty).then(function(results) {
  166. return results;
  167. }).then(function(){
  168. self.reloadLine();
  169. });
  170. if (contador === template.length) {
  171. contador = 0;
  172. }
  173. }
  174. },
  175. factInsertProduct:function(selectProduct){
  176. var self = this;
  177. var product = selectProduct.value.split('-');
  178. var variant = self.getProductProduct(product[0]);
  179. var qty = 1;
  180. self.joinSaleLine(variant[0].id, qty).then(function(results) {
  181. return results;
  182. }).then(function(){
  183. self.reloadLine();
  184. });
  185. },
  186. joinSaleLine: function(product_id, qty) {
  187. var self = this;
  188. var defer = $.Deferred();
  189. var sale = new openerp.web.Model('sale.order');
  190. sale.call('join_sale_lines',[
  191. {
  192. id: self.sale[0].id,
  193. product_id: product_id,
  194. product_uom_qty: qty
  195. }
  196. ], {
  197. context: new openerp.web.CompoundContext()
  198. }).then(function(results) {
  199. defer.resolve(results);
  200. });
  201. return defer;
  202. },
  203. });
  204. if (instance.web && instance.web.FormView) {
  205. instance.web.FormView.include({
  206. load_form: function (record) {
  207. this._super.apply(this, arguments);
  208. if (this.model !== 'sale.order') return;
  209. local.parentInstance = this;
  210. if (local.widgetInstance) {
  211. local.widgetInstance.updateId(record.id);
  212. }
  213. local.widgetInstance = new local.SaleOrderCurveWidget(this);
  214. var elemento = this.$el.find('.oe_form_sheet.oe_form_sheet_width');
  215. elemento = elemento.find('.product_search_box');
  216. local.widgetInstance.appendTo(elemento);
  217. local.widgetInstance.updateId(record.id);
  218. }
  219. });
  220. }
  221. }