Initial commit: OCA Technical packages (595 packages)

This commit is contained in:
Ernad Husremovic 2025-08-29 15:43:03 +02:00
commit 2cc02aac6e
24950 changed files with 2318079 additions and 0 deletions

View file

@ -0,0 +1,2 @@
from . import maintenance_equipment
from . import maintenance_equipment_usage

View file

@ -0,0 +1,32 @@
# Copyright 2022-2024 Tecnativa - Víctor Martínez
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import api, fields, models
class MaintenanceEquipment(models.Model):
_inherit = "maintenance.equipment"
usage_ids = fields.One2many(
comodel_name="maintenance.equipment.usage",
inverse_name="equipment_id",
string="Usages",
)
usage_count = fields.Integer(compute="_compute_usage_count")
in_use = fields.Boolean(compute="_compute_in_use", store=True)
@api.depends("usage_ids")
def _compute_usage_count(self):
res = self.env["maintenance.equipment.usage"].read_group(
domain=[("equipment_id", "in", self.ids)],
fields=["equipment_id"],
groupby=["equipment_id"],
)
res_dict = {x["equipment_id"][0]: x["equipment_id_count"] for x in res}
for rec in self:
rec.usage_count = res_dict.get(rec.id, 0)
@api.depends("usage_ids", "usage_ids.state")
def _compute_in_use(self):
for item in self:
item.in_use = any(usage.state == "in_use" for usage in item.usage_ids)

View file

@ -0,0 +1,139 @@
# Copyright 2022-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 MaintenanceEquipmentUsage(models.Model):
_name = "maintenance.equipment.usage"
_description = "Maintenance Equipment Usage"
_inherit = ["mail.thread", "mail.activity.mixin"]
_order = "name desc"
name = fields.Char(
string="Equipment Usage", copy=False, readonly=True, default=lambda x: _("New")
)
user_id = fields.Many2one(
comodel_name="res.users",
string="User",
required=True,
readonly=True,
states={"draft": [("readonly", False)], "reserved": [("readonly", False)]},
tracking=True,
)
picking_user_id = fields.Many2one(
comodel_name="res.users",
string="Picked up by",
readonly=True,
states={"draft": [("readonly", False)], "reserved": [("readonly", False)]},
tracking=True,
)
return_user_id = fields.Many2one(
comodel_name="res.users",
string="Returned by",
states={
"in_use": [("required", True)],
"returned": [("readonly", True)],
"cancel": [("readonly", True)],
},
tracking=True,
)
date_picking = fields.Datetime(
string="Picking Date",
copy=False,
index=True,
readonly=True,
states={"draft": [("readonly", False)], "reserved": [("readonly", False)]},
tracking=True,
)
date_return = fields.Datetime(
string="Return Date",
copy=False,
index=True,
states={"returned": [("readonly", True)], "cancel": [("readonly", True)]},
tracking=True,
)
equipment_id = fields.Many2one(
comodel_name="maintenance.equipment",
string="Equipment",
required=True,
readonly=True,
states={"draft": [("readonly", False)], "reserved": [("readonly", False)]},
tracking=True,
)
partner_id = fields.Many2one(
comodel_name="res.partner",
string="Location",
readonly=True,
states={"draft": [("readonly", False)], "reserved": [("readonly", False)]},
tracking=True,
)
state = fields.Selection(
selection=[
("draft", "New"),
("reserved", "Reserved"),
("in_use", "In Use"),
("returned", "Returned"),
("cancel", "Cancelled"),
],
readonly=True,
copy=False,
default="draft",
tracking=True,
)
company_id = fields.Many2one(
comodel_name="res.company",
string="Company",
required=True,
index=True,
default=lambda self: self.env.company.id,
readonly=True,
states={"draft": [("readonly", False)], "reserved": [("readonly", False)]},
tracking=True,
)
notes = fields.Text()
@api.model_create_multi
def create(self, vals_list):
for vals in vals_list:
if not vals.get("name") or vals["name"] == _("New"):
vals["name"] = self.env["ir.sequence"].next_by_code(
"maintenance.equipment.usage"
) or _("New")
return super().create(vals_list)
def action_pick(self):
to_pick = self.filtered(lambda x: x.state in ("draft", "reserved"))
to_pick_with_date = to_pick.filtered(lambda x: not x.date_picking)
to_pick_with_date.date_picking = fields.Datetime.now()
to_pick.state = "in_use"
return True
def action_return(self):
to_return = self.filtered(lambda x: x.state == "in_use")
to_return_with_date = to_return.filtered(lambda x: not x.date_return)
to_return_with_date.date_return = fields.Datetime.now()
to_return.state = "returned"
return True
def action_cancel(self):
to_cancel = self.filtered(lambda x: x.state not in ("returned", "cancel"))
to_cancel.state = "cancel"
return True
@api.onchange("user_id")
def _onchange_user_id(self):
for usage in self:
usage.picking_user_id = usage.user_id
usage.return_user_id = usage.user_id
@api.constrains("state")
def _constrains_state(self):
"""Allow only one usage in use per equipment"""
for equipment in self.mapped("equipment_id"):
items = equipment.usage_ids.filtered(lambda x: x.state == "in_use")
if len(items) > 1:
raise UserError(
_("Every equipment can only be picked once at the same time!")
)