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 rules = rules.sort(function(a,b){ return b.priority - a.priority; });
28 self.nomenclature.rules = rules;
29 for (var i = 0; i < rules.length; i++) {
30 var pattern = rules[i].pattern;
31 pattern = pattern.replace(/[x\*]/gi,'x');
33 while (pattern.length < 12) {
37 rules[i].pattern = pattern;
42 module.BarcodeReader.include({
43 parse_ean: function(ean) {
53 if (!this.pos.nomenclature) {
54 return this._super(ean);
57 if (!this.check_ean(ean)) {
61 function is_number(char) {
62 n = char.charCodeAt(0);
63 return n >= 48 && n <= 57;
66 function match_pattern(ean,pattern) {
67 for (var i = 0; i < pattern.length; i++) {
70 if( is_number(p) && p !== e ){
77 function get_value(ean,pattern){
80 for(var i = 0; i < pattern.length; i++){
82 var v = parseInt(ean[i]);
86 }else if( p === 'D'){ // FIXME precision ...
88 value += v * Math.pow(10,-decimals);
94 function get_basecode(ean,pattern){
96 for(var i = 0; i < pattern.length; i++){
99 if( p === 'x' || is_number(p)){
105 return self.sanitize_ean(base);
108 var rules = this.pos.nomenclature.rules;
110 for (var i = 0; i < rules.length; i++) {
111 if (match_pattern(ean,rules[i].pattern)) {
112 parse_result.type = rules[i].type;
113 parse_result.value = get_value(ean,rules[i].pattern);
114 parse_result.base_code = get_basecode(ean,rules[i].pattern);