From 656fef712b57e64a1d539d93b2f57b4e6472155b Mon Sep 17 00:00:00 2001 From: "Denis Ledoux dle@openerp.com" <> Date: Wed, 3 Oct 2012 16:57:57 +0200 Subject: [PATCH] [IMP]Odometer not inherited anymore, many2one with function field bzr revid: dle@openerp.com-20121003145757-9fbmbbnkb33nf7lk --- addons/fleet/fleet.py | 216 ++++++++++++++++++++++++++++++++---- addons/fleet/fleet_view.xml | 34 +++--- 2 files changed, 211 insertions(+), 39 deletions(-) diff --git a/addons/fleet/fleet.py b/addons/fleet/fleet.py index 529ae35fac8..4b874ab1680 100644 --- a/addons/fleet/fleet.py +++ b/addons/fleet/fleet.py @@ -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), } \ No newline at end of file diff --git a/addons/fleet/fleet_view.xml b/addons/fleet/fleet_view.xml index 72b973c2ccc..c8ce7fc44c1 100644 --- a/addons/fleet/fleet_view.xml +++ b/addons/fleet/fleet_view.xml @@ -247,8 +247,7 @@ - - + @@ -386,8 +385,8 @@
- - + +
@@ -412,8 +411,7 @@ - - + @@ -436,10 +434,10 @@ -
- - -
+
+ + +
@@ -501,8 +499,8 @@
- - + +
@@ -530,11 +528,11 @@ - - - + + + @@ -580,8 +578,8 @@
- - + +
@@ -611,8 +609,6 @@ - -