details: https://code.openbravo.com/erp/devel/pi/rev/4af49610cdb2
changeset: 15956:4af49610cdb2
user: Eduardo Argal Guibert <eduardo.argal <at> openbravo.com>
date: Thu Mar 29 16:39:23 2012 +0200
summary: Fixes bug 19829: Fiscal Year End Close Generates Incorrect Accounting
diffstat:
src-db/database/sourcedata/AD_MESSAGE.xml | 11 +
src/org/openbravo/erpCommon/ad_actionButton/CreateRegFactAcct.java | 29
+++-
src/org/openbravo/erpCommon/ad_actionButton/CreateRegFactAcct_data.xsql | 81
++++++++++
3 files changed, 118 insertions(+), 3 deletions(-)
diffs (185 lines):
diff -r a40438ae1ee5 -r 4af49610cdb2 src-db/database/sourcedata/AD_MESSAGE.xml
--- a/src-db/database/sourcedata/AD_MESSAGE.xml Thu Mar 29 18:17:42 2012 +0200
+++ b/src-db/database/sourcedata/AD_MESSAGE.xml Thu Mar 29 16:39:23 2012 +0200
@@ -17202,6 +17202,17 @@
<!--7483DF96F3C34BB38C67B66BFAC79404-->
<AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
<!--7483DF96F3C34BB38C67B66BFAC79404--></AD_MESSAGE>
+<!--76044028A6A54026900ABC05910E2216--><AD_MESSAGE>
+<!--76044028A6A54026900ABC05910E2216-->
<AD_MESSAGE_ID><![CDATA[76044028A6A54026900ABC05910E2216]]></AD_MESSAGE_ID>
+<!--76044028A6A54026900ABC05910E2216-->
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--76044028A6A54026900ABC05910E2216--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--76044028A6A54026900ABC05910E2216--> <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--76044028A6A54026900ABC05910E2216-->
<VALUE><![CDATA[BalanceIsNotBalanced]]></VALUE>
+<!--76044028A6A54026900ABC05910E2216--> <MSGTEXT><![CDATA[Balance for
selected year is NOT Balanced. Please verify that your balance for selected
year in accounting schema @AcctSchema@ is balanced.]]></MSGTEXT>
+<!--76044028A6A54026900ABC05910E2216--> <MSGTYPE><![CDATA[E]]></MSGTYPE>
+<!--76044028A6A54026900ABC05910E2216-->
<AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
+<!--76044028A6A54026900ABC05910E2216--></AD_MESSAGE>
+
<!--7687410573FA477BBDDD8B54FDBB74CD--><AD_MESSAGE>
<!--7687410573FA477BBDDD8B54FDBB74CD-->
<AD_MESSAGE_ID><![CDATA[7687410573FA477BBDDD8B54FDBB74CD]]></AD_MESSAGE_ID>
<!--7687410573FA477BBDDD8B54FDBB74CD-->
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff -r a40438ae1ee5 -r 4af49610cdb2
src/org/openbravo/erpCommon/ad_actionButton/CreateRegFactAcct.java
--- a/src/org/openbravo/erpCommon/ad_actionButton/CreateRegFactAcct.java
Thu Mar 29 18:17:42 2012 +0200
+++ b/src/org/openbravo/erpCommon/ad_actionButton/CreateRegFactAcct.java
Thu Mar 29 16:39:23 2012 +0200
@@ -23,6 +23,8 @@
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
@@ -31,6 +33,8 @@
import org.openbravo.base.secureApp.HttpSecureAppServlet;
import org.openbravo.base.secureApp.VariablesSecureApp;
+import org.openbravo.dal.core.OBContext;
+import org.openbravo.dal.security.OrganizationStructureProvider;
import org.openbravo.dal.service.OBDal;
import org.openbravo.erpCommon.utility.OBError;
import org.openbravo.erpCommon.utility.SequenceIdData;
@@ -91,7 +95,27 @@
vars.getClient(), strOrgId);
CreateRegFactAcctData[] acctSchema =
CreateRegFactAcctData.treeAcctSchema(this,
vars.getClient(), strOrgId);
+ String strPediodId = CreateRegFactAcctData.getLastPeriod(this, strKey);
for (int j = 0; j < acctSchema.length; j++) {
+ String balanceAmount = CreateRegFactAcctData.balanceAmount(this,
strKey, acctSchema[j].id,
+ Utility.getInStrSet(new
OrganizationStructureProvider().getChildTree(strOrgId, true)));
+ if (BigDecimal.ZERO.compareTo(new BigDecimal(balanceAmount)) != 0) {
+ releaseRollbackConnection(conn);
+ myError.setType("Error");
+ myError.setTitle("");
+ Map<String, String> parameters = new HashMap<String, String>();
+ try {
+ OBContext.setAdminMode();
+ AcctSchema schema = OBDal.getInstance().get(AcctSchema.class,
acctSchema[j].id);
+ parameters.put("AcctSchema", schema.getName());
+ } finally {
+ OBContext.restorePreviousMode();
+ }
+
+ myError.setMessage(Utility.parseTranslation(this, vars, parameters,
vars.getLanguage(),
+ Utility.messageBD(this, "BalanceIsNotBalanced",
vars.getLanguage())));
+ return myError;
+ }
String strRegId = SequenceIdData.getUUID();
String strCloseId = SequenceIdData.getUUID();
String strOpenId = SequenceIdData.getUUID();
@@ -108,7 +132,6 @@
for (int i = 0; i < dataOrgs.length; i++) {
if (log4j.isDebugEnabled())
log4j.debug("Output: Before buttonReg");
- String strPediodId = CreateRegFactAcctData.getLastPeriod(this,
strKey);
String regCount = CreateRegFactAcctData.getRegCount(this,
vars.getClient(),
dataOrgs[i].org, acctSchema[j].id, strPediodId);
if (new Integer(regCount).intValue() > 0) {
@@ -320,8 +343,8 @@
Fact_Acct_Group_ID, "10", "C", strClosingEntry, strKey, "'L','O'",
strAcctSchema);
String Fact_Acct_Group_ID2 = strOpenID;
- CreateRegFactAcctData.insertSelect(conn, this, vars.getClient(),
stradOrgId, vars.getUser(),
- CreateRegFactAcctData.getStartDate(this, newPeriod), newPeriod,
currency,
+ CreateRegFactAcctData.insertSelectOpening(conn, this, vars.getClient(),
stradOrgId,
+ vars.getUser(), CreateRegFactAcctData.getStartDate(this, newPeriod),
newPeriod, currency,
Fact_Acct_Group_ID2, "20", "O", strOpeningEntry, strKey,
"'A','L','O'", strAcctSchema);
return "Success";
diff -r a40438ae1ee5 -r 4af49610cdb2
src/org/openbravo/erpCommon/ad_actionButton/CreateRegFactAcct_data.xsql
--- a/src/org/openbravo/erpCommon/ad_actionButton/CreateRegFactAcct_data.xsql
Thu Mar 29 18:17:42 2012 +0200
+++ b/src/org/openbravo/erpCommon/ad_actionButton/CreateRegFactAcct_data.xsql
Thu Mar 29 16:39:23 2012 +0200
@@ -250,6 +250,70 @@
<Parameter name="ad_org_id"/>
<Parameter name="acctSchema"/>
</SqlMethod>
+ <SqlMethod name="insertSelectOpening" type="preparedStatement"
connection="true" return="rowCount">
+ <SqlMethodComment></SqlMethodComment>
+ <Sql>
+ <![CDATA[
+ INSERT INTO FACT_ACCT
+ (FACT_ACCT_ID, AD_CLIENT_ID, AD_ORG_ID,
+ ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY,
+ C_ACCTSCHEMA_ID,ACCOUNT_ID, DATETRX, DATEACCT,
+ C_PERIOD_ID, AD_TABLE_ID, RECORD_ID,
+ POSTINGTYPE,C_CURRENCY_ID,AMTSOURCECR,
+ AMTSOURCEDR, AMTACCTCR, AMTACCTDR,
+ FACT_ACCT_GROUP_ID,SEQNO, FACTACCTTYPE,
+ ACCTDESCRIPTION, ACCTVALUE, C_BPARTNER_ID,
+ RECORD_ID2, M_PRODUCT_ID, A_ASSET_ID,DESCRIPTION,
+ C_TAX_ID,C_PROJECT_ID,C_ACTIVITY_ID,
+ USER1_ID,USER2_ID,C_CAMPAIGN_ID,C_SALESREGION_ID)
+ SELECT get_UUID(), ?, ?,
+ 'Y', now(), ?, now(), ?,
+ C_ACCTSCHEMA_ID, ACCOUNT_ID, to_date(?), to_date(?),
+ ?, '224', ?,
+ 'A', ?, (CASE SIGN(SUM(AMTACCTCR)-SUM(AMTACCTDR)) WHEN -1 THEN 0 ELSE
(SUM(AMTACCTCR)-SUM(AMTACCTDR)) END),
+ (CASE SIGN(SUM(AMTACCTDR)-SUM(AMTACCTCR)) WHEN -1 THEN 0 ELSE
(SUM(AMTACCTDR)-SUM(AMTACCTCR)) END),
+ (CASE SIGN(SUM(AMTACCTCR)-SUM(AMTACCTDR)) WHEN -1 THEN 0 ELSE
(SUM(AMTACCTCR)-SUM(AMTACCTDR)) END),
+ (CASE SIGN(SUM(AMTACCTDR)-SUM(AMTACCTCR)) WHEN -1 THEN 0 ELSE
(SUM(AMTACCTDR)-SUM(AMTACCTCR)) END),
+ ?, to_number(?), ?,
+ ACCTDESCRIPTION, ACCTVALUE, C_BPARTNER_ID,
+ RECORD_ID2, M_PRODUCT_ID, A_ASSET_ID, ? ,
+ C_TAX_ID,C_PROJECT_ID,C_ACTIVITY_ID,
+ USER1_ID,USER2_ID,C_CAMPAIGN_ID,C_SALESREGION_ID
+ FROM FACT_ACCT
+ WHERE EXISTS (SELECT 1 FROM C_PERIOD P
+ WHERE P.C_YEAR_ID = ?
+ AND P.C_PERIOD_ID = FACT_ACCT.C_PERIOD_ID)
+ AND EXISTS (SELECT 1
+ FROM C_ELEMENTVALUE
+ WHERE C_ELEMENTVALUE.ACCOUNTTYPE IN ('1')
+ AND ACCOUNT_ID = C_ELEMENTVALUE_ID)
+ AND AD_ORG_ID = ?
+ AND C_ACCTSCHEMA_ID = ?
+ AND FACTACCTTYPE <>'C'
+ GROUP BY ACCOUNT_ID, ACCTDESCRIPTION, ACCTVALUE, RECORD_ID2,
C_BPARTNER_ID, M_PRODUCT_ID, A_ASSET_ID,
+
C_TAX_ID,C_PROJECT_ID,C_ACTIVITY_ID,USER1_ID,USER2_ID,C_CAMPAIGN_ID,C_SALESREGION_ID,
C_ACCTSCHEMA_ID
+ HAVING SUM(AMTACCTDR)-SUM(AMTACCTCR)<>0
+ order by ACCTVALUE
+ ]]>
+ </Sql>
+ <Parameter name="ad_client_id"/>
+ <Parameter name="ad_org_id"/>
+ <Parameter name="ad_user_id"/>
+ <Parameter name="ad_user_id"/>
+ <Parameter name="date"/>
+ <Parameter name="date"/>
+ <Parameter name="c_period_id"/>
+ <Parameter name="c_period_id"/>
+ <Parameter name="c_currency_id"/>
+ <Parameter name="fact_acct_group_id"/>
+ <Parameter name="seqno"/>
+ <Parameter name="factAcctType"/>
+ <Parameter name="description"/>
+ <Parameter name="year"/>
+ <Parameter name="accounttype" optional="true" type="replace" after="WHERE
C_ELEMENTVALUE.ACCOUNTTYPE IN (" text="'1'"/>
+ <Parameter name="ad_org_id"/>
+ <Parameter name="acctSchema"/>
+ </SqlMethod>
<SqlMethod name="getEndDate" type="preparedStatement" return="Date">
<SqlMethodComment></SqlMethodComment>
<Sql>
@@ -555,4 +619,21 @@
]]></Sql>
<Parameter name="clientId"/>
</SqlMethod>
+ <SqlMethod name="balanceAmount" type="preparedStatement" return="string">
+ <SqlMethodComment>When balance is balanced this amount should be
ZERO</SqlMethodComment>
+ <Sql><![CDATA[
+ select coalesce(sum(amtacctdr)-sum(amtacctcr),0)
+ from fact_acct, c_elementvalue
+ where fact_acct.account_id = c_elementvalue.c_elementvalue_id
+ and dateacct >= (select min(startdate) from c_period where c_year_id =
?)
+ and dateacct <= (select max(enddate) from c_period where c_year_id = ?)
+ and accounttype in ('E','R','A','L','O')
+ and fact_acct.c_acctschema_id = ?
+ and fact_acct.ad_org_id in ('1')
+ ]]></Sql>
+ <Parameter name="yearId"/>
+ <Parameter name="yearId"/>
+ <Parameter name="acctSchemaId"/>
+ <Parameter name="organizationList" optional="true" type="replace"
after="and fact_acct.ad_org_id in (" text="'1'"/>
+ </SqlMethod>
</SqlClass>
------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits