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,86 @@
==============================
Maintenance Equipment Sequence
==============================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:0961f01d04702ea5589459b97ebc32b4c47bf93df77150b4fcbf5fce3e91375d
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |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%2Fmaintenance-lightgray.png?logo=github
:target: https://github.com/OCA/maintenance/tree/16.0/maintenance_equipment_sequence
:alt: OCA/maintenance
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/maintenance-16-0/maintenance-16-0-maintenance_equipment_sequence
: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/maintenance&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
This module introduces a sequence to the maintenance equipment managed from the maintenance equipment category
**Table of contents**
.. contents::
:local:
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/maintenance/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/maintenance/issues/new?body=module:%20maintenance_equipment_sequence%0Aversion:%2016.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 S.L.
Contributors
~~~~~~~~~~~~
* Adria Gil Sorribes <adria.gil@forgeflow.com>
* Núria Martín Xifré <nuria.martin@forgeflow.com>
* Bernat Puig Font <bernat.puig@forgeflow.com>
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-AdriaGForgeFlow| image:: https://github.com/AdriaGForgeFlow.png?size=40px
:target: https://github.com/AdriaGForgeFlow
:alt: AdriaGForgeFlow
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-AdriaGForgeFlow|
This module is part of the `OCA/maintenance <https://github.com/OCA/maintenance/tree/16.0/maintenance_equipment_sequence>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -0,0 +1,16 @@
# Copyright 2021 ForgeFlow S.L. (https://forgeflow.com)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Maintenance Equipment Sequence",
"summary": """
Adds sequence to maintenance equipment defined in the equipment's
category""",
"version": "16.0.1.0.2",
"license": "AGPL-3",
"author": "ForgeFlow S.L.," "Odoo Community Association (OCA)",
"maintainers": ["AdriaGForgeFlow"],
"website": "https://github.com/OCA/maintenance",
"depends": ["maintenance"],
"data": ["views/maintenance_views.xml"],
}

View file

@ -0,0 +1,56 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * maintenance_equipment_sequence
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: maintenance_equipment_sequence
#: model:ir.model.fields,field_description:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_id
msgid "Entry Sequence"
msgstr "Ulazna sekvenca"
#. module: maintenance_equipment_sequence
#: model:ir.model,name:maintenance_equipment_sequence.model_maintenance_equipment
msgid "Maintenance Equipment"
msgstr "Oprema za održavanje"
#. module: maintenance_equipment_sequence
#: model:ir.model,name:maintenance_equipment_sequence.model_maintenance_equipment_category
msgid "Maintenance Equipment Category"
msgstr "Kategorija opreme za održavanje"
#. module: maintenance_equipment_sequence
#: model:ir.model.fields,field_description:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_number_next
msgid "Next Number"
msgstr "Sljedeći broj"
#. module: maintenance_equipment_sequence
#: model:ir.model.fields,field_description:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_prefix
msgid "Sequence Prefix"
msgstr "Prefiks brojevnog kruga"
#. module: maintenance_equipment_sequence
#: model:ir.model.fields,help:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_prefix
msgid "The equipment's sequence will be created using this prefix."
msgstr "The equipment's sequence will be created using this prefix."
#. module: maintenance_equipment_sequence
#: model:ir.model.fields,help:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_number_next
msgid "The next sequence number will be used for the next equipment."
msgstr "The next sequence number will be used for the next equipment."
#. module: maintenance_equipment_sequence
#: model:ir.model.fields,help:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_id
msgid ""
"This field contains the information related to the numbering of the "
"equipments belonging to this category."
msgstr ""

View file

@ -0,0 +1,70 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * maintenance_equipment_sequence
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2023-09-20 17:47+0000\n"
"Last-Translator: Ivorra78 <informatica@totmaterial.es>\n"
"Language-Team: none\n"
"Language: es\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"
"X-Generator: Weblate 4.17\n"
#. module: maintenance_equipment_sequence
#: model:ir.model.fields,field_description:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_id
msgid "Entry Sequence"
msgstr "Secuencia"
#. module: maintenance_equipment_sequence
#: model:ir.model,name:maintenance_equipment_sequence.model_maintenance_equipment
msgid "Maintenance Equipment"
msgstr "Equipo de Mantenimiento"
#. module: maintenance_equipment_sequence
#: model:ir.model,name:maintenance_equipment_sequence.model_maintenance_equipment_category
msgid "Maintenance Equipment Category"
msgstr "Categoría Equipo de mantenimiento"
#. module: maintenance_equipment_sequence
#: model:ir.model.fields,field_description:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_number_next
msgid "Next Number"
msgstr "Número siguiente"
#. module: maintenance_equipment_sequence
#: model:ir.model.fields,field_description:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_prefix
msgid "Sequence Prefix"
msgstr "Prefijo de la secuencia"
#. module: maintenance_equipment_sequence
#: model:ir.model.fields,help:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_prefix
msgid "The equipment's sequence will be created using this prefix."
msgstr "La secuencia de este equipamiento se creará usando este prefijo."
#. module: maintenance_equipment_sequence
#: model:ir.model.fields,help:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_number_next
msgid "The next sequence number will be used for the next equipment."
msgstr "Este campo se utilizará para el siguiente código de equipamiento."
#. module: maintenance_equipment_sequence
#: model:ir.model.fields,help:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_id
msgid ""
"This field contains the information related to the numbering of the "
"equipments belonging to this category."
msgstr ""
"Este campo contiene la información relacionada con la numeración de los "
"equipamientos de esta categoría."
#~ msgid "Code"
#~ msgstr "Código"
#~ msgid "Equipment Code"
#~ msgstr "Código del Equipamiento"
#~ msgid "Asset Category"
#~ msgstr "Categoría del activo"

View file

@ -0,0 +1,70 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * maintenance_equipment_sequence
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2021-07-28 09:49+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\n"
"Language: it\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"
"X-Generator: Weblate 4.3.2\n"
#. module: maintenance_equipment_sequence
#: model:ir.model.fields,field_description:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_id
msgid "Entry Sequence"
msgstr "Sequenza iniziale"
#. module: maintenance_equipment_sequence
#: model:ir.model,name:maintenance_equipment_sequence.model_maintenance_equipment
msgid "Maintenance Equipment"
msgstr "Attrezzatura manutenzione"
#. module: maintenance_equipment_sequence
#: model:ir.model,name:maintenance_equipment_sequence.model_maintenance_equipment_category
msgid "Maintenance Equipment Category"
msgstr "Categoria attrezzatura menutenzione"
#. module: maintenance_equipment_sequence
#: model:ir.model.fields,field_description:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_number_next
msgid "Next Number"
msgstr "Numero successivo"
#. module: maintenance_equipment_sequence
#: model:ir.model.fields,field_description:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_prefix
msgid "Sequence Prefix"
msgstr "Prefisso sequenza"
#. module: maintenance_equipment_sequence
#: model:ir.model.fields,help:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_prefix
msgid "The equipment's sequence will be created using this prefix."
msgstr ""
"La sequenza dell'attrezzatura verrà creata utilizzando questo prefisso."
#. module: maintenance_equipment_sequence
#: model:ir.model.fields,help:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_number_next
msgid "The next sequence number will be used for the next equipment."
msgstr ""
"Il numero di sequenza successivo verrà utilizzato per la prossima "
"attrezzatura."
#. module: maintenance_equipment_sequence
#: model:ir.model.fields,help:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_id
msgid ""
"This field contains the information related to the numbering of the "
"equipments belonging to this category."
msgstr ""
"Questo campo contiene l'informazione relativa alla numerazione delle "
"attrezzature appartenenti a questa categoria."
#~ msgid "Code"
#~ msgstr "Codice"
#~ msgid "Equipment Code"
#~ msgstr "Codice attrezzatura"

View file

@ -0,0 +1,56 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * maintenance_equipment_sequence
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: maintenance_equipment_sequence
#: model:ir.model.fields,field_description:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_id
msgid "Entry Sequence"
msgstr ""
#. module: maintenance_equipment_sequence
#: model:ir.model,name:maintenance_equipment_sequence.model_maintenance_equipment
msgid "Maintenance Equipment"
msgstr ""
#. module: maintenance_equipment_sequence
#: model:ir.model,name:maintenance_equipment_sequence.model_maintenance_equipment_category
msgid "Maintenance Equipment Category"
msgstr ""
#. module: maintenance_equipment_sequence
#: model:ir.model.fields,field_description:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_number_next
msgid "Next Number"
msgstr ""
#. module: maintenance_equipment_sequence
#: model:ir.model.fields,field_description:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_prefix
msgid "Sequence Prefix"
msgstr ""
#. module: maintenance_equipment_sequence
#: model:ir.model.fields,help:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_prefix
msgid "The equipment's sequence will be created using this prefix."
msgstr ""
#. module: maintenance_equipment_sequence
#: model:ir.model.fields,help:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_number_next
msgid "The next sequence number will be used for the next equipment."
msgstr ""
#. module: maintenance_equipment_sequence
#: model:ir.model.fields,help:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_id
msgid ""
"This field contains the information related to the numbering of the "
"equipments belonging to this category."
msgstr ""

View file

@ -0,0 +1,129 @@
# Copyright 2021 ForgeFlow S.L. (https://forgeflow.com)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, fields, models
class MaintenanceEquipmentCategory(models.Model):
_inherit = "maintenance.equipment.category"
sequence_prefix = fields.Char(
help="The equipment's sequence will be created using this prefix.",
)
sequence_id = fields.Many2one(
"ir.sequence",
string="Entry Sequence",
help="This field contains the information related to the "
"numbering of the equipments belonging to this category.",
copy=False,
)
sequence_number_next = fields.Integer(
string="Next Number",
help="The next sequence number will be used for the next equipment.",
compute="_compute_seq_number_next",
inverse="_inverse_seq_number_next",
)
@api.model
def _create_sequence(self, vals):
"""Create new no_gap entry sequence"""
seq = {
"name": vals.get("name", False) or self.name,
"implementation": "no_gap",
"prefix": (vals.get("sequence_prefix", False) or self.sequence_prefix),
"padding": 4,
"number_increment": 1,
"use_date_range": False,
}
seq = self.env["ir.sequence"].create(seq)
seq_date_range = seq._get_current_sequence()
seq_date_range.number_next = vals.get("sequence_number_next", 1)
return seq
# do not depend on 'sequence_id.date_range_ids', because
# sequence_id._get_current_sequence() may invalidate it!
@api.depends("sequence_id.use_date_range", "sequence_id.number_next_actual")
def _compute_seq_number_next(self):
"""Compute 'sequence_number_next' according to the current sequence
in use, an ir.sequence or an ir.sequence.date_range.
"""
for category in self:
if category.sequence_id:
sequence = category.sequence_id._get_current_sequence()
category.sequence_number_next = sequence.number_next_actual
else:
category.sequence_number_next = 1
def _inverse_seq_number_next(self):
"""
Inverse 'sequence_number_next' to edit the current sequence next number
"""
for category in self:
if category.sequence_id and category.sequence_number_next:
sequence = category.sequence_id._get_current_sequence()
sequence.sudo().number_next = category.sequence_number_next
@api.model_create_multi
def create(self, vals_list):
for vals in vals_list:
if not vals.get("sequence_id", False):
if vals.get("sequence_prefix", False):
vals["sequence_id"] = self.sudo()._create_sequence(vals).id
else:
vals["sequence_prefix"] = (
self.env["ir.sequence"].browse(vals["sequence_id"]).prefix
)
result = super().create(vals_list)
result._compute_equipment_code()
return result
def write(self, vals):
if not vals.get("sequence_id", False):
if vals.get("sequence_prefix", False):
vals["sequence_id"] = self.sudo()._create_sequence(vals).id
else:
vals["sequence_prefix"] = (
self.env["ir.sequence"].browse(vals["sequence_id"]).prefix
)
result = super(MaintenanceEquipmentCategory, self).write(vals)
self._compute_equipment_code()
return result
@api.onchange("sequence_id")
def _onchange_sequence_id(self):
if self.sequence_id:
self.sequence_prefix = self.sequence_id.prefix
def _compute_equipment_code(self):
for category in self:
if category.sequence_id:
category_equipments = category.env["maintenance.equipment"].search(
[("category_id", "=", category.id)]
)
for equipment in category_equipments:
if not equipment.serial_no and equipment.category_id.sequence_id:
equipment.serial_no = equipment.category_id.sequence_id._next()
class MaintenanceEquipment(models.Model):
_inherit = "maintenance.equipment"
@api.model
def create(self, vals):
equipment = super(MaintenanceEquipment, self).create(vals)
if equipment.category_id and not equipment.serial_no:
sequence_id = (
self.env["maintenance.equipment.category"]
.browse(vals["category_id"])
.sequence_id
)
if sequence_id:
equipment.serial_no = sequence_id._next()
return equipment
def write(self, vals):
result = super(MaintenanceEquipment, self).write(vals)
for rec in self:
if rec.category_id and not rec.serial_no and rec.category_id.sequence_id:
rec.serial_no = rec.category_id.sequence_id._next()
return result

View file

@ -0,0 +1,3 @@
* Adria Gil Sorribes <adria.gil@forgeflow.com>
* Núria Martín Xifré <nuria.martin@forgeflow.com>
* Bernat Puig Font <bernat.puig@forgeflow.com>

View file

@ -0,0 +1 @@
This module introduces a sequence to the maintenance equipment managed from the maintenance equipment category

View file

@ -0,0 +1,427 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>Maintenance Equipment Sequence</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic, pre.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="maintenance-equipment-sequence">
<h1 class="title">Maintenance Equipment Sequence</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:0961f01d04702ea5589459b97ebc32b4c47bf93df77150b4fcbf5fce3e91375d
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/maintenance/tree/16.0/maintenance_equipment_sequence"><img alt="OCA/maintenance" src="https://img.shields.io/badge/github-OCA%2Fmaintenance-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/maintenance-16-0/maintenance-16-0-maintenance_equipment_sequence"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/maintenance&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module introduces a sequence to the maintenance equipment managed from the maintenance equipment category</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-1">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-2">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-3">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-4">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-5">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-1">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/maintenance/issues">GitHub Issues</a>.
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
<a class="reference external" href="https://github.com/OCA/maintenance/issues/new?body=module:%20maintenance_equipment_sequence%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#toc-entry-2">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-3">Authors</a></h2>
<ul class="simple">
<li>ForgeFlow S.L.</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-4">Contributors</a></h2>
<ul class="simple">
<li>Adria Gil Sorribes &lt;<a class="reference external" href="mailto:adria.gil&#64;forgeflow.com">adria.gil&#64;forgeflow.com</a>&gt;</li>
<li>Núria Martín Xifré &lt;<a class="reference external" href="mailto:nuria.martin&#64;forgeflow.com">nuria.martin&#64;forgeflow.com</a>&gt;</li>
<li>Bernat Puig Font &lt;<a class="reference external" href="mailto:bernat.puig&#64;forgeflow.com">bernat.puig&#64;forgeflow.com</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-5">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org">
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
</a>
<p>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.</p>
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
<p><a class="reference external image-reference" href="https://github.com/AdriaGForgeFlow"><img alt="AdriaGForgeFlow" src="https://github.com/AdriaGForgeFlow.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/maintenance/tree/16.0/maintenance_equipment_sequence">OCA/maintenance</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1 @@
from . import test_maintenance_equipment_sequence

View file

@ -0,0 +1,85 @@
# Copyright 2020 ForgeFlow S.L. (https://forgeflow.com)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.tests.common import TransactionCase
class TestMaintenanceEquipmentSequence(TransactionCase):
def setUp(self):
super(TestMaintenanceEquipmentSequence, self).setUp()
self.maintenance_equipment_categ_obj = self.env[
"maintenance.equipment.category"
]
self.maintenance_equipment_obj = self.env["maintenance.equipment"]
self.sequence_obj = self.env["ir.sequence"]
def test_01_maintenance_equipment_sequence(self):
"""Create equipment category and check sequence has been
automatically created, create equipments inside category and check
sequence number has been set
"""
# Create category
categ_1 = self.maintenance_equipment_categ_obj.create(
{
"name": "Test Category",
"sequence_prefix": "TTC",
"sequence_number_next": 1,
}
)
seq_1 = self.sequence_obj.search(
[("name", "=", categ_1.name), ("prefix", "=", "TTC")], limit=1
)
self.assertEqual(seq_1.prefix, categ_1.sequence_prefix)
self.assertEqual(seq_1.number_next_actual, categ_1.sequence_number_next)
# Create category without sequence, then write prefix and number next
categ_2 = self.maintenance_equipment_categ_obj.create(
{"name": "Test Category 2"}
)
categ_2.write({"sequence_prefix": "TTC2", "sequence_number_next": 100})
seq_2 = self.sequence_obj.search(
[("name", "=", categ_2.name), ("prefix", "=", "TTC2")], limit=1
)
self.assertEqual(seq_2.prefix, categ_2.sequence_prefix)
self.assertEqual(seq_2.number_next_actual, categ_2.sequence_number_next)
# Assign sequence 1 to category 2
categ_2.write({"sequence_id": seq_1.id})
categ_2._onchange_sequence_id()
# Create equipment inside category
equipment_1 = self.maintenance_equipment_obj.create(
{"name": "Laptop 1", "category_id": categ_2.id}
)
categ_2._compute_equipment_code()
self.assertEqual(equipment_1.serial_no, "TTC0001")
# Set code manually
equipment_1.write({"serial_no": "TTC0023"})
self.assertEqual(equipment_1.serial_no, "TTC0023")
# Remove code and be automatically set to sequence next value
equipment_1.write({"serial_no": False})
self.assertEqual(equipment_1.serial_no, "TTC0002")
def test_02_maintenance_equipment_sequence(self):
"""Create an equipment category linked to a default sequence with a prefix,
and verify that the category correctly inherits the sequence prefix.
"""
# Create a sequence
seq_1 = self.sequence_obj.create(
{
"name": "Test Sequence",
"implementation": "no_gap",
"prefix": "TTC_TEST",
"padding": 4,
"number_increment": 1,
"use_date_range": False,
}
)
# Create an equipment category linked to the sequence
categ_1 = self.maintenance_equipment_categ_obj.create(
{
"name": "Test Category 0",
"sequence_id": seq_1.id,
}
)
self.assertEqual(categ_1.sequence_prefix, seq_1.prefix)

View file

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- equipment.category : views -->
<record id="hr_equipment_category_view_form" model="ir.ui.view">
<field name="name">equipment.category.form</field>
<field name="model">maintenance.equipment.category</field>
<field name="inherit_id" ref="maintenance.hr_equipment_category_view_form" />
<field name="arch" type="xml">
<group name="group_alias" position="after">
<group>
<field
name="sequence_prefix"
attrs="{'readonly': [('sequence_id', '!=', False)]}"
/>
<field
name="sequence_number_next"
style="padding-right: 1.0em"
attrs="{'readonly': [('sequence_id', '!=', False)], 'invisible': [('sequence_prefix', '=', False)]}"
/>
<field name="sequence_id" required="0" />
</group>
</group>
</field>
</record>
<!-- equiment : views -->
<record id="hr_equipment_view_form" model="ir.ui.view">
<field name="name">equipment.form</field>
<field name="model">maintenance.equipment</field>
<field name="inherit_id" ref="maintenance.hr_equipment_view_form" />
<field name="priority">99</field>
<field name="arch" type="xml">
<field name="serial_no" position="attributes">
<attribute name="invisible">1</attribute>
</field>
<xpath expr="//div[hasclass('oe_title')]/*[1]" position="before">
<label for="serial_no" class="oe_edit_only" />
<h3>
<field name="serial_no" />
</h3>
</xpath>
</field>
</record>
<record id="hr_equipment_view_tree" model="ir.ui.view">
<field name="name">equipment.tree</field>
<field name="model">maintenance.equipment</field>
<field name="inherit_id" ref="maintenance.hr_equipment_view_tree" />
<field name="arch" type="xml">
<xpath expr="//field[@name='name']" position="before">
<field name="serial_no" position="move" />
</xpath>
</field>
</record>
<record id="hr_equipment_view_search" model="ir.ui.view">
<field name="name">equipment.search</field>
<field name="model">maintenance.equipment</field>
<field name="inherit_id" ref="maintenance.hr_equipment_view_search" />
<field name="arch" type="xml">
<field name="name" position="after">
<field name="serial_no" />
</field>
</field>
</record>
</odoo>