[HGVOL] Merged from PI
authorSandra Huguet <sandra.huguet@openbravo.com>
Wed, 25 Nov 2015 09:01:32 +0100
changeset 28341 94e9f606fd57
parent 28214 43703a700601 (current diff)
parent 28340 995f3b601cd7 (diff)
child 28342 a51ffdab68f8
child 28395 08cd7c41a66d
[HGVOL] Merged from PI
modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_MODULE.xml
modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_PaymentProcess.java
modules/org.openbravo.apachejdbcconnectionpool/src-db/database/sourcedata/AD_MODULE.xml
modules/org.openbravo.apachejdbcconnectionpool/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
modules/org.openbravo.base.weld/src-db/database/sourcedata/AD_MODULE.xml
modules/org.openbravo.base.weld/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
modules/org.openbravo.client.application/src-db/database/sourcedata/AD_MODULE.xml
modules/org.openbravo.client.application/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
modules/org.openbravo.client.htmlwidget/src-db/database/sourcedata/AD_MODULE.xml
modules/org.openbravo.client.htmlwidget/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
modules/org.openbravo.client.kernel/src-db/database/sourcedata/AD_MODULE.xml
modules/org.openbravo.client.kernel/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
modules/org.openbravo.client.myob/src-db/database/sourcedata/AD_MODULE.xml
modules/org.openbravo.client.myob/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
modules/org.openbravo.client.querylist/src-db/database/sourcedata/AD_MODULE.xml
modules/org.openbravo.client.querylist/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
modules/org.openbravo.client.widgets/src-db/database/sourcedata/AD_MODULE.xml
modules/org.openbravo.client.widgets/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
modules/org.openbravo.financial.paymentreport/src-db/database/sourcedata/AD_MODULE.xml
modules/org.openbravo.financial.paymentreport/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
modules/org.openbravo.reports.ordersawaitingdelivery/src-db/database/sourcedata/AD_MODULE.xml
modules/org.openbravo.reports.ordersawaitingdelivery/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
modules/org.openbravo.service.datasource/src-db/database/sourcedata/AD_MODULE.xml
modules/org.openbravo.service.datasource/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
modules/org.openbravo.service.integration.google/src-db/database/sourcedata/AD_MODULE.xml
modules/org.openbravo.service.integration.google/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
modules/org.openbravo.service.integration.openid/src-db/database/sourcedata/AD_MODULE.xml
modules/org.openbravo.service.integration.openid/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
modules/org.openbravo.service.json/src-db/database/sourcedata/AD_MODULE.xml
modules/org.openbravo.service.json/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
modules/org.openbravo.userinterface.selector/src-db/database/sourcedata/AD_MODULE.xml
modules/org.openbravo.userinterface.selector/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
modules/org.openbravo.userinterface.skin.250to300Comp/src-db/database/sourcedata/AD_MODULE.xml
modules/org.openbravo.userinterface.skin.250to300Comp/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
modules/org.openbravo.userinterface.smartclient/src-db/database/sourcedata/AD_MODULE.xml
modules/org.openbravo.userinterface.smartclient/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
modules/org.openbravo.utility.cleanup.log/src-db/database/sourcedata/AD_MODULE.xml
modules/org.openbravo.utility.cleanup.log/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
modules/org.openbravo.v3.datasets/src-db/database/sourcedata/AD_MODULE.xml
modules/org.openbravo.v3.datasets/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
modules/org.openbravo.v3.framework/src-db/database/sourcedata/AD_MODULE.xml
modules/org.openbravo.v3.framework/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
modules/org.openbravo.v3/src-db/database/sourcedata/AD_MODULE.xml
modules/org.openbravo.v3/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
src-db/database/sourcedata/AD_FIELD.xml
src-db/database/sourcedata/AD_MODULE.xml
src/org/openbravo/base/secureApp/LoginHandler.java
src/org/openbravo/service/importprocess/ImportEntryManager.java
src/org/openbravo/service/importprocess/ImportEntryProcessor.java
src/org/openbravo/service/importprocess/ImportProcessUtils.java
--- a/.hgsigs	Wed Nov 18 10:55:30 2015 +0100
+++ b/.hgsigs	Wed Nov 25 09:01:32 2015 +0100
@@ -176,5 +176,9 @@
 906c7a47100c5694d720f6a00a8d205538562334 0 iEYEABECAAYFAlW3GiEACgkQCX/oGf+2qkNk4gCfVlZA1GqR2LvJwBPBXoMn6RCRyFYAnA4aPF+fOZXRpAqKMRT55nvswuRI
 6dfd2fade034c7225367366dc34dcf402b596555 0 iEYEABECAAYFAlXccLwACgkQCX/oGf+2qkPEMQCeM4MxdgXlCtbu0xqZNcX0IAEuGZgAnAjQlB4gOw0q84Q/gFyRL38jkahJ
 9f4a209cc84b3b4e7f3176388f6d6071779ac3e2 0 iEYEABECAAYFAlX5YqQACgkQCX/oGf+2qkOLNwCgr9InQrxWVMHG2e7sabvZBm3KD6gAoPvoMDHktqqkv2Qqtbv3G1mqpTrM
+f22b32ad49b1baca7b310bdf68d8d411e897f7bf 0 iEYEABECAAYFAlYtwHYACgkQCX/oGf+2qkOQ1QCgsBVLaaNfILpxAYrZfhBD+GDVVLEAnREcCa1Lvzf4mJ8eD8VWTx1g8kqk
 73f7d3c67dc7d6063af1dac6e71db12b9081150a 0 iEYEABECAAYFAlXMHl0ACgkQCX/oGf+2qkNVuACfTfB6/RfeioYrYtsi81kAwADW0lgAoOJdXKScLwl6RHeXIFvMlrzlcT6w
 f8b98762376a89ec93a0a623c61fdab00975c3a9 0 iEYEABECAAYFAlXtQ4gACgkQCX/oGf+2qkMZUgCePOnen6iguLqaG+86NeCC8Hr0yzAAoKTnw/BIXyBm5Ski5JQT/0mF1zHK
+9755d00af209f39887eba34a08922463fbcdac91 0 iEYEABECAAYFAlYt2zgACgkQCX/oGf+2qkN1KgCg6tzAQat0ZJJIWeFyr6yLRVCvh24AnjVyPbFPvbJ3/EOgUHtJWz5lWzeM
+d20a396ffa245fd3cdbadc3196df3554018d2e20 0 iEYEABECAAYFAlY4SL4ACgkQCX/oGf+2qkOjJACfS1q37UfrWobml4IVCOKqGeV+CU0An3iRcDJJ+N3aJMuzjkZh8xYe0mRQ
+d2c765a228d83098cc5f253cdd364abdb4a4697e 0 iEYEABECAAYFAlZOorMACgkQCX/oGf+2qkMFfwCgocaX6vsWuoGtE55aoHgBD1/7OKoAoOv4J31+P+8BtkVHJyKLhxGVBoLo
--- a/.hgtags	Wed Nov 18 10:55:30 2015 +0100
+++ b/.hgtags	Wed Nov 25 09:01:32 2015 +0100
@@ -187,5 +187,9 @@
 01405101d810eaafec106bab50ce31b41df52569 3.0PR15Q2.3
 d26c43a861dec9147a6a60d8aca52359837e9591 3.0PR15Q2.4
 f38025d616fa8a50a95d0dd3a3c38bcf6bbce053 3.0PR15Q2.5
+8b094ef73876cad67e35345c1add17266413af46 3.0PR15Q2.6
 828faf1939944cd8d55d562494138f68305c5b50 3.0PR15Q3
 e5863950c81de2bcf7dce57035094e96d544a9ae 3.0PR15Q3.1
+9320a67a9ef1cafb5076d06bdd6d716abc662c40 3.0PR15Q3.2
+bce57079bd436cec545edb6c12246170862f0416 3.0PR15Q3.3
+84cd25c33900a44c955c5a899e570281f02e0ccc 3.0PR15Q4
--- a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_COLUMN.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_COLUMN.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -4051,6 +4051,7 @@
 <!--7A86A285DAD44ECBAB04B052BEF6F76D-->  <VALIDATEONNEW><![CDATA[Y]]></VALIDATEONNEW>
 <!--7A86A285DAD44ECBAB04B052BEF6F76D-->  <IMAGESIZEVALUESACTION><![CDATA[N]]></IMAGESIZEVALUESACTION>
 <!--7A86A285DAD44ECBAB04B052BEF6F76D-->  <ISUSEDSEQUENCE><![CDATA[N]]></ISUSEDSEQUENCE>
+<!--7A86A285DAD44ECBAB04B052BEF6F76D-->  <ENTITY_ALIAS><![CDATA[fat]]></ENTITY_ALIAS>
 <!--7A86A285DAD44ECBAB04B052BEF6F76D--></AD_COLUMN>
 
 <!--7C947F020859452883746030218158E0--><AD_COLUMN>
@@ -8733,6 +8734,7 @@
 <!--A7389A5DCC6D4D33B9ED1785EC5BA3A0-->  <VALIDATEONNEW><![CDATA[Y]]></VALIDATEONNEW>
 <!--A7389A5DCC6D4D33B9ED1785EC5BA3A0-->  <IMAGESIZEVALUESACTION><![CDATA[N]]></IMAGESIZEVALUESACTION>
 <!--A7389A5DCC6D4D33B9ED1785EC5BA3A0-->  <ISUSEDSEQUENCE><![CDATA[N]]></ISUSEDSEQUENCE>
+<!--A7389A5DCC6D4D33B9ED1785EC5BA3A0-->  <ENTITY_ALIAS><![CDATA[bsl.updated]]></ENTITY_ALIAS>
 <!--A7389A5DCC6D4D33B9ED1785EC5BA3A0--></AD_COLUMN>
 
 <!--A7AA3F7ABB27453795B97A175662F61A--><AD_COLUMN>
@@ -9111,6 +9113,7 @@
 <!--B15C117EB160403FABAC34188650DAC6-->  <VALIDATEONNEW><![CDATA[Y]]></VALIDATEONNEW>
 <!--B15C117EB160403FABAC34188650DAC6-->  <IMAGESIZEVALUESACTION><![CDATA[N]]></IMAGESIZEVALUESACTION>
 <!--B15C117EB160403FABAC34188650DAC6-->  <ISUSEDSEQUENCE><![CDATA[N]]></ISUSEDSEQUENCE>
+<!--B15C117EB160403FABAC34188650DAC6-->  <ENTITY_ALIAS><![CDATA[bsl.matchedDocument]]></ENTITY_ALIAS>
 <!--B15C117EB160403FABAC34188650DAC6--></AD_COLUMN>
 
 <!--B3645A0D0F674CD3BC3FCB6225C4E1A6--><AD_COLUMN>
@@ -11148,7 +11151,7 @@
 <!--FE24DEE7950D47A68BD883DF1F7BA506-->  <VALIDATEONNEW><![CDATA[Y]]></VALIDATEONNEW>
 <!--FE24DEE7950D47A68BD883DF1F7BA506-->  <IMAGESIZEVALUESACTION><![CDATA[N]]></IMAGESIZEVALUESACTION>
 <!--FE24DEE7950D47A68BD883DF1F7BA506-->  <ISUSEDSEQUENCE><![CDATA[N]]></ISUSEDSEQUENCE>
-<!--FE24DEE7950D47A68BD883DF1F7BA506-->  <ENTITY_ALIAS><![CDATA[affinity]]></ENTITY_ALIAS>
+<!--FE24DEE7950D47A68BD883DF1F7BA506-->  <ENTITY_ALIAS><![CDATA[bsl.matchingtype]]></ENTITY_ALIAS>
 <!--FE24DEE7950D47A68BD883DF1F7BA506--></AD_COLUMN>
 
 <!--FEB149D92A0E4F9E9532F0F78A16B0A8--><AD_COLUMN>
--- a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_MESSAGE.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_MESSAGE.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -649,6 +649,18 @@
 <!--712C841E501642B881A998CCAC13E420-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
 <!--712C841E501642B881A998CCAC13E420--></AD_MESSAGE>
 
+<!--76D4A0740BAD4274B8718A0AF2A1C9B4--><AD_MESSAGE>
+<!--76D4A0740BAD4274B8718A0AF2A1C9B4-->  <AD_MESSAGE_ID><![CDATA[76D4A0740BAD4274B8718A0AF2A1C9B4]]></AD_MESSAGE_ID>
+<!--76D4A0740BAD4274B8718A0AF2A1C9B4-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--76D4A0740BAD4274B8718A0AF2A1C9B4-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--76D4A0740BAD4274B8718A0AF2A1C9B4-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--76D4A0740BAD4274B8718A0AF2A1C9B4-->  <VALUE><![CDATA[APRM_ErrorOnUnmatchingRecords]]></VALUE>
+<!--76D4A0740BAD4274B8718A0AF2A1C9B4-->  <MSGTEXT><![CDATA[%0 record(s) failed. Reference No.: ]]></MSGTEXT>
+<!--76D4A0740BAD4274B8718A0AF2A1C9B4-->  <MSGTYPE><![CDATA[W]]></MSGTYPE>
+<!--76D4A0740BAD4274B8718A0AF2A1C9B4-->  <AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID>
+<!--76D4A0740BAD4274B8718A0AF2A1C9B4-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
+<!--76D4A0740BAD4274B8718A0AF2A1C9B4--></AD_MESSAGE>
+
 <!--7918E1E75DF84F499AD21A51F53F9A9B--><AD_MESSAGE>
 <!--7918E1E75DF84F499AD21A51F53F9A9B-->  <AD_MESSAGE_ID><![CDATA[7918E1E75DF84F499AD21A51F53F9A9B]]></AD_MESSAGE_ID>
 <!--7918E1E75DF84F499AD21A51F53F9A9B-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
@@ -1381,6 +1393,18 @@
 <!--DF6BD33E986149C0ADE4D0CC45D7394C-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
 <!--DF6BD33E986149C0ADE4D0CC45D7394C--></AD_MESSAGE>
 
+<!--E103F874F07D44269B98F457EFCAF367--><AD_MESSAGE>
+<!--E103F874F07D44269B98F457EFCAF367-->  <AD_MESSAGE_ID><![CDATA[E103F874F07D44269B98F457EFCAF367]]></AD_MESSAGE_ID>
+<!--E103F874F07D44269B98F457EFCAF367-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--E103F874F07D44269B98F457EFCAF367-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--E103F874F07D44269B98F457EFCAF367-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--E103F874F07D44269B98F457EFCAF367-->  <VALUE><![CDATA[APRM_UnmatchedRecords]]></VALUE>
+<!--E103F874F07D44269B98F457EFCAF367-->  <MSGTEXT><![CDATA[%0 record(s) were properly unmatched.]]></MSGTEXT>
+<!--E103F874F07D44269B98F457EFCAF367-->  <MSGTYPE><![CDATA[I]]></MSGTYPE>
+<!--E103F874F07D44269B98F457EFCAF367-->  <AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID>
+<!--E103F874F07D44269B98F457EFCAF367-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
+<!--E103F874F07D44269B98F457EFCAF367--></AD_MESSAGE>
+
 <!--E217A4F4BDE84DC6A95ACB3F54549FDD--><AD_MESSAGE>
 <!--E217A4F4BDE84DC6A95ACB3F54549FDD-->  <AD_MESSAGE_ID><![CDATA[E217A4F4BDE84DC6A95ACB3F54549FDD]]></AD_MESSAGE_ID>
 <!--E217A4F4BDE84DC6A95ACB3F54549FDD-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
@@ -1405,6 +1429,18 @@
 <!--E92C3899BD924A5C991A39B2CDA74D29-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
 <!--E92C3899BD924A5C991A39B2CDA74D29--></AD_MESSAGE>
 
+<!--EAA6B599637E4A909131395D843C3C61--><AD_MESSAGE>
+<!--EAA6B599637E4A909131395D843C3C61-->  <AD_MESSAGE_ID><![CDATA[EAA6B599637E4A909131395D843C3C61]]></AD_MESSAGE_ID>
+<!--EAA6B599637E4A909131395D843C3C61-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--EAA6B599637E4A909131395D843C3C61-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--EAA6B599637E4A909131395D843C3C61-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--EAA6B599637E4A909131395D843C3C61-->  <VALUE><![CDATA[APRM_NoFinancialAccountAvailable]]></VALUE>
+<!--EAA6B599637E4A909131395D843C3C61-->  <MSGTEXT><![CDATA[It does not exist any Financial Account available for this Payment Method]]></MSGTEXT>
+<!--EAA6B599637E4A909131395D843C3C61-->  <MSGTYPE><![CDATA[E]]></MSGTYPE>
+<!--EAA6B599637E4A909131395D843C3C61-->  <AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID>
+<!--EAA6B599637E4A909131395D843C3C61-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
+<!--EAA6B599637E4A909131395D843C3C61--></AD_MESSAGE>
+
 <!--EDEA16A966B94F63A7C1E339FC095B08--><AD_MESSAGE>
 <!--EDEA16A966B94F63A7C1E339FC095B08-->  <AD_MESSAGE_ID><![CDATA[EDEA16A966B94F63A7C1E339FC095B08]]></AD_MESSAGE_ID>
 <!--EDEA16A966B94F63A7C1E339FC095B08-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
--- a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -6,7 +6,7 @@
 <!--A918E3331C404B889D69AA9BFAFB23AC-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
 <!--A918E3331C404B889D69AA9BFAFB23AC-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--A918E3331C404B889D69AA9BFAFB23AC-->  <NAME><![CDATA[Advanced Payables and Receivables Mngmt]]></NAME>
-<!--A918E3331C404B889D69AA9BFAFB23AC-->  <VERSION><![CDATA[3.0.27639]]></VERSION>
+<!--A918E3331C404B889D69AA9BFAFB23AC-->  <VERSION><![CDATA[3.0.28035]]></VERSION>
 <!--A918E3331C404B889D69AA9BFAFB23AC-->  <DESCRIPTION><![CDATA[Managing your finances with an ERP does not have to be difficult. Enjoy a radically improved user experience that combines the power of an enterprise grade financial application with the simplicity and ease of a web 2.0 personal accounting service.]]></DESCRIPTION>
 <!--A918E3331C404B889D69AA9BFAFB23AC-->  <HELP><![CDATA[Advanced Payables and Receivables Management simplifies and automates the business processes around the management of financial accounts, from the receipt and issue of payment, to the reconciliation of those events with bank statements.
 If you would like to help shape this module you are welcome to take part in the forum discussions or register feature requests or issues in the corresponding (Forum and Bug Tracking) sections in the Advanced Payables and Receivable project in the OB Forge.]]></HELP>
--- a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -7,7 +7,7 @@
 <!--89326AE95DAD449D85DFAB2C5B1C6683-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--89326AE95DAD449D85DFAB2C5B1C6683-->  <AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID>
 <!--89326AE95DAD449D85DFAB2C5B1C6683-->  <AD_DEPENDENT_MODULE_ID><![CDATA[5EB4F15C80684ACA904756BDC12ADBE5]]></AD_DEPENDENT_MODULE_ID>
-<!--89326AE95DAD449D85DFAB2C5B1C6683-->  <STARTVERSION><![CDATA[2.1.27639]]></STARTVERSION>
+<!--89326AE95DAD449D85DFAB2C5B1C6683-->  <STARTVERSION><![CDATA[2.1.28035]]></STARTVERSION>
 <!--89326AE95DAD449D85DFAB2C5B1C6683-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--89326AE95DAD449D85DFAB2C5B1C6683-->  <DEPENDANT_MODULE_NAME><![CDATA[User Interface Selector]]></DEPENDANT_MODULE_NAME>
 <!--89326AE95DAD449D85DFAB2C5B1C6683-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -21,7 +21,7 @@
 <!--B97FC854C6DD41E692161585645A900F-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--B97FC854C6DD41E692161585645A900F-->  <AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID>
 <!--B97FC854C6DD41E692161585645A900F-->  <AD_DEPENDENT_MODULE_ID><![CDATA[0]]></AD_DEPENDENT_MODULE_ID>
-<!--B97FC854C6DD41E692161585645A900F-->  <STARTVERSION><![CDATA[3.0.27639]]></STARTVERSION>
+<!--B97FC854C6DD41E692161585645A900F-->  <STARTVERSION><![CDATA[3.0.28035]]></STARTVERSION>
 <!--B97FC854C6DD41E692161585645A900F-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--B97FC854C6DD41E692161585645A900F-->  <DEPENDANT_MODULE_NAME><![CDATA[core]]></DEPENDANT_MODULE_NAME>
 <!--B97FC854C6DD41E692161585645A900F-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
--- a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_REF_LIST.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_REF_LIST.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -343,6 +343,18 @@
 <!--7AC4F4FF644247B7BD320BBF67C4F066-->  <SEQNO><![CDATA[10]]></SEQNO>
 <!--7AC4F4FF644247B7BD320BBF67C4F066--></AD_REF_LIST>
 
+<!--94334E10107D4F3C868191FF2C9AEAD0--><AD_REF_LIST>
+<!--94334E10107D4F3C868191FF2C9AEAD0-->  <AD_REF_LIST_ID><![CDATA[94334E10107D4F3C868191FF2C9AEAD0]]></AD_REF_LIST_ID>
+<!--94334E10107D4F3C868191FF2C9AEAD0-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--94334E10107D4F3C868191FF2C9AEAD0-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--94334E10107D4F3C868191FF2C9AEAD0-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--94334E10107D4F3C868191FF2C9AEAD0-->  <VALUE><![CDATA[UN]]></VALUE>
+<!--94334E10107D4F3C868191FF2C9AEAD0-->  <NAME><![CDATA[Unmatch Selected]]></NAME>
+<!--94334E10107D4F3C868191FF2C9AEAD0-->  <AD_REFERENCE_ID><![CDATA[C20E5E22588E40E5B8CC6D80ED3015C5]]></AD_REFERENCE_ID>
+<!--94334E10107D4F3C868191FF2C9AEAD0-->  <AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID>
+<!--94334E10107D4F3C868191FF2C9AEAD0-->  <SEQNO><![CDATA[30]]></SEQNO>
+<!--94334E10107D4F3C868191FF2C9AEAD0--></AD_REF_LIST>
+
 <!--9AE9EBD541F34CC7AC8830B9601C52CB--><AD_REF_LIST>
 <!--9AE9EBD541F34CC7AC8830B9601C52CB-->  <AD_REF_LIST_ID><![CDATA[9AE9EBD541F34CC7AC8830B9601C52CB]]></AD_REF_LIST_ID>
 <!--9AE9EBD541F34CC7AC8830B9601C52CB-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
@@ -466,7 +478,7 @@
 <!--C69982184F634AC79728338D1F327B76-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
 <!--C69982184F634AC79728338D1F327B76-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--C69982184F634AC79728338D1F327B76-->  <VALUE><![CDATA[RE]]></VALUE>
-<!--C69982184F634AC79728338D1F327B76-->  <NAME><![CDATA[Reconcile]]></NAME>
+<!--C69982184F634AC79728338D1F327B76-->  <NAME><![CDATA[Reconcile All]]></NAME>
 <!--C69982184F634AC79728338D1F327B76-->  <AD_REFERENCE_ID><![CDATA[C20E5E22588E40E5B8CC6D80ED3015C5]]></AD_REFERENCE_ID>
 <!--C69982184F634AC79728338D1F327B76-->  <AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID>
 <!--C69982184F634AC79728338D1F327B76-->  <SEQNO><![CDATA[20]]></SEQNO>
--- a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_TAB.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_TAB.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -916,10 +916,11 @@
 <!--ED54A4E24196476596955286D403461E-->  <DISABLE_PARENT_KEY_PROPERTY><![CDATA[N]]></DISABLE_PARENT_KEY_PROPERTY>
 <!--ED54A4E24196476596955286D403461E-->  <ISREADONLYTREE><![CDATA[N]]></ISREADONLYTREE>
 <!--ED54A4E24196476596955286D403461E-->  <ISSHOWTREENODEICONS><![CDATA[Y]]></ISSHOWTREENODEICONS>
+<!--ED54A4E24196476596955286D403461E-->  <EM_OBUIAPP_SELECTION><![CDATA[OB.APRM.MatchStatement.selectionChanged]]></EM_OBUIAPP_SELECTION>
 <!--ED54A4E24196476596955286D403461E-->  <EM_OBUIAPP_CAN_ADD><![CDATA[N]]></EM_OBUIAPP_CAN_ADD>
 <!--ED54A4E24196476596955286D403461E-->  <EM_OBUIAPP_CAN_DELETE><![CDATA[N]]></EM_OBUIAPP_CAN_DELETE>
-<!--ED54A4E24196476596955286D403461E-->  <EM_OBUIAPP_SHOW_SELECT><![CDATA[N]]></EM_OBUIAPP_SHOW_SELECT>
-<!--ED54A4E24196476596955286D403461E-->  <EM_OBUIAPP_SELECTION_TYPE><![CDATA[S]]></EM_OBUIAPP_SELECTION_TYPE>
+<!--ED54A4E24196476596955286D403461E-->  <EM_OBUIAPP_SHOW_SELECT><![CDATA[Y]]></EM_OBUIAPP_SHOW_SELECT>
+<!--ED54A4E24196476596955286D403461E-->  <EM_OBUIAPP_SELECTION_TYPE><![CDATA[M]]></EM_OBUIAPP_SELECTION_TYPE>
 <!--ED54A4E24196476596955286D403461E--></AD_TAB>
 
 <!--F6C2283A21314407BBBB23FF14B85ED4--><AD_TAB>
--- a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_TABLE.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_TABLE.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -208,7 +208,7 @@
 <!--BC21981DCF0846338D631887BEDFE7FA-->  <HQLQUERY><![CDATA[select bsl.transactionDate as banklineDate, case when bp is null then bsl.bpartnername  else bp.name end AS businessPartner, bsl.bpartnername AS Bpartnername, bsl.referenceNo as referenceNo, bsl.cramount - bsl.dramount as amount, bsl.id as match, bsl.matchingtype as affinity, 
 case when fat is null then false else true end AS cleared,
 bsl.matchingtype as matchingtype, bsl.id as id, 
-fat.transactionDate as trxDate, transactionBP.name as transactionBPName, fat.depositAmount - fat.paymentAmount as transactionAmount, bsl.lineNo as lineNo, fat as fin_finacc_transaction_id, bsl.description as description, fat.description as fatDescription, case when bsl.cramount - bsl.dramount >0 then 'D' else 'P' end as type, bsl.matchedDocument, transactionGLItem.name as transactionGLItemName, glitem.name as glitemName, bsl.updated as bslUpdated
+fat.transactionDate as trxDate, transactionBP.name as transactionBPName, fat.depositAmount - fat.paymentAmount as transactionAmount, bsl.lineNo as lineNo, fat as fin_finacc_transaction_id, bsl.description as description, fat.description as fatDescription, case when bsl.cramount - bsl.dramount >0 then 'D' else 'P' end as type, bsl.matchedDocument as matchedDocument, transactionGLItem.name as transactionGLItemName, glitem.name as glitemName, bsl.updated as bslUpdated
  @selectClause@
 from FIN_BankStatementLine as bsl
  join bsl.bankStatement as bs
--- a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/actionHandler/AddPaymentActionHandler.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/actionHandler/AddPaymentActionHandler.java	Wed Nov 25 09:01:32 2015 +0100
@@ -281,7 +281,8 @@
             strDocBaseType, org.getId(), OBDateUtils.formatDate(paymentDate))
         && orgLegalWithAccounting) {
       String messag = OBMessageUtils.messageBD("PeriodNotAvailable");
-      throw new OBException(messag);
+      log.debug(messag);
+      throw new OBException(messag, false);
     }
 
     String strPaymentAmount = "0";
--- a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/actionHandler/PaymentMethodMulticurrencyActionHandler.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/actionHandler/PaymentMethodMulticurrencyActionHandler.java	Wed Nov 25 09:01:32 2015 +0100
@@ -26,6 +26,7 @@
 import org.hibernate.criterion.Restrictions;
 import org.openbravo.base.exception.OBException;
 import org.openbravo.client.kernel.BaseActionHandler;
+import org.openbravo.dal.core.OBContext;
 import org.openbravo.dal.service.OBCriteria;
 import org.openbravo.dal.service.OBDal;
 import org.openbravo.financial.FinancialUtils;
@@ -119,14 +120,19 @@
 
   private FinAccPaymentMethod getFinancialAccountPaymentMethod(String paymentMethodId,
       String financialAccountId) {
-    OBCriteria<FinAccPaymentMethod> obc = OBDal.getInstance().createCriteria(
-        FinAccPaymentMethod.class);
-    obc.setFilterOnReadableOrganization(false);
-    obc.setMaxResults(1);
-    obc.add(Restrictions.eq(FinAccPaymentMethod.PROPERTY_ACCOUNT,
-        OBDal.getInstance().get(FIN_FinancialAccount.class, financialAccountId)));
-    obc.add(Restrictions.eq(FinAccPaymentMethod.PROPERTY_PAYMENTMETHOD,
-        OBDal.getInstance().get(FIN_PaymentMethod.class, paymentMethodId)));
-    return (FinAccPaymentMethod) obc.uniqueResult();
+    OBContext.setAdminMode(true);
+    try {
+      OBCriteria<FinAccPaymentMethod> obc = OBDal.getInstance().createCriteria(
+          FinAccPaymentMethod.class);
+      obc.setFilterOnReadableOrganization(false);
+      obc.setMaxResults(1);
+      obc.add(Restrictions.eq(FinAccPaymentMethod.PROPERTY_ACCOUNT,
+          OBDal.getInstance().get(FIN_FinancialAccount.class, financialAccountId)));
+      obc.add(Restrictions.eq(FinAccPaymentMethod.PROPERTY_PAYMENTMETHOD,
+          OBDal.getInstance().get(FIN_PaymentMethod.class, paymentMethodId)));
+      return (FinAccPaymentMethod) obc.uniqueResult();
+    } finally {
+      OBContext.restorePreviousMode();
+    }
   }
 }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/actionHandler/UnMatchSelectedTransactionsActionHandler.java	Wed Nov 25 09:01:32 2015 +0100
@@ -0,0 +1,151 @@
+/*
+ *************************************************************************
+ * The contents of this file are subject to the Openbravo  Public  License
+ * Version  1.1  (the  "License"),  being   the  Mozilla   Public  License
+ * Version 1.1  with a permitted attribution clause; you may not  use this
+ * file except in compliance with the License. You  may  obtain  a copy of
+ * the License at http://www.openbravo.com/legal/license.html
+ * Software distributed under the License  is  distributed  on  an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ * License for the specific  language  governing  rights  and  limitations
+ * under the License.
+ * The Original Code is Openbravo ERP.
+ * The Initial Developer of the Original Code is Openbravo SLU
+ * All portions are Copyright (C) 2015 Openbravo SLU
+ * All Rights Reserved.
+ * Contributor(s):  Cleardrop_____________________________.
+ ************************************************************************
+ */
+
+package org.openbravo.advpaymentmngt.actionHandler;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang.StringUtils;
+import org.codehaus.jettison.json.JSONArray;
+import org.codehaus.jettison.json.JSONObject;
+import org.openbravo.advpaymentmngt.utility.APRM_MatchingUtility;
+import org.openbravo.client.kernel.BaseActionHandler;
+import org.openbravo.dal.core.OBContext;
+import org.openbravo.dal.service.OBDal;
+import org.openbravo.erpCommon.utility.OBDateUtils;
+import org.openbravo.erpCommon.utility.OBMessageUtils;
+import org.openbravo.model.financialmgmt.payment.FIN_BankStatementLine;
+import org.openbravo.model.financialmgmt.payment.FIN_FinaccTransaction;
+import org.openbravo.service.db.DbUtility;
+import org.openbravo.service.json.JsonUtils;
+import org.openbravo.service.json.OBStaleObjectException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class UnMatchSelectedTransactionsActionHandler extends BaseActionHandler {
+  private static final Logger log = LoggerFactory
+      .getLogger(UnMatchSelectedTransactionsActionHandler.class);
+
+  @Override
+  protected JSONObject execute(Map<String, Object> parameters, String data) {
+    JSONObject result = new JSONObject();
+    JSONObject errorMessage = new JSONObject();
+    try {
+      OBContext.setAdminMode(true);
+      final JSONObject jsonData = new JSONObject(data);
+      SimpleDateFormat xmlDateTimeFormat = JsonUtils.createJSTimeFormat();
+
+      List<String> errorLines = new ArrayList<String>();
+
+      final JSONArray bankStatementLineIds = jsonData.getJSONArray("bankStatementLineIds");
+      int bankStatementLineIdsLength = bankStatementLineIds != null ? bankStatementLineIds.length()
+          : 0;
+      int alreadyCleared = 0;
+      for (int i = 0; i < bankStatementLineIdsLength; i++) {
+        JSONObject bankStatementLine = bankStatementLineIds.getJSONObject(i);
+        if (!bankStatementLine.getBoolean("cleared")) {
+          log.info("Skipping " + bankStatementLine.getString("referenceNo")
+              + " line as it's not matched");
+          alreadyCleared++;
+        } else {
+          try {
+            Date date = xmlDateTimeFormat.parse(bankStatementLine.getString("bslUpdated"));
+            final FIN_BankStatementLine bsline = OBDal.getInstance().get(
+                FIN_BankStatementLine.class, bankStatementLine.getString("id"));
+            Date bbddBSLUpdated = bsline.getUpdated();
+            // Remove milis
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(OBDateUtils.convertDateToUTC(bbddBSLUpdated));
+            calendar.setLenient(true);
+            calendar.set(Calendar.MILLISECOND, 0);
+            if (date.getTime() != calendar.getTimeInMillis()) {
+              log.error("The record " + bankStatementLine.getString("referenceNo")
+                  + " is newer in the database. Avoid unmatching it");
+              throw new OBStaleObjectException("@APRM_StaleDate@");
+            }
+            final FIN_FinaccTransaction transaction = bsline.getFinancialAccountTransaction();
+            if (transaction != null) {
+              APRM_MatchingUtility.unmatch(bsline);
+            }
+          } catch (Exception e) {
+            errorLines.add(bankStatementLine.getString("referenceNo"));
+          }
+        }
+      }
+
+      /* Build Message */
+      int totalSuccess = bankStatementLineIdsLength - errorLines.size() - alreadyCleared;
+      String severity = "error";
+      String title = "";
+      String msg = "";
+      if (totalSuccess > 0) {
+        severity = "success";
+        title = OBMessageUtils.messageBD("Success");
+        msg = OBMessageUtils.getI18NMessage("APRM_UnmatchedRecords",
+            new String[] { String.valueOf(totalSuccess) });
+      }
+      if (!errorLines.isEmpty()) {
+        if (totalSuccess > 0) {
+          severity = "warning";
+          title = OBMessageUtils.messageBD("Warning");
+        } else {
+          severity = "error";
+          title = OBMessageUtils.messageBD("Error");
+        }
+
+        if (StringUtils.isNotBlank(msg)) {
+          msg += "<br/>";
+        }
+        msg += OBMessageUtils.getI18NMessage("APRM_ErrorOnUnmatchingRecords",
+            new String[] { String.valueOf(errorLines.size()) });
+        for (String string : errorLines) {
+          msg += string + ", ";
+        }
+        msg = msg.substring(0, msg.length() - 2);
+      }
+      errorMessage.put("severity", severity);
+      errorMessage.put("title", title);
+      errorMessage.put("text", msg);
+      result.put("message", errorMessage);
+
+    } catch (Exception e) {
+      OBDal.getInstance().rollbackAndClose();
+      log.error("Error Unmatching Transaction", e);
+      try {
+        Throwable ex = DbUtility.getUnderlyingSQLException(e);
+        String message = OBMessageUtils.translateError(ex.getMessage()).getMessage();
+        errorMessage = new JSONObject();
+        errorMessage.put("severity", "error");
+        errorMessage.put("title", OBMessageUtils.messageBD("Error"));
+        errorMessage.put("text", message);
+        result.put("message", errorMessage);
+      } catch (Exception e2) {
+        log.error("Message could not be built", e2);
+      }
+    } finally {
+      OBContext.restorePreviousMode();
+    }
+    return result;
+  }
+}
\ No newline at end of file
--- a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/ad_actionbutton/ProcessInvoice.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/ad_actionbutton/ProcessInvoice.java	Wed Nov 25 09:01:32 2015 +0100
@@ -44,10 +44,13 @@
 import org.openbravo.advpaymentmngt.process.FIN_PaymentProcess;
 import org.openbravo.advpaymentmngt.utility.FIN_Utility;
 import org.openbravo.base.filter.IsIDFilter;
+import org.openbravo.base.provider.OBProvider;
 import org.openbravo.base.secureApp.HttpSecureAppServlet;
 import org.openbravo.base.secureApp.VariablesSecureApp;
 import org.openbravo.base.session.OBPropertiesProvider;
 import org.openbravo.dal.core.OBContext;
+import org.openbravo.dal.security.OrganizationStructureProvider;
+import org.openbravo.dal.service.OBCriteria;
 import org.openbravo.dal.service.OBDal;
 import org.openbravo.dal.service.OBDao;
 import org.openbravo.data.FieldProvider;
@@ -66,8 +69,10 @@
 import org.openbravo.model.common.currency.ConversionRate;
 import org.openbravo.model.common.enterprise.DocumentType;
 import org.openbravo.model.common.invoice.Invoice;
+import org.openbravo.model.common.invoice.ReversedInvoice;
 import org.openbravo.model.financialmgmt.payment.FIN_FinancialAccount;
 import org.openbravo.model.financialmgmt.payment.FIN_Payment;
+import org.openbravo.model.financialmgmt.payment.FIN_PaymentDetail;
 import org.openbravo.model.financialmgmt.payment.FIN_PaymentDetailV;
 import org.openbravo.model.financialmgmt.payment.FIN_PaymentSchedule;
 import org.openbravo.model.financialmgmt.payment.FIN_PaymentScheduleDetail;
@@ -182,10 +187,10 @@
           OBContext.restorePreviousMode();
         }
 
+        Date voidDate = null;
+        Date voidAcctDate = null;
         Map<String, String> parameters = null;
         if (!strVoidInvoiceDate.isEmpty() && !strVoidInvoiceAcctDate.isEmpty()) {
-          Date voidDate = null;
-          Date voidAcctDate = null;
           try {
             voidDate = OBDateUtils.getDate(strVoidInvoiceDate);
             voidAcctDate = OBDateUtils.getDate(strVoidInvoiceAcctDate);
@@ -199,6 +204,107 @@
           parameters.put("voidedDocumentDate", OBDateUtils.formatDate(voidDate, "yyyy-MM-dd"));
           parameters.put("voidedDocumentAcctDate",
               OBDateUtils.formatDate(voidAcctDate, "yyyy-MM-dd"));
+
+        }
+
+        // In case of void a non paid invoice, create a dummy payment related to it with zero amount
+        FIN_Payment dummyPayment = null;
+        if ("RC".equals(strdocaction) && !invoice.isPaymentComplete()
+            && invoice.getTotalPaid().compareTo(BigDecimal.ZERO) == 0) {
+          try {
+            OBContext.setAdminMode(true);
+            final boolean isSOTrx = invoice.isSalesTransaction();
+            final DocumentType docType = FIN_Utility.getDocumentType(invoice.getOrganization(),
+                isSOTrx ? AcctServer.DOCTYPE_ARReceipt : AcctServer.DOCTYPE_APPayment);
+            final String strPaymentDocumentNo = FIN_Utility.getDocumentNo(docType,
+                docType.getTable() != null ? docType.getTable().getDBTableName() : "");
+            final OrganizationStructureProvider osp = OBContext.getOBContext()
+                .getOrganizationStructureProvider(invoice.getClient().getId());
+
+            // Get default Financial Account as it is done in Add Payment
+            FIN_FinancialAccount bpFinAccount = null;
+            if (isSOTrx
+                && invoice.getBusinessPartner().getAccount() != null
+                && FIN_Utility.getFinancialAccountPaymentMethod(invoice.getPaymentMethod().getId(),
+                    invoice.getBusinessPartner().getAccount().getId(), isSOTrx, invoice
+                        .getCurrency().getId()) != null
+                && osp.isInNaturalTree(invoice.getBusinessPartner().getAccount().getOrganization(),
+                    invoice.getOrganization())) {
+              bpFinAccount = invoice.getBusinessPartner().getAccount();
+            } else if (!isSOTrx
+                && invoice.getBusinessPartner().getPOFinancialAccount() != null
+                && FIN_Utility.getFinancialAccountPaymentMethod(invoice.getPaymentMethod().getId(),
+                    invoice.getBusinessPartner().getPOFinancialAccount().getId(), isSOTrx, invoice
+                        .getCurrency().getId()) != null
+                && osp.isInNaturalTree(invoice.getBusinessPartner().getPOFinancialAccount()
+                    .getOrganization(), invoice.getOrganization())) {
+              bpFinAccount = invoice.getBusinessPartner().getPOFinancialAccount();
+            } else {
+              FinAccPaymentMethod fpm = FIN_Utility.getFinancialAccountPaymentMethod(invoice
+                  .getPaymentMethod().getId(), null, isSOTrx, invoice.getCurrency().getId());
+              if (fpm != null
+                  && osp.isInNaturalTree(fpm.getAccount().getOrganization(),
+                      invoice.getOrganization())) {
+                bpFinAccount = fpm.getAccount();
+              }
+            }
+
+            // If no Financial Account exists, show an Error
+            if (bpFinAccount == null) {
+              msg = new OBError();
+              msg.setType("Error");
+              msg.setTitle(Utility.messageBD(this, "Error", vars.getLanguage()));
+              msg.setMessage(OBMessageUtils.messageBD("APRM_NoFinancialAccountAvailable"));
+              vars.setMessage(strTabId, msg);
+              printPageClosePopUp(response, vars, Utility.getTabURL(strTabId, "R", true));
+              return;
+            }
+
+            // Calculate Conversion Rate
+            Date date = voidDate != null ? voidDate : invoice.getInvoiceDate();
+            BigDecimal rate = null;
+            if (!StringUtils.equals(invoice.getCurrency().getId(), bpFinAccount.getCurrency()
+                .getId())) {
+              final ConversionRate conversionRate = FinancialUtils.getConversionRate(date,
+                  invoice.getCurrency(), bpFinAccount.getCurrency(), invoice.getOrganization(),
+                  invoice.getClient());
+              if (conversionRate != null) {
+                rate = conversionRate.getMultipleRateBy();
+              }
+            }
+
+            // Create dummy payment
+            dummyPayment = dao
+                .getNewPayment(isSOTrx, invoice.getOrganization(), docType, strPaymentDocumentNo,
+                    invoice.getBusinessPartner(), invoice.getPaymentMethod(), bpFinAccount, "0",
+                    date, invoice.getDocumentNo(), invoice.getCurrency(), rate, null);
+            OBDal.getInstance().save(dummyPayment);
+
+            List<FIN_PaymentDetail> paymentDetails = new ArrayList<FIN_PaymentDetail>();
+            List<FIN_PaymentScheduleDetail> paymentScheduleDetails = dao
+                .getInvoicePendingScheduledPaymentDetails(invoice);
+            for (FIN_PaymentScheduleDetail psd : paymentScheduleDetails) {
+              FIN_PaymentDetail pd = OBProvider.getInstance().get(FIN_PaymentDetail.class);
+              pd.setFinPayment(dummyPayment);
+              pd.setAmount(psd.getAmount());
+              pd.setRefund(false);
+              OBDal.getInstance().save(pd);
+
+              paymentDetails.add(pd);
+              psd.setPaymentDetails(pd);
+              pd.getFINPaymentScheduleDetailList().add(psd);
+              OBDal.getInstance().save(psd);
+            }
+            dummyPayment.setFINPaymentDetailList(paymentDetails);
+            OBDal.getInstance().save(dummyPayment);
+
+          } catch (final Exception e) {
+            log4j.error("Exception while creating dummy payment for the invoice: "
+                + strC_Invoice_ID);
+            e.printStackTrace();
+          } finally {
+            OBContext.restorePreviousMode();
+          }
         }
 
         final ProcessInstance pinstance = CallProcess.getInstance().call(process, strC_Invoice_ID,
@@ -206,6 +312,56 @@
 
         OBDal.getInstance().getSession().refresh(invoice);
         invoice.setAPRMProcessinvoice(invoice.getDocumentAction());
+
+        if ("RC".equals(strdocaction) && pinstance.getResult() != 0L) {
+          try {
+            OBContext.setAdminMode(true);
+
+            // Get reversed payment
+            OBCriteria<ReversedInvoice> revInvoiceCriteria = OBDal.getInstance().createCriteria(
+                ReversedInvoice.class);
+            revInvoiceCriteria.add(Restrictions.eq(ReversedInvoice.PROPERTY_REVERSEDINVOICE,
+                invoice));
+            revInvoiceCriteria.setMaxResults(1);
+            ReversedInvoice revInvoice = (ReversedInvoice) revInvoiceCriteria.uniqueResult();
+
+            if (revInvoice != null && dummyPayment != null) {
+
+              List<FIN_PaymentDetail> paymentDetails = new ArrayList<FIN_PaymentDetail>();
+              List<FIN_PaymentScheduleDetail> paymentScheduleDetails = dao
+                  .getInvoicePendingScheduledPaymentDetails(revInvoice.getInvoice());
+              for (FIN_PaymentScheduleDetail psd : paymentScheduleDetails) {
+                FIN_PaymentDetail pd = OBProvider.getInstance().get(FIN_PaymentDetail.class);
+                pd.setFinPayment(dummyPayment);
+                pd.setAmount(psd.getAmount());
+                pd.setRefund(false);
+                OBDal.getInstance().save(pd);
+
+                paymentDetails.add(pd);
+                psd.setPaymentDetails(pd);
+                pd.getFINPaymentScheduleDetailList().add(psd);
+                OBDal.getInstance().save(psd);
+              }
+              dummyPayment.getFINPaymentDetailList().addAll(paymentDetails);
+              OBDal.getInstance().save(dummyPayment);
+
+              // Process dummy payment related with both actual invoice and reversed invoice
+              OBError message = FIN_AddPayment.processPayment(vars, this, "P", dummyPayment);
+              if ("Error".equals(message.getType())) {
+                message.setMessage(OBMessageUtils.messageBD("PaymentError") + " "
+                    + message.getMessage());
+                vars.setMessage(strTabId, message);
+              }
+            }
+          } catch (final Exception e) {
+            log4j.error("Exception while creating dummy payment for the invoice: "
+                + strC_Invoice_ID);
+            e.printStackTrace();
+          } finally {
+            OBContext.restorePreviousMode();
+          }
+        }
+
         // Remove invoice's used credit description
         if ("RE".equals(strdocaction) && pinstance.getResult() != 0L) {
           final String invDesc = invoice.getDescription();
--- a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/dao/TransactionsDao.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/dao/TransactionsDao.java	Wed Nov 25 09:01:32 2015 +0100
@@ -109,11 +109,13 @@
       newTransaction.setStDimension(payment.getStDimension());
       newTransaction.setNdDimension(payment.getNdDimension());
       newTransaction.setCurrency(payment.getAccount().getCurrency());
-      newTransaction.setDescription(payment
-          .getDescription()
-          .replace("\n", ". ")
-          .substring(0,
-              payment.getDescription().length() > 254 ? 254 : payment.getDescription().length()));
+      String desc = "";
+      if(payment.getDescription()!=null && !payment.getDescription().isEmpty()){
+    	  desc = payment.getDescription()
+    	          .replace("\n", ". ")
+    	          .substring(0, payment.getDescription().length() > 254 ? 254 : payment.getDescription().length());
+      }
+      newTransaction.setDescription(desc);
       newTransaction.setClient(payment.getClient());
       newTransaction.setLineNo(getTransactionMaxLineNo(payment.getAccount()) + 10);
 
--- a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/event/FIN_FinaccTransactionEventListener.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/event/FIN_FinaccTransactionEventListener.java	Wed Nov 25 09:01:32 2015 +0100
@@ -11,7 +11,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) 2014 Openbravo SLU
+ * All portions are Copyright (C) 2014-2015 Openbravo SLU
  * All Rights Reserved.
  * Contributor(s):  ______________________________________.
  *************************************************************************
@@ -22,6 +22,7 @@
 import javax.enterprise.event.Observes;
 
 import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
 import org.openbravo.advpaymentmngt.utility.APRMConstants;
 import org.openbravo.base.exception.OBException;
 import org.openbravo.base.model.Entity;
@@ -38,6 +39,7 @@
 
   private static Entity[] entities = { ModelProvider.getInstance().getEntity(
       FIN_FinaccTransaction.ENTITY_NAME) };
+  protected Logger logger = Logger.getLogger(this.getClass());
 
   @Override
   protected Entity[] getObservedEntities() {
@@ -79,7 +81,8 @@
         .equals(transactionType, APRMConstants.TRXTYPE_BPWithdrawal))
         && glItem == null
         && payment == null) {
-      throw new OBException("@APRM_INVALID_TRANSACTION@");
+      logger.debug("@APRM_INVALID_TRANSACTION@");
+      throw new OBException("@APRM_INVALID_TRANSACTION@", false);
     }
   }
 }
--- a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/filterexpression/AddPaymentDefaultValuesHandler.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/filterexpression/AddPaymentDefaultValuesHandler.java	Wed Nov 25 09:01:32 2015 +0100
@@ -32,13 +32,10 @@
 import org.openbravo.dal.core.OBContext;
 import org.openbravo.dal.security.OrganizationStructureProvider;
 import org.openbravo.dal.service.OBDal;
-import org.openbravo.dal.service.OBQuery;
 import org.openbravo.model.common.businesspartner.BusinessPartner;
-import org.openbravo.model.common.currency.Currency;
 import org.openbravo.model.common.enterprise.Organization;
 import org.openbravo.model.financialmgmt.payment.FIN_FinancialAccount;
 import org.openbravo.model.financialmgmt.payment.FIN_Payment;
-import org.openbravo.model.financialmgmt.payment.FIN_PaymentMethod;
 import org.openbravo.model.financialmgmt.payment.FIN_PaymentSchedule;
 import org.openbravo.model.financialmgmt.payment.FIN_PaymentScheduleDetail;
 import org.openbravo.model.financialmgmt.payment.FinAccPaymentMethod;
@@ -303,14 +300,14 @@
             strBPartnerId);
         if (isSOTrx
             && businessPartner.getAccount() != null
-            && getFinancialAccountPaymentMethod(paymentMethodId, businessPartner.getAccount()
-                .getId(), isSOTrx, currencyId) != null
+            && FIN_Utility.getFinancialAccountPaymentMethod(paymentMethodId, businessPartner
+                .getAccount().getId(), isSOTrx, currencyId) != null
             && osp.isInNaturalTree(businessPartner.getAccount().getOrganization(), OBDal
                 .getInstance().get(Organization.class, context.getString("inpadOrgId")))) {
           return businessPartner.getAccount().getId();
         } else if (!isSOTrx
             && businessPartner.getPOFinancialAccount() != null
-            && getFinancialAccountPaymentMethod(paymentMethodId, businessPartner
+            && FIN_Utility.getFinancialAccountPaymentMethod(paymentMethodId, businessPartner
                 .getPOFinancialAccount().getId(), isSOTrx, currencyId) != null
             && osp.isInNaturalTree(businessPartner.getPOFinancialAccount().getOrganization(), OBDal
                 .getInstance().get(Organization.class, context.getString("inpadOrgId")))) {
@@ -318,8 +315,8 @@
         }
       }
 
-      FinAccPaymentMethod fpm = getFinancialAccountPaymentMethod(paymentMethodId, null, isSOTrx,
-          currencyId);
+      FinAccPaymentMethod fpm = FIN_Utility.getFinancialAccountPaymentMethod(paymentMethodId, null,
+          isSOTrx, currencyId);
       if (fpm != null
           && osp.isInNaturalTree(fpm.getAccount().getOrganization(),
               OBDal.getInstance().get(Organization.class, context.getString("inpadOrgId")))) {
@@ -371,8 +368,8 @@
     boolean isSOTrx = "Y".equals(getDefaultIsSOTrx(requestMap));
     strFinancialAccountId = getContextFinancialAccount(requestMap);
     if (strFinPaymentMethodId != null
-        && getFinancialAccountPaymentMethod(strFinPaymentMethodId, strFinancialAccountId, isSOTrx,
-            null) != null) {
+        && FIN_Utility.getFinancialAccountPaymentMethod(strFinPaymentMethodId,
+            strFinancialAccountId, isSOTrx, null) != null) {
       return strFinPaymentMethodId;
     }
 
@@ -387,8 +384,8 @@
 
       if (isSOTrx
           && businessPartner.getPaymentMethod() != null
-          && getFinancialAccountPaymentMethod(businessPartner.getPaymentMethod().getId(),
-              strFinancialAccountId, isSOTrx, null) != null
+          && FIN_Utility.getFinancialAccountPaymentMethod(businessPartner.getPaymentMethod()
+              .getId(), strFinancialAccountId, isSOTrx, null) != null
           && osp.isInNaturalTree(businessPartner.getPaymentMethod().getOrganization(), OBDal
               .getInstance().get(Organization.class, context.getString("inpadOrgId")))) {
         return businessPartner.getPaymentMethod().getId();
@@ -396,8 +393,8 @@
 
       else if (!isSOTrx
           && businessPartner.getPOPaymentMethod() != null
-          && getFinancialAccountPaymentMethod(businessPartner.getPOPaymentMethod().getId(),
-              strFinancialAccountId, isSOTrx, null) != null
+          && FIN_Utility.getFinancialAccountPaymentMethod(businessPartner.getPOPaymentMethod()
+              .getId(), strFinancialAccountId, isSOTrx, null) != null
           && osp.isInNaturalTree(businessPartner.getPOPaymentMethod().getOrganization(), OBDal
               .getInstance().get(Organization.class, context.getString("inpadOrgId")))) {
         return businessPartner.getPOPaymentMethod().getId();
@@ -470,47 +467,4 @@
       return null;
     }
   }
-
-  private FinAccPaymentMethod getFinancialAccountPaymentMethod(String paymentMethodId,
-      String financialAccountId, boolean issotrx, String currencyId) {
-    StringBuffer where = new StringBuffer();
-    where.append(" as fapm");
-    where.append(" join fapm." + FinAccPaymentMethod.PROPERTY_ACCOUNT + " as fa");
-    where.append(" where fapm." + FinAccPaymentMethod.PROPERTY_PAYMENTMETHOD + " = :paymentMethod");
-    where.append(" and fa." + FIN_FinancialAccount.PROPERTY_ACTIVE + " = true");
-    if (issotrx) {
-      where.append(" and fapm." + FinAccPaymentMethod.PROPERTY_PAYINALLOW + " = true");
-    } else {
-      where.append(" and fapm." + FinAccPaymentMethod.PROPERTY_PAYOUTALLOW + " = true");
-    }
-    if (!StringUtils.isEmpty(financialAccountId)) {
-      where.append(" and fapm." + FinAccPaymentMethod.PROPERTY_ACCOUNT + " = :financialAccount");
-    }
-    if (!StringUtils.isEmpty(currencyId)) {
-      where.append(" and (fa." + FIN_FinancialAccount.PROPERTY_CURRENCY + " = :currency");
-      if (issotrx) {
-        where.append(" or fapm." + FinAccPaymentMethod.PROPERTY_PAYINISMULTICURRENCY + " = true)");
-      } else {
-        where.append(" or fapm." + FinAccPaymentMethod.PROPERTY_PAYOUTISMULTICURRENCY + " = true)");
-      }
-    }
-    where.append(" order by fapm." + FinAccPaymentMethod.PROPERTY_DEFAULT + " desc");
-
-    OBQuery<FinAccPaymentMethod> qry = OBDal.getInstance().createQuery(FinAccPaymentMethod.class,
-        where.toString());
-    qry.setFilterOnReadableOrganization(false);
-    qry.setMaxResult(1);
-
-    qry.setNamedParameter("paymentMethod",
-        OBDal.getInstance().get(FIN_PaymentMethod.class, paymentMethodId));
-    if (!StringUtils.isEmpty(financialAccountId)) {
-      qry.setNamedParameter("financialAccount",
-          OBDal.getInstance().get(FIN_FinancialAccount.class, financialAccountId));
-    }
-    if (!StringUtils.isEmpty(currencyId)) {
-      qry.setNamedParameter("currency", OBDal.getInstance().get(Currency.class, currencyId));
-    }
-
-    return qry.uniqueResult();
-  }
 }
--- a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_PaymentProcess.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_PaymentProcess.java	Wed Nov 25 09:01:32 2015 +0100
@@ -217,7 +217,8 @@
           // Show error message when payment has no lines
           if (paymentDetails.size() == 0) {
             msg = OBMessageUtils.messageBD("APRM_PaymentNoLines");
-            throw new OBException(msg);
+            log4j.debug(msg);
+            throw new OBException(msg, false);
           }
           for (FIN_PaymentDetail paymentDetail : paymentDetails) {
             for (FIN_PaymentScheduleDetail paymentScheduleDetail : paymentDetail
--- a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/utility/FIN_Utility.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/utility/FIN_Utility.java	Wed Nov 25 09:01:32 2015 +0100
@@ -20,7 +20,6 @@
 package org.openbravo.advpaymentmngt.utility;
 
 import java.math.BigDecimal;
-import java.sql.BatchUpdateException;
 import java.text.DecimalFormat;
 import java.text.DecimalFormatSymbols;
 import java.text.ParseException;
@@ -80,6 +79,7 @@
 import org.openbravo.model.financialmgmt.payment.FIN_PaymentScheduleDetail;
 import org.openbravo.model.financialmgmt.payment.FinAccPaymentMethod;
 import org.openbravo.service.db.CallStoredProcedure;
+import org.openbravo.service.db.DbUtility;
 import org.openbravo.utils.Replace;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -260,12 +260,8 @@
    * @return the underlying trigger message.
    */
   public static String getExceptionMessage(Throwable t) {
-    if (t.getCause() instanceof BatchUpdateException
-        && ((BatchUpdateException) t.getCause()).getNextException() != null) {
-      final BatchUpdateException bue = (BatchUpdateException) t.getCause();
-      return bue.getNextException().getMessage();
-    }
-    return t.getMessage();
+    Throwable throwable = DbUtility.getUnderlyingSQLException(t);
+    return throwable.getMessage();
   }
 
   /**
@@ -1531,4 +1527,60 @@
   private static void decreaseCustomerCredit(BusinessPartner businessPartner, BigDecimal amount) {
     updateCustomerCredit(businessPartner, amount, false);
   }
+
+  /**
+   * Get an active FinAccPaymentMethod related to paymentMethodId FIN_PaymentMethod and
+   * financialAccountId FIN_FinancialAccount, if exists. If paymentMethodId is null it will retrieve
+   * any FinAccPaymentMethod related to paymentMethodId FIN_PaymentMethod ordered by default field.
+   * FinAccPaymentMethod must have pay in/out active and must be compatible with currencyId Currency
+   * if currencyId is not null.
+   * 
+   * @param paymentMethodId
+   * @param financialAccountId
+   * @param issotrx
+   * @param currencyId
+   * @return
+   */
+  public static FinAccPaymentMethod getFinancialAccountPaymentMethod(String paymentMethodId,
+      String financialAccountId, boolean issotrx, String currencyId) {
+    StringBuffer where = new StringBuffer();
+    where.append(" as fapm");
+    where.append(" join fapm." + FinAccPaymentMethod.PROPERTY_ACCOUNT + " as fa");
+    where.append(" where fapm." + FinAccPaymentMethod.PROPERTY_PAYMENTMETHOD + " = :paymentMethod");
+    where.append(" and fa." + FIN_FinancialAccount.PROPERTY_ACTIVE + " = true");
+    if (issotrx) {
+      where.append(" and fapm." + FinAccPaymentMethod.PROPERTY_PAYINALLOW + " = true");
+    } else {
+      where.append(" and fapm." + FinAccPaymentMethod.PROPERTY_PAYOUTALLOW + " = true");
+    }
+    if (!StringUtils.isEmpty(financialAccountId)) {
+      where.append(" and fapm." + FinAccPaymentMethod.PROPERTY_ACCOUNT + " = :financialAccount");
+    }
+    if (!StringUtils.isEmpty(currencyId)) {
+      where.append(" and (fa." + FIN_FinancialAccount.PROPERTY_CURRENCY + " = :currency");
+      if (issotrx) {
+        where.append(" or fapm." + FinAccPaymentMethod.PROPERTY_PAYINISMULTICURRENCY + " = true)");
+      } else {
+        where.append(" or fapm." + FinAccPaymentMethod.PROPERTY_PAYOUTISMULTICURRENCY + " = true)");
+      }
+    }
+    where.append(" order by fapm." + FinAccPaymentMethod.PROPERTY_DEFAULT + " desc");
+
+    OBQuery<FinAccPaymentMethod> qry = OBDal.getInstance().createQuery(FinAccPaymentMethod.class,
+        where.toString());
+    qry.setFilterOnReadableOrganization(false);
+    qry.setMaxResult(1);
+
+    qry.setNamedParameter("paymentMethod",
+        OBDal.getInstance().get(FIN_PaymentMethod.class, paymentMethodId));
+    if (!StringUtils.isEmpty(financialAccountId)) {
+      qry.setNamedParameter("financialAccount",
+          OBDal.getInstance().get(FIN_FinancialAccount.class, financialAccountId));
+    }
+    if (!StringUtils.isEmpty(currencyId)) {
+      qry.setNamedParameter("currency", OBDal.getInstance().get(Currency.class, currencyId));
+    }
+
+    return (FinAccPaymentMethod) qry.uniqueResult();
+  }
 }
--- a/modules/org.openbravo.advpaymentmngt/web/org.openbravo.advpaymentmngt/js/ob-aprm-findTransaction.js	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.advpaymentmngt/web/org.openbravo.advpaymentmngt/js/ob-aprm-findTransaction.js	Wed Nov 25 09:01:32 2015 +0100
@@ -36,7 +36,7 @@
     if (trxSelection && trxSelection[0]) {
       var trxDepositAmt = trxSelection[0].depositAmount,
           trxPaymentAmt = trxSelection[0].paymentAmount,
-          blineAmt = view.callerField.view.getContextInfo().match_statement._selection[0].amount,
+          blineAmt = view.callerField.record.amount,
           trxAmt = trxDepositAmt - trxPaymentAmt,
           hideSplitConfirmation = OB.PropertyStore.get('APRM_MATCHSTATEMENT_HIDE_PARTIALMATCH_POPUP', view.windowId);
 
--- a/modules/org.openbravo.advpaymentmngt/web/org.openbravo.advpaymentmngt/js/ob-aprm-matchStatement.js	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.advpaymentmngt/web/org.openbravo.advpaymentmngt/js/ob-aprm-matchStatement.js	Wed Nov 25 09:01:32 2015 +0100
@@ -26,10 +26,37 @@
 };
 
 OB.APRM.MatchStatement.onLoad = function (view) {
-  var execute, grid = view.theForm.getItem('match_statement').canvas.viewGrid;
+  var execute, grid = view.theForm.getItem('match_statement').canvas.viewGrid,
+      buttons = view.popupButtons.members[0].members,
+      i, button, propertyButtonValue = '_buttonValue';
   view.cancelButton.hide();
   view.parentElement.parentElement.closeButton.hide();
 
+  for (i = 0; i < buttons.length; i++) {
+    button = buttons[i];
+    if (button[propertyButtonValue] === 'UN') {
+      view.unmatchButton = button;
+      button.hide();
+      break;
+    }
+  }
+
+  button.action = function () {
+    var callback = function (response, data, request) {
+        view.onRefreshFunction(view);
+        if (data && data.message && data.message.severity === 'error') {
+          view.messageBar.setMessage(isc.OBMessageBar.TYPE_ERROR, data.message.title, data.message.text);
+        } else if (data && data.message && data.message.severity === 'success') {
+          view.messageBar.setMessage(isc.OBMessageBar.TYPE_SUCCESS, data.message.title, data.message.text);
+        } else if (data && data.message && data.message.severity === 'warning') {
+          view.messageBar.setMessage(isc.OBMessageBar.TYPE_WARNING, data.message.title, data.message.text);
+        }
+        };
+    OB.RemoteCallManager.call('org.openbravo.advpaymentmngt.actionHandler.UnMatchSelectedTransactionsActionHandler', {
+      bankStatementLineIds: grid.getSelectedRecords()
+    }, {}, callback);
+  };
+
   grid.dataSourceOrig = grid.dataSource;
   grid.dataSource = null;
   execute = function (ok) {
@@ -73,6 +100,24 @@
   actionHandlerCall();
 };
 
+OB.APRM.MatchStatement.selectionChanged = function (grid, changedRecord, recordList) {
+  if (changedRecord.obSelected && changedRecord.cleared) {
+    grid.view.unmatchButton.show();
+    return;
+  } else {
+    var i, record, selection = grid.getSelectedRecords() || [],
+        len = selection.length;
+    for (i = 0; i < len; i++) {
+      record = grid.getEditedRecord(grid.getRecordIndex(selection[i]));
+      if (record && record.obSelected && record.cleared) {
+        grid.view.unmatchButton.show();
+        return;
+      }
+    }
+  }
+
+  grid.view.unmatchButton.hide();
+};
 
 isc.ClassFactory.defineClass('APRMMatchStatGridButtonsComponent', isc.HLayout);
 
@@ -128,7 +173,9 @@
       }
     });
     // Disable searchButton button if record is linked to a transaction
+    // and update Unmatch All button
     searchButton.setDisabled(me.record.cleared);
+    OB.APRM.MatchStatement.selectionChanged(me.grid, me.record);
 
     addButton = isc.OBGridToolStripIcon.create({
       buttonType: 'add',
@@ -168,7 +215,9 @@
       }
     });
     // Disable addButton button if record is linked to a transaction
+    // and update Unmatch All button
     addButton.setDisabled(me.record.cleared);
+    OB.APRM.MatchStatement.selectionChanged(me.grid, me.record);
 
     clearButton = isc.OBGridToolStripIcon.create({
       buttonType: 'clearRight',
@@ -197,7 +246,9 @@
     buttonSeparator2 = isc.OBGridToolStripSeparator.create({});
 
     // Disable clear button if record is not linked to a transaction
+    // and update Unmatch All button
     clearButton.setDisabled(!me.record.cleared);
+    OB.APRM.MatchStatement.selectionChanged(me.grid, me.record);
 
     this.addMembers([searchButton, buttonSeparator1, addButton, buttonSeparator2, clearButton]);
     this.Super('initWidget', arguments);
--- a/modules/org.openbravo.apachejdbcconnectionpool/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.apachejdbcconnectionpool/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -6,7 +6,7 @@
 <!--8A098711BB324335A19833286BDB093D-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
 <!--8A098711BB324335A19833286BDB093D-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--8A098711BB324335A19833286BDB093D-->  <NAME><![CDATA[Apache External Connection Pool]]></NAME>
-<!--8A098711BB324335A19833286BDB093D-->  <VERSION><![CDATA[1.0.27639]]></VERSION>
+<!--8A098711BB324335A19833286BDB093D-->  <VERSION><![CDATA[1.0.28035]]></VERSION>
 <!--8A098711BB324335A19833286BDB093D-->  <DESCRIPTION><![CDATA[Apache External Connection Pool]]></DESCRIPTION>
 <!--8A098711BB324335A19833286BDB093D-->  <HELP><![CDATA[This module implements the Apache JDBC Connection Pool (http://wiki.openbravo.com/wiki/Modules:Apache_JDBC_Connection_Pool).]]></HELP>
 <!--8A098711BB324335A19833286BDB093D-->  <TYPE><![CDATA[M]]></TYPE>
--- a/modules/org.openbravo.apachejdbcconnectionpool/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.apachejdbcconnectionpool/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -7,7 +7,7 @@
 <!--1467C397BC5F4999A5606F39CD6FF8A4-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--1467C397BC5F4999A5606F39CD6FF8A4-->  <AD_MODULE_ID><![CDATA[8A098711BB324335A19833286BDB093D]]></AD_MODULE_ID>
 <!--1467C397BC5F4999A5606F39CD6FF8A4-->  <AD_DEPENDENT_MODULE_ID><![CDATA[7E48CDD73B7E493A8BED4F7253E7C989]]></AD_DEPENDENT_MODULE_ID>
-<!--1467C397BC5F4999A5606F39CD6FF8A4-->  <STARTVERSION><![CDATA[2.1.27639]]></STARTVERSION>
+<!--1467C397BC5F4999A5606F39CD6FF8A4-->  <STARTVERSION><![CDATA[2.1.28035]]></STARTVERSION>
 <!--1467C397BC5F4999A5606F39CD6FF8A4-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--1467C397BC5F4999A5606F39CD6FF8A4-->  <DEPENDANT_MODULE_NAME><![CDATA[Openbravo 3.0 Framework]]></DEPENDANT_MODULE_NAME>
 <!--1467C397BC5F4999A5606F39CD6FF8A4-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
--- a/modules/org.openbravo.base.weld/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.base.weld/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -6,7 +6,7 @@
 <!--C70732EA90A14EC0916078B85CC33D2D-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
 <!--C70732EA90A14EC0916078B85CC33D2D-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--C70732EA90A14EC0916078B85CC33D2D-->  <NAME><![CDATA[JBoss Weld]]></NAME>
-<!--C70732EA90A14EC0916078B85CC33D2D-->  <VERSION><![CDATA[1.1.27639]]></VERSION>
+<!--C70732EA90A14EC0916078B85CC33D2D-->  <VERSION><![CDATA[1.1.28035]]></VERSION>
 <!--C70732EA90A14EC0916078B85CC33D2D-->  <DESCRIPTION><![CDATA[JBoss Weld]]></DESCRIPTION>
 <!--C70732EA90A14EC0916078B85CC33D2D-->  <HELP><![CDATA[Provides the JBoss Weld framework: Java Contexts and Dependency Injection for the Java EE platform (CDI). For more information see http://seamframework.org/Weld]]></HELP>
 <!--C70732EA90A14EC0916078B85CC33D2D-->  <URL><![CDATA[http://forge.openbravo.com/projects/weld]]></URL>
--- a/modules/org.openbravo.base.weld/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.base.weld/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -7,7 +7,7 @@
 <!--8BDE81545C1A43EAAC4BA3C5ED754DC8-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--8BDE81545C1A43EAAC4BA3C5ED754DC8-->  <AD_MODULE_ID><![CDATA[C70732EA90A14EC0916078B85CC33D2D]]></AD_MODULE_ID>
 <!--8BDE81545C1A43EAAC4BA3C5ED754DC8-->  <AD_DEPENDENT_MODULE_ID><![CDATA[0]]></AD_DEPENDENT_MODULE_ID>
-<!--8BDE81545C1A43EAAC4BA3C5ED754DC8-->  <STARTVERSION><![CDATA[3.0.27639]]></STARTVERSION>
+<!--8BDE81545C1A43EAAC4BA3C5ED754DC8-->  <STARTVERSION><![CDATA[3.0.28035]]></STARTVERSION>
 <!--8BDE81545C1A43EAAC4BA3C5ED754DC8-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--8BDE81545C1A43EAAC4BA3C5ED754DC8-->  <DEPENDANT_MODULE_NAME><![CDATA[Core]]></DEPENDANT_MODULE_NAME>
 <!--8BDE81545C1A43EAAC4BA3C5ED754DC8-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
--- a/modules/org.openbravo.client.application/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.client.application/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -6,7 +6,7 @@
 <!--9BA0836A3CD74EE4AB48753A47211BCC-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
 <!--9BA0836A3CD74EE4AB48753A47211BCC-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--9BA0836A3CD74EE4AB48753A47211BCC-->  <NAME><![CDATA[User Interface Application]]></NAME>
-<!--9BA0836A3CD74EE4AB48753A47211BCC-->  <VERSION><![CDATA[2.1.27639]]></VERSION>
+<!--9BA0836A3CD74EE4AB48753A47211BCC-->  <VERSION><![CDATA[2.1.28035]]></VERSION>
 <!--9BA0836A3CD74EE4AB48753A47211BCC-->  <DESCRIPTION><![CDATA[Provides the main application components for the openbravo user interface]]></DESCRIPTION>
 <!--9BA0836A3CD74EE4AB48753A47211BCC-->  <HELP><![CDATA[Provides the main application components for the openbravo user interface. The main layout incorporates a navigation bar and a main view area.]]></HELP>
 <!--9BA0836A3CD74EE4AB48753A47211BCC-->  <URL><![CDATA[http://forge.openbravo.com/projects/clientapplication]]></URL>
--- a/modules/org.openbravo.client.application/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.client.application/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -7,7 +7,7 @@
 <!--15D7CE8D95D043189162DBABA54A1F61-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--15D7CE8D95D043189162DBABA54A1F61-->  <AD_MODULE_ID><![CDATA[9BA0836A3CD74EE4AB48753A47211BCC]]></AD_MODULE_ID>
 <!--15D7CE8D95D043189162DBABA54A1F61-->  <AD_DEPENDENT_MODULE_ID><![CDATA[A44B9BA75C354D8FB2E3F7D6EB6BFDC4]]></AD_DEPENDENT_MODULE_ID>
-<!--15D7CE8D95D043189162DBABA54A1F61-->  <STARTVERSION><![CDATA[2.1.27639]]></STARTVERSION>
+<!--15D7CE8D95D043189162DBABA54A1F61-->  <STARTVERSION><![CDATA[2.1.28035]]></STARTVERSION>
 <!--15D7CE8D95D043189162DBABA54A1F61-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--15D7CE8D95D043189162DBABA54A1F61-->  <DEPENDANT_MODULE_NAME><![CDATA[JSON Datasource]]></DEPENDANT_MODULE_NAME>
 <!--15D7CE8D95D043189162DBABA54A1F61-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -21,7 +21,7 @@
 <!--60A170212F36499D83B8AD38D01F46B3-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--60A170212F36499D83B8AD38D01F46B3-->  <AD_MODULE_ID><![CDATA[9BA0836A3CD74EE4AB48753A47211BCC]]></AD_MODULE_ID>
 <!--60A170212F36499D83B8AD38D01F46B3-->  <AD_DEPENDENT_MODULE_ID><![CDATA[4B828F4D03264080AA1D2057B13F613C]]></AD_DEPENDENT_MODULE_ID>
-<!--60A170212F36499D83B8AD38D01F46B3-->  <STARTVERSION><![CDATA[2.1.27639]]></STARTVERSION>
+<!--60A170212F36499D83B8AD38D01F46B3-->  <STARTVERSION><![CDATA[2.1.28035]]></STARTVERSION>
 <!--60A170212F36499D83B8AD38D01F46B3-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--60A170212F36499D83B8AD38D01F46B3-->  <DEPENDANT_MODULE_NAME><![CDATA[User Interface Client Kernel]]></DEPENDANT_MODULE_NAME>
 <!--60A170212F36499D83B8AD38D01F46B3-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -35,7 +35,7 @@
 <!--824D60CB352E4099B1D8C903CA139DAE-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--824D60CB352E4099B1D8C903CA139DAE-->  <AD_MODULE_ID><![CDATA[9BA0836A3CD74EE4AB48753A47211BCC]]></AD_MODULE_ID>
 <!--824D60CB352E4099B1D8C903CA139DAE-->  <AD_DEPENDENT_MODULE_ID><![CDATA[0]]></AD_DEPENDENT_MODULE_ID>
-<!--824D60CB352E4099B1D8C903CA139DAE-->  <STARTVERSION><![CDATA[3.0.27639]]></STARTVERSION>
+<!--824D60CB352E4099B1D8C903CA139DAE-->  <STARTVERSION><![CDATA[3.0.28035]]></STARTVERSION>
 <!--824D60CB352E4099B1D8C903CA139DAE-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--824D60CB352E4099B1D8C903CA139DAE-->  <DEPENDANT_MODULE_NAME><![CDATA[core]]></DEPENDANT_MODULE_NAME>
 <!--824D60CB352E4099B1D8C903CA139DAE-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -49,7 +49,7 @@
 <!--E8FD820AFE3D4FE08C02FC47769026AD-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--E8FD820AFE3D4FE08C02FC47769026AD-->  <AD_MODULE_ID><![CDATA[9BA0836A3CD74EE4AB48753A47211BCC]]></AD_MODULE_ID>
 <!--E8FD820AFE3D4FE08C02FC47769026AD-->  <AD_DEPENDENT_MODULE_ID><![CDATA[EC356CEE3D46416CA1EBEEB9AB82EDB9]]></AD_DEPENDENT_MODULE_ID>
-<!--E8FD820AFE3D4FE08C02FC47769026AD-->  <STARTVERSION><![CDATA[8.1.27639]]></STARTVERSION>
+<!--E8FD820AFE3D4FE08C02FC47769026AD-->  <STARTVERSION><![CDATA[8.1.28035]]></STARTVERSION>
 <!--E8FD820AFE3D4FE08C02FC47769026AD-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--E8FD820AFE3D4FE08C02FC47769026AD-->  <DEPENDANT_MODULE_NAME><![CDATA[Smartclient]]></DEPENDANT_MODULE_NAME>
 <!--E8FD820AFE3D4FE08C02FC47769026AD-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
--- a/modules/org.openbravo.client.application/src/org/openbravo/client/application/navigationbarcomponents/UserInfoWidgetActionHandler.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.client.application/src/org/openbravo/client/application/navigationbarcomponents/UserInfoWidgetActionHandler.java	Wed Nov 25 09:01:32 2015 +0100
@@ -295,7 +295,8 @@
           || limitation == LicenseRestriction.MODULE_EXPIRED
           || limitation == LicenseRestriction.NOT_MATCHED_INSTANCE
           || limitation == LicenseRestriction.HB_NOT_ACTIVE
-          || limitation == LicenseRestriction.ON_DEMAND_OFF_PLATFORM) {
+          || limitation == LicenseRestriction.ON_DEMAND_OFF_PLATFORM
+          || limitation == LicenseRestriction.POS_TERMINALS_EXCEEDED) {
         return Collections.singletonList(OBDal.getInstance().get(Role.class, "0"));
       }
     }
--- a/modules/org.openbravo.client.application/src/org/openbravo/client/application/templates/ob-pick-and-execute-view-tab.js.ftl	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.client.application/src/org/openbravo/client/application/templates/ob-pick-and-execute-view-tab.js.ftl	Wed Nov 25 09:01:32 2015 +0100
@@ -12,7 +12,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) 2011-2014 Openbravo SLU
+ * All portions are Copyright (C) 2011-2015 Openbravo SLU
  * All Rights Reserved.
  * Contributor(s):  ______________________________________.
  ************************************************************************
@@ -95,12 +95,20 @@
     gridProperties: ${tabComponent.viewGrid},
 
     handleReadOnlyLogic: function(currentValues, context, form){
-     <#list tabComponent.fieldHandler.fields as field>
-      <#if field.readOnlyIf != "">
-      if (form.getField('${field.name}') && form.getField('${field.name}').setDisabled) {
-        form.getField('${field.name}').setDisabled(${field.readOnlyIf});
-      }
-      </#if>
+    <#list tabComponent.fieldHandler.fields as field>
+    <#if field.readOnlyIf != "" && field.showIf == "">
+    if (form.getField('${field.name}') && form.getField('${field.name}').setDisabled) {
+       form.getField('${field.name}').setDisabled(${field.readOnlyIf});
+    }
+    <#elseif field.readOnlyIf == "" && field.showIf != "">
+    if (form.getField('${field.name}') && form.getField('${field.name}').setDisabled) {
+       form.getField('${field.name}').setDisabled((${field.showIf}) === false);
+    }
+    <#elseif field.readOnlyIf != "" && field.showIf != "">
+    if (form.getField('${field.name}') && form.getField('${field.name}').setDisabled) {
+       form.getField('${field.name}').setDisabled((${field.readOnlyIf}) || (${field.showIf}) === false);
+    }
+    </#if>
     </#list>
     },
     
--- a/modules/org.openbravo.client.application/src/org/openbravo/client/application/templates/ob-view-form.js.ftl	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.client.application/src/org/openbravo/client/application/templates/ob-view-form.js.ftl	Wed Nov 25 09:01:32 2015 +0100
@@ -12,7 +12,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) 2010-2011 Openbravo SLU
+ * All portions are Copyright (C) 2010-2015 Openbravo SLU
  * All Rights Reserved.
  * Contributor(s):  ______________________________________.
  ************************************************************************
@@ -23,14 +23,14 @@
     <#--
     // this this is the view    
     -->
-    statusBarFields: this.statusBarFields<#if data.fieldHandler.hasFieldsWithReadOnlyIf>,</#if>
+    statusBarFields: this.statusBarFields<#if data.fieldHandler.hasFieldsWithReadOnlyIf || data.fieldHandler.hasFieldsWithShowIf>,</#if>
     </#if>
     
 <#--
     // except for the fields all other form properties should be added to the formProperties
     // the formProperties are re-used for inline grid editing
 -->
-   <#if data.fieldHandler.hasFieldsWithReadOnlyIf>
+   <#if data.fieldHandler.hasFieldsWithReadOnlyIf || data.fieldHandler.hasFieldsWithShowIf>
     obFormProperties: {
       onFieldChanged: function(form, item, value) {
         var f = form || this,
@@ -39,11 +39,23 @@
             disabledFields, i;
             OB.Utilities.fixNull250(currentValues);
         <#list data.fieldHandler.fields as field>
-        <#if field.readOnlyIf != "">
-            f.disableItem('${field.name}', ${field.readOnlyIf});
+        <#if field.readOnlyIf != "" && field.showIf == "">
+        // Applying readonly.
+           f.disableItem('${field.name}', ${field.readOnlyIf});
+        <#elseif field.readOnlyIf == "" && field.showIf != "">
+        // Applying display logic in grid.
+        if (!this.view.isShowingForm) {
+           f.disableItem('${field.name}', (${field.showIf}) === false);
+        }
+        <#elseif field.readOnlyIf != "" && field.showIf != "">
+        // Applying display logic and readonly in grid/form.
+        if (!this.view.isShowingForm) {
+           f.disableItem('${field.name}', (${field.readOnlyIf}) || (${field.showIf}) === false);
+        } else {
+           f.disableItem('${field.name}', ${field.readOnlyIf});
+        }
         </#if>
         </#list>
-
         // disable forced in case the fields are set as read only per role
         disabledFields = form.view.disabledFields;
         if (disabledFields) {
--- a/modules/org.openbravo.client.application/src/org/openbravo/client/application/window/OBViewFieldHandler.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.client.application/src/org/openbravo/client/application/window/OBViewFieldHandler.java	Wed Nov 25 09:01:32 2015 +0100
@@ -26,6 +26,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
 import org.codehaus.jettison.json.JSONException;
 import org.codehaus.jettison.json.JSONObject;
@@ -91,7 +92,16 @@
 
   public boolean getHasFieldsWithReadOnlyIf() {
     for (OBViewFieldDefinition viewField : getFields()) {
-      if (viewField.getReadOnlyIf() != null && viewField.getReadOnlyIf().trim().length() > 0) {
+      if (StringUtils.isNotBlank(viewField.getReadOnlyIf())) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  public boolean getHasFieldsWithShowIf() {
+    for (OBViewFieldDefinition viewField : getFields()) {
+      if (StringUtils.isNotBlank(viewField.getShowIf())) {
         return true;
       }
     }
--- a/modules/org.openbravo.client.application/src/org/openbravo/client/application/window/OBViewUtil.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.client.application/src/org/openbravo/client/application/window/OBViewUtil.java	Wed Nov 25 09:01:32 2015 +0100
@@ -18,7 +18,6 @@
  */
 package org.openbravo.client.application.window;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import org.codehaus.jettison.json.JSONException;
@@ -188,237 +187,182 @@
    * @return the grid configuration
    */
   private static JSONObject getGridConfigurationSettings(Field field, Tab tab) {
-    Boolean canSort = null;
-    Boolean canFilter = null;
-    Boolean filterOnChange = null;
-    Boolean lazyFiltering = null;
-    Boolean allowFkFilterByIdentifier = null;
-    Boolean showFkDropdownUnfiltered = null;
-    Boolean disableFkDropdown = null;
-    String operator = null;
-    Long thresholdToFilter = null;
-    JSONObject result = new JSONObject();
+    GridConfigSettings settings = new GridConfigSettings();
 
-    if (field != null && field.getId() != null) {
-      if (canSort == null || canFilter == null || operator == null || filterOnChange == null
-          || thresholdToFilter == null || allowFkFilterByIdentifier == null
-          || showFkDropdownUnfiltered == null || disableFkDropdown == null) {
-        List<Object> fieldParams = new ArrayList<Object>();
-        String fieldConfsHql = " as p where p.field.id = ? ";
-        fieldParams.add(field.getId());
-        // Trying to get parameters from "Grid Configuration (Tab/Field)" -> "Field" window
-        List<GCField> fieldConfs = OBDal.getInstance()
-            .createQuery(GCField.class, fieldConfsHql, fieldParams).list();
-        if (!fieldConfs.isEmpty()) {
-          if (canSort == null) {
-            if ("Y".equals(fieldConfs.get(0).getSortable())) {
-              canSort = true;
-            } else if ("N".equals(fieldConfs.get(0).getSortable())) {
-              canSort = false;
-            }
-          }
-          if (canFilter == null) {
-            if ("Y".equals(fieldConfs.get(0).getFilterable())) {
-              canFilter = true;
-            } else if ("N".equals(fieldConfs.get(0).getFilterable())) {
-              canFilter = false;
-            }
-          }
-          if (operator == null) {
-            if (fieldConfs.get(0).getTextFilterBehavior() != null
-                && !"D".equals(fieldConfs.get(0).getTextFilterBehavior())) {
-              operator = fieldConfs.get(0).getTextFilterBehavior();
-            }
-          }
-          if (filterOnChange == null) {
-            if ("Y".equals(fieldConfs.get(0).getFilterOnChange())) {
-              filterOnChange = true;
-            } else if ("N".equals(fieldConfs.get(0).getFilterOnChange())) {
-              filterOnChange = false;
-            }
-          }
-          if (allowFkFilterByIdentifier == null) {
-            if ("Y".equals(fieldConfs.get(0).getAllowFilterByIdentifier())) {
-              allowFkFilterByIdentifier = true;
-            } else if ("N".equals(fieldConfs.get(0).getAllowFilterByIdentifier())) {
-              allowFkFilterByIdentifier = false;
-            }
-          }
-          if (showFkDropdownUnfiltered == null) {
-            if ("Y".equals(fieldConfs.get(0).getIsFkDropdownUnfiltered())) {
-              showFkDropdownUnfiltered = true;
-            } else if ("N".equals(fieldConfs.get(0).getIsFkDropdownUnfiltered())) {
-              showFkDropdownUnfiltered = false;
-            }
-          }
-          if (disableFkDropdown == null) {
-            if ("Y".equals(fieldConfs.get(0).getDisableFkCombo())) {
-              disableFkDropdown = true;
-            } else if ("N".equals(fieldConfs.get(0).getDisableFkCombo())) {
-              disableFkDropdown = false;
-            }
-          }
-          if (thresholdToFilter == null) {
-            thresholdToFilter = fieldConfs.get(0).getThresholdToFilter();
-          }
+    GCTab tabConf = null;
+    for (GCTab t : tab.getOBUIAPPGCTabList()) {
+      tabConf = t;
+      break;
+    }
+
+    if (tabConf != null && field != null && field.getId() != null) {
+      GCField fieldConf = null;
+      for (GCField fc : tabConf.getOBUIAPPGCFieldList()) {
+        // field list is cached in memory, so can be reused for all fields without the need of reach
+        // DB again
+        if (DalUtil.getId(fc.getField()).equals(DalUtil.getId(field))) {
+          fieldConf = fc;
+          break;
         }
       }
+
+      // Trying to get parameters from "Grid Configuration (Tab/Field)" -> "Field" window
+      if (fieldConf != null) {
+        settings.processConfig(fieldConf);
+      }
     }
 
-    if (canSort == null || canFilter == null || operator == null || filterOnChange == null
-        || thresholdToFilter == null || allowFkFilterByIdentifier == null
-        || showFkDropdownUnfiltered == null) {
-      List<Object> tabParams = new ArrayList<Object>();
-      String tabConfsHql = " as p where p.tab.id = ? ";
-      tabParams.add(tab.getId());
+    if (tabConf != null && settings.shouldContinueProcessing()) {
       // Trying to get parameters from "Grid Configuration (Tab/Field)" -> "Tab" window
-      List<GCTab> tabConfs = OBDal.getInstance().createQuery(GCTab.class, tabConfsHql, tabParams)
-          .list();
-      if (!tabConfs.isEmpty()) {
-        if (canSort == null) {
-          if ("Y".equals(tabConfs.get(0).getSortable())) {
-            canSort = true;
-          } else if ("N".equals(tabConfs.get(0).getSortable())) {
-            canSort = false;
+      settings.processConfig(tabConf);
+    }
+
+    if (settings.shouldContinueProcessing()) {
+      // Trying to get parameters from "Grid Configuration (System)" window
+      List<GCSystem> sysConfs = OBDal.getInstance().createQuery(GCSystem.class, "").list();
+      if (!sysConfs.isEmpty()) {
+        settings.processConfig(sysConfs.get(0));
+      }
+    }
+
+    return settings.processJSONResult();
+  }
+
+  private static class GridConfigSettings {
+    private Boolean canSort = null;
+    private Boolean canFilter = null;
+    private Boolean filterOnChange = null;
+    private Boolean lazyFiltering = null;
+    private Boolean allowFkFilterByIdentifier = null;
+    private Boolean showFkDropdownUnfiltered = null;
+    private Boolean disableFkDropdown = null;
+    private String operator = null;
+    private Long thresholdToFilter = null;
+
+    private boolean shouldContinueProcessing() {
+      return canSort == null || canFilter == null || operator == null || filterOnChange == null
+          || thresholdToFilter == null || allowFkFilterByIdentifier == null
+          || showFkDropdownUnfiltered == null || disableFkDropdown == null || lazyFiltering == null;
+    }
+
+    private Boolean convertBoolean(BaseOBObject gcItem, String property) {
+      Boolean isPropertyEnabled = true;
+      Class<? extends BaseOBObject> itemClass = gcItem.getClass();
+      try {
+        if (gcItem instanceof GCSystem) {
+          if (gcItem.get(itemClass.getField(property).get(gcItem).toString()).equals(true)) {
+            isPropertyEnabled = true;
+          } else if (gcItem.get(itemClass.getField(property).get(gcItem).toString()).equals(false)) {
+            isPropertyEnabled = false;
+          }
+        } else {
+          if ("Y".equals(gcItem.get(itemClass.getField(property).get(gcItem).toString()))) {
+            isPropertyEnabled = true;
+          } else if ("N".equals(gcItem.get(itemClass.getField(property).get(gcItem).toString()))) {
+            isPropertyEnabled = false;
+          } else if ("D".equals(gcItem.get(itemClass.getField(property).get(gcItem).toString()))) {
+            isPropertyEnabled = null;
           }
         }
+      } catch (Exception e) {
+        log.error("Error while converting a value to boolean", e);
+      }
+      return isPropertyEnabled;
+    }
+
+    private void processConfig(BaseOBObject gcItem) {
+      Class<? extends BaseOBObject> itemClass = gcItem.getClass();
+      try {
+        if (canSort == null) {
+          canSort = convertBoolean(gcItem, "PROPERTY_SORTABLE");
+        }
         if (canFilter == null) {
-          if ("Y".equals(tabConfs.get(0).getFilterable())) {
-            canFilter = true;
-          } else if ("N".equals(tabConfs.get(0).getFilterable())) {
-            canFilter = false;
-          }
+          canFilter = convertBoolean(gcItem, "PROPERTY_FILTERABLE");
         }
         if (operator == null) {
-          if (tabConfs.get(0).getTextFilterBehavior() != null
-              && !"D".equals(tabConfs.get(0).getTextFilterBehavior())) {
-            operator = tabConfs.get(0).getTextFilterBehavior();
+          if (gcItem.get(itemClass.getField("PROPERTY_TEXTFILTERBEHAVIOR").get(gcItem).toString()) != null
+              && !"D".equals(gcItem.get(itemClass.getField("PROPERTY_TEXTFILTERBEHAVIOR")
+                  .get(gcItem).toString()))) {
+            operator = (String) gcItem.get(itemClass.getField("PROPERTY_TEXTFILTERBEHAVIOR")
+                .get(gcItem).toString());
           }
         }
         if (filterOnChange == null) {
-          if ("Y".equals(tabConfs.get(0).getFilterOnChange())) {
-            filterOnChange = true;
-          } else if ("N".equals(tabConfs.get(0).getFilterOnChange())) {
-            filterOnChange = false;
-          }
-        }
-        if (lazyFiltering == null) {
-          if ("Y".equals(tabConfs.get(0).getIsLazyFiltering())) {
-            lazyFiltering = true;
-          } else if ("N".equals(tabConfs.get(0).getIsLazyFiltering())) {
-            lazyFiltering = false;
-          }
+          filterOnChange = convertBoolean(gcItem, "PROPERTY_FILTERONCHANGE");
         }
         if (allowFkFilterByIdentifier == null) {
-          if ("Y".equals(tabConfs.get(0).getAllowFilterByIdentifier())) {
-            allowFkFilterByIdentifier = true;
-          } else if ("N".equals(tabConfs.get(0).getAllowFilterByIdentifier())) {
-            allowFkFilterByIdentifier = false;
-          }
+          allowFkFilterByIdentifier = convertBoolean(gcItem, "PROPERTY_ALLOWFILTERBYIDENTIFIER");
         }
         if (showFkDropdownUnfiltered == null) {
-          if ("Y".equals(tabConfs.get(0).getIsFkDropDownUnfiltered())) {
-            showFkDropdownUnfiltered = true;
-          } else if ("N".equals(tabConfs.get(0).getIsFkDropDownUnfiltered())) {
-            showFkDropdownUnfiltered = false;
-          }
+          showFkDropdownUnfiltered = convertBoolean(gcItem, "PROPERTY_ISFKDROPDOWNUNFILTERED");
         }
         if (disableFkDropdown == null) {
-          if ("Y".equals(tabConfs.get(0).getDisableFkCombo())) {
-            disableFkDropdown = true;
-          } else if ("N".equals(tabConfs.get(0).getDisableFkCombo())) {
-            disableFkDropdown = false;
-          }
+          disableFkDropdown = convertBoolean(gcItem, "PROPERTY_DISABLEFKCOMBO");
         }
         if (thresholdToFilter == null) {
-          thresholdToFilter = tabConfs.get(0).getThresholdToFilter();
+          thresholdToFilter = (Long) gcItem.get(itemClass.getField("PROPERTY_THRESHOLDTOFILTER")
+              .get(gcItem).toString());
         }
+        if (lazyFiltering == null && !(gcItem instanceof GCField)) {
+          lazyFiltering = convertBoolean(gcItem, "PROPERTY_ISLAZYFILTERING");
+        }
+      } catch (Exception e) {
+        log.error("Error while getting the properties of " + gcItem, e);
       }
     }
 
-    if (canSort == null || canFilter == null || operator == null || filterOnChange == null
-        || thresholdToFilter == null || showFkDropdownUnfiltered == null) {
-      // Trying to get parameters from "Grid Configuration (System)" window
-      List<GCSystem> sysConfs = OBDal.getInstance().createQuery(GCSystem.class, "").list();
-      if (!sysConfs.isEmpty()) {
-        if (canSort == null) {
-          canSort = sysConfs.get(0).isSortable();
-        }
-        if (canFilter == null) {
-          canFilter = sysConfs.get(0).isFilterable();
-        }
-        if (operator == null) {
-          operator = sysConfs.get(0).getTextFilterBehavior();
-        }
-        if (filterOnChange == null) {
-          filterOnChange = sysConfs.get(0).isFilterOnChange();
-        }
-        if (lazyFiltering == null) {
-          lazyFiltering = sysConfs.get(0).isLazyFiltering();
-        }
-        if (thresholdToFilter == null) {
-          thresholdToFilter = sysConfs.get(0).getThresholdToFilter();
-        }
-        if (allowFkFilterByIdentifier == null) {
-          allowFkFilterByIdentifier = sysConfs.get(0).isAllowFilterByIdentifier();
-        }
-        if (showFkDropdownUnfiltered == null) {
-          showFkDropdownUnfiltered = sysConfs.get(0).isFkDropDownUnfiltered();
-        }
-        if (disableFkDropdown == null) {
-          disableFkDropdown = sysConfs.get(0).isDisableFkCombo();
+    public JSONObject processJSONResult() {
+      if (operator != null) {
+        if ("IC".equals(operator)) {
+          operator = "iContains";
+        } else if ("IS".equals(operator)) {
+          operator = "iStartsWith";
+        } else if ("IE".equals(operator)) {
+          operator = "iEquals";
+        } else if ("C".equals(operator)) {
+          operator = "contains";
+        } else if ("S".equals(operator)) {
+          operator = "startsWith";
+        } else if ("E".equals(operator)) {
+          operator = "equals";
         }
       }
+
+      JSONObject result = new JSONObject();
+      try {
+        if (canSort != null) {
+          result.put("canSort", canSort);
+        }
+        if (canFilter != null) {
+          result.put("canFilter", canFilter);
+        }
+        if (operator != null) {
+          result.put("operator", operator);
+        }
+        // If the tab uses lazy filtering, the fields should not filter on change
+        if (Boolean.TRUE.equals(lazyFiltering)) {
+          filterOnChange = false;
+        }
+        if (filterOnChange != null) {
+          result.put("filterOnChange", filterOnChange);
+        }
+        if (thresholdToFilter != null) {
+          result.put("thresholdToFilter", thresholdToFilter);
+        }
+        if (allowFkFilterByIdentifier != null) {
+          result.put("allowFkFilterByIdentifier", allowFkFilterByIdentifier);
+        }
+        if (showFkDropdownUnfiltered != null) {
+          result.put("showFkDropdownUnfiltered", showFkDropdownUnfiltered);
+        }
+        if (disableFkDropdown != null) {
+          result.put("disableFkDropdown", disableFkDropdown);
+        }
+      } catch (JSONException e) {
+        log.error("Couldn't get field property value", e);
+      }
+
+      return result;
     }
-
-    if (operator != null) {
-      if ("IC".equals(operator)) {
-        operator = "iContains";
-      } else if ("IS".equals(operator)) {
-        operator = "iStartsWith";
-      } else if ("IE".equals(operator)) {
-        operator = "iEquals";
-      } else if ("C".equals(operator)) {
-        operator = "contains";
-      } else if ("S".equals(operator)) {
-        operator = "startsWith";
-      } else if ("E".equals(operator)) {
-        operator = "equals";
-      }
-    }
-
-    try {
-      if (canSort != null) {
-        result.put("canSort", canSort);
-      }
-      if (canFilter != null) {
-        result.put("canFilter", canFilter);
-      }
-      if (operator != null) {
-        result.put("operator", operator);
-      }
-      // If the tab uses lazy filtering, the fields should not filter on change
-      if (Boolean.TRUE.equals(lazyFiltering)) {
-        filterOnChange = false;
-      }
-      if (filterOnChange != null) {
-        result.put("filterOnChange", filterOnChange);
-      }
-      if (thresholdToFilter != null) {
-        result.put("thresholdToFilter", thresholdToFilter);
-      }
-      if (allowFkFilterByIdentifier != null) {
-        result.put("allowFkFilterByIdentifier", allowFkFilterByIdentifier);
-      }
-      if (showFkDropdownUnfiltered != null) {
-        result.put("showFkDropdownUnfiltered", showFkDropdownUnfiltered);
-      }
-      if (disableFkDropdown != null) {
-        result.put("disableFkDropdown", disableFkDropdown);
-      }
-    } catch (JSONException e) {
-      log.error("Couldn't get field property value");
-    }
-    return result;
   }
 }
--- a/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/form/ob-view-form.js	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/form/ob-view-form.js	Wed Nov 25 09:01:32 2015 +0100
@@ -1592,6 +1592,7 @@
     }
 
     this.view.standardWindow.setDirtyEditForm(null);
+    this.view.clearTargetRecordInWindow();
   },
 
   autoSave: function (parameters) {
--- a/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/main/ob-standard-view.js	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/main/ob-standard-view.js	Wed Nov 25 09:01:32 2015 +0100
@@ -1112,6 +1112,12 @@
     }
   },
 
+  clearTargetRecordInWindow: function () {
+    if (this.isActiveView()) {
+      this.standardWindow.clearTargetInformation();
+    }
+  },
+
   setRecentDocument: function (record) {
     var params = this.standardWindow.getBookMarkParams();
     params.targetTabId = this.tabId;
--- a/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/main/ob-standard-window.js	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/main/ob-standard-window.js	Wed Nov 25 09:01:32 2015 +0100
@@ -1237,6 +1237,12 @@
     OB.Layout.HistoryManager.updateHistory();
   },
 
+  clearTargetInformation: function () {
+    this.targetTabId = null;
+    this.targetRecordId = null;
+    OB.Layout.HistoryManager.updateHistory();
+  },
+
   getView: function (tabId) {
     // find is a SC extension on arrays
     return this.views.find('tabId', tabId);
--- a/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/utilities/ob-utilities.js	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/utilities/ob-utilities.js	Wed Nov 25 09:01:32 2015 +0100
@@ -23,7 +23,7 @@
 OB.Utilities = {};
 
 OB.Utilities.isIE9Strict = false;
-if (navigator.userAgent.toUpperCase().indexOf("MSIE") !== -1 && (document.documentMode && document.documentMode >= 9)) {
+if ((navigator.userAgent.toUpperCase().indexOf("MSIE") !== -1 || navigator.userAgent.toUpperCase().indexOf("TRIDENT") !== -1) && (document.documentMode && document.documentMode >= 9)) {
   OB.Utilities.isIE9Strict = true;
 }
 
--- a/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/utilities/ob-view-manager.js	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/utilities/ob-view-manager.js	Wed Nov 25 09:01:32 2015 +0100
@@ -351,8 +351,8 @@
 
           if (direct) {
             // set directly opened tab and all its ancestors as directNavigation
-            if (params && params.id) {
-              var tabId = params.id;
+            if (params && (params.id || params.targetTabId)) {
+              var tabId = params.id || params.targetTabId;
 
               if (viewInstance.view && viewInstance.view.tabId === tabId) {
                 viewInstance.view.directNavigation = true;
@@ -455,6 +455,7 @@
               message: 'The view ' + viewName + ' not defined'
             };
           }
+          direct = direct || (params.targetRecordId !== undefined && params.targetRecordId !== null);
           showTab(viewName, params, null, direct);
         }
         if (isc[viewName]) {
--- a/modules/org.openbravo.client.htmlwidget/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.client.htmlwidget/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -6,7 +6,7 @@
 <!--D393BE6F22BB44B7B728259B34FC795A-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
 <!--D393BE6F22BB44B7B728259B34FC795A-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--D393BE6F22BB44B7B728259B34FC795A-->  <NAME><![CDATA[HTML Widget]]></NAME>
-<!--D393BE6F22BB44B7B728259B34FC795A-->  <VERSION><![CDATA[1.0.27639]]></VERSION>
+<!--D393BE6F22BB44B7B728259B34FC795A-->  <VERSION><![CDATA[1.0.28035]]></VERSION>
 <!--D393BE6F22BB44B7B728259B34FC795A-->  <DESCRIPTION><![CDATA[Provides the HTML Widget superclass that allows to create widget classes that embed the html code.]]></DESCRIPTION>
 <!--D393BE6F22BB44B7B728259B34FC795A-->  <HELP><![CDATA[With this module you can define your own widget classes just setting up your own html code or the html code provided by third parties.]]></HELP>
 <!--D393BE6F22BB44B7B728259B34FC795A-->  <URL><![CDATA[http://forge.openbravo.com/projects/htmlwidget]]></URL>
--- a/modules/org.openbravo.client.htmlwidget/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.client.htmlwidget/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -7,7 +7,7 @@
 <!--DCE798FBC5B648F7A3C81A6941720A57-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--DCE798FBC5B648F7A3C81A6941720A57-->  <AD_MODULE_ID><![CDATA[D393BE6F22BB44B7B728259B34FC795A]]></AD_MODULE_ID>
 <!--DCE798FBC5B648F7A3C81A6941720A57-->  <AD_DEPENDENT_MODULE_ID><![CDATA[2758CD25B2704AF6BBAD10365FC82C06]]></AD_DEPENDENT_MODULE_ID>
-<!--DCE798FBC5B648F7A3C81A6941720A57-->  <STARTVERSION><![CDATA[2.1.27639]]></STARTVERSION>
+<!--DCE798FBC5B648F7A3C81A6941720A57-->  <STARTVERSION><![CDATA[2.1.28035]]></STARTVERSION>
 <!--DCE798FBC5B648F7A3C81A6941720A57-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--DCE798FBC5B648F7A3C81A6941720A57-->  <DEPENDANT_MODULE_NAME><![CDATA[My Openbravo Tab]]></DEPENDANT_MODULE_NAME>
 <!--DCE798FBC5B648F7A3C81A6941720A57-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
--- a/modules/org.openbravo.client.kernel/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.client.kernel/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -6,7 +6,7 @@
 <!--4B828F4D03264080AA1D2057B13F613C-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
 <!--4B828F4D03264080AA1D2057B13F613C-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--4B828F4D03264080AA1D2057B13F613C-->  <NAME><![CDATA[User Interface Client Kernel]]></NAME>
-<!--4B828F4D03264080AA1D2057B13F613C-->  <VERSION><![CDATA[2.1.27639]]></VERSION>
+<!--4B828F4D03264080AA1D2057B13F613C-->  <VERSION><![CDATA[2.1.28035]]></VERSION>
 <!--4B828F4D03264080AA1D2057B13F613C-->  <DESCRIPTION><![CDATA[Provides framework functionality for the Openbravo User Interface]]></DESCRIPTION>
 <!--4B828F4D03264080AA1D2057B13F613C-->  <HELP><![CDATA[The user interface client kernel is a generation framework for generating client (browser) components used in Openbravo. Its components are mainly used by other modules to provide customizable and extendable user interfaces.]]></HELP>
 <!--4B828F4D03264080AA1D2057B13F613C-->  <URL><![CDATA[http://forge.openbravo.com/projects/openbravoclientkernel]]></URL>
--- a/modules/org.openbravo.client.kernel/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.client.kernel/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -7,7 +7,7 @@
 <!--26B041893E844A53AFA58BC326C4F0D7-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--26B041893E844A53AFA58BC326C4F0D7-->  <AD_MODULE_ID><![CDATA[4B828F4D03264080AA1D2057B13F613C]]></AD_MODULE_ID>
 <!--26B041893E844A53AFA58BC326C4F0D7-->  <AD_DEPENDENT_MODULE_ID><![CDATA[0]]></AD_DEPENDENT_MODULE_ID>
-<!--26B041893E844A53AFA58BC326C4F0D7-->  <STARTVERSION><![CDATA[3.0.27639]]></STARTVERSION>
+<!--26B041893E844A53AFA58BC326C4F0D7-->  <STARTVERSION><![CDATA[3.0.28035]]></STARTVERSION>
 <!--26B041893E844A53AFA58BC326C4F0D7-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--26B041893E844A53AFA58BC326C4F0D7-->  <DEPENDANT_MODULE_NAME><![CDATA[core]]></DEPENDANT_MODULE_NAME>
 <!--26B041893E844A53AFA58BC326C4F0D7-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -21,7 +21,7 @@
 <!--3AB045DA35ED4CA58EF7EB5BF04CDE3F-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--3AB045DA35ED4CA58EF7EB5BF04CDE3F-->  <AD_MODULE_ID><![CDATA[4B828F4D03264080AA1D2057B13F613C]]></AD_MODULE_ID>
 <!--3AB045DA35ED4CA58EF7EB5BF04CDE3F-->  <AD_DEPENDENT_MODULE_ID><![CDATA[C70732EA90A14EC0916078B85CC33D2D]]></AD_DEPENDENT_MODULE_ID>
-<!--3AB045DA35ED4CA58EF7EB5BF04CDE3F-->  <STARTVERSION><![CDATA[1.1.27639]]></STARTVERSION>
+<!--3AB045DA35ED4CA58EF7EB5BF04CDE3F-->  <STARTVERSION><![CDATA[1.1.28035]]></STARTVERSION>
 <!--3AB045DA35ED4CA58EF7EB5BF04CDE3F-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--3AB045DA35ED4CA58EF7EB5BF04CDE3F-->  <DEPENDANT_MODULE_NAME><![CDATA[JBoss Weld]]></DEPENDANT_MODULE_NAME>
 <!--3AB045DA35ED4CA58EF7EB5BF04CDE3F-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -35,7 +35,7 @@
 <!--D7BA4BB0844942C58DC46B9E23CF8E67-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--D7BA4BB0844942C58DC46B9E23CF8E67-->  <AD_MODULE_ID><![CDATA[4B828F4D03264080AA1D2057B13F613C]]></AD_MODULE_ID>
 <!--D7BA4BB0844942C58DC46B9E23CF8E67-->  <AD_DEPENDENT_MODULE_ID><![CDATA[F8D1B3ECB3474E8DA5C216473C840DF1]]></AD_DEPENDENT_MODULE_ID>
-<!--D7BA4BB0844942C58DC46B9E23CF8E67-->  <STARTVERSION><![CDATA[2.0.27639]]></STARTVERSION>
+<!--D7BA4BB0844942C58DC46B9E23CF8E67-->  <STARTVERSION><![CDATA[2.0.28035]]></STARTVERSION>
 <!--D7BA4BB0844942C58DC46B9E23CF8E67-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--D7BA4BB0844942C58DC46B9E23CF8E67-->  <DEPENDANT_MODULE_NAME><![CDATA[JSON REST Webservice]]></DEPENDANT_MODULE_NAME>
 <!--D7BA4BB0844942C58DC46B9E23CF8E67-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
--- a/modules/org.openbravo.client.myob/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.client.myob/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -6,7 +6,7 @@
 <!--2758CD25B2704AF6BBAD10365FC82C06-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
 <!--2758CD25B2704AF6BBAD10365FC82C06-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--2758CD25B2704AF6BBAD10365FC82C06-->  <NAME><![CDATA[Workspace & Widgets]]></NAME>
-<!--2758CD25B2704AF6BBAD10365FC82C06-->  <VERSION><![CDATA[2.1.27639]]></VERSION>
+<!--2758CD25B2704AF6BBAD10365FC82C06-->  <VERSION><![CDATA[2.1.28035]]></VERSION>
 <!--2758CD25B2704AF6BBAD10365FC82C06-->  <DESCRIPTION><![CDATA[Workspace & Widgets]]></DESCRIPTION>
 <!--2758CD25B2704AF6BBAD10365FC82C06-->  <HELP><![CDATA[Provides the infrastructure of workspace tab (formerly My Openbravo)]]></HELP>
 <!--2758CD25B2704AF6BBAD10365FC82C06-->  <URL><![CDATA[http://forge.openbravo.com/projects/myopenbravo]]></URL>
--- a/modules/org.openbravo.client.myob/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.client.myob/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -7,7 +7,7 @@
 <!--15F51F03882F444CAB6593B4566DC929-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--15F51F03882F444CAB6593B4566DC929-->  <AD_MODULE_ID><![CDATA[2758CD25B2704AF6BBAD10365FC82C06]]></AD_MODULE_ID>
 <!--15F51F03882F444CAB6593B4566DC929-->  <AD_DEPENDENT_MODULE_ID><![CDATA[9BA0836A3CD74EE4AB48753A47211BCC]]></AD_DEPENDENT_MODULE_ID>
-<!--15F51F03882F444CAB6593B4566DC929-->  <STARTVERSION><![CDATA[2.1.27639]]></STARTVERSION>
+<!--15F51F03882F444CAB6593B4566DC929-->  <STARTVERSION><![CDATA[2.1.28035]]></STARTVERSION>
 <!--15F51F03882F444CAB6593B4566DC929-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--15F51F03882F444CAB6593B4566DC929-->  <DEPENDANT_MODULE_NAME><![CDATA[User Interface Application]]></DEPENDANT_MODULE_NAME>
 <!--15F51F03882F444CAB6593B4566DC929-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -21,7 +21,7 @@
 <!--E71B28FC949D481D9F59C17D01E46EF9-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--E71B28FC949D481D9F59C17D01E46EF9-->  <AD_MODULE_ID><![CDATA[2758CD25B2704AF6BBAD10365FC82C06]]></AD_MODULE_ID>
 <!--E71B28FC949D481D9F59C17D01E46EF9-->  <AD_DEPENDENT_MODULE_ID><![CDATA[0]]></AD_DEPENDENT_MODULE_ID>
-<!--E71B28FC949D481D9F59C17D01E46EF9-->  <STARTVERSION><![CDATA[3.0.27639]]></STARTVERSION>
+<!--E71B28FC949D481D9F59C17D01E46EF9-->  <STARTVERSION><![CDATA[3.0.28035]]></STARTVERSION>
 <!--E71B28FC949D481D9F59C17D01E46EF9-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--E71B28FC949D481D9F59C17D01E46EF9-->  <DEPENDANT_MODULE_NAME><![CDATA[Core]]></DEPENDANT_MODULE_NAME>
 <!--E71B28FC949D481D9F59C17D01E46EF9-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
--- a/modules/org.openbravo.client.querylist/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.client.querylist/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -6,7 +6,7 @@
 <!--0A060B2AF1974E8EAA8DB61388E9AECC-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
 <!--0A060B2AF1974E8EAA8DB61388E9AECC-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--0A060B2AF1974E8EAA8DB61388E9AECC-->  <NAME><![CDATA[Query/List Widget]]></NAME>
-<!--0A060B2AF1974E8EAA8DB61388E9AECC-->  <VERSION><![CDATA[1.0.27639]]></VERSION>
+<!--0A060B2AF1974E8EAA8DB61388E9AECC-->  <VERSION><![CDATA[1.0.28035]]></VERSION>
 <!--0A060B2AF1974E8EAA8DB61388E9AECC-->  <DESCRIPTION><![CDATA[Provides the Query/List superclass widget that allows to create widget classes that prints a grid of data based on a query.]]></DESCRIPTION>
 <!--0A060B2AF1974E8EAA8DB61388E9AECC-->  <HELP><![CDATA[With this module you can define your own widget classes that just with simple Application Dictionary shows a grid of data based on a HQL Query.]]></HELP>
 <!--0A060B2AF1974E8EAA8DB61388E9AECC-->  <URL><![CDATA[http://forge.openbravo.com/projects/querylistwidget]]></URL>
--- a/modules/org.openbravo.client.querylist/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.client.querylist/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -7,7 +7,7 @@
 <!--26558497C31140BFAB067BA4BC47D799-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--26558497C31140BFAB067BA4BC47D799-->  <AD_MODULE_ID><![CDATA[0A060B2AF1974E8EAA8DB61388E9AECC]]></AD_MODULE_ID>
 <!--26558497C31140BFAB067BA4BC47D799-->  <AD_DEPENDENT_MODULE_ID><![CDATA[2758CD25B2704AF6BBAD10365FC82C06]]></AD_DEPENDENT_MODULE_ID>
-<!--26558497C31140BFAB067BA4BC47D799-->  <STARTVERSION><![CDATA[2.1.27639]]></STARTVERSION>
+<!--26558497C31140BFAB067BA4BC47D799-->  <STARTVERSION><![CDATA[2.1.28035]]></STARTVERSION>
 <!--26558497C31140BFAB067BA4BC47D799-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--26558497C31140BFAB067BA4BC47D799-->  <DEPENDANT_MODULE_NAME><![CDATA[My Openbravo Tab]]></DEPENDANT_MODULE_NAME>
 <!--26558497C31140BFAB067BA4BC47D799-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
--- a/modules/org.openbravo.client.widgets/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.client.widgets/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -6,7 +6,7 @@
 <!--FF8080812D842086012D844F3CC0003E-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
 <!--FF8080812D842086012D844F3CC0003E-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--FF8080812D842086012D844F3CC0003E-->  <NAME><![CDATA[Widgets Collection]]></NAME>
-<!--FF8080812D842086012D844F3CC0003E-->  <VERSION><![CDATA[0.0.27639]]></VERSION>
+<!--FF8080812D842086012D844F3CC0003E-->  <VERSION><![CDATA[0.0.28035]]></VERSION>
 <!--FF8080812D842086012D844F3CC0003E-->  <DESCRIPTION><![CDATA[Collection of Workspace Widgets]]></DESCRIPTION>
 <!--FF8080812D842086012D844F3CC0003E-->  <HELP><![CDATA[Collection of Workspace Widgets]]></HELP>
 <!--FF8080812D842086012D844F3CC0003E-->  <URL><![CDATA[http://forge.openbravo.com/projects/widgetscollection]]></URL>
--- a/modules/org.openbravo.client.widgets/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.client.widgets/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -7,7 +7,7 @@
 <!--FF8080812D842086012D845002070046-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--FF8080812D842086012D845002070046-->  <AD_MODULE_ID><![CDATA[FF8080812D842086012D844F3CC0003E]]></AD_MODULE_ID>
 <!--FF8080812D842086012D845002070046-->  <AD_DEPENDENT_MODULE_ID><![CDATA[2758CD25B2704AF6BBAD10365FC82C06]]></AD_DEPENDENT_MODULE_ID>
-<!--FF8080812D842086012D845002070046-->  <STARTVERSION><![CDATA[2.1.27639]]></STARTVERSION>
+<!--FF8080812D842086012D845002070046-->  <STARTVERSION><![CDATA[2.1.28035]]></STARTVERSION>
 <!--FF8080812D842086012D845002070046-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--FF8080812D842086012D845002070046-->  <DEPENDANT_MODULE_NAME><![CDATA[Workspace & Widgets]]></DEPENDANT_MODULE_NAME>
 <!--FF8080812D842086012D845002070046-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
--- a/modules/org.openbravo.financial.paymentreport/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.financial.paymentreport/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -6,7 +6,7 @@
 <!--2A5EE903D7974AC298C0504FBC4501A7-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
 <!--2A5EE903D7974AC298C0504FBC4501A7-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--2A5EE903D7974AC298C0504FBC4501A7-->  <NAME><![CDATA[Payment Report]]></NAME>
-<!--2A5EE903D7974AC298C0504FBC4501A7-->  <VERSION><![CDATA[3.0.27639]]></VERSION>
+<!--2A5EE903D7974AC298C0504FBC4501A7-->  <VERSION><![CDATA[3.0.28035]]></VERSION>
 <!--2A5EE903D7974AC298C0504FBC4501A7-->  <DESCRIPTION><![CDATA[Payment Report]]></DESCRIPTION>
 <!--2A5EE903D7974AC298C0504FBC4501A7-->  <URL><![CDATA[http://forge.openbravo.com/projects/paymentreport]]></URL>
 <!--2A5EE903D7974AC298C0504FBC4501A7-->  <TYPE><![CDATA[M]]></TYPE>
--- a/modules/org.openbravo.financial.paymentreport/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.financial.paymentreport/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -7,7 +7,7 @@
 <!--A3B449C4D5FE4D688CC58236FE33B802-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--A3B449C4D5FE4D688CC58236FE33B802-->  <AD_MODULE_ID><![CDATA[2A5EE903D7974AC298C0504FBC4501A7]]></AD_MODULE_ID>
 <!--A3B449C4D5FE4D688CC58236FE33B802-->  <AD_DEPENDENT_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_DEPENDENT_MODULE_ID>
-<!--A3B449C4D5FE4D688CC58236FE33B802-->  <STARTVERSION><![CDATA[3.0.27639]]></STARTVERSION>
+<!--A3B449C4D5FE4D688CC58236FE33B802-->  <STARTVERSION><![CDATA[3.0.28035]]></STARTVERSION>
 <!--A3B449C4D5FE4D688CC58236FE33B802-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--A3B449C4D5FE4D688CC58236FE33B802-->  <DEPENDANT_MODULE_NAME><![CDATA[Advanced Payables and Receivables Mngmt]]></DEPENDANT_MODULE_NAME>
 <!--A3B449C4D5FE4D688CC58236FE33B802-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
--- a/modules/org.openbravo.reports.ordersawaitingdelivery/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.reports.ordersawaitingdelivery/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -6,7 +6,7 @@
 <!--3A3A943684D64DEF9EC39F588A656848-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
 <!--3A3A943684D64DEF9EC39F588A656848-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--3A3A943684D64DEF9EC39F588A656848-->  <NAME><![CDATA[Orders Awaiting Delivery]]></NAME>
-<!--3A3A943684D64DEF9EC39F588A656848-->  <VERSION><![CDATA[1.1.27639]]></VERSION>
+<!--3A3A943684D64DEF9EC39F588A656848-->  <VERSION><![CDATA[1.1.28035]]></VERSION>
 <!--3A3A943684D64DEF9EC39F588A656848-->  <DESCRIPTION><![CDATA[Report displaying sales orders not shipped.]]></DESCRIPTION>
 <!--3A3A943684D64DEF9EC39F588A656848-->  <URL><![CDATA[http://forge.openbravo.com/projects/ordersawaitingdlivery]]></URL>
 <!--3A3A943684D64DEF9EC39F588A656848-->  <TYPE><![CDATA[M]]></TYPE>
--- a/modules/org.openbravo.reports.ordersawaitingdelivery/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.reports.ordersawaitingdelivery/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -7,7 +7,7 @@
 <!--64060E9EE9EC408BBFFD0CC2DE25C86F-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--64060E9EE9EC408BBFFD0CC2DE25C86F-->  <AD_MODULE_ID><![CDATA[3A3A943684D64DEF9EC39F588A656848]]></AD_MODULE_ID>
 <!--64060E9EE9EC408BBFFD0CC2DE25C86F-->  <AD_DEPENDENT_MODULE_ID><![CDATA[0]]></AD_DEPENDENT_MODULE_ID>
-<!--64060E9EE9EC408BBFFD0CC2DE25C86F-->  <STARTVERSION><![CDATA[3.0.27639]]></STARTVERSION>
+<!--64060E9EE9EC408BBFFD0CC2DE25C86F-->  <STARTVERSION><![CDATA[3.0.28035]]></STARTVERSION>
 <!--64060E9EE9EC408BBFFD0CC2DE25C86F-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--64060E9EE9EC408BBFFD0CC2DE25C86F-->  <DEPENDANT_MODULE_NAME><![CDATA[core]]></DEPENDANT_MODULE_NAME>
 <!--64060E9EE9EC408BBFFD0CC2DE25C86F-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
--- a/modules/org.openbravo.service.datasource/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.service.datasource/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -6,7 +6,7 @@
 <!--A44B9BA75C354D8FB2E3F7D6EB6BFDC4-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
 <!--A44B9BA75C354D8FB2E3F7D6EB6BFDC4-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--A44B9BA75C354D8FB2E3F7D6EB6BFDC4-->  <NAME><![CDATA[JSON Datasource]]></NAME>
-<!--A44B9BA75C354D8FB2E3F7D6EB6BFDC4-->  <VERSION><![CDATA[2.1.27639]]></VERSION>
+<!--A44B9BA75C354D8FB2E3F7D6EB6BFDC4-->  <VERSION><![CDATA[2.1.28035]]></VERSION>
 <!--A44B9BA75C354D8FB2E3F7D6EB6BFDC4-->  <DESCRIPTION><![CDATA[Provides data source CRUD functionality using JSON as the data format]]></DESCRIPTION>
 <!--A44B9BA75C354D8FB2E3F7D6EB6BFDC4-->  <HELP><![CDATA[This module implements the datasource concept. Datasources play a central role in Smartclient applications. The datasource module automatically creates a datasource for each Openbravo entity. In addition custom data source implementations can be defined.]]></HELP>
 <!--A44B9BA75C354D8FB2E3F7D6EB6BFDC4-->  <URL><![CDATA[http://forge.openbravo.com/projects/datasourceservice]]></URL>
--- a/modules/org.openbravo.service.datasource/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.service.datasource/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -7,7 +7,7 @@
 <!--0BA071C783CC4984AC9C03BB7CAA87C7-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--0BA071C783CC4984AC9C03BB7CAA87C7-->  <AD_MODULE_ID><![CDATA[A44B9BA75C354D8FB2E3F7D6EB6BFDC4]]></AD_MODULE_ID>
 <!--0BA071C783CC4984AC9C03BB7CAA87C7-->  <AD_DEPENDENT_MODULE_ID><![CDATA[C70732EA90A14EC0916078B85CC33D2D]]></AD_DEPENDENT_MODULE_ID>
-<!--0BA071C783CC4984AC9C03BB7CAA87C7-->  <STARTVERSION><![CDATA[1.1.27639]]></STARTVERSION>
+<!--0BA071C783CC4984AC9C03BB7CAA87C7-->  <STARTVERSION><![CDATA[1.1.28035]]></STARTVERSION>
 <!--0BA071C783CC4984AC9C03BB7CAA87C7-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--0BA071C783CC4984AC9C03BB7CAA87C7-->  <DEPENDANT_MODULE_NAME><![CDATA[JBoss Weld]]></DEPENDANT_MODULE_NAME>
 <!--0BA071C783CC4984AC9C03BB7CAA87C7-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -21,7 +21,7 @@
 <!--3E531F0CD0A54130996F5AF3B6A2D01B-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--3E531F0CD0A54130996F5AF3B6A2D01B-->  <AD_MODULE_ID><![CDATA[A44B9BA75C354D8FB2E3F7D6EB6BFDC4]]></AD_MODULE_ID>
 <!--3E531F0CD0A54130996F5AF3B6A2D01B-->  <AD_DEPENDENT_MODULE_ID><![CDATA[F8D1B3ECB3474E8DA5C216473C840DF1]]></AD_DEPENDENT_MODULE_ID>
-<!--3E531F0CD0A54130996F5AF3B6A2D01B-->  <STARTVERSION><![CDATA[2.0.27639]]></STARTVERSION>
+<!--3E531F0CD0A54130996F5AF3B6A2D01B-->  <STARTVERSION><![CDATA[2.0.28035]]></STARTVERSION>
 <!--3E531F0CD0A54130996F5AF3B6A2D01B-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--3E531F0CD0A54130996F5AF3B6A2D01B-->  <DEPENDANT_MODULE_NAME><![CDATA[JSON REST Webservice]]></DEPENDANT_MODULE_NAME>
 <!--3E531F0CD0A54130996F5AF3B6A2D01B-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -35,7 +35,7 @@
 <!--4FCE95802A854F7E8623AFF7C33D13EE-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--4FCE95802A854F7E8623AFF7C33D13EE-->  <AD_MODULE_ID><![CDATA[A44B9BA75C354D8FB2E3F7D6EB6BFDC4]]></AD_MODULE_ID>
 <!--4FCE95802A854F7E8623AFF7C33D13EE-->  <AD_DEPENDENT_MODULE_ID><![CDATA[0]]></AD_DEPENDENT_MODULE_ID>
-<!--4FCE95802A854F7E8623AFF7C33D13EE-->  <STARTVERSION><![CDATA[3.0.27639]]></STARTVERSION>
+<!--4FCE95802A854F7E8623AFF7C33D13EE-->  <STARTVERSION><![CDATA[3.0.28035]]></STARTVERSION>
 <!--4FCE95802A854F7E8623AFF7C33D13EE-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--4FCE95802A854F7E8623AFF7C33D13EE-->  <DEPENDANT_MODULE_NAME><![CDATA[core]]></DEPENDANT_MODULE_NAME>
 <!--4FCE95802A854F7E8623AFF7C33D13EE-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -49,7 +49,7 @@
 <!--54AF8B39C55E4E7496902893ECD82786-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--54AF8B39C55E4E7496902893ECD82786-->  <AD_MODULE_ID><![CDATA[A44B9BA75C354D8FB2E3F7D6EB6BFDC4]]></AD_MODULE_ID>
 <!--54AF8B39C55E4E7496902893ECD82786-->  <AD_DEPENDENT_MODULE_ID><![CDATA[4B828F4D03264080AA1D2057B13F613C]]></AD_DEPENDENT_MODULE_ID>
-<!--54AF8B39C55E4E7496902893ECD82786-->  <STARTVERSION><![CDATA[2.1.27639]]></STARTVERSION>
+<!--54AF8B39C55E4E7496902893ECD82786-->  <STARTVERSION><![CDATA[2.1.28035]]></STARTVERSION>
 <!--54AF8B39C55E4E7496902893ECD82786-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--54AF8B39C55E4E7496902893ECD82786-->  <DEPENDANT_MODULE_NAME><![CDATA[User Interface Client Kernel]]></DEPENDANT_MODULE_NAME>
 <!--54AF8B39C55E4E7496902893ECD82786-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -63,7 +63,7 @@
 <!--D03C56D8A4E14F45A5466350E05C631F-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--D03C56D8A4E14F45A5466350E05C631F-->  <AD_MODULE_ID><![CDATA[A44B9BA75C354D8FB2E3F7D6EB6BFDC4]]></AD_MODULE_ID>
 <!--D03C56D8A4E14F45A5466350E05C631F-->  <AD_DEPENDENT_MODULE_ID><![CDATA[EC356CEE3D46416CA1EBEEB9AB82EDB9]]></AD_DEPENDENT_MODULE_ID>
-<!--D03C56D8A4E14F45A5466350E05C631F-->  <STARTVERSION><![CDATA[8.1.27639]]></STARTVERSION>
+<!--D03C56D8A4E14F45A5466350E05C631F-->  <STARTVERSION><![CDATA[8.1.28035]]></STARTVERSION>
 <!--D03C56D8A4E14F45A5466350E05C631F-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--D03C56D8A4E14F45A5466350E05C631F-->  <DEPENDANT_MODULE_NAME><![CDATA[Smartclient]]></DEPENDANT_MODULE_NAME>
 <!--D03C56D8A4E14F45A5466350E05C631F-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
--- a/modules/org.openbravo.service.integration.google/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.service.integration.google/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -6,7 +6,7 @@
 <!--FF8080813129ADA401312CA1222A0005-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
 <!--FF8080813129ADA401312CA1222A0005-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--FF8080813129ADA401312CA1222A0005-->  <NAME><![CDATA[Integration with Google APIs]]></NAME>
-<!--FF8080813129ADA401312CA1222A0005-->  <VERSION><![CDATA[0.1.27639]]></VERSION>
+<!--FF8080813129ADA401312CA1222A0005-->  <VERSION><![CDATA[0.1.28035]]></VERSION>
 <!--FF8080813129ADA401312CA1222A0005-->  <DESCRIPTION><![CDATA[Integration with Google APIs]]></DESCRIPTION>
 <!--FF8080813129ADA401312CA1222A0005-->  <TYPE><![CDATA[M]]></TYPE>
 <!--FF8080813129ADA401312CA1222A0005-->  <LICENSE><![CDATA[Licensed under the Openbravo Public License Version 1.1.
--- a/modules/org.openbravo.service.integration.google/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.service.integration.google/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -7,7 +7,7 @@
 <!--FF8080813141B198013141BA0F7D0012-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--FF8080813141B198013141BA0F7D0012-->  <AD_MODULE_ID><![CDATA[FF8080813129ADA401312CA1222A0005]]></AD_MODULE_ID>
 <!--FF8080813141B198013141BA0F7D0012-->  <AD_DEPENDENT_MODULE_ID><![CDATA[FF8080813141B198013141B86DD70003]]></AD_DEPENDENT_MODULE_ID>
-<!--FF8080813141B198013141BA0F7D0012-->  <STARTVERSION><![CDATA[0.1.27639]]></STARTVERSION>
+<!--FF8080813141B198013141BA0F7D0012-->  <STARTVERSION><![CDATA[0.1.28035]]></STARTVERSION>
 <!--FF8080813141B198013141BA0F7D0012-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--FF8080813141B198013141BA0F7D0012-->  <DEPENDANT_MODULE_NAME><![CDATA[OpenID Service Integration]]></DEPENDANT_MODULE_NAME>
 <!--FF8080813141B198013141BA0F7D0012-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -21,7 +21,7 @@
 <!--FF8080813151AEE1013151C4ACE6001B-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--FF8080813151AEE1013151C4ACE6001B-->  <AD_MODULE_ID><![CDATA[FF8080813129ADA401312CA1222A0005]]></AD_MODULE_ID>
 <!--FF8080813151AEE1013151C4ACE6001B-->  <AD_DEPENDENT_MODULE_ID><![CDATA[7E48CDD73B7E493A8BED4F7253E7C989]]></AD_DEPENDENT_MODULE_ID>
-<!--FF8080813151AEE1013151C4ACE6001B-->  <STARTVERSION><![CDATA[2.1.27639]]></STARTVERSION>
+<!--FF8080813151AEE1013151C4ACE6001B-->  <STARTVERSION><![CDATA[2.1.28035]]></STARTVERSION>
 <!--FF8080813151AEE1013151C4ACE6001B-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--FF8080813151AEE1013151C4ACE6001B-->  <DEPENDANT_MODULE_NAME><![CDATA[Openbravo 3.0 Framework]]></DEPENDANT_MODULE_NAME>
 <!--FF8080813151AEE1013151C4ACE6001B-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
--- a/modules/org.openbravo.service.integration.openid/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.service.integration.openid/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -6,7 +6,7 @@
 <!--FF8080813141B198013141B86DD70003-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
 <!--FF8080813141B198013141B86DD70003-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--FF8080813141B198013141B86DD70003-->  <NAME><![CDATA[OpenID Service Integration]]></NAME>
-<!--FF8080813141B198013141B86DD70003-->  <VERSION><![CDATA[0.1.27639]]></VERSION>
+<!--FF8080813141B198013141B86DD70003-->  <VERSION><![CDATA[0.1.28035]]></VERSION>
 <!--FF8080813141B198013141B86DD70003-->  <DESCRIPTION><![CDATA[OpenID Service Integration]]></DESCRIPTION>
 <!--FF8080813141B198013141B86DD70003-->  <TYPE><![CDATA[M]]></TYPE>
 <!--FF8080813141B198013141B86DD70003-->  <LICENSE><![CDATA[Licensed under the Openbravo Public License Version 1.1.
--- a/modules/org.openbravo.service.integration.openid/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.service.integration.openid/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -7,7 +7,7 @@
 <!--FF8080813141B198013141B8B21B0006-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--FF8080813141B198013141B8B21B0006-->  <AD_MODULE_ID><![CDATA[FF8080813141B198013141B86DD70003]]></AD_MODULE_ID>
 <!--FF8080813141B198013141B8B21B0006-->  <AD_DEPENDENT_MODULE_ID><![CDATA[0]]></AD_DEPENDENT_MODULE_ID>
-<!--FF8080813141B198013141B8B21B0006-->  <STARTVERSION><![CDATA[3.0.27639]]></STARTVERSION>
+<!--FF8080813141B198013141B8B21B0006-->  <STARTVERSION><![CDATA[3.0.28035]]></STARTVERSION>
 <!--FF8080813141B198013141B8B21B0006-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--FF8080813141B198013141B8B21B0006-->  <DEPENDANT_MODULE_NAME><![CDATA[Core]]></DEPENDANT_MODULE_NAME>
 <!--FF8080813141B198013141B8B21B0006-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
--- a/modules/org.openbravo.service.json/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.service.json/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -6,7 +6,7 @@
 <!--F8D1B3ECB3474E8DA5C216473C840DF1-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
 <!--F8D1B3ECB3474E8DA5C216473C840DF1-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--F8D1B3ECB3474E8DA5C216473C840DF1-->  <NAME><![CDATA[JSON REST Webservice]]></NAME>
-<!--F8D1B3ECB3474E8DA5C216473C840DF1-->  <VERSION><![CDATA[2.0.27639]]></VERSION>
+<!--F8D1B3ECB3474E8DA5C216473C840DF1-->  <VERSION><![CDATA[2.0.28035]]></VERSION>
 <!--F8D1B3ECB3474E8DA5C216473C840DF1-->  <DESCRIPTION><![CDATA[Provides a JSON REST webservice for CRUD service requests]]></DESCRIPTION>
 <!--F8D1B3ECB3474E8DA5C216473C840DF1-->  <HELP><![CDATA[Provides a JSON REST webservice for CRUD service requests. Both the servlet implementation (receiving HTTP REST requests in JSON) as the backend processing are provided.]]></HELP>
 <!--F8D1B3ECB3474E8DA5C216473C840DF1-->  <URL><![CDATA[http://forge.openbravo.com/projects/openbravojsonrest]]></URL>
--- a/modules/org.openbravo.service.json/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.service.json/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -7,7 +7,7 @@
 <!--9E3E7B42DB16405FB794496D309D7044-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--9E3E7B42DB16405FB794496D309D7044-->  <AD_MODULE_ID><![CDATA[F8D1B3ECB3474E8DA5C216473C840DF1]]></AD_MODULE_ID>
 <!--9E3E7B42DB16405FB794496D309D7044-->  <AD_DEPENDENT_MODULE_ID><![CDATA[0]]></AD_DEPENDENT_MODULE_ID>
-<!--9E3E7B42DB16405FB794496D309D7044-->  <STARTVERSION><![CDATA[3.0.27639]]></STARTVERSION>
+<!--9E3E7B42DB16405FB794496D309D7044-->  <STARTVERSION><![CDATA[3.0.28035]]></STARTVERSION>
 <!--9E3E7B42DB16405FB794496D309D7044-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--9E3E7B42DB16405FB794496D309D7044-->  <DEPENDANT_MODULE_NAME><![CDATA[core]]></DEPENDANT_MODULE_NAME>
 <!--9E3E7B42DB16405FB794496D309D7044-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
--- a/modules/org.openbravo.service.json/src/org/openbravo/service/json/DefaultJsonDataService.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.service.json/src/org/openbravo/service/json/DefaultJsonDataService.java	Wed Nov 25 09:01:32 2015 +0100
@@ -18,7 +18,6 @@
  */
 package org.openbravo.service.json;
 
-import java.sql.BatchUpdateException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -48,6 +47,7 @@
 import org.openbravo.dal.service.OBDal;
 import org.openbravo.database.SessionInfo;
 import org.openbravo.erpCommon.utility.OBMessageUtils;
+import org.openbravo.service.db.DbUtility;
 import org.openbravo.service.json.JsonToDataConverter.JsonConversionError;
 import org.openbravo.userinterface.selector.SelectorConstants;
 
@@ -824,12 +824,7 @@
         return result;
       }
     } catch (Throwable t) {
-      Throwable localThrowable = t;
-      if (localThrowable.getCause() instanceof BatchUpdateException) {
-        final BatchUpdateException batchException = (BatchUpdateException) localThrowable
-            .getCause();
-        localThrowable = batchException.getNextException();
-      }
+      Throwable localThrowable = DbUtility.getUnderlyingSQLException(t);
       if (!(localThrowable instanceof OBException)
           || (localThrowable instanceof OBException && ((OBException) localThrowable)
               .isLogExceptionNeeded())) {
--- a/modules/org.openbravo.service.json/src/org/openbravo/service/json/JsonUtils.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.service.json/src/org/openbravo/service/json/JsonUtils.java	Wed Nov 25 09:01:32 2015 +0100
@@ -18,7 +18,6 @@
  */
 package org.openbravo.service.json;
 
-import java.sql.BatchUpdateException;
 import java.sql.SQLTimeoutException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
@@ -44,6 +43,7 @@
 import org.openbravo.erpCommon.utility.OBError;
 import org.openbravo.erpCommon.utility.Utility;
 import org.openbravo.service.db.DalConnectionProvider;
+import org.openbravo.service.db.DbUtility;
 import org.postgresql.util.PSQLException;
 
 /**
@@ -200,11 +200,7 @@
    * @return the resulting json string
    */
   public static String convertExceptionToJson(Throwable throwable) {
-    Throwable localThrowable = throwable;
-    if (throwable.getCause() instanceof BatchUpdateException) {
-      final BatchUpdateException batchException = (BatchUpdateException) throwable.getCause();
-      localThrowable = batchException.getNextException();
-    }
+    Throwable localThrowable = DbUtility.getUnderlyingSQLException(throwable);
 
     try {
       final JSONObject jsonResult = new JSONObject();
--- a/modules/org.openbravo.userinterface.selector/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.userinterface.selector/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -6,7 +6,7 @@
 <!--5EB4F15C80684ACA904756BDC12ADBE5-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
 <!--5EB4F15C80684ACA904756BDC12ADBE5-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--5EB4F15C80684ACA904756BDC12ADBE5-->  <NAME><![CDATA[User Interface Selector]]></NAME>
-<!--5EB4F15C80684ACA904756BDC12ADBE5-->  <VERSION><![CDATA[2.1.27639]]></VERSION>
+<!--5EB4F15C80684ACA904756BDC12ADBE5-->  <VERSION><![CDATA[2.1.28035]]></VERSION>
 <!--5EB4F15C80684ACA904756BDC12ADBE5-->  <DESCRIPTION><![CDATA[Provides a selector with a suggestion box and popup grid window]]></DESCRIPTION>
 <!--5EB4F15C80684ACA904756BDC12ADBE5-->  <HELP><![CDATA[The Openbravo selector provides new selector functionality which is used inside of existing Openbravo forms. The selector is mainly used for supporting foreign key references in the user interface. The selector combines both suggestion box behavior with a popup grid.]]></HELP>
 <!--5EB4F15C80684ACA904756BDC12ADBE5-->  <URL><![CDATA[http://forge.openbravo.com/projects/selector]]></URL>
--- a/modules/org.openbravo.userinterface.selector/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.userinterface.selector/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -7,7 +7,7 @@
 <!--38825CAED43941D38CA0C78DB04FCFA0-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--38825CAED43941D38CA0C78DB04FCFA0-->  <AD_MODULE_ID><![CDATA[5EB4F15C80684ACA904756BDC12ADBE5]]></AD_MODULE_ID>
 <!--38825CAED43941D38CA0C78DB04FCFA0-->  <AD_DEPENDENT_MODULE_ID><![CDATA[EC356CEE3D46416CA1EBEEB9AB82EDB9]]></AD_DEPENDENT_MODULE_ID>
-<!--38825CAED43941D38CA0C78DB04FCFA0-->  <STARTVERSION><![CDATA[8.1.27639]]></STARTVERSION>
+<!--38825CAED43941D38CA0C78DB04FCFA0-->  <STARTVERSION><![CDATA[8.1.28035]]></STARTVERSION>
 <!--38825CAED43941D38CA0C78DB04FCFA0-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--38825CAED43941D38CA0C78DB04FCFA0-->  <DEPENDANT_MODULE_NAME><![CDATA[Smartclient]]></DEPENDANT_MODULE_NAME>
 <!--38825CAED43941D38CA0C78DB04FCFA0-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -21,7 +21,7 @@
 <!--6DDE7B1A70174242AF82B5022FB89279-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--6DDE7B1A70174242AF82B5022FB89279-->  <AD_MODULE_ID><![CDATA[5EB4F15C80684ACA904756BDC12ADBE5]]></AD_MODULE_ID>
 <!--6DDE7B1A70174242AF82B5022FB89279-->  <AD_DEPENDENT_MODULE_ID><![CDATA[9BA0836A3CD74EE4AB48753A47211BCC]]></AD_DEPENDENT_MODULE_ID>
-<!--6DDE7B1A70174242AF82B5022FB89279-->  <STARTVERSION><![CDATA[2.1.27639]]></STARTVERSION>
+<!--6DDE7B1A70174242AF82B5022FB89279-->  <STARTVERSION><![CDATA[2.1.28035]]></STARTVERSION>
 <!--6DDE7B1A70174242AF82B5022FB89279-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--6DDE7B1A70174242AF82B5022FB89279-->  <DEPENDANT_MODULE_NAME><![CDATA[User Interface Application]]></DEPENDANT_MODULE_NAME>
 <!--6DDE7B1A70174242AF82B5022FB89279-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -35,7 +35,7 @@
 <!--94F9CD2CB5EF4467A67475C786C984A7-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--94F9CD2CB5EF4467A67475C786C984A7-->  <AD_MODULE_ID><![CDATA[5EB4F15C80684ACA904756BDC12ADBE5]]></AD_MODULE_ID>
 <!--94F9CD2CB5EF4467A67475C786C984A7-->  <AD_DEPENDENT_MODULE_ID><![CDATA[4B828F4D03264080AA1D2057B13F613C]]></AD_DEPENDENT_MODULE_ID>
-<!--94F9CD2CB5EF4467A67475C786C984A7-->  <STARTVERSION><![CDATA[2.1.27639]]></STARTVERSION>
+<!--94F9CD2CB5EF4467A67475C786C984A7-->  <STARTVERSION><![CDATA[2.1.28035]]></STARTVERSION>
 <!--94F9CD2CB5EF4467A67475C786C984A7-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--94F9CD2CB5EF4467A67475C786C984A7-->  <DEPENDANT_MODULE_NAME><![CDATA[User Interface Client Kernel]]></DEPENDANT_MODULE_NAME>
 <!--94F9CD2CB5EF4467A67475C786C984A7-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -49,7 +49,7 @@
 <!--BCCB5A08EC0446DE8BCE191C6BC607A4-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--BCCB5A08EC0446DE8BCE191C6BC607A4-->  <AD_MODULE_ID><![CDATA[5EB4F15C80684ACA904756BDC12ADBE5]]></AD_MODULE_ID>
 <!--BCCB5A08EC0446DE8BCE191C6BC607A4-->  <AD_DEPENDENT_MODULE_ID><![CDATA[C70732EA90A14EC0916078B85CC33D2D]]></AD_DEPENDENT_MODULE_ID>
-<!--BCCB5A08EC0446DE8BCE191C6BC607A4-->  <STARTVERSION><![CDATA[1.1.27639]]></STARTVERSION>
+<!--BCCB5A08EC0446DE8BCE191C6BC607A4-->  <STARTVERSION><![CDATA[1.1.28035]]></STARTVERSION>
 <!--BCCB5A08EC0446DE8BCE191C6BC607A4-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--BCCB5A08EC0446DE8BCE191C6BC607A4-->  <DEPENDANT_MODULE_NAME><![CDATA[JBoss Weld]]></DEPENDANT_MODULE_NAME>
 <!--BCCB5A08EC0446DE8BCE191C6BC607A4-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -63,7 +63,7 @@
 <!--C8DAC574B88649D08C9468521B343F12-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--C8DAC574B88649D08C9468521B343F12-->  <AD_MODULE_ID><![CDATA[5EB4F15C80684ACA904756BDC12ADBE5]]></AD_MODULE_ID>
 <!--C8DAC574B88649D08C9468521B343F12-->  <AD_DEPENDENT_MODULE_ID><![CDATA[0]]></AD_DEPENDENT_MODULE_ID>
-<!--C8DAC574B88649D08C9468521B343F12-->  <STARTVERSION><![CDATA[3.0.27639]]></STARTVERSION>
+<!--C8DAC574B88649D08C9468521B343F12-->  <STARTVERSION><![CDATA[3.0.28035]]></STARTVERSION>
 <!--C8DAC574B88649D08C9468521B343F12-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--C8DAC574B88649D08C9468521B343F12-->  <DEPENDANT_MODULE_NAME><![CDATA[core]]></DEPENDANT_MODULE_NAME>
 <!--C8DAC574B88649D08C9468521B343F12-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -77,7 +77,7 @@
 <!--F14EB17946BE4724A46F80CB1A47EC70-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--F14EB17946BE4724A46F80CB1A47EC70-->  <AD_MODULE_ID><![CDATA[5EB4F15C80684ACA904756BDC12ADBE5]]></AD_MODULE_ID>
 <!--F14EB17946BE4724A46F80CB1A47EC70-->  <AD_DEPENDENT_MODULE_ID><![CDATA[A44B9BA75C354D8FB2E3F7D6EB6BFDC4]]></AD_DEPENDENT_MODULE_ID>
-<!--F14EB17946BE4724A46F80CB1A47EC70-->  <STARTVERSION><![CDATA[2.1.27639]]></STARTVERSION>
+<!--F14EB17946BE4724A46F80CB1A47EC70-->  <STARTVERSION><![CDATA[2.1.28035]]></STARTVERSION>
 <!--F14EB17946BE4724A46F80CB1A47EC70-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--F14EB17946BE4724A46F80CB1A47EC70-->  <DEPENDANT_MODULE_NAME><![CDATA[JSON Datasource]]></DEPENDANT_MODULE_NAME>
 <!--F14EB17946BE4724A46F80CB1A47EC70-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
--- a/modules/org.openbravo.userinterface.skin.250to300Comp/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.userinterface.skin.250to300Comp/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -6,7 +6,7 @@
 <!--96998CBC42744B3DBEE28AC8095C9335-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
 <!--96998CBC42744B3DBEE28AC8095C9335-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--96998CBC42744B3DBEE28AC8095C9335-->  <NAME><![CDATA[2.50 to 3.00 Compatibility Skin]]></NAME>
-<!--96998CBC42744B3DBEE28AC8095C9335-->  <VERSION><![CDATA[2.0.27639]]></VERSION>
+<!--96998CBC42744B3DBEE28AC8095C9335-->  <VERSION><![CDATA[2.0.28035]]></VERSION>
 <!--96998CBC42744B3DBEE28AC8095C9335-->  <DESCRIPTION><![CDATA[Skin module to proper visualization of classic windows inside the MDI interface]]></DESCRIPTION>
 <!--96998CBC42744B3DBEE28AC8095C9335-->  <HELP><![CDATA[With this skin module the classic windows styles will display in a way more coherent with the new 3.00 styles]]></HELP>
 <!--96998CBC42744B3DBEE28AC8095C9335-->  <URL><![CDATA[www.openbravo.com]]></URL>
--- a/modules/org.openbravo.userinterface.skin.250to300Comp/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.userinterface.skin.250to300Comp/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -7,7 +7,7 @@
 <!--39BF75AD9AB3453698BF5DE29E727AA9-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--39BF75AD9AB3453698BF5DE29E727AA9-->  <AD_MODULE_ID><![CDATA[96998CBC42744B3DBEE28AC8095C9335]]></AD_MODULE_ID>
 <!--39BF75AD9AB3453698BF5DE29E727AA9-->  <AD_DEPENDENT_MODULE_ID><![CDATA[0]]></AD_DEPENDENT_MODULE_ID>
-<!--39BF75AD9AB3453698BF5DE29E727AA9-->  <STARTVERSION><![CDATA[3.0.27639]]></STARTVERSION>
+<!--39BF75AD9AB3453698BF5DE29E727AA9-->  <STARTVERSION><![CDATA[3.0.28035]]></STARTVERSION>
 <!--39BF75AD9AB3453698BF5DE29E727AA9-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--39BF75AD9AB3453698BF5DE29E727AA9-->  <DEPENDANT_MODULE_NAME><![CDATA[core]]></DEPENDANT_MODULE_NAME>
 <!--39BF75AD9AB3453698BF5DE29E727AA9-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
--- a/modules/org.openbravo.userinterface.smartclient/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.userinterface.smartclient/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -6,7 +6,7 @@
 <!--EC356CEE3D46416CA1EBEEB9AB82EDB9-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
 <!--EC356CEE3D46416CA1EBEEB9AB82EDB9-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--EC356CEE3D46416CA1EBEEB9AB82EDB9-->  <NAME><![CDATA[Smartclient]]></NAME>
-<!--EC356CEE3D46416CA1EBEEB9AB82EDB9-->  <VERSION><![CDATA[8.1.27639]]></VERSION>
+<!--EC356CEE3D46416CA1EBEEB9AB82EDB9-->  <VERSION><![CDATA[8.1.28035]]></VERSION>
 <!--EC356CEE3D46416CA1EBEEB9AB82EDB9-->  <DESCRIPTION><![CDATA[SmartClient libraries for use within Openbravo]]></DESCRIPTION>
 <!--EC356CEE3D46416CA1EBEEB9AB82EDB9-->  <HELP><![CDATA[This module contains the SmartClient libraries for usage by other modules. It also contains some simple test pages to validate that SmartClient is working correctly. Also contains generic Openbravo SmartClient components]]></HELP>
 <!--EC356CEE3D46416CA1EBEEB9AB82EDB9-->  <URL><![CDATA[http://forge.openbravo.com/projects/obsmartclient]]></URL>
--- a/modules/org.openbravo.userinterface.smartclient/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.userinterface.smartclient/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -7,7 +7,7 @@
 <!--086331E18477496B8AC74D2CFEBD1307-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--086331E18477496B8AC74D2CFEBD1307-->  <AD_MODULE_ID><![CDATA[EC356CEE3D46416CA1EBEEB9AB82EDB9]]></AD_MODULE_ID>
 <!--086331E18477496B8AC74D2CFEBD1307-->  <AD_DEPENDENT_MODULE_ID><![CDATA[0]]></AD_DEPENDENT_MODULE_ID>
-<!--086331E18477496B8AC74D2CFEBD1307-->  <STARTVERSION><![CDATA[3.0.27639]]></STARTVERSION>
+<!--086331E18477496B8AC74D2CFEBD1307-->  <STARTVERSION><![CDATA[3.0.28035]]></STARTVERSION>
 <!--086331E18477496B8AC74D2CFEBD1307-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--086331E18477496B8AC74D2CFEBD1307-->  <DEPENDANT_MODULE_NAME><![CDATA[core]]></DEPENDANT_MODULE_NAME>
 <!--086331E18477496B8AC74D2CFEBD1307-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -21,7 +21,7 @@
 <!--DC5D4EF450244482BD2B458DAA496333-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--DC5D4EF450244482BD2B458DAA496333-->  <AD_MODULE_ID><![CDATA[EC356CEE3D46416CA1EBEEB9AB82EDB9]]></AD_MODULE_ID>
 <!--DC5D4EF450244482BD2B458DAA496333-->  <AD_DEPENDENT_MODULE_ID><![CDATA[4B828F4D03264080AA1D2057B13F613C]]></AD_DEPENDENT_MODULE_ID>
-<!--DC5D4EF450244482BD2B458DAA496333-->  <STARTVERSION><![CDATA[2.1.27639]]></STARTVERSION>
+<!--DC5D4EF450244482BD2B458DAA496333-->  <STARTVERSION><![CDATA[2.1.28035]]></STARTVERSION>
 <!--DC5D4EF450244482BD2B458DAA496333-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--DC5D4EF450244482BD2B458DAA496333-->  <DEPENDANT_MODULE_NAME><![CDATA[User Interface Client Kernel]]></DEPENDANT_MODULE_NAME>
 <!--DC5D4EF450244482BD2B458DAA496333-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -35,7 +35,7 @@
 <!--F2AF15C0AF5540E393D96BE506E20648-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--F2AF15C0AF5540E393D96BE506E20648-->  <AD_MODULE_ID><![CDATA[EC356CEE3D46416CA1EBEEB9AB82EDB9]]></AD_MODULE_ID>
 <!--F2AF15C0AF5540E393D96BE506E20648-->  <AD_DEPENDENT_MODULE_ID><![CDATA[C70732EA90A14EC0916078B85CC33D2D]]></AD_DEPENDENT_MODULE_ID>
-<!--F2AF15C0AF5540E393D96BE506E20648-->  <STARTVERSION><![CDATA[1.1.27639]]></STARTVERSION>
+<!--F2AF15C0AF5540E393D96BE506E20648-->  <STARTVERSION><![CDATA[1.1.28035]]></STARTVERSION>
 <!--F2AF15C0AF5540E393D96BE506E20648-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--F2AF15C0AF5540E393D96BE506E20648-->  <DEPENDANT_MODULE_NAME><![CDATA[JBoss Weld]]></DEPENDANT_MODULE_NAME>
 <!--F2AF15C0AF5540E393D96BE506E20648-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
--- a/modules/org.openbravo.utility.cleanup.log/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.utility.cleanup.log/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -6,7 +6,7 @@
 <!--8A34B301DC524EA3A07513DF9F42CC90-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
 <!--8A34B301DC524EA3A07513DF9F42CC90-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--8A34B301DC524EA3A07513DF9F42CC90-->  <NAME><![CDATA[Log Clean Up Utility]]></NAME>
-<!--8A34B301DC524EA3A07513DF9F42CC90-->  <VERSION><![CDATA[1.0.27639]]></VERSION>
+<!--8A34B301DC524EA3A07513DF9F42CC90-->  <VERSION><![CDATA[1.0.28035]]></VERSION>
 <!--8A34B301DC524EA3A07513DF9F42CC90-->  <DESCRIPTION><![CDATA[Log Clean Up Utility]]></DESCRIPTION>
 <!--8A34B301DC524EA3A07513DF9F42CC90-->  <HELP><![CDATA[Utility to periodically cleanup log tables]]></HELP>
 <!--8A34B301DC524EA3A07513DF9F42CC90-->  <URL><![CDATA[http://centralrepository.openbravo.com/heartbeat-server/org.openbravo.forge.ui/ForgeProjectDetail?projectId=7DC25E3B7ADE426CAD71E7804B95C1BF]]></URL>
--- a/modules/org.openbravo.utility.cleanup.log/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.utility.cleanup.log/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -7,7 +7,7 @@
 <!--86EBD30DEB8045508185B457896C9F6D-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--86EBD30DEB8045508185B457896C9F6D-->  <AD_MODULE_ID><![CDATA[8A34B301DC524EA3A07513DF9F42CC90]]></AD_MODULE_ID>
 <!--86EBD30DEB8045508185B457896C9F6D-->  <AD_DEPENDENT_MODULE_ID><![CDATA[7E48CDD73B7E493A8BED4F7253E7C989]]></AD_DEPENDENT_MODULE_ID>
-<!--86EBD30DEB8045508185B457896C9F6D-->  <STARTVERSION><![CDATA[2.1.27639]]></STARTVERSION>
+<!--86EBD30DEB8045508185B457896C9F6D-->  <STARTVERSION><![CDATA[2.1.28035]]></STARTVERSION>
 <!--86EBD30DEB8045508185B457896C9F6D-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--86EBD30DEB8045508185B457896C9F6D-->  <DEPENDANT_MODULE_NAME><![CDATA[Openbravo 3.0 Framework]]></DEPENDANT_MODULE_NAME>
 <!--86EBD30DEB8045508185B457896C9F6D-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
--- a/modules/org.openbravo.v3.datasets/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.v3.datasets/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -6,7 +6,7 @@
 <!--883B5872CA0548F9AF2BBBE7D2DDFA61-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
 <!--883B5872CA0548F9AF2BBBE7D2DDFA61-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--883B5872CA0548F9AF2BBBE7D2DDFA61-->  <NAME><![CDATA[Standard Roles]]></NAME>
-<!--883B5872CA0548F9AF2BBBE7D2DDFA61-->  <VERSION><![CDATA[3.0.27639]]></VERSION>
+<!--883B5872CA0548F9AF2BBBE7D2DDFA61-->  <VERSION><![CDATA[3.0.28035]]></VERSION>
 <!--883B5872CA0548F9AF2BBBE7D2DDFA61-->  <DESCRIPTION><![CDATA[Pre-configured collection of standard ERP roles]]></DESCRIPTION>
 <!--883B5872CA0548F9AF2BBBE7D2DDFA61-->  <HELP><![CDATA[This dataset contains the following roles with their access to corresponding Openbravo entities - windows, reports, actions.
 * Employee - Any person of the enterprise
--- a/modules/org.openbravo.v3.datasets/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.v3.datasets/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -7,7 +7,7 @@
 <!--148A000EE9A04A3CA653B1296A00B8E6-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--148A000EE9A04A3CA653B1296A00B8E6-->  <AD_MODULE_ID><![CDATA[883B5872CA0548F9AF2BBBE7D2DDFA61]]></AD_MODULE_ID>
 <!--148A000EE9A04A3CA653B1296A00B8E6-->  <AD_DEPENDENT_MODULE_ID><![CDATA[0]]></AD_DEPENDENT_MODULE_ID>
-<!--148A000EE9A04A3CA653B1296A00B8E6-->  <STARTVERSION><![CDATA[3.0.27639]]></STARTVERSION>
+<!--148A000EE9A04A3CA653B1296A00B8E6-->  <STARTVERSION><![CDATA[3.0.28035]]></STARTVERSION>
 <!--148A000EE9A04A3CA653B1296A00B8E6-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--148A000EE9A04A3CA653B1296A00B8E6-->  <DEPENDANT_MODULE_NAME><![CDATA[core]]></DEPENDANT_MODULE_NAME>
 <!--148A000EE9A04A3CA653B1296A00B8E6-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -21,7 +21,7 @@
 <!--30F966407A6F4E15965821BAEE34D25B-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--30F966407A6F4E15965821BAEE34D25B-->  <AD_MODULE_ID><![CDATA[883B5872CA0548F9AF2BBBE7D2DDFA61]]></AD_MODULE_ID>
 <!--30F966407A6F4E15965821BAEE34D25B-->  <AD_DEPENDENT_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_DEPENDENT_MODULE_ID>
-<!--30F966407A6F4E15965821BAEE34D25B-->  <STARTVERSION><![CDATA[3.0.27639]]></STARTVERSION>
+<!--30F966407A6F4E15965821BAEE34D25B-->  <STARTVERSION><![CDATA[3.0.28035]]></STARTVERSION>
 <!--30F966407A6F4E15965821BAEE34D25B-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--30F966407A6F4E15965821BAEE34D25B-->  <DEPENDANT_MODULE_NAME><![CDATA[Advanced Payables and Receivables Mngmt]]></DEPENDANT_MODULE_NAME>
 <!--30F966407A6F4E15965821BAEE34D25B-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -35,7 +35,7 @@
 <!--F93CE30003B24F8F8886510B0065EECC-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--F93CE30003B24F8F8886510B0065EECC-->  <AD_MODULE_ID><![CDATA[883B5872CA0548F9AF2BBBE7D2DDFA61]]></AD_MODULE_ID>
 <!--F93CE30003B24F8F8886510B0065EECC-->  <AD_DEPENDENT_MODULE_ID><![CDATA[3A3A943684D64DEF9EC39F588A656848]]></AD_DEPENDENT_MODULE_ID>
-<!--F93CE30003B24F8F8886510B0065EECC-->  <STARTVERSION><![CDATA[1.1.27639]]></STARTVERSION>
+<!--F93CE30003B24F8F8886510B0065EECC-->  <STARTVERSION><![CDATA[1.1.28035]]></STARTVERSION>
 <!--F93CE30003B24F8F8886510B0065EECC-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--F93CE30003B24F8F8886510B0065EECC-->  <DEPENDANT_MODULE_NAME><![CDATA[Orders Awaiting Delivery]]></DEPENDANT_MODULE_NAME>
 <!--F93CE30003B24F8F8886510B0065EECC-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
--- a/modules/org.openbravo.v3.framework/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.v3.framework/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -6,7 +6,7 @@
 <!--7E48CDD73B7E493A8BED4F7253E7C989-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
 <!--7E48CDD73B7E493A8BED4F7253E7C989-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--7E48CDD73B7E493A8BED4F7253E7C989-->  <NAME><![CDATA[Openbravo 3.0 Framework]]></NAME>
-<!--7E48CDD73B7E493A8BED4F7253E7C989-->  <VERSION><![CDATA[2.1.27639]]></VERSION>
+<!--7E48CDD73B7E493A8BED4F7253E7C989-->  <VERSION><![CDATA[2.1.28035]]></VERSION>
 <!--7E48CDD73B7E493A8BED4F7253E7C989-->  <DESCRIPTION><![CDATA[Openbravo 3.0 Framework]]></DESCRIPTION>
 <!--7E48CDD73B7E493A8BED4F7253E7C989-->  <HELP><![CDATA[Contains all the components required to run the Openbravo 3.0 framework]]></HELP>
 <!--7E48CDD73B7E493A8BED4F7253E7C989-->  <URL><![CDATA[http://forge.openbravo.com/projects/openbravov30framework]]></URL>
--- a/modules/org.openbravo.v3.framework/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.v3.framework/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -7,7 +7,7 @@
 <!--01E1BCCEC9114DE0960538DF34E30E6F-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--01E1BCCEC9114DE0960538DF34E30E6F-->  <AD_MODULE_ID><![CDATA[7E48CDD73B7E493A8BED4F7253E7C989]]></AD_MODULE_ID>
 <!--01E1BCCEC9114DE0960538DF34E30E6F-->  <AD_DEPENDENT_MODULE_ID><![CDATA[2758CD25B2704AF6BBAD10365FC82C06]]></AD_DEPENDENT_MODULE_ID>
-<!--01E1BCCEC9114DE0960538DF34E30E6F-->  <STARTVERSION><![CDATA[2.1.27639]]></STARTVERSION>
+<!--01E1BCCEC9114DE0960538DF34E30E6F-->  <STARTVERSION><![CDATA[2.1.28035]]></STARTVERSION>
 <!--01E1BCCEC9114DE0960538DF34E30E6F-->  <ISINCLUDED><![CDATA[Y]]></ISINCLUDED>
 <!--01E1BCCEC9114DE0960538DF34E30E6F-->  <DEPENDANT_MODULE_NAME><![CDATA[My Openbravo Tab]]></DEPENDANT_MODULE_NAME>
 <!--01E1BCCEC9114DE0960538DF34E30E6F-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -21,7 +21,7 @@
 <!--025B181F63CA47B48A920F6983242390-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--025B181F63CA47B48A920F6983242390-->  <AD_MODULE_ID><![CDATA[7E48CDD73B7E493A8BED4F7253E7C989]]></AD_MODULE_ID>
 <!--025B181F63CA47B48A920F6983242390-->  <AD_DEPENDENT_MODULE_ID><![CDATA[0]]></AD_DEPENDENT_MODULE_ID>
-<!--025B181F63CA47B48A920F6983242390-->  <STARTVERSION><![CDATA[3.0.27639]]></STARTVERSION>
+<!--025B181F63CA47B48A920F6983242390-->  <STARTVERSION><![CDATA[3.0.28035]]></STARTVERSION>
 <!--025B181F63CA47B48A920F6983242390-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--025B181F63CA47B48A920F6983242390-->  <DEPENDANT_MODULE_NAME><![CDATA[core]]></DEPENDANT_MODULE_NAME>
 <!--025B181F63CA47B48A920F6983242390-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -35,7 +35,7 @@
 <!--054B4FEAF919478AA3FF27098A46D1D6-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--054B4FEAF919478AA3FF27098A46D1D6-->  <AD_MODULE_ID><![CDATA[7E48CDD73B7E493A8BED4F7253E7C989]]></AD_MODULE_ID>
 <!--054B4FEAF919478AA3FF27098A46D1D6-->  <AD_DEPENDENT_MODULE_ID><![CDATA[9BA0836A3CD74EE4AB48753A47211BCC]]></AD_DEPENDENT_MODULE_ID>
-<!--054B4FEAF919478AA3FF27098A46D1D6-->  <STARTVERSION><![CDATA[2.1.27639]]></STARTVERSION>
+<!--054B4FEAF919478AA3FF27098A46D1D6-->  <STARTVERSION><![CDATA[2.1.28035]]></STARTVERSION>
 <!--054B4FEAF919478AA3FF27098A46D1D6-->  <ISINCLUDED><![CDATA[Y]]></ISINCLUDED>
 <!--054B4FEAF919478AA3FF27098A46D1D6-->  <DEPENDANT_MODULE_NAME><![CDATA[User Interface Application]]></DEPENDANT_MODULE_NAME>
 <!--054B4FEAF919478AA3FF27098A46D1D6-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -49,7 +49,7 @@
 <!--1FA6BAA6DC3A4434A6E62A0D1319A9D7-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--1FA6BAA6DC3A4434A6E62A0D1319A9D7-->  <AD_MODULE_ID><![CDATA[7E48CDD73B7E493A8BED4F7253E7C989]]></AD_MODULE_ID>
 <!--1FA6BAA6DC3A4434A6E62A0D1319A9D7-->  <AD_DEPENDENT_MODULE_ID><![CDATA[0A060B2AF1974E8EAA8DB61388E9AECC]]></AD_DEPENDENT_MODULE_ID>
-<!--1FA6BAA6DC3A4434A6E62A0D1319A9D7-->  <STARTVERSION><![CDATA[1.0.27639]]></STARTVERSION>
+<!--1FA6BAA6DC3A4434A6E62A0D1319A9D7-->  <STARTVERSION><![CDATA[1.0.28035]]></STARTVERSION>
 <!--1FA6BAA6DC3A4434A6E62A0D1319A9D7-->  <ISINCLUDED><![CDATA[Y]]></ISINCLUDED>
 <!--1FA6BAA6DC3A4434A6E62A0D1319A9D7-->  <DEPENDANT_MODULE_NAME><![CDATA[Query/List Widget]]></DEPENDANT_MODULE_NAME>
 <!--1FA6BAA6DC3A4434A6E62A0D1319A9D7-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -63,7 +63,7 @@
 <!--224754C3EF674C93B0D468F47BAAB824-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--224754C3EF674C93B0D468F47BAAB824-->  <AD_MODULE_ID><![CDATA[7E48CDD73B7E493A8BED4F7253E7C989]]></AD_MODULE_ID>
 <!--224754C3EF674C93B0D468F47BAAB824-->  <AD_DEPENDENT_MODULE_ID><![CDATA[5EB4F15C80684ACA904756BDC12ADBE5]]></AD_DEPENDENT_MODULE_ID>
-<!--224754C3EF674C93B0D468F47BAAB824-->  <STARTVERSION><![CDATA[2.1.27639]]></STARTVERSION>
+<!--224754C3EF674C93B0D468F47BAAB824-->  <STARTVERSION><![CDATA[2.1.28035]]></STARTVERSION>
 <!--224754C3EF674C93B0D468F47BAAB824-->  <ISINCLUDED><![CDATA[Y]]></ISINCLUDED>
 <!--224754C3EF674C93B0D468F47BAAB824-->  <DEPENDANT_MODULE_NAME><![CDATA[User Interface Selector]]></DEPENDANT_MODULE_NAME>
 <!--224754C3EF674C93B0D468F47BAAB824-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -77,7 +77,7 @@
 <!--5B72D24032DD4879A950194139D961B6-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--5B72D24032DD4879A950194139D961B6-->  <AD_MODULE_ID><![CDATA[7E48CDD73B7E493A8BED4F7253E7C989]]></AD_MODULE_ID>
 <!--5B72D24032DD4879A950194139D961B6-->  <AD_DEPENDENT_MODULE_ID><![CDATA[A44B9BA75C354D8FB2E3F7D6EB6BFDC4]]></AD_DEPENDENT_MODULE_ID>
-<!--5B72D24032DD4879A950194139D961B6-->  <STARTVERSION><![CDATA[2.1.27639]]></STARTVERSION>
+<!--5B72D24032DD4879A950194139D961B6-->  <STARTVERSION><![CDATA[2.1.28035]]></STARTVERSION>
 <!--5B72D24032DD4879A950194139D961B6-->  <ISINCLUDED><![CDATA[Y]]></ISINCLUDED>
 <!--5B72D24032DD4879A950194139D961B6-->  <DEPENDANT_MODULE_NAME><![CDATA[JSON Datasource]]></DEPENDANT_MODULE_NAME>
 <!--5B72D24032DD4879A950194139D961B6-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -91,7 +91,7 @@
 <!--8730CA6A4224439D82E0DD31B3806E36-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--8730CA6A4224439D82E0DD31B3806E36-->  <AD_MODULE_ID><![CDATA[7E48CDD73B7E493A8BED4F7253E7C989]]></AD_MODULE_ID>
 <!--8730CA6A4224439D82E0DD31B3806E36-->  <AD_DEPENDENT_MODULE_ID><![CDATA[D393BE6F22BB44B7B728259B34FC795A]]></AD_DEPENDENT_MODULE_ID>
-<!--8730CA6A4224439D82E0DD31B3806E36-->  <STARTVERSION><![CDATA[1.0.27639]]></STARTVERSION>
+<!--8730CA6A4224439D82E0DD31B3806E36-->  <STARTVERSION><![CDATA[1.0.28035]]></STARTVERSION>
 <!--8730CA6A4224439D82E0DD31B3806E36-->  <ISINCLUDED><![CDATA[Y]]></ISINCLUDED>
 <!--8730CA6A4224439D82E0DD31B3806E36-->  <DEPENDANT_MODULE_NAME><![CDATA[HTML Widget]]></DEPENDANT_MODULE_NAME>
 <!--8730CA6A4224439D82E0DD31B3806E36-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -105,7 +105,7 @@
 <!--98C47FF058F8413B8A2B26036061446E-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--98C47FF058F8413B8A2B26036061446E-->  <AD_MODULE_ID><![CDATA[7E48CDD73B7E493A8BED4F7253E7C989]]></AD_MODULE_ID>
 <!--98C47FF058F8413B8A2B26036061446E-->  <AD_DEPENDENT_MODULE_ID><![CDATA[EC356CEE3D46416CA1EBEEB9AB82EDB9]]></AD_DEPENDENT_MODULE_ID>
-<!--98C47FF058F8413B8A2B26036061446E-->  <STARTVERSION><![CDATA[8.1.27639]]></STARTVERSION>
+<!--98C47FF058F8413B8A2B26036061446E-->  <STARTVERSION><![CDATA[8.1.28035]]></STARTVERSION>
 <!--98C47FF058F8413B8A2B26036061446E-->  <ISINCLUDED><![CDATA[Y]]></ISINCLUDED>
 <!--98C47FF058F8413B8A2B26036061446E-->  <DEPENDANT_MODULE_NAME><![CDATA[Smartclient]]></DEPENDANT_MODULE_NAME>
 <!--98C47FF058F8413B8A2B26036061446E-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -119,7 +119,7 @@
 <!--A6D7BA917B3B4DEABD7CA1BA00B01E8A-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--A6D7BA917B3B4DEABD7CA1BA00B01E8A-->  <AD_MODULE_ID><![CDATA[7E48CDD73B7E493A8BED4F7253E7C989]]></AD_MODULE_ID>
 <!--A6D7BA917B3B4DEABD7CA1BA00B01E8A-->  <AD_DEPENDENT_MODULE_ID><![CDATA[96998CBC42744B3DBEE28AC8095C9335]]></AD_DEPENDENT_MODULE_ID>
-<!--A6D7BA917B3B4DEABD7CA1BA00B01E8A-->  <STARTVERSION><![CDATA[2.0.27639]]></STARTVERSION>
+<!--A6D7BA917B3B4DEABD7CA1BA00B01E8A-->  <STARTVERSION><![CDATA[2.0.28035]]></STARTVERSION>
 <!--A6D7BA917B3B4DEABD7CA1BA00B01E8A-->  <ISINCLUDED><![CDATA[Y]]></ISINCLUDED>
 <!--A6D7BA917B3B4DEABD7CA1BA00B01E8A-->  <DEPENDANT_MODULE_NAME><![CDATA[2.50 to 3.00 Compatibility Skin]]></DEPENDANT_MODULE_NAME>
 <!--A6D7BA917B3B4DEABD7CA1BA00B01E8A-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -133,7 +133,7 @@
 <!--A9CB99330AF34944877F889DD8A0AB3C-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--A9CB99330AF34944877F889DD8A0AB3C-->  <AD_MODULE_ID><![CDATA[7E48CDD73B7E493A8BED4F7253E7C989]]></AD_MODULE_ID>
 <!--A9CB99330AF34944877F889DD8A0AB3C-->  <AD_DEPENDENT_MODULE_ID><![CDATA[4B828F4D03264080AA1D2057B13F613C]]></AD_DEPENDENT_MODULE_ID>
-<!--A9CB99330AF34944877F889DD8A0AB3C-->  <STARTVERSION><![CDATA[2.1.27639]]></STARTVERSION>
+<!--A9CB99330AF34944877F889DD8A0AB3C-->  <STARTVERSION><![CDATA[2.1.28035]]></STARTVERSION>
 <!--A9CB99330AF34944877F889DD8A0AB3C-->  <ISINCLUDED><![CDATA[Y]]></ISINCLUDED>
 <!--A9CB99330AF34944877F889DD8A0AB3C-->  <DEPENDANT_MODULE_NAME><![CDATA[User Interface Client Kernel]]></DEPENDANT_MODULE_NAME>
 <!--A9CB99330AF34944877F889DD8A0AB3C-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -147,7 +147,7 @@
 <!--E72A053A403C4A98A189C105B850ADB0-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--E72A053A403C4A98A189C105B850ADB0-->  <AD_MODULE_ID><![CDATA[7E48CDD73B7E493A8BED4F7253E7C989]]></AD_MODULE_ID>
 <!--E72A053A403C4A98A189C105B850ADB0-->  <AD_DEPENDENT_MODULE_ID><![CDATA[C70732EA90A14EC0916078B85CC33D2D]]></AD_DEPENDENT_MODULE_ID>
-<!--E72A053A403C4A98A189C105B850ADB0-->  <STARTVERSION><![CDATA[1.1.27639]]></STARTVERSION>
+<!--E72A053A403C4A98A189C105B850ADB0-->  <STARTVERSION><![CDATA[1.1.28035]]></STARTVERSION>
 <!--E72A053A403C4A98A189C105B850ADB0-->  <ISINCLUDED><![CDATA[Y]]></ISINCLUDED>
 <!--E72A053A403C4A98A189C105B850ADB0-->  <DEPENDANT_MODULE_NAME><![CDATA[JBoss Weld]]></DEPENDANT_MODULE_NAME>
 <!--E72A053A403C4A98A189C105B850ADB0-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -161,7 +161,7 @@
 <!--F62443FC17DA4C0E84FBCA9F2E5B68C0-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--F62443FC17DA4C0E84FBCA9F2E5B68C0-->  <AD_MODULE_ID><![CDATA[7E48CDD73B7E493A8BED4F7253E7C989]]></AD_MODULE_ID>
 <!--F62443FC17DA4C0E84FBCA9F2E5B68C0-->  <AD_DEPENDENT_MODULE_ID><![CDATA[F8D1B3ECB3474E8DA5C216473C840DF1]]></AD_DEPENDENT_MODULE_ID>
-<!--F62443FC17DA4C0E84FBCA9F2E5B68C0-->  <STARTVERSION><![CDATA[2.0.27639]]></STARTVERSION>
+<!--F62443FC17DA4C0E84FBCA9F2E5B68C0-->  <STARTVERSION><![CDATA[2.0.28035]]></STARTVERSION>
 <!--F62443FC17DA4C0E84FBCA9F2E5B68C0-->  <ISINCLUDED><![CDATA[Y]]></ISINCLUDED>
 <!--F62443FC17DA4C0E84FBCA9F2E5B68C0-->  <DEPENDANT_MODULE_NAME><![CDATA[JSON REST Webservice]]></DEPENDANT_MODULE_NAME>
 <!--F62443FC17DA4C0E84FBCA9F2E5B68C0-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
--- a/modules/org.openbravo.v3/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.v3/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -6,7 +6,7 @@
 <!--0138E7A89B5E4DC3932462252801FFBC-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
 <!--0138E7A89B5E4DC3932462252801FFBC-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--0138E7A89B5E4DC3932462252801FFBC-->  <NAME><![CDATA[Openbravo 3.0]]></NAME>
-<!--0138E7A89B5E4DC3932462252801FFBC-->  <VERSION><![CDATA[3.0.27639]]></VERSION>
+<!--0138E7A89B5E4DC3932462252801FFBC-->  <VERSION><![CDATA[3.0.28035]]></VERSION>
 <!--0138E7A89B5E4DC3932462252801FFBC-->  <DESCRIPTION><![CDATA[Openbravo 3.0 distribution template]]></DESCRIPTION>
 <!--0138E7A89B5E4DC3932462252801FFBC-->  <HELP><![CDATA[Openbravo 3.0 is a collection (distribution) of modules. This template is a container of all the modules and configuration changes that compose Openbravo 3.0.]]></HELP>
 <!--0138E7A89B5E4DC3932462252801FFBC-->  <URL><![CDATA[http://forge.openbravo.com/projects/vthree]]></URL>
--- a/modules/org.openbravo.v3/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/modules/org.openbravo.v3/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -7,7 +7,7 @@
 <!--48D556894CE54CF998DC97882E904CBD-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--48D556894CE54CF998DC97882E904CBD-->  <AD_MODULE_ID><![CDATA[0138E7A89B5E4DC3932462252801FFBC]]></AD_MODULE_ID>
 <!--48D556894CE54CF998DC97882E904CBD-->  <AD_DEPENDENT_MODULE_ID><![CDATA[8A098711BB324335A19833286BDB093D]]></AD_DEPENDENT_MODULE_ID>
-<!--48D556894CE54CF998DC97882E904CBD-->  <STARTVERSION><![CDATA[1.0.27639]]></STARTVERSION>
+<!--48D556894CE54CF998DC97882E904CBD-->  <STARTVERSION><![CDATA[1.0.28035]]></STARTVERSION>
 <!--48D556894CE54CF998DC97882E904CBD-->  <ISINCLUDED><![CDATA[Y]]></ISINCLUDED>
 <!--48D556894CE54CF998DC97882E904CBD-->  <DEPENDANT_MODULE_NAME><![CDATA[Apache External Connection Pool]]></DEPENDANT_MODULE_NAME>
 <!--48D556894CE54CF998DC97882E904CBD-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -21,7 +21,7 @@
 <!--4D11E3A70650475381139522373CD191-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--4D11E3A70650475381139522373CD191-->  <AD_MODULE_ID><![CDATA[0138E7A89B5E4DC3932462252801FFBC]]></AD_MODULE_ID>
 <!--4D11E3A70650475381139522373CD191-->  <AD_DEPENDENT_MODULE_ID><![CDATA[7E48CDD73B7E493A8BED4F7253E7C989]]></AD_DEPENDENT_MODULE_ID>
-<!--4D11E3A70650475381139522373CD191-->  <STARTVERSION><![CDATA[2.1.27639]]></STARTVERSION>
+<!--4D11E3A70650475381139522373CD191-->  <STARTVERSION><![CDATA[2.1.28035]]></STARTVERSION>
 <!--4D11E3A70650475381139522373CD191-->  <ISINCLUDED><![CDATA[Y]]></ISINCLUDED>
 <!--4D11E3A70650475381139522373CD191-->  <DEPENDANT_MODULE_NAME><![CDATA[Openbravo 3.0 Framework]]></DEPENDANT_MODULE_NAME>
 <!--4D11E3A70650475381139522373CD191-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -35,7 +35,7 @@
 <!--52CE523C40634C47A99C6EBBD9C3125C-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--52CE523C40634C47A99C6EBBD9C3125C-->  <AD_MODULE_ID><![CDATA[0138E7A89B5E4DC3932462252801FFBC]]></AD_MODULE_ID>
 <!--52CE523C40634C47A99C6EBBD9C3125C-->  <AD_DEPENDENT_MODULE_ID><![CDATA[2A5EE903D7974AC298C0504FBC4501A7]]></AD_DEPENDENT_MODULE_ID>
-<!--52CE523C40634C47A99C6EBBD9C3125C-->  <STARTVERSION><![CDATA[3.0.27639]]></STARTVERSION>
+<!--52CE523C40634C47A99C6EBBD9C3125C-->  <STARTVERSION><![CDATA[3.0.28035]]></STARTVERSION>
 <!--52CE523C40634C47A99C6EBBD9C3125C-->  <ISINCLUDED><![CDATA[Y]]></ISINCLUDED>
 <!--52CE523C40634C47A99C6EBBD9C3125C-->  <DEPENDANT_MODULE_NAME><![CDATA[Payment Report]]></DEPENDANT_MODULE_NAME>
 <!--52CE523C40634C47A99C6EBBD9C3125C-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -49,7 +49,7 @@
 <!--60834727BB114764ACEF019F40A34562-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--60834727BB114764ACEF019F40A34562-->  <AD_MODULE_ID><![CDATA[0138E7A89B5E4DC3932462252801FFBC]]></AD_MODULE_ID>
 <!--60834727BB114764ACEF019F40A34562-->  <AD_DEPENDENT_MODULE_ID><![CDATA[3A3A943684D64DEF9EC39F588A656848]]></AD_DEPENDENT_MODULE_ID>
-<!--60834727BB114764ACEF019F40A34562-->  <STARTVERSION><![CDATA[1.1.27639]]></STARTVERSION>
+<!--60834727BB114764ACEF019F40A34562-->  <STARTVERSION><![CDATA[1.1.28035]]></STARTVERSION>
 <!--60834727BB114764ACEF019F40A34562-->  <ISINCLUDED><![CDATA[Y]]></ISINCLUDED>
 <!--60834727BB114764ACEF019F40A34562-->  <DEPENDANT_MODULE_NAME><![CDATA[Orders Awaiting Delivery]]></DEPENDANT_MODULE_NAME>
 <!--60834727BB114764ACEF019F40A34562-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -63,7 +63,7 @@
 <!--8418885E97D643138B6D907671351E3D-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--8418885E97D643138B6D907671351E3D-->  <AD_MODULE_ID><![CDATA[0138E7A89B5E4DC3932462252801FFBC]]></AD_MODULE_ID>
 <!--8418885E97D643138B6D907671351E3D-->  <AD_DEPENDENT_MODULE_ID><![CDATA[883B5872CA0548F9AF2BBBE7D2DDFA61]]></AD_DEPENDENT_MODULE_ID>
-<!--8418885E97D643138B6D907671351E3D-->  <STARTVERSION><![CDATA[3.0.27639]]></STARTVERSION>
+<!--8418885E97D643138B6D907671351E3D-->  <STARTVERSION><![CDATA[3.0.28035]]></STARTVERSION>
 <!--8418885E97D643138B6D907671351E3D-->  <ISINCLUDED><![CDATA[Y]]></ISINCLUDED>
 <!--8418885E97D643138B6D907671351E3D-->  <DEPENDANT_MODULE_NAME><![CDATA[Standard Roles]]></DEPENDANT_MODULE_NAME>
 <!--8418885E97D643138B6D907671351E3D-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -77,7 +77,7 @@
 <!--A32F3279B3374FC0A6CFEA2368BB7053-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--A32F3279B3374FC0A6CFEA2368BB7053-->  <AD_MODULE_ID><![CDATA[0138E7A89B5E4DC3932462252801FFBC]]></AD_MODULE_ID>
 <!--A32F3279B3374FC0A6CFEA2368BB7053-->  <AD_DEPENDENT_MODULE_ID><![CDATA[0]]></AD_DEPENDENT_MODULE_ID>
-<!--A32F3279B3374FC0A6CFEA2368BB7053-->  <STARTVERSION><![CDATA[3.0.27639]]></STARTVERSION>
+<!--A32F3279B3374FC0A6CFEA2368BB7053-->  <STARTVERSION><![CDATA[3.0.28035]]></STARTVERSION>
 <!--A32F3279B3374FC0A6CFEA2368BB7053-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--A32F3279B3374FC0A6CFEA2368BB7053-->  <DEPENDANT_MODULE_NAME><![CDATA[Core]]></DEPENDANT_MODULE_NAME>
 <!--A32F3279B3374FC0A6CFEA2368BB7053-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MINOR]]></DEPENDENCY_ENFORCEMENT>
@@ -91,7 +91,7 @@
 <!--ED06CE9F2AFD4092871D9E9494AF42DD-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--ED06CE9F2AFD4092871D9E9494AF42DD-->  <AD_MODULE_ID><![CDATA[0138E7A89B5E4DC3932462252801FFBC]]></AD_MODULE_ID>
 <!--ED06CE9F2AFD4092871D9E9494AF42DD-->  <AD_DEPENDENT_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_DEPENDENT_MODULE_ID>
-<!--ED06CE9F2AFD4092871D9E9494AF42DD-->  <STARTVERSION><![CDATA[3.0.27639]]></STARTVERSION>
+<!--ED06CE9F2AFD4092871D9E9494AF42DD-->  <STARTVERSION><![CDATA[3.0.28035]]></STARTVERSION>
 <!--ED06CE9F2AFD4092871D9E9494AF42DD-->  <ISINCLUDED><![CDATA[Y]]></ISINCLUDED>
 <!--ED06CE9F2AFD4092871D9E9494AF42DD-->  <DEPENDANT_MODULE_NAME><![CDATA[Advanced Payables and Receivables Mngmt]]></DEPENDANT_MODULE_NAME>
 <!--ED06CE9F2AFD4092871D9E9494AF42DD-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -105,7 +105,7 @@
 <!--FEF6E40F244A4061B7C62CB755663712-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--FEF6E40F244A4061B7C62CB755663712-->  <AD_MODULE_ID><![CDATA[0138E7A89B5E4DC3932462252801FFBC]]></AD_MODULE_ID>
 <!--FEF6E40F244A4061B7C62CB755663712-->  <AD_DEPENDENT_MODULE_ID><![CDATA[8A34B301DC524EA3A07513DF9F42CC90]]></AD_DEPENDENT_MODULE_ID>
-<!--FEF6E40F244A4061B7C62CB755663712-->  <STARTVERSION><![CDATA[1.0.27639]]></STARTVERSION>
+<!--FEF6E40F244A4061B7C62CB755663712-->  <STARTVERSION><![CDATA[1.0.28035]]></STARTVERSION>
 <!--FEF6E40F244A4061B7C62CB755663712-->  <ISINCLUDED><![CDATA[Y]]></ISINCLUDED>
 <!--FEF6E40F244A4061B7C62CB755663712-->  <DEPENDANT_MODULE_NAME><![CDATA[Log Clean Up Utility]]></DEPENDANT_MODULE_NAME>
 <!--FEF6E40F244A4061B7C62CB755663712-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -119,7 +119,7 @@
 <!--FF8080813189932B013189B45B59003A-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--FF8080813189932B013189B45B59003A-->  <AD_MODULE_ID><![CDATA[0138E7A89B5E4DC3932462252801FFBC]]></AD_MODULE_ID>
 <!--FF8080813189932B013189B45B59003A-->  <AD_DEPENDENT_MODULE_ID><![CDATA[FF8080813141B198013141B86DD70003]]></AD_DEPENDENT_MODULE_ID>
-<!--FF8080813189932B013189B45B59003A-->  <STARTVERSION><![CDATA[0.1.27639]]></STARTVERSION>
+<!--FF8080813189932B013189B45B59003A-->  <STARTVERSION><![CDATA[0.1.28035]]></STARTVERSION>
 <!--FF8080813189932B013189B45B59003A-->  <ISINCLUDED><![CDATA[Y]]></ISINCLUDED>
 <!--FF8080813189932B013189B45B59003A-->  <DEPENDANT_MODULE_NAME><![CDATA[OpenID Service Integration]]></DEPENDANT_MODULE_NAME>
 <!--FF8080813189932B013189B45B59003A-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -133,7 +133,7 @@
 <!--FF8080813189932B013189B4C00F003D-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--FF8080813189932B013189B4C00F003D-->  <AD_MODULE_ID><![CDATA[0138E7A89B5E4DC3932462252801FFBC]]></AD_MODULE_ID>
 <!--FF8080813189932B013189B4C00F003D-->  <AD_DEPENDENT_MODULE_ID><![CDATA[FF8080813129ADA401312CA1222A0005]]></AD_DEPENDENT_MODULE_ID>
-<!--FF8080813189932B013189B4C00F003D-->  <STARTVERSION><![CDATA[0.1.27639]]></STARTVERSION>
+<!--FF8080813189932B013189B4C00F003D-->  <STARTVERSION><![CDATA[0.1.28035]]></STARTVERSION>
 <!--FF8080813189932B013189B4C00F003D-->  <ISINCLUDED><![CDATA[Y]]></ISINCLUDED>
 <!--FF8080813189932B013189B4C00F003D-->  <DEPENDANT_MODULE_NAME><![CDATA[Integration with Google APIs]]></DEPENDANT_MODULE_NAME>
 <!--FF8080813189932B013189B4C00F003D-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -147,7 +147,7 @@
 <!--FF8081812E2F6F3C012E2F750109001C-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--FF8081812E2F6F3C012E2F750109001C-->  <AD_MODULE_ID><![CDATA[0138E7A89B5E4DC3932462252801FFBC]]></AD_MODULE_ID>
 <!--FF8081812E2F6F3C012E2F750109001C-->  <AD_DEPENDENT_MODULE_ID><![CDATA[FF8080812D842086012D844F3CC0003E]]></AD_DEPENDENT_MODULE_ID>
-<!--FF8081812E2F6F3C012E2F750109001C-->  <STARTVERSION><![CDATA[0.0.27639]]></STARTVERSION>
+<!--FF8081812E2F6F3C012E2F750109001C-->  <STARTVERSION><![CDATA[0.0.28035]]></STARTVERSION>
 <!--FF8081812E2F6F3C012E2F750109001C-->  <ISINCLUDED><![CDATA[Y]]></ISINCLUDED>
 <!--FF8081812E2F6F3C012E2F750109001C-->  <DEPENDANT_MODULE_NAME><![CDATA[Widgets Collection]]></DEPENDANT_MODULE_NAME>
 <!--FF8081812E2F6F3C012E2F750109001C-->  <DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
--- a/src-core/src/org/openbravo/base/filter/NumberFilter.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/src-core/src/org/openbravo/base/filter/NumberFilter.java	Wed Nov 25 09:01:32 2015 +0100
@@ -1,6 +1,6 @@
 /*
  ************************************************************************************
- * Copyright (C) 2009-2010 Openbravo S.L.U.
+ * Copyright (C) 2009-2015 Openbravo S.L.U.
  * Licensed under the Apache Software License version 2.0
  * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
  * Unless required by applicable law or agreed to  in writing,  software  distributed
@@ -23,7 +23,6 @@
 
   public static final NumberFilter instance = new NumberFilter();
 
-  @SuppressWarnings("unused")
   @Override
   public boolean accept(String value) {
     try {
--- a/src-db/database/model/functions/M_EXPLODEBOMNOTSTOCK.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/src-db/database/model/functions/M_EXPLODEBOMNOTSTOCK.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -201,8 +201,8 @@
          END IF;
 
       END LOOP; -- Create New Lines
+      UPDATE c_orderline set explode='Y' where c_orderline_id = v_Record_ID;
     END LOOP; -- Replace Lines
-    UPDATE c_orderline set explode='Y' where c_orderline_id = v_Record_ID;
 
     IF (v_orderline_ID IS NOT NULL) THEN
       M_EXPLODEBOMNOTSTOCK(null, v_orderline_ID); 
--- a/src-db/database/model/triggers/C_INVOICELINE_TRG.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/src-db/database/model/triggers/C_INVOICELINE_TRG.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -14,7 +14,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) 2001-2014 Openbravo SLU
+* All portions are Copyright (C) 2001-2015 Openbravo SLU
 * All Rights Reserved.
 * Contributor(s):  ______________________________________.
 ************************************************************************/
@@ -40,9 +40,7 @@
  v_AttrSetValueType M_Product.AttrSetValueType%TYPE;
  v_count NUMBER;
  v_IsCashVAT_Tax C_Tax.IsCashVAT%TYPE;
- v_IsWithholding_Tax C_Tax.IsWithholdingTax%TYPE;
  v_IsCashVAT_Invoice C_Invoice.IsCashVAT%TYPE;
- v_Rate_Tax C_Tax.Rate%TYPE;
     
 BEGIN
     
@@ -108,25 +106,29 @@
  -- Update C_Invoice.IsCashVAT flag from the line tax rate.
  -- We do it this way to force any invoicing process to properly set the C_Invoice.IsCashVAT
  -- If a user manually changes the tax rate when entering a line, the invoice's header IsCash VAT may change
- -- This will just work for not withholding tax rates
  IF (INSERTING OR UPDATING) THEN
   IF (:NEW.C_TAX_ID IS NOT NULL) THEN
-   SELECT COALESCE(iswithholdingtax, 'N'), COALESCE(IsCashVAT, 'N'), COALESCE(rate, 0)
-   INTO v_IsWithholding_Tax, v_IsCashVAT_Tax, v_Rate_Tax
-   FROM C_Tax
-   WHERE C_Tax_ID=:NEW.C_Tax_ID;
+   SELECT CASE WHEN COUNT(*) > 0 THEN 'Y' ELSE 'N' END
+   INTO v_IsCashVAT_Tax
+   FROM dual
+   WHERE EXISTS (
+        select 1
+        from c_tax t
+        where C_TAX_ISMEMBER(:NEW.C_Tax_ID, t.c_tax_id) = 1
+        and t.isCashVAT = 'Y'
+        and t.rate <> 0
+        and t.isSummary = 'N'
+                 );
 
-   IF (v_IsWithholding_Tax='N' AND v_Rate_Tax<>0) THEN
-    SELECT COALESCE(IsCashVAT, 'N')
-    INTO v_IsCashVAT_Invoice
-    FROM C_Invoice
-    WHERE C_Invoice_ID=:NEW.C_Invoice_ID;
+   SELECT COALESCE(IsCashVAT, 'N')
+   INTO v_IsCashVAT_Invoice
+   FROM C_Invoice
+   WHERE C_Invoice_ID=:NEW.C_Invoice_ID;
 
-    IF (v_IsCashVAT_Tax <> v_IsCashVAT_Invoice) THEN
-      UPDATE C_Invoice
-      SET IsCashVAT = v_IsCashVAT_Tax
-      WHERE C_Invoice_ID=:NEW.C_Invoice_ID;
-    END IF;
+   IF (v_IsCashVAT_Tax <> v_IsCashVAT_Invoice) THEN
+     UPDATE C_Invoice
+     SET IsCashVAT = v_IsCashVAT_Tax
+     WHERE C_Invoice_ID=:NEW.C_Invoice_ID;
    END IF;
   END IF;
  END IF;
--- a/src-db/database/model/triggers/C_ORDERLINE_TRG.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/src-db/database/model/triggers/C_ORDERLINE_TRG.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -31,10 +31,8 @@
   v_Count NUMBER;
   v_reservation_id    VARCHAR2(32);
   v_prereservedqty    NUMBER;
-  v_IsWithholding_Tax C_Tax.IsWithholdingTax%TYPE;
   v_IsCashVAT_Tax C_Tax.IsCashVAT%TYPE;
   v_IsCashVAT_Order C_Order.IsCashVAT%TYPE;
-  v_Rate_Tax C_Tax.Rate%TYPE;
 
   v_istaxincluded CHAR(1);
   v_PriceActual NUMBER;
@@ -252,25 +250,29 @@
  -- Update C_Order.IsCashVAT flag from the line tax rate.
  -- We do it this way to force any process that creates Orders to properly set the C_Order.IsCashVAT
  -- If a user manually changes the tax rate when entering a line, the order's header IsCash VAT may change
- -- This will just work for not withholding tax rates
  IF (INSERTING OR UPDATING) THEN
-  IF (:NEW.C_TAX_ID IS NOT NULL) THEN
-   SELECT COALESCE(iswithholdingtax, 'N'), COALESCE(IsCashVAT, 'N'), COALESCE(rate, 0)
-   INTO v_IsWithholding_Tax, v_IsCashVAT_Tax, v_Rate_Tax
-   FROM C_Tax
-   WHERE C_Tax_ID=:NEW.C_Tax_ID;
+  IF (:NEW.C_TAX_ID IS NOT NULL) THEN  
+   SELECT CASE WHEN COUNT(*) > 0 THEN 'Y' ELSE 'N' END
+   INTO v_IsCashVAT_Tax
+   FROM dual
+   WHERE EXISTS (
+        select 1
+        from c_tax t
+        where C_TAX_ISMEMBER(:NEW.C_Tax_ID, t.c_tax_id) = 1
+        and t.isCashVAT = 'Y'
+        and t.rate <> 0
+        and t.isSummary = 'N'
+                 );
 
-   IF (v_IsWithholding_Tax='N' AND v_Rate_Tax<>0) THEN
-    SELECT COALESCE(IsCashVAT, 'N')
-    INTO v_IsCashVAT_Order
-    FROM C_Order
-    WHERE C_Order_ID=:NEW.C_Order_ID;
+   SELECT COALESCE(IsCashVAT, 'N')
+   INTO v_IsCashVAT_Order
+   FROM C_Order
+   WHERE C_Order_ID=:NEW.C_Order_ID;
 
-    IF (v_IsCashVAT_Tax <> v_IsCashVAT_Order) THEN
-      UPDATE C_Order
-      SET IsCashVAT = v_IsCashVAT_Tax
-      WHERE C_Order_ID=:NEW.C_Order_ID;
-    END IF;
+   IF (v_IsCashVAT_Tax <> v_IsCashVAT_Order) THEN
+     UPDATE C_Order
+     SET IsCashVAT = v_IsCashVAT_Tax
+     WHERE C_Order_ID=:NEW.C_Order_ID;
    END IF;
   END IF;
  END IF;
--- a/src-db/database/sourcedata/AD_FIELD.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/src-db/database/sourcedata/AD_FIELD.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -197247,6 +197247,34 @@
 <!--317E5533B56D4E719E04CD0A3F9D7401-->  <EM_OBUIAPP_SHOWSUMMARY><![CDATA[N]]></EM_OBUIAPP_SHOWSUMMARY>
 <!--317E5533B56D4E719E04CD0A3F9D7401--></AD_FIELD>
 
+<!--317E7BE2AEB1474F9F37D3C115B72EB6--><AD_FIELD>
+<!--317E7BE2AEB1474F9F37D3C115B72EB6-->  <AD_FIELD_ID><![CDATA[317E7BE2AEB1474F9F37D3C115B72EB6]]></AD_FIELD_ID>
+<!--317E7BE2AEB1474F9F37D3C115B72EB6-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--317E7BE2AEB1474F9F37D3C115B72EB6-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--317E7BE2AEB1474F9F37D3C115B72EB6-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--317E7BE2AEB1474F9F37D3C115B72EB6-->  <NAME><![CDATA[Inherited From]]></NAME>
+<!--317E7BE2AEB1474F9F37D3C115B72EB6-->  <DESCRIPTION><![CDATA[Inherited From]]></DESCRIPTION>
+<!--317E7BE2AEB1474F9F37D3C115B72EB6-->  <HELP><![CDATA[The role from which a permission has been inherited. If a permission has this field set it means that this is an inherited permission, an therefore that the role owner of the permission is able to access it because it inherits from the role defined in this field.]]></HELP>
+<!--317E7BE2AEB1474F9F37D3C115B72EB6-->  <ISCENTRALLYMAINTAINED><![CDATA[Y]]></ISCENTRALLYMAINTAINED>
+<!--317E7BE2AEB1474F9F37D3C115B72EB6-->  <AD_TAB_ID><![CDATA[800038]]></AD_TAB_ID>
+<!--317E7BE2AEB1474F9F37D3C115B72EB6-->  <AD_COLUMN_ID><![CDATA[DD9A479969A747D1972E40FDB96D7DE7]]></AD_COLUMN_ID>
+<!--317E7BE2AEB1474F9F37D3C115B72EB6-->  <IGNOREINWAD><![CDATA[N]]></IGNOREINWAD>
+<!--317E7BE2AEB1474F9F37D3C115B72EB6-->  <ISDISPLAYED><![CDATA[Y]]></ISDISPLAYED>
+<!--317E7BE2AEB1474F9F37D3C115B72EB6-->  <DISPLAYLENGTH><![CDATA[32]]></DISPLAYLENGTH>
+<!--317E7BE2AEB1474F9F37D3C115B72EB6-->  <ISREADONLY><![CDATA[Y]]></ISREADONLY>
+<!--317E7BE2AEB1474F9F37D3C115B72EB6-->  <SEQNO><![CDATA[50]]></SEQNO>
+<!--317E7BE2AEB1474F9F37D3C115B72EB6-->  <ISSAMELINE><![CDATA[N]]></ISSAMELINE>
+<!--317E7BE2AEB1474F9F37D3C115B72EB6-->  <ISFIELDONLY><![CDATA[N]]></ISFIELDONLY>
+<!--317E7BE2AEB1474F9F37D3C115B72EB6-->  <ISENCRYPTED><![CDATA[N]]></ISENCRYPTED>
+<!--317E7BE2AEB1474F9F37D3C115B72EB6-->  <SHOWINRELATION><![CDATA[Y]]></SHOWINRELATION>
+<!--317E7BE2AEB1474F9F37D3C115B72EB6-->  <ISFIRSTFOCUSEDFIELD><![CDATA[N]]></ISFIRSTFOCUSEDFIELD>
+<!--317E7BE2AEB1474F9F37D3C115B72EB6-->  <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
+<!--317E7BE2AEB1474F9F37D3C115B72EB6-->  <STARTINODDCOLUMN><![CDATA[N]]></STARTINODDCOLUMN>
+<!--317E7BE2AEB1474F9F37D3C115B72EB6-->  <STARTNEWLINE><![CDATA[N]]></STARTNEWLINE>
+<!--317E7BE2AEB1474F9F37D3C115B72EB6-->  <ISSHOWNINSTATUSBAR><![CDATA[N]]></ISSHOWNINSTATUSBAR>
+<!--317E7BE2AEB1474F9F37D3C115B72EB6-->  <EM_OBUIAPP_SHOWSUMMARY><![CDATA[N]]></EM_OBUIAPP_SHOWSUMMARY>
+<!--317E7BE2AEB1474F9F37D3C115B72EB6--></AD_FIELD>
+
 <!--3190A840DF384C7A84EA965C31C3272A--><AD_FIELD>
 <!--3190A840DF384C7A84EA965C31C3272A-->  <AD_FIELD_ID><![CDATA[3190A840DF384C7A84EA965C31C3272A]]></AD_FIELD_ID>
 <!--3190A840DF384C7A84EA965C31C3272A-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
--- a/src-db/database/sourcedata/AD_MESSAGE.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/src-db/database/sourcedata/AD_MESSAGE.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -18609,6 +18609,18 @@
 <!--3AC018B68C664063832D84ECDF0E1B68-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
 <!--3AC018B68C664063832D84ECDF0E1B68--></AD_MESSAGE>
 
+<!--3AC7DAA7473B4AC794835FBDAB82839D--><AD_MESSAGE>
+<!--3AC7DAA7473B4AC794835FBDAB82839D-->  <AD_MESSAGE_ID><![CDATA[3AC7DAA7473B4AC794835FBDAB82839D]]></AD_MESSAGE_ID>
+<!--3AC7DAA7473B4AC794835FBDAB82839D-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--3AC7DAA7473B4AC794835FBDAB82839D-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--3AC7DAA7473B4AC794835FBDAB82839D-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--3AC7DAA7473B4AC794835FBDAB82839D-->  <VALUE><![CDATA[OPS_POS_TERMINALS_EXCEEDED]]></VALUE>
+<!--3AC7DAA7473B4AC794835FBDAB82839D-->  <MSGTEXT><![CDATA[Maximum allowed number of terminals for this instance has been exceeded. Your system is still active but only System Administrators can log in to renew your subscription.]]></MSGTEXT>
+<!--3AC7DAA7473B4AC794835FBDAB82839D-->  <MSGTYPE><![CDATA[E]]></MSGTYPE>
+<!--3AC7DAA7473B4AC794835FBDAB82839D-->  <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
+<!--3AC7DAA7473B4AC794835FBDAB82839D-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
+<!--3AC7DAA7473B4AC794835FBDAB82839D--></AD_MESSAGE>
+
 <!--3AF9B679229647FA90310BE11368DBEB--><AD_MESSAGE>
 <!--3AF9B679229647FA90310BE11368DBEB-->  <AD_MESSAGE_ID><![CDATA[3AF9B679229647FA90310BE11368DBEB]]></AD_MESSAGE_ID>
 <!--3AF9B679229647FA90310BE11368DBEB-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
@@ -20482,6 +20494,18 @@
 <!--65C05BD368ED471CB1E6AE97DD911EDF-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
 <!--65C05BD368ED471CB1E6AE97DD911EDF--></AD_MESSAGE>
 
+<!--666B55528E5F40399905D1033226DFE7--><AD_MESSAGE>
+<!--666B55528E5F40399905D1033226DFE7-->  <AD_MESSAGE_ID><![CDATA[666B55528E5F40399905D1033226DFE7]]></AD_MESSAGE_ID>
+<!--666B55528E5F40399905D1033226DFE7-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--666B55528E5F40399905D1033226DFE7-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--666B55528E5F40399905D1033226DFE7-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--666B55528E5F40399905D1033226DFE7-->  <VALUE><![CDATA[OPSPOSLimitation]]></VALUE>
+<!--666B55528E5F40399905D1033226DFE7-->  <MSGTEXT><![CDATA[WebPOS Terminals]]></MSGTEXT>
+<!--666B55528E5F40399905D1033226DFE7-->  <MSGTYPE><![CDATA[I]]></MSGTYPE>
+<!--666B55528E5F40399905D1033226DFE7-->  <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
+<!--666B55528E5F40399905D1033226DFE7-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
+<!--666B55528E5F40399905D1033226DFE7--></AD_MESSAGE>
+
 <!--66BEE4A0FBD44C96B2967716918A1318--><AD_MESSAGE>
 <!--66BEE4A0FBD44C96B2967716918A1318-->  <AD_MESSAGE_ID><![CDATA[66BEE4A0FBD44C96B2967716918A1318]]></AD_MESSAGE_ID>
 <!--66BEE4A0FBD44C96B2967716918A1318-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
@@ -21265,6 +21289,18 @@
 <!--79D510C3817A4174B9ECB194E47CDBEB-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
 <!--79D510C3817A4174B9ECB194E47CDBEB--></AD_MESSAGE>
 
+<!--79F5798F86FB456D8E22293792E06F20--><AD_MESSAGE>
+<!--79F5798F86FB456D8E22293792E06F20-->  <AD_MESSAGE_ID><![CDATA[79F5798F86FB456D8E22293792E06F20]]></AD_MESSAGE_ID>
+<!--79F5798F86FB456D8E22293792E06F20-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--79F5798F86FB456D8E22293792E06F20-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--79F5798F86FB456D8E22293792E06F20-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--79F5798F86FB456D8E22293792E06F20-->  <VALUE><![CDATA[OPSNone]]></VALUE>
+<!--79F5798F86FB456D8E22293792E06F20-->  <MSGTEXT><![CDATA[None]]></MSGTEXT>
+<!--79F5798F86FB456D8E22293792E06F20-->  <MSGTYPE><![CDATA[I]]></MSGTYPE>
+<!--79F5798F86FB456D8E22293792E06F20-->  <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
+<!--79F5798F86FB456D8E22293792E06F20-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
+<!--79F5798F86FB456D8E22293792E06F20--></AD_MESSAGE>
+
 <!--7A02413548D945938FC34095E61EB76B--><AD_MESSAGE>
 <!--7A02413548D945938FC34095E61EB76B-->  <AD_MESSAGE_ID><![CDATA[7A02413548D945938FC34095E61EB76B]]></AD_MESSAGE_ID>
 <!--7A02413548D945938FC34095E61EB76B-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
@@ -22495,6 +22531,18 @@
 <!--950D6D5D72078C44E040007F0101145E-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
 <!--950D6D5D72078C44E040007F0101145E--></AD_MESSAGE>
 
+<!--953DE167595F4399B2457E3F6467BA7A--><AD_MESSAGE>
+<!--953DE167595F4399B2457E3F6467BA7A-->  <AD_MESSAGE_ID><![CDATA[953DE167595F4399B2457E3F6467BA7A]]></AD_MESSAGE_ID>
+<!--953DE167595F4399B2457E3F6467BA7A-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--953DE167595F4399B2457E3F6467BA7A-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--953DE167595F4399B2457E3F6467BA7A-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--953DE167595F4399B2457E3F6467BA7A-->  <VALUE><![CDATA[OPS_POS_TERMINALS_EXCEEDED_TITLE]]></VALUE>
+<!--953DE167595F4399B2457E3F6467BA7A-->  <MSGTEXT><![CDATA[Exceeded Number of WebPOS terminals]]></MSGTEXT>
+<!--953DE167595F4399B2457E3F6467BA7A-->  <MSGTYPE><![CDATA[E]]></MSGTYPE>
+<!--953DE167595F4399B2457E3F6467BA7A-->  <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
+<!--953DE167595F4399B2457E3F6467BA7A-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
+<!--953DE167595F4399B2457E3F6467BA7A--></AD_MESSAGE>
+
 <!--9549E1F434DA40DDBE250F282E838E70--><AD_MESSAGE>
 <!--9549E1F434DA40DDBE250F282E838E70-->  <AD_MESSAGE_ID><![CDATA[9549E1F434DA40DDBE250F282E838E70]]></AD_MESSAGE_ID>
 <!--9549E1F434DA40DDBE250F282E838E70-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
--- a/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/src-db/database/sourcedata/AD_MODULE.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -6,7 +6,7 @@
 <!--0-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
 <!--0-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--0-->  <NAME><![CDATA[Core]]></NAME>
-<!--0-->  <VERSION><![CDATA[3.0.27639]]></VERSION>
+<!--0-->  <VERSION><![CDATA[3.0.28035]]></VERSION>
 <!--0-->  <DESCRIPTION><![CDATA[Core module is the base one]]></DESCRIPTION>
 <!--0-->  <HELP><![CDATA[Core module is the base one, all developments in core are included as part of the standard Openbravo ERP.]]></HELP>
 <!--0-->  <URL><![CDATA[www.openbravo.com]]></URL>
--- a/src-db/database/sourcedata/AD_TEXTINTERFACES.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/src-db/database/sourcedata/AD_TEXTINTERFACES.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -20623,6 +20623,17 @@
 <!--B043CE30628911DEABA612313C002DE1-->  <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
 <!--B043CE30628911DEABA612313C002DE1--></AD_TEXTINTERFACES>
 
+<!--B1069A31237347A29E00074FBB4382DC--><AD_TEXTINTERFACES>
+<!--B1069A31237347A29E00074FBB4382DC-->  <AD_TEXTINTERFACES_ID><![CDATA[B1069A31237347A29E00074FBB4382DC]]></AD_TEXTINTERFACES_ID>
+<!--B1069A31237347A29E00074FBB4382DC-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--B1069A31237347A29E00074FBB4382DC-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--B1069A31237347A29E00074FBB4382DC-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--B1069A31237347A29E00074FBB4382DC-->  <TEXT><![CDATA[WebPOS Terminals:]]></TEXT>
+<!--B1069A31237347A29E00074FBB4382DC-->  <FILENAME><![CDATA[/org/openbravo/erpCommon/ad_forms/About.html]]></FILENAME>
+<!--B1069A31237347A29E00074FBB4382DC-->  <ISUSED><![CDATA[Y]]></ISUSED>
+<!--B1069A31237347A29E00074FBB4382DC-->  <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
+<!--B1069A31237347A29E00074FBB4382DC--></AD_TEXTINTERFACES>
+
 <!--B128718462344DF0B232A5CF1CB220BF--><AD_TEXTINTERFACES>
 <!--B128718462344DF0B232A5CF1CB220BF-->  <AD_TEXTINTERFACES_ID><![CDATA[B128718462344DF0B232A5CF1CB220BF]]></AD_TEXTINTERFACES_ID>
 <!--B128718462344DF0B232A5CF1CB220BF-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
--- a/src-test/src/org/openbravo/test/AllTests.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/src-test/src/org/openbravo/test/AllTests.java	Wed Nov 25 09:01:32 2015 +0100
@@ -48,6 +48,7 @@
 import org.openbravo.test.security.AllowedOrganizationsTest;
 import org.openbravo.test.security.EntityAccessTest;
 import org.openbravo.test.security.WritableReadableOrganizationClientTest;
+import org.openbravo.test.views.ViewGenerationWithDifferentConfigLevelTest;
 import org.openbravo.test.xml.DefaultsDataset;
 import org.openbravo.test.xml.EntityXMLImportTestBusinessObject;
 import org.openbravo.test.xml.EntityXMLImportTestReference;
@@ -103,6 +104,9 @@
     ClassicSelectorTest.class,
 
     // cdi
-    CdiInfrastructure.class })
+    CdiInfrastructure.class,
+
+    // view generation
+    ViewGenerationWithDifferentConfigLevelTest.class })
 public class AllTests {
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src-test/src/org/openbravo/test/views/ViewGenerationWithDifferentConfigLevelTest.java	Wed Nov 25 09:01:32 2015 +0100
@@ -0,0 +1,290 @@
+/*
+ *************************************************************************
+ * The contents of this file are subject to the Openbravo  Public  License
+ * Version  1.1  (the  "License"),  being   the  Mozilla   Public  License
+ * Version 1.1  with a permitted attribution clause; you may not  use this
+ * file except in compliance with the License. You  may  obtain  a copy of
+ * the License at http://www.openbravo.com/legal/license.html 
+ * Software distributed under the License  is  distributed  on  an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ * License for the specific  language  governing  rights  and  limitations
+ * under the License. 
+ * The Original Code is Openbravo ERP. 
+ * The Initial Developer of the Original Code is Openbravo SLU 
+ * All portions are Copyright (C) 2015 Openbravo SLU 
+ * All Rights Reserved. 
+ * Contributor(s):  ______________________________________.
+ ************************************************************************
+ */
+
+package org.openbravo.test.views;
+
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Test;
+import org.openbravo.base.provider.OBProvider;
+import org.openbravo.client.application.GCField;
+import org.openbravo.client.application.GCSystem;
+import org.openbravo.client.application.GCTab;
+import org.openbravo.dal.core.OBContext;
+import org.openbravo.dal.service.OBDal;
+import org.openbravo.model.ad.system.Client;
+import org.openbravo.model.ad.ui.Field;
+import org.openbravo.model.ad.ui.Tab;
+import org.openbravo.model.common.enterprise.Organization;
+import org.openbravo.test.datasource.BaseDataSourceTestDal;
+
+/**
+ * Test cases for checking the correct generation of the views, with the different configurations in
+ * tab, field and in system level.
+ * 
+ * @author NaroaIriarte
+ *
+ */
+public class ViewGenerationWithDifferentConfigLevelTest extends BaseDataSourceTestDal {
+  private static final String BUSINESS_PARTNER_WINDOW_ID = "_123";
+  private static final String CLIENT_FOR_GC_SYSTEM_FIELD_TAB = "0";
+  private static final String ZERO_ORGANIZATION = "0";
+  private static final String BUSINESS_PARTNER_TAB_ID = "220";
+  private static final String BUSINESS_PARTNER_CATEGORY_FIELD_ID = "3955";
+
+  /**
+   * Test to ensure that the the view retrieves the expected values, having only grid configuration
+   * in System level. In the configuration, the "by default allow filtering" checkbox is checked,
+   * so, the expression "canFilter: true" must be found in the view.
+   * 
+   * @throws Exception
+   */
+  @Test
+  public void gridConfigurationSystemLevel() throws Exception {
+    OBContext.setAdminMode(false);
+    try {
+      GCSystem gcsystem = OBProvider.getInstance().get(GCSystem.class);
+      gcsystem.setClient(OBDal.getInstance().get(Client.class, CLIENT_FOR_GC_SYSTEM_FIELD_TAB));
+      gcsystem.setOrganization(OBDal.getInstance().get(Organization.class, ZERO_ORGANIZATION));
+      gcsystem.setFilterable(true);
+      OBDal.getInstance().save(gcsystem);
+      OBDal.getInstance().commitAndClose();
+      String theResponse = getViewResponse();
+      OBDal.getInstance().remove(gcsystem);
+      OBDal.getInstance().commitAndClose();
+      boolean existsCanFilter;
+      existsCanFilter = theResponse.contains("canFilter: true");
+      assertThat(existsCanFilter, is(true));
+    } finally {
+      OBDal.getInstance().commitAndClose();
+      OBContext.restorePreviousMode();
+    }
+  }
+
+  /**
+   * Test to ensure that the the view retrieves the expected values, having only grid configuration
+   * at tab level. The "allow filtering" property in the grid configuration at tab level, in the
+   * Businsess Partner tab has been set to "No". So this test checks that the "canFiler: false"
+   * expression is present in the view.
+   */
+  @Test
+  public void gridConfigurationTabLevel() throws Exception {
+    OBContext.setAdminMode(false);
+    try {
+      GCTab gctab = OBProvider.getInstance().get(GCTab.class);
+      gctab.setClient(OBDal.getInstance().get(Client.class, CLIENT_FOR_GC_SYSTEM_FIELD_TAB));
+      gctab.setOrganization(OBDal.getInstance().get(Organization.class, ZERO_ORGANIZATION));
+      gctab.setFilterable("N");
+      gctab.setTab(OBDal.getInstance().get(Tab.class, BUSINESS_PARTNER_TAB_ID));
+      OBDal.getInstance().save(gctab);
+      OBDal.getInstance().commitAndClose();
+      String theResponse = getViewResponse();
+      OBDal.getInstance().remove(gctab);
+      OBDal.getInstance().commitAndClose();
+      boolean existsCanFilter;
+      existsCanFilter = theResponse.contains("canFilter: false");
+      assertThat(existsCanFilter, is(true));
+    } finally {
+      OBDal.getInstance().commitAndClose();
+      OBContext.restorePreviousMode();
+    }
+  }
+
+  /**
+   * Test to ensure that the the view retrieves the expected values, having grid configuration at
+   * System and tab level. The "allow filtering" property in the grid configuration at tab level, in
+   * the Business Partner tab has been set to "No". So this test checks that the "canFiler: false"
+   * expression is present in the view. Also, the "allow sorting" property has been set to default,
+   * so, the taken value is going to be the one set in the grid configuration at system level, which
+   * is true. The test checks that the "canSort: true" expression is present in the view.
+   */
+  @Test
+  public void gridConfigurationTabAndSystemLevel() throws Exception {
+    OBContext.setAdminMode(false);
+    try {
+      GCSystem gcsystem = OBProvider.getInstance().get(GCSystem.class);
+      gcsystem.setClient(OBDal.getInstance().get(Client.class, CLIENT_FOR_GC_SYSTEM_FIELD_TAB));
+      gcsystem.setOrganization(OBDal.getInstance().get(Organization.class, ZERO_ORGANIZATION));
+      gcsystem.setSortable(true);
+      OBDal.getInstance().save(gcsystem);
+      OBDal.getInstance().commitAndClose();
+      GCTab gctab = OBProvider.getInstance().get(GCTab.class);
+      gctab.setClient(OBDal.getInstance().get(Client.class, CLIENT_FOR_GC_SYSTEM_FIELD_TAB));
+      gctab.setOrganization(OBDal.getInstance().get(Organization.class, ZERO_ORGANIZATION));
+      gctab.setFilterable("N");
+      gctab.setTab(OBDal.getInstance().get(Tab.class, BUSINESS_PARTNER_TAB_ID));
+      OBDal.getInstance().save(gctab);
+      OBDal.getInstance().commitAndClose();
+      String theResponse = getViewResponse();
+      OBDal.getInstance().remove(gctab);
+      OBDal.getInstance().commitAndClose();
+      OBDal.getInstance().remove(gcsystem);
+      OBDal.getInstance().commitAndClose();
+      boolean existsCanFilter, existsCanSort;
+      existsCanFilter = theResponse.contains("canFilter: false");
+      existsCanSort = theResponse.contains("canSort: true");
+      assertThat(existsCanFilter, is(true));
+      assertThat(existsCanSort, is(true));
+    } finally {
+      OBDal.getInstance().commitAndClose();
+      OBContext.restorePreviousMode();
+    }
+  }
+
+  /**
+   * Test to ensure that the the view retrieves the expected values, having only grid configuration
+   * at field level. The Business Partner category field of business Partner has the property allow
+   * sorting set to "Yes", so the view must have "canSort: true" expression.
+   */
+  @Test
+  public void gridConfigurationFieldLevel() throws Exception {
+    OBContext.setAdminMode(false);
+    try {
+      GCTab gctab = OBProvider.getInstance().get(GCTab.class);
+      gctab.setClient(OBDal.getInstance().get(Client.class, CLIENT_FOR_GC_SYSTEM_FIELD_TAB));
+      gctab.setOrganization(OBDal.getInstance().get(Organization.class, ZERO_ORGANIZATION));
+      gctab.setTab(OBDal.getInstance().get(Tab.class, BUSINESS_PARTNER_TAB_ID));
+      OBDal.getInstance().save(gctab);
+      OBDal.getInstance().commitAndClose();
+      GCField gcfield = OBProvider.getInstance().get(GCField.class);
+      gcfield.setClient(OBDal.getInstance().get(Client.class, CLIENT_FOR_GC_SYSTEM_FIELD_TAB));
+      gcfield.setOrganization(OBDal.getInstance().get(Organization.class, ZERO_ORGANIZATION));
+      gcfield.setField(OBDal.getInstance().get(Field.class, BUSINESS_PARTNER_CATEGORY_FIELD_ID));
+      gcfield.setSortable("Y");
+      gcfield.setObuiappGcTab(gctab);
+      OBDal.getInstance().save(gcfield);
+      OBDal.getInstance().commitAndClose();
+      String theResponse = getViewResponse();
+      OBDal.getInstance().remove(gcfield);
+      OBDal.getInstance().commitAndClose();
+      OBDal.getInstance().remove(gctab);
+      OBDal.getInstance().commitAndClose();
+      boolean existsCanSort;
+      existsCanSort = theResponse.contains("canSort: true");
+      assertThat(existsCanSort, is(true));
+    } finally {
+      OBDal.getInstance().commitAndClose();
+      OBContext.restorePreviousMode();
+    }
+  }
+
+  /**
+   * Test to ensure that the the view retrieves the expected values, having grid configuration at
+   * field and System level. In the grid configuration at system level, the "by default allow
+   * sorting" checkbox is checked. The tests ensures that the expression "canSort: true" is in the
+   * view. The business partner category of the business partner tab has the allow filtering
+   * property set to "No". The test ensures that the "canFilter: false" expression is in the view.
+   */
+  @Test
+  public void gridConfigurationFieldAndSystemLevel() throws Exception {
+    OBContext.setAdminMode(false);
+    try {
+      GCSystem gcsystem = OBProvider.getInstance().get(GCSystem.class);
+      gcsystem.setClient(OBDal.getInstance().get(Client.class, CLIENT_FOR_GC_SYSTEM_FIELD_TAB));
+      gcsystem.setOrganization(OBDal.getInstance().get(Organization.class, ZERO_ORGANIZATION));
+      gcsystem.setSortable(true);
+      OBDal.getInstance().save(gcsystem);
+      OBDal.getInstance().commitAndClose();
+      GCTab gctab = OBProvider.getInstance().get(GCTab.class);
+      gctab.setClient(OBDal.getInstance().get(Client.class, CLIENT_FOR_GC_SYSTEM_FIELD_TAB));
+      gctab.setOrganization(OBDal.getInstance().get(Organization.class, ZERO_ORGANIZATION));
+      gctab.setTab(OBDal.getInstance().get(Tab.class, BUSINESS_PARTNER_TAB_ID));
+      OBDal.getInstance().save(gctab);
+      OBDal.getInstance().commitAndClose();
+      GCField gcfield = OBProvider.getInstance().get(GCField.class);
+      gcfield.setClient(OBDal.getInstance().get(Client.class, CLIENT_FOR_GC_SYSTEM_FIELD_TAB));
+      gcfield.setOrganization(OBDal.getInstance().get(Organization.class, ZERO_ORGANIZATION));
+      gcfield.setField(OBDal.getInstance().get(Field.class, BUSINESS_PARTNER_CATEGORY_FIELD_ID));
+      gcfield.setFilterable("N");
+      gcfield.setObuiappGcTab(gctab);
+      OBDal.getInstance().save(gcfield);
+      OBDal.getInstance().commitAndClose();
+      String theResponse = getViewResponse();
+      OBDal.getInstance().remove(gcfield);
+      OBDal.getInstance().commitAndClose();
+      OBDal.getInstance().remove(gctab);
+      OBDal.getInstance().commitAndClose();
+      OBDal.getInstance().remove(gcsystem);
+      OBDal.getInstance().commitAndClose();
+      boolean existsCanFilter, existsCanSort;
+      existsCanFilter = theResponse.contains("canFilter: false");
+      existsCanSort = theResponse.contains("canSort: true");
+      assertThat(existsCanFilter, is(true));
+      assertThat(existsCanSort, is(true));
+    } finally {
+      OBDal.getInstance().commitAndClose();
+      OBContext.restorePreviousMode();
+    }
+
+  }
+
+  /**
+   * Test to ensure that the the view retrieves the expected values, having grid configuration at
+   * field and tab level. The field Business Partner category of Business Parter has the property
+   * "allow sorting" set to "Yes". The test checks if the "canSort: true" exists in the view. In the
+   * tab configuration the allow filtering property is set to no, so the "canFilter: false" must
+   * exist in the view.
+   */
+  @Test
+  public void gridConfigurationFieldAndTabLevel() throws Exception {
+    OBContext.setAdminMode(false);
+    try {
+      GCTab gctab = OBProvider.getInstance().get(GCTab.class);
+      gctab.setClient(OBDal.getInstance().get(Client.class, CLIENT_FOR_GC_SYSTEM_FIELD_TAB));
+      gctab.setOrganization(OBDal.getInstance().get(Organization.class, ZERO_ORGANIZATION));
+      gctab.setFilterable("N");
+      gctab.setTab(OBDal.getInstance().get(Tab.class, BUSINESS_PARTNER_TAB_ID));
+      OBDal.getInstance().save(gctab);
+      OBDal.getInstance().commitAndClose();
+      GCField gcfield = OBProvider.getInstance().get(GCField.class);
+      gcfield.setClient(OBDal.getInstance().get(Client.class, CLIENT_FOR_GC_SYSTEM_FIELD_TAB));
+      gcfield.setOrganization(OBDal.getInstance().get(Organization.class, ZERO_ORGANIZATION));
+      gcfield.setField(OBDal.getInstance().get(Field.class, BUSINESS_PARTNER_CATEGORY_FIELD_ID));
+      gcfield.setSortable("Y");
+      gcfield.setObuiappGcTab(gctab);
+      OBDal.getInstance().save(gcfield);
+      OBDal.getInstance().commitAndClose();
+      String theResponse = getViewResponse();
+      OBDal.getInstance().remove(gcfield);
+      OBDal.getInstance().commitAndClose();
+      OBDal.getInstance().remove(gctab);
+      OBDal.getInstance().commitAndClose();
+      boolean existsCanFilter, existsCanSort;
+      existsCanFilter = theResponse.contains("canFilter: false");
+      existsCanSort = theResponse.contains("canSort: true");
+      assertThat(existsCanFilter, is(true));
+      assertThat(existsCanSort, is(true));
+    } finally {
+      OBDal.getInstance().commitAndClose();
+      OBContext.restorePreviousMode();
+    }
+  }
+
+  private String getViewResponse() throws Exception {
+    Map<String, String> params = new HashMap<String, String>();
+    String businessPartnerViewResponse = doRequest(
+        "/org.openbravo.client.kernel/OBUIAPP_MainLayout/View?viewId=" + BUSINESS_PARTNER_WINDOW_ID,
+        params, 200, "GET");
+    return businessPartnerViewResponse;
+  }
+}
\ No newline at end of file
--- a/src/org/openbravo/base/exception/OBException.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/src/org/openbravo/base/exception/OBException.java	Wed Nov 25 09:01:32 2015 +0100
@@ -20,6 +20,7 @@
 package org.openbravo.base.exception;
 
 import org.apache.log4j.Logger;
+import org.openbravo.service.db.DbUtility;
 
 /**
  * This is the base exception for all exceptions in Openbravo. It is an unchecked exception which
@@ -64,7 +65,13 @@
 
   public OBException(Throwable cause) {
     super(cause);
-    getLogger().error(cause.getMessage(), cause);
+    Throwable foundCause = DbUtility.getUnderlyingSQLException(cause);
+    if (foundCause != cause) {
+      // passing foundCause ensures that the underlying stack trace is printed
+      getLogger().error(cause.getMessage() + " - " + foundCause.getMessage(), foundCause);
+    } else {
+      getLogger().error(cause.getMessage(), cause);
+    }
   }
 
   /**
--- a/src/org/openbravo/base/secureApp/HttpSecureAppServlet.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/src/org/openbravo/base/secureApp/HttpSecureAppServlet.java	Wed Nov 25 09:01:32 2015 +0100
@@ -247,7 +247,8 @@
               || limitation == LicenseRestriction.MODULE_EXPIRED
               || limitation == LicenseRestriction.NOT_MATCHED_INSTANCE
               || limitation == LicenseRestriction.HB_NOT_ACTIVE
-              || limitation == LicenseRestriction.ON_DEMAND_OFF_PLATFORM || !correctSystemStatus) {
+              || limitation == LicenseRestriction.ON_DEMAND_OFF_PLATFORM
+              || limitation == LicenseRestriction.POS_TERMINALS_EXCEEDED || !correctSystemStatus) {
             // it is only allowed to log as system administrator
             strRole = DefaultOptionsData.getDefaultSystemRole(this, strUserAuth);
             if (strRole == null || strRole.equals("")) {
--- a/src/org/openbravo/base/secureApp/LoginHandler.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/src/org/openbravo/base/secureApp/LoginHandler.java	Wed Nov 25 09:01:32 2015 +0100
@@ -1,6 +1,6 @@
 /*
  ************************************************************************************
- * Copyright (C) 2001-2014 Openbravo S.L.U.
+ * Copyright (C) 2001-2015 Openbravo S.L.U.
  * Licensed under the Apache Software License version 2.0
  * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
  * Unless required by applicable law or agreed to  in writing,  software  distributed
@@ -235,6 +235,12 @@
         log4j.warn("On demand off platform");
         goToRetry(res, vars, msg, title, msgType, action, doRedirect);
         return;
+      case POS_TERMINALS_EXCEEDED:
+        msg = Utility.messageBD(myPool, "OPS_POS_TERMINALS_EXCEEDED", vars.getLanguage());
+        title = Utility.messageBD(myPool, "OPS_POS_TERMINALS_EXCEEDED_TITLE", vars.getLanguage());
+        log4j.warn("Exceeded maximum number of pos terminals");
+        goToRetry(res, vars, msg, title, msgType, action, doRedirect);
+        return;
       case NO_RESTRICTION:
         break;
       }
--- a/src/org/openbravo/base/secureApp/LoginUtils.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/src/org/openbravo/base/secureApp/LoginUtils.java	Wed Nov 25 09:01:32 2015 +0100
@@ -567,4 +567,32 @@
     return null;
 
   }
+
+  /**
+   * Returns default warehouse for a given organization
+   * 
+   * @throws ServletException
+   * 
+   */
+  public static String getDefaultWarehouse(ConnectionProvider connectionProvider, String strClient,
+      String strOrg, String strRole) throws ServletException {
+
+    String strWarehouse;
+    if (!strRole.equals("0")) {
+      // Pick the warehouse using the given organization
+      strWarehouse = DefaultOptionsData.getDefaultWarehouse(connectionProvider, strClient, "'"
+          + strOrg + "'");
+      if (strWarehouse == null || strWarehouse.isEmpty()) {
+        // If no warehouse for the default organization is available, pick using using the
+        // accessible tree
+        strWarehouse = DefaultOptionsData.getDefaultWarehouse(
+            connectionProvider,
+            strClient,
+            new OrgTree(connectionProvider, strClient).getAccessibleTree(connectionProvider,
+                strRole).toString());
+      }
+    } else
+      strWarehouse = "";
+    return strWarehouse;
+  }
 }
--- a/src/org/openbravo/common/actionhandler/RMInOutPickEditLines.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/src/org/openbravo/common/actionhandler/RMInOutPickEditLines.java	Wed Nov 25 09:01:32 2015 +0100
@@ -11,7 +11,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) 2011-2012 Openbravo SLU 
+ * All portions are Copyright (C) 2011-2015 Openbravo SLU 
  * All Rights Reserved. 
  * Contributor(s):  ______________________________________.
  ************************************************************************
@@ -26,9 +26,11 @@
 import org.codehaus.jettison.json.JSONArray;
 import org.codehaus.jettison.json.JSONException;
 import org.codehaus.jettison.json.JSONObject;
+import org.hibernate.criterion.Restrictions;
 import org.openbravo.base.provider.OBProvider;
 import org.openbravo.client.application.process.BaseProcessActionHandler;
 import org.openbravo.dal.core.OBContext;
+import org.openbravo.dal.service.OBCriteria;
 import org.openbravo.dal.service.OBDal;
 import org.openbravo.dal.service.OBDao;
 import org.openbravo.erpCommon.utility.OBMessageUtils;
@@ -97,6 +99,7 @@
       removeNonSelectedLines(idList, inOut);
       return;
     }
+
     for (long i = 0; i < selectedLines.length(); i++) {
       JSONObject selectedLine = selectedLines.getJSONObject((int) i);
       log.debug(selectedLine);
@@ -137,11 +140,24 @@
         inOutLines.add(newInOutLine);
         inOut.setMaterialMgmtShipmentInOutLineList(inOutLines);
       }
-
+      if (orderLine.isExplode()) {
+        newInOutLine.setExplode(true);
+      }
       OBDal.getInstance().save(newInOutLine);
       OBDal.getInstance().save(inOut);
       OBDal.getInstance().flush();
     }
+    for (ShipmentInOutLine inOutLine : inOut.getMaterialMgmtShipmentInOutLineList()) {
+      if (inOutLine.getSalesOrderLine().getBOMParent() != null) {
+        OBCriteria<ShipmentInOutLine> obc = OBDal.getInstance().createCriteria(
+            ShipmentInOutLine.class);
+        obc.add(Restrictions.eq(ShipmentInOutLine.PROPERTY_SALESORDERLINE, inOutLine
+            .getSalesOrderLine().getBOMParent()));
+        ShipmentInOutLine parentInOutLine = (ShipmentInOutLine) obc.uniqueResult();
+        inOutLine.setBOMParent(parentInOutLine);
+        OBDal.getInstance().save(inOutLine);
+      }
+    }
 
     removeNonSelectedLines(idList, inOut);
   }
--- a/src/org/openbravo/costing/CostingAlgorithmAdjustmentImp.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/src/org/openbravo/costing/CostingAlgorithmAdjustmentImp.java	Wed Nov 25 09:01:32 2015 +0100
@@ -52,6 +52,7 @@
 import org.openbravo.model.materialmgmt.transaction.InventoryCountLine;
 import org.openbravo.model.materialmgmt.transaction.MaterialTransaction;
 import org.openbravo.model.materialmgmt.transaction.ProductionLine;
+import org.openbravo.model.materialmgmt.transaction.ShipmentInOut;
 import org.openbravo.model.materialmgmt.transaction.ShipmentInOutLine;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -410,8 +411,10 @@
     StringBuffer where = new StringBuffer();
     where.append(" as trx");
     where.append(" join trx." + MaterialTransaction.PROPERTY_GOODSSHIPMENTLINE + " as iol");
+    where.append(" join iol." + ShipmentInOutLine.PROPERTY_SHIPMENTRECEIPT + " as io");
     where.append(" join iol." + ShipmentInOutLine.PROPERTY_SALESORDERLINE + " as ol");
     where.append(" where ol." + OrderLine.PROPERTY_GOODSSHIPMENTLINE + " = :shipment");
+    where.append(" and io." + ShipmentInOut.PROPERTY_DOCUMENTSTATUS + " <> 'VO'");
     OBQuery<MaterialTransaction> qryTrx = OBDal.getInstance().createQuery(
         MaterialTransaction.class, where.toString());
     qryTrx.setFilterOnReadableOrganization(false);
--- a/src/org/openbravo/dal/core/SessionHandler.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/src/org/openbravo/dal/core/SessionHandler.java	Wed Nov 25 09:01:32 2015 +0100
@@ -39,6 +39,7 @@
 import org.openbravo.base.util.Check;
 import org.openbravo.dal.service.OBDal;
 import org.openbravo.database.ExternalConnectionPool;
+import org.openbravo.service.db.DbUtility;
 
 /**
  * Keeps the Hibernate Session and Transaction in a ThreadLocal so that it is available throughout
@@ -272,7 +273,7 @@
       tx = null;
       err = false;
     } catch (SQLException e) {
-      log.error("Error while closing the connection", e);
+      log.error("Error while closing the connection", DbUtility.getUnderlyingSQLException(e));
     } finally {
       if (err) {
         try {
--- a/src/org/openbravo/erpCommon/ad_actionButton/CreateFrom_Invoice_data.xsql	Wed Nov 18 10:55:30 2015 +0100
+++ b/src/org/openbravo/erpCommon/ad_actionButton/CreateFrom_Invoice_data.xsql	Wed Nov 25 09:01:32 2015 +0100
@@ -618,7 +618,9 @@
       <![CDATA[
         SELECT (l.MovementQty - sum(COALESCE(CASE WHEN i.docstatus = 'CO' THEN il.qtyinvoiced ELSE 0 END, 0))) AS ID,
         l.C_UOM_ID,uom.UOMSymbol, l.M_Product_ID,Ad_Column_Identifier(to_char('M_Product'), to_char(l.m_product_id), to_char(?)) AS NAME, l.M_InOutLine_ID,l.Line,
-        l.C_OrderLine_ID, max(uom.STDPRECISION) as stdprecision, l.Description,l.quantityOrder, l.M_Product_UOM_ID,
+        l.C_OrderLine_ID, max(uom.STDPRECISION) as stdprecision, l.Description,
+		(l.quantityOrder - sum(COALESCE(CASE WHEN i.docstatus = 'CO' THEN il.quantityorder ELSE 0 END, 0))) AS quantityOrder, 
+		l.M_Product_UOM_ID,
         l.M_ATTRIBUTESETINSTANCE_ID, l.ad_org_id,
         COALESCE(l.A_Asset_ID, s.A_Asset_ID) AS A_Asset_ID, COALESCE(l.C_Project_ID, s.C_Project_ID) AS C_Project_ID, 
         COALESCE(l.C_Costcenter_ID, s.C_Costcenter_ID) AS C_Costcenter_ID,
--- a/src/org/openbravo/erpCommon/ad_forms/About.html	Wed Nov 18 10:55:30 2015 +0100
+++ b/src/org/openbravo/erpCommon/ad_forms/About.html	Wed Nov 25 09:01:32 2015 +0100
@@ -114,6 +114,9 @@
                 <tr id="paramOPSInfo">
                   <td>Web Service Access:</td><td>&nbsp;<td><td id="paraOPSWSAccess">xx</td>
                 </tr>
+                <tr id="paramPOSInfo">
+                  <td>WebPOS Terminals:</td><td>&nbsp;<td><td id="paraOPSPOSAccess">xx</td>
+                </tr>
               </table>
             </td>
           </tr>
--- a/src/org/openbravo/erpCommon/ad_forms/About.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/src/org/openbravo/erpCommon/ad_forms/About.java	Wed Nov 25 09:01:32 2015 +0100
@@ -11,7 +11,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) 2001-2010 Openbravo SLU 
+ * All portions are Copyright (C) 2001-2015 Openbravo SLU 
  * All Rights Reserved. 
  * Contributor(s):  ______________________________________.
  ************************************************************************
@@ -100,6 +100,7 @@
         xmlDocument.setParameter("paraOPSPurpose", ak.getPurpose(vars.getLanguage()));
         xmlDocument.setParameter("paraOPSType", ak.getLicenseExplanation(this, vars.getLanguage()));
         xmlDocument.setParameter("paraOPSWSAccess", ak.getWSExplanation(this, vars.getLanguage()));
+        xmlDocument.setParameter("paraOPSPOSAccess", ak.getPOSTerminalsExplanation());
         xmlDocument.setParameter("paraOBPSStatus",
             ak.getSubscriptionStatus().getStatusName(vars.getLanguage()));
       }
--- a/src/org/openbravo/erpCommon/ad_forms/About.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/src/org/openbravo/erpCommon/ad_forms/About.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -12,7 +12,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) 2001-2011 Openbravo SLU 
+ * All portions are Copyright (C) 2001-2015 Openbravo SLU 
  * All Rights Reserved. 
  * Contributor(s):  ______________________________________.
  ************************************************************************
@@ -29,6 +29,7 @@
     <PARAMETER id="paraOPSPurpose" name="paraOPSPurpose" default=""/>
     <PARAMETER id="paraOPSType" name="paraOPSType" default=""/>
     <PARAMETER id="paraOPSWSAccess" name="paraOPSWSAccess" default=""/>
+    <PARAMETER id="paraOPSPOSAccess" name="paraOPSPOSAccess" default=""/>
     <PARAMETER id="paraOBPSStatus" name="paraOBPSStatus" default=""/>
     
     <structure name="installedModules">
--- a/src/org/openbravo/erpCommon/ad_forms/InstanceManagement.html	Wed Nov 18 10:55:30 2015 +0100
+++ b/src/org/openbravo/erpCommon/ad_forms/InstanceManagement.html	Wed Nov 25 09:01:32 2015 +0100
@@ -13,7 +13,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) 2009-2012 Openbravo SLU 
+ * All portions are Copyright (C) 2009-2015 Openbravo SLU 
  * All Rights Reserved. 
  * Contributor(s):  ______________________________________.
  ************************************************************************
@@ -416,6 +416,7 @@
                 <tr>
                   <td>&nbsp;</td>
                 </tr> 
+                <div id="moduleActions"/>
                 <div id="discardGolden">
                 <div id="OPSInstance">
                 <tr>
--- a/src/org/openbravo/erpCommon/ad_forms/InstanceManagement.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/src/org/openbravo/erpCommon/ad_forms/InstanceManagement.java	Wed Nov 25 09:01:32 2015 +0100
@@ -11,7 +11,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) 2009-2013 Openbravo SLU 
+ * All portions are Copyright (C) 2009-2015 Openbravo SLU 
  * All Rights Reserved. 
  * Contributor(s):  ______________________________________.
  ************************************************************************
@@ -41,6 +41,7 @@
 import org.openbravo.erpCommon.obps.ActivationKey;
 import org.openbravo.erpCommon.obps.ActivationKey.LicenseRestriction;
 import org.openbravo.erpCommon.obps.ActiveInstanceProcess;
+import org.openbravo.erpCommon.obps.ModuleLicenseRestrictions.ActivationMsg;
 import org.openbravo.erpCommon.utility.ComboTableData;
 import org.openbravo.erpCommon.utility.LeftTabsBar;
 import org.openbravo.erpCommon.utility.NavigationBar;
@@ -322,20 +323,20 @@
     // Message
     {
       OBError myMessage = null;
-      if (activationKey.isActive() || activationKey.getErrorMessage() == null
-          || activationKey.getErrorMessage().equals("")) {
+      ActivationMsg msg = activationKey.getActivationMessage();
+      if (msg == null) {
         myMessage = vars.getMessage("InstanceManagement");
       } else {
         myMessage = new OBError();
         myMessage.setType(activationKey.getMessageType());
-        String msgTxt = Utility.parseTranslation(this, vars, vars.getLanguage(),
-            activationKey.getErrorMessage());
+        String msgTxt = Utility.parseTranslation(this, vars, vars.getLanguage(), msg.getMsgText());
 
         OBError originalMessage = vars.getMessage("InstanceManagement");
         if (originalMessage != null) {
           msgTxt = originalMessage.getMessage() + "<br/>" + msgTxt;
         }
         myMessage.setMessage(msgTxt);
+        myMessage.setType(msg.getSeverity().toString());
       }
 
       if (myMessage == null
@@ -343,7 +344,6 @@
         myMessage = new OBError();
         myMessage.setType("Warning");
         myMessage.setMessage(Utility.messageBD(this, "OffDemandPlatform", vars.getLanguage()));
-
       }
 
       vars.removeMessage("InstanceManagement");
@@ -368,6 +368,9 @@
             Utility.messageBD(this, "OPSUnlimitedUsers", vars.getLanguage()).replace("\\n", "\n"));
     }
 
+    xmlDocument.setParameter("moduleActions",
+        activationKey.getInstanceActivationExtraActionsHtml(xmlEngine));
+
     String cacheMsg = Utility.messageBD(this, "OUTDATED_FILES_CACHED", vars.getLanguage()).replace(
         "\\n", "\n");
     cacheMsg = "var cacheMsg = \"" + cacheMsg + "\"";
--- a/src/org/openbravo/erpCommon/ad_forms/InstanceManagement.xml	Wed Nov 18 10:55:30 2015 +0100
+++ b/src/org/openbravo/erpCommon/ad_forms/InstanceManagement.xml	Wed Nov 25 09:01:32 2015 +0100
@@ -12,7 +12,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) 2009-2010 Openbravo SLU 
+ * All portions are Copyright (C) 2009-2015 Openbravo SLU 
  * All Rights Reserved. 
  * Contributor(s):  ______________________________________.
  ************************************************************************
@@ -31,4 +31,5 @@
   <PARAMETER id="instanceInfo" name="instanceInfo" default=""/>
   <PARAMETER id="OPSdaysLeft" name="OPSdaysLeft" dafault=""/>
   <PARAMETER id="cacheMsg" name="cacheMsg" default=""/>
+  <PARAMETER id="moduleActions" name="moduleActions" default=""/>
 </REPORT>
--- a/src/org/openbravo/erpCommon/ad_forms/Role.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/src/org/openbravo/erpCommon/ad_forms/Role.java	Wed Nov 25 09:01:32 2015 +0100
@@ -233,7 +233,8 @@
           || limitation == LicenseRestriction.MODULE_EXPIRED
           || limitation == LicenseRestriction.NOT_MATCHED_INSTANCE
           || limitation == LicenseRestriction.HB_NOT_ACTIVE
-          || limitation == LicenseRestriction.ON_DEMAND_OFF_PLATFORM || !correctSystemStatus) {
+          || limitation == LicenseRestriction.ON_DEMAND_OFF_PLATFORM
+          || limitation == LicenseRestriction.POS_TERMINALS_EXCEEDED || !correctSystemStatus) {
         // allow only system login
         datarole = RoleComboData.selectSystem(this, vars.getUser());
       } else {
--- a/src/org/openbravo/erpCommon/obps/ActivationKey.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/src/org/openbravo/erpCommon/obps/ActivationKey.java	Wed Nov 25 09:01:32 2015 +0100
@@ -11,7 +11,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) 2009-2013 Openbravo SLU 
+ * All portions are Copyright (C) 2009-2015 Openbravo SLU 
  * All Rights Reserved. 
  * Contributor(s):  ______________________________________.
  ************************************************************************
@@ -51,6 +51,8 @@
 import java.util.zip.CRC32;
 
 import javax.crypto.Cipher;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Appender;
@@ -64,14 +66,18 @@
 import org.openbravo.base.exception.OBException;
 import org.openbravo.base.secureApp.VariablesSecureApp;
 import org.openbravo.base.session.OBPropertiesProvider;
+import org.openbravo.base.weld.WeldUtils;
 import org.openbravo.dal.core.DalContextListener;
 import org.openbravo.dal.core.OBContext;
 import org.openbravo.dal.service.OBCriteria;
 import org.openbravo.dal.service.OBDal;
 import org.openbravo.database.ConnectionProvider;
 import org.openbravo.erpCommon.obps.DisabledModules.Artifacts;
+import org.openbravo.erpCommon.obps.ModuleLicenseRestrictions.ActivationMsg;
+import org.openbravo.erpCommon.obps.ModuleLicenseRestrictions.MsgSeverity;
 import org.openbravo.erpCommon.utility.HttpsUtils;
 import org.openbravo.erpCommon.utility.OBError;
+import org.openbravo.erpCommon.utility.OBMessageUtils;
 import org.openbravo.erpCommon.utility.SystemInfo;
 import org.openbravo.erpCommon.utility.Utility;
 import org.openbravo.model.ad.access.Session;
@@ -81,6 +87,7 @@
 import org.openbravo.model.ad.ui.Tab;
 import org.openbravo.scheduling.ProcessBundle;
 import org.openbravo.service.db.DalConnectionProvider;
+import org.openbravo.xmlEngine.XmlEngine;
 
 public class ActivationKey {
   private final static String OB_PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCPwCM5RfisLvWhujHajnLEjEpLC7DOXLySuJmHBqcQ8AQ63yZjlcv3JMkHMsPqvoHF3s2ztxRcxBRLc9C2T3uXQg0PTH5IAxsV4tv05S+tNXMIajwTeYh1LCoQyeidiid7FwuhtQNQST9/FqffK1oVFBnWUfgZKLMO2ZSHoEAORwIDAQAB";
@@ -117,6 +124,8 @@
   private boolean limitNamedUsers = false;
   private boolean outOfPlatform = false;
   private Long maxUsers;
+  private Long posTerminals;
+  private Long posTerminalsWarn;
 
   private boolean notActiveYet = false;
   private boolean inconsistentInstance = false;
@@ -139,7 +148,7 @@
   private static final int REFRESH_MIN_TIME = 60;
 
   public enum LicenseRestriction {
-    NO_RESTRICTION, OPS_INSTANCE_NOT_ACTIVE, NUMBER_OF_SOFT_USERS_REACHED, NUMBER_OF_CONCURRENT_USERS_REACHED, MODULE_EXPIRED, NOT_MATCHED_INSTANCE, HB_NOT_ACTIVE, EXPIRED_GOLDEN, CONCURRENT_NAMED_USER, ON_DEMAND_OFF_PLATFORM
+    NO_RESTRICTION, OPS_INSTANCE_NOT_ACTIVE, NUMBER_OF_SOFT_USERS_REACHED, NUMBER_OF_CONCURRENT_USERS_REACHED, MODULE_EXPIRED, NOT_MATCHED_INSTANCE, HB_NOT_ACTIVE, EXPIRED_GOLDEN, CONCURRENT_NAMED_USER, ON_DEMAND_OFF_PLATFORM, POS_TERMINALS_EXCEEDED
   }
 
   public enum CommercialModuleStatus {
@@ -225,6 +234,7 @@
   /**
    * Session types that are considered for user concurrency
    */
+  @SuppressWarnings("serial")
   private static final List<String> ACTIVE_SESSION_TYPES = new ArrayList<String>() {
     {
       add("S");
@@ -232,6 +242,7 @@
       add("SUR");
     }
   };
+  public static final Long NO_LIMIT = -1L;
 
   private static ActivationKey instance = new ActivationKey();
 
@@ -502,6 +513,31 @@
       return;
     }
 
+    if (instanceProperties.containsKey("posTerminals")
+        && !StringUtils.isBlank(getProperty("posTerminals"))) {
+      try {
+        posTerminals = new Long(getProperty("posTerminals"));
+      } catch (Exception e) {
+        log.error("Couldn't read number of terminals " + getProperty("posTerminals"), e);
+        posTerminals = 0L;
+      }
+    } else {
+      // it can be old license without terminal info, or terminal being empty which stands for no
+      // terminal allowed
+      posTerminals = 0L;
+    }
+
+    if (instanceProperties.containsKey("posTerminalsWarn")
+        && !StringUtils.isBlank(getProperty("posTerminalsWarn"))) {
+      try {
+        posTerminalsWarn = new Long(getProperty("posTerminalsWarn"));
+      } catch (Exception e) {
+        log.error("Couldn't read number of terminals warn " + getProperty("posTerminalsWarn"), e);
+      }
+    } else {
+      posTerminalsWarn = null;
+    }
+
     checkDates();
   }
 
@@ -799,6 +835,47 @@
     return messageType;
   }
 
+  /** activation message to be displayed in Instance Activation window */
+  public ActivationMsg getActivationMessage() {
+    if (StringUtils.isNotEmpty(errorMessage)) {
+      // there is a core message (expiration, etc.), return it
+      return new ActivationMsg(MsgSeverity.valueOf(messageType), errorMessage);
+    }
+
+    // look for messages defined by modules
+    String customMsg = "";
+    MsgSeverity severity = MsgSeverity.ERROR;
+    for (ModuleLicenseRestrictions moduleRestriction : getModuleLicenseRestrictions()) {
+      ActivationMsg moduleMsg = moduleRestriction.getActivationMessage(this, OBContext
+          .getOBContext().getLanguage().getLanguage());
+
+      if (moduleMsg != null) {
+        customMsg += moduleMsg.getMsgText();
+        severity = moduleMsg.getSeverity();
+      }
+    }
+
+    if (StringUtils.isEmpty(customMsg)) {
+      return null;
+    }
+
+    return new ActivationMsg(severity, customMsg);
+  }
+
+  /** gets HTML to be injected in Instance Activation window with additional actions to be performed */
+  public String getInstanceActivationExtraActionsHtml(XmlEngine xmlEngine) {
+    String html = "";
+
+    for (ModuleLicenseRestrictions moduleRestriction : getModuleLicenseRestrictions()) {
+      String moduleHtml = moduleRestriction.getInstanceActivationExtraActionsHtml(xmlEngine);
+      if (moduleHtml != null) {
+        html += moduleHtml;
+      }
+    }
+
+    return html;
+  }
+
   /**
    * Deprecated, use instead {@link ActivationKey#checkOPSLimitations(String)}
    * 
@@ -881,6 +958,18 @@
       result = LicenseRestriction.ON_DEMAND_OFF_PLATFORM;
     }
 
+    if (result == LicenseRestriction.NO_RESTRICTION) {
+      // no restrictions so far, checking now if any of the installed modules adds a new restriction
+      for (ModuleLicenseRestrictions moduleRestriction : getModuleLicenseRestrictions()) {
+        result = moduleRestriction.checkRestrictions(this, currentSession);
+        if (result == null) {
+          result = LicenseRestriction.NO_RESTRICTION;
+        } else if (result != LicenseRestriction.NO_RESTRICTION) {
+          return result;
+        }
+      }
+    }
+
     return result;
   }
 
@@ -1100,6 +1189,11 @@
       sb.append(getWSExplanation(conn, lang));
       sb.append("</td></tr>");
 
+      sb.append("<tr><td>").append(Utility.messageBD(conn, "OPSPOSLimitation", lang))
+          .append("</td><td>");
+      sb.append(getPOSTerminalsExplanation());
+      sb.append("</td></tr>");
+
     } else {
       sb.append(Utility.messageBD(conn, "OPSNonActiveInstance", lang));
     }
@@ -1119,9 +1213,7 @@
     }
   }
 
-  /**
-   * Returns a message explaining WS call limitations
-   */
+  /** Returns a message explaining WS call limitations */
   public String getWSExplanation(ConnectionProvider conn, String lang) {
     if (!limitedWsAccess) {
       return Utility.messageBD(conn, "OPSWSUnlimited", lang);
@@ -1133,6 +1225,17 @@
     }
   }
 
+  /** Returns a message for POS Terminals limitations */
+  public String getPOSTerminalsExplanation() {
+    if (posTerminals == 0) {
+      return OBMessageUtils.messageBD("OPSNone");
+    } else if (posTerminals == NO_LIMIT) {
+      return OBMessageUtils.messageBD("OPSWSUnlimited");
+    } else {
+      return posTerminals.toString();
+    }
+  }
+
   public boolean hasExpirationDate() {
     return isOPSInstance() && (getProperty("enddate") != null);
   }
@@ -1314,7 +1417,9 @@
     if (hasActivationKey
         && !subscriptionConvertedProperty
         && !trial
-        && (hasExpired || checkNewWSCall(false) != WSRestriction.NO_RESTRICTION || checkOPSLimitations(null) == LicenseRestriction.NUMBER_OF_CONCURRENT_USERS_REACHED)) {
+        && (hasExpired || checkNewWSCall(false) != WSRestriction.NO_RESTRICTION
+            || checkOPSLimitations(null) == LicenseRestriction.NUMBER_OF_CONCURRENT_USERS_REACHED || !instanceProperties
+              .containsKey("posTerminals"))) {
       refreshLicense(24 * 60);
     } else {
       if (licenseType == LicenseType.ON_DEMAND && outOfPlatform) {
@@ -1552,7 +1657,8 @@
   }
 
   /**
-   * Returns a JSONObject with a message warning about near expiration or already expired instance.
+   * Returns a JSONObject with a message warning about near expiration or already expired instance
+   * to be displayed in Login page.
    * 
    */
   public JSONObject getExpirationMessage(String lang) {
@@ -1567,6 +1673,16 @@
 
       // Community or professional without expiration
       if (pendingTime == null || subscriptionActuallyConverted) {
+        // no restrictions so far, checking now if any of the installed modules adds a new
+        // restriction
+        for (ModuleLicenseRestrictions moduleRestriction : getModuleLicenseRestrictions()) {
+          ActivationMsg msg = moduleRestriction.getActivationMessage(this, lang);
+
+          if (msg != null) {
+            result.put("type", "Error"); // always error for login page (warn is shown as an alert)
+            result.put("text", msg.getMsgText());
+          }
+        }
         return result;
       }
 
@@ -1797,4 +1913,23 @@
   public boolean isOffPlatform() {
     return outOfPlatform;
   }
+
+  public Long getAllowedPosTerminals() {
+    // posTerminals not set if community: do not apply restriction
+    return posTerminals == null ? NO_LIMIT : posTerminals;
+  }
+
+  public Long getPosTerminalsWarn() {
+    return posTerminalsWarn;
+  }
+
+  private List<ModuleLicenseRestrictions> getModuleLicenseRestrictions() {
+    List<ModuleLicenseRestrictions> result = new ArrayList<ModuleLicenseRestrictions>();
+    BeanManager bm = WeldUtils.getStaticInstanceBeanManager();
+    for (Bean<?> restrictionBean : bm.getBeans(ModuleLicenseRestrictions.class)) {
+      result.add((ModuleLicenseRestrictions) bm.getReference(restrictionBean,
+          ModuleLicenseRestrictions.class, bm.createCreationalContext(restrictionBean)));
+    }
+    return result;
+  }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/openbravo/erpCommon/obps/ModuleLicenseRestrictions.java	Wed Nov 25 09:01:32 2015 +0100
@@ -0,0 +1,95 @@
+/*
+ *************************************************************************
+ * The contents of this file are subject to the Openbravo  Public  License
+ * Version  1.1  (the  "License"),  being   the  Mozilla   Public  License
+ * Version 1.1  with a permitted attribution clause; you may not  use this
+ * file except in compliance with the License. You  may  obtain  a copy of
+ * the License at http://www.openbravo.com/legal/license.html 
+ * Software distributed under the License  is  distributed  on  an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ * License for the specific  language  governing  rights  and  limitations
+ * under the License. 
+ * The Original Code is Openbravo ERP. 
+ * The Initial Developer of the Original Code is Openbravo SLU 
+ * All portions are Copyright (C) 2015 Openbravo SLU 
+ * All Rights Reserved. 
+ * Contributor(s):  ______________________________________.
+ ************************************************************************
+ */
+package org.openbravo.erpCommon.obps;
+
+import javax.enterprise.context.ApplicationScoped;
+
+import org.openbravo.erpCommon.obps.ActivationKey.LicenseRestriction;
+import org.openbravo.xmlEngine.XmlEngine;
+
+/**
+ * Modules can check for License restrictions. To do so this interface should be implemented.
+ * 
+ * @author alostale
+ *
+ */
+@ApplicationScoped
+public interface ModuleLicenseRestrictions {
+  /**
+   * Returns LicenseRestrictions applicable to this instance, or null or
+   * LicenseRestriction.NO_RESTRICTION in case of no restriction.
+   */
+  public LicenseRestriction checkRestrictions(ActivationKey activationKey, String currentSession);
+
+  /**
+   * Returns a message related to activation key or null none required. It will be shown in:
+   * <ul>
+   * <li>Login Page
+   * <li>Instance Activation window
+   * </ul>
+   */
+  public ActivationMsg getActivationMessage(ActivationKey activationKey, String lang);
+
+  /** Provides the HTML to be injected in Instance Activation window to perform additional actions */
+  public String getInstanceActivationExtraActionsHtml(XmlEngine xmlEngine);
+
+  public enum MsgSeverity {
+    WARN("Warning"), ERROR("Error");
+
+    private String type;
+
+    MsgSeverity(String type) {
+      this.type = type;
+    }
+
+    MsgSeverity forType(String typeToCheck) {
+      for (MsgSeverity severity : MsgSeverity.values()) {
+        if (typeToCheck.equals(severity.toString())) {
+          return severity;
+        }
+      }
+      // fallback, if not found return error
+      return ERROR;
+    }
+
+    @Override
+    public String toString() {
+      return type;
+    }
+  }
+
+  /** holder for activation key messages */
+  public class ActivationMsg {
+    private MsgSeverity severity;
+    private String msgText;
+
+    public ActivationMsg(MsgSeverity severity, String msgText) {
+      this.severity = severity;
+      this.msgText = msgText;
+    }
+
+    public MsgSeverity getSeverity() {
+      return severity;
+    }
+
+    public String getMsgText() {
+      return msgText;
+    }
+  }
+}
--- a/src/org/openbravo/erpCommon/security/Login.html	Wed Nov 18 10:55:30 2015 +0100
+++ b/src/org/openbravo/erpCommon/security/Login.html	Wed Nov 25 09:01:32 2015 +0100
@@ -406,7 +406,7 @@
     }
     catch (e) { }
 
-    if ((!revisionControl('27851')) || (isOpsInstance() != isOpsInstanceCached())) {
+    if ((!revisionControl('28036')) || (isOpsInstance() != isOpsInstanceCached())) {
       maskLoginWindow(cacheMsg);
       setLoginMessage('Warning', '', cacheMsg);
     }
--- a/src/org/openbravo/erpCommon/security/Login_F1.html	Wed Nov 18 10:55:30 2015 +0100
+++ b/src/org/openbravo/erpCommon/security/Login_F1.html	Wed Nov 25 09:01:32 2015 +0100
@@ -126,7 +126,7 @@
       clearForm();
     } catch (e) {}
     setWindowElementFocus('firstElement');
-    if ((!revisionControl('27851')) || (isOpsInstance() != isOpsInstanceCached())) {
+    if ((!revisionControl('28036')) || (isOpsInstance() != isOpsInstanceCached())) {
       alert(cacheMsg);
     }
 
--- a/src/org/openbravo/service/db/DataImportService.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/src/org/openbravo/service/db/DataImportService.java	Wed Nov 25 09:01:32 2015 +0100
@@ -456,14 +456,12 @@
       boolean isBatchUpdateException = false;
       // We need to capture nested exception of BatchUpdate exception.
       Throwable cause = t.getCause();
-      if (cause instanceof BatchUpdateException) {
-        BatchUpdateException batchUpdateException = (BatchUpdateException) cause;
-        if (batchUpdateException.getNextException() != null) {
-          String errorMessage = batchUpdateException.getNextException().getMessage();
-          String messageKey = errorMessage.substring("ERROR:".length()).trim();
-          isBatchUpdateException = true;
-          ir.setErrorMessages("isBatchUpdateException:" + messageKey);
-        }
+      Throwable foundCause = DbUtility.getUnderlyingSQLException(t);
+      if (cause instanceof BatchUpdateException && t != foundCause) {
+        String errorMessage = foundCause.getMessage();
+        String messageKey = errorMessage.substring("ERROR:".length()).trim();
+        isBatchUpdateException = true;
+        ir.setErrorMessages("isBatchUpdateException:" + messageKey);
       }
       OBDal.getInstance().rollbackAndClose();
       rolledBack = true;
--- a/src/org/openbravo/service/db/DbUtility.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/src/org/openbravo/service/db/DbUtility.java	Wed Nov 25 09:01:32 2015 +0100
@@ -49,6 +49,10 @@
    */
   public static Throwable getUnderlyingSQLException(Throwable throwable) {
 
+    if (throwable instanceof BatchUpdateException
+        && ((BatchUpdateException) throwable).getNextException() != null) {
+      return ((BatchUpdateException) throwable).getNextException();
+    }
     if (throwable.getCause() instanceof BatchUpdateException
         && ((BatchUpdateException) throwable.getCause()).getNextException() != null) {
       final BatchUpdateException bue = (BatchUpdateException) throwable.getCause();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/openbravo/service/importprocess/ImportEntryPostProcessor.java	Wed Nov 25 09:01:32 2015 +0100
@@ -0,0 +1,33 @@
+/*
+ *************************************************************************
+ * The contents of this file are subject to the Openbravo  Public  License
+ * Version  1.1  (the  "License"),  being   the  Mozilla   Public  License
+ * Version 1.1  with a permitted attribution clause; you may not  use this
+ * file except in compliance with the License. You  may  obtain  a copy of
+ * the License at http://www.openbravo.com/legal/license.html 
+ * Software distributed under the License  is  distributed  on  an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ * License for the specific  language  governing  rights  and  limitations
+ * under the License. 
+ * The Original Code is Openbravo ERP. 
+ * The Initial Developer of the Original Code is Openbravo SLU 
+ * All portions are Copyright (C) 2015 Openbravo SLU
+ * All Rights Reserved.
+ * Contributor(s):  ______________________________________.
+ ************************************************************************
+ */
+package org.openbravo.service.importprocess;
+
+import org.openbravo.service.importprocess.ImportEntryProcessor.ImportEntryProcessRunnable;
+
+/**
+ * Abstract/default class used to inject logic to an Import Entry when its process is finished and
+ * the commit is done.
+ * 
+ * Is called from the {@link ImportEntryProcessRunnable#doRunCycle()} method.
+ * 
+ */
+public abstract class ImportEntryPostProcessor {
+
+  public abstract void afterProcessing(ImportEntry importEntry);
+}
--- a/src/org/openbravo/service/importprocess/ImportEntryProcessor.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/src/org/openbravo/service/importprocess/ImportEntryProcessor.java	Wed Nov 25 09:01:32 2015 +0100
@@ -29,6 +29,8 @@
 import java.util.concurrent.ExecutorService;
 
 import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.Instance;
 import javax.inject.Inject;
 
 import org.apache.log4j.Logger;
@@ -40,6 +42,7 @@
 import org.openbravo.dal.core.TriggerHandler;
 import org.openbravo.dal.service.OBDal;
 import org.openbravo.model.common.enterprise.Organization;
+import org.openbravo.service.importprocess.ImportEntryManager.ImportEntryProcessorSelector;
 
 /**
  * The {@link ImportEntryProcessor} is responsible for importing/processing {@link ImportEntry}
@@ -270,6 +273,10 @@
     // when the garbagecollector runs
     private Map<String, OBContext> cachedOBContexts = new HashMap<String, OBContext>();
 
+    @Inject
+    @Any
+    private Instance<ImportEntryPostProcessor> importEntryPostProcessors;
+
     public ImportEntryProcessRunnable() {
       logger = Logger.getLogger(this.getClass());
     }
@@ -356,6 +363,12 @@
 
           processEntry(localImportEntry);
 
+          // Execute post process hooks.
+          for (ImportEntryPostProcessor importEntryPostProcessor : importEntryPostProcessors
+              .select(new ImportEntryProcessorSelector(typeOfData))) {
+            importEntryPostProcessor.afterProcessing(localImportEntry);
+          }
+
           if (logger.isDebugEnabled()) {
             logger.debug("Finished Processing entry " + localImportEntry.getIdentifier() + " "
                 + typeOfData);
--- a/src/org/openbravo/service/importprocess/ImportProcessUtils.java	Wed Nov 18 10:55:30 2015 +0100
+++ b/src/org/openbravo/service/importprocess/ImportProcessUtils.java	Wed Nov 25 09:01:32 2015 +0100
@@ -20,7 +20,6 @@
 
 import java.io.PrintWriter;
 import java.io.StringWriter;
-import java.sql.BatchUpdateException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
@@ -34,6 +33,7 @@
 import org.openbravo.base.session.OBPropertiesProvider;
 import org.openbravo.dal.service.OBDal;
 import org.openbravo.model.ad.domain.Reference;
+import org.openbravo.service.db.DbUtility;
 
 /**
  * Utility methods used in the import process.
@@ -105,10 +105,7 @@
   }
 
   public static void logError(Logger log, Throwable t) {
-    Throwable toReport = t;
-    if (t.getCause() instanceof BatchUpdateException) {
-      toReport = ((BatchUpdateException) t.getCause()).getNextException();
-    }
+    Throwable toReport = DbUtility.getUnderlyingSQLException(t);
     log.error(toReport.getMessage(), toReport);
   }
 
@@ -118,13 +115,10 @@
     PrintWriter pw = new PrintWriter(sb);
 
     e.printStackTrace(pw);
-
-    if (e.getCause() instanceof BatchUpdateException) {
-      final BatchUpdateException batchException = (BatchUpdateException) e.getCause();
-      if (batchException.getNextException() != null) {
-        pw.write("\n >>>> Next Exception:\n");
-        batchException.getNextException().printStackTrace(pw);
-      }
+    Throwable foundCause = DbUtility.getUnderlyingSQLException(e);
+    if (e != foundCause) {
+      pw.write("\n >>>> Next Exception:\n");
+      foundCause.printStackTrace(pw);
     }
 
     return sb.toString();
--- a/web/js/utils.js	Wed Nov 18 10:55:30 2015 +0100
+++ b/web/js/utils.js	Wed Nov 25 09:01:32 2015 +0100
@@ -26,7 +26,7 @@
  * Code that will be executed once the file is parsed
 */
 function utilsJSDirectExecution() {
-  if (navigator.userAgent.toUpperCase().indexOf("MSIE") !== -1 && getBrowserInfo('documentMode') >= 9 && parseInt(getBrowserInfo('majorVersion'), 10) >= 9) {
+  if ((navigator.userAgent.toUpperCase().indexOf("MSIE") !== -1 || navigator.userAgent.toUpperCase().indexOf("TRIDENT") !== -1) && getBrowserInfo('documentMode') >= 9 && parseInt(getBrowserInfo('majorVersion'), 10) >= 9) {
     isIE9Strict = true;
   }
   if (navigator.userAgent.toUpperCase().indexOf("EDGE") !== -1) {
@@ -105,7 +105,7 @@
 * Return a number that would be checked at the Login screen to know if the file is cached with the correct version
 */
 function getCurrentRevision() {
-  var number = '27851';
+  var number = '28036';
   return number;
 }