# HG changeset patch
# User Jorge Garcia <jorge.garcia@openbravo.com>
# Date 1574941300 -3600
# Node ID b6280adc919c2178d17548cc34424717fd04b3ad
# Parent  a83e2cba244a6f71bb6405aaf72a754765c433d2
Fixed issue 42135: If the Serial Number of a product is not following
the 0000 XXXX XXXX pattern an exception is raised when coding/decoding

diff --git a/project/src/com/openbravo/pos/util/RFIDEncoding.java b/project/src/com/openbravo/pos/util/RFIDEncoding.java
--- a/project/src/com/openbravo/pos/util/RFIDEncoding.java
+++ b/project/src/com/openbravo/pos/util/RFIDEncoding.java
@@ -9,7 +9,6 @@
 
 package com.openbravo.pos.util;
 
-import java.math.BigInteger;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -59,8 +58,8 @@
         .leftPad(String.valueOf(Integer.parseInt(binaryCompanyPrefix, 2)), 13 - partition, '0');
 
     String itemReference = StringUtils
-        .leftPad(String.valueOf(Integer.parseInt(binaryItemReference, 2)), partition, '0');
-    String serialNumber = String.format("%012d", Integer.parseInt(binarySerialNumber, 2));
+        .leftPad(String.valueOf(Long.parseLong(binaryItemReference, 2)), partition, '0');
+    String serialNumber = String.format("%012d", Long.parseLong(binarySerialNumber, 2));
 
     String eanWithoutCheckDigit = companyPrefix + itemReference;
     int i = eanWithoutCheckDigit.length() - 1, oddSum = 0, evenSum = 0;
@@ -129,12 +128,7 @@
     String binaryItemReferenceString = StringUtils.leftPad(
         Integer.toBinaryString(Integer.valueOf(itemReference)), numberOfBitsOfItemReference, "0");
     String binarySerialNumberString = StringUtils
-        .leftPad((new BigInteger(serialNumber)).toString(2), 38, "0");
-    // if binary serial number length is higher than 38 chars, it is one error, and it generates one
-    // exception in HW Manager. To prevent it, we will cut the first digits
-    if (binarySerialNumberString.length() > 38) {
-      binarySerialNumberString = binarySerialNumberString.substring(0, 38);
-    }
+        .leftPad(Long.toBinaryString(Long.valueOf(serialNumber)), 38, "0");
 
     String binaryString = binaryHeaderString + binaryFilterString + binaryPartitionString
         + binaryCompanyPrefixString + binaryItemReferenceString + binarySerialNumberString;
