summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--addons/fleet/__init__.py1
-rw-r--r--addons/fleet/__manifest__.py8
-rw-r--r--addons/fleet/data/fleet_data.xml15
-rw-r--r--addons/fleet/data/fleet_demo.xml679
-rw-r--r--addons/fleet/models/fleet_vehicle.py81
-rw-r--r--addons/fleet/models/fleet_vehicle_cost.py315
-rw-r--r--addons/fleet/models/fleet_vehicle_model.py31
-rw-r--r--addons/fleet/report/__init__.py1
-rw-r--r--addons/fleet/report/fleet_report.py131
-rw-r--r--addons/fleet/security/fleet_security.xml30
-rw-r--r--addons/fleet/security/ir.model.access.csv4
-rw-r--r--addons/fleet/views/fleet_board_view.xml98
-rw-r--r--addons/fleet/views/fleet_vehicle_cost_views.xml434
-rw-r--r--addons/fleet/views/fleet_vehicle_model_views.xml10
-rw-r--r--addons/fleet/views/fleet_vehicle_views.xml58
15 files changed, 479 insertions, 1417 deletions
diff --git a/addons/fleet/__init__.py b/addons/fleet/__init__.py
index be9f4fab00a..8484f21c236 100644
--- a/addons/fleet/__init__.py
+++ b/addons/fleet/__init__.py
@@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import models
+from . import report
diff --git a/addons/fleet/__manifest__.py b/addons/fleet/__manifest__.py
index a61d2508b9d..548c08330d3 100644
--- a/addons/fleet/__manifest__.py
+++ b/addons/fleet/__manifest__.py
@@ -11,16 +11,16 @@
Vehicle, leasing, insurances, cost
==================================
With this module, Odoo helps you managing all your vehicles, the
-contracts associated to those vehicle as well as services, fuel log
-entries, costs and many other features necessary to the management
-of your fleet of vehicle(s)
+contracts associated to those vehicle as well as services, costs
+and many other features necessary to the management of your fleet
+of vehicle(s)
Main Features
-------------
* Add vehicles to your fleet
* Manage contracts for vehicles
* Reminder when a contract reach its expiration date
-* Add services, fuel log entry, odometer values for all vehicles
+* Add services, odometer values for all vehicles
* Show all costs associated to a vehicle or to a type of service
* Analysis graph for costs
""",
diff --git a/addons/fleet/data/fleet_data.xml b/addons/fleet/data/fleet_data.xml
index 912688a0323..a7d52b59b88 100644
--- a/addons/fleet/data/fleet_data.xml
+++ b/addons/fleet/data/fleet_data.xml
@@ -15,7 +15,22 @@
<record id="fleet_vehicle_state_new_request" model="fleet.vehicle.state">
<field name="name">New Request</field>
+ <field name="sequence">4</field>
+ </record>
+
+ <record id="fleet_vehicle_state_to_order" model="fleet.vehicle.state">
+ <field name="name">To Order</field>
<field name="sequence">5</field>
</record>
+
+ <record id="fleet_vehicle_state_registered" model="fleet.vehicle.state">
+ <field name="name">Registered</field>
+ <field name="sequence">7</field>
+ </record>
+
+ <record id="fleet_vehicle_state_downgraded" model="fleet.vehicle.state">
+ <field name="name">Downgraded</field>
+ <field name="sequence">8</field>
+ </record>
</data>
</odoo>
diff --git a/addons/fleet/data/fleet_demo.xml b/addons/fleet/data/fleet_demo.xml
index 24d3e93783f..f18087df910 100644
--- a/addons/fleet/data/fleet_demo.xml
+++ b/addons/fleet/data/fleet_demo.xml
@@ -1,24 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
-<odoo>
+<odoo noupdate="1">
<!--Users-->
<record id="base.user_demo" model="res.users">
<field name="groups_id" eval="[(4, ref('fleet.fleet_group_manager'))]" />
</record>
- <record id="fleet_vehicle_state_ordered" model="fleet.vehicle.state">
- <field name="name">Ordered</field>
- <field name="sequence">6</field>
- </record>
-
- <record id="fleet_vehicle_state_registered" model="fleet.vehicle.state">
- <field name="name">Registered</field>
- <field name="sequence">7</field>
- </record>
-
- <record id="fleet_vehicle_state_downgraded" model="fleet.vehicle.state">
- <field name="name">Downgraded</field>
- <field name="sequence">8</field>
- </record>
+ <record id="fleet_vehicle_state_ordered" model="fleet.vehicle.state">
+ <field name="name">Ordered</field>
+ <field name="sequence">6</field>
+ </record>
<record id="fleet_vehicle_state_reserve" model="fleet.vehicle.state">
<field name="name">Reserve</field>
@@ -398,7 +388,7 @@
<record id="type_contract_repairing" model="fleet.service.type">
<field name="name">Repairing</field>
- <field name="category">service</field>
+ <field name="category">contract</field>
</record>
<record id="type_service_refueling" model="fleet.service.type">
@@ -474,7 +464,7 @@
<field name="location">Grand-Rosiere</field>
<field name="doors">5</field>
<field name="driver_id" ref="base.user_demo_res_partner" />
- <field name="acquisition_date" eval="time.strftime('%Y-%m-%d 2:00:00')" />
+ <field name="acquisition_date" eval="(DateTime.now() - timedelta(days=336)).strftime('%Y-%m-%d')" />
<field name="state_id" ref="fleet_vehicle_state_registered"/>
<field name="odometer_unit">kilometers</field>
<field name="car_value">20000</field>
@@ -489,7 +479,7 @@
<field name="location">Grand-Rosiere</field>
<field name="doors">5</field>
<field name="driver_id" ref="base.res_partner_address_25" />
- <field name="acquisition_date" eval="time.strftime('%Y-%m-%d 2:00:00')" />
+ <field name="acquisition_date" eval="(DateTime.now() - timedelta(days=233)).strftime('%Y-%m-%d')" />
<field name="state_id" ref="fleet_vehicle_state_downgraded"/>
<field name="odometer_unit">kilometers</field>
<field name="car_value">16000</field>
@@ -543,617 +533,200 @@
<record id="log_odometer_1" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_1" />
- <field name="date">2012-01-01</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=336)).strftime('%Y-%m-%d')" />
<field name="value">0</field>
</record>
- <record id="log_fuel_1" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_1" />
- <field name="vendor_id">6</field>
- <field name="date">2012-01-01</field>
- <field name="liter">40</field>
- <field name="price_per_liter">1.3</field>
- <field name="amount">52</field>
- <field name="inv_ref">67458</field>
- <field name="odometer_id" ref="log_odometer_1" />
- <field name="notes">First refueling</field>
- </record>
-
<record id="log_odometer_2" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_1" />
- <field name="date">2012-02-11</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=304)).strftime('%Y-%m-%d')" />
<field name="value">658</field>
</record>
- <record id="log_fuel_2" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_1" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-02-11</field>
- <field name="liter">50</field>
- <field name="price_per_liter">1.3</field>
- <field name="amount">65</field>
- <field name="inv_ref">455812</field>
- <field name="odometer_id" ref="log_odometer_2" />
- <field name="notes">Second refueling of the car</field>
- </record>
-
<record id="log_odometer_3" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_1" />
- <field name="date">2012-03-23</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=289)).strftime('%Y-%m-%d')" />
<field name="value">1360</field>
</record>
- <record id="log_fuel_3" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_1" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-03-23</field>
- <field name="liter">45</field>
- <field name="price_per_liter">1.32</field>
- <field name="amount">59.4</field>
- <field name="inv_ref">45199877</field>
- <field name="odometer_id" ref="log_odometer_3" />
- <field name="notes">Some notes ...</field>
- </record>
-
<record id="log_odometer_4" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_1" />
- <field name="date">2012-04-5</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=260)).strftime('%Y-%m-%d')" />
<field name="value">2044</field>
</record>
- <record id="log_fuel_4" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_1" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-04-5</field>
- <field name="liter">55</field>
- <field name="price_per_liter">1.32</field>
- <field name="amount">72.6</field>
- <field name="inv_ref">654</field>
- <field name="odometer_id" ref="log_odometer_4" />
- <field name="notes">Some notes</field>
- </record>
-
<record id="log_odometer_5" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_1" />
- <field name="date">2012-04-25</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=230)).strftime('%Y-%m-%d')" />
<field name="value">2756</field>
</record>
- <record id="log_fuel_5" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_1" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-04-25</field>
- <field name="liter">40</field>
- <field name="price_per_liter">1.35</field>
- <field name="amount">54</field>
- <field name="inv_ref">55488</field>
- <field name="odometer_id" ref="log_odometer_5" />
- <field name="notes">Some notes</field>
- </record>
-
<record id="log_odometer_6" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_1" />
- <field name="date">2012-05-15</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=185)).strftime('%Y-%m-%d')" />
<field name="value">3410</field>
</record>
- <record id="log_fuel_6" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_1" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-05-15</field>
- <field name="liter">55.8</field>
- <field name="price_per_liter">1.35</field>
- <field name="amount">75.33</field>
- <field name="inv_ref">4952</field>
- <field name="odometer_id" ref="log_odometer_6" />
- <field name="notes">Some notes</field>
- </record>
-
<record id="log_odometer_7" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_1" />
- <field name="date">2012-06-11</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=165)).strftime('%Y-%m-%d')" />
<field name="value">3750</field>
</record>
- <record id="log_fuel_7" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_1" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-06-11</field>
- <field name="liter">55.8</field>
- <field name="price_per_liter">1.35</field>
- <field name="amount">75.33</field>
- <field name="inv_ref">4952</field>
- <field name="odometer_id" ref="log_odometer_7" />
- <field name="notes">Some notes</field>
- </record>
-
<record id="log_odometer_8" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_1" />
- <field name="date">2012-07-02</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=140)).strftime('%Y-%m-%d')" />
<field name="value">4115</field>
</record>
- <record id="log_fuel_8" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_1" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-07-02</field>
- <field name="liter">47.8</field>
- <field name="price_per_liter">1.35</field>
- <field name="amount">64.53</field>
- <field name="inv_ref">15151</field>
- <field name="odometer_id" ref="log_odometer_8" />
- <field name="notes">Some notes</field>
- </record>
-
<record id="log_odometer_9" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_1" />
- <field name="date">2012-07-28</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=120)).strftime('%Y-%m-%d')" />
<field name="value">4750</field>
</record>
- <record id="log_fuel_9" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_1" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-07-28</field>
- <field name="liter">25</field>
- <field name="price_per_liter">1.35</field>
- <field name="amount">33.75</field>
- <field name="inv_ref">874195</field>
- <field name="odometer_id" ref="log_odometer_9" />
- <field name="notes">Some notes</field>
- </record>
-
<record id="log_odometer_10" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_1" />
- <field name="date">2012-08-17</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=105)).strftime('%Y-%m-%d')" />
<field name="value">5171</field>
</record>
- <record id="log_fuel_10" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_1" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-08-17</field>
- <field name="liter">51.2</field>
- <field name="price_per_liter">1.35</field>
- <field name="amount">69.12</field>
- <field name="inv_ref">4431</field>
- <field name="odometer_id" ref="log_odometer_10" />
- <field name="notes">Some notes</field>
- </record>
-
<record id="log_odometer_11" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_1" />
- <field name="date">2012-09-11</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=85)).strftime('%Y-%m-%d')" />
<field name="value">5873</field>
</record>
- <record id="log_fuel_11" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_1" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-09-11</field>
- <field name="liter">45.36</field>
- <field name="price_per_liter">1.35</field>
- <field name="amount">61.236</field>
- <field name="inv_ref">11234</field>
- <field name="odometer_id" ref="log_odometer_11" />
- <field name="notes">Some notes</field>
- </record>
-
<record id="log_odometer_12" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_1" />
- <field name="date">2012-10-06</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=55)).strftime('%Y-%m-%d')" />
<field name="value">6571</field>
</record>
- <record id="log_fuel_12" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_1" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-10-06</field>
- <field name="liter">53.4</field>
- <field name="price_per_liter">1.37</field>
- <field name="amount">73.158</field>
- <field name="inv_ref">798846</field>
- <field name="odometer_id" ref="log_odometer_12" />
- <field name="notes">Some notes</field>
- </record>
-
<record id="log_odometer_13" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_1" />
- <field name="date">2012-11-02</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=32)).strftime('%Y-%m-%d')" />
<field name="value">7954</field>
</record>
- <record id="log_fuel_13" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_1" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-11-02</field>
- <field name="liter">48.5</field>
- <field name="price_per_liter">1.37</field>
- <field name="amount">66.445</field>
- <field name="inv_ref">7954</field>
- <field name="odometer_id" ref="log_odometer_13" />
- <field name="notes">Some notes</field>
- </record>
-
<record id="log_odometer_14" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_1" />
- <field name="date">2012-12-02</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=2)).strftime('%Y-%m-%d')" />
<field name="value">7981</field>
</record>
- <record id="log_fuel_14" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_1" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-12-02</field>
- <field name="liter">35</field>
- <field name="price_per_liter">1.4</field>
- <field name="amount">49</field>
- <field name="inv_ref">545</field>
- <field name="odometer_id" ref="log_odometer_14" />
- <field name="notes">Some notes</field>
- </record>
-
<record id="log_odometer_15" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_2" />
- <field name="date">2012-01-01</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=233)).strftime('%Y-%m-%d')" />
<field name="value">0</field>
</record>
- <record id="log_fuel_15" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_2" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-01-01</field>
- <field name="liter">45</field>
- <field name="price_per_liter">1.27</field>
- <field name="amount">57.15</field>
- <field name="inv_ref">5881418</field>
- <field name="odometer_id" ref="log_odometer_15" />
- <field name="notes">First refueling</field>
- </record>
-
<record id="log_odometer_16" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_2" />
- <field name="date">2012-02-11</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=233)).strftime('%Y-%m-%d')" />
<field name="value">702</field>
</record>
- <record id="log_fuel_16" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_2" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-02-11</field>
- <field name="liter">30</field>
- <field name="price_per_liter">1.3</field>
- <field name="amount">39</field>
- <field name="inv_ref">884351</field>
- <field name="odometer_id" ref="log_odometer_16" />
- <field name="notes">Second refueling of the car</field>
- </record>
-
<record id="log_odometer_17" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_2" />
- <field name="date">2012-03-23</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=215)).strftime('%Y-%m-%d')" />
<field name="value">1205.4</field>
</record>
- <record id="log_fuel_17" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_2" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-03-23</field>
- <field name="liter">52</field>
- <field name="price_per_liter">1.32</field>
- <field name="amount">68.64</field>
- <field name="inv_ref">984</field>
- <field name="odometer_id" ref="log_odometer_17" />
- <field name="notes">Some notes ...</field>
- </record>
-
<record id="log_odometer_18" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_2" />
- <field name="date">2012-04-5</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=200)).strftime('%Y-%m-%d')" />
<field name="value">2122</field>
</record>
- <record id="log_fuel_18" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_2" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-04-5</field>
- <field name="liter">35</field>
- <field name="price_per_liter">1.32</field>
- <field name="amount">46.2</field>
- <field name="inv_ref">777</field>
- <field name="odometer_id" ref="log_odometer_18" />
- <field name="notes">Some notes</field>
- </record>
-
<record id="log_odometer_19" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_2" />
- <field name="date">2012-04-25</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=180)).strftime('%Y-%m-%d')" />
<field name="value">2430</field>
</record>
- <record id="log_fuel_19" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_2" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-04-25</field>
- <field name="liter">55</field>
- <field name="price_per_liter">1.35</field>
- <field name="amount">74.25</field>
- <field name="inv_ref">4454112</field>
- <field name="odometer_id" ref="log_odometer_19" />
- <field name="notes">Some notes</field>
- </record>
-
<record id="log_odometer_20" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_2" />
- <field name="date">2012-05-15</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=165)).strftime('%Y-%m-%d')" />
<field name="value">3015</field>
</record>
- <record id="log_fuel_20" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_2" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-05-15</field>
- <field name="liter">41.8</field>
- <field name="price_per_liter">1.35</field>
- <field name="amount">56.43</field>
- <field name="inv_ref">98754</field>
- <field name="odometer_id" ref="log_odometer_20" />
- <field name="notes">Some notes</field>
- </record>
-
<record id="log_odometer_21" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_2" />
- <field name="date">2012-06-11</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=150)).strftime('%Y-%m-%d')" />
<field name="value">3602.1</field>
</record>
- <record id="log_fuel_21" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_2" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-06-11</field>
- <field name="liter">50</field>
- <field name="price_per_liter">1.35</field>
- <field name="amount">67.5</field>
- <field name="inv_ref">4952</field>
- <field name="odometer_id" ref="log_odometer_21" />
- <field name="notes">Some notes</field>
- </record>
-
<record id="log_odometer_22" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_2" />
- <field name="date">2012-07-02</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=124)).strftime('%Y-%m-%d')" />
<field name="value">4205.5</field>
</record>
- <record id="log_fuel_22" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_2" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-07-02</field>
- <field name="liter">50</field>
- <field name="price_per_liter">1.35</field>
- <field name="amount">67.5</field>
- <field name="inv_ref">8976435</field>
- <field name="odometer_id" ref="log_odometer_22" />
- <field name="notes">Some notes</field>
- </record>
-
<record id="log_odometer_23" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_2" />
- <field name="date">2012-07-28</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=96)).strftime('%Y-%m-%d')" />
<field name="value">4935</field>
</record>
- <record id="log_fuel_23" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_2" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-07-28</field>
- <field name="liter">50</field>
- <field name="price_per_liter">1.35</field>
- <field name="amount">67.5</field>
- <field name="inv_ref">9564</field>
- <field name="odometer_id" ref="log_odometer_23" />
- <field name="notes">Some notes</field>
- </record>
-
<record id="log_odometer_24" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_2" />
- <field name="date">2012-08-17</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=80)).strftime('%Y-%m-%d')" />
<field name="value">5555</field>
</record>
- <record id="log_fuel_24" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_2" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-08-17</field>
- <field name="liter">20</field>
- <field name="price_per_liter">1.35</field>
- <field name="amount">27</field>
- <field name="inv_ref">975</field>
- <field name="odometer_id" ref="log_odometer_24" />
- <field name="notes">Some notes</field>
- </record>
-
<record id="log_odometer_25" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_2" />
- <field name="date">2012-09-11</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=55)).strftime('%Y-%m-%d')" />
<field name="value">5987</field>
</record>
- <record id="log_fuel_25" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_2" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-09-11</field>
- <field name="liter">44.5</field>
- <field name="price_per_liter">1.35</field>
- <field name="amount">60.075</field>
- <field name="inv_ref">9876</field>
- <field name="odometer_id" ref="log_odometer_25" />
- <field name="notes">Some notes</field>
- </record>
-
<record id="log_odometer_26" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_2" />
- <field name="date">2012-10-06</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=45)).strftime('%Y-%m-%d')" />
<field name="value">6571</field>
</record>
- <record id="log_fuel_26" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_2" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-10-06</field>
- <field name="liter">48.5</field>
- <field name="price_per_liter">1.37</field>
- <field name="amount">66.445</field>
- <field name="inv_ref">786</field>
- <field name="odometer_id" ref="log_odometer_26" />
- <field name="notes">Some notes</field>
- </record>
-
<record id="log_odometer_27" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_2" />
- <field name="date">2012-11-02</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=30)).strftime('%Y-%m-%d')" />
<field name="value">7201.5</field>
</record>
- <record id="log_fuel_27" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_2" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-11-02</field>
- <field name="liter">55</field>
- <field name="price_per_liter">1.37</field>
- <field name="amount">75.35</field>
- <field name="inv_ref">895</field>
- <field name="odometer_id" ref="log_odometer_27" />
- <field name="notes">Some notes</field>
- </record>
-
<record id="log_odometer_28" model="fleet.vehicle.odometer">
<field name="vehicle_id" ref="vehicle_2" />
- <field name="date">2012-12-02</field>
+ <field name="date" eval="(DateTime.now() - timedelta(days=10)).strftime('%Y-%m-%d')" />
<field name="value">8001.2</field>
</record>
- <record id="log_fuel_28" model="fleet.vehicle.log.fuel">
- <field name="purchaser_id" ref="base.res_partner_address_18" />
- <field name="vehicle_id" ref="vehicle_2" />
- <field name="vendor_id" ref="base.res_partner_12"/>
- <field name="date">2012-12-02</field>
- <field name="liter">35</field>
- <field name="price_per_liter">1.4</field>
- <field name="amount">49</field>
- <field name="inv_ref">545</field>
- <field name="odometer_id" ref="log_odometer_28" />
- <field name="notes">Some notes</field>
- </record>
-
- <record id="log_odometer_29" model="fleet.vehicle.odometer">
- <field name="vehicle_id" ref="vehicle_1" />
- <field name="date">2012-10-01</field>
- <field name="value">1000</field>
- </record>
<record id="log_service_1" model="fleet.vehicle.log.services" >
<field name="vehicle_id" ref="vehicle_2" />
<field name="amount">650</field>
- <field name="cost_subtype_id" ref="type_service_service_8"/>
- <field name="date">2012-09-02</field>
+ <field name="service_type_id" ref="type_service_service_8"/>
+ <field name="date" eval="(DateTime.now() - timedelta(days=60)).strftime('%Y-%m-%d')" />
<field name="purchaser_id" ref="base.res_partner_address_18" />
<field name="inv_ref">4586</field>
<field name="vendor_id" ref="base.res_partner_2" />
<field name="notes">Usual vehicle repairing</field>
</record>
- <record id="services_cost_11" model="fleet.vehicle.cost" >
- <field name="vehicle_id" ref="vehicle_2" />
- <field name="amount">50</field>
- <field name="cost_subtype_id" ref="type_service_7"/>
- <field name="date">2012-09-02</field>
- <field name="parent_id" ref="log_service_1_fleet_vehicle_cost" />
- </record>
-
- <record id="services_cost_12" model="fleet.vehicle.cost" >
- <field name="vehicle_id" ref="vehicle_2" />
- <field name="amount">25</field>
- <field name="cost_subtype_id" ref="type_service_8"/>
- <field name="date">2012-09-02</field>
- <field name="parent_id" ref="log_service_1_fleet_vehicle_cost" />
- </record>
-
- <record id="services_cost_13" model="fleet.vehicle.cost" >
- <field name="vehicle_id" ref="vehicle_2" />
- <field name="amount">100</field>
- <field name="cost_subtype_id" ref="type_service_9"/>
- <field name="date">2012-09-02</field>
- <field name="parent_id" ref="log_service_1_fleet_vehicle_cost" />
- </record>
-
<record id="log_service_2" model="fleet.vehicle.log.services" >
<field name="vehicle_id" ref="vehicle_2" />
<field name="amount">350</field>
- <field name="cost_subtype_id" ref="type_service_service_8"/>
- <field name="date">2012-11-02</field>
+ <field name="service_type_id" ref="type_service_service_8"/>
+ <field name="date" eval="(DateTime.now() - timedelta(days=30)).strftime('%Y-%m-%d')" />
<field name="purchaser_id" ref="base.res_partner_address_18" />
<field name="inv_ref">4814</field>
<field name="vendor_id" ref="base.res_partner_2" />
<field name="notes">After crash repairing</field>
</record>
- <record id="services_cost_21" model="fleet.vehicle.cost" >
- <field name="vehicle_id" ref="vehicle_2" />
- <field name="amount">100</field>
- <field name="cost_subtype_id" ref="type_service_10"/>
- <field name="date">2012-11-02</field>
- <field name="parent_id" ref="log_service_2_fleet_vehicle_cost" />
- </record>
-
- <record id="services_cost_22" model="fleet.vehicle.cost" >
- <field name="vehicle_id" ref="vehicle_2" />
- <field name="amount">150</field>
- <field name="cost_subtype_id" ref="type_service_11"/>
- <field name="date">2012-11-02</field>
- <field name="parent_id" ref="log_service_2_fleet_vehicle_cost" />
- </record>
-
- <record id="services_cost_23" model="fleet.vehicle.cost" >
- <field name="vehicle_id" ref="vehicle_2" />
- <field name="amount">100</field>
- <field name="cost_subtype_id" ref="type_service_12"/>
- <field name="date">2012-11-02</field>
- <field name="parent_id" ref="log_service_2_fleet_vehicle_cost" />
- </record>
-
<record id="log_service_3" model="fleet.vehicle.log.services" >
<field name="vehicle_id" ref="vehicle_1" />
<field name="amount">513</field>
- <field name="cost_subtype_id" ref="type_service_service_8"/>
- <field name="date">2012-10-15</field>
+ <field name="service_type_id" ref="type_service_service_8"/>
+ <field name="date" eval="(DateTime.now() - timedelta(days=15)).strftime('%Y-%m-%d')" />
<field name="purchaser_id" ref="base.res_partner_address_18" />
<field name="inv_ref">124</field>
<field name="vendor_id" ref="base.res_partner_2" />
@@ -1163,8 +736,8 @@
<record id="log_service_4" model="fleet.vehicle.log.services" >
<field name="vehicle_id" ref="vehicle_3" />
<field name="amount">412</field>
- <field name="cost_subtype_id" ref="type_service_service_8"/>
- <field name="date">2012-10-08</field>
+ <field name="service_type_id" ref="type_service_service_8"/>
+ <field name="date" eval="(DateTime.now() - timedelta(days=120)).strftime('%Y-%m-%d')" />
<field name="purchaser_id" ref="base.res_partner_address_18" />
<field name="inv_ref">20984</field>
<field name="vendor_id" ref="base.res_partner_2" />
@@ -1174,8 +747,8 @@
<record id="log_service_5" model="fleet.vehicle.log.services" >
<field name="vehicle_id" ref="vehicle_4" />
<field name="amount">275</field>
- <field name="cost_subtype_id" ref="type_service_service_8"/>
- <field name="date">2012-09-25</field>
+ <field name="service_type_id" ref="type_service_service_8"/>
+ <field name="date" eval="(DateTime.now() - timedelta(days=100)).strftime('%Y-%m-%d')" />
<field name="purchaser_id" ref="base.res_partner_address_18" />
<field name="inv_ref">241</field>
<field name="vendor_id" ref="base.res_partner_2" />
@@ -1185,8 +758,8 @@
<record id="log_service_6" model="fleet.vehicle.log.services" >
<field name="vehicle_id" ref="vehicle_5" />
<field name="amount">302</field>
- <field name="cost_subtype_id" ref="type_service_service_8"/>
- <field name="date">2012-09-15</field>
+ <field name="service_type_id" ref="type_service_service_8"/>
+ <field name="date" eval="(DateTime.now() - timedelta(days=65)).strftime('%Y-%m-%d')" />
<field name="purchaser_id" ref="base.res_partner_address_18" />
<field name="inv_ref">22513</field>
<field name="vendor_id" ref="base.res_partner_2" />
@@ -1195,196 +768,90 @@
<record id="log_contract_1" model="fleet.vehicle.log.contract" >
<field name="vehicle_id" ref="vehicle_2" />
+ <field name="cost_subtype_id" ref="type_contract_leasing" />
<field name="amount">0</field>
+ <field name="name">Daily leasing contract</field>
<field name="cost_generated">20</field>
<field name="cost_frequency">daily</field>
- <field name="cost_subtype_id" ref="type_contract_leasing"/>
- <field name="date" eval="time.strftime('%Y-01-01')" />
- <field name="start_date" eval="time.strftime('%Y-01-01')" />
+ <field name="expiration_date" eval="(DateTime.now() - timedelta(days=233)).strftime('%Y-%m-%d')" />
<field name="expiration_date" eval="(DateTime.now() + timedelta(5)).strftime('%Y-%m-%d')" />
<field name="purchaser_id" ref="base.res_partner_address_18" />
<field name="insurer_id" ref="base.res_partner_2" />
<field name="notes">Daily leasing contract</field>
+ <field name="state">open</field>
<field name="user_id" ref="base.user_admin"/>
- </record>
-
- <record id="contract_cost_11" model="fleet.vehicle.cost" >
- <field name="vehicle_id" ref="vehicle_2" />
- <field name="amount">50</field>
- <field name="cost_subtype_id" ref="type_service_service_2"/>
- <field name="date">2012-01-01</field>
- <field name="parent_id" ref="log_contract_1_fleet_vehicle_cost" />
- </record>
-
- <record id="contract_cost_12" model="fleet.vehicle.cost" >
- <field name="vehicle_id" ref="vehicle_2" />
- <field name="amount">25</field>
- <field name="cost_subtype_id" ref="type_service_service_3"/>
- <field name="date">2012-01-01</field>
- <field name="parent_id" ref="log_contract_1_fleet_vehicle_cost" />
- </record>
-
- <record id="contract_cost_13" model="fleet.vehicle.cost" >
- <field name="vehicle_id" ref="vehicle_2" />
- <field name="amount">100</field>
- <field name="cost_subtype_id" ref="type_contract_omnium"/>
- <field name="date">2012-01-01</field>
- <field name="parent_id" ref="log_contract_1_fleet_vehicle_cost" />
+ <field eval="[(6,0,[ref('fleet.type_contract_omnium'),ref('fleet.type_service_service_3'),ref('fleet.type_service_service_2')])]" name="service_ids"/>
</record>
<record id="log_contract_2" model="fleet.vehicle.log.contract" >
<field name="vehicle_id" ref="vehicle_1" />
+ <field name="cost_subtype_id" ref="type_contract_leasing" />
<field name="amount">0</field>
+ <field name="name">Weekly leasing contract</field>
<field name="cost_generated">150</field>
<field name="cost_frequency">weekly</field>
- <field name="cost_subtype_id" ref="type_contract_leasing"/>
<field name="date" eval="time.strftime('%Y-01-01')" />
- <field name="start_date" eval="time.strftime('%Y-01-01')" />
+ <field name="start_date" eval="(DateTime.now() - timedelta(days=289)).strftime('%Y-%m-%d')" />
<field name="expiration_date" eval="(DateTime.now() + timedelta(-1)).strftime('%Y-%m-%d')" />
<field name="purchaser_id" ref="base.res_partner_address_18" />
<field name="insurer_id" ref="base.res_partner_2" />
<field name="notes">Weekly leasing contract</field>
+ <field name="state">open</field>
<field name="user_id" ref="base.user_admin"/>
- </record>
-
- <record id="contract_cost_21" model="fleet.vehicle.cost" >
- <field name="vehicle_id" ref="vehicle_1" />
- <field name="amount">50</field>
- <field name="cost_subtype_id" ref="type_service_service_2"/>
- <field name="date">2012-01-01</field>
- <field name="parent_id" ref="log_contract_2_fleet_vehicle_cost" />
- </record>
-
- <record id="contract_cost_22" model="fleet.vehicle.cost" >
- <field name="vehicle_id" ref="vehicle_1" />
- <field name="amount">25</field>
- <field name="cost_subtype_id" ref="type_service_service_3"/>
- <field name="date">2012-01-01</field>
- <field name="parent_id" ref="log_contract_2_fleet_vehicle_cost" />
- </record>
-
- <record id="contract_cost_23" model="fleet.vehicle.cost" >
- <field name="vehicle_id" ref="vehicle_1" />
- <field name="amount">100</field>
- <field name="cost_subtype_id" ref="type_contract_omnium"/>
- <field name="date">2012-01-01</field>
- <field name="parent_id" ref="log_contract_2_fleet_vehicle_cost" />
+ <field eval="[(6,0,[ref('fleet.type_contract_omnium'),ref('fleet.type_service_service_3'),ref('fleet.type_service_service_2')])]" name="service_ids"/>
</record>
<record id="log_contract_3" model="fleet.vehicle.log.contract" >
<field name="vehicle_id" ref="vehicle_3" />
+ <field name="cost_subtype_id" ref="type_contract_leasing" />
<field name="amount">0</field>
+ <field name="name">Monthly leasing</field>
<field name="cost_generated">400</field>
<field name="cost_frequency">monthly</field>
- <field name="cost_subtype_id" ref="type_contract_leasing"/>
<field name="date" eval="time.strftime('%Y-01-01')"/>
<field name="start_date" eval="time.strftime('%Y-01-01')" />
<field name="expiration_date" eval="time.strftime('%Y-12-31')" />
<field name="purchaser_id" ref="base.res_partner_address_18" />
<field name="insurer_id" ref="base.res_partner_2" />
<field name="notes">Monthly leasing contract</field>
+ <field name="state">open</field>
<field name="user_id" ref="base.user_admin"/>
- </record>
-
- <record id="contract_cost_31" model="fleet.vehicle.cost" >
- <field name="vehicle_id" ref="vehicle_3" />
- <field name="amount">50</field>
- <field name="cost_subtype_id" ref="type_service_service_2"/>
- <field name="date">2012-01-01</field>
- <field name="parent_id" ref="log_contract_3_fleet_vehicle_cost" />
- </record>
-
- <record id="contract_cost_32" model="fleet.vehicle.cost" >
- <field name="vehicle_id" ref="vehicle_3" />
- <field name="amount">25</field>
- <field name="cost_subtype_id" ref="type_service_service_3"/>
- <field name="date">2012-01-01</field>
- <field name="parent_id" ref="log_contract_3_fleet_vehicle_cost" />
- </record>
-
- <record id="contract_cost_33" model="fleet.vehicle.cost" >
- <field name="vehicle_id" ref="vehicle_3" />
- <field name="amount">100</field>
- <field name="cost_subtype_id" ref="type_contract_omnium"/>
- <field name="date">2012-01-01</field>
- <field name="parent_id" ref="log_contract_3_fleet_vehicle_cost" />
+ <field eval="[(6,0,[ref('fleet.type_contract_omnium'),ref('fleet.type_service_service_3'),ref('fleet.type_service_service_2')])]" name="service_ids"/>
</record>
<record id="log_contract_4" model="fleet.vehicle.log.contract" >
<field name="vehicle_id" ref="vehicle_4" />
+ <field name="cost_subtype_id" ref="type_contract_leasing" />
<field name="amount">0</field>
+ <field name="name">Yearly leasing</field>
<field name="cost_generated">4000</field>
<field name="cost_frequency">yearly</field>
- <field name="cost_subtype_id" ref="type_contract_leasing"/>
<field name="date" eval="time.strftime('%Y-01-01')" />
<field name="start_date" eval="time.strftime('%Y-01-01')" />
<field name="expiration_date" eval="time.strftime('%Y-12-31')" />
<field name="purchaser_id" ref="base.res_partner_address_18" />
<field name="insurer_id" ref="base.res_partner_2" />
<field name="notes">Yearly leasing contract</field>
+ <field name="state">open</field>
<field name="user_id" ref="base.user_admin"/>
- </record>
-
- <record id="contract_cost_41" model="fleet.vehicle.cost" >
- <field name="vehicle_id" ref="vehicle_4" />
- <field name="amount">50</field>
- <field name="cost_subtype_id" ref="type_service_service_2"/>
- <field name="date">2012-01-01</field>
- <field name="parent_id" ref="log_contract_4_fleet_vehicle_cost" />
- </record>
-
- <record id="contract_cost_42" model="fleet.vehicle.cost" >
- <field name="vehicle_id" ref="vehicle_4" />
- <field name="amount">25</field>
- <field name="cost_subtype_id" ref="type_service_service_3"/>
- <field name="date">2012-01-01</field>
- <field name="parent_id" ref="log_contract_4_fleet_vehicle_cost" />
- </record>
-
- <record id="contract_cost_43" model="fleet.vehicle.cost" >
- <field name="vehicle_id" ref="vehicle_4" />
- <field name="amount">100</field>
- <field name="cost_subtype_id" ref="type_contract_omnium"/>
- <field name="date">2012-01-01</field>
- <field name="parent_id" ref="log_contract_4_fleet_vehicle_cost" />
+ <field eval="[(6,0,[ref('fleet.type_contract_omnium'),ref('fleet.type_service_service_3'),ref('fleet.type_service_service_2')])]" name="service_ids"/>
</record>
<record id="log_contract_5" model="fleet.vehicle.log.contract" >
<field name="vehicle_id" ref="vehicle_5" />
+ <field name="cost_subtype_id" ref="type_contract_leasing" />
<field name="amount">17000</field>
+ <field name="name">Unique leasing</field>
<field name="cost_generated">0</field>
<field name="cost_frequency">no</field>
- <field name="cost_subtype_id" ref="type_contract_leasing"/>
- <field name="date" eval="time.strftime('2012-01-01')" />
- <field name="start_date" eval="time.strftime('2012-01-01')" />
- <field name="expiration_date" eval="time.strftime('2016-12-31')" />
+ <field name="date" eval="(DateTime.now() - timedelta(days=300)).strftime('%Y-%m-%d')" />
+ <field name="start_date" eval="(DateTime.now() - timedelta(days=300)).strftime('%Y-%m-%d')" />
+ <field name="expiration_date" eval="(DateTime.now() + timedelta(-60)).strftime('%Y-%m-%d')" />
<field name="purchaser_id" ref="base.res_partner_address_18" />
<field name="insurer_id" ref="base.res_partner_2" />
<field name="notes">Unique leasing contract</field>
+ <field name="state">open</field>
<field name="user_id" ref="base.user_admin"/>
- </record>
-
- <record id="contract_cost_51" model="fleet.vehicle.cost" >
- <field name="vehicle_id" ref="vehicle_5" />
- <field name="amount">50</field>
- <field name="cost_subtype_id" ref="type_service_service_2"/>
- <field name="date">2012-01-01</field>
- <field name="parent_id" ref="log_contract_5_fleet_vehicle_cost" />
- </record>
-
- <record id="contract_cost_52" model="fleet.vehicle.cost" >
- <field name="vehicle_id" ref="vehicle_5" />
- <field name="amount">25</field>
- <field name="cost_subtype_id" ref="type_service_service_3"/>
- <field name="date">2012-01-01</field>
- <field name="parent_id" ref="log_contract_5_fleet_vehicle_cost" />
- </record>
-
- <record id="contract_cost_53" model="fleet.vehicle.cost" >
- <field name="vehicle_id" ref="vehicle_5" />
- <field name="amount">100</field>
- <field name="cost_subtype_id" ref="type_contract_omnium"/>
- <field name="date">2012-01-01</field>
- <field name="parent_id" ref="log_contract_5_fleet_vehicle_cost" />
+ <field eval="[(6,0,[ref('fleet.type_contract_omnium'),ref('fleet.type_service_service_3'),ref('fleet.type_service_service_2')])]" name="service_ids"/>
</record>
</odoo>
diff --git a/addons/fleet/models/fleet_vehicle.py b/addons/fleet/models/fleet_vehicle.py
index 6f61451c914..389b77a87a0 100644
--- a/addons/fleet/models/fleet_vehicle.py
+++ b/addons/fleet/models/fleet_vehicle.py
@@ -18,6 +18,7 @@ class FleetVehicle(models.Model):
return state if state and state.id else False
name = fields.Char(compute="_compute_vehicle_name", store=True)
+ description = fields.Text("Vehicle Description")
active = fields.Boolean('Active', default=True, tracking=True)
company_id = fields.Many2one('res.company', 'Company', default=lambda self: self.env.company)
currency_id = fields.Many2one('res.currency', related='company_id.currency_id')
@@ -28,16 +29,21 @@ class FleetVehicle(models.Model):
future_driver_id = fields.Many2one('res.partner', 'Future Driver', tracking=True, help='Next Driver of the vehicle', copy=False, domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]")
model_id = fields.Many2one('fleet.vehicle.model', 'Model',
tracking=True, required=True, help='Model of the vehicle')
- manager_id = fields.Many2one('res.users', related='model_id.manager_id')
+ manager_id = fields.Many2one('res.users', compute='_compute_manager_id', domain=lambda self: [('groups_id', 'in', self.env.ref('fleet.fleet_group_manager').id)], store=True, readonly=False)
+
+ @api.depends('model_id')
+ def _compute_manager_id(self):
+ if self.model_id:
+ self.manager_id = self.model_id.manager_id
+ else:
+ self.manager_id = None
+
brand_id = fields.Many2one('fleet.vehicle.model.brand', 'Brand', related="model_id.brand_id", store=True, readonly=False)
log_drivers = fields.One2many('fleet.vehicle.assignation.log', 'vehicle_id', string='Assignation Logs')
- log_fuel = fields.One2many('fleet.vehicle.log.fuel', 'vehicle_id', 'Fuel Logs')
log_services = fields.One2many('fleet.vehicle.log.services', 'vehicle_id', 'Services Logs')
log_contracts = fields.One2many('fleet.vehicle.log.contract', 'vehicle_id', 'Contracts')
- cost_count = fields.Integer(compute="_compute_count_all", string="Costs")
contract_count = fields.Integer(compute="_compute_count_all", string='Contract Count')
service_count = fields.Integer(compute="_compute_count_all", string='Services')
- fuel_logs_count = fields.Integer(compute="_compute_count_all", string='Fuel Log Count')
odometer_count = fields.Integer(compute="_compute_count_all", string='Odometer')
history_count = fields.Integer(compute="_compute_count_all", string="Drivers History Count")
next_assignation_date = fields.Date('Assignation Date', help='This is the date at which the car will be available, if not set it means available instantly')
@@ -108,16 +114,12 @@ class FleetVehicle(models.Model):
def _compute_count_all(self):
Odometer = self.env['fleet.vehicle.odometer']
- LogFuel = self.env['fleet.vehicle.log.fuel']
LogService = self.env['fleet.vehicle.log.services']
LogContract = self.env['fleet.vehicle.log.contract']
- Cost = self.env['fleet.vehicle.cost']
for record in self:
record.odometer_count = Odometer.search_count([('vehicle_id', '=', record.id)])
- record.fuel_logs_count = LogFuel.search_count([('vehicle_id', '=', record.id)])
record.service_count = LogService.search_count([('vehicle_id', '=', record.id)])
record.contract_count = LogContract.search_count([('vehicle_id', '=', record.id), ('state', '!=', 'closed')])
- record.cost_count = Cost.search_count([('vehicle_id', '=', record.id), ('parent_id', '=', False)])
record.history_count = self.env['fleet.vehicle.assignation.log'].search_count([('vehicle_id', '=', record.id)])
@api.depends('log_contracts')
@@ -130,7 +132,7 @@ class FleetVehicle(models.Model):
total = 0
name = ''
for element in record.log_contracts:
- if element.state in ('open', 'diesoon', 'expired') and element.expiration_date:
+ if element.state in ('open', 'expired') and element.expiration_date:
current_date_str = fields.Date.context_today(record)
due_time_str = element.expiration_date
current_date = fields.Date.from_string(current_date_str)
@@ -145,11 +147,11 @@ class FleetVehicle(models.Model):
if overdue or due_soon:
log_contract = self.env['fleet.vehicle.log.contract'].search([
('vehicle_id', '=', record.id),
- ('state', 'in', ('open', 'diesoon', 'expired'))
+ ('state', 'in', ('open', 'expired'))
], limit=1, order='expiration_date asc')
if log_contract:
# we display only the name of the oldest overdue/due soon contract
- name = log_contract.cost_subtype_id.name
+ name = log_contract.name
record.contract_renewal_overdue = overdue
record.contract_renewal_due_soon = due_soon
@@ -168,16 +170,11 @@ class FleetVehicle(models.Model):
today = fields.Date.context_today(self)
datetime_today = fields.Datetime.from_string(today)
limit_date = fields.Datetime.to_string(datetime_today + relativedelta(days=+delay_alert_contract))
- self.env.cr.execute("""SELECT cost.vehicle_id,
- count(contract.id) AS contract_number
- FROM fleet_vehicle_cost cost
- LEFT JOIN fleet_vehicle_log_contract contract ON contract.cost_id = cost.id
- WHERE contract.expiration_date IS NOT NULL
- AND contract.expiration_date > %s
- AND contract.expiration_date < %s
- AND contract.state IN ('open', 'diesoon', 'expired')
- GROUP BY cost.vehicle_id""", (today, limit_date))
- res_ids = [x[0] for x in self.env.cr.fetchall()]
+ res_ids = self.env['fleet.vehicle.log.contract'].search([
+ ('expiration_date', '>', today),
+ ('expiration_date', '<', limit_date),
+ ('state', 'in', ['open', 'expired'])
+ ]).mapped('id')
res.append(('id', search_operator, res_ids))
return res
@@ -189,26 +186,26 @@ class FleetVehicle(models.Model):
else:
search_operator = 'not in'
today = fields.Date.context_today(self)
- self.env.cr.execute('''SELECT cost.vehicle_id,
- count(contract.id) AS contract_number
- FROM fleet_vehicle_cost cost
- LEFT JOIN fleet_vehicle_log_contract contract ON contract.cost_id = cost.id
- WHERE contract.expiration_date IS NOT NULL
- AND contract.expiration_date < %s
- AND contract.state IN ('open', 'diesoon', 'expired')
- GROUP BY cost.vehicle_id ''', (today,))
- res_ids = [x[0] for x in self.env.cr.fetchall()]
+ res_ids = self.env['fleet.vehicle.log.contract'].search([
+ ('expiration_date', '!=', False),
+ ('expiration_date', '<', today),
+ ('state', 'in', ['open', 'expired'])
+ ]).mapped('id')
res.append(('id', search_operator, res_ids))
return res
@api.model
def create(self, vals):
- res = super(FleetVehicle, self).create(vals)
+ res = super(FleetVehicle, self.with_context({'odometer_no_chatter': True})).create(vals)
if 'driver_id' in vals and vals['driver_id']:
res.create_driver_history(vals['driver_id'])
if 'future_driver_id' in vals and vals['future_driver_id']:
future_driver = self.env['res.partner'].browse(vals['future_driver_id'])
future_driver.write({'plan_to_change_car': True})
+ for rec in res:
+ if rec.odometer:
+ date = fields.Date.context_today(rec)
+ rec.message_post(body=_("Odometer on %s: %s %s") % (date, rec.odometer, rec.odometer_unit))
return res
def write(self, vals):
@@ -257,6 +254,12 @@ class FleetVehicle(models.Model):
return self.env['fleet.vehicle.state'].search([], order=order)
@api.model
+ def read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True):
+ if 'co2' in fields:
+ fields.remove('co2')
+ return super(FleetVehicle, self).read_group(domain, fields, groupby, offset, limit, orderby, lazy)
+
+ @api.model
def _name_search(self, name, args=None, operator='ilike', limit=100, name_get_uid=None):
args = args or []
if operator == 'ilike' and not (name or '').strip():
@@ -337,6 +340,22 @@ class FleetVehicleOdometer(models.Model):
if self.vehicle_id:
self.unit = self.vehicle_id.odometer_unit
+ @api.model
+ def create(self, vals):
+ odometers = super(FleetVehicleOdometer, self).create(vals)
+
+ for odometer in odometers:
+ if not self.env.context.get('odometer_no_chatter'):
+ odometer.vehicle_id.message_post(body=_("Odometer on %s: %s %s") % (odometer.date, odometer.value, odometer.unit))
+
+ return odometers
+
+ def write(self, vals):
+ odometers = super(FleetVehicleOdometer, self).write(vals)
+ if 'value' in vals and not self.env.context.get('odometer_no_chatter'):
+ for odometer in self:
+ odometer.vehicle_id.message_post(body=_("Odometer on %s: %s %s") % (odometer.date, odometer.value, odometer.unit))
+ return odometers
class FleetVehicleState(models.Model):
_name = 'fleet.vehicle.state'
diff --git a/addons/fleet/models/fleet_vehicle_cost.py b/addons/fleet/models/fleet_vehicle_cost.py
index 69c55dce09a..ab073a6a877 100644
--- a/addons/fleet/models/fleet_vehicle_cost.py
+++ b/addons/fleet/models/fleet_vehicle_cost.py
@@ -6,78 +6,8 @@ from odoo.exceptions import UserError
from dateutil.relativedelta import relativedelta
-
-class FleetVehicleCost(models.Model):
- _name = 'fleet.vehicle.cost'
- _description = 'Cost related to a vehicle'
- _order = 'date desc, vehicle_id asc'
-
- name = fields.Char(related='vehicle_id.name', string='Name', store=True, readonly=False)
- vehicle_id = fields.Many2one('fleet.vehicle', 'Vehicle', required=True, help='Vehicle concerned by this log')
- cost_subtype_id = fields.Many2one('fleet.service.type', 'Type', help='Cost type purchased with this cost')
- amount = fields.Float('Total Price')
- cost_type = fields.Selection([
- ('contract', 'Contract'),
- ('services', 'Services'),
- ('fuel', 'Fuel'),
- ('other', 'Other')
- ], 'Category of the cost', default="other", help='For internal purpose only', required=True)
- parent_id = fields.Many2one('fleet.vehicle.cost', 'Parent', help='Parent cost to this current cost')
- cost_ids = fields.One2many('fleet.vehicle.cost', 'parent_id', 'Included Services', copy=True)
- odometer_id = fields.Many2one('fleet.vehicle.odometer', 'Odometer', help='Odometer measure of the vehicle at the moment of this log')
- odometer = fields.Float(compute="_get_odometer", inverse='_set_odometer', string='Odometer Value',
- help='Odometer measure of the vehicle at the moment of this log')
- odometer_unit = fields.Selection(related='vehicle_id.odometer_unit', string="Unit", readonly=True)
- date = fields.Date(help='Date when the cost has been executed')
- contract_id = fields.Many2one('fleet.vehicle.log.contract', 'Contract', help='Contract attached to this cost')
- auto_generated = fields.Boolean('Automatically Generated', readonly=True)
- description = fields.Char("Cost Description")
- company_id = fields.Many2one('res.company', 'Company', default=lambda self: self.env.company)
- currency_id = fields.Many2one('res.currency', related='company_id.currency_id')
-
- def _get_odometer(self):
- self.odometer = 0.0
- for record in self:
- record.odometer = False
- if record.odometer_id:
- record.odometer = record.odometer_id.value
-
- def _set_odometer(self):
- for record in self:
- if not record.odometer:
- raise UserError(_('Emptying the odometer value of a vehicle is not allowed.'))
- odometer = self.env['fleet.vehicle.odometer'].create({
- 'value': record.odometer,
- 'date': record.date or fields.Date.context_today(record),
- 'vehicle_id': record.vehicle_id.id
- })
- self.odometer_id = odometer
-
- @api.model_create_multi
- def create(self, vals_list):
- for data in vals_list:
- # make sure that the data are consistent with values of parent and contract records given
- if 'parent_id' in data and data['parent_id']:
- parent = self.browse(data['parent_id'])
- data['vehicle_id'] = parent.vehicle_id.id
- data['date'] = parent.date
- data['cost_type'] = parent.cost_type
- if 'contract_id' in data and data['contract_id']:
- contract = self.env['fleet.vehicle.log.contract'].browse(data['contract_id'])
- data['vehicle_id'] = contract.vehicle_id.id
- data['cost_subtype_id'] = contract.cost_subtype_id.id
- data['cost_type'] = contract.cost_type
- if 'odometer' in data and not data['odometer']:
- # if received value for odometer is 0, then remove it from the
- # data as it would result to the creation of a
- # odometer log with 0, which is to be avoided
- del data['odometer']
- return super(FleetVehicleCost, self).create(vals_list)
-
-
class FleetVehicleLogContract(models.Model):
_inherit = ['mail.thread', 'mail.activity.mixin']
- _inherits = {'fleet.vehicle.cost': 'cost_id'}
_name = 'fleet.vehicle.log.contract'
_description = 'Contract information on a vehicle'
_order = 'state desc,expiration_date'
@@ -87,18 +17,13 @@ class FleetVehicleLogContract(models.Model):
start_date = fields.Date.from_string(strdate)
return fields.Date.to_string(start_date + oneyear)
- @api.model
- def default_get(self, default_fields):
- res = super(FleetVehicleLogContract, self).default_get(default_fields)
- contract = self.env.ref('fleet.type_contract_leasing', raise_if_not_found=False)
- res.update({
- 'date': fields.Date.context_today(self),
- 'cost_subtype_id': contract and contract.id or False,
- 'cost_type': 'contract'
- })
- return res
-
- name = fields.Text(compute='_compute_contract_name', store=True)
+ vehicle_id = fields.Many2one('fleet.vehicle', 'Vehicle', default=1, required=True, help='Vehicle concerned by this log')
+ cost_subtype_id = fields.Many2one('fleet.service.type', 'Type', help='Cost type purchased with this cost', domain=[('category', '=', 'contract')])
+ amount = fields.Float('Cost')
+ date = fields.Date(help='Date when the cost has been executed')
+ company_id = fields.Many2one('res.company', 'Company', default=lambda self: self.env.company)
+ currency_id = fields.Many2one('res.currency', related='company_id.currency_id')
+ name = fields.Char(string='Name', compute='_compute_contract_name', store=True)
active = fields.Boolean(default=True)
user_id = fields.Many2one('res.users', 'Responsible', default=lambda self: self.env.user, index=True)
start_date = fields.Date('Contract Start Date', default=fields.Date.context_today,
@@ -108,13 +33,11 @@ class FleetVehicleLogContract(models.Model):
help='Date when the coverage of the contract expirates (by default, one year after begin date)')
days_left = fields.Integer(compute='_compute_days_left', string='Warning Date')
insurer_id = fields.Many2one('res.partner', 'Vendor')
- purchaser_id = fields.Many2one('res.partner', 'Driver', default=lambda self: self.env.user.partner_id.id,
- help='Person to which the contract is signed for')
- ins_ref = fields.Char('Contract Reference', size=64, copy=False)
+ purchaser_id = fields.Many2one(related='vehicle_id.driver_id', string='Driver')
+ ins_ref = fields.Char('Reference', size=64, copy=False)
state = fields.Selection([
('futur', 'Incoming'),
('open', 'In Progress'),
- ('diesoon', 'Expiring Soon'),
('expired', 'Expired'),
('closed', 'Closed')
], 'Status', default='open', readonly=True,
@@ -122,34 +45,22 @@ class FleetVehicleLogContract(models.Model):
tracking=True,
copy=False)
notes = fields.Text('Terms and Conditions', help='Write here all supplementary information relative to this contract', copy=False)
- cost_generated = fields.Float('Recurring Cost Amount', tracking=True,
- help="Costs paid at regular intervals, depending on the cost frequency. "
- "If the cost frequency is set to unique, the cost will be logged at the start date")
+ cost_generated = fields.Float('Recurring Cost')
cost_frequency = fields.Selection([
('no', 'No'),
('daily', 'Daily'),
('weekly', 'Weekly'),
('monthly', 'Monthly'),
('yearly', 'Yearly')
- ], 'Recurring Cost Frequency', default='no', help='Frequency of the recuring cost', required=True)
- generated_cost_ids = fields.One2many('fleet.vehicle.cost', 'contract_id', 'Generated Costs')
- sum_cost = fields.Float(compute='_compute_sum_cost', string='Indicative Costs Total')
- cost_id = fields.Many2one('fleet.vehicle.cost', 'Cost', required=True, ondelete='cascade')
- # we need to keep this field as a related with store=True because the graph view doesn't support
- # (1) to address fields from inherited table
- # (2) fields that aren't stored in database
- cost_amount = fields.Float(related='cost_id.amount', string='Amount', store=True, readonly=False)
- odometer = fields.Float(string='Creation Contract Odometer',
- help='Odometer measure of the vehicle at the moment of the contract creation')
+ ], 'Recurring Cost Frequency', default='monthly', help='Frequency of the recuring cost', required=True)
+ service_ids = fields.Many2many('fleet.service.type', string="Included Services")
- @api.depends('vehicle_id', 'cost_subtype_id', 'date')
+ @api.depends('vehicle_id', 'cost_subtype_id')
def _compute_contract_name(self):
for record in self:
name = record.vehicle_id.name
if record.cost_subtype_id.name:
- name += ' / ' + record.cost_subtype_id.name
- if record.date:
- name += ' / ' + str(record.date)
+ name = record.cost_subtype_id.name + ' ' + name
record.name = name
@api.depends('expiration_date', 'state')
@@ -160,7 +71,7 @@ class FleetVehicleLogContract(models.Model):
otherwise return the number of days before the contract expires
"""
for record in self:
- if record.expiration_date and record.state in ['open', 'diesoon', 'expired']:
+ if record.expiration_date and record.state in ['open', 'expired']:
today = fields.Date.from_string(fields.Date.today())
renew_date = fields.Date.from_string(record.expiration_date)
diff_time = (renew_date - today).days
@@ -168,16 +79,6 @@ class FleetVehicleLogContract(models.Model):
else:
record.days_left = -1
- @api.depends('cost_ids.amount')
- def _compute_sum_cost(self):
- for contract in self:
- contract.sum_cost = sum(contract.cost_ids.mapped('amount'))
-
- @api.onchange('vehicle_id')
- def _onchange_vehicle(self):
- if self.vehicle_id:
- self.odometer_unit = self.vehicle_id.odometer_unit
-
def write(self, vals):
res = super(FleetVehicleLogContract, self).write(vals)
if vals.get('expiration_date') or vals.get('user_id'):
@@ -188,80 +89,14 @@ class FleetVehicleLogContract(models.Model):
for record in self:
record.state = 'closed'
+ def contract_draft(self):
+ for record in self:
+ record.state = 'futur'
+
def contract_open(self):
for record in self:
record.state = 'open'
- def act_renew_contract(self):
- assert len(self.ids) == 1, "This operation should only be done for 1 single contract at a time, as it it suppose to open a window as result"
- for element in self:
- # compute end date
- startdate = fields.Date.from_string(element.start_date)
- enddate = fields.Date.from_string(element.expiration_date)
- diffdate = (enddate - startdate)
- default = {
- 'date': fields.Date.context_today(self),
- 'start_date': fields.Date.to_string(fields.Date.from_string(element.expiration_date) + relativedelta(days=1)),
- 'expiration_date': fields.Date.to_string(enddate + diffdate),
- }
- newid = element.copy(default).id
- return {
- 'name': _("Renew Contract"),
- 'view_mode': 'form',
- 'view_id': self.env.ref('fleet.fleet_vehicle_log_contract_view_form').id,
- 'res_model': 'fleet.vehicle.log.contract',
- 'type': 'ir.actions.act_window',
- 'domain': '[]',
- 'res_id': newid,
- 'context': {'active_id': newid},
- }
-
- @api.model
- def scheduler_manage_auto_costs(self):
- # This method is called by a cron task
- # It creates costs for contracts having the "recurring cost" field setted, depending on their frequency
- # For example, if a contract has a reccuring cost of 200 with a weekly frequency, this method creates a cost of 200 on the
- # first day of each week, from the date of the last recurring costs in the database to today
- # If the contract has not yet any recurring costs in the database, the method generates the recurring costs from the start_date to today
- # The created costs are associated to a contract thanks to the many2one field contract_id
- # If the contract has no start_date, no cost will be created, even if the contract has recurring costs
- VehicleCost = self.env['fleet.vehicle.cost']
- deltas = {
- 'yearly': relativedelta(years=+1),
- 'monthly': relativedelta(months=+1),
- 'weekly': relativedelta(weeks=+1),
- 'daily': relativedelta(days=+1)
- }
- contracts = self.env['fleet.vehicle.log.contract'].search([('state', '!=', 'closed')], offset=0, limit=None, order=None)
- for contract in contracts:
- if not contract.start_date or contract.cost_frequency == 'no':
- continue
- found = False
- startdate = contract.start_date
- if contract.generated_cost_ids:
- last_autogenerated_cost = VehicleCost.search([
- ('contract_id', '=', contract.id),
- ('auto_generated', '=', True)
- ], offset=0, limit=1, order='date desc')
- if last_autogenerated_cost:
- found = True
- startdate = last_autogenerated_cost.date
- if found:
- startdate += deltas.get(contract.cost_frequency)
- today = fields.Date.context_today(self)
- while (startdate <= today) & (startdate <= contract.expiration_date):
- data = {
- 'amount': contract.cost_generated,
- 'date': fields.Date.context_today(self),
- 'vehicle_id': contract.vehicle_id.id,
- 'cost_subtype_id': contract.cost_subtype_id.id,
- 'contract_id': contract.id,
- 'auto_generated': True
- }
- self.env['fleet.vehicle.cost'].create(data)
- startdate += deltas.get(contract.cost_frequency)
- return True
-
@api.model
def scheduler_manage_contract_expiration(self):
# This method is called by a cron task
@@ -272,7 +107,6 @@ class FleetVehicleLogContract(models.Model):
outdated_days = fields.Date.to_string(date_today + relativedelta(days=+delay_alert_contract))
nearly_expired_contracts = self.search([('state', '=', 'open'), ('expiration_date', '<', outdated_days)])
- nearly_expired_contracts.write({'state': 'diesoon'})
for contract in nearly_expired_contracts.filtered(lambda contract: contract.user_id):
contract.activity_schedule(
'fleet.mail_act_fleet_contract_to_renew', contract.expiration_date,
@@ -288,67 +122,12 @@ class FleetVehicleLogContract(models.Model):
now_running_contracts.write({'state': 'open'})
def run_scheduler(self):
- self.scheduler_manage_auto_costs()
self.scheduler_manage_contract_expiration()
-
-class FleetVehicleLogFuel(models.Model):
- _name = 'fleet.vehicle.log.fuel'
- _description = 'Fuel log for vehicles'
- _inherits = {'fleet.vehicle.cost': 'cost_id'}
-
- @api.model
- def default_get(self, default_fields):
- res = super(FleetVehicleLogFuel, self).default_get(default_fields)
- service = self.env.ref('fleet.type_service_refueling', raise_if_not_found=False)
- res.update({
- 'date': fields.Date.context_today(self),
- 'cost_subtype_id': service and service.id or False,
- 'cost_type': 'fuel'
- })
- return res
-
- liter = fields.Float()
- price_per_liter = fields.Float()
- purchaser_id = fields.Many2one('res.partner', 'Purchaser')
- inv_ref = fields.Char('Invoice Reference', size=64)
- vendor_id = fields.Many2one('res.partner', 'Vendor')
- notes = fields.Text()
- cost_id = fields.Many2one('fleet.vehicle.cost', 'Cost', required=True, ondelete='cascade')
- # we need to keep this field as a related with store=True because the graph view doesn't support
- # (1) to address fields from inherited table
- # (2) fields that aren't stored in database
- cost_amount = fields.Float(related='cost_id.amount', string='Amount', store=True, readonly=False)
-
- @api.onchange('vehicle_id')
- def _onchange_vehicle(self):
- if self.vehicle_id:
- self.odometer_unit = self.vehicle_id.odometer_unit
- self.purchaser_id = self.vehicle_id.driver_id.id
-
- @api.onchange('liter', 'price_per_liter', 'amount')
- def _onchange_liter_price_amount(self):
- # need to cast in float because the value receveid from web client maybe an integer (Javascript and JSON do not
- # make any difference between 3.0 and 3). This cause a problem if you encode, for example, 2 liters at 1.5 per
- # liter => total is computed as 3.0, then trigger an onchange that recomputes price_per_liter as 3/2=1 (instead
- # of 3.0/2=1.5)
- # If there is no change in the result, we return an empty dict to prevent an infinite loop due to the 3 intertwine
- # onchange. And in order to verify that there is no change in the result, we have to limit the precision of the
- # computation to 2 decimal
- liter = float(self.liter)
- price_per_liter = float(self.price_per_liter)
- amount = float(self.amount)
- if liter > 0 and price_per_liter > 0 and round(liter * price_per_liter, 2) != amount:
- self.amount = round(liter * price_per_liter, 2)
- elif amount > 0 and liter > 0 and round(amount / liter, 2) != price_per_liter:
- self.price_per_liter = round(amount / liter, 2)
- elif amount > 0 and price_per_liter > 0 and round(amount / price_per_liter, 2) != liter:
- self.liter = round(amount / price_per_liter, 2)
-
-
class FleetVehicleLogServices(models.Model):
_name = 'fleet.vehicle.log.services'
- _inherits = {'fleet.vehicle.cost': 'cost_id'}
+ _inherit = ['mail.thread', 'mail.activity.mixin']
+ _rec_name = 'service_type_id'
_description = 'Services for vehicles'
@api.model
@@ -357,22 +136,48 @@ class FleetVehicleLogServices(models.Model):
service = self.env.ref('fleet.type_service_service_8', raise_if_not_found=False)
res.update({
'date': fields.Date.context_today(self),
- 'cost_subtype_id': service and service.id or False,
- 'cost_type': 'services'
+ 'service_type_id': service.id if service else None,
})
return res
- purchaser_id = fields.Many2one('res.partner', 'Purchaser')
- inv_ref = fields.Char('Invoice Reference')
+ vehicle_id = fields.Many2one('fleet.vehicle', 'Vehicle', default=1, required=True, help='Vehicle concerned by this log')
+ amount = fields.Float('Cost')
+ odometer_id = fields.Many2one('fleet.vehicle.odometer', 'Odometer', help='Odometer measure of the vehicle at the moment of this log')
+ odometer = fields.Float(compute="_get_odometer", inverse='_set_odometer', string='Odometer Value',
+ help='Odometer measure of the vehicle at the moment of this log')
+ odometer_unit = fields.Selection(related='vehicle_id.odometer_unit', string="Unit", readonly=True)
+ date = fields.Date(help='Date when the cost has been executed')
+ company_id = fields.Many2one('res.company', 'Company', default=lambda self: self.env.company)
+ currency_id = fields.Many2one('res.currency', related='company_id.currency_id')
+ purchaser_id = fields.Many2one(related='vehicle_id.driver_id', string="Driver")
+ inv_ref = fields.Char('Vendor Reference')
vendor_id = fields.Many2one('res.partner', 'Vendor')
- # we need to keep this field as a related with store=True because the graph view doesn't support
- # (1) to address fields from inherited table and (2) fields that aren't stored in database
- cost_amount = fields.Float(related='cost_id.amount', string='Amount', store=True, readonly=False)
notes = fields.Text()
- cost_id = fields.Many2one('fleet.vehicle.cost', 'Cost', required=True, ondelete='cascade')
+ service_type_id = fields.Many2one('fleet.service.type', 'Service Type', required=True)
- @api.onchange('vehicle_id')
- def _onchange_vehicle(self):
- if self.vehicle_id:
- self.odometer_unit = self.vehicle_id.odometer_unit
- self.purchaser_id = self.vehicle_id.driver_id.id
+ def _get_odometer(self):
+ self.odometer = 0
+ for record in self:
+ if record.odometer_id:
+ record.odometer = record.odometer_id.value
+
+ def _set_odometer(self):
+ for record in self:
+ if not record.odometer:
+ raise UserError(_('Emptying the odometer value of a vehicle is not allowed.'))
+ odometer = self.env['fleet.vehicle.odometer'].create({
+ 'value': record.odometer,
+ 'date': record.date or fields.Date.context_today(record),
+ 'vehicle_id': record.vehicle_id.id
+ })
+ self.odometer_id = odometer
+
+ @api.model_create_multi
+ def create(self, vals_list):
+ for data in vals_list:
+ if 'odometer' in data and not data['odometer']:
+ # if received value for odometer is 0, then remove it from the
+ # data as it would result to the creation of a
+ # odometer log with 0, which is to be avoided
+ del data['odometer']
+ return super(FleetVehicleLogServices, self).create(vals_list) \ No newline at end of file
diff --git a/addons/fleet/models/fleet_vehicle_model.py b/addons/fleet/models/fleet_vehicle_model.py
index ab6981c7600..53bc2759b68 100644
--- a/addons/fleet/models/fleet_vehicle_model.py
+++ b/addons/fleet/models/fleet_vehicle_model.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo import api, fields, models
+from odoo import api, fields, models, tools, _
class FleetVehicleModel(models.Model):
@@ -15,6 +15,7 @@ class FleetVehicleModel(models.Model):
manager_id = fields.Many2one('res.users', 'Fleet Manager', default=lambda self: self.env.uid,
domain=lambda self: [('groups_id', 'in', self.env.ref('fleet.fleet_group_manager').id)])
image_128 = fields.Image(related='brand_id.image_128', readonly=False)
+ active = fields.Boolean(default=True)
@api.depends('name', 'brand_id')
def name_get(self):
@@ -26,11 +27,37 @@ class FleetVehicleModel(models.Model):
res.append((record.id, name))
return res
+ def write(self, vals):
+ if 'manager_id' in vals:
+ old_manager = self.manager_id.id if self.manager_id else None
+
+ self.env['fleet.vehicle'].search([('model_id', '=', self.id), ('manager_id', '=', old_manager)]).write({'manager_id': vals['manager_id']})
+
+ return super(FleetVehicleModel, self).write(vals)
+
class FleetVehicleModelBrand(models.Model):
_name = 'fleet.vehicle.model.brand'
_description = 'Brand of the vehicle'
- _order = 'name asc'
+ _order = 'model_count desc, name asc'
name = fields.Char('Make', required=True)
image_128 = fields.Image("Logo", max_width=128, max_height=128)
+ model_count = fields.Integer(compute="_compute_model_count", string="", store=True)
+
+ def _compute_model_count(self):
+ Model = self.env['fleet.vehicle.model']
+ for record in self:
+ record.model_count = Model.search_count([('brand_id', '=', record.id)])
+
+ def action_brand_model(self):
+ self.ensure_one()
+ view = {
+ 'type': 'ir.actions.act_window',
+ 'view_mode': 'tree,form',
+ 'res_model': 'fleet.vehicle.model',
+ 'name': 'Models',
+ 'context': {'search_default_brand_id': self.id, 'default_brand_id': self.id}
+ }
+
+ return view
diff --git a/addons/fleet/report/__init__.py b/addons/fleet/report/__init__.py
new file mode 100644
index 00000000000..a5b36f4db3f
--- /dev/null
+++ b/addons/fleet/report/__init__.py
@@ -0,0 +1 @@
+from . import fleet_report
diff --git a/addons/fleet/report/fleet_report.py b/addons/fleet/report/fleet_report.py
new file mode 100644
index 00000000000..6d1fdc56497
--- /dev/null
+++ b/addons/fleet/report/fleet_report.py
@@ -0,0 +1,131 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import tools
+from odoo import api, fields, models
+
+
+class FleetReport(models.Model):
+ _name = "fleet.vehicle.cost.report"
+ _description = "Fleet Analysis Report"
+ _auto = False
+ _order = 'date_start desc'
+
+ company_id = fields.Many2one('res.company', 'Company', readonly=True)
+ vehicle_id = fields.Many2one('fleet.vehicle', 'Vehicle', readonly=True)
+ name = fields.Char('Vehicle Name', readonly=True)
+ driver_id = fields.Many2one('res.partner', 'Driver', readonly=True)
+ fuel_type = fields.Char('Fuel', readonly=True)
+ date_start = fields.Date('Date', readonly=True)
+
+ cost = fields.Float('Cost', readonly=True)
+ cost_type = fields.Selection(string='Cost Type', selection=[
+ ('contract', 'Contract'),
+ ('service', 'Service')
+ ], readonly=True)
+
+ def init(self):
+ query = """
+WITH service_costs AS (
+ SELECT
+ ve.id AS vehicle_id,
+ ve.company_id AS company_id,
+ ve.name AS name,
+ ve.driver_id AS driver_id,
+ ve.fuel_type AS fuel_type,
+ date(date_trunc('month', d)) AS date_start,
+ COALESCE(sum(se.amount), 0) AS
+ COST,
+ 'service' AS cost_type
+ FROM
+ fleet_vehicle ve
+ CROSS JOIN generate_series((
+ SELECT
+ min(acquisition_date)
+ FROM fleet_vehicle), CURRENT_DATE, '1 month') d
+ LEFT JOIN fleet_vehicle_log_services se ON se.vehicle_id = ve.id
+ AND date_trunc('month', se.date) = date_trunc('month', d)
+ WHERE
+ ve.active
+ GROUP BY
+ ve.id,
+ ve.company_id,
+ ve.name,
+ date_start,
+ d
+ ORDER BY
+ ve.id,
+ date_start
+),
+contract_costs AS (
+ SELECT
+ ve.id AS vehicle_id,
+ ve.company_id AS company_id,
+ ve.name AS name,
+ ve.driver_id AS driver_id,
+ ve.fuel_type AS fuel_type,
+ date(date_trunc('month', d)) AS date_start,
+ (COALESCE(sum(co.amount), 0) + COALESCE(sum(cod.cost_generated * extract(day FROM least (date_trunc('month', d) + interval '1 month', cod.expiration_date) - greatest (date_trunc('month', d), cod.start_date))), 0) + COALESCE(sum(com.cost_generated), 0) + COALESCE(sum(coy.cost_generated), 0)) AS
+ COST,
+ 'contract' AS cost_type
+ FROM
+ fleet_vehicle ve
+ CROSS JOIN generate_series((
+ SELECT
+ min(acquisition_date)
+ FROM fleet_vehicle), CURRENT_DATE, '1 month') d
+ LEFT JOIN fleet_vehicle_log_contract co ON co.vehicle_id = ve.id
+ AND date_trunc('month', co.date) = date_trunc('month', d)
+ LEFT JOIN fleet_vehicle_log_contract cod ON cod.vehicle_id = ve.id
+ AND date_trunc('month', cod.start_date) <= date_trunc('month', d)
+ AND date_trunc('month', cod.expiration_date) >= date_trunc('month', d)
+ AND cod.cost_frequency = 'daily'
+ LEFT JOIN fleet_vehicle_log_contract com ON com.vehicle_id = ve.id
+ AND date_trunc('month', com.start_date) <= date_trunc('month', d)
+ AND date_trunc('month', com.expiration_date) >= date_trunc('month', d)
+ AND com.cost_frequency = 'monthly'
+ LEFT JOIN fleet_vehicle_log_contract coy ON coy.vehicle_id = ve.id
+ AND date_trunc('month', coy.date) = date_trunc('month', d)
+ AND date_trunc('month', coy.start_date) <= date_trunc('month', d)
+ AND date_trunc('month', coy.expiration_date) >= date_trunc('month', d)
+ AND coy.cost_frequency = 'yearly'
+WHERE
+ ve.active
+GROUP BY
+ ve.id,
+ ve.company_id,
+ ve.name,
+ date_start,
+ d
+ORDER BY
+ ve.id,
+ date_start
+)
+SELECT
+ vehicle_id AS id,
+ company_id,
+ vehicle_id,
+ name,
+ driver_id,
+ fuel_type,
+ date_start,
+ COST,
+ cost_type
+FROM
+ service_costs sc
+UNION ALL (
+ SELECT
+ vehicle_id AS id,
+ company_id,
+ vehicle_id,
+ name,
+ driver_id,
+ fuel_type,
+ date_start,
+ COST,
+ cost_type
+ FROM
+ contract_costs cc)
+"""
+ tools.drop_view_if_exists(self.env.cr, self._table)
+ self.env.cr.execute("""CREATE or REPLACE VIEW %s as (%s)""" % (self._table, query)) \ No newline at end of file
diff --git a/addons/fleet/security/fleet_security.xml b/addons/fleet/security/fleet_security.xml
index aab267a175c..4e8b55c45e0 100644
--- a/addons/fleet/security/fleet_security.xml
+++ b/addons/fleet/security/fleet_security.xml
@@ -30,16 +30,6 @@
<field name="perm_unlink" eval="False"/>
<field name="domain_force">[('cost_id.vehicle_id.driver_id','=',user.partner_id.id)]</field>
</record>
- <record id="fleet_rule_cost_visibility_user" model="ir.rule">
- <field name="name">User can only see his/her costs</field>
- <field name="model_id" ref="model_fleet_vehicle_cost"/>
- <field name="groups" eval="[(4, ref('fleet_group_user'))]"/>
- <field name="perm_read" eval="True"/>
- <field name="perm_write" eval="True"/>
- <field name="perm_create" eval="True"/>
- <field name="perm_unlink" eval="False"/>
- <field name="domain_force">[('vehicle_id.driver_id','=',user.partner_id.id)]</field>
- </record>
<record id="fleet_rule_service_visibility_user" model="ir.rule">
<field name="name">User can only see his/her vehicle's services</field>
<field name="model_id" ref="model_fleet_vehicle_log_services"/>
@@ -60,16 +50,6 @@
<field name="perm_unlink" eval="True"/>
<field name="domain_force">[('vehicle_id.driver_id','=',user.partner_id.id)]</field>
</record>
- <record id="fleet_rule_fuel_log_visibility_user" model="ir.rule">
- <field name="name">User can only see his/her vehicle's fuel log</field>
- <field name="model_id" ref="model_fleet_vehicle_log_fuel"/>
- <field name="groups" eval="[(4, ref('fleet_group_user'))]"/>
- <field name="perm_read" eval="True"/>
- <field name="perm_write" eval="True"/>
- <field name="perm_create" eval="True"/>
- <field name="perm_unlink" eval="True"/>
- <field name="domain_force">[('cost_id.vehicle_id.driver_id','=',user.partner_id.id)]</field>
- </record>
<record id="fleet_rule_vehicle_visibility_user" model="ir.rule">
<field name="name">User can only see his/her vehicle</field>
<field name="model_id" ref="model_fleet_vehicle"/>
@@ -85,11 +65,6 @@
<field name="model_id" ref="model_fleet_vehicle_log_contract"/>
<field name="groups" eval="[(4, ref('fleet_group_manager'))]"/>
</record>
- <record id="fleet_rule_cost_visibility_manager" model="ir.rule">
- <field name="name">Administrator has all rights on vehicle's costs</field>
- <field name="model_id" ref="model_fleet_vehicle_cost"/>
- <field name="groups" eval="[(4, ref('fleet_group_manager'))]"/>
- </record>
<record id="fleet_rule_service_visibility_manager" model="ir.rule">
<field name="name">Administrator has all rights on vehicle's services</field>
<field name="model_id" ref="model_fleet_vehicle_log_services"/>
@@ -100,11 +75,6 @@
<field name="model_id" ref="model_fleet_vehicle_odometer"/>
<field name="groups" eval="[(4, ref('fleet_group_manager'))]"/>
</record>
- <record id="fleet_rule_fuel_log_visibility_manager" model="ir.rule">
- <field name="name">Administrator has all rights on vehicle's fuel log</field>
- <field name="model_id" ref="model_fleet_vehicle_log_fuel"/>
- <field name="groups" eval="[(4, ref('fleet_group_manager'))]"/>
- </record>
<record id="fleet_rule_vehicle_visibility_manager" model="ir.rule">
<field name="name">Administrator has all rights on vehicle</field>
<field name="model_id" ref="model_fleet_vehicle"/>
diff --git a/addons/fleet/security/ir.model.access.csv b/addons/fleet/security/ir.model.access.csv
index 127ed636912..6da83f50983 100644
--- a/addons/fleet/security/ir.model.access.csv
+++ b/addons/fleet/security/ir.model.access.csv
@@ -7,17 +7,15 @@ fleet_vehicle_access_right_user,fleet_vehicle_access_right,model_fleet_vehicle,f
fleet_vehicle_log_services_access_right_user,fleet_vehicle_log_services_access_right,model_fleet_vehicle_log_services,fleet_group_user,1,0,0,0
fleet_vehicle_log_contract_access_right_user,fleet_vehicle_log_contract_access_right,model_fleet_vehicle_log_contract,fleet_group_user,1,0,0,0
fleet_service_type_access_right_user,fleet_service_type_access_right,model_fleet_service_type,fleet_group_user,1,0,0,0
-access_fleet_vehicle_cost_user,access_fleet_vehicle_cost,model_fleet_vehicle_cost,fleet_group_user,1,1,1,0
fleet_vehicle_model_access_right,fleet_vehicle_model_access_right,model_fleet_vehicle_model,fleet_group_manager,1,1,1,1
fleet_vehicle_tag_access_right,fleet_vehicle_tag_access_right,model_fleet_vehicle_tag,fleet_group_manager,1,1,1,1
fleet_vehicle_state_access_right,fleet_vehicle_state_access_right,model_fleet_vehicle_state,fleet_group_manager,1,1,1,1
fleet_vehicle_odometer_access_right,fleet_vehicle_odometer_access_right,model_fleet_vehicle_odometer,fleet_group_user,1,1,1,1
fleet_vehicle_model_brand_access_right,fleet_vehicle_model_brand_access_right,model_fleet_vehicle_model_brand,fleet_group_manager,1,1,1,1
fleet_vehicle_access_right,fleet_vehicle_access_right,model_fleet_vehicle,fleet_group_manager,1,1,1,1
-fleet_vehicle_log_fuel_access_right,fleet_vehicle_log_fuel_access_right,model_fleet_vehicle_log_fuel,fleet_group_user,1,1,1,1
fleet_vehicle_log_services_access_right,fleet_vehicle_log_services_access_right,model_fleet_vehicle_log_services,fleet_group_manager,1,1,1,1
fleet_vehicle_log_contract_access_right,fleet_vehicle_log_contract_access_right,model_fleet_vehicle_log_contract,fleet_group_manager,1,1,1,1
fleet_service_type_access_right,fleet_service_type_access_right,model_fleet_service_type,fleet_group_manager,1,1,1,1
-access_fleet_vehicle_cost,access_fleet_vehicle_cost,model_fleet_vehicle_cost,fleet_group_manager,1,1,1,1
access_mail_activity_type_fleet_manager,mail.activity.type.fleet.manager,mail.model_mail_activity_type,fleet.fleet_group_manager,1,1,1,1
access_fleet_vehicle_assignation_log_fleet_group_user,fleet_vehicle_assignation_log fleet_group_user,fleet.model_fleet_vehicle_assignation_log,fleet.fleet_group_user,1,1,1,1
+access_fleet_report_manager,fleet_vehicle_cost_report_access_right,model_fleet_vehicle_cost_report,fleet_group_manager,1,1,1,1 \ No newline at end of file
diff --git a/addons/fleet/views/fleet_board_view.xml b/addons/fleet/views/fleet_board_view.xml
index 755e2f32956..f577a8063ef 100644
--- a/addons/fleet/views/fleet_board_view.xml
+++ b/addons/fleet/views/fleet_board_view.xml
@@ -1,42 +1,56 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
- <record id="fleet_costs_reporting_action" model="ir.actions.act_window">
- <field name="name">Costs Analysis</field>
- <field name="res_model">fleet.vehicle.cost</field>
- <field name="view_mode">graph,pivot</field>
- <field name="view_id"></field> <!-- force empty -->
- <field name="context">{"search_default_parent_false" : True,}</field>
- <field name="help" type="html">
- <p class="o_view_nocontent_empty_folder">
- No data for analysis
- </p><p>
- Odoo helps you managing the costs for your different vehicles
- Costs are generally created from services and contract and appears here.
- </p><p>
- Thanks to the different filters, Odoo can only print the effective
- costs, sort them by type and by vehicle.
- </p>
- </field>
+ <record id="fleet_costs_report_view_search" model="ir.ui.view">
+ <field name="name">fleet.vehicle.cost.view.search</field>
+ <field name="model">fleet.vehicle.cost.report</field>
+ <field name="arch" type="xml">
+ <search string="Fleet Costs Analysis">
+ <field name="name" filter_domain="[('name', 'ilike', self)]"/>
+ <field name="driver_id" filter_domain="[('driver_id', 'ilike', self)]"/>
+ <field name="date_start" />
+ <filter string="Service" name="service" domain="[('cost_type', '=', 'service')]"/>
+ <filter string="Contract" name="contract" domain="[('cost_type', '=', 'contract')]"/>
+ <group expand="1" string="Group By">
+ <filter string="Vehicle" name="vehicle" context="{'group_by':'vehicle_id'}"/>
+ <filter string="Driver" name="driver" context="{'group_by':'driver_id'}"/>
+ </group>
+ </search>
+ </field>
</record>
- <record id="fleet_reporting_pivot_action" model="ir.actions.act_window.view">
- <field name="sequence" eval="2"/>
- <field name="view_mode">pivot</field>
- <field name="view_id" ref="fleet_vehicle_cost_view_pivot"/>
- <field name="act_window_id" ref="fleet_costs_reporting_action"/>
+
+ <record id="fleet_costs_report_view_pivot" model="ir.ui.view">
+ <field name="name">fleet.vehicle.cost.view.pivot</field>
+ <field name="model">fleet.vehicle.cost.report</field>
+ <field name="arch" type="xml">
+ <pivot>
+ <field name="date_start" type="col" interval="year" />
+ <field name="cost_type" type="col" />
+ <field name="vehicle_id" type="row" />
+ <field name="cost" type="measure" />
+ </pivot>
+ </field>
</record>
- <record id="fleet_reporting_graph_action" model="ir.actions.act_window.view">
- <field name="sequence" eval="1"/>
- <field name="view_mode">graph</field>
- <field name="view_id" ref="fleet_vehicle_cost_view_graph"/>
- <field name="act_window_id" ref="fleet_costs_reporting_action"/>
+
+ <record id="fleet_costs_report_view_graph" model="ir.ui.view">
+ <field name="name">fleet.vehicle.cost.view.graph</field>
+ <field name="model">fleet.vehicle.cost.report</field>
+ <field name="arch" type="xml">
+ <graph string="Fleet Costs Analysis" type="bar">
+ <field name="date_start" type="row" interval="month"/>
+ <field name="cost_type" type="row"/>
+ <field name="cost" type="measure"/>
+ </graph>
+ </field>
</record>
- <record id="fleet_costs_reporting_non_effective_action" model="ir.actions.act_window">
- <field name="name">Indicative Costs Analysis</field>
- <field name="res_model">fleet.vehicle.cost</field>
+
+ <record id="fleet_costs_reporting_action" model="ir.actions.act_window">
+ <field name="name">Costs Analysis</field>
+ <field name="res_model">fleet.vehicle.cost.report</field>
<field name="view_mode">graph,pivot</field>
- <field name="view_id"></field> <!-- force empty -->
- <field name="context">{"search_default_parent_true" : True,}</field>
+ <field name="view_id"></field>
+ <field name="context">{ 'time_ranges': {'field':'date_start', 'range':'last_365_days'} }</field>
+ <field name="search_view_id" ref="fleet.fleet_costs_report_view_search"/>
<field name="help" type="html">
<p class="o_view_nocontent_empty_folder">
No data for analysis
@@ -49,31 +63,11 @@
</p>
</field>
</record>
- <record id="view_fleet_non_effective_pivot_action" model="ir.actions.act_window.view">
- <field name="sequence" eval="2"/>
- <field name="view_mode">pivot</field>
- <field name="view_id" ref="fleet_vehicle_cost_indicative_view_pivot"/>
- <field name="act_window_id" ref="fleet_costs_reporting_non_effective_action"/>
- </record>
- <record id="view_fleet_non_effective_graph_action" model="ir.actions.act_window.view">
- <field name="sequence" eval="1"/>
- <field name="view_mode">graph</field>
- <field name="view_id" ref="fleet_vehicle_cost_indicative_view_graph"/>
- <field name="act_window_id" ref="fleet_costs_reporting_non_effective_action"/>
- </record>
-
<menuitem name="Reporting" parent="menu_root" id="menu_fleet_reporting" sequence="99" groups="fleet_group_manager"/>
-
<menuitem id="menu_fleet_reporting_costs"
name="Costs"
parent="menu_fleet_reporting"
action="fleet_costs_reporting_action"
sequence="1"
groups="fleet_group_manager"/>
- <menuitem id="menu_fleet_reporting_indicative_costs"
- name="Indicative Costs"
- parent="menu_fleet_reporting"
- action="fleet_costs_reporting_non_effective_action"
- sequence="2"
- groups="fleet_group_manager"/>
</odoo>
diff --git a/addons/fleet/views/fleet_vehicle_cost_views.xml b/addons/fleet/views/fleet_vehicle_cost_views.xml
index b29646e3a40..df09890c3f8 100644
--- a/addons/fleet/views/fleet_vehicle_cost_views.xml
+++ b/addons/fleet/views/fleet_vehicle_cost_views.xml
@@ -1,203 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
-
- <record id='fleet_vehicle_cost_view_tree' model='ir.ui.view'>
- <field name="name">fleet.vehicle.cost.tree</field>
- <field name="model">fleet.vehicle.cost</field>
- <field name="arch" type="xml">
- <tree string="Vehicle Costs">
- <field name="currency_id" invisible="1"/>
- <field name="vehicle_id"/>
- <field name="description"/>
- <field name="cost_subtype_id"/>
- <field name="date"/>
- <field name="amount" sum="Cost" widget="monetary"/>
- </tree>
- </field>
- </record>
-
- <record id='fleet_vehicle_cost_view_kanban' model='ir.ui.view'>
- <field name="name">fleet.vehicle.cost.kanban</field>
- <field name="model">fleet.vehicle.cost</field>
- <field name="arch" type="xml">
- <kanban class="o_kanban_mobile">
- <field name="currency_id"/>
- <templates>
- <t t-name="kanban-box">
- <div t-attf-class="oe_kanban_global_click">
- <div>
- <strong>
- <field name="vehicle_id"/>
- <span class="float-right"><field name="date"/></span>
- </strong>
- </div>
- <div>
- <field name="cost_subtype_id"/>
- <span class="float-right"><field name="amount" widget="monetary"/></span>
- </div>
- </div>
- </t>
- </templates>
- </kanban>
- </field>
- </record>
-
- <record id='fleet_vehicle_cost_view_pivot' model='ir.ui.view'>
- <field name="name">fleet.vehicle.cost.pivot</field>
- <field name="model">fleet.vehicle.cost</field>
- <field name="arch" type="xml">
- <pivot string="Vehicles costs">
- <field name="vehicle_id" type="row"/>
- <field name="cost_type" type="row"/>
- <field name="date" interval="year" type="col"/>
- <field name="amount" type="measure"/>
- </pivot>
- </field>
- </record>
-
- <record id='fleet_vehicle_cost_view_graph' model='ir.ui.view'>
- <field name="name">fleet.vehicle.cost.graph</field>
- <field name="model">fleet.vehicle.cost</field>
- <field name="arch" type="xml">
- <graph string="Vehicles costs">
- <field name="vehicle_id"/>
- <field name="date" interval="year"/>
- <field name="amount" type="measure"/>
- </graph>
- </field>
- </record>
-
- <record id='fleet_vehicle_cost_indicative_view_pivot' model='ir.ui.view'>
- <field name="name">fleet.vehicle.cost.pivot</field>
- <field name="model">fleet.vehicle.cost</field>
- <field name="arch" type="xml">
- <pivot string="Vehicles costs" >
- <field name="vehicle_id" type="row"/>
- <field name="cost_type" type="col"/>
- <field name="amount" type="measure"/>
- </pivot>
- </field>
- </record>
-
- <record id='fleet_vehicle_cost_indicative_view_graph' model='ir.ui.view'>
- <field name="name">fleet.vehicle.cost.graph</field>
- <field name="model">fleet.vehicle.cost</field>
- <field name="arch" type="xml">
- <graph string="Vehicles costs">
- <field name="parent_id" type="row"/>
- <field name="cost_type" type="col"/>
- <field name="amount" type="measure"/>
- </graph>
- </field>
- </record>
-
- <record id='fleet_vehicle_costs_view_search' model='ir.ui.view'>
- <field name="name">fleet.vehicle.cost.search</field>
- <field name="model">fleet.vehicle.cost</field>
- <field name="arch" type="xml">
- <search string="Vehicles costs" >
- <field name="vehicle_id" />
- <field name="cost_subtype_id"/>
- <field name="date"/>
- <field name="parent_id"/>
- <filter name="parent_false" domain="[('parent_id','=',False)]" string="Effective Costs"/>
- <filter name="parent_true" domain="[('parent_id','!=',False)]" string="Indicative Costs"/>
- <group expand="1" string="Group By">
- <filter name="groupby_cost_type" context="{'group_by': 'cost_type'}" string="Cost Type"/>
- <filter name="groupby_cost_subtype_id" context="{'group_by': 'cost_subtype_id'}" string="Cost Subtype"/>
- <filter name="groupby_vehicle_id" context="{'group_by': 'vehicle_id'}" string="Vehicle"/>
- <filter name="groupby_parent_id" context="{'group_by': 'parent_id'}" string="Parent"/>
- <separator/>
- <filter name="groupby_date" context="{'group_by': 'date:month'}" string="Date" help="Vehicle Costs by Date"/>
- </group>
- </search>
- </field>
- </record>
-
- <record id='fleet_vehicle_costs_view_form' model='ir.ui.view'>
- <field name="name">fleet.vehicle.cost.form</field>
- <field name="model">fleet.vehicle.cost</field>
- <field name="arch" type="xml">
- <form string="Vehicle costs">
- <sheet>
- <field name="currency_id" invisible="1"/>
- <group col="2" string="Cost Details">
- <group>
- <field name="vehicle_id" />
- <field name="cost_subtype_id"/>
- <field name="amount" widget="monetary"/>
- <field name="description"/>
- </group>
- <group>
- <field name="date"/>
- <field name="parent_id" groups="base.group_no_one"/>
- </group>
- </group>
- </sheet>
- </form>
- </field>
- </record>
-
- <record id="fleet_vehicle_costs_view_graph" model="ir.ui.view">
- <field name="name">fleet.vehicle.cost.graph</field>
- <field name="model">fleet.vehicle.cost</field>
- <field name="arch" type="xml">
- <graph string="Costs Per Month" stacked="True">
- <field name="date" type="row"/>
- <field name="vehicle_id" type="col"/>
- <field name="amount" type="measure"/>
- </graph>
- </field>
- </record>
-
- <record id='fleet_vehicle_costs_action' model='ir.actions.act_window'>
- <field name="name">Vehicles Costs</field>
- <field name="res_model">fleet.vehicle.cost</field>
- <field name="view_mode">tree,kanban,form,graph</field>
- <field name="context">{"search_default_parent_false" : True, "search_default_groupby_vehicle_id" : True,}</field>
- <field name="help" type="html">
- <p class="o_view_nocontent_smiling_face">
- Create a new cost
- </p><p>
- Manage the costs for your different vehicles.
- Costs are created automatically from services, contracts and fuel logs.
- </p>
- </field>
- </record>
-
- <menuitem action="fleet_vehicle_costs_action" parent="fleet_vehicles" id="fleet_vehicle_costs_menu" groups="fleet_group_manager"/>
-
-
<record id='fleet_vehicle_log_contract_view_form' model='ir.ui.view'>
<field name="name">fleet.vehicle.log_contract.form</field>
<field name="model">fleet.vehicle.log.contract</field>
<field name="arch" type="xml">
<form string="Contract logs">
<header>
- <button name="contract_close" states="open,diesoon,expired,future" type="object" class="oe_highlight" string="Close Contract" groups="fleet.fleet_group_manager"/>
- <button name="contract_open" states="closed" type="object" class="oe_highlight" string="Set Contract In Progress" groups="fleet.fleet_group_manager"/>
- <button class="oe_highlight" name="act_renew_contract" type="object" string="Renew Contract" attrs="{'invisible': [('state', '=', 'open')]}" help="Create a new contract automatically with all the same informations except for the date that will start at the end of current contract" groups="fleet.fleet_group_manager"/>
+ <button name="contract_open" states="futur" type="object" string="Start Contract" class="oe_highlight" groups="fleet.fleet_group_manager"/>
+ <button name="contract_close" states="futur" type="object" string="Cancel" groups="fleet.fleet_group_manager"/>
+ <button name="contract_close" states="open,expired,future" type="object" class="oe_highlight" string="Close Contract" groups="fleet.fleet_group_manager"/>
+ <button name="contract_draft" states="closed" type="object" string="Reset To Draft" groups="fleet.fleet_group_manager"/>
<field name="state" widget="statusbar" />
</header>
<sheet>
+ <field name="active" invisible="1"/>
<widget name="web_ribbon" text="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
<field name="currency_id" invisible="1"/>
+ <div class="oe_title">
+ <h1><field name="name"/></h1>
+ </div>
<group col="2">
<group string="Contract Informations">
- <field name="active" invisible="1"/>
- <field name="ins_ref"/>
- <field name="cost_subtype_id" required="1" domain="['|',('category','=','contract'),('category','=','both')]"/>
- <field name="insurer_id"/>
<field name="user_id"/>
+ <field name="cost_subtype_id"/>
+ <field name="insurer_id"/>
+ <field name="ins_ref"/>
</group>
<group string="Vehicle Informations">
<field name="vehicle_id"/>
<field name="purchaser_id"/>
- <label for="odometer"/>
- <div class="o_row">
- <field name="odometer"/>
- <field name="odometer_unit"/>
- </div>
</group>
</group>
<group col="2">
@@ -215,33 +46,9 @@
<field name="expiration_date" attrs="{'required': [('cost_frequency', '!=', 'no')]}"/>
</group>
</group>
- <notebook>
- <page string="Included Services">
- <group>
- <field name="cost_ids" context="{'vehicle_id': vehicle_id}" nolabel="1">
- <tree editable="bottom">
- <field name="currency_id" invisible="1"/>
- <field name="cost_subtype_id" string="Service" domain="[('category','=','service')]"/>
- <field name="description"/>
- <field name="amount" sum="Price" string="Indicative Cost" widget="monetary"/>
- </tree>
- </field>
-
- </group>
- </page>
- <page string="Generated Recurring Costs">
- <group>
- <field name="generated_cost_ids" context="{'vehicle_id': vehicle_id}" nolabel="1" sum="amount">
- <tree editable="bottom" >
- <field name="currency_id" invisible="1"/>
- <field name="date" />
- <field name="amount" sum="amount" widget="monetary"/>
- </tree>
-
- </field>
- </group>
- </page>
- </notebook>
+ <group string="Included Services">
+ <field name="service_ids" widget="many2many_tags" nolabel="1"/>
+ </group>
<group string="Terms and Conditions">
<field name="notes" nolabel="1" placeholder="Write here all other information relative to this contract" />
</group>
@@ -255,26 +62,17 @@
</field>
</record>
- <act_window
- id="act_renew_contract"
- name="Renew Contract"
- res_model="fleet.vehicle.log.contract"
- binding_model="fleet.vehicle.log.contract"
- binding_views="form"
- view_mode="form"
- />
-
<record id='fleet_vehicle_log_contract_view_tree' model='ir.ui.view'>
<field name="name">fleet.vehicle.log.contract.tree</field>
<field name="model">fleet.vehicle.log.contract</field>
<field name="arch" type="xml">
- <tree string="Contract logs" decoration-warning="state=='diesoon'" decoration-danger="days_left==0" decoration-muted="state=='closed'">
+ <tree string="Contract logs" decoration-danger="days_left==0" decoration-muted="state=='closed'" default_order="expiration_date">
<field name="active" invisible="1"/>
+ <field name="name" />
<field name="start_date" />
<field name="expiration_date" />
<field name="days_left" invisible="1"/>
<field name="vehicle_id" />
- <field name="cost_subtype_id"/>
<field name="insurer_id" />
<field name="purchaser_id"/>
<field name="cost_generated"/>
@@ -308,7 +106,6 @@
</div>
<div>
<field name="insurer_id"/>
- <span class="float-right"><field name="cost_subtype_id"/></span>
</div>
</div>
</t>
@@ -324,7 +121,7 @@
<graph string="Contract Costs Per Month" type="bar" stacked="True">
<field name="date" type="row"/>
<field name="vehicle_id" type="row"/>
- <field name="cost_amount" type="measure"/>
+ <field name="amount" type="measure"/>
</graph>
</field>
</record>
@@ -334,13 +131,12 @@
<field name="model">fleet.vehicle.log.contract</field>
<field name="arch" type="xml">
<search string="Vehicles Contracts">
- <field name="vehicle_id" string="Vehicle" filter_domain="[('vehicle_id.name', 'ilike', self)]"/>
- <field name="purchaser_id" string="Driver" filter_domain="[('purchaser_id', 'child_of', self)]"/>
- <field name="insurer_id" string="Vendor" filter_domain="[('insurer_id', 'child_of', self)]"/>
- <field name="cost_subtype_id" string="Service Type" filter_domain="[('cost_ids.cost_subtype_id', 'ilike', self)]"/>
- <filter string="In Progress" name="open" domain="[('state', 'in', ['open', 'diesoon'])]"/>
+ <field name="vehicle_id" string="Vehicle" filter_domain="[('vehicle_id.name','ilike', self)]"/>
+ <field name="purchaser_id" string="Driver" filter_domain="[('purchaser_id','child_of', self)]"/>
+ <field name="insurer_id" string="Vendor" filter_domain="[('insurer_id','child_of', self)]"/>
+ <filter string="Archived" name="inactive" domain="[('active','=',False)]"/>
+ <filter string="In Progress" name="open" domain="[('state', '=', 'open')]"/>
<filter string="Expired" name="expired" domain="[('state', '=', 'expired')]"/>
- <filter string="Expiring Soon" name="expire_soon" domain="[('state', '=', 'diesoon')]"/>
<separator/>
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
<separator/>
@@ -369,7 +165,6 @@
<img t-att-src="activity_image('res.partner', 'image_128', record.purchaser_id.raw_value)" t-att-title="record.purchaser_id.value" t-att-alt="record.purchaser_id.value"/>
<div>
<field name="vehicle_id" display="full"/>
- <field name="cost_subtype_id" muted="1" display="full"/>
</div>
</div>
</templates>
@@ -378,7 +173,7 @@
</record>
<record id='fleet_vehicle_log_contract_action' model='ir.actions.act_window'>
- <field name="name">Vehicles Contracts</field>
+ <field name="name">Contracts</field>
<field name="res_model">fleet.vehicle.log.contract</field>
<field name="view_mode">tree,kanban,form,graph,activity</field>
<field name="context">{'search_default_open': 1}</field>
@@ -396,149 +191,25 @@
</field>
</record>
- <menuitem action="fleet_vehicle_log_contract_action" parent="fleet_vehicles" id="fleet_vehicle_log_contract_menu" groups="fleet_group_user"/>
-
- <record id='fleet_vehicle_log_fuel_view_form' model='ir.ui.view'>
- <field name="name">fleet.vehicle.log.fuel.form</field>
- <field name="model">fleet.vehicle.log.fuel</field>
- <field name="arch" type="xml">
- <form string="Fuel Logs">
- <sheet>
- <group>
- <group string="Vehicle Details">
- <field name="vehicle_id"/>
- </group>
- <group string="Refueling Details">
- <field name="liter"/>
- <field name="price_per_liter"/>
- <field name="amount"/>
- </group>
- </group>
- <group>
- <group string="Odometer Details">
- <label for="odometer"/>
- <div class="o_row">
- <field name="odometer"/>
- <field name="odometer_unit"/>
- </div>
- </group>
- <group string="Additional Details">
- <field name="date" />
- <field name="purchaser_id" />
- <field name="inv_ref" />
- <field name="vendor_id"/>
- </group>
- </group>
- <field name="notes" placeholder="Write here any other information"/>
- </sheet>
- </form>
- </field>
- </record>
-
- <record id='fleet_vehicle_log_fuel_view_tree' model='ir.ui.view'>
- <field name="name">fleet.vehicle.log.fuel.tree</field>
- <field name="model">fleet.vehicle.log.fuel</field>
- <field name="arch" type="xml">
- <tree string="Fuel Logs">
- <field name="date" />
- <field name="vehicle_id" />
- <field name="purchaser_id" />
- <field name="inv_ref" invisible="1"/>
- <field name="vendor_id" invisible="1"/>
- <field name="odometer" />
- <field name="odometer_unit" />
- <field name="liter" />
- <field name="price_per_liter" invisible="1"/>
- <field name="amount" sum="Price"/>
- </tree>
- </field>
- </record>
-
- <record id='fleet_vehicle_log_fuel_view_kanban' model='ir.ui.view'>
- <field name="name">fleet.vehicle.log.fuel.kanban</field>
- <field name="model">fleet.vehicle.log.fuel</field>
- <field name="arch" type="xml">
- <kanban class="o_kanban_mobile">
- <templates>
- <t t-name="kanban-box">
- <div t-attf-class="oe_kanban_global_click">
- <div>
- <strong>
- <field name="vehicle_id"/>
- <span class="float-right"><field name="date"/></span>
- </strong>
- </div>
- <div>
- <span><field name="purchaser_id"/></span>
- </div>
- <div>
- <span><field name="liter"/> Liter</span>
- <span class="float-right"><field name="amount"/></span>
- </div>
- </div>
- </t>
- </templates>
- </kanban>
- </field>
- </record>
-
- <record id='fleet_vehicle_log_fuel_view_search' model='ir.ui.view'>
- <field name="name">fleet.vehicle.log.fuel.search</field>
- <field name="model">fleet.vehicle.log.fuel</field>
- <field name="arch" type="xml">
- <search string="Vehicles Fuel Logs" >
- <field name="vehicle_id" />
- <field name="date"/>
- <field name="purchaser_id" />
- <field name="liter" />
- <field name="amount" sum="Price"/>
- <group expand="0" string="Group By">
- <filter name="groupby_vehicle" context="{'group_by' : 'vehicle_id'}" string="Vehicle"/>
- </group>
- </search>
- </field>
- </record>
-
- <record id="fleet_vehicle_log_fuel_view_graph" model="ir.ui.view">
- <field name="name">fleet.vehicle.log.fuel.graph</field>
- <field name="model">fleet.vehicle.log.fuel</field>
- <field name="arch" type="xml">
- <graph string="Fuel Costs Per Month">
- <field name="vehicle_id" type="row"/>
- <field name="cost_amount" type="measure"/>
- </graph>
- </field>
- </record>
-
- <record id='fleet_vehicle_log_fuel_action' model='ir.actions.act_window'>
- <field name="name">Vehicles Fuel Logs</field>
- <field name="res_model">fleet.vehicle.log.fuel</field>
- <field name="view_mode">tree,kanban,form,graph</field>
- <field name="context">{"search_default_groupby_vehicle" : True}</field>
- <field name="help" type="html">
- <p class="o_view_nocontent_smiling_face">
- Create a new fuel log
- </p><p>
- Here you can add refuelling entries for all vehicles.
- </p>
- </field>
- </record>
-
- <menuitem action="fleet_vehicle_log_fuel_action" parent="fleet_vehicles" id="fleet_vehicle_log_fuel_menu" groups="fleet_group_user"/>
+ <menuitem action="fleet_vehicle_log_contract_action" parent="fleet_vehicles" id="fleet_vehicle_log_contract_menu" groups="fleet_group_user" sequence="2"/>
<record id='fleet_vehicle_log_services_view_form' model='ir.ui.view'>
<field name="name">fleet.vehicle.log.services.form</field>
<field name="model">fleet.vehicle.log.services</field>
<field name="arch" type="xml">
<form string="Services Logs">
+ <field name="currency_id" invisible="1" />
<sheet>
<group col="2">
- <group string="Services Details">
- <field name="vehicle_id"/>
- <field name="cost_subtype_id" string="Service Type" domain="['|',('category','=','service'),('category','=','both')]" required="1"/>
- <field name="amount"/>
+ <group>
+ <field name="service_type_id" />
+ <field name="date" />
+ <field name="amount" widget="monetary"/>
+ <field name="vendor_id"/>
</group>
- <group string="Odometer Details">
+ <group>
+ <field name="vehicle_id"/>
+ <field name="purchaser_id"/>
<label for="odometer"/>
<div class="o_row">
<field name="odometer"/>
@@ -546,26 +217,15 @@
</div>
</group>
</group>
- <group col="2">
- <group string="Additional Details">
- <field name="date" />
- <field name="purchaser_id" />
- <field name="vendor_id"/>
- <field name="inv_ref" />
- </group>
- </group>
- <group string="Included Services">
- <field name="cost_ids" nolabel="1">
- <tree string="Included Services" editable="bottom">
- <field name="cost_subtype_id" string="Service" domain="[('category','=','service')]"/>
- <field name="amount" sum="Price" string="Indicative Cost"/>
- </tree>
- </field>
- </group>
<group string="Notes">
<field nolabel="1" name="notes" placeholder="Write here any other information related to the service completed."/>
</group>
</sheet>
+ <div class="oe_chatter">
+ <field name="message_follower_ids" widget="mail_followers"/>
+ <field name="activity_ids" widget="mail_activity"/>
+ <field name="message_ids" widget="mail_thread" options='{"thread_level": 1}'/>
+ </div>
</form>
</field>
</record>
@@ -576,11 +236,11 @@
<field name="arch" type="xml">
<tree string="Services Logs">
<field name="date" />
+ <field name="service_type_id" />
<field name="vehicle_id" />
- <field name="cost_subtype_id"/>
<field name="purchaser_id"/>
<field name="vendor_id" />
- <field name="inv_ref" />
+ <field name="inv_ref" invisible="1" />
<field name="notes" />
<field name="amount" sum="Total"/>
</tree>
@@ -592,6 +252,7 @@
<field name="model">fleet.vehicle.log.services</field>
<field name="arch" type="xml">
<kanban class="o_kanban_mobile">
+ <field name="currency_id"/>
<templates>
<t t-name="kanban-box">
<div t-attf-class="oe_kanban_global_click">
@@ -602,14 +263,11 @@
</strong>
</div>
<div>
- <field name="cost_subtype_id"/>
- </div>
- <div>
<field name="purchaser_id"/>
</div>
<div>
<span><field name="vendor_id"/></span>
- <span class="float-right"><field name="amount"/></span>
+ <span class="float-right"><field name="amount" widget="monetary"/></span>
</div>
</div>
</t>
@@ -625,7 +283,7 @@
<graph string="Services Costs Per Month" stacked="True">
<field name="date" type="row"/>
<field name="vehicle_id" type="row"/>
- <field name="cost_amount" type="measure"/>
+ <field name="amount" type="measure"/>
</graph>
</field>
</record>
@@ -636,13 +294,13 @@
<field name="arch" type="xml">
<search string="Services Logs" >
<field name="vehicle_id"/>
- <field name="cost_subtype_id"/>
+ <field name="service_type_id"/>
</search>
</field>
</record>
<record id='fleet_vehicle_log_services_action' model='ir.actions.act_window'>
- <field name="name">Vehicles Services Logs</field>
+ <field name="name">Services</field>
<field name="res_model">fleet.vehicle.log.services</field>
<field name="view_mode">tree,kanban,form,graph</field>
<field name="help" type="html">
@@ -655,6 +313,6 @@
</field>
</record>
- <menuitem action="fleet_vehicle_log_services_action" parent="fleet_vehicles" id="fleet_vehicle_log_services_menu" groups="fleet_group_user"/>
+ <menuitem action="fleet_vehicle_log_services_action" parent="fleet_vehicles" id="fleet_vehicle_log_services_menu" groups="fleet_group_user" sequence="3"/>
</odoo>
diff --git a/addons/fleet/views/fleet_vehicle_model_views.xml b/addons/fleet/views/fleet_vehicle_model_views.xml
index 9f69f06f91e..12449915e66 100644
--- a/addons/fleet/views/fleet_vehicle_model_views.xml
+++ b/addons/fleet/views/fleet_vehicle_model_views.xml
@@ -6,6 +6,7 @@
<field name="arch" type="xml">
<form string="Model">
<sheet>
+ <widget name="web_ribbon" text="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
<field name="image_128" widget='image' class="oe_avatar"/>
<div class="oe_title">
<label for="name" class="oe_edit_only"/>
@@ -19,6 +20,7 @@
</div>
<group>
<group>
+ <field name="active" invisible="1"/>
<field name="manager_id" groups="fleet.fleet_group_manager"/>
</group>
</group>
@@ -144,7 +146,7 @@
<field name="name" />
<templates>
<t t-name="kanban-box">
- <div class="oe_kanban_vignette oe_semantic_html_override">
+ <div class="oe_kanban_vignette oe_semantic_html_override oe_kanban_global_click">
<a type="open" href="#" class="o_kanban_image oe_kanban_action">
<img alt="Open" t-att-src="kanban_image('fleet.vehicle.model.brand', 'image_128', record.id.raw_value)" class="img-fluid" style="width:100px;"/>
</a>
@@ -155,6 +157,12 @@
</a>
</h4>
</div>
+ <div class="o_kanban_button">
+ <a type="object" name="action_brand_model" class="oe_kanban_action oe_kanban_action_a">
+ <field name="model_count"/>
+ MODELS
+ </a>
+ </div>
</div>
</t>
</templates>
diff --git a/addons/fleet/views/fleet_vehicle_views.xml b/addons/fleet/views/fleet_vehicle_views.xml
index 829b75cc22d..49cc2975837 100644
--- a/addons/fleet/views/fleet_vehicle_views.xml
+++ b/addons/fleet/views/fleet_vehicle_views.xml
@@ -26,14 +26,6 @@
help="show the contract for this vehicle">
<field name="contract_count" widget="statinfo" string="Contracts"/>
</button>
- <button name="act_show_log_cost"
- type="object"
- class="oe_stat_button"
- icon="fa-usd"
- help="show all the costs for this vehicle"
- groups="fleet.fleet_group_manager">
- <field name="cost_count" widget="statinfo" string="Costs"/>
- </button>
<button name="return_action_to_open"
type="object"
class="oe_stat_button"
@@ -45,14 +37,6 @@
<button name="return_action_to_open"
type="object"
class="oe_stat_button"
- icon="fa-flask"
- context="{'xml_id':'fleet_vehicle_log_fuel_action'}"
- help="show the fuel logs for this vehicle" >
- <field name="fuel_logs_count" widget="statinfo" string="Fuel"/>
- </button>
- <button name="return_action_to_open"
- type="object"
- class="oe_stat_button"
icon="fa-tachometer"
context="{'xml_id':'fleet_vehicle_odometer_action'}"
help="show the odometer logs for this vehicle" >
@@ -127,6 +111,9 @@
<field name="power"/><span>kW</span>
</div>
</group>
+ <group string="Description">
+ <field name="description" nolabel="1" placeholder="Write here any other information related to this vehicle" />
+ </group>
</group>
</sheet>
<div class="oe_chatter">
@@ -150,6 +137,7 @@
<field name="future_driver_id"/>
<field name="log_drivers" invisible="1"/>
<field name="vin_sn"/>
+ <field name="co2"/>
<field name="acquisition_date"/>
<field name="state_id"/>
<field name="company_id" groups="base.group_multi_company"/>
@@ -228,7 +216,7 @@
</div>
<div class="oe_kanban_details">
<strong class="o_kanban_record_title">
- <field name="license_plate"/> : <field name="model_id"/>
+ <t t-if="license_plate"><field name="license_plate"/> :</t> <field name="model_id"/>
</strong>
<div class="o_kanban_tags_section">
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
@@ -292,19 +280,17 @@
<field name="name">Vehicles</field>
<field name="res_model">fleet.vehicle</field>
<field name="view_mode">kanban,tree,form,activity</field>
- <field name="context">{'search_default_groupby_status': 1}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new vehicle
</p><p>
- Manage your fleet by keeping track of the contracts, services, odometers and fuel logs associated to each vehicle.
+ Manage your fleet by keeping track of the contracts, services and odometers associated to each vehicle.
</p>
</field>
</record>
<menuitem name="Vehicles" parent="menu_root" id="fleet_vehicles" sequence="2" groups="fleet_group_user"/>
- <menuitem action="fleet_vehicle_action" parent="fleet_vehicles" id="fleet_vehicle_menu" groups="fleet_group_user"/>
- <menuitem action="fleet_vehicle_model_action" parent="fleet_vehicles" id="fleet_vehicle_model_menu" sequence="11"/>
+ <menuitem action="fleet_vehicle_action" parent="fleet_vehicles" id="fleet_vehicle_menu" groups="fleet_group_user" sequence="1"/>
<record id='fleet_vehicle_odometer_view_form' model='ir.ui.view'>
<field name="name">fleet.vehicle.odometer.form</field>
@@ -390,10 +376,10 @@
</record>
<record id='fleet_vehicle_odometer_action' model='ir.actions.act_window'>
- <field name="name">Vehicles Odometer</field>
+ <field name="name">Odometers</field>
<field name="res_model">fleet.vehicle.odometer</field>
<field name="view_mode">tree,kanban,form,graph</field>
- <field name="context">{"search_default_groupby_vehicle" : True}</field>
+ <field name="context"></field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new odometer log
@@ -403,7 +389,7 @@
</field>
</record>
- <menuitem action="fleet_vehicle_odometer_action" parent="fleet_vehicles" id="fleet_vehicle_odometer_menu" groups="fleet_group_user"/>
+ <menuitem action="fleet_vehicle_odometer_action" parent="fleet_vehicles" id="fleet_vehicle_odometer_menu" groups="fleet_group_user" sequence="10"/>
<record id='fleet_vehicle_service_types_view_tree' model='ir.ui.view'>
<field name="name">fleet.service.type.tree</field>
@@ -411,7 +397,6 @@
<field name="arch" type="xml">
<tree string="Service Types" editable="top">
<field name="name" />
- <field name="category" invisible="1"/>
</tree>
</field>
</record>
@@ -420,8 +405,6 @@
<field name="name">Service Types</field>
<field name="res_model">fleet.service.type</field>
<field name="view_mode">tree,form</field>
- <field name="domain">[('category','=','service')]</field>
- <field name="context">{'default_category':'service'}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new type of service
@@ -430,22 +413,7 @@
</p>
</field>
</record>
- <menuitem action="fleet_vehicle_service_types_action" parent="fleet_configuration" id="fleet_vehicle_service_types_menu" sequence="3"/>
-
- <record id='fleet_vehicle_contract_types_action' model='ir.actions.act_window'>
- <field name="name">Contract Types</field>
- <field name="res_model">fleet.service.type</field>
- <field name="view_mode">tree,form</field>
- <field name="domain">[('category','=','contract')]</field>
- <field name="context">{'default_category':'contract'}</field>
- <field name="help" type="html">
- <p class="o_view_nocontent_smiling_face">
- Create a new type of contract
- </p>
- </field>
- </record>
- <menuitem action="fleet_vehicle_contract_types_action" parent="fleet_configuration" id="fleet_vehicle_contract_types_menu" sequence="4"/>
-
+ <menuitem action="fleet_vehicle_service_types_action" parent="fleet_configuration" id="fleet_vehicle_service_types_menu" sequence="3" groups="base.group_no_one"/>
<record id='fleet_vehicle_state_view_tree' model='ir.ui.view'>
<field name="name">fleet.vehicle.state.tree</field>
@@ -472,7 +440,7 @@
</field>
</record>
- <menuitem action="fleet_vehicle_state_action" parent="fleet_configuration" id="fleet_vehicle_state_menu" groups="fleet_group_manager"/>
+ <menuitem action="fleet_vehicle_state_action" parent="fleet_configuration" id="fleet_vehicle_state_menu" groups="base.group_no_one"/>
<record id="fleet_vehicle_tag_view_view_form" model="ir.ui.view">
<field name="name">fleet.vehicle.tag.form</field>
@@ -508,7 +476,7 @@
</field>
</record>
- <menuitem id="fleet_vehicle_tag_menu" parent="fleet_configuration" action="fleet_vehicle_tag_action" sequence="89"/>
+ <menuitem id="fleet_vehicle_tag_menu" parent="fleet_configuration" action="fleet_vehicle_tag_action" sequence="89" groups="base.group_no_one"/>
<record id="fleet_vehicle_assignation_log_view_list" model="ir.ui.view">
<field name="name">fleet.vehicle.assignation.log.view.tree</field>