[IMP]Odometer not inherited anymore, many2one with function field

bzr revid: dle@openerp.com-20121003145757-9fbmbbnkb33nf7lk
This commit is contained in:
Denis Ledoux dle@openerp.com 2012-10-03 16:57:57 +02:00
parent 7a8b30aeba
commit 656fef712b
2 changed files with 211 additions and 39 deletions

View File

@ -3,7 +3,13 @@ from osv import osv, fields
import time
import tools
import datetime
from osv.orm import except_orm
from tools.translate import _
############################
############################
#Vehicle.cost class
############################
############################
class fleet_vehicle_cost(osv.Model):
_name = 'fleet.vehicle.cost'
@ -14,12 +20,11 @@ class fleet_vehicle_cost(osv.Model):
'vehicle_id': fields.many2one('fleet.vehicle', 'Vehicle', required=True, help='Vehicle concerned by this cost'),
}
class fleet_vehicle_model_type(osv.Model):
_name = 'fleet.vehicle.type'
_description = 'Type of the vehicle'
_columns = {
'name' : fields.char('Name', size=32, required=True),
}
############################
############################
#Vehicle.tag class
############################
############################
class fleet_vehicle_tag(osv.Model):
_name = 'fleet.vehicle.tag'
@ -27,6 +32,12 @@ class fleet_vehicle_tag(osv.Model):
'name': fields.char('Name', required=True, translate=True),
}
############################
############################
#Vehicle.state class
############################
############################
class fleet_vehicle_state(osv.Model):
_name = 'fleet.vehicle.state'
_columns = {
@ -35,6 +46,12 @@ class fleet_vehicle_state(osv.Model):
}
_order = 'sequence asc'
############################
############################
#Vehicle.model class
############################
############################
class fleet_vehicle_model(osv.Model):
def name_get(self, cr, uid, ids, context=None):
@ -81,6 +98,12 @@ class fleet_vehicle_model(osv.Model):
'image_small': fields.related('brand','image_small',type="binary",string="Logo",store=False),
}
############################
############################
#Vehicle.brand class
############################
############################
class fleet_vehicle_model_brand(osv.Model):
_name = 'fleet.vehicle.model.brand'
_description = 'Brand model of the vehicle'
@ -119,6 +142,13 @@ class fleet_vehicle_model_brand(osv.Model):
"Use this field anywhere a small image is required."),
}
############################
############################
#Vehicle class
############################
############################
class fleet_vehicle(osv.Model):
_inherit = 'mail.thread'
@ -277,6 +307,7 @@ class fleet_vehicle(osv.Model):
_order= 'name asc'
_columns = {
'name' : fields.function(_vehicle_name_get_fnc, type="char", string='Name', store=True),
'company_id': fields.many2one('res.company', 'Company'),
'license_plate' : fields.char('License Plate', size=32, required=True, help='License plate number of the vehicle (ie: plate number for a car)'),
'vin_sn' : fields.char('Chassis Number', size=32, required=False, help='Unique number written on the vehicle motor (VIN/SN number)'),
@ -364,6 +395,12 @@ class fleet_vehicle(osv.Model):
pass
return vehicle_id
############################
############################
#Vehicle.odometer class
############################
############################
class fleet_vehicle_odometer(osv.Model):
_name='fleet.vehicle.odometer'
_description='Odometer log for a vehicle'
@ -388,7 +425,6 @@ class fleet_vehicle_odometer(osv.Model):
def _vehicle_log_name_get_fnc(self, cr, uid, ids, prop, unknow_none, context=None):
res = self.name_get(cr, uid, ids, context=context)
return dict(res)
def on_change_vehicle(self, cr, uid, ids, vehicle_id, context=None):
if not vehicle_id:
@ -407,17 +443,31 @@ class fleet_vehicle_odometer(osv.Model):
'date' : fields.date('Purchase Date'),
'value' : fields.float('Odometer Value',group_operator="max"),
'unit': fields.related('vehicle_id','odometer_unit',type="char",string="Unit",store=False, readonly=True),
'vehicle_id' : fields.many2one('fleet.vehicle', 'Vehicle', required=True),
'unit': fields.related('vehicle_id','odometer_unit',type="char",string="Unit",store=False, readonly=True),
}
_defaults = {
'date' : time.strftime('%Y-%m-%d')
}
############################
############################
#Vehicle.log classes
############################
############################
############################
############################
#Vehicle.log.fuel class
############################
############################
class fleet_vehicle_log_fuel(osv.Model):
_inherits = {'fleet.vehicle.odometer': 'odometer_id'}
#_inherits = {'fleet.vehicle.odometer': 'odometer_id'}
def on_change_vehicle(self, cr, uid, ids, vehicle_id, context=None):
@ -467,12 +517,39 @@ class fleet_vehicle_log_fuel(osv.Model):
else :
return {}
def _get_odometer(self, cr, uid, ids, odometer_id, arg, context):
res = dict.fromkeys(ids, False)
for record in self.browse(cr,uid,ids,context=context):
if record.odometer_id:
res[record.id] = record.odometer_id.value
return res
def _set_odometer(self, cr, uid, id, name, value, args=None, context=None):
if value:
try:
value = float(value)
except ValueError:
#_logger.exception(value+' is not a correct odometer value. Please, fill a float for this field')
raise except_orm(_('Error!'), value+' is not a correct odometer value. Please, fill a float for this field')
date = self.browse(cr, uid, id, context=context).date
if not(date):
date = time.strftime('%Y-%m-%d')
vehicle_id = self.browse(cr, uid, id, context=context).vehicle_id
data = {'value' : value,'date' : date,'vehicle_id' : vehicle_id.id}
odometer_id = self.pool.get('fleet.vehicle.odometer').create(cr, uid, data, context=context)
self.write(cr, uid, id, {'odometer_id': odometer_id})
return value
self.write(cr, uid, id, {'odometer_id': ''})
return False
_name = 'fleet.vehicle.log.fuel'
_columns = {
#'name' : fields.char('Name',size=64),
'vehicle_id': fields.many2one('fleet.vehicle', 'Vehicle', required=True, help='Vehicle concerned by this fuel log'),
'date' :fields.date('Refueling Date',help='Date when the refueling has been performed'),
'liter' : fields.float('Liter'),
'price_per_liter' : fields.float('Price Per Liter'),
'amount': fields.float('Total price'),
@ -480,11 +557,22 @@ class fleet_vehicle_log_fuel(osv.Model):
'inv_ref' : fields.char('Invoice Reference', size=64),
'vendor_id' : fields.many2one('res.partner', 'Supplier', domain="[('supplier','=',True)]"),
'notes' : fields.text('Notes'),
'odometer_id' : fields.many2one('fleet.vehicle.odometer', 'Odometer', required=False, help='Odometer measure of the vehicle at the moment of this log'),
'odometer' : fields.function(_get_odometer,fnct_inv=_set_odometer,type='string',string='Odometer',store=False),
'odometer_unit': fields.related('vehicle_id','odometer_unit',type="char",string="Unit",store=False, readonly=True),
}
_defaults = {
'purchaser_id': lambda self, cr, uid, ctx: uid,
'date' : time.strftime('%Y-%m-%d'),
}
############################
############################
#Vehicle.log.service class
############################
############################
class fleet_vehicle_log_services(osv.Model):
def on_change_vehicle(self, cr, uid, ids, vehicle_id, context=None):
@ -496,16 +584,41 @@ class fleet_vehicle_log_services(osv.Model):
return {
'value' : {
'unit' : odometer_unit,
'odometer_unit' : odometer_unit,
}
}
_inherits = {'fleet.vehicle.odometer': 'odometer_id'}
def _get_odometer(self, cr, uid, ids, odometer_id, arg, context):
res = dict.fromkeys(ids, False)
for record in self.browse(cr,uid,ids,context=context):
if record.odometer_id:
res[record.id] = record.odometer_id.value
return res
def _set_odometer(self, cr, uid, id, name, value, args=None, context=None):
if value:
try:
value = float(value)
except ValueError:
#_logger.exception(value+' is not a correct odometer value. Please, fill a float for this field')
raise except_orm(_('Error!'), value+' is not a correct odometer value. Please, fill a float for this field')
date = self.browse(cr, uid, id, context=context).date
if not(date):
date = time.strftime('%Y-%m-%d')
vehicle_id = self.browse(cr, uid, id, context=context).vehicle_id
data = {'value' : value,'date' : date,'vehicle_id' : vehicle_id.id}
odometer_id = self.pool.get('fleet.vehicle.odometer').create(cr, uid, data, context=context)
self.write(cr, uid, id, {'odometer_id': odometer_id})
return value
self.write(cr, uid, id, {'odometer_id': ''})
return False
_name = 'fleet.vehicle.log.services'
_columns = {
#'name' : fields.char('Name',size=64),
'vehicle_id': fields.many2one('fleet.vehicle', 'Vehicle', required=True, help='Vehicle concerned by this services log'),
'date' :fields.date('Service Date',help='Date when the service will be/has been performed'),
'amount' :fields.float('Cost', help="Total cost of the service"),
'service_ids' :fields.many2many('fleet.service.type','fleet_vehicle_service_type_rel','vehicle_service_type_id','service_id','Services completed'),
@ -513,20 +626,61 @@ class fleet_vehicle_log_services(osv.Model):
'inv_ref' : fields.char('Invoice Reference', size=64),
'vendor_id' :fields.many2one('res.partner', 'Supplier', domain="[('supplier','=',True)]"),
'notes' : fields.text('Notes'),
'odometer_id' : fields.many2one('fleet.vehicle.odometer', 'Odometer', required=False, help='Odometer measure of the vehicle at the moment of this log'),
'odometer' : fields.function(_get_odometer,fnct_inv=_set_odometer,type='char',string='Odometer',store=False),
'odometer_unit': fields.related('vehicle_id','odometer_unit',type="char",string="Unit",store=False, readonly=True),
}
_defaults = {
'purchaser_id': lambda self, cr, uid, ctx: uid,
'date' : time.strftime('%Y-%m-%d'),
}
class fleet_contract_type(osv.Model):
_name = 'fleet.contract.type'
############################
############################
#Vehicle.service.type class
############################
############################
class fleet_service_type(osv.Model):
_name = 'fleet.service.type'
_columns = {
'name': fields.char('Name', required=True, translate=True),
}
############################
############################
#Vehicle.log.contract class
############################
############################
class fleet_vehicle_log_contract(osv.Model):
_inherits = {'fleet.vehicle.odometer': 'odometer_id'}
def _get_odometer(self, cr, uid, ids, odometer_id, arg, context):
res = dict.fromkeys(ids, False)
for record in self.browse(cr,uid,ids,context=context):
if record.odometer_id:
res[record.id] = record.odometer_id.value
return res
def _set_odometer(self, cr, uid, id, name, value, args=None, context=None):
if value:
try:
value = float(value)
except ValueError:
#_logger.exception(value+' is not a correct odometer value. Please, fill a float for this field')
raise except_orm(_('Error!'), value+' is not a correct odometer value. Please, fill a float for this field')
date = self.browse(cr, uid, id, context=context).date
if not(date):
date = time.strftime('%Y-%m-%d')
vehicle_id = self.browse(cr, uid, id, context=context).vehicle_id
data = {'value' : value,'date' : date,'vehicle_id' : vehicle_id.id}
odometer_id = self.pool.get('fleet.vehicle.odometer').create(cr, uid, data, context=context)
self.write(cr, uid, id, {'odometer_id': odometer_id})
return value
self.write(cr, uid, id, {'odometer_id': ''})
return False
def on_change_vehicle(self, cr, uid, ids, vehicle_id, context=None):
@ -537,7 +691,7 @@ class fleet_vehicle_log_contract(osv.Model):
return {
'value' : {
'unit' : odometer_unit,
'odometer_unit' : odometer_unit,
}
}
@ -583,7 +737,8 @@ class fleet_vehicle_log_contract(osv.Model):
_columns = {
#'name' : fields.char('Name',size=64),
'vehicle_id': fields.many2one('fleet.vehicle', 'Vehicle', required=True, help='Vehicle concerned by this contract log'),
'date' :fields.date('Contract Date',help='Date when the contract has been signed'),
'contract_type' : fields.many2one('fleet.contract.type', 'Type', required=False, help='Type of the contract'),
'start_date' : fields.date('Start Date', required=False, help='Date when the coverage of the contract begins'),
'expiration_date' : fields.date('Expiration Date', required=False, help='Date when the coverage of the contract expirates (by default, one year after begin date)'),
@ -596,6 +751,10 @@ class fleet_vehicle_log_contract(osv.Model):
'reminder' : fields.boolean('Renewal Reminder', help="Warn the user when this contract needs to be renewed"),
'notes' : fields.text('Terms and Conditions'),
'costs' : fields.one2many('fleet.vehicle.cost', 'vehicle_id', 'Costs covered'),
'odometer_id' : fields.many2one('fleet.vehicle.odometer', 'Odometer', required=False, help='Odometer measure of the vehicle at the moment of this log'),
'odometer' : fields.function(_get_odometer,fnct_inv=_set_odometer,type='string',string='Odometer',store=False),
'odometer_unit': fields.related('vehicle_id','odometer_unit',type="char",string="Unit",store=False, readonly=True),
}
_defaults = {
'purchaser_id': lambda self, cr, uid, ctx: uid,
@ -613,8 +772,25 @@ class fleet_vehicle_log_contract(osv.Model):
self.write(cr, uid, ids, {'state': 'open'})
return True
class fleet_service_type(osv.Model):
_name = 'fleet.service.type'
############################
############################
#Vehicle.log.contract.type class
############################
############################
class fleet_contract_type(osv.Model):
_name = 'fleet.contract.type'
_columns = {
'name': fields.char('Name', required=True, translate=True),
}
############################
############################
#Vehicle.log.contract.state class
############################
############################
class fleet_contract_state(osv.Model):
_name = 'fleet.contract.state'
_columns = {
'name':fields.char('Contract Status',size=32),
}

View File

@ -247,8 +247,7 @@
<field name="driver" />
<field name="location" />
<field name="state" />
<field name="odometer" />
<field name="odometer_unit" />
<field name="image" />
<field name="tag_ids" />
<field name="contract_renewal_due_soon" />
@ -386,8 +385,8 @@
<group col="2">
<group string="Odometer details">
<div>
<field name="value" class="oe_inline"/>
<field name="unit" class="oe_inline"/>
<field name="odometer" class="oe_inline"/>
<field name="odometer_unit" class="oe_inline"/>
</div>
</group>
<group></group>
@ -412,8 +411,7 @@
<field name="warning_date" invisible="1"/>
<field name="insurer_id" />
<field name="price" />
<field name="value" />
<field name="unit" />
<field name="notes" />
</tree>
</field>
@ -436,10 +434,10 @@
<sheet>
<group>
<field name="vehicle_id" on_change="on_change_vehicle(vehicle_id)"/>
<div>
<field name="value" class="oe_inline"/>
<field name="unit" class="oe_inline"/>
</div>
<div>
<field name="value" class="oe_inline"/>
<field name="unit" class="oe_inline"/>
</div>
<field name="date" />
</group>
</sheet>
@ -501,8 +499,8 @@
<group col="2">
<group string="Odometer Details">
<div>
<field name="value" class="oe_inline"/>
<field name="unit" class="oe_inline"/>
<field name="odometer" class="oe_inline"/>
<field name="odometer_unit" class="oe_inline"/>
</div>
</group>
<group string="Additional Details">
@ -530,11 +528,11 @@
<field name="price_per_liter" />
<field name="amount" />
<field name="purchaser_id" />
<field name="date" />
<field name="value" />
<field name="unit" />
<field name="date" />
<field name="inv_ref" />
<field name="vendor_id" />
<field name="odometer" />
<field name="odometer_unit" />
</tree>
</field>
</record>
@ -580,8 +578,8 @@
<group col="2">
<group string="Odometer Details">
<div>
<field name="value" class="oe_inline"/>
<field name="unit" class="oe_inline"/>
<field name="odometer" class="oe_inline"/>
<field name="odometer_unit" class="oe_inline"/>
</div>
</group>
<group string="Additional Details">
@ -611,8 +609,6 @@
<field name="purchaser_id" />
<field name="vendor_id" />
<field name="inv_ref" />
<field name="value" />
<field name="unit" />
</tree>
</field>
</record>