Project:
| View Issue Details[ Jump to Notes ] | [ Issue History ] [ Print ] | |||||||||||
| ID | ||||||||||||
| 0020294 | ||||||||||||
| Type | Category | Severity | Reproducibility | Date Submitted | Last Update | |||||||
| defect | [Openbravo ERP] 09. Financial management | major | always | 2012-04-17 20:45 | 2015-05-13 17:08 | |||||||
| Reporter | vmromanos | View Status | public | |||||||||
| Assigned To | Triage Omni OMS | |||||||||||
| Priority | normal | Resolution | open | Fixed in Version | ||||||||
| Status | scheduled | Fix in branch | pi | Fixed in SCM revision | ||||||||
| Projection | none | ETA | none | Target Version | ||||||||
| OS | Linux 32 bit | Database | PostgreSQL | Java version | 1.6.0_12 | |||||||
| OS Version | Debian 5.0 | Database version | 8.3.8 | Ant version | 1.7.0 | |||||||
| Product Version | SCM revision | |||||||||||
| Merge Request Status | ||||||||||||
| Review Assigned To | ||||||||||||
| OBNetwork customer | No | |||||||||||
| Web browser | ||||||||||||
| Modules | Core | |||||||||||
| Support ticket | ||||||||||||
| Regression level | ||||||||||||
| Regression date | ||||||||||||
| Regression introduced in release | ||||||||||||
| Regression introduced by commit | ||||||||||||
| Triggers an Emergency Pack | No | |||||||||||
| Summary | 0020294: Updating Organization in Accounting Schema window | |||||||||||
| Description | When updating the Organization in the header of the Accounting Schema window, this change is not propagated to the window tabs creating wrong data in the database. Example: 1. Run an Initial Org setup. Create org A with accounting 2. Run an Initial Org setup. Create org B with accounting 3. Go to Accounting Schema window. 4. Select A acct. schema and change its organization to B 5. See records in Accounting Schema Tables tab belong to A. (you should query the database, or display the organization field for this tab in the Application Dictionary) | |||||||||||
| Steps To Reproduce | 1. Run an Initial Org setup. Create org A with accounting 2. Run an Initial Org setup. Create org B with accounting 3. Go to Accounting Schema window. 4. Select A acct. schema and change its organization to B 5. See records in Accounting Schema Tables tab belong to A. (you should query the database, or display the organization field for this tab in the Application Dictionary) | |||||||||||
| Proposed Solution | Two possible solutions to be discussed: 1. Don't allow to modify organization field in the header 2. Propagate the change to the rest of the tabs in that window. Check whether this acct. schema is already use in the Org. Schema tab (Organization window) and this change makes sense for that configuration | |||||||||||
| Tags | MIR-Reviewed | |||||||||||
| Attached Files | # HG changeset patch
# User Naiara Martinez <naiara.martinez@openbravo.com>
# Date 1337787154 -7200
# Node ID 3a3cc545e9edad510020226035f69c5fea45eb5b
# Parent 9715e09221737aa448431bcd7c8d73f84697019c
fixed bug 20294 Not allow updating org in Accounting Schema.Buildvalidation
diff --git a/referencedata/sampledata/QA_Testing.xml b/referencedata/sampledata/QA_Testing.xml
--- a/referencedata/sampledata/QA_Testing.xml
+++ b/referencedata/sampledata/QA_Testing.xml
@@ -226305,7 +226305,7 @@
<accountingSchema id="9A68A0F8D72D4580B3EC3CAA00A5E1F0"/>
<table id="D4C23A17190649E7B78F55A05AF3438C"/>
<client id="4028E6C72959682B01295A070852010D"/>
- <organization id="0"/>
+ <organization id="43D590B4814049C6B85C6545E8264E37"/>
<active>true</active>
<createfactTemplate xsi:nil="true"/>
<sQLDescription xsi:nil="true"/>
@@ -226415,7 +226415,7 @@
<accountingSchema id="432EAC71E1B8451E97C7F54718C4A06B"/>
<table id="D4C23A17190649E7B78F55A05AF3438C"/>
<client id="4028E6C72959682B01295A070852010D"/>
- <organization id="0"/>
+ <organization id="5EFF95EB540740A3B10510D9814EFAD5"/>
<active>true</active>
<createfactTemplate xsi:nil="true"/>
<sQLDescription xsi:nil="true"/>
diff --git a/src-db/database/sourcedata/AD_COLUMN.xml b/src-db/database/sourcedata/AD_COLUMN.xml
--- a/src-db/database/sourcedata/AD_COLUMN.xml
+++ b/src-db/database/sourcedata/AD_COLUMN.xml
@@ -34632,7 +34632,7 @@
<!--2465--> <ISKEY><![CDATA[N]]></ISKEY>
<!--2465--> <ISPARENT><![CDATA[N]]></ISPARENT>
<!--2465--> <ISMANDATORY><![CDATA[Y]]></ISMANDATORY>
-<!--2465--> <ISUPDATEABLE><![CDATA[Y]]></ISUPDATEABLE>
+<!--2465--> <ISUPDATEABLE><![CDATA[N]]></ISUPDATEABLE>
<!--2465--> <ISIDENTIFIER><![CDATA[N]]></ISIDENTIFIER>
<!--2465--> <ISTRANSLATED><![CDATA[N]]></ISTRANSLATED>
<!--2465--> <ISENCRYPTED><![CDATA[N]]></ISENCRYPTED>
diff --git a/src-util/buildvalidation/build/classes/org/openbravo/buildvalidation/DifferentOrgInAccSchema.class b/src-util/buildvalidation/build/classes/org/openbravo/buildvalidation/DifferentOrgInAccSchema.class
new file mode 100644
index 0000000000000000000000000000000000000000..4a66636aeae065cc27c742ff96d19774a4a4283c
GIT binary patch
literal 10185
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
diff --git a/src-util/buildvalidation/build/classes/org/openbravo/buildvalidation/DifferentOrgInAccSchemaData.class b/src-util/buildvalidation/build/classes/org/openbravo/buildvalidation/DifferentOrgInAccSchemaData.class
new file mode 100644
index 0000000000000000000000000000000000000000..1c56616ce70901d9d1b0c26ada3ccabd417d8e6e
GIT binary patch
literal 24341
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
diff --git a/src-util/buildvalidation/src/org/openbravo/buildvalidation/DifferentOrgInAccSchema.java b/src-util/buildvalidation/src/org/openbravo/buildvalidation/DifferentOrgInAccSchema.java
new file mode 100644
--- /dev/null
+++ b/src-util/buildvalidation/src/org/openbravo/buildvalidation/DifferentOrgInAccSchema.java
@@ -0,0 +1,233 @@
+/*
+ *************************************************************************
+ * 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) 2012 Openbravo SLU
+ * All Rights Reserved.
+ * Contributor(s): ______________________________________.
+ ************************************************************************
+ */
+package org.openbravo.buildvalidation;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.openbravo.database.ConnectionProvider;
+
+/**
+ * This validation is related to this issue: https://issues.openbravo.com/view.php?id=20142
+ *
+ * Same Org has to exist in parent tab and child tab
+ *
+ */
+public class DifferentOrgInAccSchema extends BuildValidation {
+ private static final String ELEMENT = "ELEMENT";
+ private static final String TABLE = "TABLE";
+ private static final String DOCTYPE = "DOCTYPE";
+ private static final String PROCESS = "PROCESS";
+ private static final String GL = "GL";
+ private static final String DEFAULT = "DEFAULT";
+
+
+ private static final String ELEMENT_TAB = "217";
+ private static final String TABLE_TAB = "800041";
+ private static final String DOCTYPE_TAB = "1007400000";
+ private static final String PROCESS_TAB = "4F9E1C27F7F040C58C5CA2E6FD5B26CB";
+ private static final String GL_TAB = "200";
+ private static final String DEFAULT_TAB = "252";
+
+
+ private static final String AccSchema_WINDOW = "125";
+
+ @Override
+ public List<String> execute() {
+ ConnectionProvider cp = getConnectionProvider();
+ ArrayList<String> errors = new ArrayList<String>();
+ try {
+ // Prevent error when upgrading from a pure 2.50
+ //if (DuplicateDocExchangeRateData.existAPRMbasetables(cp)) {
+
+ String errorMessage = "It is not allowed to have different organization for accounting schema and its child tabs . " +
+ "To fix this problem in your instance, please CONTACT YOUR SYSTEM ADMINISTRATOR. You can know the entries that are incorrect and by reviewing Alerts in your system. " +
+ "Once you find the incorrect entries you should correct them. After fixing all these entries you should be able to apply this MP.";
+
+ // ELEMENT
+ DifferentOrgInAccSchemaData[] listOfIncorrectElement = DifferentOrgInAccSchemaData.selectDifOrgInElement(cp);
+ if (listOfIncorrectElement != null && listOfIncorrectElement.length > 0) {
+ errors.add(String.format(errorMessage, "ELEMENT"));
+ }
+ for (DifferentOrgInAccSchemaData incorrectElement : listOfIncorrectElement) {
+ processAlert(cp, incorrectElement, ELEMENT);
+ }
+
+ // TABLE
+ DifferentOrgInAccSchemaData[] listOfIncorrectTable = DifferentOrgInAccSchemaData.selectDifOrgInTable(cp);
+ if (listOfIncorrectTable != null && listOfIncorrectTable.length > 0) {
+ errors.add(String.format(errorMessage, "TABLE"));
+ }
+ for (DifferentOrgInAccSchemaData incorrectTable : listOfIncorrectTable) {
+ processAlert(cp, incorrectTable, TABLE);
+ }
+
+ // DocType
+ DifferentOrgInAccSchemaData[] listOfIncorrectDoc = DifferentOrgInAccSchemaData.selectDifOrgInDoc(cp);
+ if (listOfIncorrectDoc != null && listOfIncorrectDoc.length > 0) {
+ errors.add(String.format(errorMessage, "DOCTYPE"));
+ }
+ for (DifferentOrgInAccSchemaData incorrectDoc : listOfIncorrectDoc) {
+ processAlert(cp, incorrectDoc, DOCTYPE);
+ }
+
+ // PROCESS
+ DifferentOrgInAccSchemaData[] listOfIncorrectProcess = DifferentOrgInAccSchemaData.selectDifOrgInProcess(cp);
+ if (listOfIncorrectProcess != null && listOfIncorrectProcess.length > 0) {
+ errors.add(String.format(errorMessage, "PROCESS"));
+ }
+ for (DifferentOrgInAccSchemaData incorrectProcess : listOfIncorrectProcess) {
+ processAlert(cp, incorrectProcess, PROCESS);
+ }
+
+ // GL
+ DifferentOrgInAccSchemaData[] listOfIncorrectGL = DifferentOrgInAccSchemaData.selectDifOrgInGL(cp);
+ if (listOfIncorrectGL != null && listOfIncorrectGL.length > 0) {
+ errors.add(String.format(errorMessage, "GL"));
+ }
+ for (DifferentOrgInAccSchemaData incorrectGL : listOfIncorrectGL) {
+ processAlert(cp, incorrectGL, GL);
+ }
+
+ // Default
+ DifferentOrgInAccSchemaData[] listOfIncorrectDefault = DifferentOrgInAccSchemaData.selectDifOrgInDefault(cp);
+ if (listOfIncorrectDefault != null && listOfIncorrectDefault.length > 0) {
+ errors.add(String.format(errorMessage, "DEFAULT"));
+ }
+ for (DifferentOrgInAccSchemaData incorrectDefault : listOfIncorrectDefault) {
+ processAlert(cp, incorrectDefault, DEFAULT);
+ }
+
+ // }
+ } catch (Exception e) {
+ return handleError(e);
+ }
+ return errors;
+ }
+
+ private void processAlert(ConnectionProvider cp, DifferentOrgInAccSchemaData incorrectOrg, String type) throws Exception {
+ String ALERT_RULE_NAME = "";
+ String alertDescription = "";
+ String strTabId = "";
+ String strWindowId = AccSchema_WINDOW;
+ String ALERT_RULE_SQL = "";
+ String strRecordId = incorrectOrg.referencekeyId;
+
+ if (ELEMENT.equals(type)) {
+ //String invoice = "Y".equals(exchangeRate.issotrx) ? "Sales Invoice" : "Purchase Invoice";
+ ALERT_RULE_NAME = "Different Org for Acct Schema and Acct Schema Element";
+ alertDescription = "Different organization for Accounting Schema and Account Schema Element. Please ensure the same organization exists";
+ strTabId = ELEMENT_TAB;
+
+ ALERT_RULE_SQL = " select e.C_AcctSchema_Element_id as referencekey_id, ad_column_identifier('C_AcctSchema_Element', e.C_AcctSchema_Element_id,'en_US') as record_id, " +
+ " 0 as ad_role_id, null as ad_user_id, '" + alertDescription + "' as description, " +
+ " 'Y' as isActive, e.ad_client_id, e.ad_org_id, now() as created, 0 as createdBy, now() as updated, 0 as updatedBy " +
+ " from C_AcctSchema c inner join C_AcctSchema_Element e ON c.c_acctSchema_id = e.c_acctSchema_id " +
+ " where c.ad_org_id <> e.ad_org_id";
+
+ } else if (TABLE.equals(type)) {
+ //String payment = "Y".equals(exchangeRate.isreceipt) ? "Payment IN" : "Payment OUT";
+ ALERT_RULE_NAME = "Different Org for Acct Schema and Acct Schema Tables";
+ alertDescription = "Different organization for Accounting Schema and Account Schema Tables. Please ensure the same organization exists";
+ strTabId = TABLE_TAB;
+
+ ALERT_RULE_SQL = " select t.C_AcctSchema_Table_id as referencekey_id, ad_column_identifier('C_AcctSchema_Table', t.C_AcctSchema_Table_id,'en_US') as record_id, " +
+ " 0 as ad_role_id, null as ad_user_id, '" + alertDescription + "' as description, " +
+ " 'Y' as isActive, t.ad_client_id, t.ad_org_id, now() as created, 0 as createdBy, now() as updated, 0 as updatedBy " +
+ " from C_AcctSchema c inner join C_AcctSchema_Table t on c.c_acctSchema_id = t.c_acctSchema_id " +
+ " WHERE c.ad_org_id <> t.ad_org_id";
+
+ } else if (DOCTYPE.equals(type)) {
+ ALERT_RULE_NAME = "Different Org for Acct Schema and Documents";
+ alertDescription = "Different organization for Accounting Schema and Documents. Please ensure the same organization exists";
+ strTabId = DOCTYPE_TAB;
+
+ ALERT_RULE_SQL = " select d.C_AcctSchema_Table_DocType_id as referencekey_id, ad_column_identifier('C_AcctSchema_Table_DocType', d.C_AcctSchema_Table_DocType_id,'en_US') as record_id, " +
+ " 0 as ad_role_id, null as ad_user_id, '" + alertDescription + "' as description, " +
+ " 'Y' as isActive, d.ad_client_id, d.ad_org_id, now() as created, 0 as createdBy, now() as updated, 0 as updatedBy " +
+ " from (C_AcctSchema c inner join C_AcctSchema_Table t on c.c_acctSchema_id =t.c_acctSchema_id) " +
+ " inner join C_AcctSchema_Table_DocType d on t.C_AcctSchema_Table_id = d.C_AcctSchema_Table_id " +
+ " where c.ad_org_id <> d.ad_org_id";
+
+ } else if (PROCESS.equals(type)) {
+ ALERT_RULE_NAME = "Different Org for Acct Schema and Process";
+ alertDescription = "Different organization for Accounting Schema and Process. Please ensure the same organization exists";
+ strTabId = PROCESS_TAB;
+
+ ALERT_RULE_SQL = " select p.C_AcctSchema_Process_id as referencekey_id, ad_column_identifier('C_AcctSchema_Process', p.C_AcctSchema_Process_id,'en_US') as record_id, " +
+ " 0 as ad_role_id, null as ad_user_id, '" + alertDescription + "' as description, " +
+ " 'Y' as isActive, p.ad_client_id, p.ad_org_id, now() as created, 0 as createdBy, now() as updated, 0 as updatedBy " +
+ " from C_AcctSchema c inner join C_AcctSchema_Process p on c.c_acctSchema_id = p.c_acctSchema_id " +
+ " where c.ad_org_id <> p.ad_org_id";
+
+ } else if (GL.equals(type)) {
+ ALERT_RULE_NAME = "Different Org for Acct Schema and General Ledger";
+ alertDescription = "Different organization for Accounting Schema and General Ledger. Please ensure the same organization exists";
+ strTabId = GL_TAB;
+
+ ALERT_RULE_SQL = " select gl.C_AcctSchema_GL_id as referencekey_id, ad_column_identifier('C_AcctSchema_GL', gl.C_AcctSchema_GL_id,'en_US') as record_id, " +
+ " 0 as ad_role_id, null as ad_user_id, '" + alertDescription + "' as description, " +
+ " 'Y' as isActive, gl.ad_client_id, gl.ad_org_id, now() as created, 0 as createdBy, now() as updated, 0 as updatedBy " +
+ " from C_AcctSchema c inner join C_AcctSchema_GL gl on c.c_acctSchema_id = gl.c_acctSchema_id " +
+ " where c.ad_org_id <> gl.ad_org_id";
+
+ } else if (DEFAULT.equals(type)) {
+ ALERT_RULE_NAME = "Different Org for Acct Schema and Defaults";
+ alertDescription = "Different organization for Accounting Schema and Defaults. Please ensure the same organization exists";
+ strTabId = DEFAULT_TAB;
+
+ ALERT_RULE_SQL = " select d.C_AcctSchema_Default_id as referencekey_id, ad_column_identifier('C_AcctSchema_Default', d.C_AcctSchema_Default_id,'en_US') as record_id, " +
+ " 0 as ad_role_id, null as ad_user_id, '" + alertDescription + "' as description, " +
+ " 'Y' as isActive, d.ad_client_id, d.ad_org_id, now() as created, 0 as createdBy, now() as updated, 0 as updatedBy " +
+ " from C_AcctSchema c inner join C_AcctSchema_Default d on c.c_acctSchema_id = d.c_acctSchema_id " +
+ " where c.ad_org_id <> d.ad_org_id";
+
+ } else {
+ //invalid type
+ }
+
+ String alertRuleId = "";
+
+ // Check if exists the alert rule
+ if (!DifferentOrgInAccSchemaData.existsAlertRule(cp, ALERT_RULE_NAME, incorrectOrg.adClientId)) {
+ DifferentOrgInAccSchemaData.insertAlertRule(cp, incorrectOrg.adClientId, incorrectOrg.adOrgId,
+ ALERT_RULE_NAME, strTabId, ALERT_RULE_SQL);
+
+ alertRuleId = DifferentOrgInAccSchemaData.getAlertRuleId(cp, ALERT_RULE_NAME,
+ incorrectOrg.adClientId);
+ DifferentOrgInAccSchemaData[] roles = DifferentOrgInAccSchemaData.getRoleId(cp,
+ strWindowId, incorrectOrg.adClientId);
+ for (DifferentOrgInAccSchemaData role : roles) {
+ DifferentOrgInAccSchemaData.insertAlertRecipient(cp, incorrectOrg.adClientId,
+ incorrectOrg.adOrgId, alertRuleId, role.adRoleId);
+ }
+ } else {
+ alertRuleId = DifferentOrgInAccSchemaData.getAlertRuleId(cp, ALERT_RULE_NAME,
+ incorrectOrg.adClientId);
+ }
+
+ // Check if exist the concrete alert
+ if (!DifferentOrgInAccSchemaData.existsAlert(cp, alertRuleId, strRecordId)) {
+ DifferentOrgInAccSchemaData.insertAlert(cp, incorrectOrg.adClientId, alertDescription,
+ alertRuleId, incorrectOrg.recordinfo, strRecordId);
+ }
+
+ }
+
+}
\ No newline at end of file
diff --git a/src-util/buildvalidation/src/org/openbravo/buildvalidation/DifferentOrgInAccSchema_data.xsql b/src-util/buildvalidation/src/org/openbravo/buildvalidation/DifferentOrgInAccSchema_data.xsql
new file mode 100644
--- /dev/null
+++ b/src-util/buildvalidation/src/org/openbravo/buildvalidation/DifferentOrgInAccSchema_data.xsql
@@ -0,0 +1,205 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ *************************************************************************
+ * 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) 2012 Openbravo SLU
+ * All Rights Reserved.
+ * Contributor(s): ______________________________________.
+ ************************************************************************
+-->
+
+
+<SqlClass name="DifferentOrgInAccSchemaData" package="org.openbravo.buildvalidation">
+ <SqlMethod name="dummy" type="preparedStatement" return="multiple">
+ <SqlMethodComment></SqlMethodComment>
+ <Sql><![CDATA[
+ SELECT '' AS documentno, '' AS referencekey_id, '' AS ad_client_id,
+ '' AS ad_org_id, '' AS recordinfo, '' AS ad_role_id
+ FROM DUAL
+ ]]></Sql>
+ </SqlMethod>
+ <SqlMethod name="selectDifOrgInElement" type="preparedStatement" return="multiple">
+ <SqlMethodComment></SqlMethodComment>
+ <Sql><![CDATA[
+ select e.C_AcctSchema_Element_id as referencekey_id, e.ad_client_id, e.ad_org_id,
+ ad_column_identifier('C_AcctSchema_Element', e.C_AcctSchema_Element_id,'en_US') as recordinfo
+ from C_AcctSchema c inner join C_AcctSchema_Element e ON c.c_acctSchema_id = e.c_acctSchema_id
+ where c.ad_org_id <> e.ad_org_id
+ ]]></Sql>
+ </SqlMethod>
+ <SqlMethod name="selectDifOrgInTable" type="preparedStatement" return="multiple">
+ <SqlMethodComment></SqlMethodComment>
+ <Sql><![CDATA[
+ select t.C_AcctSchema_Table_id as referencekey_id, t.ad_client_id, t.ad_org_id,
+ ad_column_identifier('C_AcctSchema_Table', t.C_AcctSchema_Table_id,'en_US') as recordinfo
+ from C_AcctSchema c inner join C_AcctSchema_Table t on c.c_acctSchema_id = t.c_acctSchema_id
+ WHERE c.ad_org_id <> t.ad_org_id
+ ]]></Sql>
+ </SqlMethod>
+ <SqlMethod name="selectDifOrgInDoc" type="preparedStatement" return="multiple">
+ <SqlMethodComment></SqlMethodComment>
+ <Sql><![CDATA[
+ select d.C_AcctSchema_Table_DocType_id as referencekey_id, d.ad_client_id, d.ad_org_id,
+ ad_column_identifier('C_AcctSchema_Table_DocType', d.C_AcctSchema_Table_DocType_id,'en_US') as recordinfo
+ from (C_AcctSchema c inner join C_AcctSchema_Table t on c.c_acctSchema_id =t.c_acctSchema_id)
+ inner join C_AcctSchema_Table_DocType d on t.C_AcctSchema_Table_id = d.C_AcctSchema_Table_id
+ where c.ad_org_id <> d.ad_org_id
+ ]]></Sql>
+ </SqlMethod>
+ <SqlMethod name="selectDifOrgInProcess" type="preparedStatement" return="multiple">
+ <SqlMethodComment></SqlMethodComment>
+ <Sql><![CDATA[
+ select p.C_AcctSchema_Process_id as referencekey_id, p.ad_client_id, p.ad_org_id,
+ ad_column_identifier('C_AcctSchema_Process', p.C_AcctSchema_Process_id,'en_US') as recordinfo
+ from C_AcctSchema c inner join C_AcctSchema_Process p on c.c_acctSchema_id = p.c_acctSchema_id
+ where c.ad_org_id <> p.ad_org_id
+ ]]></Sql>
+ </SqlMethod>
+ <SqlMethod name="selectDifOrgInGL" type="preparedStatement" return="multiple">
+ <SqlMethodComment></SqlMethodComment>
+ <Sql><![CDATA[
+ select gl.C_AcctSchema_GL_id as referencekey_id, gl.ad_client_id, gl.ad_org_id,
+ ad_column_identifier('C_AcctSchema_GL', gl.C_AcctSchema_GL_id,'en_US') as recordinfo
+ from C_AcctSchema c inner join C_AcctSchema_GL gl on c.c_acctSchema_id = gl.c_acctSchema_id
+ where c.ad_org_id <> gl.ad_org_id
+ ]]></Sql>
+ </SqlMethod>
+ <SqlMethod name="selectDifOrgInDefault" type="preparedStatement" return="multiple">
+ <SqlMethodComment></SqlMethodComment>
+ <Sql><![CDATA[
+ select d.C_AcctSchema_Default_id as referencekey_id, d.ad_client_id, d.ad_org_id,
+ ad_column_identifier('C_AcctSchema_Default', d.C_AcctSchema_Default_id,'en_US') as recordinfo
+ from C_AcctSchema c inner join C_AcctSchema_Default d on c.c_acctSchema_id = d.c_acctSchema_id
+ where c.ad_org_id <> d.ad_org_id
+ ]]></Sql>
+ </SqlMethod>
+ <SqlMethod name="getAlertRuleId" type="preparedStatement" return="string">
+ <SqlMethodComment></SqlMethodComment>
+ <Sql><![CDATA[
+ SELECT MAX(ad_alertrule_id) AS name
+ FROM AD_ALERTRULE
+ WHERE NAME = ?
+ AND ISACTIVE = 'Y'
+ AND AD_CLIENT_ID = ?
+ ]]></Sql>
+ <Parameter name="name"/>
+ <Parameter name="client"/>
+ </SqlMethod>
+ <SqlMethod name="existsAlert" type="preparedStatement" return="boolean">
+ <SqlMethodComment></SqlMethodComment>
+ <Sql><![CDATA[
+ SELECT COUNT(*) AS EXISTING
+ FROM AD_ALERT
+ WHERE AD_ALERTRULE_ID = ?
+ AND REFERENCEKEY_ID = ?
+ AND ISFIXED = 'N'
+ ]]>
+ </Sql>
+ <Parameter name="alertRule"/>
+ <Parameter name="payment"/>
+ </SqlMethod>
+ <SqlMethod name="existsAlertRule" type="preparedStatement" return="boolean">
+ <SqlMethodComment></SqlMethodComment>
+ <Sql><![CDATA[
+ SELECT COUNT(*) AS EXISTING
+ FROM AD_ALERTRULE
+ WHERE NAME = ?
+ AND ISACTIVE = 'Y'
+ AND AD_CLIENT_ID = ?
+ ]]>
+ </Sql>
+ <Parameter name="alertRule"/>
+ <Parameter name="client"/>
+ </SqlMethod>
+ <SqlMethod name="insertAlertRule" type="preparedStatement" return="rowcount">
+ <SqlMethodComment></SqlMethodComment>
+ <Sql><![CDATA[
+ INSERT INTO AD_ALERTRULE (
+ AD_ALERTRULE_ID, AD_CLIENT_ID, AD_ORG_ID,ISACTIVE,
+ CREATED, CREATEDBY, UPDATED, UPDATEDBY,
+ NAME, AD_TAB_ID, FILTERCLAUSE, TYPE,
+ SQL
+ ) VALUES (
+ get_uuid(), ?, ?, 'Y',
+ now(), '100', now(), '100',
+ ?, ?, '', 'D',
+ ?
+ )
+ ]]></Sql>
+ <Parameter name="clientId"/>
+ <Parameter name="orgId"/>
+ <Parameter name="name"/>
+ <Parameter name="tabId"/>
+ <Parameter name="sql"/>
+ </SqlMethod>
+ <SqlMethod name="insertAlert" type="preparedStatement" return="rowcount">
+ <SqlMethodComment></SqlMethodComment>
+ <Sql><![CDATA[
+ INSERT INTO AD_Alert (
+ AD_Alert_ID, AD_Client_ID, AD_Org_ID, IsActive,
+ Created, CreatedBy, Updated, UpdatedBy,
+ Description, AD_AlertRule_ID, Record_Id, Referencekey_ID
+ ) VALUES (
+ get_uuid(), ?, '0', 'Y',
+ NOW(), '0', NOW(), '0',
+ ?, ?, ?, ?)
+ ]]>
+ </Sql>
+ <Parameter name="client"/>
+ <Parameter name="description" />
+ <Parameter name="adAlertRuleId" />
+ <Parameter name="recordId" />
+ <Parameter name="referencekey_id" />
+ </SqlMethod>
+ <SqlMethod name="getRoleId" type="preparedStatement" return="multiple">
+ <SqlMethodComment></SqlMethodComment>
+ <Sql><![CDATA[
+ SELECT distinct r.ad_role_id
+ FROM ad_window_access wa join ad_role r on (wa.ad_role_id=r.ad_role_id)
+ WHERE wa.ad_window_id = ?
+ AND wa.ad_client_id = ?
+ AND wa.isactive = 'Y'
+ AND r.isactive = 'Y'
+ AND r.ismanual = 'Y'
+ ]]></Sql>
+ <Parameter name="window"/>
+ <Parameter name="clientId"/>
+ </SqlMethod>
+ <SqlMethod name="insertAlertRecipient" type="preparedStatement" return="rowcount">
+ <SqlMethodComment></SqlMethodComment>
+ <Sql><![CDATA[
+ INSERT INTO ad_alertrecipient(
+ ad_user_id, ad_client_id, ad_org_id, isactive, created, createdby,
+ updated, updatedby, ad_alertrecipient_id, ad_alertrule_id, ad_role_id,
+ sendemail)
+ VALUES (null, ?, ?, 'Y', now(), '100',
+ now(), '100', get_uuid(), ?, ?,
+ 'N')
+ ]]>
+ </Sql>
+ <Parameter name="client"/>
+ <Parameter name="org"/>
+ <Parameter name="adAlertRuleId" />
+ <Parameter name="role" />
+ </SqlMethod>
+ <SqlMethod name="existAPRMbasetables" type="preparedStatement" return="boolean">
+ <SqlMethodComment>Check if the FIN_Finacc_Transaction table exist</SqlMethodComment>
+ <Sql><![CDATA[
+ SELECT count(*) AS EXISTING
+ FROM ad_table
+ WHERE ad_table_id = '4D8C3B3C31D1410DA046140C9F024D17'
+ ]]>
+ </Sql>
+ </SqlMethod>
+</SqlClass>
+
| |||||||||||
Relationships [ Relation Graph ]
[ Dependency Graph ]
|
||||||||
|
||||||||
Notes |
|
|
(0048891) naiaramartinez (viewer) 2012-05-23 17:47 |
Go to Accounting Schema window. Select one record. Go to all its child's tab. Create new record. Notice that you can't see/modify organization field. By default selected organization is parent organization, so child always have parent's organization. Test Plan (build validation) Before applying the fix you need to have incorrect records in 'Account Schema Element', 'Account Schema Tables', 'Process', 'General Ledger' and 'Defaults' tabs. Those tabs are child tabs of Accounting Schema. So, go to database and insert an incorrect record in C_AcctSchema_Table, C_AcctSchema_Table_DocType, C_AcctSchema_Process, C_AcctSchema_GL and C_AcctSchema_Default. You need to insert a diferent organization than its c_AcctSchema's organization. Apply the fix. Run ant smartbuild -Dlocal=no. The compilation should fail (the record that you inserted and two records that were incorrect for QA client). Go to application as client admin role. Browse to the wrong records. You need to correct those incorrect record in the database (because in the application you can't modify the organization). After correcting them, run ant smartbuild -Dlocal=no again. The complication should go fine. |
|
(0077403) naiaramartinez (viewer) 2015-05-13 17:07 |
I attach a solution made in 2012, but I don't know if it still will work or not. The main problem here, is that Openbravo allows you to have headers with one organization and children with different organization. For example: * Go to 'General Ledger Configuration' (this window is the same as Account schema. The window was renamed) * create a record with 'Region norte' organization * Go to 'dimension' tab and create one record * Go to header again, and modify organization to 'Region Sur'. * Do a select in the bbdd, and notice that the organzation of the record created in dimesion tab, is still 'Region Norte' |
Issue History |
|||
| Date Modified | Username | Field | Change |
| 2012-04-17 20:45 | vmromanos | New Issue | |
| 2012-04-17 20:45 | vmromanos | Assigned To | => vmromanos |
| 2012-04-17 20:45 | vmromanos | Modules | => Core |
| 2012-04-17 20:45 | vmromanos | OBNetwork customer | => No |
| 2012-04-17 20:45 | vmromanos | Relationship added | related to 0020254 |
| 2012-04-19 18:43 | mirurita | Tag Attached: MIR-Reviewed | |
| 2012-05-10 12:12 | gorka_gil | Assigned To | vmromanos => mirurita |
| 2012-05-22 17:25 | naiaramartinez | Assigned To | mirurita => naiaramartinez |
| 2012-05-22 17:26 | naiaramartinez | Status | new => scheduled |
| 2012-05-22 17:26 | naiaramartinez | fix_in_branch | => pi |
| 2012-05-23 17:47 | naiaramartinez | Note Added: 0048891 | |
| 2015-05-13 16:58 | naiaramartinez | Assigned To | naiaramartinez => Triage Finance |
| 2015-05-13 17:07 | naiaramartinez | Note Added: 0077403 | |
| 2015-05-13 17:08 | naiaramartinez | File Added: bug_20294.diff | |
| Copyright © 2000 - 2009 MantisBT Group |

