details:   https://code.openbravo.com/erp/devel/pi/rev/b6331343739c
changeset: 34196:b6331343739c
user:      Guillermo Alvarez de Eulate <guillermo.alvarez <at> openbravo.com>
date:      Thu Jun 14 08:54:42 2018 +0200
summary:   Related to issue 38751: Update M_GETJSONDESCRIPTION with last changes

diffstat:

 src-db/database/model/functions/M_GETJSONDESCRIPTION.xml |  71 ++++++++++++---
 1 files changed, 54 insertions(+), 17 deletions(-)

diffs (109 lines):

diff -r f19a735107f1 -r b6331343739c 
src-db/database/model/functions/M_GETJSONDESCRIPTION.xml
--- a/src-db/database/model/functions/M_GETJSONDESCRIPTION.xml  Wed Jun 13 
19:35:51 2018 +0000
+++ b/src-db/database/model/functions/M_GETJSONDESCRIPTION.xml  Thu Jun 14 
08:54:42 2018 +0200
@@ -26,7 +26,7 @@
  * under the License.
  * The Original Code is Openbravo ERP.
  * The Initial Developer of the Original Code is Openbravo SLU
- * All portions are Copyright (C) 2017 Openbravo SLU
+ * All portions are Copyright (C) 2017-2018 Openbravo SLU
  * All Rights Reserved.
  * Contributor(s):  ______________________________________.
  *************************************************************************
@@ -41,6 +41,10 @@
   v_serno VARCHAR2(2000):='';
   v_lot VARCHAR2(2000):='';
   v_guaranteedate VARCHAR2(2000):='';
+  v_escaped_serno VARCHAR2(2000):='';
+  v_escaped_lot VARCHAR2(2000):='';
+  v_escaped_guaranteedate VARCHAR2(2000):='';
+  v_escaped_attvalue VARCHAR2(2000):='';
   v_serno_sk VARCHAR(60):='SerialNoLabel';
   v_guaranteedate_sk VARCHAR(60):='ExpirationDateLabel';
   v_lot_sk VARCHAR(60):='LotLabel';
@@ -48,6 +52,11 @@
   v_guaranteedate_label AD_Message.MsgText%TYPE;
   v_lot_label AD_Message.MsgText%TYPE;
   v_language_code VARCHAR(6);
+  v_att_set_instance_id_to_use VARCHAR(32);
+  v_ref_inv_id VARCHAR(32);
+  v_backslash VARCHAR(1):= CHR(92);
+  v_two_backslash VARCHAR(2);
+  v_backslash_and_quote VARCHAR(2);
   TYPE RECORD IS REF CURSOR;
   Cur_Attribute RECORD;
   
@@ -56,19 +65,6 @@
   select ad_message_get2(v_serno_sk, v_language_code) INTO v_serno_label from 
dual;
   select ad_message_get2(v_guaranteedate_sk, v_language_code) INTO 
v_guaranteedate_label from dual;
   select ad_message_get2(v_lot_sk, v_language_code) INTO v_lot_label from dual;
-  
-  FOR Cur_Attribute IN
-    (SELECT mai.m_attribute_id as attributeId, coalesce(to_char(mai.value), 
'') as attributeValue, ma.name as attributeName, mau.seqno as seqNo, 
ma.ismandatory as isMandatory
-     FROM m_attributeinstance mai
-     INNER JOIN m_attribute ma on (ma.m_attribute_id=mai.m_attribute_id)
-     INNER JOIN m_attributesetinstance masi on 
(masi.m_attributesetinstance_id=mai.m_attributesetinstance_id)
-     INNER JOIN m_attributeuse mau on (ma.m_attribute_id = mau.m_attribute_id 
and masi.m_attributeset_id = mau.m_attributeset_id)
-     WHERE mai.m_attributesetinstance_id = p_attributesetinstance_id
-     ORDER BY seqno asc, ma.name)
-  LOOP
-    v_json:=v_json || '"' || Cur_Attribute.attributeId || '":{"value":"' || 
Cur_Attribute.attributeValue || '","name":"' || Cur_Attribute.attributeName || 
'","ismandatory":' || (CASE WHEN (Cur_Attribute.isMandatory = 'Y') THEN 'true' 
ELSE 'false' END)  || ',"seqno":' || Cur_Attribute.seqNo || '},';
-  END LOOP;
-  
   SELECT coalesce(to_char(case when mas.M_SERNOCTL_ID is null AND 
p_exclude_characters = 'N' then concat('#', masi.serno) else masi.serno end), 
''),
          coalesce(to_char(case when mas.M_LOTCTL_ID is null AND 
p_exclude_characters = 'N' then concat('L', masi.lot) else masi.lot end),  ''), 
          coalesce(to_char(TO_DATE(masi.guaranteedate), p_dateformatsql), '')
@@ -79,9 +75,50 @@
   INNER JOIN m_attributeset mas on (mas.m_attributeset_id = 
masi.m_attributeset_id)
   where masi.m_attributesetinstance_id = p_attributesetinstance_id;
 
-  v_json:=v_json || '"lot":{"value":"' || v_lot || '","name":"lot","label":"' 
|| v_lot_label || '"},';
-  v_json:=v_json || '"serialno":{"value":"' || v_serno || 
'","name":"serialno","label":"' || v_serno_label || '"},';
-  v_json:=v_json || '"guaranteedate":{"value":"' || v_guaranteedate || 
'","name":"guaranteedate","label":"' || v_guaranteedate_label || '"}';
+  v_two_backslash := v_backslash || v_backslash;
+  v_backslash_and_quote := v_backslash || '"';
+  
+  v_escaped_lot := replace(v_lot, CHR(10), '');
+  v_escaped_lot := replace(v_escaped_lot, CHR(13), '');
+  v_escaped_lot := replace(v_escaped_lot, v_backslash, v_two_backslash);
+  v_escaped_lot := replace(v_escaped_lot, '"', v_backslash_and_quote);
+  
+  v_escaped_serno := replace(v_serno, CHR(10), '');
+  v_escaped_serno := replace(v_escaped_serno, CHR(13), '');
+  v_escaped_serno := replace(v_escaped_serno, v_backslash, v_two_backslash);
+  v_escaped_serno := replace(v_escaped_serno, '"', v_backslash_and_quote);
+  
+  v_escaped_guaranteedate := replace(v_guaranteedate, CHR(10), '');
+  v_escaped_guaranteedate := replace(v_escaped_guaranteedate, CHR(13), '');
+  v_escaped_guaranteedate := replace(v_escaped_guaranteedate, v_backslash, 
v_two_backslash);
+  v_escaped_guaranteedate := replace(v_escaped_guaranteedate, '"', 
v_backslash_and_quote);
+  
+  v_json:=v_json || '"lot":{"value":"' || v_escaped_lot || 
'","name":"lot","label":"' || v_lot_label || '"},';
+  v_json:=v_json || '"serialno":{"value":"' || v_escaped_serno || 
'","name":"serialno","label":"' || v_serno_label || '"},';
+  v_json:=v_json || '"guaranteedate":{"value":"' || v_escaped_guaranteedate || 
'","name":"guaranteedate","label":"' || v_guaranteedate_label || '"}';
+
+  SELECT m_refinventory_id, parent_attributesetinstance_id
+  INTO v_ref_inv_id, v_att_set_instance_id_to_use
+  FROM m_attributesetinstance
+  WHERE m_attributesetinstance_id = p_attributesetinstance_id;
+  
+  IF (v_ref_inv_id IS NULL) THEN
+    v_att_set_instance_id_to_use:=p_attributesetinstance_id;
+  END IF;
+  
+  FOR Cur_Attribute IN
+    (SELECT mai.m_attribute_id as attributeId, coalesce(to_char(mai.value), 
'') as attributeValue, ma.name as attributeName
+     FROM m_attributeinstance mai
+     INNER JOIN m_attribute ma on (ma.m_attribute_id=mai.m_attribute_id)
+     WHERE mai.m_attributesetinstance_id = v_att_set_instance_id_to_use
+     ORDER BY ma.name)
+  LOOP
+    v_escaped_attvalue := replace(Cur_Attribute.attributeValue, CHR(10), '');
+    v_escaped_attvalue := replace(v_escaped_attvalue, CHR(13), '');
+    v_escaped_attvalue := replace(v_escaped_attvalue, v_backslash, 
v_two_backslash);
+    v_escaped_attvalue := replace(v_escaped_attvalue, '"', 
v_backslash_and_quote);
+    v_json:=v_json || ',"' || Cur_Attribute.attributeId || '":{"value":"' || 
v_escaped_attvalue || '","name":"' || Cur_Attribute.attributeName || '"}';
+  END LOOP;
 
   v_json:=v_json || '}';
   

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Openbravo-commits mailing list
Openbravo-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to