Skip to content

Commit 2776766

Browse files
committed
Merge PR #378 into 14.0
Signed-off-by etobella
2 parents 9fb0ad0 + 76273cd commit 2776766

18 files changed

+929
-0
lines changed
+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
===========================
2+
Maintenance Equipment Meter
3+
===========================
4+
5+
..
6+
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7+
!! This file is generated by oca-gen-addon-readme !!
8+
!! changes will be overwritten. !!
9+
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
10+
!! source digest: sha256:00f5fbf0dc535f7df1fa997aebf6fe5c239d75ebdb602aa063aacb509b3761d9
11+
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
12+
13+
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
14+
:target: https://odoo-community.org/page/development-status
15+
:alt: Beta
16+
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
17+
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
18+
:alt: License: AGPL-3
19+
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmaintenance-lightgray.png?logo=github
20+
:target: https://github.com/OCA/maintenance/tree/14.0/maintenance_equipment_meter
21+
:alt: OCA/maintenance
22+
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
23+
:target: https://translation.odoo-community.org/projects/maintenance-14-0/maintenance-14-0-maintenance_equipment_meter
24+
:alt: Translate me on Weblate
25+
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
26+
:target: https://runboat.odoo-community.org/builds?repo=OCA/maintenance&target_branch=14.0
27+
:alt: Try me on Runboat
28+
29+
|badge1| |badge2| |badge3| |badge4| |badge5|
30+
31+
This module allows us to integrate a meter (Odometer, printed pages
32+
counter...) on equipments.
33+
34+
Data can be fulfilled in equipments directly or in requests.
35+
36+
**Table of contents**
37+
38+
.. contents::
39+
:local:
40+
41+
Bug Tracker
42+
===========
43+
44+
Bugs are tracked on `GitHub Issues <https://github.com/OCA/maintenance/issues>`_.
45+
In case of trouble, please check there if your issue has already been reported.
46+
If you spotted it first, help us to smash it by providing a detailed and welcomed
47+
`feedback <https://github.com/OCA/maintenance/issues/new?body=module:%20maintenance_equipment_meter%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
48+
49+
Do not contact contributors directly about support or help with technical issues.
50+
51+
Credits
52+
=======
53+
54+
Authors
55+
-------
56+
57+
* Dixmit
58+
59+
Contributors
60+
------------
61+
62+
- Enric Tobella
63+
64+
Maintainers
65+
-----------
66+
67+
This module is maintained by the OCA.
68+
69+
.. image:: https://odoo-community.org/logo.png
70+
:alt: Odoo Community Association
71+
:target: https://odoo-community.org
72+
73+
OCA, or the Odoo Community Association, is a nonprofit organization whose
74+
mission is to support the collaborative development of Odoo features and
75+
promote its widespread use.
76+
77+
This module is part of the `OCA/maintenance <https://github.com/OCA/maintenance/tree/14.0/maintenance_equipment_meter>`_ project on GitHub.
78+
79+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from . import models
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Copyright 2023 Dixmit
2+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3+
4+
{
5+
"name": "Maintenance Equipment Meter",
6+
"summary": """
7+
Track meter for equipments""",
8+
"version": "14.0.1.0.0",
9+
"license": "AGPL-3",
10+
"author": "Dixmit,Odoo Community Association (OCA)",
11+
"website": "https://github.com/OCA/maintenance",
12+
"depends": ["maintenance", "uom"],
13+
"data": [
14+
"views/maintenance_request.xml",
15+
"security/ir.model.access.csv",
16+
"views/maintenance_equipment_meter.xml",
17+
"views/maintenance_equipment.xml",
18+
],
19+
"demo": [],
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from . import maintenance_equipment_meter
2+
from . import maintenance_equipment
3+
from . import maintenance_request
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Copyright 2023 Dixmit
2+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3+
4+
from odoo import api, fields, models
5+
6+
7+
class MaintenanceEquipment(models.Model):
8+
9+
_inherit = "maintenance.equipment"
10+
11+
has_meter = fields.Boolean()
12+
meter_unit_id = fields.Many2one("uom.uom")
13+
current_meter = fields.Float(
14+
compute="_compute_meter",
15+
inverse="_inverse_meter",
16+
string="Last meter",
17+
compute_sudo=True,
18+
)
19+
current_meter_show = fields.Float(related="current_meter", readonly=True)
20+
21+
@api.depends()
22+
def _compute_meter(self):
23+
ManintenanceEquipmentMeter = self.env["maintenance.equipment.meter"]
24+
for record in self:
25+
meter = ManintenanceEquipmentMeter.search(
26+
[("equipment_id", "=", record.id)], limit=1, order="value desc"
27+
)
28+
if meter:
29+
record.current_meter = meter.value
30+
else:
31+
record.current_meter = 0
32+
33+
def _inverse_meter(self):
34+
for record in self:
35+
if record.current_meter and record.has_meter:
36+
date = fields.Date.context_today(record)
37+
data = {
38+
"value": record.current_meter,
39+
"date": date,
40+
"equipment_id": record.id,
41+
}
42+
self.env["maintenance.equipment.meter"].sudo().create(data)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Copyright 2023 Dixmit
2+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3+
4+
from odoo import api, fields, models
5+
6+
7+
class MaintenanceEquipmentMeter(models.Model):
8+
9+
_name = "maintenance.equipment.meter"
10+
_description = "Meter log for an equipment"
11+
_order = "date desc"
12+
13+
name = fields.Char(compute="_compute_meter_name", store=True)
14+
date = fields.Date(default=fields.Date.context_today, required=True)
15+
value = fields.Float("Meter Value", group_operator="max")
16+
equipment_id = fields.Many2one("maintenance.equipment", required=True)
17+
meter_unit_id = fields.Many2one(
18+
related="equipment_id.meter_unit_id", string="Unit", readonly=True
19+
)
20+
21+
@api.depends("equipment_id.name", "date")
22+
def _compute_meter_name(self):
23+
for record in self:
24+
record.name = "%s / %s" % (record.equipment_id.name, str(record.date))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# Copyright 2023 Dixmit
2+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3+
4+
from odoo import _, api, fields, models
5+
from odoo.exceptions import UserError
6+
7+
8+
class MaintenanceRequest(models.Model):
9+
10+
_inherit = "maintenance.request"
11+
has_meter = fields.Boolean(related="equipment_id.has_meter")
12+
meter_unit_id = fields.Many2one("uom.uom", related="equipment_id.meter_unit_id")
13+
meter_id = fields.Many2one("maintenance.equipment.meter")
14+
current_meter = fields.Float(
15+
compute="_compute_meter",
16+
inverse="_inverse_meter",
17+
string="Last meter",
18+
compute_sudo=True,
19+
store=True,
20+
)
21+
22+
@api.depends("meter_id.value")
23+
def _compute_meter(self):
24+
for record in self:
25+
record.current_meter = record.meter_id.value or 0.0
26+
27+
def _inverse_meter(self):
28+
for rec in self:
29+
if not rec.current_meter and self.meter_id:
30+
raise UserError(
31+
_("Emptying the odometer value of an equipment is not allowed.")
32+
)
33+
if not rec.current_meter:
34+
continue
35+
meter = (
36+
self.env["maintenance.equipment.meter"]
37+
.sudo()
38+
.create(
39+
{
40+
"value": rec.current_meter,
41+
"date": fields.Date.context_today(rec),
42+
"equipment_id": rec.equipment_id.id,
43+
}
44+
)
45+
)
46+
self.meter_id = meter
47+
48+
@api.onchange("equipment_id")
49+
def onchange_equipment_id(self):
50+
result = super().onchange_equipment_id()
51+
if self.meter_id and self.equipment_id != self.meter_id.sudo().equipment_id:
52+
self.meter_id = False
53+
return result
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- Enric Tobella
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
This module allows us to integrate a meter (Odometer, printed pages counter...) on equipments.
2+
3+
Data can be fulfilled in equipments directly or in requests.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
2+
access_maintenance_equipment_meter,access_maintenance_equipment_meter,model_maintenance_equipment_meter,maintenance.group_equipment_manager,1,1,1,0

0 commit comments

Comments
 (0)