Attached Files | saftpt.diff [^] (9,350 bytes) 2021-11-22 11:43 [Show Content] [Hide Content]diff --git a/src-db/database/sourcedata/AD_REF_LIST.xml b/src-db/database/sourcedata/AD_REF_LIST.xml
index 381861c1bd2397b081cfa1f773e9483d26e00c9f..888d66a0af2e00b18cf2a0b8d199ad4d33b55473 100644
--- a/src-db/database/sourcedata/AD_REF_LIST.xml
+++ b/src-db/database/sourcedata/AD_REF_LIST.xml
@@ -47,6 +47,17 @@
<!--0679356FA2C645C894203D274F82F5E1--> <AD_MODULE_ID><![CDATA[AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA]]></AD_MODULE_ID>
<!--0679356FA2C645C894203D274F82F5E1--></AD_REF_LIST>
+<!--0CE0D13E80394E5B9272E4A5A539F942--><AD_REF_LIST>
+<!--0CE0D13E80394E5B9272E4A5A539F942--> <AD_REF_LIST_ID><![CDATA[0CE0D13E80394E5B9272E4A5A539F942]]></AD_REF_LIST_ID>
+<!--0CE0D13E80394E5B9272E4A5A539F942--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--0CE0D13E80394E5B9272E4A5A539F942--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--0CE0D13E80394E5B9272E4A5A539F942--> <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--0CE0D13E80394E5B9272E4A5A539F942--> <VALUE><![CDATA[SAFT_RootOrgDuplicatedNIF]]></VALUE>
+<!--0CE0D13E80394E5B9272E4A5A539F942--> <NAME><![CDATA[Root organization to verify duplicated NIF]]></NAME>
+<!--0CE0D13E80394E5B9272E4A5A539F942--> <AD_REFERENCE_ID><![CDATA[A26BA480E2014707B47257024C3CBFF7]]></AD_REFERENCE_ID>
+<!--0CE0D13E80394E5B9272E4A5A539F942--> <AD_MODULE_ID><![CDATA[AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA]]></AD_MODULE_ID>
+<!--0CE0D13E80394E5B9272E4A5A539F942--></AD_REF_LIST>
+
<!--1BFDDEEC636541CDB5AE5098421C3B13--><AD_REF_LIST>
<!--1BFDDEEC636541CDB5AE5098421C3B13--> <AD_REF_LIST_ID><![CDATA[1BFDDEEC636541CDB5AE5098421C3B13]]></AD_REF_LIST_ID>
<!--1BFDDEEC636541CDB5AE5098421C3B13--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff --git a/src/com/practicsbs/saftpt/SaftUtility.java b/src/com/practicsbs/saftpt/SaftUtility.java
index 3d2d05955f757bd1961145d537357c3f841ee7c9..c76068ab687ca150aff41398677fd936e2d28945 100644
--- a/src/com/practicsbs/saftpt/SaftUtility.java
+++ b/src/com/practicsbs/saftpt/SaftUtility.java
@@ -25,11 +25,14 @@ import org.openbravo.dal.security.OrganizationStructureProvider;
import org.openbravo.dal.service.OBCriteria;
import org.openbravo.dal.service.OBDal;
import org.openbravo.database.ConnectionProvider;
+import org.openbravo.erpCommon.businessUtility.Preferences;
import org.openbravo.erpCommon.utility.OBError;
import org.openbravo.erpCommon.utility.OBMessageUtils;
+import org.openbravo.erpCommon.utility.PropertyException;
import org.openbravo.erpCommon.utility.Utility;
import org.openbravo.model.ad.system.Client;
import org.openbravo.model.ad.utility.Sequence;
+import org.openbravo.model.common.businesspartner.BusinessPartner;
import org.openbravo.model.common.enterprise.DocumentType;
import org.openbravo.model.common.enterprise.Organization;
import org.openbravo.model.common.invoice.Invoice;
@@ -45,6 +48,8 @@ public class SaftUtility {
private static Logger logger = Logger.getLogger(SaftUtility.class);
+ private static final String ROOTORGDUPLICATEDNIF_PREFERENCE = "SAFT_RootOrgDuplicatedNIF";
+
private static final String NIF_FORMAT = "([123568]\\d{1}|45|7[0124579]|9[0189])(\\d{7})";
public static final String SUCCESS = "Success";
public static final String ERROR = "Error";
@@ -463,6 +468,64 @@ public class SaftUtility {
}
}
+ /**
+ * Check if the tax id value already exists in a given set of Organizations from the result.
+ *
+ * @param taxId
+ * The new Tax ID to check.
+ * @param businessPartnerId
+ * Id of the current business partner where the Tax ID is going to be set.
+ * @param rootOrg
+ * Set of organization where it is necessary to check for duplicated Tax ID's.
+ *
+ *
+ * @return If the Tax ID already exists or not.
+ */
+ public static boolean isNifDuplicated(String taxId, String businessPartnerId, String rootOrgId) {
+
+ Set<String> orgTree = OBContext.getOBContext()
+ .getOrganizationStructureProvider()
+ .getChildTree(rootOrgId, true);
+
+ String contextOrgId = OBContext.getOBContext().getCurrentOrganization().getId();
+
+ if (!orgTree.contains(contextOrgId)) {
+ return false;
+ }
+
+ if (SaftUtility.isEmpty(taxId) || SaftUtility.isGenericNif(taxId) || taxId == null) {
+ return false;
+ }
+
+ // BusinessPartner with the same Tax ID:
+ OBCriteria<BusinessPartner> bpCriteria = OBDal.getInstance()
+ .createCriteria(BusinessPartner.class);
+ bpCriteria.setFilterOnReadableOrganization(false);
+ bpCriteria.add(Restrictions.eq(BusinessPartner.PROPERTY_TAXID, taxId).ignoreCase());
+ bpCriteria.add(Restrictions.ne(BusinessPartner.PROPERTY_ID, businessPartnerId));
+ bpCriteria.add(Restrictions.in(BusinessPartner.PROPERTY_ORGANIZATION + ".id",
+ (Object[]) orgTree.toArray()));
+
+ if (bpCriteria.count() > 0) {
+ return true;
+ }
+
+ return false;
+ }
+
+ public static String isPreferenceRootOrgDuplicatedNIF() {
+ String rootOrganizationID = null;
+ try {
+ rootOrganizationID = Preferences.getPreferenceValue(ROOTORGDUPLICATEDNIF_PREFERENCE, true,
+ OBContext.getOBContext().getCurrentClient(),
+ OBContext.getOBContext().getCurrentOrganization(), OBContext.getOBContext().getUser(),
+ OBContext.getOBContext().getRole(), null);
+ } catch (PropertyException pe) {
+ // Pref not defined
+ }
+ return rootOrganizationID;
+ }
+
public static JSONObject createSuccessProcessMessage(String message, boolean retryExecution)
throws JSONException {
return createPickAndExecuteMessage(message, SaftUtility.getMessageFromBD("OBUIAPP_Success"),
diff --git a/src/com/practicsbs/saftpt/handler/SaftBPartnerFieldsHandler.java b/src/com/practicsbs/saftpt/handler/SaftBPartnerFieldsHandler.java
index ebc8a008f622b1c9b5e80435ecd92c520dcaec28..1d336c2d63abe28d43c97907dd81c99bd0bd2145 100644
--- a/src/com/practicsbs/saftpt/handler/SaftBPartnerFieldsHandler.java
+++ b/src/com/practicsbs/saftpt/handler/SaftBPartnerFieldsHandler.java
@@ -2,16 +2,15 @@ package com.practicsbs.saftpt.handler;
import javax.enterprise.event.Observes;
-import org.hibernate.criterion.Restrictions;
import org.openbravo.base.exception.OBException;
import org.openbravo.base.model.Entity;
import org.openbravo.base.model.ModelProvider;
import org.openbravo.base.model.Property;
import org.openbravo.client.kernel.event.EntityNewEvent;
import org.openbravo.client.kernel.event.EntityUpdateEvent;
-import org.openbravo.dal.service.OBCriteria;
import org.openbravo.dal.service.OBDal;
import org.openbravo.model.common.businesspartner.BusinessPartner;
+import org.openbravo.model.common.enterprise.Organization;
import com.practicsbs.saftpt.SaftUtility;
import com.practicsbs.saftpt.data.Utils;
@@ -31,9 +30,13 @@ public class SaftBPartnerFieldsHandler extends SaftFieldsHandler {
}
BusinessPartner bPartner = (BusinessPartner) event.getTargetInstance();
- // NIF Duplicated:
- if (isNifDuplicated(bPartner)) {
- throw new OBException(SaftUtility.getMessageFromBD("SAFT_DuplicatedNIF"));
+ String rootOrgDuplicatedNif = SaftUtility.isPreferenceRootOrgDuplicatedNIF();
+ if (rootOrgDuplicatedNif != null) {
+ Organization rootOrg = OBDal.getInstance().get(Organization.class, rootOrgDuplicatedNif);
+ // NIF Duplicated:
+ if (SaftUtility.isNifDuplicated(bPartner.getTaxID(), bPartner.getId(), rootOrg.getId())) {
+ throw new OBException(SaftUtility.getMessageFromBD("SAFT_DuplicatedNIF"));
+ }
}
// Portuguese NIF Valid:
@@ -49,9 +52,14 @@ public class SaftBPartnerFieldsHandler extends SaftFieldsHandler {
BusinessPartner bPartner = (BusinessPartner) event.getTargetInstance();
boolean hasNIFChanged = hasNIFChanged(bPartner, event);
- // NIF Duplicated:
- if (hasNIFChanged && isNifDuplicated(bPartner)) {
- throw new OBException(SaftUtility.getMessageFromBD("SAFT_DuplicatedNIF"));
+ String rootOrgDuplicatedNif = SaftUtility.isPreferenceRootOrgDuplicatedNIF();
+ if (rootOrgDuplicatedNif != null) {
+ Organization rootOrg = OBDal.getInstance().get(Organization.class, rootOrgDuplicatedNif);
+ // NIF Duplicated:
+ if (hasNIFChanged
+ && SaftUtility.isNifDuplicated(bPartner.getTaxID(), bPartner.getId(), rootOrg.getId())) {
+ throw new OBException(SaftUtility.getMessageFromBD("SAFT_DuplicatedNIF"));
+ }
}
// Portuguese NIF Valid:
@@ -135,24 +143,4 @@ public class SaftBPartnerFieldsHandler extends SaftFieldsHandler {
return true;
}
- private boolean isNifDuplicated(BusinessPartner bPartner) {
- String taxId = bPartner.getTaxID();
-
- if (SaftUtility.isEmpty(taxId) || SaftUtility.isGenericNif(taxId)) {
- return false;
- }
-
- // BusinessPartner with the same Tax ID:
- OBCriteria<BusinessPartner> bpCriteria = OBDal.getInstance()
- .createCriteria(BusinessPartner.class);
- bpCriteria.add(Restrictions.eq(BusinessPartner.PROPERTY_TAXID, bPartner.getTaxID()));
- bpCriteria.add(Restrictions.ne(BusinessPartner.PROPERTY_ID, bPartner.getId()));
-
- if (bpCriteria.count() > 0) {
- return true;
- }
-
- return false;
- }
-
}
saftpt.retail.diff [^] (5,645 bytes) 2021-11-22 11:43 [Show Content] [Hide Content]diff --git a/src-db/database/sourcedata/AD_MESSAGE.xml b/src-db/database/sourcedata/AD_MESSAGE.xml
index b894398d932a598bc4489ab24af236355f405c9a..16bf3af4d1dc244fb525e9fed66682bba61b91ad 100644
--- a/src-db/database/sourcedata/AD_MESSAGE.xml
+++ b/src-db/database/sourcedata/AD_MESSAGE.xml
@@ -481,6 +481,18 @@
<!--AC5735FC4B1D4DC0818B4AC2B2981733--> <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
<!--AC5735FC4B1D4DC0818B4AC2B2981733--></AD_MESSAGE>
+<!--B257BAB9053043228C7362806BFB69E9--><AD_MESSAGE>
+<!--B257BAB9053043228C7362806BFB69E9--> <AD_MESSAGE_ID><![CDATA[B257BAB9053043228C7362806BFB69E9]]></AD_MESSAGE_ID>
+<!--B257BAB9053043228C7362806BFB69E9--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--B257BAB9053043228C7362806BFB69E9--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--B257BAB9053043228C7362806BFB69E9--> <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--B257BAB9053043228C7362806BFB69E9--> <VALUE><![CDATA[SAFTR_DuplicatedTaxId]]></VALUE>
+<!--B257BAB9053043228C7362806BFB69E9--> <MSGTEXT><![CDATA[Duplicated Tax ID]]></MSGTEXT>
+<!--B257BAB9053043228C7362806BFB69E9--> <MSGTYPE><![CDATA[I]]></MSGTYPE>
+<!--B257BAB9053043228C7362806BFB69E9--> <AD_MODULE_ID><![CDATA[8257C8776A0A4FB6A9284E3D3B8B6B26]]></AD_MODULE_ID>
+<!--B257BAB9053043228C7362806BFB69E9--> <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
+<!--B257BAB9053043228C7362806BFB69E9--></AD_MESSAGE>
+
<!--B5221C8EF5704B8B8AC39058BAB99074--><AD_MESSAGE>
<!--B5221C8EF5704B8B8AC39058BAB99074--> <AD_MESSAGE_ID><![CDATA[B5221C8EF5704B8B8AC39058BAB99074]]></AD_MESSAGE_ID>
<!--B5221C8EF5704B8B8AC39058BAB99074--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff --git a/src-db/database/sourcedata/OBMOBC_SERVICES.xml b/src-db/database/sourcedata/OBMOBC_SERVICES.xml
index 7d94df5875108846d2015880b9af9ba034974377..f54eecd32fc752c31e3eabf37167d72cb7cc2a43 100644
--- a/src-db/database/sourcedata/OBMOBC_SERVICES.xml
+++ b/src-db/database/sourcedata/OBMOBC_SERVICES.xml
@@ -34,4 +34,17 @@
<!--750D2264212749769E23921F9955652F--> <SERVER_RUNTIME><![CDATA[OBSTSYN_ON_CENTRAL]]></SERVER_RUNTIME>
<!--750D2264212749769E23921F9955652F--></OBMOBC_SERVICES>
+<!--CAC1601327F04DF2A97872AB6D370282--><OBMOBC_SERVICES>
+<!--CAC1601327F04DF2A97872AB6D370282--> <OBMOBC_SERVICES_ID><![CDATA[CAC1601327F04DF2A97872AB6D370282]]></OBMOBC_SERVICES_ID>
+<!--CAC1601327F04DF2A97872AB6D370282--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--CAC1601327F04DF2A97872AB6D370282--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--CAC1601327F04DF2A97872AB6D370282--> <AD_MODULE_ID><![CDATA[8257C8776A0A4FB6A9284E3D3B8B6B26]]></AD_MODULE_ID>
+<!--CAC1601327F04DF2A97872AB6D370282--> <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--CAC1601327F04DF2A97872AB6D370282--> <SERVICE><![CDATA[com.practicsbs.saftpt.retail.service.CheckDuplicatedFiscalDocument]]></SERVICE>
+<!--CAC1601327F04DF2A97872AB6D370282--> <DESCRIPTION><![CDATA[Chek duplicated tax id service]]></DESCRIPTION>
+<!--CAC1601327F04DF2A97872AB6D370282--> <ROUTINGTYPE><![CDATA[Failover]]></ROUTINGTYPE>
+<!--CAC1601327F04DF2A97872AB6D370282--> <DEFAULTTIMEOUT><![CDATA[15]]></DEFAULTTIMEOUT>
+<!--CAC1601327F04DF2A97872AB6D370282--> <SERVER_RUNTIME><![CDATA[OBSTSYN_ON_CENTRAL]]></SERVER_RUNTIME>
+<!--CAC1601327F04DF2A97872AB6D370282--></OBMOBC_SERVICES>
+
</data>
diff --git a/src/com/practicsbs/saftpt/retail/service/CheckDuplicatedFiscalDocument.java b/src/com/practicsbs/saftpt/retail/service/CheckDuplicatedFiscalDocument.java
new file mode 100644
index 0000000000000000000000000000000000000000..eb34294e75daaab05065c5862d380510b2edc9ea
--- /dev/null
+++ b/src/com/practicsbs/saftpt/retail/service/CheckDuplicatedFiscalDocument.java
@@ -0,0 +1,57 @@
+package com.practicsbs.saftpt.retail.service;
+
+import javax.servlet.ServletException;
+
+import org.apache.log4j.Logger;
+import org.codehaus.jettison.json.JSONException;
+import org.codehaus.jettison.json.JSONObject;
+import org.openbravo.dal.core.OBContext;
+import org.openbravo.dal.service.OBDal;
+import org.openbravo.mobile.core.process.JSONProcessSimple;
+import org.openbravo.model.common.enterprise.Organization;
+
+import com.practicsbs.saftpt.SaftUtility;
+
+public class CheckDuplicatedFiscalDocument extends JSONProcessSimple {
+ private static Logger logger = Logger.getLogger(CheckDuplicatedFiscalDocument.class);
+
+ @Override
+ public JSONObject exec(JSONObject jsonsent) throws JSONException, ServletException {
+ final JSONObject data = new JSONObject();
+ final JSONObject result = new JSONObject();
+
+ OBContext.setAdminMode(false);
+ try {
+ String taxId = jsonsent.optString("taxId");
+ String businessPartnerId = jsonsent.optString("businessPartnerId");
+
+ String rootOrgDuplicatedNif = SaftUtility.isPreferenceRootOrgDuplicatedNIF();
+ if (rootOrgDuplicatedNif != null) {
+ Organization rootOrg = OBDal.getInstance().get(Organization.class, rootOrgDuplicatedNif);
+
+ if (rootOrg != null) {
+ boolean duplicated = SaftUtility.isNifDuplicated(taxId, businessPartnerId,
+ rootOrg.getId());
+
+ data.put("status", 0);
+ result.put("duplicated", duplicated);
+ data.put("data", result);
+ return data;
+ }
+ }
+ data.put("status", 0);
+ result.put("duplicated", false);
+ data.put("data", result);
+ } catch (Exception e) {
+ logger.error(e.getMessage(), e);
+ result.put("message", e.getMessage());
+ data.put("status", 0);
+ data.put("error", true);
+ data.put("data", result);
+ } finally {
+ OBContext.restorePreviousMode();
+ }
+ return data;
+ }
+
+}
|