For Storno accounting Tax/Base amount is always == (debit + credit)
Still trying to find the case where it is not.
Maybe for contra check is abs(tax_amount) = abs(debit + credit) ???
As extreme measure I'am using trigger on some databases:
""" cr.execute(''' CREATE OR REPLACE FUNCTION debit_credit2tax_amount() RETURNS trigger AS $debit_credit2tax_amount$ BEGIN NEW.tax_amount := CASE when NEW.tax_code_id is not null then coalesce(NEW.credit, 0.00)+coalesce(NEW.debit, 0.00) else 0.00 END; RETURN NEW; END; $debit_credit2tax_amount$ LANGUAGE plpgsql;
ALTER FUNCTION debit_credit2tax_amount() OWNER TO %s;
DROP TRIGGER IF EXISTS move_line_tax_amount ON account_move_line; CREATE TRIGGER move_line_tax_amount BEFORE INSERT OR UPDATE ON account_move_line FOR EACH ROW EXECUTE PROCEDURE debit_credit2tax_amount(); '''%(tools.config['db_user'],))
"""
From account_storno module :
class account_move_line(osv.osv):
_inherit = "account.move.line"
#Original constraints
#_sql_constraints = [
#('credit_debit1', 'CHECK (credit*debit=0)', 'Wrong credit or debit value in accounting entry !'),
#('credit_debit2', 'CHECK (credit+debit>=0)', 'Wrong credit or debit value in accounting entry !'),
#]
# credit_debit1 is valid constraint. Clear message
# credit_debit2 is replaced with dummy constraint that is always true.
_sql_constraints = [ ('credit_debit1', 'CHECK (credit*debit=0)', 'Wrong credit or debit value in accounting entry! Either credit or debit must be 0.00.'), ('credit_debit2', 'CHECK (abs(credit+debit)>=0)', 'Wrong credit or debit value in accounting entry !'),
]
def _check_contra_minus(self, cr, uid, ids, context=None):
""" This is to restore credit_debit2 check functionality, for contra journals
"""
for l in self.browse(cr, uid, ids, context=context):
if l.journal_id.posting_policy == 'contra':
if not (l.debit * l.credit) >= 0.0: return False
return True
def _check_storno_tax(self, cr, uid, ids, context=None):
"""For Storno accounting Tax/Base amount is always == (debit + credit)
Still trying to find the case where it is not.
Maybe for contra check is abs(tax_amount) = abs(debit + credit) ???
"""
for l in self.browse(cr, uid, ids, context=context):
if l.journal_id.posting_policy == 'storno' and l.tax_code_id:
if float_compare((l.debit + l.credit), l.tax_amount, precision_digits = 2) != 0: #precision_digits=dp.get_precision('Account')[1]) return False
return True
_constraints = [ (_check_contra_minus, _('Negative credit or debit amount is not allowed for "contra" journal policy.'), ['journal_id']), (_check_storno_tax, _('Invalid tax amount. Tax amount can be 0.00 or equal to (Credit + Debit).'), ['journal_id']),
]
Hello:
For Storno accounting Tax/Base amount is always == (debit + credit)
Still trying to find the case where it is not.
Maybe for contra check is abs(tax_amount) = abs(debit + credit) ???
As extreme measure I'am using trigger on some databases:
cr.execute( '''
CREATE OR REPLACE FUNCTION debit_credit2ta x_amount( ) RETURNS trigger AS
$debit_ credit2tax_ amount$
BEGIN
NEW. tax_amount := CASE when NEW.tax_code_id is not null
then coalesce( NEW.credit, 0.00)+coalesce( NEW.debit, 0.00)
else 0.00
END;
RETURN NEW;
END;
$debit_ credit2tax_ amount$ LANGUAGE plpgsql;
"""
"""
From account_storno module :
class account_ move_line( osv.osv) : constraints = [ credit_ debit1' , 'CHECK (credit*debit=0)', 'Wrong credit or debit value in accounting entry !'), credit_ debit2' , 'CHECK (credit+debit>=0)', 'Wrong credit or debit value in accounting entry !'),
_inherit = "account.move.line"
#Original constraints
#_sql_
#('
#('
#]
# credit_debit1 is valid constraint. Clear message
# credit_debit2 is replaced with dummy constraint that is always true.
_sql_ constraints = [
('credit_ debit1' , 'CHECK (credit*debit=0)', 'Wrong credit or debit value in accounting entry! Either credit or debit must be 0.00.'),
('credit_ debit2' , 'CHECK (abs(credit+ debit)> =0)', 'Wrong credit or debit value in accounting entry !'),
]
def _check_ contra_ minus(self, cr, uid, ids, context=None): id.posting_ policy == 'contra':
return False
""" This is to restore credit_debit2 check functionality, for contra journals
"""
for l in self.browse(cr, uid, ids, context=context):
if l.journal_
if not (l.debit * l.credit) >= 0.0:
return True
def _check_ storno_ tax(self, cr, uid, ids, context=None): id.posting_ policy == 'storno' and l.tax_code_id: (l.debit + l.credit), l.tax_amount, precision_digits = 2) != 0: #precision_ digits= dp.get_ precision( 'Account' )[1])
return False
"""For Storno accounting Tax/Base amount is always == (debit + credit)
Still trying to find the case where it is not.
Maybe for contra check is abs(tax_amount) = abs(debit + credit) ???
"""
for l in self.browse(cr, uid, ids, context=context):
if l.journal_
if float_compare(
return True
_constraints = [
(_check_ contra_ minus, _('Negative credit or debit amount is not allowed for "contra" journal policy.'), ['journal_id']),
(_check_ storno_ tax, _('Invalid tax amount. Tax amount can be 0.00 or equal to (Credit + Debit).'), ['journal_id']),
]