1 openerp.pos_barcodes = function(instance){
2 var module = instance.point_of_sale;
3 var _t = instance.web._t;
5 // At POS Startup, load the barcode nomenclature and add it to the pos model
6 module.PosModel.prototype.models.push({
7 model: 'barcode.nomenclature',
8 fields: ['name','rule_ids'],
9 domain: function(self){ return [] },
10 loaded: function(self,nomenclatures){
11 if (self.config.barcode_nomenclature_id) {
12 for (var i = 0; i < nomenclatures.length; i++) {
13 if (nomenclatures[i].id === self.config.barcode_nomenclature_id[0]) {
14 self.nomenclature = nomenclatures[i];
18 self.nomenclature = self.nomenclature || null;
22 module.PosModel.prototype.models.push({
23 model: 'barcode.rule',
24 fields: ['name','priority','type','pattern'],
25 domain: function(self){ return [['barcode_nomenclature_id','=',self.nomenclature ? self.nomenclature.id : 0]]; },
26 loaded: function(self,rules){
27 if (self.nomenclature) {
28 rules = rules.sort(function(a,b){ return b.priority - a.priority; });
29 self.nomenclature.rules = rules;
30 for (var i = 0; i < rules.length; i++) {
31 var pattern = rules[i].pattern;
32 pattern = pattern.replace(/[x\*]/gi,'x');
34 while (pattern.length < 12) {
38 rules[i].pattern = pattern;
44 module.BarcodeReader.include({
45 parse_ean: function(ean) {
55 if (!this.pos.nomenclature) {
56 return this._super(ean);
59 if (!this.check_ean(ean)) {
63 function is_number(char) {
64 n = char.charCodeAt(0);
65 return n >= 48 && n <= 57;
68 function match_pattern(ean,pattern) {
69 for (var i = 0; i < pattern.length; i++) {
72 if( is_number(p) && p !== e ){
79 function get_value(ean,pattern){
82 for(var i = 0; i < pattern.length; i++){
84 var v = parseInt(ean[i]);
88 }else if( p === 'D'){ // FIXME precision ...
90 value += v * Math.pow(10,-decimals);
96 function get_basecode(ean,pattern){
98 for(var i = 0; i < pattern.length; i++){
101 if( p === 'x' || is_number(p)){
107 return self.sanitize_ean(base);
110 var rules = this.pos.nomenclature.rules;
112 for (var i = 0; i < rules.length; i++) {
113 if (match_pattern(ean,rules[i].pattern)) {
114 parse_result.type = rules[i].type;
115 parse_result.value = get_value(ean,rules[i].pattern);
116 parse_result.base_code = get_basecode(ean,rules[i].pattern);