Skip to content
Closed
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
8 changes: 4 additions & 4 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ repos:
hooks:
- id: whool-init
- repo: https://github.com/oca/maintainer-tools
rev: d5fab7ee87fceee858a3d01048c78a548974d935
rev: f9b919b9868143135a9c9cb03021089cabba8223
hooks:
# update the NOT INSTALLABLE ADDONS section above
- id: oca-update-pre-commit-excluded-addons
Expand All @@ -60,7 +60,7 @@ repos:
- --convert-fragments-to-markdown
- id: oca-gen-external-dependencies
- repo: https://github.com/OCA/odoo-pre-commit-hooks
rev: v0.0.25
rev: v0.1.4
hooks:
- id: oca-checks-odoo-module
- id: oca-checks-po
Expand Down Expand Up @@ -118,13 +118,13 @@ repos:
- id: mixed-line-ending
args: ["--fix=lf"]
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.1.3
rev: v0.12.4
hooks:
- id: ruff
args: [--fix, --exit-non-zero-on-fix]
- id: ruff-format
- repo: https://github.com/OCA/pylint-odoo
rev: v9.0.4
rev: v9.3.12
hooks:
- id: pylint_odoo
name: pylint with optional checks
Expand Down
87 changes: 87 additions & 0 deletions fleet_vehicle_log_fuel/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association

======================
Fleet Vehicle Log Fuel
======================

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

.. |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/license-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/17.0/fleet_vehicle_log_fuel
:alt: OCA/fleet
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/fleet-17-0/fleet-17-0-fleet_vehicle_log_fuel
: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=17.0
:alt: Try me on Runboat

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

This module adds fuel logs in a similar way as services.

**Table of contents**

.. contents::
:local:

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_log_fuel%0Aversion:%2017.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
-------

* ForgeFlow
* Tecnativa

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

- Miquel Raïch <miquel.raich@forgeflow.com>
- `Tecnativa <https://www.tecnativa.com>`__:

- Víctor Martínez
- Pedro M. Baeza
- Carolina Fernandez
- Shubham Kumar Pal

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.

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

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
2 changes: 2 additions & 0 deletions fleet_vehicle_log_fuel/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import models
from . import report
22 changes: 22 additions & 0 deletions fleet_vehicle_log_fuel/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Copyright 2022 ForgeFlow S.L. <https://www.forgeflow.com>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

{
"name": "Fleet Vehicle Log Fuel",
"summary": "Add Log Fuels for your vehicles.",
"version": "17.0.1.0.0",
"category": "Fleet",
"author": "ForgeFlow, Tecnativa, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/fleet",
"license": "AGPL-3",
"depends": ["fleet"],
"data": [
"security/ir.model.access.csv",
"security/fleet_security.xml",
"views/fleet_board_view.xml",
"views/fleet_vehicle_log_fuel_views.xml",
"views/fleet_vehicle_views.xml",
],
"installable": True,
"auto_install": False,
}
2 changes: 2 additions & 0 deletions fleet_vehicle_log_fuel/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import fleet_vehicle_log_fuel
from . import fleet_vehicle
42 changes: 42 additions & 0 deletions fleet_vehicle_log_fuel/models/fleet_vehicle.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Copyright 2022 ForgeFlow S.L. <https://www.forgeflow.com>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).


from odoo import api, fields, models


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

log_fuels = fields.One2many("fleet.vehicle.log.fuel", "vehicle_id", "Fuel Logs")
fuel_count = fields.Integer(compute="_compute_fuel_count", string="Fuel Log Count")

@api.depends("log_fuels")
def _compute_fuel_count(self):
res = self.env["fleet.vehicle.log.fuel"].read_group(
domain=[("vehicle_id", "in", self.ids)],
fields=["vehicle_id"],
groupby=["vehicle_id"],
)
res_dict = {x["vehicle_id"][0]: x["vehicle_id_count"] for x in res}
for record in self:
record.fuel_count = res_dict.get(record.id, 0)
return res

def action_view_log_fuel(self):
action = self.env["ir.actions.act_window"]._for_xml_id(
"fleet_vehicle_log_fuel.fleet_vehicle_log_fuel_action"
)
action.update(
context=dict(self.env.context, default_vehicle_id=self.id, group_by=False),
domain=[("vehicle_id", "=", self.id)],
)
return action


class FleetServiceType(models.Model):
_inherit = "fleet.service.type"

category = fields.Selection(
selection_add=[("fuel", "Fuel Log")], ondelete={"fuel": "cascade"}
)
172 changes: 172 additions & 0 deletions fleet_vehicle_log_fuel/models/fleet_vehicle_log_fuel.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
# Copyright 2022 ForgeFlow S.L. <https://www.forgeflow.com>
# Copyright 2024 Tecnativa - Víctor Martínez
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

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


class FleetVehicleLogFuel(models.Model):
_name = "fleet.vehicle.log.fuel"
_inherit = ["mail.thread", "mail.activity.mixin"]
_rec_name = "service_type_id"
_description = "Fuel log for vehicles"

# REMOVE READONLY_STATES completely - handle readonly in views only

active = fields.Boolean(default=True)
vehicle_id = fields.Many2one(
"fleet.vehicle",
"Vehicle",
required=True,
help="Vehicle concerned by this log",
tracking=True,
)
amount = fields.Monetary("Cost", tracking=True)
description = fields.Char(tracking=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="_compute_odometer",
store=True,
inverse="_inverse_odometer",
string="Odometer Value",
help="Odometer measure of the vehicle at the moment of this log",
tracking=True,
)
odometer_unit = fields.Selection(related="vehicle_id.odometer_unit", string="Unit")
date = fields.Date(
help="Date when the cost has been executed",
default=fields.Date.context_today,
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")
purchaser_id = fields.Many2one(
"res.partner",
string="Driver",
compute="_compute_purchaser_id",
store=True,
tracking=True,
)
inv_ref = fields.Char("Vendor Reference")
vendor_id = fields.Many2one("res.partner", "Vendor", tracking=True)
notes = fields.Text()
service_type_id = fields.Many2one(
"fleet.service.type",
"Service Type",
required=True,
default=lambda self: self.env.ref(
"fleet.type_service_refueling", raise_if_not_found=False
),
tracking=True,
)
state = fields.Selection(
[
("todo", "To Do"),
("running", "Running"),
("done", "Done"),
("cancelled", "Cancelled"),
],
default="todo",
string="Stage",
tracking=True,
)
liter = fields.Float(tracking=True)
price_per_liter = fields.Float(tracking=True)
service_id = fields.Many2one(
comodel_name="fleet.vehicle.log.services", readonly=True, copy=False
)

@api.onchange("liter", "price_per_liter", "amount")
def _onchange_liter_price_amount(self):
liter = float(self.liter or 0.0)
price_per_liter = float(self.price_per_liter or 0.0)
amount = float(self.amount or 0.0)
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)

@api.depends("odometer_id", "odometer_id.value")
def _compute_odometer(self):
for record in self.filtered("odometer_id"):
record.odometer = record.odometer_id.value

def _inverse_odometer(self):
if any(not x.odometer for x in self):
raise UserError(
_("Emptying the odometer value of a vehicle is not allowed.")
)
for record in self:
odometer_obj = self.env["fleet.vehicle.odometer"]
odometer = odometer_obj.create(
record._prepare_fleet_vehicle_odometer_vals()
)
record.odometer_id = odometer

@api.depends("vehicle_id.driver_id")
def _compute_purchaser_id(self):
for service in self:
service.purchaser_id = service.vehicle_id.driver_id

def button_running(self):
self.filtered(lambda x: x.state == "todo").write({"state": "running"})
return True

def _prepare_fleet_vehicle_odometer_vals(self):
return {
"value": self.odometer,
"date": self.date or fields.Date.context_today(self),
"vehicle_id": self.vehicle_id.id,
}

def _prepare_fleet_vehicle_log_services_vals(self):
return {
"service_type_id": self.service_type_id.id,
"description": self.description,
"vehicle_id": self.vehicle_id.id,
"amount": self.amount,
"odometer": self.odometer,
"vendor_id": self.vendor_id.id if self.vendor_id else False,
"state": "done",
}

def button_todo(self):
records = self.filtered(lambda x: x.state == "cancelled")
records.write({"state": "todo"})
return True

def button_done(self):
for item in self.filtered(lambda x: x.state == "running"):
service = self.env["fleet.vehicle.log.services"].create(
item._prepare_fleet_vehicle_log_services_vals()
)
item.write(
{
"service_id": service.id,
"state": "done",
}
)
return True

def button_cancel(self):
records = self.filtered(lambda x: x.state in ["todo", "running", "done"])
records.mapped("service_id").sudo().unlink()
records.write({"state": "cancelled"})
return True
3 changes: 3 additions & 0 deletions fleet_vehicle_log_fuel/pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"
6 changes: 6 additions & 0 deletions fleet_vehicle_log_fuel/readme/CONTRIBUTORS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
- Miquel Raïch \<miquel.raich@forgeflow.com\>
- [Tecnativa](https://www.tecnativa.com):
- Víctor Martínez
- Pedro M. Baeza
- Carolina Fernandez
- Shubham Kumar Pal
1 change: 1 addition & 0 deletions fleet_vehicle_log_fuel/readme/DESCRIPTION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
This module adds fuel logs in a similar way as services.
1 change: 1 addition & 0 deletions fleet_vehicle_log_fuel/report/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import fleet_report
Loading