5 changed files with 136 additions and 77 deletions
@ -0,0 +1,11 @@ |
|||||
|
//@odoo-module
|
||||
|
import { PosGlobalState} from 'point_of_sale.models'; |
||||
|
import Registries from 'point_of_sale.Registries'; |
||||
|
const StockLotGlobalState = (PosGlobalState) => class StockLotGlobalState extends PosGlobalState { |
||||
|
async _processData(loadedData) { |
||||
|
await super._processData(...arguments); |
||||
|
this.db.product_by_lot = loadedData['multi.barcode.products']; |
||||
|
this.db.product_by_lot_id = loadedData['multi_barcode'] |
||||
|
} |
||||
|
} |
||||
|
Registries.Model.extend(PosGlobalState, StockLotGlobalState); |
@ -0,0 +1,38 @@ |
|||||
|
odoo.define('pos_product_search_by_ref.product_product', function (require) { |
||||
|
'use strict'; |
||||
|
const DB = require('point_of_sale.DB'); |
||||
|
var core = require('web.core'); |
||||
|
var utils = require('web.utils'); |
||||
|
DB.include({ |
||||
|
search_product_in_category: function(category_id, query){ |
||||
|
var old_query = query |
||||
|
try { |
||||
|
query = query.replace(/[\[\]\(\)\+\*\?\.\-\!\&\^\$\|\~\_\{\}\:\,\\\/]/g,'.'); |
||||
|
query = query.replace(/ /g,'.+'); |
||||
|
var re = RegExp("([0-9]+):.*?"+utils.unaccent(query),"gi"); |
||||
|
}catch(_e){ |
||||
|
return []; |
||||
|
} |
||||
|
var results = []; |
||||
|
for(var i = 0; i < this.limit; i++){ |
||||
|
var r = re.exec(this.category_search_string[category_id]); |
||||
|
if(r){ |
||||
|
var id = Number(r[1]); |
||||
|
const product = this.get_product_by_id(id); |
||||
|
if (!(product.active && product.available_in_pos)) continue; |
||||
|
results.push(product); |
||||
|
}else if(this.product_by_lot_id[old_query]){ |
||||
|
const product = this.get_product_by_id(this.product_by_lot_id[old_query]); |
||||
|
if (!(product.active && product.available_in_pos)) continue; |
||||
|
if(!results.includes(product)){ |
||||
|
results.push(product); |
||||
|
} |
||||
|
}else{ |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
return results; |
||||
|
} |
||||
|
}) |
||||
|
return DB; |
||||
|
}); |
@ -1,73 +1,73 @@ |
|||||
odoo.define('multi_barcodes_pos.product', function (require) { |
odoo.define('multi_barcodes_pos.product', function(require) { |
||||
"use strict"; |
"use strict"; |
||||
var rpc = require('web.rpc'); |
var rpc = require('web.rpc'); |
||||
var models = require('point_of_sale.models'); |
var models = require('point_of_sale.models'); |
||||
var DB = require('point_of_sale.DB'); |
var DB = require('point_of_sale.DB'); |
||||
var utils = require('web.utils'); |
var utils = require('web.utils'); |
||||
|
|
||||
const Registries = require('point_of_sale.Registries'); |
const Registries = require('point_of_sale.Registries'); |
||||
|
|
||||
DB.include({ |
DB.include({ |
||||
|
|
||||
init: function(options){ |
init: function(options) { |
||||
this._super.apply(this, arguments); |
this._super.apply(this, arguments); |
||||
}, |
}, |
||||
add_products: function(products){ |
add_products: function(products) { |
||||
var stored_categories = this.product_by_category_id; |
var stored_categories = this.product_by_category_id; |
||||
if(!products instanceof Array){ |
if (!products instanceof Array) { |
||||
products = [products]; |
products = [products]; |
||||
} |
} |
||||
for(var i = 0, len = products.length; i < len; i++){ |
// console.log(products.length)
|
||||
var product = products[i]; |
for (var i = 0, len = products.length; i < len; i++) { |
||||
if (product.id in this.product_by_id) continue; |
var product = products[i]; |
||||
if (product.available_in_pos){ |
// console.log(product)
|
||||
var search_string = utils.unaccent(this._product_search_string(product)); |
if (product.id in this.product_by_id) continue; |
||||
var categ_id = product.pos_categ_id ? product.pos_categ_id[0] : this.root_category_id; |
if (product.available_in_pos) { |
||||
product.product_tmpl_id = product.product_tmpl_id[0]; |
var search_string = utils.unaccent(this._product_search_string(product)); |
||||
if(!stored_categories[categ_id]){ |
var categ_id = product.pos_categ_id ? product.pos_categ_id[0] : this.root_category_id; |
||||
stored_categories[categ_id] = []; |
product.product_tmpl_id = product.product_tmpl_id[0]; |
||||
} |
if (!stored_categories[categ_id]) { |
||||
stored_categories[categ_id].push(product.id); |
stored_categories[categ_id] = []; |
||||
|
} |
||||
|
stored_categories[categ_id].push(product.id); |
||||
|
|
||||
if(this.category_search_string[categ_id] === undefined){ |
if (this.category_search_string[categ_id] === undefined) { |
||||
this.category_search_string[categ_id] = ''; |
this.category_search_string[categ_id] = ''; |
||||
} |
} |
||||
this.category_search_string[categ_id] += search_string; |
this.category_search_string[categ_id] += search_string; |
||||
|
|
||||
var ancestors = this.get_category_ancestors_ids(categ_id) || []; |
var ancestors = this.get_category_ancestors_ids(categ_id) || []; |
||||
|
|
||||
for(var j = 0, jlen = ancestors.length; j < jlen; j++){ |
for (var j = 0, jlen = ancestors.length; j < jlen; j++) { |
||||
var ancestor = ancestors[j]; |
var ancestor = ancestors[j]; |
||||
if(! stored_categories[ancestor]){ |
if (!stored_categories[ancestor]) { |
||||
stored_categories[ancestor] = []; |
stored_categories[ancestor] = []; |
||||
} |
} |
||||
stored_categories[ancestor].push(product.id); |
stored_categories[ancestor].push(product.id); |
||||
|
|
||||
if( this.category_search_string[ancestor] === undefined){ |
if (this.category_search_string[ancestor] === undefined) { |
||||
this.category_search_string[ancestor] = ''; |
this.category_search_string[ancestor] = ''; |
||||
|
} |
||||
|
this.category_search_string[ancestor] += search_string; |
||||
} |
} |
||||
this.category_search_string[ancestor] += search_string; |
|
||||
} |
} |
||||
} |
this.product_by_id[product.id] = product; |
||||
this.product_by_id[product.id] = product; |
if (product.barcode) { |
||||
if(product.barcode){ |
this.product_by_barcode[product.barcode] = product; |
||||
this.product_by_barcode[product.barcode] = product; |
} |
||||
} |
for (var t = 0; t < product.product_multi_barcodes.length; t++) { |
||||
|
var self = this; |
||||
for(var t=0;t < product.product_multi_barcodes.length;t++){ |
rpc.query({ |
||||
var self = this; |
model: 'multi.barcode.products', |
||||
rpc.query({ |
method: 'get_barcode_val', |
||||
model: 'multi.barcode.products', |
args: [product.product_multi_barcodes[t], product.id], |
||||
method: 'get_barcode_val', |
}).then(function(barcode_val) { |
||||
args: [product.product_multi_barcodes[t], product.id], |
self.product_by_barcode[barcode_val[0]] = self.product_by_id[barcode_val[1]]; |
||||
}).then(function (barcode_val) { |
}); |
||||
|
} |
||||
|
|
||||
self.product_by_barcode[barcode_val[0]] = self.product_by_id[barcode_val[1]]; |
|
||||
}); |
|
||||
} |
} |
||||
|
}, |
||||
} |
|
||||
}, |
|
||||
}); |
}); |
||||
|
|
||||
}); |
}); |
Loading…
Reference in new issue