diff --git a/models/pos_config.py b/models/pos_config.py index 0b54bfcc88197457c98c1ad39d96bc7e6d7b68d9..0bef38c2e4da6dca6fe7e177fc545f70d1b1b833 100644 --- a/models/pos_config.py +++ b/models/pos_config.py @@ -9,9 +9,9 @@ class PosConfig(models.Model): is_print_container_qr = fields.Boolean( string='Impression QR Code Container') - mag_id = fields.Char("Identifiant du magasin") iface_print_qr_via_proxy = fields.Boolean( string='Imprimer via Proxy', help="Contournez l'impression du navigateur et les impressions via le proxy matériel.") url_qrcode = fields.Char("URL Mayam QR") - prefixe_qr = fields.Char("Identifiant émetteur", size=5) \ No newline at end of file + prefixe_qr = fields.Char("Identifiant émetteur", size=5) + categ_container = fields.Char("Catégorie du contenant", size=2) \ No newline at end of file diff --git a/static/src/js/barcode.js b/static/src/js/barcode.js index 0080125550643c59cab2dfb0d45b8e1a224aa4cc..e09e0b22cdb6a9b8a8a690249587faa0ab72f0bf 100644 --- a/static/src/js/barcode.js +++ b/static/src/js/barcode.js @@ -9,7 +9,7 @@ BarcodeParser.include({ // returns the checksum of the ean13, or -1 if the ean has not the correct length, ean must be a string ean_checksum_qr: function(ean){ var code = ean.split(''); - if(code.length !== 19){ + if(code.length !== 21){ return -1; } var oddsum = 0, evensum = 0, total = 0; @@ -27,9 +27,9 @@ BarcodeParser.include({ // returns a valid zero padded ean13 from an ean prefix. the ean prefix must be a string. sanitize_ean19: function(ean){ - ean = ean.substr(0,19); + ean = ean.substr(0,21); - return ean.substr(0,19) + this.ean_checksum_qr(ean); + return ean.substr(0,21) + this.ean_checksum_qr(ean); }, }); diff --git a/static/src/js/container.js b/static/src/js/container.js index f5139ec5e0bb06e2f77109665a6d9022d5e72548..e1e3a135da0c16806f4a8bf75d6ae8859936a76e 100644 --- a/static/src/js/container.js +++ b/static/src/js/container.js @@ -106,22 +106,33 @@ odoo.define('vracoop_pos_container_qrcode.container_print_qr', function (require }, get_receipt_render_env: function() { - var mag_name = this.pos.config.mag_id; var url_qr = this.pos.config.url_qrcode; - var prefixe_qr = this.pos.config.prefixe_qr; + var categ_container = this.pos.config.categ_container; var timestamp = Math.floor((new Date().getTime())/1000); var weight_str = (this.weight * 1000).toString(); weight_str = ("0000" + weight_str).slice(-4); + var prefixe_qr = ("00000" + this.pos.config.prefixe_qr).slice(-5); + +// Construction du code à 21 chiffres (timestamp+catégorie+num émetteur+poids) var ean19 = ''; - ean19 = ean19.concat(prefixe_qr,timestamp.toString(),weight_str); + ean19 = ean19.concat(timestamp.toString(),categ_container,prefixe_qr,weight_str); + +// Calcul de la clé de Luhn var ean20 = this.pos.barcode_reader.barcode_parser.sanitize_ean19(ean19); - var ean20_int = BigInt(ean20); - var code_base36 = ean20_int.toString(36); +// Récupération de chaque partie pour convertir en base 36 + var first_int = parseInt(ean20.substring(0,10)); + var second_int = parseInt(ean20.substring(10,21)); + var cle_int = parseInt(ean20.substr(-1)); + +// Conversion bae 36 + var base36_first = first_int.toString(36); + var base36_second = second_int.toString(36); + var base36_cle = cle_int.toString(36); - var url_qrcode = url_qr.concat(code_base36); + var url_qrcode = url_qr.concat(base36_cle,'-',base36_first,'-',base36_second); return { widget: this, diff --git a/views/pos_config_views.xml b/views/pos_config_views.xml index 59f9deeee4d2a2b2a095b76f5c63d78eb9e2e6ad..c57e8f84a47db5152e7dff6c71386d2bfbeda138 100644 --- a/views/pos_config_views.xml +++ b/views/pos_config_views.xml @@ -27,8 +27,8 @@ <field name="prefixe_qr" attrs="{'required': [('is_print_container_qr', '=', True)]}"/> </div> <div class="row mt16"> - <label for="mag_id" class="col-lg-3 o_light_label"/> - <field name="mag_id" /> + <label for="categ_container" class="col-lg-3 o_light_label"/> + <field name="categ_container" /> </div> <div class="row mt16"> <label for="iface_print_qr_via_proxy" class="col-lg-3 o_light_label"/>