2018-01-16 06:58:15 +01:00
# -*- coding: utf-8 -*-
2018-01-16 11:34:37 +01:00
from flectra import api , fields , models , _
2018-01-16 06:58:15 +01:00
from math import copysign
class AccountAnalyticLine ( models . Model ) :
_inherit = ' account.analytic.line '
_description = ' Analytic Line '
_order = ' date desc '
amount = fields . Monetary ( currency_field = ' company_currency_id ' )
product_uom_id = fields . Many2one ( ' product.uom ' , string = ' Unit of Measure ' )
product_id = fields . Many2one ( ' product.product ' , string = ' Product ' )
general_account_id = fields . Many2one ( ' account.account ' , string = ' Financial Account ' , ondelete = ' restrict ' , readonly = True ,
related = ' move_id.account_id ' , store = True , domain = [ ( ' deprecated ' , ' = ' , False ) ] )
move_id = fields . Many2one ( ' account.move.line ' , string = ' Move Line ' , ondelete = ' cascade ' , index = True )
code = fields . Char ( size = 8 )
ref = fields . Char ( string = ' Ref. ' )
company_currency_id = fields . Many2one ( ' res.currency ' , related = ' company_id.currency_id ' , readonly = True ,
help = ' Utility field to express amount currency ' )
currency_id = fields . Many2one ( ' res.currency ' , related = ' move_id.currency_id ' , string = ' Account Currency ' , store = True , help = " The related account currency if not equal to the company one. " , readonly = True )
amount_currency = fields . Monetary ( related = ' move_id.amount_currency ' , store = True , help = " The amount expressed in the related account currency if not equal to the company one. " , readonly = True )
analytic_amount_currency = fields . Monetary ( string = ' Amount Currency ' , compute = " _get_analytic_amount_currency " , help = " The amount expressed in the related account currency if not equal to the company one. " , readonly = True )
partner_id = fields . Many2one ( ' res.partner ' , related = ' account_id.partner_id ' , string = ' Partner ' , store = True , readonly = True )
def _get_analytic_amount_currency ( self ) :
for line in self :
line . analytic_amount_currency = abs ( line . amount_currency ) * copysign ( 1 , line . amount )
@api.v8
@api.onchange ( ' product_id ' , ' product_uom_id ' , ' unit_amount ' , ' currency_id ' )
def on_change_unit_amount ( self ) :
if not self . product_id :
return { }
result = 0.0
prod_accounts = self . product_id . product_tmpl_id . _get_product_accounts ( )
unit = self . product_uom_id
account = prod_accounts [ ' expense ' ]
if not unit or self . product_id . uom_po_id . category_id . id != unit . category_id . id :
unit = self . product_id . uom_po_id
# Compute based on pricetype
amount_unit = self . product_id . price_compute ( ' standard_price ' , uom = unit ) [ self . product_id . id ]
amount = amount_unit * self . unit_amount or 0.0
result = self . currency_id . round ( amount ) * - 1
self . amount = result
self . general_account_id = account
self . product_uom_id = unit
@api.model
def view_header_get ( self , view_id , view_type ) :
context = ( self . _context or { } )
header = False
if context . get ( ' account_id ' , False ) :
analytic_account = self . env [ ' account.analytic.account ' ] . search ( [ ( ' id ' , ' = ' , context [ ' account_id ' ] ) ] , limit = 1 )
header = _ ( ' Entries: ' ) + ( analytic_account . name or ' ' )
return header