From 509e0931420452de6fba4b00ded4f0df8e26116b Mon Sep 17 00:00:00 2001
From: "r.perez"
Date: Wed, 7 Jan 2026 20:32:15 -0500
Subject: [PATCH 1/2] [ADD] fieldservice_order_property
---
fieldservice_order_property/README.rst | 97 ++++
fieldservice_order_property/__init__.py | 1 +
fieldservice_order_property/__manifest__.py | 13 +
.../models/__init__.py | 2 +
.../models/fsm_order.py | 14 +
.../models/fsm_team.py | 12 +
fieldservice_order_property/pyproject.toml | 3 +
.../readme/CONTRIBUTORS.md | 2 +
.../readme/DESCRIPTION.md | 1 +
fieldservice_order_property/readme/USAGE.md | 9 +
.../static/description/icon.png | Bin 0 -> 9455 bytes
.../static/description/index.html | 446 ++++++++++++++++++
fieldservice_order_property/tests/__init__.py | 1 +
.../tests/test_fsm_order.py | 40 ++
.../views/fsm_order_views.xml | 41 ++
15 files changed, 682 insertions(+)
create mode 100644 fieldservice_order_property/README.rst
create mode 100644 fieldservice_order_property/__init__.py
create mode 100644 fieldservice_order_property/__manifest__.py
create mode 100644 fieldservice_order_property/models/__init__.py
create mode 100644 fieldservice_order_property/models/fsm_order.py
create mode 100644 fieldservice_order_property/models/fsm_team.py
create mode 100644 fieldservice_order_property/pyproject.toml
create mode 100644 fieldservice_order_property/readme/CONTRIBUTORS.md
create mode 100644 fieldservice_order_property/readme/DESCRIPTION.md
create mode 100644 fieldservice_order_property/readme/USAGE.md
create mode 100644 fieldservice_order_property/static/description/icon.png
create mode 100644 fieldservice_order_property/static/description/index.html
create mode 100644 fieldservice_order_property/tests/__init__.py
create mode 100644 fieldservice_order_property/tests/test_fsm_order.py
create mode 100644 fieldservice_order_property/views/fsm_order_views.xml
diff --git a/fieldservice_order_property/README.rst b/fieldservice_order_property/README.rst
new file mode 100644
index 0000000000..75917e9eb0
--- /dev/null
+++ b/fieldservice_order_property/README.rst
@@ -0,0 +1,97 @@
+============================
+Field Service Order_Property
+============================
+
+..
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! source digest: sha256:4313d0f9c2af696a8028514e9abef93e599ee85dbbda8d999e06c7af67053942
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |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%2Ffield--service-lightgray.png?logo=github
+ :target: https://github.com/OCA/field-service/tree/17.0/fieldservice_order_property
+ :alt: OCA/field-service
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/field-service-17-0/field-service-17-0-fieldservice_order_property
+ :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/field-service&target_branch=17.0
+ :alt: Try me on Runboat
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+This module enables property management in field service orders.
+Properties are shared across all field service orders within the same
+field service team.
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Usage
+=====
+
+Add property fields:
+
+1. Go to Field Service and create or edit a record.
+2. Click ⚙ **Add Properties** → select a **Field Type**, and optionally
+ add a default value. Check **View in Kanban** to display the fields
+ in kanban views. Click anywhere to validate and close the dialog.
+3. The displayed properties automatically adjust based on the team
+ associated with the record.
+
+Delete property fields:
+
+1. Click the pencil icon next to the targeted property, then click
+ Delete.
+
+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 `_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+-------
+
+* Binhex
+
+Contributors
+------------
+
+- `Binhex `__:
+
+ - Rolando Pérez
+
+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/field-service `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/fieldservice_order_property/__init__.py b/fieldservice_order_property/__init__.py
new file mode 100644
index 0000000000..0650744f6b
--- /dev/null
+++ b/fieldservice_order_property/__init__.py
@@ -0,0 +1 @@
+from . import models
diff --git a/fieldservice_order_property/__manifest__.py b/fieldservice_order_property/__manifest__.py
new file mode 100644
index 0000000000..100e148904
--- /dev/null
+++ b/fieldservice_order_property/__manifest__.py
@@ -0,0 +1,13 @@
+{
+ "name": "Field Service Order_Property",
+ "summary": "Manage custom properties for Field Service Orders",
+ "author": "Binhex, Odoo Community Association (OCA)",
+ "website": "https://github.com/OCA/field-service",
+ "category": "Field Service",
+ "version": "17.0.1.0.0",
+ "depends": ["fieldservice"],
+ "data": [
+ "views/fsm_order_views.xml",
+ ],
+ "license": "AGPL-3",
+}
diff --git a/fieldservice_order_property/models/__init__.py b/fieldservice_order_property/models/__init__.py
new file mode 100644
index 0000000000..3c6f82f0b8
--- /dev/null
+++ b/fieldservice_order_property/models/__init__.py
@@ -0,0 +1,2 @@
+from . import fsm_team
+from . import fsm_order
diff --git a/fieldservice_order_property/models/fsm_order.py b/fieldservice_order_property/models/fsm_order.py
new file mode 100644
index 0000000000..8105787d18
--- /dev/null
+++ b/fieldservice_order_property/models/fsm_order.py
@@ -0,0 +1,14 @@
+# Copyright 2026 Binhex - Rolando Pérez
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import fields, models
+
+
+class FSMOrder(models.Model):
+ _inherit = "fsm.order"
+
+ fsm_order_properties = fields.Properties(
+ "Properties",
+ definition="team_id.fsm_order_properties_definition",
+ copy=True,
+ )
diff --git a/fieldservice_order_property/models/fsm_team.py b/fieldservice_order_property/models/fsm_team.py
new file mode 100644
index 0000000000..b8032466d0
--- /dev/null
+++ b/fieldservice_order_property/models/fsm_team.py
@@ -0,0 +1,12 @@
+# Copyright 2026 Binhex - Rolando Pérez
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import fields, models
+
+
+class FSMTeam(models.Model):
+ _inherit = "fsm.team"
+
+ fsm_order_properties_definition = fields.PropertiesDefinition(
+ "FSM Order Properties"
+ )
diff --git a/fieldservice_order_property/pyproject.toml b/fieldservice_order_property/pyproject.toml
new file mode 100644
index 0000000000..4231d0cccb
--- /dev/null
+++ b/fieldservice_order_property/pyproject.toml
@@ -0,0 +1,3 @@
+[build-system]
+requires = ["whool"]
+build-backend = "whool.buildapi"
diff --git a/fieldservice_order_property/readme/CONTRIBUTORS.md b/fieldservice_order_property/readme/CONTRIBUTORS.md
new file mode 100644
index 0000000000..cb9586f0d6
--- /dev/null
+++ b/fieldservice_order_property/readme/CONTRIBUTORS.md
@@ -0,0 +1,2 @@
+- [Binhex](https://binhex.cloud):
+ - Rolando Pérez
diff --git a/fieldservice_order_property/readme/DESCRIPTION.md b/fieldservice_order_property/readme/DESCRIPTION.md
new file mode 100644
index 0000000000..da7ca5f816
--- /dev/null
+++ b/fieldservice_order_property/readme/DESCRIPTION.md
@@ -0,0 +1 @@
+This module enables property management in field service orders. Properties are shared across all field service orders within the same field service team.
diff --git a/fieldservice_order_property/readme/USAGE.md b/fieldservice_order_property/readme/USAGE.md
new file mode 100644
index 0000000000..56eff5360c
--- /dev/null
+++ b/fieldservice_order_property/readme/USAGE.md
@@ -0,0 +1,9 @@
+Add property fields:
+
+1. Go to Field Service and create or edit a record.
+2. Click ⚙ **Add Properties** → select a **Field Type**, and optionally add a default value. Check **View in Kanban** to display the fields in kanban views. Click anywhere to validate and close the dialog.
+3. The displayed properties automatically adjust based on the team associated with the record.
+
+Delete property fields:
+
+1. Click the pencil icon next to the targeted property, then click Delete.
diff --git a/fieldservice_order_property/static/description/icon.png b/fieldservice_order_property/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d
GIT binary patch
literal 9455
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
z
z?n?eq1XP>p-IM$Z^C;2L3itnbJZAip*Zo0aw2bs8@(s^~*8T9go!%dHcAz2lM;`yp
zD=7&xjFV$S&5uDaiScyD?B-i1ze`+CoRtz`Wn+Zls4&}MO{@N!ufrzjG$B79)Y2d3tBk&)TxUTw@QS0TEL_?njX|@vq?Uz(nBFK5Pq7*xj#u*R&i|?7+6#
z+|r_n#SW&LXhtheZdah{ZVoqwyT{D>MC3nkFF#N)xLi{p7J1jXlmVeb;cP5?e(=f#
zuT7fvjSbjS781v?7{)-X3*?>tq?)Yd)~|1{BDS(pqC
zC}~H#WXlkUW*H5CDOo<)#x7%RY)A;ShGhI5s*#cRDA8YgqG(HeKDx+#(ZQ?386dv!
zlXCO)w91~Vw4AmOcATuV653fa9R$fyK8ul%rG
z-wfS
zihugoZyr38Im?Zuh6@RcF~t1anQu7>#lPpb#}4cOA!EM11`%f*07RqOVkmX{p~KJ9
z^zP;K#|)$`^Rb{rnHGH{~>1(fawV0*Z#)}M`m8-?ZJV<+e}s9wE#
z)l&az?w^5{)`S(%MRzxdNqrs1n*-=jS^_jqE*5XDrA0+VE`5^*p3CuM<&dZEeCjoz
zR;uu_H9ZPZV|fQq`Cyw4nscrVwi!fE6ciMmX$!_hN7uF;jjKG)d2@aC4ropY)8etW=xJvni)8eHi`H$%#zn^WJ5NLc-rqk|u&&4Z6fD_m&JfSI1Bvb?b<*n&sfl0^t
z=HnmRl`XrFvMKB%9}>PaA`m-fK6a0(8=qPkWS5bb4=v?XcWi&hRY?O5HdulRi4?fN
zlsJ*N-0Qw+Yic@s0(2uy%F@ib;GjXt01Fmx5XbRo6+n|pP(&nodMoap^z{~q
ziEeaUT@Mxe3vJSfI6?uLND(CNr=#^W<1b}jzW58bIfyWTDle$mmS(|x-0|2UlX+9k
zQ^EX7Nw}?EzVoBfT(-LT|=9N@^hcn-_p&sqG
z&*oVs2JSU+N4ZD`FhCAWaS;>|wH2G*Id|?pa#@>tyxX`+4HyIArWDvVrX)2WAOQff
z0qyHu&-S@i^MS-+j--!pr4fPBj~_8({~e1bfcl0wI1kaoN>mJL6KUPQm5N7lB(ui1
zE-o%kq)&djzWJ}ob<-GfDlkB;F31j-VHKvQUGQ3sp`CwyGJk_i!y^sD0fqC@$9|jO
zOqN!r!8-p==F@ZVP=U$qSpY(gQ0)59P1&t@y?5rvg<}E+GB}26NYPp4f2YFQrQtot5mn3wu_qprZ=>Ig-$
zbW26Ws~IgY>}^5w`vTB(G`PTZaDiGBo5o(tp)qli|NeV(
z@H_=R8V39rt5J5YB2Ky?4eJJ#b`_iBe2ot~6%7mLt5t8Vwi^Jy7|jWXqa3amOIoRb
zOr}WVFP--DsS`1WpN%~)t3R!arKF^Q$e12KEqU36AWwnCBICpH4XCsfnyrHr>$I$4
z!DpKX$OKLWarN7nv@!uIA+~RNO)l$$w}p(;b>mx8pwYvu;dD_unryX_NhT8*Tj>BTrTTL&!?O+%Rv;b?B??gSzdp?6Uug9{
zd@V08Z$BdI?fpoCS$)t4mg4rT8Q_I}h`0d-vYZ^|dOB*Q^S|xqTV*vIg?@fVFSmMpaw0qtTRbx}
z({Pg?#{2`sc9)M5N$*N|4;^t$+QP?#mov
zGVC@I*lBVrOU-%2y!7%)fAKjpEFsgQc4{amtiHb95KQEwvf<(3T<9-Zm$xIew#P22
zc2Ix|App^>v6(3L_MCU0d3W##AB0M~3D00EWoKZqsJYT(#@w$Y_H7G22M~ApVFTRHMI_3be)Lkn#0F*V8Pq
zc}`Cjy$bE;FJ6H7p=0y#R>`}-m4(0F>%@P|?7fx{=R^uFdISRnZ2W_xQhD{YuR3t<
z{6yxu=4~JkeA;|(J6_nv#>Nvs&FuLA&PW^he@t(UwFFE8)|a!R{`E`K`i^ZnyE4$k
z;(749Ix|oi$c3QbEJ3b~D_kQsPz~fIUKym($a_7dJ?o+40*OLl^{=&oq$<#Q(yyrp
z{J-FAniyAw9tPbe&IhQ|a`DqFTVQGQ&Gq3!C2==4x{6EJwiPZ8zub-iXoUtkJiG{}
zPaR&}_fn8_z~(=;5lD-aPWD3z8PZS@AaUiomF!G8I}Mf>e~0g#BelA-5#`cj;O5>N
Xviia!U7SGha1wx#SCgwmn*{w2TRX*I
literal 0
HcmV?d00001
diff --git a/fieldservice_order_property/static/description/index.html b/fieldservice_order_property/static/description/index.html
new file mode 100644
index 0000000000..ccd048d2b1
--- /dev/null
+++ b/fieldservice_order_property/static/description/index.html
@@ -0,0 +1,446 @@
+
+
+
+
+
+Field Service Order_Property
+
+
+
+
+
Field Service Order_Property
+
+
+

+
This module enables property management in field service orders.
+Properties are shared across all field service orders within the same
+field service team.
+
Table of contents
+
+
+
+
Add property fields:
+
+- Go to Field Service and create or edit a record.
+- Click ⚙ Add Properties → select a Field Type, and optionally
+add a default value. Check View in Kanban to display the fields
+in kanban views. Click anywhere to validate and close the dialog.
+- The displayed properties automatically adjust based on the team
+associated with the record.
+
+
Delete property fields:
+
+- Click the pencil icon next to the targeted property, then click
+Delete.
+
+
+
+
+
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.
+
Do not contact contributors directly about support or help with technical issues.
+
+
+
+
+
+
+
+
This module is maintained by the OCA.
+
+
+
+
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/field-service project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
+
+
+
+
+
diff --git a/fieldservice_order_property/tests/__init__.py b/fieldservice_order_property/tests/__init__.py
new file mode 100644
index 0000000000..b27da9a119
--- /dev/null
+++ b/fieldservice_order_property/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_fsm_order
diff --git a/fieldservice_order_property/tests/test_fsm_order.py b/fieldservice_order_property/tests/test_fsm_order.py
new file mode 100644
index 0000000000..e9dd3feb28
--- /dev/null
+++ b/fieldservice_order_property/tests/test_fsm_order.py
@@ -0,0 +1,40 @@
+# Copyright 2024 Tecnativa - Pilar Vargas
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo.addons.base.tests.common import BaseCommon
+
+
+class TestFSMOrder(BaseCommon):
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls.team_a = cls.env.ref("fieldservice.fsm_team_default")
+ properties_def = [
+ {"name": "date", "type": "date", "string": "Date", "default": "2026-01-01"},
+ {
+ "name": "integer",
+ "type": "integer",
+ "string": "ID",
+ "default": 1,
+ },
+ ]
+ cls.team_a.fsm_order_properties_definition = properties_def
+ cls.team_b = cls.env["fsm.team"].create({"name": "Team B"})
+ cls.test_location = cls.env.ref("fieldservice.test_location")
+ cls.fsm_order_team_a = cls.env["fsm.order"].create(
+ {
+ "name": "Test Order Team A",
+ "team_id": cls.team_a.id,
+ "location_id": cls.test_location.id,
+ }
+ )
+
+ def test_fsm_order_properties_within_team(self):
+ self.fsm_order_team_a.fsm_order_properties = {
+ "date": "2026-01-03",
+ "integer": 5,
+ }
+
+ properties = self.fsm_order_team_a.fsm_order_properties
+ self.assertEqual(len(properties), 2)
+ self.assertFalse(self.team_b.fsm_order_properties_definition)
diff --git a/fieldservice_order_property/views/fsm_order_views.xml b/fieldservice_order_property/views/fsm_order_views.xml
new file mode 100644
index 0000000000..2ff9181cca
--- /dev/null
+++ b/fieldservice_order_property/views/fsm_order_views.xml
@@ -0,0 +1,41 @@
+
+
+
+ fsm.order
+
+
+
+
+
+
+
+
+
+
+ fsm.order
+
+
+
+
+
+
+
+
+
+
+
+
+
+ fsm.order
+
+
+
+
+
+
+
+
From a0990cf084b8ed4f7f99d13c9c58cca441fa0ca9 Mon Sep 17 00:00:00 2001
From: "r.perez"
Date: Wed, 11 Feb 2026 15:37:34 -0500
Subject: [PATCH 2/2] [MIG] fieldservice_order_property: Migration to 18.0
---
fieldservice_order_property/README.rst | 10 +++++-----
fieldservice_order_property/__manifest__.py | 2 +-
.../static/description/index.html | 6 +++---
3 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/fieldservice_order_property/README.rst b/fieldservice_order_property/README.rst
index 75917e9eb0..84426874af 100644
--- a/fieldservice_order_property/README.rst
+++ b/fieldservice_order_property/README.rst
@@ -17,13 +17,13 @@ Field Service Order_Property
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Ffield--service-lightgray.png?logo=github
- :target: https://github.com/OCA/field-service/tree/17.0/fieldservice_order_property
+ :target: https://github.com/OCA/field-service/tree/18.0/fieldservice_order_property
:alt: OCA/field-service
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/field-service-17-0/field-service-17-0-fieldservice_order_property
+ :target: https://translation.odoo-community.org/projects/field-service-18-0/field-service-18-0-fieldservice_order_property
: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/field-service&target_branch=17.0
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/field-service&target_branch=18.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -60,7 +60,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.
@@ -92,6 +92,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/field-service `_ project on GitHub.
+This module is part of the `OCA/field-service `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/fieldservice_order_property/__manifest__.py b/fieldservice_order_property/__manifest__.py
index 100e148904..9594ff2fa6 100644
--- a/fieldservice_order_property/__manifest__.py
+++ b/fieldservice_order_property/__manifest__.py
@@ -4,7 +4,7 @@
"author": "Binhex, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/field-service",
"category": "Field Service",
- "version": "17.0.1.0.0",
+ "version": "18.0.1.0.0",
"depends": ["fieldservice"],
"data": [
"views/fsm_order_views.xml",
diff --git a/fieldservice_order_property/static/description/index.html b/fieldservice_order_property/static/description/index.html
index ccd048d2b1..5d6f4528c1 100644
--- a/fieldservice_order_property/static/description/index.html
+++ b/fieldservice_order_property/static/description/index.html
@@ -369,7 +369,7 @@ Field Service Order_Property
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:4313d0f9c2af696a8028514e9abef93e599ee85dbbda8d999e06c7af67053942
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-

+

This module enables property management in field service orders.
Properties are shared across all field service orders within the same
field service team.
@@ -408,7 +408,7 @@
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.
@@ -437,7 +437,7 @@
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/field-service project on GitHub.
+
This module is part of the OCA/field-service project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.