Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
119 changes: 119 additions & 0 deletions fleet_vehicle_technical_control/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
===============================
Fleet Vehicle Technical Control
===============================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:28ffa6cf4d1a378bc0ae1f850c1340e5c3e44a3b24981cae0a0c36850558698f
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Ffleet-lightgray.png?logo=github
:target: https://github.com/OCA/fleet/tree/18.0/fleet_vehicle_technical_control
:alt: OCA/fleet
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/fleet-18-0/fleet-18-0-fleet_vehicle_technical_control
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/fleet&target_branch=18.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|

This module extends Fleet vehicles with technical control tracking.

It adds a Technical Control page on the vehicle form where users can
define the control frequency in months, see the last and next technical
control dates, and review the history of completed controls.

**Table of contents**

.. contents::
:local:

Configuration
=============

Fleet managers can set the control frequency directly on each vehicle
from the Technical Control page using the
``Technical Control Every (Months)`` field. The default frequency is 12
months.

Usage
=====

To configure technical control planning:

- Go to Fleet > Vehicles.
- Open a vehicle.
- Open the Technical Control page.
- Fill Technical Control Every (Months).

To record a completed technical control:

- Click Technical Control Done.
- Fill the control date and result.
- If the result is Not Valid, fill the comment.
- Optionally upload an attachment.
- Save the form.

A new line is added to the history. The vehicle's last technical control
date is computed from the most recent history line, and the next
technical control date is computed from that date and the configured
frequency.

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/fleet/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/fleet/issues/new?body=module:%20fleet_vehicle_technical_control%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Authors
-------

* ACSONE SA/NV

Contributors
------------

- Souheil Bejaoui - ACSONE SA/NV souheil.bejaoui@acsone.eu

Maintainers
-----------

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

.. |maintainer-sbejaoui| image:: https://github.com/sbejaoui.png?size=40px
:target: https://github.com/sbejaoui
:alt: sbejaoui

Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:

|maintainer-sbejaoui|

This module is part of the `OCA/fleet <https://github.com/OCA/fleet/tree/18.0/fleet_vehicle_technical_control>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
1 change: 1 addition & 0 deletions fleet_vehicle_technical_control/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
20 changes: 20 additions & 0 deletions fleet_vehicle_technical_control/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Copyright 2026 ACSONE SA/NV
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

{
"name": "Fleet Vehicle Technical Control",
"summary": "Track vehicle technical controls in Fleet",
"version": "18.0.1.0.0",
"license": "AGPL-3",
"author": "ACSONE SA/NV,Odoo Community Association (OCA)",
"website": "https://github.com/OCA/fleet",
"depends": [
"fleet",
],
"data": [
"security/fleet_vehicle_technical_control.xml",
"views/fleet_vehicle_technical_control.xml",
"views/fleet_vehicle.xml",
],
"maintainers": ["sbejaoui"],
}
153 changes: 153 additions & 0 deletions fleet_vehicle_technical_control/i18n/fr.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * fleet_vehicle_technical_control
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0+e\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-06-29 14:40+0000\n"
"PO-Revision-Date: 2026-06-29 14:40+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"

#. module: fleet_vehicle_technical_control
#. odoo-python
#: code:addons/fleet_vehicle_technical_control/models/fleet_vehicle_technical_control.py:0
msgid "A comment is required when the technical control is not valid."
msgstr "Un commentaire est requis lorsque le contrôle technique n'est pas valide."

#. module: fleet_vehicle_technical_control
#: model_terms:ir.ui.view,arch_db:fleet_vehicle_technical_control.fleet_vehicle_view_form
msgid "Actions"
msgstr "Actions"

#. module: fleet_vehicle_technical_control
#: model:ir.model.fields,field_description:fleet_vehicle_technical_control.field_fleet_vehicle_technical_control__attachment_id
msgid "Attachment"
msgstr "Pièce jointe"

#. module: fleet_vehicle_technical_control
#: model:ir.model.fields,field_description:fleet_vehicle_technical_control.field_fleet_vehicle_technical_control__attachment_filename
msgid "Attachment Filename"
msgstr "Nom du fichier joint"

#. module: fleet_vehicle_technical_control
#: model:ir.model.fields,field_description:fleet_vehicle_technical_control.field_fleet_vehicle_technical_control__comment
msgid "Comment"
msgstr "Commentaire"

#. module: fleet_vehicle_technical_control
#: model:ir.model.fields,field_description:fleet_vehicle_technical_control.field_fleet_vehicle_technical_control__create_uid
msgid "Created by"
msgstr "Créé par"

#. module: fleet_vehicle_technical_control
#: model:ir.model.fields,field_description:fleet_vehicle_technical_control.field_fleet_vehicle_technical_control__create_date
msgid "Created on"
msgstr "Créé le"

#. module: fleet_vehicle_technical_control
#: model:ir.model.fields,field_description:fleet_vehicle_technical_control.field_fleet_vehicle_technical_control__date
msgid "Date"
msgstr "Date"

#. module: fleet_vehicle_technical_control
#: model:ir.model.fields,field_description:fleet_vehicle_technical_control.field_fleet_vehicle_technical_control__display_name
msgid "Display Name"
msgstr "Nom affiché"

#. module: fleet_vehicle_technical_control
#: model:ir.model,name:fleet_vehicle_technical_control.model_fleet_vehicle_technical_control
msgid "Fleet Vehicle Technical Control"
msgstr "Contrôle technique du véhicule de flotte"

#. module: fleet_vehicle_technical_control
#: model_terms:ir.ui.view,arch_db:fleet_vehicle_technical_control.fleet_vehicle_view_form
msgid "History"
msgstr "Historique"

#. module: fleet_vehicle_technical_control
#: model:ir.model.fields,field_description:fleet_vehicle_technical_control.field_fleet_vehicle_technical_control__id
msgid "ID"
msgstr "ID"

#. module: fleet_vehicle_technical_control
#: model:ir.model.fields,field_description:fleet_vehicle_technical_control.field_fleet_vehicle__date_last_technical_control
msgid "Last Technical Control Date"
msgstr "Date du dernier contrôle technique"

#. module: fleet_vehicle_technical_control
#: model:ir.model.fields,field_description:fleet_vehicle_technical_control.field_fleet_vehicle_technical_control__write_uid
msgid "Last Updated by"
msgstr "Dernière mise à jour par"

#. module: fleet_vehicle_technical_control
#: model:ir.model.fields,field_description:fleet_vehicle_technical_control.field_fleet_vehicle_technical_control__write_date
msgid "Last Updated on"
msgstr "Dernière mise à jour le"

#. module: fleet_vehicle_technical_control
#: model:ir.model.fields,field_description:fleet_vehicle_technical_control.field_fleet_vehicle__date_next_technical_control
msgid "Next Technical Control Date"
msgstr "Date du prochain contrôle technique"

#. module: fleet_vehicle_technical_control
#: model:ir.model.fields.selection,name:fleet_vehicle_technical_control.selection__fleet_vehicle_technical_control__result__not_valid
msgid "Not Valid"
msgstr "Non valide"

#. module: fleet_vehicle_technical_control
#: model_terms:ir.ui.view,arch_db:fleet_vehicle_technical_control.fleet_vehicle_view_form
msgid "Planning"
msgstr "Planification"

#. module: fleet_vehicle_technical_control
#: model:ir.model.fields,field_description:fleet_vehicle_technical_control.field_fleet_vehicle_technical_control__result
msgid "Result"
msgstr "Résultat"

#. module: fleet_vehicle_technical_control
#: model_terms:ir.ui.view,arch_db:fleet_vehicle_technical_control.fleet_vehicle_view_form
msgid "Technical Control"
msgstr "Contrôle technique"

#. module: fleet_vehicle_technical_control
#. odoo-python
#: code:addons/fleet_vehicle_technical_control/models/fleet_vehicle.py:0
#: model_terms:ir.ui.view,arch_db:fleet_vehicle_technical_control.fleet_vehicle_technical_control_view_form
#: model_terms:ir.ui.view,arch_db:fleet_vehicle_technical_control.fleet_vehicle_view_form
msgid "Technical Control Done"
msgstr "Contrôle technique effectué"

#. module: fleet_vehicle_technical_control
#: model:ir.model.fields,field_description:fleet_vehicle_technical_control.field_fleet_vehicle__technical_control_every_months
msgid "Technical Control Every (Months)"
msgstr "Contrôle technique tous les (mois)"

#. module: fleet_vehicle_technical_control
#: model:ir.model.fields,field_description:fleet_vehicle_technical_control.field_fleet_vehicle__technical_control_ids
msgid "Technical Controls"
msgstr "Contrôles techniques"

#. module: fleet_vehicle_technical_control
#. odoo-python
#: code:addons/fleet_vehicle_technical_control/models/fleet_vehicle.py:0
msgid "Technical control frequency must be greater than or equal to 0."
msgstr "La fréquence du contrôle technique doit être supérieure ou égale à 0."

#. module: fleet_vehicle_technical_control
#: model:ir.model.fields.selection,name:fleet_vehicle_technical_control.selection__fleet_vehicle_technical_control__result__valid
msgid "Valid"
msgstr "Valide"

#. module: fleet_vehicle_technical_control
#: model:ir.model,name:fleet_vehicle_technical_control.model_fleet_vehicle
#: model:ir.model.fields,field_description:fleet_vehicle_technical_control.field_fleet_vehicle_technical_control__vehicle_id
msgid "Vehicle"
msgstr "Véhicule"
2 changes: 2 additions & 0 deletions fleet_vehicle_technical_control/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import fleet_vehicle
from . import fleet_vehicle_technical_control
72 changes: 72 additions & 0 deletions fleet_vehicle_technical_control/models/fleet_vehicle.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# Copyright 2026 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from dateutil.relativedelta import relativedelta

from odoo import _, api, fields, models
from odoo.exceptions import ValidationError


class FleetVehicle(models.Model):
_inherit = "fleet.vehicle"

technical_control_every_months = fields.Integer(
string="Technical Control Every (Months)",
default=12,
)
date_last_technical_control = fields.Date(
string="Last Technical Control Date",
compute="_compute_date_last_technical_control",
store=True,
)
date_next_technical_control = fields.Date(
string="Next Technical Control Date",
compute="_compute_date_next_technical_control",
)
technical_control_ids = fields.One2many(
comodel_name="fleet.vehicle.technical.control",
inverse_name="vehicle_id",
string="Technical Controls",
)

@api.depends("technical_control_ids.date")
def _compute_date_last_technical_control(self):
for vehicle in self:
vehicle.date_last_technical_control = max(
vehicle.technical_control_ids.mapped("date") or [False]
)

@api.depends("date_last_technical_control", "technical_control_every_months")
def _compute_date_next_technical_control(self):
for vehicle in self:
if (
vehicle.date_last_technical_control
and vehicle.technical_control_every_months
):
vehicle.date_next_technical_control = (
vehicle.date_last_technical_control
+ relativedelta(months=vehicle.technical_control_every_months)
)
else:
vehicle.date_next_technical_control = False

@api.constrains("technical_control_every_months")
def _check_technical_control_every_months(self):
for vehicle in self:
if vehicle.technical_control_every_months < 0:
raise ValidationError(
_("Technical control frequency must be greater than or equal to 0.")
)

def action_technical_control_done(self):
self.ensure_one()
return {
"type": "ir.actions.act_window",
"name": _("Technical Control Done"),
"res_model": "fleet.vehicle.technical.control",
"view_mode": "form",
"target": "new",
"context": {
"default_vehicle_id": self.id,
},
}
Loading
Loading