diff --git a/fleet_vehicle_log_fuel/README.rst b/fleet_vehicle_log_fuel/README.rst index 1e4518a7..7b31fa86 100644 --- a/fleet_vehicle_log_fuel/README.rst +++ b/fleet_vehicle_log_fuel/README.rst @@ -7,7 +7,7 @@ Fleet Vehicle Log Fuel !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:5c2c844dd3f4a8486251e46da663327385b9e7026e9370cc9e62d2bbb7175bdf + !! source digest: sha256:7bbb43f1db843d344831228d2a34ff7671f48f2af9efe85da12054b70acdff9b !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png @@ -17,13 +17,13 @@ Fleet Vehicle Log Fuel :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/15.0/fleet_vehicle_log_fuel + :target: https://github.com/OCA/fleet/tree/16.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-15-0/fleet-15-0-fleet_vehicle_log_fuel + :target: https://translation.odoo-community.org/projects/fleet-16-0/fleet-16-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=15.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/fleet&target_branch=16.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -41,7 +41,7 @@ Bug Tracker Bugs are tracked on `GitHub 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -52,11 +52,16 @@ Authors ~~~~~~~ * ForgeFlow +* Tecnativam Contributors ~~~~~~~~~~~~ * Miquel Raïch +* `Tecnativa `_: + + * Víctor Martínez + * Pedro M. Baeza Maintainers ~~~~~~~~~~~ @@ -71,6 +76,6 @@ 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 `_ project on GitHub. +This module is part of the `OCA/fleet `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/fleet_vehicle_log_fuel/__manifest__.py b/fleet_vehicle_log_fuel/__manifest__.py index a8577a60..bb904b32 100644 --- a/fleet_vehicle_log_fuel/__manifest__.py +++ b/fleet_vehicle_log_fuel/__manifest__.py @@ -4,9 +4,9 @@ { "name": "Fleet Vehicle Log Fuel", "summary": "Add Log Fuels for your vehicles.", - "version": "15.0.2.0.0", - "category": "Human Resources/Fleet", - "author": "ForgeFlow, Odoo Community Association (OCA)", + "version": "16.0.1.0.0", + "category": "Fleet", + "author": "ForgeFlow, Tecnativam, Odoo Community Association (OCA)", "website": "https://github.com/OCA/fleet", "license": "AGPL-3", "depends": ["fleet"], @@ -14,7 +14,7 @@ "security/ir.model.access.csv", "security/fleet_security.xml", "views/fleet_board_view.xml", - "views/fleet_vehicle_cost_views.xml", + "views/fleet_vehicle_log_fuel_views.xml", "views/fleet_vehicle_views.xml", ], "installable": True, diff --git a/fleet_vehicle_log_fuel/i18n/es.po b/fleet_vehicle_log_fuel/i18n/es.po index d9fe97b5..100c696d 100644 --- a/fleet_vehicle_log_fuel/i18n/es.po +++ b/fleet_vehicle_log_fuel/i18n/es.po @@ -6,16 +6,16 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-06-14 10:08+0000\n" -"PO-Revision-Date: 2023-10-12 11:38+0000\n" +"POT-Creation-Date: 2024-03-07 07:33+0000\n" +"PO-Revision-Date: 2024-03-07 08:35+0100\n" "Last-Translator: Ivorra78 \n" "Language-Team: \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" +"Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Poedit 3.0.1\n" #. module: fleet_vehicle_log_fuel #: model:ir.model.fields,field_description:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__message_needaction @@ -58,6 +58,11 @@ msgstr "Archivado" msgid "Attachment Count" msgstr "Conteo de archivos adjuntos" +#. module: fleet_vehicle_log_fuel +#: model_terms:ir.ui.view,arch_db:fleet_vehicle_log_fuel.fleet_vehicle_log_fuel_view_form +msgid "Cancel" +msgstr "Cancelar" + #. module: fleet_vehicle_log_fuel #: model:ir.model.fields.selection,name:fleet_vehicle_log_fuel.selection__fleet_vehicle_log_fuel__state__cancelled msgid "Cancelled" @@ -87,7 +92,7 @@ msgstr "Coste" #. module: fleet_vehicle_log_fuel #: model:ir.model.fields,field_description:fleet_vehicle_log_fuel.field_fleet_vehicle_cost_report__cost_type msgid "Cost Type" -msgstr "" +msgstr "Tipo de coste" #. module: fleet_vehicle_log_fuel #: model_terms:ir.actions.act_window,help:fleet_vehicle_log_fuel.fleet_vehicle_log_fuel_action @@ -131,6 +136,7 @@ msgstr "Nombre mostrado" #. module: fleet_vehicle_log_fuel #: model:ir.model.fields.selection,name:fleet_vehicle_log_fuel.selection__fleet_vehicle_log_fuel__state__done +#: model_terms:ir.ui.view,arch_db:fleet_vehicle_log_fuel.fleet_vehicle_log_fuel_view_form msgid "Done" msgstr "Hecho" @@ -140,6 +146,7 @@ msgid "Driver" msgstr "Conductor" #. module: fleet_vehicle_log_fuel +#. odoo-python #: code:addons/fleet_vehicle_log_fuel/models/fleet_vehicle_log_fuel.py:0 #, python-format msgid "Emptying the odometer value of a vehicle is not allowed." @@ -235,7 +242,6 @@ msgstr "Icono para indicar una actividad de excepción." #. module: fleet_vehicle_log_fuel #: model:ir.model.fields,help:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__message_needaction -#: model:ir.model.fields,help:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__message_unread msgid "If checked, new messages require your attention." msgstr "Si está marcado hay nuevos mensajes que requieren su atención." @@ -290,11 +296,6 @@ msgstr "Mensajes" msgid "My Activity Deadline" msgstr "Fecha Límite de Mi Actividad" -#. module: fleet_vehicle_log_fuel -#: model:ir.model.fields,field_description:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__activity_calendar_event_id -msgid "Next Activity Calendar Event" -msgstr "Próximo evento del calendario de actividades" - #. module: fleet_vehicle_log_fuel #: model:ir.model.fields,field_description:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__activity_date_deadline msgid "Next Activity Deadline" @@ -328,7 +329,7 @@ msgstr "Número de errores" #. module: fleet_vehicle_log_fuel #: model:ir.model.fields,help:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__message_needaction_counter -msgid "Number of messages which requires an action" +msgid "Number of messages requiring action" msgstr "Número de mensajes que requieren una acción" #. module: fleet_vehicle_log_fuel @@ -336,11 +337,6 @@ msgstr "Número de mensajes que requieren una acción" msgid "Number of messages with delivery error" msgstr "Número de mensajes con error de envío" -#. module: fleet_vehicle_log_fuel -#: model:ir.model.fields,help:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__message_unread_counter -msgid "Number of unread messages" -msgstr "Número de mensajes no leidos" - #. module: fleet_vehicle_log_fuel #: model:ir.model.fields,field_description:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__odometer_id msgid "Odometer" @@ -369,14 +365,25 @@ msgstr "Usuario responsable" #. module: fleet_vehicle_log_fuel #: model:ir.model.fields.selection,name:fleet_vehicle_log_fuel.selection__fleet_vehicle_log_fuel__state__running +#: model_terms:ir.ui.view,arch_db:fleet_vehicle_log_fuel.fleet_vehicle_log_fuel_view_form msgid "Running" msgstr "En proceso" +#. module: fleet_vehicle_log_fuel +#: model:ir.model.fields,field_description:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__service_id +msgid "Service" +msgstr "Servicio" + #. module: fleet_vehicle_log_fuel #: model:ir.model.fields,field_description:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__service_type_id msgid "Service Type" msgstr "Tipo de Servicio" +#. module: fleet_vehicle_log_fuel +#: model_terms:ir.ui.view,arch_db:fleet_vehicle_log_fuel.fleet_vehicle_log_fuel_view_form +msgid "Set to Todo" +msgstr "Marcar como Por hacer" + #. module: fleet_vehicle_log_fuel #: model:ir.model.fields,field_description:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__state msgid "Stage" @@ -415,21 +422,6 @@ msgstr "Tipo de actividad de excepción registrada." msgid "Unit" msgstr "Unidad" -#. module: fleet_vehicle_log_fuel -#: model:ir.model.fields,help:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__odometer_unit -msgid "Unit of the odometer " -msgstr "Unidad del odómetro " - -#. module: fleet_vehicle_log_fuel -#: model:ir.model.fields,field_description:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__message_unread -msgid "Unread Messages" -msgstr "Mensajes sin leer" - -#. module: fleet_vehicle_log_fuel -#: model:ir.model.fields,field_description:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__message_unread_counter -msgid "Unread Messages Counter" -msgstr "Contador de mensajes sin leer" - #. module: fleet_vehicle_log_fuel #: model:ir.model,name:fleet_vehicle_log_fuel.model_fleet_vehicle #: model:ir.model.fields,field_description:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__vehicle_id @@ -451,16 +443,6 @@ msgstr "Proveedor" msgid "Vendor Reference" msgstr "Referencia de proveedor" -#. module: fleet_vehicle_log_fuel -#: model:ir.model.fields,field_description:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__website_message_ids -msgid "Website Messages" -msgstr "Mensajes de la Página web" - -#. module: fleet_vehicle_log_fuel -#: model:ir.model.fields,help:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__website_message_ids -msgid "Website communication history" -msgstr "Historial de la comunicación en la web" - #. module: fleet_vehicle_log_fuel #: model_terms:ir.ui.view,arch_db:fleet_vehicle_log_fuel.fleet_vehicle_log_fuel_view_form msgid "Write here any other information related to the service completed." @@ -472,9 +454,3 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fleet_vehicle_log_fuel.fleet_vehicle_view_form msgid "show the fuel logs for this vehicle" msgstr "mostrar los registros de combustible para este vehículo" - -#~ msgid "SMS Delivery error" -#~ msgstr "Error en la entrega del SMS" - -#~ msgid "Followers (Channels)" -#~ msgstr "Seguidores (Canales)" diff --git a/fleet_vehicle_log_fuel/i18n/fleet_vehicle_log_fuel.pot b/fleet_vehicle_log_fuel/i18n/fleet_vehicle_log_fuel.pot index e49758ba..d2a4d29e 100644 --- a/fleet_vehicle_log_fuel/i18n/fleet_vehicle_log_fuel.pot +++ b/fleet_vehicle_log_fuel/i18n/fleet_vehicle_log_fuel.pot @@ -4,8 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 15.0\n" +"Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-03-07 07:33+0000\n" +"PO-Revision-Date: 2024-03-07 07:33+0000\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -54,6 +56,11 @@ msgstr "" msgid "Attachment Count" msgstr "" +#. module: fleet_vehicle_log_fuel +#: model_terms:ir.ui.view,arch_db:fleet_vehicle_log_fuel.fleet_vehicle_log_fuel_view_form +msgid "Cancel" +msgstr "" + #. module: fleet_vehicle_log_fuel #: model:ir.model.fields.selection,name:fleet_vehicle_log_fuel.selection__fleet_vehicle_log_fuel__state__cancelled msgid "Cancelled" @@ -127,6 +134,7 @@ msgstr "" #. module: fleet_vehicle_log_fuel #: model:ir.model.fields.selection,name:fleet_vehicle_log_fuel.selection__fleet_vehicle_log_fuel__state__done +#: model_terms:ir.ui.view,arch_db:fleet_vehicle_log_fuel.fleet_vehicle_log_fuel_view_form msgid "Done" msgstr "" @@ -136,6 +144,7 @@ msgid "Driver" msgstr "" #. module: fleet_vehicle_log_fuel +#. odoo-python #: code:addons/fleet_vehicle_log_fuel/models/fleet_vehicle_log_fuel.py:0 #, python-format msgid "Emptying the odometer value of a vehicle is not allowed." @@ -229,7 +238,6 @@ msgstr "" #. module: fleet_vehicle_log_fuel #: model:ir.model.fields,help:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__message_needaction -#: model:ir.model.fields,help:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__message_unread msgid "If checked, new messages require your attention." msgstr "" @@ -284,11 +292,6 @@ msgstr "" msgid "My Activity Deadline" msgstr "" -#. module: fleet_vehicle_log_fuel -#: model:ir.model.fields,field_description:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__activity_calendar_event_id -msgid "Next Activity Calendar Event" -msgstr "" - #. module: fleet_vehicle_log_fuel #: model:ir.model.fields,field_description:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__activity_date_deadline msgid "Next Activity Deadline" @@ -322,7 +325,7 @@ msgstr "" #. module: fleet_vehicle_log_fuel #: model:ir.model.fields,help:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__message_needaction_counter -msgid "Number of messages which requires an action" +msgid "Number of messages requiring action" msgstr "" #. module: fleet_vehicle_log_fuel @@ -330,11 +333,6 @@ msgstr "" msgid "Number of messages with delivery error" msgstr "" -#. module: fleet_vehicle_log_fuel -#: model:ir.model.fields,help:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__message_unread_counter -msgid "Number of unread messages" -msgstr "" - #. module: fleet_vehicle_log_fuel #: model:ir.model.fields,field_description:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__odometer_id msgid "Odometer" @@ -363,14 +361,25 @@ msgstr "" #. module: fleet_vehicle_log_fuel #: model:ir.model.fields.selection,name:fleet_vehicle_log_fuel.selection__fleet_vehicle_log_fuel__state__running +#: model_terms:ir.ui.view,arch_db:fleet_vehicle_log_fuel.fleet_vehicle_log_fuel_view_form msgid "Running" msgstr "" +#. module: fleet_vehicle_log_fuel +#: model:ir.model.fields,field_description:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__service_id +msgid "Service" +msgstr "" + #. module: fleet_vehicle_log_fuel #: model:ir.model.fields,field_description:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__service_type_id msgid "Service Type" msgstr "" +#. module: fleet_vehicle_log_fuel +#: model_terms:ir.ui.view,arch_db:fleet_vehicle_log_fuel.fleet_vehicle_log_fuel_view_form +msgid "Set to Todo" +msgstr "" + #. module: fleet_vehicle_log_fuel #: model:ir.model.fields,field_description:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__state msgid "Stage" @@ -405,21 +414,6 @@ msgstr "" msgid "Unit" msgstr "" -#. module: fleet_vehicle_log_fuel -#: model:ir.model.fields,help:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__odometer_unit -msgid "Unit of the odometer " -msgstr "" - -#. module: fleet_vehicle_log_fuel -#: model:ir.model.fields,field_description:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__message_unread -msgid "Unread Messages" -msgstr "" - -#. module: fleet_vehicle_log_fuel -#: model:ir.model.fields,field_description:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__message_unread_counter -msgid "Unread Messages Counter" -msgstr "" - #. module: fleet_vehicle_log_fuel #: model:ir.model,name:fleet_vehicle_log_fuel.model_fleet_vehicle #: model:ir.model.fields,field_description:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__vehicle_id @@ -441,16 +435,6 @@ msgstr "" msgid "Vendor Reference" msgstr "" -#. module: fleet_vehicle_log_fuel -#: model:ir.model.fields,field_description:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__website_message_ids -msgid "Website Messages" -msgstr "" - -#. module: fleet_vehicle_log_fuel -#: model:ir.model.fields,help:fleet_vehicle_log_fuel.field_fleet_vehicle_log_fuel__website_message_ids -msgid "Website communication history" -msgstr "" - #. module: fleet_vehicle_log_fuel #: model_terms:ir.ui.view,arch_db:fleet_vehicle_log_fuel.fleet_vehicle_log_fuel_view_form msgid "Write here any other information related to the service completed." diff --git a/fleet_vehicle_log_fuel/i18n/it.po b/fleet_vehicle_log_fuel/i18n/it.po index 66d2da62..098d0479 100644 --- a/fleet_vehicle_log_fuel/i18n/it.po +++ b/fleet_vehicle_log_fuel/i18n/it.po @@ -468,9 +468,3 @@ msgstr "Indicare qui ogni altra informazione relativa al servizio completato." #: model_terms:ir.ui.view,arch_db:fleet_vehicle_log_fuel.fleet_vehicle_view_form msgid "show the fuel logs for this vehicle" msgstr "visualizza i registri carburante per questo veicolo" - -#~ msgid "SMS Delivery error" -#~ msgstr "Errore consegna SMS" - -#~ msgid "Followers (Channels)" -#~ msgstr "Seguito da (canali)" diff --git a/fleet_vehicle_log_fuel/i18n/pt_BR.po b/fleet_vehicle_log_fuel/i18n/pt_BR.po index 05660d91..0daf6977 100644 --- a/fleet_vehicle_log_fuel/i18n/pt_BR.po +++ b/fleet_vehicle_log_fuel/i18n/pt_BR.po @@ -469,9 +469,3 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fleet_vehicle_log_fuel.fleet_vehicle_view_form msgid "show the fuel logs for this vehicle" msgstr "mostrar os registros de combustível para este veículo" - -#~ msgid "SMS Delivery error" -#~ msgstr "Erro no envio de SMS" - -#~ msgid "Followers (Channels)" -#~ msgstr "Seguidores (Canais)" diff --git a/fleet_vehicle_log_fuel/models/fleet_vehicle.py b/fleet_vehicle_log_fuel/models/fleet_vehicle.py index 8c47375b..ac5465b8 100644 --- a/fleet_vehicle_log_fuel/models/fleet_vehicle.py +++ b/fleet_vehicle_log_fuel/models/fleet_vehicle.py @@ -2,21 +2,26 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo import fields, models +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_count_all", string="Fuel Log Count") - - def _compute_count_all(self): - super()._compute_count_all() - LogFuel = self.env["fleet.vehicle.log.fuel"] + 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 = LogFuel.search_count([("vehicle_id", "=", record.id)]) - return + 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( diff --git a/fleet_vehicle_log_fuel/models/fleet_vehicle_log_fuel.py b/fleet_vehicle_log_fuel/models/fleet_vehicle_log_fuel.py index 5b8bfa41..1ec855ab 100644 --- a/fleet_vehicle_log_fuel/models/fleet_vehicle_log_fuel.py +++ b/fleet_vehicle_log_fuel/models/fleet_vehicle_log_fuel.py @@ -1,4 +1,5 @@ # Copyright 2022 ForgeFlow S.L. +# 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 @@ -11,28 +12,41 @@ class FleetVehicleLogFuel(models.Model): _rec_name = "service_type_id" _description = "Fuel log for vehicles" + READONLY_STATES = { + "running": [("readonly", True)], + "done": [("readonly", True)], + "cancel": [("readonly", True)], + } + active = fields.Boolean(default=True) vehicle_id = fields.Many2one( - "fleet.vehicle", "Vehicle", required=True, help="Vehicle concerned by this log" + "fleet.vehicle", + "Vehicle", + required=True, + help="Vehicle concerned by this log", + states=READONLY_STATES, ) - amount = fields.Monetary("Cost") - description = fields.Char() + amount = fields.Monetary("Cost", states=READONLY_STATES) + description = fields.Char(states=READONLY_STATES) odometer_id = fields.Many2one( "fleet.vehicle.odometer", "Odometer", help="Odometer measure of the vehicle at the moment of this log", + states=READONLY_STATES, ) 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", + states=READONLY_STATES, ) - odometer_unit = fields.Selection( - related="vehicle_id.odometer_unit", string="Unit", readonly=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 + help="Date when the cost has been executed", + default=fields.Date.context_today, + states=READONLY_STATES, ) company_id = fields.Many2one( "res.company", "Company", default=lambda self: self.env.company @@ -42,11 +56,11 @@ class FleetVehicleLogFuel(models.Model): "res.partner", string="Driver", compute="_compute_purchaser_id", - readonly=False, store=True, + states=READONLY_STATES, ) - inv_ref = fields.Char("Vendor Reference") - vendor_id = fields.Many2one("res.partner", "Vendor") + inv_ref = fields.Char("Vendor Reference", states=READONLY_STATES) + vendor_id = fields.Many2one("res.partner", "Vendor", states=READONLY_STATES) notes = fields.Text() service_type_id = fields.Many2one( "fleet.service.type", @@ -55,6 +69,7 @@ class FleetVehicleLogFuel(models.Model): default=lambda self: self.env.ref( "fleet.type_service_refueling", raise_if_not_found=False ), + states=READONLY_STATES, ) state = fields.Selection( [ @@ -66,8 +81,11 @@ class FleetVehicleLogFuel(models.Model): default="todo", string="Stage", ) - liter = fields.Float() - price_per_liter = fields.Float() + liter = fields.Float(states=READONLY_STATES) + price_per_liter = fields.Float(states=READONLY_STATES) + 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): @@ -89,38 +107,63 @@ def _onchange_liter_price_amount(self): ): self.liter = round(amount / price_per_liter, 2) + @api.depends("odometer_id", "odometer_id.value") def _compute_odometer(self): - self.odometer = 0 - for record in self: - if record.odometer_id: - record.odometer = record.odometer_id.value + 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: - 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 = self.env["fleet.vehicle.odometer"].create( + record._prepare_fleet_vehicle_odometer_vals() ) - 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 an odometer log with 0, - # which is to be avoided - del data["odometer"] - return super().create(vals_list) @api.depends("vehicle_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").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.state = "todo" + return True + + def button_done(self): + for item in self.filtered(lambda x: x.state == "running"): + item.service_id = self.env["fleet.vehicle.log.services"].create( + self._prepare_fleet_vehicle_log_services_vals() + ) + item.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.state = "cancelled" + return True diff --git a/fleet_vehicle_log_fuel/readme/CONTRIBUTORS.rst b/fleet_vehicle_log_fuel/readme/CONTRIBUTORS.rst index 37c5e66c..42f5c512 100644 --- a/fleet_vehicle_log_fuel/readme/CONTRIBUTORS.rst +++ b/fleet_vehicle_log_fuel/readme/CONTRIBUTORS.rst @@ -1 +1,5 @@ * Miquel Raïch +* `Tecnativa `_: + + * Víctor Martínez + * Pedro M. Baeza diff --git a/fleet_vehicle_log_fuel/security/fleet_security.xml b/fleet_vehicle_log_fuel/security/fleet_security.xml index 3a57e225..90191fe4 100644 --- a/fleet_vehicle_log_fuel/security/fleet_security.xml +++ b/fleet_vehicle_log_fuel/security/fleet_security.xml @@ -16,5 +16,10 @@ Administrator has all rights on vehicle's fuel log + [(1, '=', 1)] + + + + diff --git a/fleet_vehicle_log_fuel/static/description/index.html b/fleet_vehicle_log_fuel/static/description/index.html index 817cd41a..d5d95344 100644 --- a/fleet_vehicle_log_fuel/static/description/index.html +++ b/fleet_vehicle_log_fuel/static/description/index.html @@ -1,3 +1,4 @@ + @@ -366,9 +367,9 @@

Fleet Vehicle Log Fuel

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:5c2c844dd3f4a8486251e46da663327385b9e7026e9370cc9e62d2bbb7175bdf +!! source digest: sha256:7bbb43f1db843d344831228d2a34ff7671f48f2af9efe85da12054b70acdff9b !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/fleet Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/fleet Translate me on Weblate Try me on Runboat

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

Table of contents

@@ -387,7 +388,7 @@

Bug Tracker

Bugs are tracked on GitHub 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.

+feedback.

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

@@ -396,12 +397,18 @@

Credits

Authors

  • ForgeFlow
  • +
  • Tecnativam

Contributors

@@ -411,7 +418,7 @@

Maintainers

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 project on GitHub.

+

This module is part of the OCA/fleet project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

diff --git a/fleet_vehicle_log_fuel/tests/__init__.py b/fleet_vehicle_log_fuel/tests/__init__.py new file mode 100644 index 00000000..bab7a1ec --- /dev/null +++ b/fleet_vehicle_log_fuel/tests/__init__.py @@ -0,0 +1 @@ +from . import test_fleet_vehicle_log_fuel diff --git a/fleet_vehicle_log_fuel/tests/common.py b/fleet_vehicle_log_fuel/tests/common.py new file mode 100644 index 00000000..4ac4f8a0 --- /dev/null +++ b/fleet_vehicle_log_fuel/tests/common.py @@ -0,0 +1,24 @@ +# Copyright 2024 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl +from odoo.addons.base.tests.common import BaseCommon + + +class TestFleetVehicleLogFuelBase(BaseCommon): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.driver = cls.env["res.partner"].create({"name": "Test Driver"}) + cls.brand = cls.env["fleet.vehicle.model.brand"].create({"name": "Test brand"}) + cls.model = cls.env["fleet.vehicle.model"].create( + { + "name": "Test model", + "brand_id": cls.brand.id, + } + ) + cls.vehicle = cls.env["fleet.vehicle"].create( + { + "model_id": cls.model.id, + "driver_id": cls.driver.id, + "license_plate": "TEST123", + } + ) diff --git a/fleet_vehicle_log_fuel/tests/test_fleet_vehicle_log_fuel.py b/fleet_vehicle_log_fuel/tests/test_fleet_vehicle_log_fuel.py new file mode 100644 index 00000000..9b2e9694 --- /dev/null +++ b/fleet_vehicle_log_fuel/tests/test_fleet_vehicle_log_fuel.py @@ -0,0 +1,94 @@ +# Copyright 2024 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl +from odoo.exceptions import UserError +from odoo.tests import Form + +from .common import TestFleetVehicleLogFuelBase + + +class TestFleetVehicleLogFuelMisc(TestFleetVehicleLogFuelBase): + def test_fleet_vehicle_log_fuel_process(self): + fuel_form = Form( + self.env["fleet.vehicle.log.fuel"].with_context( + default_vehicle_id=self.vehicle.id + ) + ) + with self.assertRaises(UserError): + fuel_form.odometer = 0 + fuel_form.save() + fuel_form.odometer = 5000 + fuel = fuel_form.save() + self.assertTrue(fuel.odometer_id) + self.assertEqual(self.vehicle.odometer, 5000) + self.assertEqual(self.vehicle.fuel_count, 1) + res = self.vehicle.action_view_log_fuel() + items = self.env[res["res_model"]].search(res["domain"]) + self.assertIn(fuel, items) + fuel.button_running() + self.assertEqual(fuel.state, "running") + fuel.button_done() + self.assertEqual(fuel.state, "done") + self.assertTrue(fuel.service_id) + self.assertEqual(fuel.service_id.service_type_id, fuel.service_type_id) + self.assertEqual(fuel.service_id.state, "done") + fuel.button_cancel() + self.assertEqual(fuel.state, "cancelled") + self.assertFalse(fuel.service_id) + fuel.button_todo() + self.assertEqual(fuel.state, "todo") + + def test_fleet_vehicle_log_fuel_onchange(self): + # Check amount + fuel_form_1 = Form( + self.env["fleet.vehicle.log.fuel"].with_context( + default_vehicle_id=self.vehicle.id + ) + ) + fuel_form_1.liter = 50 + fuel_form_1.price_per_liter = 1.5 + self.assertEqual(fuel_form_1.amount, 75) + # Check price_per_liter + fuel_form_2 = Form( + self.env["fleet.vehicle.log.fuel"].with_context( + default_vehicle_id=self.vehicle.id + ) + ) + fuel_form_2.amount = 75 + fuel_form_2.liter = 50 + self.assertEqual(fuel_form_2.price_per_liter, 1.5) + # Check liter + fuel_form_2 = Form( + self.env["fleet.vehicle.log.fuel"].with_context( + default_vehicle_id=self.vehicle.id + ) + ) + fuel_form_2.amount = 75 + fuel_form_2.price_per_liter = 1.5 + self.assertEqual(fuel_form_2.liter, 50) + + +class TestFleetVehicleLogFuelReport(TestFleetVehicleLogFuelBase): + @classmethod + def setUpClass(cls): + super().setUpClass() + # Create log fuel + log service to check report after + fuel = cls.env["fleet.vehicle.log.fuel"].create( + { + "vehicle_id": cls.vehicle.id, + "date": "2024-01-01", + "amount": 75, + "price_per_liter": 1.5, + "liter": 50, + } + ) + fuel.button_running() + fuel.button_done() + + def test_fleet_vehicle_cost_report(self): + items = self.env["fleet.vehicle.cost.report"].search( + [("vehicle_id", "=", self.vehicle.id), ("date_start", "=", "2024-01-01")] + ) + self.assertIn("fuel", items.mapped("cost_type")) + self.assertEqual( + sum(items.filtered(lambda x: x.cost_type == "fuel").mapped("cost")), 75 + ) diff --git a/fleet_vehicle_log_fuel/views/fleet_vehicle_cost_views.xml b/fleet_vehicle_log_fuel/views/fleet_vehicle_log_fuel_views.xml similarity index 83% rename from fleet_vehicle_log_fuel/views/fleet_vehicle_cost_views.xml rename to fleet_vehicle_log_fuel/views/fleet_vehicle_log_fuel_views.xml index 30469293..317934e4 100644 --- a/fleet_vehicle_log_fuel/views/fleet_vehicle_cost_views.xml +++ b/fleet_vehicle_log_fuel/views/fleet_vehicle_log_fuel_views.xml @@ -8,11 +8,33 @@
- +
+ - fleet.vehicle.log.fuel.kanban fleet.vehicle.log.fuel @@ -130,7 +155,6 @@ - fleet.vehicle.log.fuel.graph fleet.vehicle.log.fuel @@ -142,8 +166,7 @@ - - + fleet.vehicle.log.fuel.search fleet.vehicle.log.fuel @@ -160,7 +183,6 @@ - Fuel Logs fleet.vehicle.log.fuel @@ -173,7 +195,6 @@

- - diff --git a/fleet_vehicle_log_fuel/views/fleet_vehicle_views.xml b/fleet_vehicle_log_fuel/views/fleet_vehicle_views.xml index 51398046..b6d78702 100644 --- a/fleet_vehicle_log_fuel/views/fleet_vehicle_views.xml +++ b/fleet_vehicle_log_fuel/views/fleet_vehicle_views.xml @@ -1,6 +1,5 @@ - fleet.vehicle.form fleet.vehicle @@ -19,5 +18,4 @@
-