On account move line:Added tax and analytic account fields.modified create and write method on account move line creation

bzr revid: jvo@tinyerp.com-20080814133758-z76lxtj88yqm7hlc
This commit is contained in:
Jay Vora 2008-08-14 19:07:58 +05:30
parent 5bcd697627
commit da09f02140
4 changed files with 143 additions and 31 deletions

View File

@ -1127,7 +1127,7 @@ class account_tax(osv.osv):
'ref_tax_sign': fields.float('Tax Code Sign', help="Usualy 1 or -1."),
'include_base_amount': fields.boolean('Include in base amount', help="Indicate if the amount of tax must be included in the base amount for the computation of the next taxes"),
'company_id': fields.many2one('res.company', 'Company', required=True),
'description': fields.char('Internal Name', 32),
'description': fields.char('Internal Name',size=32),
}
def name_get(self, cr, uid, ids, context={}):

View File

@ -71,6 +71,9 @@ class account_move_line(osv.osv):
return data
period_obj = self.pool.get('account.period')
tax_obj=self.pool.get('account.tax')
tax_line=context.get('tax_line',False)
# Compute the current move
move_id = False
@ -86,6 +89,7 @@ class account_move_line(osv.osv):
(context['journal_id'], context['period_id'], uid, 'draft'))
res = cr.fetchone()
move_id = (res and res[0]) or False
if not move_id:
return data
else:
@ -113,10 +117,33 @@ class account_move_line(osv.osv):
ref_id = False
taxes = {}
move = self.pool.get('account.move').browse(cr, uid, move_id, context)
for l in move.line_id:
partner_id = partner_id or l.partner_id.id
ref_id = ref_id or l.ref
total += (l.debit - l.credit)
final_debit=l.debit
final_credit=l.credit
if 'name' in fields:
data.setdefault('name', l.name)
if l.amount_taxed:
if l.debit:
final_debit=l.amount_taxed
if not tax_line:
final_debit= l.debit - final_debit
if l.credit:
final_credit=l.amount_taxed
if not tax_line:
final_credit =l.credit - final_credit
total += (final_debit - final_credit)
else:
if len(move.line_id)==1:
total += (final_debit - final_credit)
for tax in l.account_id.tax_ids:
if move.journal_id.type == 'sale':
if l.debit:
@ -134,8 +161,7 @@ class account_move_line(osv.osv):
acc = tax.account_paid_id.id
taxes.setdefault((acc, code), False)
taxes[(l.account_id.id, l.tax_code_id.id)] = True
if 'name' in fields:
data.setdefault('name', l.name)
if 'ref' in fields:
data['ref'] = ref_id
@ -172,7 +198,9 @@ class account_move_line(osv.osv):
s -= tax['amount']
tax_amount += tax['amount'] * \
tax[field_base + 'tax_sign']
if ('debit' in fields) or ('credit' in fields):
data['debit'] = s>0 and s or 0.0
data['credit'] = s<0 and -s or 0.0
@ -334,6 +362,9 @@ class account_move_line(osv.osv):
'tax_amount': fields.float('Tax/Base Amount', digits=(16,2), select=True),
'invoice': fields.function(_invoice, method=True, string='Invoice',
type='many2one', relation='account.invoice', fnct_search=_invoice_search),
'account_tax_id':fields.many2one('account.tax', 'Tax'),
'analytic_account_id' : fields.many2one('account.analytic.account', 'Analytic Account'),
'amount_taxed':fields.float("Taxed Amount",digits=(16,2)),
}
def _get_date(self, cr, uid, context):
@ -632,7 +663,19 @@ class account_move_line(osv.osv):
def write(self, cr, uid, ids, vals, context=None, check=True, update_check=True):
if not context:
context={}
raise_ex=False
account_obj = self.pool.get('account.account')
acc=account_obj.browse(cr,uid,ids)[0]
if ('debit' in vals and 'credit' in vals) and not vals['debit'] and not vals['credit']:
raise_ex=True
if ('debit' in vals and 'credit' not in vals) and not vals['debit'] and not acc.credit:
raise_ex=True
if ('credit' in vals and 'debit' not in vals) and not vals['credit'] and not acc.debit:
raise_ex=True
if raise_ex:
raise osv.except_osv(_('Wrong Accounting Entry!'), _('Both Credit and Debit cannot be zero!'))
if ('account_id' in vals) and not account_obj.read(cr, uid, vals['account_id'], ['active'])['active']:
raise osv.except_osv(_('Bad account!'), _('You can not use an inactive account!'))
@ -680,7 +723,11 @@ class account_move_line(osv.osv):
def create(self, cr, uid, vals, context=None, check=True):
if not context:
context={}
if not vals['debit'] and not vals['credit']:
raise osv.except_osv(_('Wrong Accounting Entry!'), _('Both Credit and Debit cannot be zero!'))
account_obj = self.pool.get('account.account')
tax_obj=self.pool.get('account.tax')
if ('account_id' in vals) and not account_obj.read(cr, uid, vals['account_id'], ['active'])['active']:
raise osv.except_osv(_('Bad account!'), _('You can not use an inactive account!'))
@ -743,7 +790,26 @@ class account_move_line(osv.osv):
vals['amount_currency'] = cur_obj.compute(cr, uid, account.company_id.currency_id.id, account.currency_id.id, vals.get('debit', 0.0)-vals.get('credit', 0.0), context=ctx)
if not ok:
raise osv.except_osv(_('Bad account !'), _('You can not use this general account in this journal !'))
tax_go=False
if 'account_tax_id' in vals and vals['account_tax_id']:
tax_id=tax_obj.browse(cr,uid,vals['account_tax_id'])
if vals['debit']:
vals['amount_taxed']=tax_obj.compute(cr,uid,[tax_id],vals['debit'],1.00)[0]['amount']
vals['debit'] +=vals['amount_taxed']
if vals['credit']:
vals['amount_taxed']=tax_obj.compute(cr,uid,[tax_id],vals['credit'],1.00)[0]['amount']
vals['credit'] +=vals['amount_taxed']
fields=[x for x in vals]
tax_go=True
result = super(osv.osv, self).create(cr, uid, vals, context)
if tax_go:
context['tax_line']=True
if vals['amount_taxed']:
data_tax=self._default_get(cr, uid, fields, context=context)
self.create(cr,uid,data_tax)
if check:
self.pool.get('account.move').validate(cr, uid, [vals['move_id']], context)
return result

View File

@ -674,6 +674,8 @@
<field name="journal_id"/>
<field name="debit" sum="Total debit"/>
<field name="credit" sum="Total credit"/>
<field name="account_tax_id"/>
<field name="analytic_account_id"/>
<field name="amount_currency"/>
<field name="currency_id"/>
<field name="state"/>
@ -716,6 +718,9 @@
<newline/>
<field name="tax_code_id"/>
<field name="tax_amount"/>
<newline/>
<field name="account_tax_id"/>
<field name="analytic_account_id"/>
<separator colspan="4" string="State"/>
<field name="journal_id" select="2"/>
@ -764,6 +769,9 @@
<field name="date_created"/>
<field name="date_created"/>
<field name="blocked" select="3"/>
<newline/>
<field name="account_tax_id"/>
<field name="analytic_account_id"/>
<separator colspan="4" string="State"/>
<newline/>
@ -1365,6 +1373,8 @@
<field name="tax_amount"/>
<field name="debit" sum="Total debit"/>
<field name="credit" sum="Total credit"/>
<field name="account_tax_id"/>
<field name="analytic_account_id"/>
<field name="state"/>
</tree>
</field>

View File

@ -74,6 +74,18 @@
<field name="field">credit</field>
<field eval="11" name="sequence"/>
</record>
<record id="bank_col11" model="account.journal.column">
<field name="view_id" ref="account_journal_bank_view"/>
<field name="name">Tax</field>
<field name="field">account_tax_id</field>
<field eval="12" name="sequence"/>
</record>
<record id="bank_col12" model="account.journal.column">
<field name="view_id" ref="account_journal_bank_view"/>
<field name="name">Analytic Account</field>
<field name="field">analytic_account_id</field>
<field eval="13" name="sequence"/>
</record>
<record id="bank_col3" model="account.journal.column">
<field name="view_id" ref="account_journal_bank_view"/>
<field name="name">Ref</field>
@ -84,7 +96,7 @@
<field name="view_id" ref="account_journal_bank_view"/>
<field name="name">State</field>
<field name="field">state</field>
<field eval="12" name="sequence"/>
<field eval="14" name="sequence"/>
</record>
<record id="account_journal_bank_view_multi" model="account.journal.view">
@ -142,17 +154,29 @@
<field name="field">credit</field>
<field eval="11" name="sequence"/>
</record>
<record id="bank_col11_multi" model="account.journal.column">
<field name="view_id" ref="account_journal_bank_view_multi"/>
<field name="name">Tax</field>
<field name="field">account_tax_id</field>
<field eval="12" name="sequence"/>
</record>
<record id="bank_col12_multi" model="account.journal.column">
<field name="view_id" ref="account_journal_bank_view_multi"/>
<field name="name">Analytic Account</field>
<field name="field">analytic_account_id</field>
<field eval="13" name="sequence"/>
</record>
<record id="bank_col17_multi" model="account.journal.column">
<field name="view_id" ref="account_journal_bank_view_multi"/>
<field name="name">Currency Amt.</field>
<field name="field">amount_currency</field>
<field eval="12" name="sequence"/>
<field eval="14" name="sequence"/>
</record>
<record id="bank_col18_multi" model="account.journal.column">
<field name="view_id" ref="account_journal_bank_view_multi"/>
<field name="name">Currency</field>
<field name="field">currency_id</field>
<field eval="13" name="sequence"/>
<field eval="15" name="sequence"/>
</record>
<record id="bank_col3_multi" model="account.journal.column">
<field name="view_id" ref="account_journal_bank_view_multi"/>
@ -164,7 +188,7 @@
<field name="view_id" ref="account_journal_bank_view_multi"/>
<field name="name">State</field>
<field name="field">state</field>
<field eval="14" name="sequence"/>
<field eval="16" name="sequence"/>
</record>
@ -229,23 +253,35 @@
<field name="field">credit</field>
<field eval="9" name="sequence"/>
</record>
<record id="journal_col10" model="account.journal.column">
<field name="view_id" ref="account_journal_view"/>
<field name="name">Tax</field>
<field name="field">account_tax_id</field>
<field eval="10" name="sequence"/>
</record>
<record id="journal_col11" model="account.journal.column">
<field name="view_id" ref="account_journal_view"/>
<field name="name">Analytic Account</field>
<field name="field">analytic_account_id</field>
<field eval="11" name="sequence"/>
</record>
<record id="journal_col25" model="account.journal.column">
<field name="view_id" ref="account_journal_view"/>
<field name="name">Tax Acc.</field>
<field name="field">tax_code_id</field>
<field eval="10" name="sequence"/>
<field eval="12" name="sequence"/>
</record>
<record id="journal_col26" model="account.journal.column">
<field name="view_id" ref="account_journal_view"/>
<field name="name">Tax</field>
<field name="field">tax_amount</field>
<field eval="11" name="sequence"/>
<field eval="13" name="sequence"/>
</record>
<record id="journal_col24" model="account.journal.column">
<field name="view_id" ref="account_journal_view"/>
<field name="name">State</field>
<field name="field">state</field>
<field eval="12" name="sequence"/>
<field eval="14" name="sequence"/>
</record>