# -*- coding: utf-8 -*-
##############################################################################
-#
+#
# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
+# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from lxml import etree
_columns={
'name':fields.char('Analytic Distribution',size=64),
'code':fields.char('Distribution Code',size=16),
- 'journal_id': fields.many2one('account.analytic.journal', 'Analytic Journal', required=True),
+ 'journal_id': fields.many2one('account.analytic.journal', 'Analytic Journal' ),
'account_ids':fields.one2many('account.analytic.plan.instance.line','plan_id','Account Id'),
'account1_ids':one2many_mod2('account.analytic.plan.instance.line','plan_id','Account1 Id'),
'account2_ids':one2many_mod2('account.analytic.plan.instance.line','plan_id','Account2 Id'),
'account6_ids':one2many_mod2('account.analytic.plan.instance.line','plan_id','Account6 Id'),
'plan_id':fields.many2one('account.analytic.plan', "Model's Plan"),
}
+
+ def search(self, cr, user, args, offset=0, limit=None, order=None, context=None, count=False):
+ if context.get('journal_id', False):
+ journal = self.pool.get('account.journal').browse(cr, user, [context['journal_id']], context=context)[0]
+ analytic_journal = journal.analytic_journal_id and journal.analytic_journal_id.id or False
+ args.append('|')
+ args.append(('journal_id', '=', analytic_journal))
+ args.append(('journal_id', '=', False))
+ res = super(account_analytic_plan_instance, self).search(cr, user, args, offset=offset, limit=limit, order=order,
+ context=context, count=count)
+ return res
+
def copy(self, cr, uid, id, default=None, context=None):
if not default:
default = {}
res ['analytics_id']=line.analytics_id and line.analytics_id.id or False
return res
- def product_id_change(self, cr, uid, ids, product, uom, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, address_invoice_id=False, context=None):
- res_prod = super(account_invoice_line,self).product_id_change(cr, uid, ids, product, uom, qty, name, type, partner_id, fposition_id, price_unit, address_invoice_id, context)
+ def product_id_change(self, cr, uid, ids, product, uom, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, address_invoice_id=False, currency_id=False, context=None):
+ res_prod = super(account_invoice_line,self).product_id_change(cr, uid, ids, product, uom, qty, name, type, partner_id, fposition_id, price_unit, address_invoice_id, currency_id, context=context)
rec = self.pool.get('account.analytic.default').account_get(cr, uid, product, partner_id, uid, time.strftime('%Y-%m-%d'), context)
if rec and rec.analytics_id:
res_prod['value'].update({'analytics_id':rec.analytics_id.id})
super(account_move_line, self).create_analytic_lines(cr, uid, ids, context)
for line in self.browse(cr, uid, ids, context):
if line.analytics_id:
+ if not line.journal_id.analytic_journal_id:
+ raise osv.except_osv(_('No Analytic Journal !'),_("You have to define an analytic journal on the '%s' journal!") % (line.journal_id.name,))
+
toremove = self.pool.get('account.analytic.line').search(cr, uid, [('move_id','=',line.id)], context=context)
if toremove:
line.unlink(cr, uid, toremove, context=context)
'amount': amt,
'general_account_id': line.account_id.id,
'move_id': line.id,
- 'journal_id': line.analytics_id.journal_id.id,
+ 'journal_id': line.journal_id.analytic_journal_id.id,
'ref': line.ref,
}
ali_id=self.pool.get('account.analytic.line').create(cr,uid,al_vals)
}
analytic_default()
+class sale_order_line(osv.osv):
+ _inherit = 'sale.order.line'
+
+ # Method overridden to set the analytic account by default on criterion match
+ def invoice_line_create(self, cr, uid, ids, context={}):
+ create_ids = super(sale_order_line,self).invoice_line_create(cr, uid, ids, context)
+ if ids:
+ sale_line_obj = self.browse(cr, uid, ids[0], context)
+ pool_inv_line = self.pool.get('account.invoice.line')
+
+ for line in pool_inv_line.browse(cr, uid, create_ids, context):
+ rec = self.pool.get('account.analytic.default').account_get(cr, uid, line.product_id.id, sale_line_obj.order_id.partner_id.id, uid, time.strftime('%Y-%m-%d'), context)
+
+ if rec:
+ pool_inv_line.write(cr, uid, [line.id], {'analytics_id':rec.analytics_id.id}, context=context)
+ return create_ids
+
+sale_order_line()
+
+
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: