From 537b75d8c98c0e9b87e0fa8eb34cb42c88d23b6f Mon Sep 17 00:00:00 2001 From: Arnaud Fontaine <arnaud.fontaine@nexedi.com> Date: Tue, 30 Nov 2010 04:39:43 +0000 Subject: [PATCH] Add Accounting Transaction Balance Constraint for ZODB Property Sheets git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@40896 20353a03-c40f-0410-a6d1-a30d3c3de9de --- .../AccountingTransactionBalanceConstraint.py | 96 +++++++++++++++++++ .../AccountingTransactionBalanceConstraint.py | 45 +++++++++ 2 files changed, 141 insertions(+) create mode 100644 product/ERP5/Document/AccountingTransactionBalanceConstraint.py create mode 100644 product/ERP5/PropertySheet/AccountingTransactionBalanceConstraint.py diff --git a/product/ERP5/Document/AccountingTransactionBalanceConstraint.py b/product/ERP5/Document/AccountingTransactionBalanceConstraint.py new file mode 100644 index 0000000000..6e9692c38c --- /dev/null +++ b/product/ERP5/Document/AccountingTransactionBalanceConstraint.py @@ -0,0 +1,96 @@ +############################################################################## +# +# Copyright (c) 2007-2010 Nexedi SA and Contributors. All Rights Reserved. +# Jerome Perrin <jerome@nexedi.com> +# Arnaud Fontaine <arnaud.fontaine@nexedi.com> +# +# WARNING: This program as such is intended to be used by professional +# programmers who take the whole responsability of assessing all potential +# consequences resulting from its eventual inadequacies and bugs +# End users who are looking for a ready-to-use solution with commercial +# garantees and support are strongly adviced to contract a Free Software +# Service Company +# +# This program is Free Software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +############################################################################## + +from Products.ERP5Type.mixin.constraint import ConstraintMixin +from Products.ERP5Type import PropertySheet + +class AccountingTransactionBalanceConstraint(ConstraintMixin): + """ + Check that accounting transaction total debit and total credit are equals. + + This is only relevant for ZODB Property Sheets (filesystem Property + Sheets rely on Products.ERP5.Constraint.AccountingTransactionBalance + instead). + """ + meta_type = 'ERP5 Accounting Transaction Balance Constraint' + portal_type = 'Accounting Transaction Balance Constraint' + + property_sheets = (PropertySheet.SimpleItem, + PropertySheet.Predicate, + PropertySheet.Reference, + PropertySheet.AccountingTransactionBalanceConstraint) + + def checkConsistency(self, obj, fixit=0): + """ + Check the object's consistency + """ + if not self.test(obj): + return [] + + error_list = [] + source_sum = dict() + destination_sum = dict() + for line in obj.getMovementList( + portal_type=obj.getPortalAccountingMovementTypeList()): + if line.getSourceValue() is not None: + section = line.getSourceSectionValue() + source_sum[section] = source_sum.get(section, 0) + \ + (line.getSourceInventoriatedTotalAssetPrice() or 0) + if line.getDestinationValue() is not None: + section = line.getDestinationSectionValue() + destination_sum[section] = destination_sum.get(section, 0) + \ + (line.getDestinationInventoriatedTotalAssetPrice() or 0) + + for section, total in source_sum.items(): + precision = 2 + if section is not None and\ + section.getPortalType() == 'Organisation': + section_currency = section.getPriceCurrencyValue() + if section_currency is not None: + precision = section_currency.getQuantityPrecision() + if round(total, precision) != 0: + error_list.append(self._generateError(obj, self._getMessage( + 'message_transaction_not_balanced_for_source'), + mapping=dict(section_title=section.getTranslatedTitle()))) + break + + for section, total in destination_sum.items(): + precision = 2 + if section is not None and\ + section.getPortalType() == 'Organisation': + section_currency = section.getPriceCurrencyValue() + if section_currency is not None: + precision = section_currency.getQuantityPrecision() + if round(total, precision) != 0: + error_list.append(self._generateError(obj, self._getMessage( + 'message_transaction_not_balanced_for_source'), + mapping=dict(section_title=section.getTranslatedTitle()))) + break + + return error_list diff --git a/product/ERP5/PropertySheet/AccountingTransactionBalanceConstraint.py b/product/ERP5/PropertySheet/AccountingTransactionBalanceConstraint.py new file mode 100644 index 0000000000..aa0af38d31 --- /dev/null +++ b/product/ERP5/PropertySheet/AccountingTransactionBalanceConstraint.py @@ -0,0 +1,45 @@ +############################################################################## +# +# Copyright (c) 2010 Nexedi SARL and Contributors. All Rights Reserved. +# Arnaud Fontaine <arnaud.fontaine@nexedi.com> +# +# WARNING: This program as such is intended to be used by professional +# programmers who take the whole responsability of assessing all potential +# consequences resulting from its eventual inadequacies and bugs +# End users who are looking for a ready-to-use solution with commercial +# garantees and support are strongly adviced to contract a Free Software +# Service Company +# +# This program is Free Software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +############################################################################## + +class AccountingTransactionBalanceConstraint: + """ + Define an Accounting Transaction Balance Constraint for ZODB + Property Sheets + """ + _properties = ( + { 'id': 'message_transaction_not_balanced_for_source', + 'type': 'string', + 'description' : 'Error message when transaction is not balanced '\ + 'for source', + 'default': 'Transaction is not balanced for ${section_title}' }, + { 'id': 'message_transaction_not_balanced_for_destination', + 'type': 'string', + 'description' : 'Error message when transaction is not balanced '\ + 'for destination', + 'default': 'Transaction is not balanced for ${section_title}' }, + ) -- 2.30.9