From 8d1d1883484bcef3090b89f0f45727e0172aa68a Mon Sep 17 00:00:00 2001 From: Bhavesh Odedra Date: Tue, 11 Dec 2018 13:10:34 +0530 Subject: [PATCH 01/41] [11.0][ADD] fieldservice_agreement module [UPD] README.rst --- fieldservice_agreement/README.rst | 109 +++++ fieldservice_agreement/__init__.py | 4 + fieldservice_agreement/__manifest__.py | 24 + fieldservice_agreement/models/__init__.py | 4 + fieldservice_agreement/models/agreement.py | 38 ++ fieldservice_agreement/models/fsm_order.py | 12 + fieldservice_agreement/readme/CONFIGURE.rst | 0 .../readme/CONTRIBUTORS.rst | 1 + fieldservice_agreement/readme/CREDITS.rst | 3 + fieldservice_agreement/readme/DESCRIPTION.rst | 7 + fieldservice_agreement/readme/ROADMAP.rst | 0 fieldservice_agreement/readme/USAGE.rst | 8 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 447 ++++++++++++++++++ .../views/agreement_view.xml | 19 + .../views/fsm_order_view.xml | 17 + 16 files changed, 693 insertions(+) create mode 100644 fieldservice_agreement/README.rst create mode 100644 fieldservice_agreement/__init__.py create mode 100644 fieldservice_agreement/__manifest__.py create mode 100644 fieldservice_agreement/models/__init__.py create mode 100644 fieldservice_agreement/models/agreement.py create mode 100644 fieldservice_agreement/models/fsm_order.py create mode 100644 fieldservice_agreement/readme/CONFIGURE.rst create mode 100644 fieldservice_agreement/readme/CONTRIBUTORS.rst create mode 100644 fieldservice_agreement/readme/CREDITS.rst create mode 100644 fieldservice_agreement/readme/DESCRIPTION.rst create mode 100644 fieldservice_agreement/readme/ROADMAP.rst create mode 100644 fieldservice_agreement/readme/USAGE.rst create mode 100644 fieldservice_agreement/static/description/icon.png create mode 100644 fieldservice_agreement/static/description/index.html create mode 100644 fieldservice_agreement/views/agreement_view.xml create mode 100644 fieldservice_agreement/views/fsm_order_view.xml diff --git a/fieldservice_agreement/README.rst b/fieldservice_agreement/README.rst new file mode 100644 index 0000000000..1c1acd5c5d --- /dev/null +++ b/fieldservice_agreement/README.rst @@ -0,0 +1,109 @@ +============== +FSM Agreements +============== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/11.0/fieldservice_agreement + :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-11-0/field-service-11-0-fieldservice_agreement + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/264/11.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Odoo Agreement App does not provide an easy way to access field service orders +related to an agreement. Some organizations needs to have a quick access to +field service orders to track the performance of an agreement. + +This module allows you to link a field service order to an agreement and adds a +smart button on the agreement to look at the list of related field service +orders. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +To use this module: + +* Go to Field Service > Operations > Orders +* Select or create a field service order and set the agreement +* Go to Agreement > Agreements +* Open the previous agreement +* Click on the smart button "Service Orders" to see the list of related field + service orders + +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 smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Open Source Integrators + +Contributors +~~~~~~~~~~~~ + +* Bhavesh Odedra + +Other credits +~~~~~~~~~~~~~ + +The development of this module has been financially supported by: + +* Open Source Integrators + +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-max3903| image:: https://github.com/max3903.png?size=40px + :target: https://github.com/max3903 + :alt: max3903 +.. |maintainer-bodedra| image:: https://github.com/bodedra.png?size=40px + :target: https://github.com/bodedra + :alt: bodedra + +Current `maintainers `__: + +|maintainer-max3903| |maintainer-bodedra| + +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_agreement/__init__.py b/fieldservice_agreement/__init__.py new file mode 100644 index 0000000000..631bd4893a --- /dev/null +++ b/fieldservice_agreement/__init__.py @@ -0,0 +1,4 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models diff --git a/fieldservice_agreement/__manifest__.py b/fieldservice_agreement/__manifest__.py new file mode 100644 index 0000000000..9ff2a7c0e7 --- /dev/null +++ b/fieldservice_agreement/__manifest__.py @@ -0,0 +1,24 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "FSM Agreements", + "summary": "Manage FSM Agreements", + "author": "Open Source Integrators, " + "Odoo Community Association (OCA)", + "website": "https://github.com/OCA/field-service", + "category": "Field Service", + "license": "AGPL-3", + "version": "11.0.1.0.0", + "depends": [ + "fieldservice", + "agreement", + ], + "data": [ + "views/agreement_view.xml", + "views/fsm_order_view.xml", + ], + "application": True, + "development_status": "Beta", + "maintainers": ["max3903", "bodedra"], +} diff --git a/fieldservice_agreement/models/__init__.py b/fieldservice_agreement/models/__init__.py new file mode 100644 index 0000000000..a8787cb0a8 --- /dev/null +++ b/fieldservice_agreement/models/__init__.py @@ -0,0 +1,4 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import fsm_order +from . import agreement diff --git a/fieldservice_agreement/models/agreement.py b/fieldservice_agreement/models/agreement.py new file mode 100644 index 0000000000..2cbd621673 --- /dev/null +++ b/fieldservice_agreement/models/agreement.py @@ -0,0 +1,38 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models, api + + +class Agreement(models.Model): + _inherit = 'agreement' + + service_order_count = fields.Integer( + compute='_compute_service_order_count', + string='# Service Orders' + ) + + @api.multi + def _compute_service_order_count(self): + for agreement in self: + res = self.env['fsm.order'].search_count( + [('agreement_id', '=', agreement.id)]) + agreement.service_order_count = res or 0 + + @api.multi + def action_view_service_order(self): + for agreement in self: + fsm_order_ids = self.env['fsm.order'].search( + [('agreement_id', '=', agreement.id)]) + action = self.env.ref( + 'fieldservice.action_fsm_operation_order').read()[0] + if len(fsm_order_ids) > 1: + action['domain'] = [('id', 'in', fsm_order_ids.ids)] + elif len(fsm_order_ids) == 1: + action['views'] = [( + self.env.ref('fieldservice.fsm_order_form').id, + 'form')] + action['res_id'] = fsm_order_ids.ids[0] + else: + action = {'type': 'ir.actions.act_window_close'} + return action diff --git a/fieldservice_agreement/models/fsm_order.py b/fieldservice_agreement/models/fsm_order.py new file mode 100644 index 0000000000..88c923cd1b --- /dev/null +++ b/fieldservice_agreement/models/fsm_order.py @@ -0,0 +1,12 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields + +from odoo.addons.base_geoengine import geo_model + + +class FSMOrder(geo_model.GeoModel): + _inherit = 'fsm.order' + + agreement_id = fields.Many2one('agreement', string='Agreement') diff --git a/fieldservice_agreement/readme/CONFIGURE.rst b/fieldservice_agreement/readme/CONFIGURE.rst new file mode 100644 index 0000000000..e69de29bb2 diff --git a/fieldservice_agreement/readme/CONTRIBUTORS.rst b/fieldservice_agreement/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..567f85bd69 --- /dev/null +++ b/fieldservice_agreement/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Bhavesh Odedra diff --git a/fieldservice_agreement/readme/CREDITS.rst b/fieldservice_agreement/readme/CREDITS.rst new file mode 100644 index 0000000000..8209266d99 --- /dev/null +++ b/fieldservice_agreement/readme/CREDITS.rst @@ -0,0 +1,3 @@ +The development of this module has been financially supported by: + +* Open Source Integrators diff --git a/fieldservice_agreement/readme/DESCRIPTION.rst b/fieldservice_agreement/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..715fea45c6 --- /dev/null +++ b/fieldservice_agreement/readme/DESCRIPTION.rst @@ -0,0 +1,7 @@ +Odoo Agreement App does not provide an easy way to access field service orders +related to an agreement. Some organizations needs to have a quick access to +field service orders to track the performance of an agreement. + +This module allows you to link a field service order to an agreement and adds a +smart button on the agreement to look at the list of related field service +orders. diff --git a/fieldservice_agreement/readme/ROADMAP.rst b/fieldservice_agreement/readme/ROADMAP.rst new file mode 100644 index 0000000000..e69de29bb2 diff --git a/fieldservice_agreement/readme/USAGE.rst b/fieldservice_agreement/readme/USAGE.rst new file mode 100644 index 0000000000..66cebd33d1 --- /dev/null +++ b/fieldservice_agreement/readme/USAGE.rst @@ -0,0 +1,8 @@ +To use this module: + +* Go to Field Service > Operations > Orders +* Select or create a field service order and set the agreement +* Go to Agreement > Agreements +* Open the previous agreement +* Click on the smart button "Service Orders" to see the list of related field + service orders diff --git a/fieldservice_agreement/static/description/icon.png b/fieldservice_agreement/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/fieldservice_agreement/static/description/index.html b/fieldservice_agreement/static/description/index.html new file mode 100644 index 0000000000..5da62f8b38 --- /dev/null +++ b/fieldservice_agreement/static/description/index.html @@ -0,0 +1,447 @@ + + + + + + +FSM Agreements + + + +
+

FSM Agreements

+ + +

Beta License: AGPL-3 OCA/field-service Translate me on Weblate Try me on Runbot

+

Odoo Agreement App does not provide an easy way to access field service orders +related to an agreement. Some organizations needs to have a quick access to +field service orders to track the performance of an agreement.

+

This module allows you to link a field service order to an agreement and adds a +smart button on the agreement to look at the list of related field service +orders.

+

Table of contents

+ +
+

Usage

+

To use this module:

+
    +
  • Go to Field Service > Operations > Orders
  • +
  • Select or create a field service order and set the agreement
  • +
  • Go to Agreement > Agreements
  • +
  • Open the previous agreement
  • +
  • Click on the smart button “Service Orders” to see the list of related field +service orders
  • +
+
+
+

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 smashing it by providing a detailed and welcomed +feedback.

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Open Source Integrators
  • +
+
+ +
+

Other credits

+

The development of this module has been financially supported by:

+
    +
  • Open Source Integrators
  • +
+
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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.

+

Current maintainers:

+

max3903 bodedra

+

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_agreement/views/agreement_view.xml b/fieldservice_agreement/views/agreement_view.xml new file mode 100644 index 0000000000..5ae94d69f0 --- /dev/null +++ b/fieldservice_agreement/views/agreement_view.xml @@ -0,0 +1,19 @@ + + + + + + + agreement.form.fsm.order.view + agreement + + +
+ +
+
+
+
diff --git a/fieldservice_agreement/views/fsm_order_view.xml b/fieldservice_agreement/views/fsm_order_view.xml new file mode 100644 index 0000000000..b6fe7d95a2 --- /dev/null +++ b/fieldservice_agreement/views/fsm_order_view.xml @@ -0,0 +1,17 @@ + + + + + + + fsm.order.agreement.form + fsm.order + + + + + + + + From 87e02837afce67d6b4810a54b911e7d1eb8ba528 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 13 Dec 2018 12:37:10 -0600 Subject: [PATCH 02/41] [IMP] Various improvements --- fieldservice_agreement/__manifest__.py | 8 +++++--- .../static/description/icon.png | Bin 9455 -> 17808 bytes .../views/fsm_order_view.xml | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/fieldservice_agreement/__manifest__.py b/fieldservice_agreement/__manifest__.py index 9ff2a7c0e7..31c919f483 100644 --- a/fieldservice_agreement/__manifest__.py +++ b/fieldservice_agreement/__manifest__.py @@ -2,7 +2,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { - "name": "FSM Agreements", + "name": "Field Service - Agreements", "summary": "Manage FSM Agreements", "author": "Open Source Integrators, " "Odoo Community Association (OCA)", @@ -18,7 +18,9 @@ "views/agreement_view.xml", "views/fsm_order_view.xml", ], - "application": True, "development_status": "Beta", - "maintainers": ["max3903", "bodedra"], + "maintainers": [ + "max3903", + "bodedra", + ], } diff --git a/fieldservice_agreement/static/description/icon.png b/fieldservice_agreement/static/description/icon.png index 3a0328b516c4980e8e44cdb63fd945757ddd132d..955674d8f0b8c47de3ffa9db25cb109fbe4a1091 100644 GIT binary patch literal 17808 zcmeHvc;{H3sucZElF-G)hC-+rdy@|cVP3o7ETY&& zJl-5>)T;P#Y>Z2k74p9gK&J2CJC5%@{WsV@`$(=#w|Cf>44L@opuIqTY_XMpYif9< zJEhZ)*(Ciawd2E4g!g{`tf-6DV*W@FZ!b&?uih_mMpBM%8|x61r3D=Pkjl)*LT52YNq;hIj5|udFA)RjvAIV zR;k3*$i5qSsi6bcd50k9_J$d6qZe5$CLIT#a*i*=wkVz%dgiqH(oe=68=3m>aXb03 zuyMGqBG(dcQxAcfP+K4yg1i{GtF9VUM32?R>d%HqF@xRPyIc?3mifg(5sPQ&5bDFm zimOQwOnX4K!Srd#7sF2xi^4^1yiGAIq~p7mmzr<~Lo z`^Zj#UvWcW93Rm$F}uR@r0rcd-HSU5-(-GqWovBbB`xhmjl4J(??0#Kk62I~XSft|EnXSitq|ZL3=o#1EvQgW9 zJ|12;ejG8^^|hTqjb_(={4bNTpQWY8O}Sq_{M)O6b6uy9w|sdo6^zbBeKnQ6ZrBxf z{=<=LGexYoQ+%!%@poCfC;cW~ny!1tUwf@o9+XcXuz3-vA`{X*t(iu(J(v4eK3$BR z#?wsdnI9niHT%fq-!r>21r=>B+y?CU48s?sGY##Qf?l6kS}{XEKaG3P%=c#V{Z`MeV8Rg#4Z(I6 zeUkKcouTFhVv!mqpgP%TpU}z8*Yf=tv1Q~b#DPLwkmDjH6U{+_F!pgNVV@}v zE_;Oc;S_mM$!3hz@uxyNzlJV`D!(V$L`Z$=*YjiSe_v$^V+Z*0H4ecz-X^KG3Xh91 zJtlf|UNz07Y#FKl46c-J6y0GhCP<)$*JggiUF@eIv9sen?MtXFOuac$_`IKZ&l|z) z$DT>fB2eQzolI1)xny!__wV%Nr%CM35kW0htameEa2Xxl-VJUt0m|nu2U3$ze(Tv8 z_hVB{JXq83`D;Upw=LOuDRooALyP@8w;=UBLcBPO_Oo2Eqzyr^s9lFgZ;gA+g>qXL zQ&>MXjs}PweSxbdKlG#^m{z z4MEp>mrQoM81`rGl4fG*YlUD7lD(ODkJuzt4j+8OD@_^c{M?VWMvL-mhf5~AL_6K|~@F^Eh5X5Bh|N|tZb>4SGD2C!(~DsSL~^_)(2+Whr4`XyCSV{(`B^kJm~Sq5H4 z={4Mo>%Pqe9hXx1H!&Weh$$`>=k4s~l1y2@kbRf3#Hj62w#Y5v*j#41aOZbPZKJoD zT65i*>hQ5H;E&)$J)> zuxv=r!DD1$E7*+}4Znaljjhl{m+jeAD`FwHnWb{?rNRS*#3~Eb#Z1J*x%}A?y#QqE zY3J9H`r#V7#3BN9WEBUyms973^%E}-Q85dO6vPw{YyP8Ab4h)?4d>@Xa#ek}@me&_ zsu*@8-MJp@l{Fajl%X)8YIcH{gQoNo%j$Ln89tr-rRpk=Lq@6>FU_I#jZ|+7ZKE>6 z`W`W+WV)WGFH2S=CjUICcO}vmZk_yD>>7iGl&wC-+*cwN($J)jR>5uzBwO^18T3HJ zT8ptb-yH>B@o#OOS75y{VrE?xxSu@8N>}~U{LqHoaKE;reTWfe$#5$VNM4#Fa zZfkbN3W0lG%wM)^|%PIa;|pL*eGhj125^^V^CQRr+V=S<3oHC@VQ*Rvr%;;2?TUnpig5 zs`9&vGhHwPd|19TpB=*Cu_T2BC$2Fz*pU2+51AZVxI5b)^K-JSFG}8$HTeA8+{C9G z*4RK}Arvx*HHlneHX#xcWra;;X7HN0S|>@v+IX*doQvK2OR0MB!&KBFV8_8TA0ThE zUCUNO#Of)<)vmp~sOy>|@lwf~eO7X}(3(rQI5f_v+RezW-U2vuDQncBGD zF(VA7*oS6JB(F=kHQ%l@G%-$VFA?@NnvM#;BzN!R{H%%y6~sEZ0pg(3FEUZEuc7No z1Vj|DQSR`iJZVT3MW?4vwx^xq7#`xvF@!X|rJ=jmC-Mdo(DWonw&V~O<5O8-Hkh zOEdL3#D24!;Y?zY9P8c(<+YD8#kyPIzaKvmD8e2y)X6<-*L!drI*zBDi-i=0uu5G` z$J^EToaG?!T8-pJb2(>-C$@OY{R-{yWp zii!?Pz`{sZ2%!VEB+y#c+Vk$iN>j5Wy>hoJ+R5)5Q+5@NKuMolyQFK^9jgWXKvtad zvnR{)_U4xGO`mULUP(d`1_ugr8!tEcJ4M87LxLFW#JOsVI3d(sq^&;R^5av?A}=9E z*@zzYGj@5w{;!VC2hN(VF{>|nbd$l!@6OZSfDI?==C0&@N@ob6!tY0y1(_*y&gn2n z7{TwW-TxBjC#f}hDQ3*~wR0UU=GR0P(iD8-Ess&BusECJJg1h~m7+-(T6nE!|L#W% z0cxy)EHM~T8h=1~aH=vJa5OPQW}I%FT(w*L>->d`ohE-q_uu6`d&$=gznwiw2sHISjYlQg zJdPT=Lce8FTqkR#p>6iek2&+loxZ8D=317tg0adE`KvP@dEz~z&(^PXsw-I*i|n7Z zjBn=~pL05}RzkjtUYGiDjjYe|d{}5ng8KHs*Q&#|#7BX0P0ol_&sQ9+?c)f-r7|V9 zW{d0er92o2iOjV{2m4bHDq)~+VGPX8r!wn~Tw-Cuyh-+}a=4t*5DQ!vMQHo5_>#U~ zdH14?&zDw9?WN;_v9T#GGZDMWtHmcL_-T#FMP=k>C4g55CUZ9uJWD=ZrBlCtNAF9l z@}wNeXq{=>N|JW<-=9^%NZq@qD`^8Jx&@Q}FOt)tNn+diSNi`K_DL$Nnvt zu(FV$dO0oS=wO72Q}pS4OQWZ-#VMc6GF73?o_c#@gQ8z9N@85$;+n*+=~M=uiB~wO zIx^Cwjz(`e0Ep&p^s97SwLh5b1bwOQrg^`bIhW>X(PiUlqajhz$Lq%AqqXXcR3w>U zQ?V_Z#z3F}L=jbcQH|n_%5(orK+U`JnwB2#Gj)=6&QF~22uO`_`9jJyyJ8H zR4MQj0#zvrM_G*LfnE$4dvKY5;+{@!^uVaBx0sW5R(Va{fjDg2b+-X!Rpl85^bWB# zL9CiD+sGE=o-65iW$h4uxUXg&h`T0!nGZIKie9}ry&|9H(r;q&I=fR^3+ey~x?PS* zLU!r0Qz)^?QU7_&Z-wEqx~;huBz4DT;n zx%-9VM*R(Lax`-HjE3yUt4@Wat&nK>PaVFx2bQR$UWup>vT?^t74*Kd-RCxZCP7w5 zCn@3jHF~7O(i+{3BlWMeGjpVF{jqkhW)W!pqhO+AqXEH;KmMn=t2!mb{Kh_I7M5q8~NAl_$ji!)jq4t6m`*jW6}ei+TZ`>JVA2k2RR}e6S}3qpyWK|01)a zR3y2>nLBJ8_^@CPxBg)yK6-VoT@xW*C0*>_*L`eAVyYOr5A3KFNm^dqw(I?-Yw6L@ zoy~;Qb3~p(uU?YV3mE!-rzULw72^J;=p?v5n=|iyL+@c1sj!eEfwjtg`6QG_ga_BU zJa6*UhqUAxgCJ#B#nDGMS-Ps5ajoD%y3@2%#z)He1y8=VS)3$oKSg@O7(B&}zX%u8 z9P1g*YG$C;AyMmh7eHKDHOcS~kvtWsU`bu}b&mw-!cE5K?x(GM>=RxM4T8vfAmN{@ zL=5)7Ss1S(H@%!1HdUYJ26efRKr8#p->jZjuY6)xtJM4=gT=YOl?gdc*+S2T({1LO z2I@rMKK}-_4fg~L-n0^-+PJqs*IOF*#$5NLl0fo7ezq>c!1G20)wsID+*dwjLR7t} zy^R(o0A~PApD`${GLOv9nVW-OKz&oqty1VXMng_1%xLePEL(2d_bEG> z_E*2rzx(>HZYnry0S}QT6&32>eCxk-5+#J29`9Y_{%5~k$S12G4A&%7NzX0M_P*nIkvB0&E!5Gg zGtLt;c4XwqqRX&R#|B~Oq8IN8yti5yOd-lDP#MFTUtsf__`)d0RUI{p$0S)%|MQ)E ziRf>W+vVFgbIDXxmgqO5wB@bZ=_@z4aey&sTy~n^_c+OelD5;-0xF}iTuB!UG$->A zYNBiHbFc2*#?PSLZOfW!Nep#bUVVFQ=KBbF&=f^7f2^cHI-a}DpQGKBPo_}s!>d{? zd*UX$2qC|#1)qJFYc&lehUmL1k5ix~s~Nw_4Y>EdA$dGMRr1kZzlFSn&=EeO))69T zz8SXDw#af^8_$tX%}#4Ox!ZOK8AtDW(p{zrSA5q`Tu@(Jrg~6TO(mlD4b8XpLz}%H zyp7CvE;gNcHWHs2^y4$WAw%t%GcafUgiH=@HD>~O0?B{KwQa*=MVb@;b zEYNwm%dnOVyT;rL(K48AR0^=9t>fQZQxUB!Lu(T>wXg3dECL_%22JF);t$<89Fh~T zdyVEF%4gK68xv312&aC6r7x&{@zl85Euq?xiZlAr4_Ms~Y)(zf{Mv$BX)_ILA^Aj~j;my-Ox|Hu|O6dWimSNEO2i(%9Oyn^kV;#= zJa>%=k0D$V(xnl3-IIqcQnmA@q>l-hD#Oz$1w&P+C8T^&M(1~tz9BF~!l9ej-uD2@ zR9@|0Q`+a|W#j+DfIz*)Kp5TCE#swLD;1W#ik2QvYT0bFa%+bL0IXVPOMdN~*1LgT z!mb3hM&79NZOPv6K6{A;g=)$Aua>uTx_T^MEmpSVPM_b=Kx3mR8BiHO@VLelzSq02 zc0U-ax*hWjmaUtz(x60_n(EiollZ)fKU6kiwCH@^azWhIyZ?Qe|L2D;W$GoK`72#N z#Az9QXrtcgEC;7BwPh<5*O@92C(HSj=mO@w?L*lH%!x~k?NyrUK76ut-NPZm&Y9dv znM85NnCw7P*&(;23EXV_s1QhaYD??ycu|*bwtWUhu6e-w_;LK4xt8x*b@Hf%Z5w3U z#KWAtsg&Za94KLq-mSkqLlM4vEPSg+Bv}on47spJJw-87`ImL>5jbBcWTj zz0!b#Af-7fi37khDD7VyfZbV!7Y=pF3-KD}!Y@+a4rPIWQ({X+NxZ*phei2EZvm)T zw-Y45CIbjv+_perJBcM!;kv^3V>X@JgI4(E=b&xl?U4eXogcT+RLp;7rM;T|1`tl_&*=zD}8mBjFrGM&H(zV#c4_fC+psUP3p9(5>tdp zV*GfGf9?I7+5G1D{ELe>G1#`(-o4#hJWlz_-+R|G!XKD{!jOJq^de0mrrq%s)K(-e`F@4nuS*U#R#zvJR@!Cn*N!)Fwe}bW~MiuSGV;jvD@i*rzUxLPNq?I@Y}ho` z7hkg(>BOuWN8_!7JrTcNF^-E(0}=X8 z{NX>#aj;imRy4Z)_swn{M`+rA?$?ZXqp+YbuC7U;v*$hV9KjPAF<@?c6-uCWV#^C#89W*Cmt(to_}}v5>(+mM`@v3ob6v~tnOj?H_0|K1 zTB$@ZhhmOViRj#b?-^4b6-maplLGGCGYWe3y;B1L2wp`HwOfC^VHx{aqx1UqyPzPQ ziKXLJUe9D8Hfwx)$L6rezuo%3gg`Ow;t#%=c@d7C$U6EPdCyF5;+uyKf2BrwEVKdI z#GnFVq~o6QNES|F&q{;z5vYq3_XN;_wC=|wms-~CL5H?{cTgMaKWmLYqsk-@E$eE5 z5OJyrt8I=pn8go7$<+dg*XvKJ_UEh7G8z1;ZM=cz?ixHC)2z%j_Vpo(1Rgj_Kp0Zn zJD_jWRKJM+)KsdT*0mF*%|Xs3CwS^&oBciALzjS0=n$|ucrKYj>l&22xJUV2S0h@HomV;ImUK$Y=qaQ>k^)^cdIt zIq-QQx&|NhRSfA#Ouk$L5IO=1*In25Eeb)`A?11>OrSyT{h~M!!ob}1yoq9?2!{l{ zt`wGxPlT*?+^Om6-eDYcR)=vZDyLP-JO_$H6mnvX{f{!^pFE*;z6Io9q1BGZ{5HF! zL%>ZNEqY!M56{NK=Ku_bl2rf>^okfO4LEb1_rA#tG~ys)R+q-uRtz5-JSzQ{umxPibOH+T*O_)mAWnDZf5DfEOAgyf?Tg=1b_Tp z>zpJHFM>Y0yP=Lt*AGgfUa2ash zd_wcdw{5@*em~rBjhSSJ*gG63@fmbSWI_YDgoGPntbpgD>bUY=w)wjn?s|<#CB^^h zR)V-v{}OTzmPOE(1JHN=_cojaFsr167|5(0QsYY~7e{)YZAX;zq*t=~uGk&_b}LhwbP+ z5NQwxc7d`aW{lpS3E{+g*c@e!c7NJW{~1$c)!MF!zf}%KM6FJ{_K#d z0hCc@dyc`9rf=E~azy={W;Jwc!9qhw%J)szPwNf2u3$A~a4_+mE;&|-$iZ8ky*q-Zb`)ix z{A>ui(@syZ`@UI0Rk_X9fKps=chNU<=SHBiPhD)_a?g(c0Zc8K0J1RpB*61r?^I=! zp|X`XQC0jqq3E}wpKLJwEIg?VNO6Ed7jADGUHkM(dK8dG_d`at5eO3)7C=oA!7(I^wu>rGbT}M^#%j1GBcXT!NQ-p_A7J#bUwK^tXFNI?z2g^?~{AFr?ocuZ7CQxX7bF z9K{O!{^^cygL%a2@rr!pp~6o~XWwkbrI^xA8C zRGD^2)(4TKKXP{ZzI3&6kBAZ^Xod%uFD%7;H8t<~I;@sFxQSS73ngYfYJfruwt6_E z0MLfLqv_0vHQonSjqD}K$^t=Y|F`S;a#BoO$ZDJ}%iEXnU*BT`SVJI)16gEE%Jc@f zOHkaW4=M$tZcyvY*bY*MFEYx)!g*isS**JJ%=y!Yt8`aC?e1Ha=t8>S5|2gqS-V>m z!Ots<0C7RcI^e!G?O9~qIm`ZcCKWcZR*ylKKz#m4-OT(g(EZTB4!Q(LY~p;Z)}y;_ zff5oiNcNuj`AI@faP?5CqPCK7m{R0y&bC!V-Q?RtF^X`Xt!ANv*(V{dH)Zo$poqZb zpoGc29t2JFYejEt`PnG(ST|sOH&0u94Xy?w_>$jK2D~TDHoliT*R>gyYh*iDnp8AA zU+ugn@-$KuHsqg=tyZb`inuc0&(Fl{ZNA78ng1wHU*&fbDomy9a!JpulJXafNc?ecuJ0k+TE|~GSM#o0CmLksxPORgG~n_vW`(5qH}COjNqk;` z@P!fz_xo|Ihd<=!-1tdUCQ(lj{Sq4Isn+NY_6D@U1=0LFY8auZfZQps$bkGCggWcwMkwqqpj3K zO!r^z0A8u=!@C{>TMJyr$xg0|n-6T(zp7LCWAzd|z*h?MH1*o4iw}=1qE1TXPaqx~ z9atwR9eom7*p+Tj%^!?#zx%za=fK_+f`9GR>q%J-#;tsoOq~{L%H$hbD)G zHNG0gUFb_n?7$;f>3z2Al#>hzU*C-qpVkIx@LP0oywK6ieJDmelNlf?=bb}IYNEYk z9;i8iYW%$Mx1&}FcUczm^vt>3`OMev0$5p~41pr4>PzVlmuFugh=~ekmi4*CpG}t4 zQTd%K94ry_(_(M!uYzfu*KQtT4)hy*0G&>ToVNvtgbgwc=oonMWnU?e%(5*o69jUJ zeXoGKk+E9=LN+2&g1t*@Qcn;(XK?fG+WilgDS!4;W)if9i_;1-aG&d!b0$-RH3zjY zzG`0J(A@~)m@Wtv;9L)!BcOaY0s*${6bU3`MIb0ZpPTxVs2J$GVi6xU>HQDYjZ!}) ztC!w~y*Vrl|>V7#! zFJ+7&8keD629@lrj_sWccA*iZp=bC#$`iLJIgRulcR_9iv_W6Rf3pd(uOQD@J*f;) zl)lgS`4zEhw%|WK1PRM@(cq0JfBM~S_F&hN>D}||KpP|+Pc`%NuT2KBRiJP|$eEe? zN&g?AN?nzj`)0W8Q%z6=rF!u_64|Z~1|b+F!Wc%qu%x#` zw(+vW-k-`kzr$rm&(773j^B;>G*5O;C!3h~fxHbw0+fL>0UBz4 z*T?Uo@+^Y+C5LGYEXr7XK{moo1Kzj$YpxAXTtLdP+lj$|BnN)2syUljdwg6Q0maMo z@t)t2aM=PvKJonG)H7D6oYw3~dD#zBCN(Vk=Z?IVJ)hiziei1E+-?Yjd*TA@fEagZ zOh7r($IT8mBgQ6q;PzTk^3E5}R7`Dm)$qWLx zIAdZF2y8H5RK+j+5=NR!rV7e@zd!qqo=<7hyh+%AI*HK}9x<`mS^LAE8yQPF#Gt!$ zLB2pS<6RO}eTa16e0_l-h~5(?XLZ}|Yutso>Isy5@WuCSV@z5d=A^SEU8K{%>`iKnd5oMAR*z>WgkTpU1i6AaG4#KfB5%xuHh>Hfe?ke zMyYY^E4(uvUPh=L`tWx`v6`MB)AwA@cZOX)bvc@@MbzIsdIr?ZD5#?X0bjr-8FG8a z{@_O1X$bWeo_(E7tAT*jIhZ-MMmHDJy`-roRBR_bB8{_w^2_wTvaSir9!<&9)C|@% zh(5G|J1zdM!(WJ;Ba8!{?wHF&N(gIzcP?TMiFk*(L6Iz$<+CHNIF3S(FealbK4l{i zHlbS#fZAALjc(g~K6Ape(|FLXc~daz9u)K?i$2g)2jE%}y1&%6UsVWkGL6{q{XG{) z!87>`wAQjkABSid;pS~GVzTAI(|Gm9U{Lev0AIkRD02Upt+D{{Qc0is%F}j=PaqNI zZC<6OOUe1WgM+DrYfHLP?Drsadqm{u8*)_^%|9fZ?beKNI$U0>k(5NU^@IFiYODfm ztTr>K>=g5m79e6vy_z41-uoA08g^4sXA(GOkeh=k0WN+{y6uiV5{gV;)p^GNQfR}^ zN5O-)a+9^OE!9j`a#$L*qr^^N zHGx9q^ds-5zku?^P!_gL{w7d$9nket!lq_M@uKtd=D%*Vc+65BFR0xlNySC-4;U*^ zyu7QEI9gu$Ss#{l{7MC7;vz7$zRTl%|40uV4;ZIjBGb$|2PGh;L555}5U+$_&h<%x zIW)<<(7><6t@HFP_aarR_Mr&ce}f-jI42%L5_nk-_}#^lJAD~_Ie*^ySAz?F z(bY-Y+*LV$`)YNjzJx6u<`b|o0{N0VP#)m2+lC<16j|{sRtz8&wpTAGHEHbETIMwPM5s^CgH7O-Yn@@gb(pLio-EF8EpAm3<-P*Px3^Lj{AsJH|` zDl}_ExPeB6Y7d<6c&vy#RgT^H4Bf8y!_gTmTC+K)V+m<(ytfI zroj4o+EK~BcN>9Hj{@#^ff~cFh)Bzy;qZAGU`_~f-EJa|FGxe61E*$ANZau6Du_z9 zt&56mXcrY)|IhBq{8HlQghUl@L|p@WnR)jJD}sw{$22ofd8?m>0DAHuGuSa1j$Q&C zD-HU>9JRl_{-<0!SIeynAotW^Q`h9TQ9b6Y@0;Eszr5SJ^p+v#UZ1I@v}$R zrB+npul%N(2EvKFwrD>T$iVGG@1?E#{XV(?7AcRG6Cjwk$q41dbvx?$f?xJ$!6%r$ zs(tMkH-zO7D?E$p*UjX-HJdwxs#ho>u4v^;Ly~`06`Bt1Y10`iB1a@qAUMG8kK3*Z zH2p%Etqx_i*p5rjY&wDJ6>7Le0veqBZUet``@r82;^0)gKedUbd;B1?f~r0pOizz=Sue^P#>^nqnsOT9+oqw#Z>;P}m`%w63sZJ$sJzN)=e4WzJMl!N`mO|R`!?W0Y|AJb8=p>KkNMi?XTL_h{O|as! zhsCMLS$u75XOaQ28^qr?Tx8%P)7``59~v6a zRRmq-&k_Q=dYhJL_YjnJz!1)+lZZZo+8taAwra{j$!I8Kxq?lfdO3iqXtOtPl@*iC zFO>%T*6l7{i}+}W2I9!zfhqxd%Fso{6oWykVgKJe!I?bSHc%xL!|`VVMID6pu2FgrSs zF5Zm>Xpt2Ug=3j_nl+C~g(SXS7}Q_j9*Q8dTV*^FXeZ9o7o5I!e&i`K?FecTG@@mD zkF=r_?LPftpeV&0H(S*q6xcR8blcwzqy%aO2eOHVu|9rem{P~H&p~MA-CGyDeVFoR- z3w$_BQBg0GB8h<~MOr+x{6VV+k-4tx@1e}pl}zlrvY18zD2;4IvfHvDLcFSz#CHg_ zHI4HS`$m4*K@giN5v2z1)Tn~0`@oIk6)I10Eq7rh0ImC`qx+!P;o64#!Jy>DEAQW) zPF_ubMDQWE_QndwN|Rhte98{tKs_{il~m)_(_9PxeVJ)o(%y~mRYN~EQb2=Eb(jAi zUUJYla0vi^5Dz|5A4j03*8`gmCbG!;SqM;$Tp5D=yoG6ugR&;EHZ;wzre83X55Bu7 zb@w2u)HJh!pUcEv;=jW6%rpUI|)aY)7#WCpnDt zHz56?xeRn_C1L(GW?D;Z1k!)QYgkO^9f6L4vzBn>`c2H!d;Kend?DGSU|pxfF-Nq= zxB^bL1;Spv9n?@`afiRq1XEFjAg_htD`ts;dZBrahph#h)8-OO`T1I(R#1u@dbQS1GdVCW( z(TEq_JGjUdQY@l$KnjevzqJEgMn9oLqN0FHBOuj0BzwpS(1^*EecK~269RBW9-K)$hfQT0u`)3UU=|L6)a$@85~9I48v;3{oG-f& z;AGrTz1Gnf3#oU7-}D%-vI0Pb;39lj0Wg(C3~TiR&$Mr~Vm&b&tD+*hHf;QK8Yug7 zV-zUf1P-1?2N(H9k!4p@jSCndt$r~@=lksQtWUJbva(>Yhk?-B_&Ssy%iZAp664ST zEvxoZZtO_x;<-lb-uOuwR_$LB(0CuKFW9A$6py~IVJ*w83S+^=s%sLl*&PNBhf^tXepT1KL^lYWb7isxxa6)zK#c^pwyWaACqF z*M=@&?-yF3$Gg7$)$P2H{G6vf@rq$zTW4U~+w}$&U!k@P>8n)0P2f5?zdX8;S3L6m;(he=iO2n!xEb2?+ z@!Q-vFOf7o*bb25t}J;Bp4R@;S%M(@z=NWllIRf?>n`)H*0Z?m#3*ky7tppIrQOKQ4h1kHTSOsIndWhMzDgQw* zjVMFQTwyXs!lbb-eqjNQB071^_^EGui-jQ;@8f^mMVmCA=Fga@CbN_{9c;}}=t0s% z8zQSSTWt+A*Hw`E_M&1X(4%{FV}CmD?9@$;u@S==IJ9hhh)NURRCzp1fZCLmJ^M7e zh72){_{dgn%}`D!u13?N8PUxoZsA6cU|7~%t}~k*AE*L_Ad1U=4x$i1Lo`0sPuCvu z^5AG@ObyrZ!kLuW)5*5oOiPz#At-MzxmnXEToM}$KrAjwQy~|a23I#P9j1+@xzk{^ zfhLAvD2T^d3029YFise#a#6*3)B-^mmKPpN+kHJwT%AI2*`K5BVL;lnmo$6^@@U=f zc+ISm{@BYikpU9^g%cXhJgmbZR0K|L+Se(zAFutXd2yJSO_Try$CZDyF+~VzdM~k& zuy{`=LpyKZ7rU-xUzDfFAQ;>M+y_j#&eviD5tA_tQq4HZE%v5MoCXLwB}+C4jK0=Yy|(o;xV_Pyf~*E$*B-T=wsd(tHd}>b-UDg&>oS2 zl|{JKU<9S5H!6yf?|?>#6i9WJU7s1DhO7yv3bnOtqjC)oApuf? zRDq~vmXs)!^)DAxle|TROpLUP3-exL$jN#3TQ+5Qb6%Vp=u@fOJIik!9AQQ+q)r~h z%EiGEUUglrlu7`7E-UfR0Jzi%y;Mod_>;1CEf2h-2_4>Ba|^9@SLmgK)4A|h@`n$y z^RC}_rl?OYF8H+V!okA>{eN&a6c3SlQkJeizKbAuoap~AfZdkj$wV=5W)TK)VyHnH zfI?_uM5Gc?LzTJW>(aQRBgTknt?V zl4NBQ|Ja#wJo%iNHzqeud2-LZ;5dz3sg&%=A0N<>&eQchJsGLf=^SFvU9HfcY#Ud| zgSyJ0D{|rj`Us)=Oqv|Dg`)oYe@o|1j}FMiHs8lsL9rdyo(w(yZ%S%dzL%DAKN|+} z9(_^`2D%ml(K|UWU%sqiSpAHPxB$=vf@EuoC~l#JJ}~40%m2>j zGWwXHJI2OAP%xvDU9Fj)f3zvya2lRc-*b24QTTj4YW{ZA8xplo{PTs)6LjtvE4+oq zO>t&E^fTM;A=cV%8JzPn3PB&kAXl2KhW?Nd85wzJlx#0ijShXJW?6qNFT5WHgX*`4 znAw6(otBnuX*CHI7J32YAFrpeFe*%n?tiX`q=R&agxqy8y^(5Q$_ZB`XM!tI*GZbX z(X#_0LZp6h^6*3~mEHhT0b`4Yup6AXVlpn+Q7tknyZpxvuEohyH{$F=!8mZnEQAjI zQ46(s-Yaz;wNUgv&W5ThKB{W3(9dUm{iObJMRL?`A=vQt%jg)l{#&O4GI+#Kwjew0nySosF+@T>xBYngWHD;bxF;7b-%>cT74(~!j za)0gM!|>0eyS75X+B()YfAk)l$Phu_s10UQ8K<;`o;##M&SgtTuC$&4T{~TLYh~dK zLm$LxbZ^z;{Wl*6GW5?iFeeetYLG-nRdM6TR)K?1<#+hD&;m{|(ME|BrHBci#pV0oF(@prIFR=LEDdC|` z$6e@>ZBk~p1x{c}1ap=W1^2W?Z=AMy=;mO76+#5-nyl4XmK<5P7YCL|M_(NIF>`>^ z*RLK*lO8nwDMbFyjM$-Z6Jc-2q&bOb^^g1dhQG`X-*=g!K5kpSk08tH`uba$AEu(3 gUHh>HCdQ7*k1fAW1vhU(MTsEtw^U^Fq)ngxAO8EYHUIzs literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I diff --git a/fieldservice_agreement/views/fsm_order_view.xml b/fieldservice_agreement/views/fsm_order_view.xml index b6fe7d95a2..15ec36a8de 100644 --- a/fieldservice_agreement/views/fsm_order_view.xml +++ b/fieldservice_agreement/views/fsm_order_view.xml @@ -9,7 +9,7 @@ fsm.order - + From f587ffcee3d01004ae607fe2ab1fa512f026a65b Mon Sep 17 00:00:00 2001 From: osi-scampbell Date: Tue, 4 Dec 2018 14:51:49 -0700 Subject: [PATCH 03/41] [ADD] fieldservice_skill [UPD] README.rst --- fieldservice_agreement/README.rst | 6 +++--- fieldservice_agreement/static/description/index.html | 6 +++--- fieldservice_agreement/views/agreement_view.xml | 3 ++- fieldservice_agreement/views/fsm_order_view.xml | 3 ++- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/fieldservice_agreement/README.rst b/fieldservice_agreement/README.rst index 1c1acd5c5d..e11cd580b9 100644 --- a/fieldservice_agreement/README.rst +++ b/fieldservice_agreement/README.rst @@ -1,6 +1,6 @@ -============== -FSM Agreements -============== +========================== +Field Service - Agreements +========================== .. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! diff --git a/fieldservice_agreement/static/description/index.html b/fieldservice_agreement/static/description/index.html index 5da62f8b38..43f04c8751 100644 --- a/fieldservice_agreement/static/description/index.html +++ b/fieldservice_agreement/static/description/index.html @@ -4,7 +4,7 @@ -FSM Agreements +Field Service - Agreements -
-

FSM Agreements

+
+

Field Service - Agreements

- + agreement.form.fsm.order.view agreement @@ -16,4 +16,5 @@
+ diff --git a/fieldservice_agreement/views/fsm_order_view.xml b/fieldservice_agreement/views/fsm_order_view.xml index 15ec36a8de..566474759d 100644 --- a/fieldservice_agreement/views/fsm_order_view.xml +++ b/fieldservice_agreement/views/fsm_order_view.xml @@ -4,7 +4,7 @@ License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). --> - + fsm.order.agreement.form fsm.order @@ -14,4 +14,5 @@ + From 776244f1d1795c98f37135c49c2a03d7101bb48d Mon Sep 17 00:00:00 2001 From: Sandip Mangukiya Date: Thu, 27 Dec 2018 20:22:51 +0530 Subject: [PATCH 04/41] 11.0 imp fieldservice_agreement (#76) * [IMP] fieldservice_agreement [UPD] README.rst --- fieldservice_agreement/README.rst | 9 ++++++--- fieldservice_agreement/__manifest__.py | 1 + fieldservice_agreement/models/fsm_order.py | 2 ++ fieldservice_agreement/readme/CONTRIBUTORS.rst | 1 + fieldservice_agreement/readme/USAGE.rst | 3 +-- .../static/description/index.html | 6 +++--- fieldservice_agreement/views/agreement_view.xml | 7 +++++-- fieldservice_agreement/views/fsm_order_view.xml | 15 +++++++++++++++ 8 files changed, 34 insertions(+), 10 deletions(-) diff --git a/fieldservice_agreement/README.rst b/fieldservice_agreement/README.rst index e11cd580b9..07e81e061c 100644 --- a/fieldservice_agreement/README.rst +++ b/fieldservice_agreement/README.rst @@ -47,8 +47,7 @@ To use this module: * Select or create a field service order and set the agreement * Go to Agreement > Agreements * Open the previous agreement -* Click on the smart button "Service Orders" to see the list of related field - service orders +* Click on the smart button "Service Orders" to see the list of related field service orders Bug Tracker =========== @@ -72,6 +71,7 @@ Contributors ~~~~~~~~~~~~ * Bhavesh Odedra +* Sandip Mangukiya Other credits ~~~~~~~~~~~~~ @@ -99,10 +99,13 @@ promote its widespread use. .. |maintainer-bodedra| image:: https://github.com/bodedra.png?size=40px :target: https://github.com/bodedra :alt: bodedra +.. |maintainer-smangukiya| image:: https://github.com/smangukiya.png?size=40px + :target: https://github.com/smangukiya + :alt: smangukiya Current `maintainers `__: -|maintainer-max3903| |maintainer-bodedra| +|maintainer-max3903| |maintainer-bodedra| |maintainer-smangukiya| This module is part of the `OCA/field-service `_ project on GitHub. diff --git a/fieldservice_agreement/__manifest__.py b/fieldservice_agreement/__manifest__.py index 31c919f483..7ec7aa3d22 100644 --- a/fieldservice_agreement/__manifest__.py +++ b/fieldservice_agreement/__manifest__.py @@ -22,5 +22,6 @@ "maintainers": [ "max3903", "bodedra", + "smangukiya", ], } diff --git a/fieldservice_agreement/models/fsm_order.py b/fieldservice_agreement/models/fsm_order.py index 88c923cd1b..a0013547fb 100644 --- a/fieldservice_agreement/models/fsm_order.py +++ b/fieldservice_agreement/models/fsm_order.py @@ -10,3 +10,5 @@ class FSMOrder(geo_model.GeoModel): _inherit = 'fsm.order' agreement_id = fields.Many2one('agreement', string='Agreement') + serviceprofile_id = fields.Many2one('agreement.serviceprofile', + 'Service Profile') diff --git a/fieldservice_agreement/readme/CONTRIBUTORS.rst b/fieldservice_agreement/readme/CONTRIBUTORS.rst index 567f85bd69..c59d5bd42c 100644 --- a/fieldservice_agreement/readme/CONTRIBUTORS.rst +++ b/fieldservice_agreement/readme/CONTRIBUTORS.rst @@ -1 +1,2 @@ * Bhavesh Odedra +* Sandip Mangukiya diff --git a/fieldservice_agreement/readme/USAGE.rst b/fieldservice_agreement/readme/USAGE.rst index 66cebd33d1..13f061ff60 100644 --- a/fieldservice_agreement/readme/USAGE.rst +++ b/fieldservice_agreement/readme/USAGE.rst @@ -4,5 +4,4 @@ To use this module: * Select or create a field service order and set the agreement * Go to Agreement > Agreements * Open the previous agreement -* Click on the smart button "Service Orders" to see the list of related field - service orders +* Click on the smart button "Service Orders" to see the list of related field service orders diff --git a/fieldservice_agreement/static/description/index.html b/fieldservice_agreement/static/description/index.html index 43f04c8751..d867d6160d 100644 --- a/fieldservice_agreement/static/description/index.html +++ b/fieldservice_agreement/static/description/index.html @@ -396,8 +396,7 @@

Usage

  • Select or create a field service order and set the agreement
  • Go to Agreement > Agreements
  • Open the previous agreement
  • -
  • Click on the smart button “Service Orders” to see the list of related field -service orders
  • +
  • Click on the smart button “Service Orders” to see the list of related field service orders
  • @@ -420,6 +419,7 @@

    Authors

    Contributors

    @@ -437,7 +437,7 @@

    Maintainers

    mission is to support the collaborative development of Odoo features and promote its widespread use.

    Current maintainers:

    -

    max3903 bodedra

    +

    max3903 bodedra smangukiya

    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_agreement/views/agreement_view.xml b/fieldservice_agreement/views/agreement_view.xml index eaa5b7c3c4..c8842d4368 100644 --- a/fieldservice_agreement/views/agreement_view.xml +++ b/fieldservice_agreement/views/agreement_view.xml @@ -10,8 +10,11 @@
    -
    diff --git a/fieldservice_agreement/views/fsm_order_view.xml b/fieldservice_agreement/views/fsm_order_view.xml index 566474759d..c103b5ab16 100644 --- a/fieldservice_agreement/views/fsm_order_view.xml +++ b/fieldservice_agreement/views/fsm_order_view.xml @@ -11,8 +11,23 @@ + + + + fsm.order.select.agreement + fsm.order + + + + + + + + From 3a7bbe0315da2d4203c2371757f20545b63c32de Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 27 Dec 2018 17:12:29 -0600 Subject: [PATCH 05/41] [IMP] Icon --- fieldservice_agreement/views/agreement_view.xml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/fieldservice_agreement/views/agreement_view.xml b/fieldservice_agreement/views/agreement_view.xml index c8842d4368..973956b574 100644 --- a/fieldservice_agreement/views/agreement_view.xml +++ b/fieldservice_agreement/views/agreement_view.xml @@ -1,7 +1,5 @@ - @@ -11,7 +9,7 @@
    diff --git a/fieldservice_agreement/views/fsm_order_view.xml b/fieldservice_agreement/views/fsm_order_view.xml index c103b5ab16..e948512ac6 100644 --- a/fieldservice_agreement/views/fsm_order_view.xml +++ b/fieldservice_agreement/views/fsm_order_view.xml @@ -9,11 +9,11 @@ fsm.order - + - + From d4429a0caedaa39b57cd731d19006535650f5e0c Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 3 Jan 2019 17:37:46 -0600 Subject: [PATCH 07/41] [IMP] Filtering --- fieldservice_agreement/views/fsm_order_view.xml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/fieldservice_agreement/views/fsm_order_view.xml b/fieldservice_agreement/views/fsm_order_view.xml index e948512ac6..f6cd16558c 100644 --- a/fieldservice_agreement/views/fsm_order_view.xml +++ b/fieldservice_agreement/views/fsm_order_view.xml @@ -1,7 +1,5 @@ - @@ -10,7 +8,8 @@ - + @@ -25,7 +24,7 @@ + context="{'group_by': 'serviceprofile_id'}"/> From 70799a5a6d3d70d19297f9b4288d590ddaedeb8c Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 31 Jan 2019 17:17:54 -0600 Subject: [PATCH 08/41] [IMP] fieldservice_agreement --- fieldservice_agreement/views/fsm_order_view.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fieldservice_agreement/views/fsm_order_view.xml b/fieldservice_agreement/views/fsm_order_view.xml index f6cd16558c..60f94a8314 100644 --- a/fieldservice_agreement/views/fsm_order_view.xml +++ b/fieldservice_agreement/views/fsm_order_view.xml @@ -7,12 +7,12 @@ fsm.order - + - + From 35c3c67dc8e1ea29a0280f74c9072046aa5b20b8 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Fri, 8 Feb 2019 00:10:04 -0600 Subject: [PATCH 09/41] [ADD] Merge fieldservice_equipment_agreement --- fieldservice_agreement/__manifest__.py | 39 ++++++++-------- fieldservice_agreement/models/__init__.py | 7 ++- fieldservice_agreement/models/agreement.py | 33 +++++++++++++- .../models/fsm_equipment.py | 12 +++++ .../views/agreement_view.xml | 34 ++++++++++++-- .../views/fsm_equipment_view.xml | 45 +++++++++++++++++++ 6 files changed, 145 insertions(+), 25 deletions(-) create mode 100644 fieldservice_agreement/models/fsm_equipment.py create mode 100644 fieldservice_agreement/views/fsm_equipment_view.xml diff --git a/fieldservice_agreement/__manifest__.py b/fieldservice_agreement/__manifest__.py index 7ec7aa3d22..538e914a0b 100644 --- a/fieldservice_agreement/__manifest__.py +++ b/fieldservice_agreement/__manifest__.py @@ -2,26 +2,27 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { - "name": "Field Service - Agreements", - "summary": "Manage FSM Agreements", - "author": "Open Source Integrators, " - "Odoo Community Association (OCA)", - "website": "https://github.com/OCA/field-service", - "category": "Field Service", - "license": "AGPL-3", - "version": "11.0.1.0.0", - "depends": [ - "fieldservice", - "agreement", + 'name': 'Field Service - Agreements', + 'summary': 'Manage FSM Agreements', + 'author': 'Open Source Integrators, ' + 'Odoo Community Association (OCA)', + 'website': 'https://github.com/OCA/field-service', + 'category': 'Field Service', + 'license': 'AGPL-3', + 'version': '11.0.1.0.0', + 'depends': [ + 'fieldservice', + 'agreement', ], - "data": [ - "views/agreement_view.xml", - "views/fsm_order_view.xml", + 'data': [ + 'views/fsm_order_view.xml', + 'views/fsm_equipment_view.xml', + 'views/agreement_view.xml', ], - "development_status": "Beta", - "maintainers": [ - "max3903", - "bodedra", - "smangukiya", + 'development_status': 'Beta', + 'maintainers': [ + 'max3903', + 'bodedra', + 'smangukiya', ], } diff --git a/fieldservice_agreement/models/__init__.py b/fieldservice_agreement/models/__init__.py index a8787cb0a8..07d228d784 100644 --- a/fieldservice_agreement/models/__init__.py +++ b/fieldservice_agreement/models/__init__.py @@ -1,4 +1,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from . import fsm_order -from . import agreement +from . import ( + agreement, + fsm_equipment, + fsm_order, +) diff --git a/fieldservice_agreement/models/agreement.py b/fieldservice_agreement/models/agreement.py index 2cbd621673..308edb96d2 100644 --- a/fieldservice_agreement/models/agreement.py +++ b/fieldservice_agreement/models/agreement.py @@ -11,6 +11,9 @@ class Agreement(models.Model): compute='_compute_service_order_count', string='# Service Orders' ) + equipment_count = fields.Integer('# Equipments', + compute='_compute_equipment_count') + fsm_location_id = fields.Many2one('fsm.location', string="FSM Location") @api.multi def _compute_service_order_count(self): @@ -26,7 +29,7 @@ def action_view_service_order(self): [('agreement_id', '=', agreement.id)]) action = self.env.ref( 'fieldservice.action_fsm_operation_order').read()[0] - if len(fsm_order_ids) > 1: + if len(fsm_order_ids) == 0 or len(fsm_order_ids) > 1: action['domain'] = [('id', 'in', fsm_order_ids.ids)] elif len(fsm_order_ids) == 1: action['views'] = [( @@ -36,3 +39,31 @@ def action_view_service_order(self): else: action = {'type': 'ir.actions.act_window_close'} return action + + @api.multi + def _compute_equipment_count(self): + data = self.env['fsm.equipment'].read_group( + [('agreement_id', 'in', self.ids)], + ['agreement_id'], ['agreement_id']) + count_data = dict((item['agreement_id'][0], + item['agreement_id_count']) for item in data) + for agreement in self: + agreement.equipment_count = count_data.get(agreement.id, 0) + + @api.multi + def action_view_fsm_equipment(self): + for agreement in self: + equipment_ids = self.env['fsm.equipment'].search( + [('agreement_id', '=', agreement.id)]) + action = self.env.ref( + 'fieldservice.action_fsm_equipment').read()[0] + if len(equipment_ids) == 0 or len(equipment_ids) > 1: + action['domain'] = [('id', 'in', equipment_ids.ids)] + elif len(equipment_ids) == 1: + action['views'] = [( + self.env.ref('fieldservice.fsm_equipment_form').id, + 'form')] + action['res_id'] = equipment_ids.ids[0] + else: + action = {'type': 'ir.actions.act_window_close'} + return action diff --git a/fieldservice_agreement/models/fsm_equipment.py b/fieldservice_agreement/models/fsm_equipment.py new file mode 100644 index 0000000000..235b538ab1 --- /dev/null +++ b/fieldservice_agreement/models/fsm_equipment.py @@ -0,0 +1,12 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class FSMEquipment(models.Model): + _inherit = 'fsm.equipment' + + agreement_id = fields.Many2one('agreement', string='Agreement') + serviceprofile_id = fields.Many2one('agreement.serviceprofile', + 'Service Profile') diff --git a/fieldservice_agreement/views/agreement_view.xml b/fieldservice_agreement/views/agreement_view.xml index 01b8210b3e..b997790a76 100644 --- a/fieldservice_agreement/views/agreement_view.xml +++ b/fieldservice_agreement/views/agreement_view.xml @@ -8,12 +8,40 @@
    - +
    + + + + + + + + + +
    diff --git a/fieldservice_agreement/views/fsm_equipment_view.xml b/fieldservice_agreement/views/fsm_equipment_view.xml new file mode 100644 index 0000000000..f52daa0171 --- /dev/null +++ b/fieldservice_agreement/views/fsm_equipment_view.xml @@ -0,0 +1,45 @@ + + + + + + fsm.equipment.agreement.form + fsm.equipment + + + + + + + + + + + + + + + + + + + fsm.equipment.select.agreement + fsm.equipment + + + + + + + + + + {'default_location_id': context.get('location_id', False), + 'default_agreement_id': context.get('agreement_id', False)} + + + From b5e70d2eadc8ed9d948940ac5fbb89e3c059263a Mon Sep 17 00:00:00 2001 From: scampbell Date: Fri, 22 Feb 2019 09:37:03 -0800 Subject: [PATCH 10/41] [IMP] Change Kanban Date --- .../views/agreement_view.xml | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/fieldservice_agreement/views/agreement_view.xml b/fieldservice_agreement/views/agreement_view.xml index b997790a76..de799b206e 100644 --- a/fieldservice_agreement/views/agreement_view.xml +++ b/fieldservice_agreement/views/agreement_view.xml @@ -1,6 +1,5 @@ - agreement.form.fsm.order.view @@ -45,4 +44,34 @@
    + + agreement.search.fields + agreement + search + + + + + + + + + + + + + + agreement.end.date.kanban + agreement + + + + + + + oe_kanban_text_red + + + +
    From f6b8526c2d239ef3070c0d038a8fe976fe97fe09 Mon Sep 17 00:00:00 2001 From: Sandip Mangukiya Date: Mon, 25 Feb 2019 01:18:03 -0800 Subject: [PATCH 11/41] [FIX]1. message_follower_ids needs to be inherited in object first 2. move views to agreement module 3. improve location heirarchy name construction --- .../views/agreement_view.xml | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/fieldservice_agreement/views/agreement_view.xml b/fieldservice_agreement/views/agreement_view.xml index de799b206e..8401be21ab 100644 --- a/fieldservice_agreement/views/agreement_view.xml +++ b/fieldservice_agreement/views/agreement_view.xml @@ -51,27 +51,9 @@ - - - - - - agreement.end.date.kanban - agreement - - - - - - - oe_kanban_text_red - - - - From 8b8f05fdfec916c64e3c6c1c116c9839852400a4 Mon Sep 17 00:00:00 2001 From: scampbell Date: Fri, 8 Mar 2019 13:18:05 -0800 Subject: [PATCH 12/41] [IMP] Fieldservice Account Bug Fix --- .../views/agreement_view.xml | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/fieldservice_agreement/views/agreement_view.xml b/fieldservice_agreement/views/agreement_view.xml index 8401be21ab..634223b00f 100644 --- a/fieldservice_agreement/views/agreement_view.xml +++ b/fieldservice_agreement/views/agreement_view.xml @@ -56,4 +56,24 @@ + + agreement.form.context.fix + agreement + form + + + + + + + + + + + + + + + + From cce76abe194f0ac3fcea37ffd4565d340bc86c18 Mon Sep 17 00:00:00 2001 From: Murtuza Saleh Date: Thu, 4 Apr 2019 16:26:14 +0530 Subject: [PATCH 13/41] [MIG][WIP][12.0] fieldservice_agreement [UPD] README.rst --- fieldservice_agreement/README.rst | 11 ++++---- fieldservice_agreement/__manifest__.py | 5 ++-- fieldservice_agreement/models/agreement.py | 27 +++++++------------ fieldservice_agreement/models/fsm_order.py | 6 ++--- .../readme/CONTRIBUTORS.rst | 1 + .../static/description/index.html | 7 ++--- .../views/agreement_view.xml | 8 +++--- .../views/fsm_equipment_view.xml | 4 +-- .../views/fsm_order_view.xml | 6 ++--- 9 files changed, 34 insertions(+), 41 deletions(-) diff --git a/fieldservice_agreement/README.rst b/fieldservice_agreement/README.rst index 07e81e061c..792764660e 100644 --- a/fieldservice_agreement/README.rst +++ b/fieldservice_agreement/README.rst @@ -14,13 +14,13 @@ Field Service - Agreements :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/11.0/fieldservice_agreement + :target: https://github.com/OCA/field-service/tree/12.0/fieldservice_agreement :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-11-0/field-service-11-0-fieldservice_agreement + :target: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_agreement :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/264/11.0 + :target: https://runbot.odoo-community.org/runbot/264/12.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -55,7 +55,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 smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -72,6 +72,7 @@ Contributors * Bhavesh Odedra * Sandip Mangukiya +* Serpent Consulting Services Pvt. Ltd. Other credits ~~~~~~~~~~~~~ @@ -107,6 +108,6 @@ Current `maintainers `__: |maintainer-max3903| |maintainer-bodedra| |maintainer-smangukiya| -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_agreement/__manifest__.py b/fieldservice_agreement/__manifest__.py index 538e914a0b..ab8687d569 100644 --- a/fieldservice_agreement/__manifest__.py +++ b/fieldservice_agreement/__manifest__.py @@ -9,16 +9,17 @@ 'website': 'https://github.com/OCA/field-service', 'category': 'Field Service', 'license': 'AGPL-3', - 'version': '11.0.1.0.0', + 'version': '12.0.1.0.0', 'depends': [ 'fieldservice', - 'agreement', + 'agreement_serviceprofile', ], 'data': [ 'views/fsm_order_view.xml', 'views/fsm_equipment_view.xml', 'views/agreement_view.xml', ], + 'installable': True, 'development_status': 'Beta', 'maintainers': [ 'max3903', diff --git a/fieldservice_agreement/models/agreement.py b/fieldservice_agreement/models/agreement.py index 308edb96d2..7aef78f9d6 100644 --- a/fieldservice_agreement/models/agreement.py +++ b/fieldservice_agreement/models/agreement.py @@ -1,7 +1,7 @@ # Copyright (C) 2018 - TODAY, Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import fields, models, api +from odoo import api, fields, models class Agreement(models.Model): @@ -18,9 +18,8 @@ class Agreement(models.Model): @api.multi def _compute_service_order_count(self): for agreement in self: - res = self.env['fsm.order'].search_count( + agreement.service_order_count = self.env['fsm.order'].search_count( [('agreement_id', '=', agreement.id)]) - agreement.service_order_count = res or 0 @api.multi def action_view_service_order(self): @@ -29,26 +28,20 @@ def action_view_service_order(self): [('agreement_id', '=', agreement.id)]) action = self.env.ref( 'fieldservice.action_fsm_operation_order').read()[0] - if len(fsm_order_ids) == 0 or len(fsm_order_ids) > 1: - action['domain'] = [('id', 'in', fsm_order_ids.ids)] - elif len(fsm_order_ids) == 1: + if len(fsm_order_ids) == 1: action['views'] = [( self.env.ref('fieldservice.fsm_order_form').id, 'form')] action['res_id'] = fsm_order_ids.ids[0] else: - action = {'type': 'ir.actions.act_window_close'} + action['domain'] = [('id', 'in', fsm_order_ids.ids)] return action @api.multi def _compute_equipment_count(self): - data = self.env['fsm.equipment'].read_group( - [('agreement_id', 'in', self.ids)], - ['agreement_id'], ['agreement_id']) - count_data = dict((item['agreement_id'][0], - item['agreement_id_count']) for item in data) for agreement in self: - agreement.equipment_count = count_data.get(agreement.id, 0) + agreement.equipment_count = self.env['fsm.equipment'].search_count( + [('agreement_id', 'in', agreement.ids)]) @api.multi def action_view_fsm_equipment(self): @@ -57,13 +50,11 @@ def action_view_fsm_equipment(self): [('agreement_id', '=', agreement.id)]) action = self.env.ref( 'fieldservice.action_fsm_equipment').read()[0] - if len(equipment_ids) == 0 or len(equipment_ids) > 1: - action['domain'] = [('id', 'in', equipment_ids.ids)] - elif len(equipment_ids) == 1: + if len(equipment_ids) == 1: action['views'] = [( - self.env.ref('fieldservice.fsm_equipment_form').id, + self.env.ref('fieldservice.fsm_equipment_form_view').id, 'form')] action['res_id'] = equipment_ids.ids[0] else: - action = {'type': 'ir.actions.act_window_close'} + action['domain'] = [('id', 'in', equipment_ids.ids)] return action diff --git a/fieldservice_agreement/models/fsm_order.py b/fieldservice_agreement/models/fsm_order.py index a0013547fb..20d5f22470 100644 --- a/fieldservice_agreement/models/fsm_order.py +++ b/fieldservice_agreement/models/fsm_order.py @@ -1,12 +1,10 @@ # Copyright (C) 2018 - TODAY, Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import fields +from odoo import fields, models -from odoo.addons.base_geoengine import geo_model - -class FSMOrder(geo_model.GeoModel): +class FSMOrder(models.Model): _inherit = 'fsm.order' agreement_id = fields.Many2one('agreement', string='Agreement') diff --git a/fieldservice_agreement/readme/CONTRIBUTORS.rst b/fieldservice_agreement/readme/CONTRIBUTORS.rst index c59d5bd42c..ffd570ce46 100644 --- a/fieldservice_agreement/readme/CONTRIBUTORS.rst +++ b/fieldservice_agreement/readme/CONTRIBUTORS.rst @@ -1,2 +1,3 @@ * Bhavesh Odedra * Sandip Mangukiya +* Serpent Consulting Services Pvt. Ltd. diff --git a/fieldservice_agreement/static/description/index.html b/fieldservice_agreement/static/description/index.html index d867d6160d..a4a15bde43 100644 --- a/fieldservice_agreement/static/description/index.html +++ b/fieldservice_agreement/static/description/index.html @@ -367,7 +367,7 @@

    Field Service - Agreements

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

    Beta License: AGPL-3 OCA/field-service Translate me on Weblate Try me on Runbot

    +

    Beta License: AGPL-3 OCA/field-service Translate me on Weblate Try me on Runbot

    Odoo Agreement App does not provide an easy way to access field service orders related to an agreement. Some organizations needs to have a quick access to field service orders to track the performance of an agreement.

    @@ -404,7 +404,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 smashing it by providing a detailed and welcomed -feedback.

    +feedback.

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

    @@ -420,6 +420,7 @@

    Contributors

    @@ -438,7 +439,7 @@

    Maintainers

    promote its widespread use.

    Current maintainers:

    max3903 bodedra smangukiya

    -

    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_agreement/views/agreement_view.xml b/fieldservice_agreement/views/agreement_view.xml index 634223b00f..8c878bbafe 100644 --- a/fieldservice_agreement/views/agreement_view.xml +++ b/fieldservice_agreement/views/agreement_view.xml @@ -1,10 +1,10 @@ - + agreement.form.fsm.order.view agreement - +
    diff --git a/fieldservice_agreement/views/fsm_person.xml b/fieldservice_agreement/views/fsm_person.xml new file mode 100644 index 0000000000..8e44da2a6b --- /dev/null +++ b/fieldservice_agreement/views/fsm_person.xml @@ -0,0 +1,22 @@ + + + + + fsm.person.form + fsm.person + + +
    + +
    +
    +
    + +
    From 93616662272dfb7017069c3b35a60334d822f9ae Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Fri, 24 May 2019 18:42:50 -0500 Subject: [PATCH 16/41] [IMP] fieldservice_agreement --- fieldservice_agreement/views/agreement_view.xml | 2 +- fieldservice_agreement/views/fsm_equipment_view.xml | 8 +------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/fieldservice_agreement/views/agreement_view.xml b/fieldservice_agreement/views/agreement_view.xml index 8c878bbafe..09f7ff1813 100644 --- a/fieldservice_agreement/views/agreement_view.xml +++ b/fieldservice_agreement/views/agreement_view.xml @@ -19,7 +19,7 @@ type="object" class="oe_stat_button" icon="fa-laptop" - context="{'agreement_id': active_id}" + context="{'default_agreement_id': active_id}" groups="fieldservice.group_fsm_equipment">
    diff --git a/fieldservice_agreement/views/fsm_equipment_view.xml b/fieldservice_agreement/views/fsm_equipment_view.xml index b26169246e..ac3f1ecf09 100644 --- a/fieldservice_agreement/views/fsm_equipment_view.xml +++ b/fieldservice_agreement/views/fsm_equipment_view.xml @@ -31,15 +31,9 @@ + context="{'group_by': 'serviceprofile_id'}"/> - - {'default_location_id': context.get('location_id', False), - 'default_agreement_id': context.get('agreement_id', False)} - - From 8da579e3b7c222dad502581f79e59c528018f9b6 Mon Sep 17 00:00:00 2001 From: Steve Campbell Date: Tue, 11 Jun 2019 06:01:56 -0700 Subject: [PATCH 17/41] [FIX] fieldservice_agreement (#232) --- fieldservice_agreement/__manifest__.py | 3 ++- fieldservice_agreement/models/__init__.py | 3 ++- fieldservice_agreement/models/fsm_location.py | 26 +++++++++++++++++++ fieldservice_agreement/views/fsm_location.xml | 24 +++++++++++++++++ 4 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 fieldservice_agreement/models/fsm_location.py create mode 100644 fieldservice_agreement/views/fsm_location.xml diff --git a/fieldservice_agreement/__manifest__.py b/fieldservice_agreement/__manifest__.py index 71ec3aa804..9fa96e4f9d 100644 --- a/fieldservice_agreement/__manifest__.py +++ b/fieldservice_agreement/__manifest__.py @@ -18,7 +18,8 @@ 'views/fsm_order_view.xml', 'views/fsm_equipment_view.xml', 'views/agreement_view.xml', - 'views/fsm_person.xml' + 'views/fsm_person.xml', + 'views/fsm_location.xml' ], 'installable': True, 'development_status': 'Beta', diff --git a/fieldservice_agreement/models/__init__.py b/fieldservice_agreement/models/__init__.py index fe35aa88a5..98a54f21cc 100644 --- a/fieldservice_agreement/models/__init__.py +++ b/fieldservice_agreement/models/__init__.py @@ -3,6 +3,7 @@ from . import ( agreement, fsm_equipment, + fsm_location, fsm_order, - fsm_person + fsm_person, ) diff --git a/fieldservice_agreement/models/fsm_location.py b/fieldservice_agreement/models/fsm_location.py new file mode 100644 index 0000000000..d8127c93f4 --- /dev/null +++ b/fieldservice_agreement/models/fsm_location.py @@ -0,0 +1,26 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class FSMLocation(models.Model): + _inherit = 'fsm.location' + + serviceprofile_ids = fields.Many2many('agreement.serviceprofile', + string="Service Profiles", + compute='_compute_service_ids') + + @api.multi + def _compute_service_ids(self): + for loc in self: + agreements = self.env['agreement'].\ + search([('fsm_location_id', '=', self.name)]) + ids = [] + for agree in agreements: + servpros = self.env['agreement.serviceprofile'].\ + search([('agreement_id', '=', agree.id)]) + for ser in servpros: + if ser.id not in ids: + ids.append(ser.id) + self.serviceprofile_ids = ids diff --git a/fieldservice_agreement/views/fsm_location.xml b/fieldservice_agreement/views/fsm_location.xml new file mode 100644 index 0000000000..e657aa1033 --- /dev/null +++ b/fieldservice_agreement/views/fsm_location.xml @@ -0,0 +1,24 @@ + + + + + fsm.location.agreement.serviceprofile + fsm.location + + + + + + + + + + + + + + + + + From 7a8f89d1ff9bd8012ea5576f373604492549f521 Mon Sep 17 00:00:00 2001 From: Steve Campbell Date: Tue, 18 Jun 2019 06:18:51 -0700 Subject: [PATCH 18/41] [FIX] fieldservice_agreement: FSM Location Agreement Bug (#237) [UPD] README.rst --- fieldservice_agreement/models/fsm_location.py | 4 ++-- fieldservice_agreement/static/description/index.html | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/fieldservice_agreement/models/fsm_location.py b/fieldservice_agreement/models/fsm_location.py index d8127c93f4..7e7c258fe5 100644 --- a/fieldservice_agreement/models/fsm_location.py +++ b/fieldservice_agreement/models/fsm_location.py @@ -15,7 +15,7 @@ class FSMLocation(models.Model): def _compute_service_ids(self): for loc in self: agreements = self.env['agreement'].\ - search([('fsm_location_id', '=', self.name)]) + search([('fsm_location_id', '=', loc.id)]) ids = [] for agree in agreements: servpros = self.env['agreement.serviceprofile'].\ @@ -23,4 +23,4 @@ def _compute_service_ids(self): for ser in servpros: if ser.id not in ids: ids.append(ser.id) - self.serviceprofile_ids = ids + loc.serviceprofile_ids = ids diff --git a/fieldservice_agreement/static/description/index.html b/fieldservice_agreement/static/description/index.html index 5ee30cb9cc..0debdbe71e 100644 --- a/fieldservice_agreement/static/description/index.html +++ b/fieldservice_agreement/static/description/index.html @@ -3,7 +3,7 @@ - + Field Service - Agreements + + +
    +

    Field Service - Agreements Service Profile

    + + +

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

    +

    Glue module for Field Service Agreement and Service Profile

    +

    Table of contents

    + +
    +

    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

    +
      +
    • Open Source Integrators
    • +
    +
    +
    +

    Contributors

    + +
    +
    +

    Other credits

    +

    The development of this module has been financially supported by:

    +
      +
    • Open Source Integrators
    • +
    +
    +
    +

    Maintainers

    +

    This module is maintained by the OCA.

    +Odoo Community Association +

    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.

    +

    Current maintainers:

    +

    max3903 bodedra smangukiya osi-scampbell patrickrwilson

    +

    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_agreement_serviceprofile/views/fsm_equipment_view.xml b/fieldservice_agreement_serviceprofile/views/fsm_equipment_view.xml new file mode 100644 index 0000000000..66cab05ebc --- /dev/null +++ b/fieldservice_agreement_serviceprofile/views/fsm_equipment_view.xml @@ -0,0 +1,38 @@ + + + + + fsm.equipment.agreement.form + fsm.equipment + + + + + + + + + + + fsm.equipment.select.agreement + fsm.equipment + + + + + + + + + diff --git a/fieldservice_agreement_serviceprofile/views/fsm_location.xml b/fieldservice_agreement_serviceprofile/views/fsm_location.xml new file mode 100644 index 0000000000..9719ae2b0c --- /dev/null +++ b/fieldservice_agreement_serviceprofile/views/fsm_location.xml @@ -0,0 +1,22 @@ + + + + fsm.location.agreement.serviceprofile + fsm.location + + + + + + + + + + + + + + + + + diff --git a/fieldservice_agreement_serviceprofile/views/fsm_order_view.xml b/fieldservice_agreement_serviceprofile/views/fsm_order_view.xml new file mode 100644 index 0000000000..8b16fcc982 --- /dev/null +++ b/fieldservice_agreement_serviceprofile/views/fsm_order_view.xml @@ -0,0 +1,38 @@ + + + + + fsm.order.agreement.form + fsm.order + + + + + + + + + + + fsm.order.select.agreement + fsm.order + + + + + + + + + From 4dc8a54b2a4ef9d5540e3f91d8cf748987ceba21 Mon Sep 17 00:00:00 2001 From: ilo Date: Mon, 9 Sep 2024 16:06:18 -0300 Subject: [PATCH 41/41] Add dependency file for tests purposes --- test-requirements.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 test-requirements.txt diff --git a/test-requirements.txt b/test-requirements.txt new file mode 100644 index 0000000000..55fe37c405 --- /dev/null +++ b/test-requirements.txt @@ -0,0 +1,3 @@ +odoo-addon-agreement @ git+https://github.com/OCA/agreement.git@refs/pull/35/head#subdirectory=agreement +odoo-addon-agreement_serviceprofile @ git+https://github.com/OCA/agreement.git@refs/pull/39/head#subdirectory=agreement_serviceprofile +odoo-addon-agreement_legal @ git+https://github.com/OCA/agreement.git@refs/pull/40/head#subdirectory=agreement_legal