123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- openerp.eiru_sale_order = function (instance, local) {
- local.widgetInstance = null;
- local.parentInstance = null;
- local.SaleOrderCurveWidget = instance.Widget.extend({
- template : "eiru_sale_order.SaleOrderCurve",
- init:function(parent){
- this._super(parent);
- this.buttons = parent.$buttons;
- },
- updateId : function(id){
- var self = this;
- self.id=id;
- },
- reloadLine: function() {
- local.parentInstance.reload();
- },
- start: function () {
- var self = this;
- this.$el.click(function () {
- self.fecthInitial();
- });
- },
- fecthInitial: function(){
- var id= openerp.webclient._current_state.id;
- var self = this;
- self.fecthSale(id).then(function(sale){
- return sale;
- }).then(function(sale){
- self.sale = sale;
- return self.fetchProductTemplate();
- }).then(function(ProductTemplate){
- self.ProductTemplate = ProductTemplate;
- return self.fetchProductProduct();
- }).then(function(ProductProduct){
- self.ProductProduct = ProductProduct;
- self.inicializarBuscador();
- });
- return false;
- },
- fecthSale: function(id){
- var defer = $.Deferred();
- var fields=['id','name','partner_id','state'];
- var domain=[['id','=', id]];
- var Sale = new instance.web.Model('sale.order');
- Sale.query(fields).filter(domain).order_by('id').all().then(function(results){
- defer.resolve(results);
- });
- return defer;
- },
-
- fetchProductTemplate: function () {
- var defer = $.Deferred();
- var fields=['id','name','curva'];
- var domain=[['active','=', true],['product_website_sale_type','=', true],['sale_ok','=', true]];
- var ProductTemplate = new instance.web.Model('product.template');
- ProductTemplate.query(fields).filter(domain).order_by('id').all().then(function(results){
- defer.resolve(results);
- });
- return defer;
- },
- fetchProductProduct: function () {
- var defer = $.Deferred();
- var fields=['id','name','product_tmpl_id','attribute_str','default_code','ean13'];
- var domain=[['active','=', true],['sale_ok','=', true]];
- var ProductProduct = new instance.web.Model('product.product');
- ProductProduct.query(fields).filter(domain).order_by('id').all().then(function(results){
- defer.resolve(results);
- });
- return defer;
- },
- valorNull:function(dato){
- var valor ="";
- if (dato){
- valor=dato;
- }
- return valor;
- },
- getTemplate : function(id){
- var self = this;
- return _.filter(self.ProductTemplate, function(item){
- return item.id == id;
- });
- },
-
- getProduct : function(product_tmpl_id){
- var self = this;
- return _.filter(self.ProductProduct, function(item){
- return item.product_tmpl_id[0] == product_tmpl_id;
- });
- },
- getProductProduct : function(id){
- var self = this;
- return _.filter(self.ProductProduct, function(item){
- return item.id == id;
- });
- },
- inicializarBuscador: function () {
- var self = this;
- var selectProduct;
- var searchType = $('#SearchByCurve').is(":checked");
- if(searchType){
- var results = self.ProductTemplate;
- results = _.map(results, function (item) {
- return {
- label: item.name,
- value: item.id + '-'+ item.name
- }
- });
- self.$('#productSearch').autocomplete({
- source: results,
- minLength:4,
- response: function (e, ui){
- if (ui.content instanceof Array && ui.content.length === 1) {
- selectProduct = ui.content[0];
- $(this).autocomplete("close");
- $(this).val('');
- self.factInsert(selectProduct);
- }
- },
- select: function (e, ui) {
- $(this).val('');
- selectProduct = ui.item;
- self.factInsert(selectProduct);
- return false;
- }
- });
- }else{
- var results = self.ProductProduct;
- results = _.map(results, function (item) {
- return {
- label: '[ ' + self.valorNull(item.default_code) + ' - ' + self.valorNull(item.ean13) + ' ] ' + item.name + ' (' + self.valorNull(item.attribute_str) + ')',
- value: item.id + ' - '+ item.name + ' (' + item.attribute_str + ')'
- }
- });
- $('#productSearch').autocomplete({
- source: results,
- minLength: 4,
- response: function (e, ui){
- if (ui.content instanceof Array && ui.content.length === 1) {
- selectProduct = ui.content[0];
- $(this).autocomplete("close");
- $(this).val('');
- self.factInsertProduct(selectProduct);
- return false;
- }
- },
- select: function (e, ui) {
- $(this).val('');
- selectProduct = ui.item;
- self.factInsertProduct(selectProduct);
- return false;
- }
- });
- }
- },
- factInsert:function(selectProduct){
- var self = this;
- var product = selectProduct.value.split('-');
- var template = self.getTemplate(product[0]);
- var variant = self.getProduct(product[0]);
- template = template[0].curva.split(',');
- var qty = 0;
- var contador = 0;
- for (var i = 0; i < variant.length; i++) {
- qty = template[contador];
- contador += 1;
- self.joinSaleLine(variant[i].id, qty).then(function(results) {
- return results;
- }).then(function(){
- self.reloadLine();
- });
- if (contador === template.length) {
- contador = 0;
- }
- }
- },
- factInsertProduct:function(selectProduct){
- var self = this;
- var product = selectProduct.value.split('-');
- var variant = self.getProductProduct(product[0]);
- var qty = 1;
- self.joinSaleLine(variant[0].id, qty).then(function(results) {
- return results;
- }).then(function(){
- self.reloadLine();
- });
- },
- joinSaleLine: function(product_id, qty) {
- var self = this;
- var defer = $.Deferred();
- var sale = new openerp.web.Model('sale.order');
- sale.call('join_sale_lines',[
- {
- id: self.sale[0].id,
- product_id: product_id,
- product_uom_qty: qty
- }
- ], {
- context: new openerp.web.CompoundContext()
- }).then(function(results) {
- defer.resolve(results);
- });
- return defer;
- },
- });
- if (instance.web && instance.web.FormView) {
- instance.web.FormView.include({
- load_form: function (record) {
- this._super.apply(this, arguments);
- if (this.model !== 'sale.order') return;
- local.parentInstance = this;
- if (local.widgetInstance) {
- local.widgetInstance.updateId(record.id);
- }
- local.widgetInstance = new local.SaleOrderCurveWidget(this);
- var elemento = this.$el.find('.oe_form_sheet.oe_form_sheet_width');
- elemento = elemento.find('.product_search_box');
- local.widgetInstance.appendTo(elemento);
- local.widgetInstance.updateId(record.id);
- }
- });
- }
- }
|