From 0bb6db02ae6e3a33415e85037911672042c6a391 Mon Sep 17 00:00:00 2001
From: Juliana <juliana@le-filament.com>
Date: Wed, 26 Jan 2022 16:46:52 +0100
Subject: [PATCH] [ADD]Add category + new format code url

---
 models/pos_config.py       |  4 ++--
 static/src/js/barcode.js   |  6 +++---
 static/src/js/container.js | 23 +++++++++++++++++------
 views/pos_config_views.xml |  4 ++--
 4 files changed, 24 insertions(+), 13 deletions(-)

diff --git a/models/pos_config.py b/models/pos_config.py
index 0b54bfc..0bef38c 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 0080125..e09e0b2 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 f5139ec..e1e3a13 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 59f9dee..c57e8f8 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"/>
-- 
GitLab