From bad75f252c05a76c9b55b9f5c05eff9f20a3abf4 Mon Sep 17 00:00:00 2001 From: BojanOD Date: Mon, 2 Jan 2023 14:51:50 +0100 Subject: [PATCH 1/3] [14.0][ADD] Helpdesk Stage Server Action --- helpdesk_mgmt_stage_server_action/README.md | 0 helpdesk_mgmt_stage_server_action/__init__.py | 4 + .../__manifest__.py | 14 +++ .../models/__init__.py | 5 + .../models/helpdesk_ticket.py | 40 ++++++++ .../models/helpdesk_ticket_stage.py | 17 ++++ .../readme/CONFIGURE.rst | 3 + .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 2 + .../readme/USAGE.rst | 4 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../tests/__init__.py | 1 + .../tests/test_helpdesk_ticket_stage.py | 96 ++++++++++++++++++ .../views/helpdesk_ticket_stage.xml | 13 +++ .../addons/helpdesk_mgmt_stage_server_action | 1 + .../setup.py | 6 ++ 16 files changed, 207 insertions(+) create mode 100644 helpdesk_mgmt_stage_server_action/README.md create mode 100644 helpdesk_mgmt_stage_server_action/__init__.py create mode 100644 helpdesk_mgmt_stage_server_action/__manifest__.py create mode 100644 helpdesk_mgmt_stage_server_action/models/__init__.py create mode 100644 helpdesk_mgmt_stage_server_action/models/helpdesk_ticket.py create mode 100644 helpdesk_mgmt_stage_server_action/models/helpdesk_ticket_stage.py create mode 100644 helpdesk_mgmt_stage_server_action/readme/CONFIGURE.rst create mode 100644 helpdesk_mgmt_stage_server_action/readme/CONTRIBUTORS.rst create mode 100644 helpdesk_mgmt_stage_server_action/readme/DESCRIPTION.rst create mode 100644 helpdesk_mgmt_stage_server_action/readme/USAGE.rst create mode 100644 helpdesk_mgmt_stage_server_action/static/description/icon.png create mode 100644 helpdesk_mgmt_stage_server_action/tests/__init__.py create mode 100644 helpdesk_mgmt_stage_server_action/tests/test_helpdesk_ticket_stage.py create mode 100644 helpdesk_mgmt_stage_server_action/views/helpdesk_ticket_stage.xml create mode 120000 setup/helpdesk_mgmt_stage_server_action/odoo/addons/helpdesk_mgmt_stage_server_action create mode 100644 setup/helpdesk_mgmt_stage_server_action/setup.py diff --git a/helpdesk_mgmt_stage_server_action/README.md b/helpdesk_mgmt_stage_server_action/README.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/helpdesk_mgmt_stage_server_action/__init__.py b/helpdesk_mgmt_stage_server_action/__init__.py new file mode 100644 index 0000000000..f575e55c77 --- /dev/null +++ b/helpdesk_mgmt_stage_server_action/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2023 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models diff --git a/helpdesk_mgmt_stage_server_action/__manifest__.py b/helpdesk_mgmt_stage_server_action/__manifest__.py new file mode 100644 index 0000000000..1ab25e76f1 --- /dev/null +++ b/helpdesk_mgmt_stage_server_action/__manifest__.py @@ -0,0 +1,14 @@ +# Copyright 2023 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +{ + "name": "Helpdesk Stage Server Action", + "summary": "Execute server actions when reaching a Helpdesk ticket stage", + "version": "14.0.1.0.0", + "category": "HelpDesk Service", + "author": "Camptocamp, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/helpdesk", + "depends": ["helpdesk_mgmt"], + "data": ["views/helpdesk_ticket_stage.xml"], + "installable": True, + "license": "AGPL-3", +} diff --git a/helpdesk_mgmt_stage_server_action/models/__init__.py b/helpdesk_mgmt_stage_server_action/models/__init__.py new file mode 100644 index 0000000000..ad81b3bf9e --- /dev/null +++ b/helpdesk_mgmt_stage_server_action/models/__init__.py @@ -0,0 +1,5 @@ +# Copyright 2023 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import helpdesk_ticket_stage +from . import helpdesk_ticket diff --git a/helpdesk_mgmt_stage_server_action/models/helpdesk_ticket.py b/helpdesk_mgmt_stage_server_action/models/helpdesk_ticket.py new file mode 100644 index 0000000000..20a113a1e1 --- /dev/null +++ b/helpdesk_mgmt_stage_server_action/models/helpdesk_ticket.py @@ -0,0 +1,40 @@ +# Copyright 2023 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, models + + +class HelpdeskTicket(models.Model): + _inherit = "helpdesk.ticket" + + @api.model_create_multi + def create(self, vals_list): + records = super().create(vals_list) + for record in records: + action = record.stage_id.action_id + if action: + context = { + "active_model": self._name, + "active_ids": [record.id], + } + action.with_context(**context).run() + return records + + def write(self, vals): + records = "stage_id" in vals and self.filtered( + lambda l: l.stage_id.id != vals.get("stage_id") + ) + if records: + res = super().write(vals) + action = ( + self.env["helpdesk.ticket.stage"].browse(vals["stage_id"]).action_id + ) + if action: + context = { + "active_model": self._name, + "active_ids": records.ids, + } + action.with_context(**context).run() + else: + res = super().write(vals) + return res diff --git a/helpdesk_mgmt_stage_server_action/models/helpdesk_ticket_stage.py b/helpdesk_mgmt_stage_server_action/models/helpdesk_ticket_stage.py new file mode 100644 index 0000000000..132ff841cc --- /dev/null +++ b/helpdesk_mgmt_stage_server_action/models/helpdesk_ticket_stage.py @@ -0,0 +1,17 @@ +# Copyright 2023 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class HelpdeskTicketStage(models.Model): + _inherit = "helpdesk.ticket.stage" + + action_id = fields.Many2one( + "ir.actions.server", + string="Server Action", + domain="[('model_id', '=', 'helpdesk.ticket')]", + help="The assigned action will be executed when a ticket is assigned from a " + "different stage to this stage, the context values that will be passed " + "to the action are the model name helpdesk.ticket and the ids of the tickets.", + ) diff --git a/helpdesk_mgmt_stage_server_action/readme/CONFIGURE.rst b/helpdesk_mgmt_stage_server_action/readme/CONFIGURE.rst new file mode 100644 index 0000000000..2564cbafde --- /dev/null +++ b/helpdesk_mgmt_stage_server_action/readme/CONFIGURE.rst @@ -0,0 +1,3 @@ +* Go to Helpdesk > Configuration > Stages +* Create or select a stage +* Select or create a server action diff --git a/helpdesk_mgmt_stage_server_action/readme/CONTRIBUTORS.rst b/helpdesk_mgmt_stage_server_action/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..7d1a526704 --- /dev/null +++ b/helpdesk_mgmt_stage_server_action/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Bojan Anchev diff --git a/helpdesk_mgmt_stage_server_action/readme/DESCRIPTION.rst b/helpdesk_mgmt_stage_server_action/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..dd79e13f93 --- /dev/null +++ b/helpdesk_mgmt_stage_server_action/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module allows you to execute server actions when a Helpdesk ticket enters a +specific stage. diff --git a/helpdesk_mgmt_stage_server_action/readme/USAGE.rst b/helpdesk_mgmt_stage_server_action/readme/USAGE.rst new file mode 100644 index 0000000000..76b4bf7f30 --- /dev/null +++ b/helpdesk_mgmt_stage_server_action/readme/USAGE.rst @@ -0,0 +1,4 @@ +* Go to Helpdesk +* Select or create a Helpdesk tickets +* Move it to the stage configured before to trigger the execution of the + server action diff --git a/helpdesk_mgmt_stage_server_action/static/description/icon.png b/helpdesk_mgmt_stage_server_action/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 zcmW++2RxMjAAjx~&dlBk9S+%}OXg)AGE&Cb*&}d0jUxM@u(PQx^-s)697TX`ehR4?GS^qbkof1cslKgkU)h65qZ9Oc=ml_0temigYLJfnz{IDzUf>bGs4N!v3=Z3jMq&A#7%rM5eQ#dc?k~! zVpnB`o+K7|Al`Q_U;eD$B zfJtP*jH`siUq~{KE)`jP2|#TUEFGRryE2`i0**z#*^6~AI|YzIWy$Cu#CSLW3q=GA z6`?GZymC;dCPk~rBS%eCb`5OLr;RUZ;D`}um=H)BfVIq%7VhiMr)_#G0N#zrNH|__ zc+blN2UAB0=617@>_u;MPHN;P;N#YoE=)R#i$k_`UAA>WWCcEVMh~L_ zj--gtp&|K1#58Yz*AHCTMziU1Jzt_jG0I@qAOHsk$2}yTmVkBp_eHuY$A9)>P6o~I z%aQ?!(GqeQ-Y+b0I(m9pwgi(IIZZzsbMv+9w{PFtd_<_(LA~0H(xz{=FhLB@(1&qHA5EJw1>>=%q2f&^X>IQ{!GJ4e9U z&KlB)z(84HmNgm2hg2C0>WM{E(DdPr+EeU_N@57;PC2&DmGFW_9kP&%?X4}+xWi)( z;)z%wI5>D4a*5XwD)P--sPkoY(a~WBw;E~AW`Yue4kFa^LM3X`8x|}ZUeMnqr}>kH zG%WWW>3ml$Yez?i%)2pbKPI7?5o?hydokgQyZsNEr{a|mLdt;X2TX(#B1j35xPnPW z*bMSSOauW>o;*=kO8ojw91VX!qoOQb)zHJ!odWB}d+*K?#sY_jqPdg{Sm2HdYzdEx zOGVPhVRTGPtv0o}RfVP;Nd(|CB)I;*t&QO8h zFfekr30S!-LHmV_Su-W+rEwYXJ^;6&3|L$mMC8*bQptyOo9;>Qb9Q9`ySe3%V$A*9 zeKEe+b0{#KWGp$F+tga)0RtI)nhMa-K@JS}2krK~n8vJ=Ngm?R!9G<~RyuU0d?nz# z-5EK$o(!F?hmX*2Yt6+coY`6jGbb7tF#6nHA zuKk=GGJ;ZwON1iAfG$E#Y7MnZVmrY|j0eVI(DN_MNFJmyZ|;w4tf@=CCDZ#5N_0K= z$;R~bbk?}TpfDjfB&aiQ$VA}s?P}xPERJG{kxk5~R`iRS(SK5d+Xs9swCozZISbnS zk!)I0>t=A<-^z(cmSFz3=jZ23u13X><0b)P)^1T_))Kr`e!-pb#q&J*Q`p+B6la%C zuVl&0duN<;uOsB3%T9Fp8t{ED108<+W(nOZd?gDnfNBC3>M8WE61$So|P zVvqH0SNtDTcsUdzaMDpT=Ty0pDHHNL@Z0w$Y`XO z2M-_r1S+GaH%pz#Uy0*w$Vdl=X=rQXEzO}d6J^R6zjM1u&c9vYLvLp?W7w(?np9x1 zE_0JSAJCPB%i7p*Wvg)pn5T`8k3-uR?*NT|J`eS#_#54p>!p(mLDvmc-3o0mX*mp_ zN*AeS<>#^-{S%W<*mz^!X$w_2dHWpcJ6^j64qFBft-o}o_Vx80o0>}Du;>kLts;$8 zC`7q$QI(dKYG`Wa8#wl@V4jVWBRGQ@1dr-hstpQL)Tl+aqVpGpbSfN>5i&QMXfiZ> zaA?T1VGe?rpQ@;+pkrVdd{klI&jVS@I5_iz!=UMpTsa~mBga?1r}aRBm1WS;TT*s0f0lY=JBl66Upy)-k4J}lh=P^8(SXk~0xW=T9v*B|gzIhN z>qsO7dFd~mgxAy4V?&)=5ieYq?zi?ZEoj)&2o)RLy=@hbCRcfT5jigwtQGE{L*8<@Yd{zg;CsL5mvzfDY}P-wos_6PfprFVaeqNE%h zKZhLtcQld;ZD+>=nqN~>GvROfueSzJD&BE*}XfU|H&(FssBqY=hPCt`d zH?@s2>I(|;fcW&YM6#V#!kUIP8$Nkdh0A(bEVj``-AAyYgwY~jB zT|I7Bf@%;7aL7Wf4dZ%VqF$eiaC38OV6oy3Z#TER2G+fOCd9Iaoy6aLYbPTN{XRPz z;U!V|vBf%H!}52L2gH_+j;`bTcQRXB+y9onc^wLm5wi3-Be}U>k_u>2Eg$=k!(l@I zcCg+flakT2Nej3i0yn+g+}%NYb?ta;R?(g5SnwsQ49U8Wng8d|{B+lyRcEDvR3+`O{zfmrmvFrL6acVP%yG98X zo&+VBg@px@i)%o?dG(`T;n*$S5*rnyiR#=wW}}GsAcfyQpE|>a{=$Hjg=-*_K;UtD z#z-)AXwSRY?OPefw^iI+ z)AXz#PfEjlwTes|_{sB?4(O@fg0AJ^g8gP}ex9Ucf*@_^J(s_5jJV}c)s$`Myn|Kd z$6>}#q^n{4vN@+Os$m7KV+`}c%4)4pv@06af4-x5#wj!KKb%caK{A&Y#Rfs z-po?Dcb1({W=6FKIUirH&(yg=*6aLCekcKwyfK^JN5{wcA3nhO(o}SK#!CINhI`-I z1)6&n7O&ZmyFMuNwvEic#IiOAwNkR=u5it{B9n2sAJV5pNhar=j5`*N!Na;c7g!l$ z3aYBqUkqqTJ=Re-;)s!EOeij=7SQZ3Hq}ZRds%IM*PtM$wV z@;rlc*NRK7i3y5BETSKuumEN`Xu_8GP1Ri=OKQ$@I^ko8>H6)4rjiG5{VBM>B|%`&&s^)jS|-_95&yc=GqjNo{zFkw%%HHhS~e=s zD#sfS+-?*t|J!+ozP6KvtOl!R)@@-z24}`9{QaVLD^9VCSR2b`b!KC#o;Ki<+wXB6 zx3&O0LOWcg4&rv4QG0)4yb}7BFSEg~=IR5#ZRj8kg}dS7_V&^%#Do==#`u zpy6{ox?jWuR(;pg+f@mT>#HGWHAJRRDDDv~@(IDw&R>9643kK#HN`!1vBJHnC+RM&yIh8{gG2q zA%e*U3|N0XSRa~oX-3EAneep)@{h2vvd3Xvy$7og(sayr@95+e6~Xvi1tUqnIxoIH zVWo*OwYElb#uyW{Imam6f2rGbjR!Y3`#gPqkv57dB6K^wRGxc9B(t|aYDGS=m$&S!NmCtrMMaUg(c zc2qC=2Z`EEFMW-me5B)24AqF*bV5Dr-M5ig(l-WPS%CgaPzs6p_gnCIvTJ=Y<6!gT zVt@AfYCzjjsMEGi=rDQHo0yc;HqoRNnNFeWZgcm?f;cp(6CNylj36DoL(?TS7eU#+ z7&mfr#y))+CJOXQKUMZ7QIdS9@#-}7y2K1{8)cCt0~-X0O!O?Qx#E4Og+;A2SjalQ zs7r?qn0H044=sDN$SRG$arw~n=+T_DNdSrarmu)V6@|?1-ZB#hRn`uilTGPJ@fqEy zGt(f0B+^JDP&f=r{#Y_wi#AVDf-y!RIXU^0jXsFpf>=Ji*TeqSY!H~AMbJdCGLhC) zn7Rx+sXw6uYj;WRYrLd^5IZq@6JI1C^YkgnedZEYy<&4(z%Q$5yv#Boo{AH8n$a zhb4Y3PWdr269&?V%uI$xMcUrMzl=;w<_nm*qr=c3Rl@i5wWB;e-`t7D&c-mcQl7x! zZWB`UGcw=Y2=}~wzrfLx=uet<;m3~=8I~ZRuzvMQUQdr+yTV|ATf1Uuomr__nDf=X zZ3WYJtHp_ri(}SQAPjv+Y+0=fH4krOP@S&=zZ-t1jW1o@}z;xk8 z(Nz1co&El^HK^NrhVHa-_;&88vTU>_J33=%{if;BEY*J#1n59=07jrGQ#IP>@u#3A z;!q+E1Rj3ZJ+!4bq9F8PXJ@yMgZL;>&gYA0%_Kbi8?S=XGM~dnQZQ!yBSgcZhY96H zrWnU;k)qy`rX&&xlDyA%(a1Hhi5CWkmg(`Gb%m(HKi-7Z!LKGRP_B8@`7&hdDy5n= z`OIxqxiVfX@OX1p(mQu>0Ai*v_cTMiw4qRt3~NBvr9oBy0)r>w3p~V0SCm=An6@3n)>@z!|o-$HvDK z|3D2ZMJkLE5loMKl6R^ez@Zz%S$&mbeoqH5`Bb){Ei21q&VP)hWS2tjShfFtGE+$z zzCR$P#uktu+#!w)cX!lWN1XU%K-r=s{|j?)Akf@q#3b#{6cZCuJ~gCxuMXRmI$nGtnH+-h z+GEi!*X=AP<|fG`1>MBdTb?28JYc=fGvAi2I<$B(rs$;eoJCyR6_bc~p!XR@O-+sD z=eH`-ye})I5ic1eL~TDmtfJ|8`0VJ*Yr=hNCd)G1p2MMz4C3^Mj?7;!w|Ly%JqmuW zlIEW^Ft%z?*|fpXda>Jr^1noFZEwFgVV%|*XhH@acv8rdGxeEX{M$(vG{Zw+x(ei@ zmfXb22}8-?Fi`vo-YVrTH*C?a8%M=Hv9MqVH7H^J$KsD?>!SFZ;ZsvnHr_gn=7acz z#W?0eCdVhVMWN12VV^$>WlQ?f;P^{(&pYTops|btm6aj>_Uz+hqpGwB)vWp0Cf5y< zft8-je~nn?W11plq}N)4A{l8I7$!ks_x$PXW-2XaRFswX_BnF{R#6YIwMhAgd5F9X zGmwdadS6(a^fjHtXg8=l?Rc0Sm%hk6E9!5cLVloEy4eh(=FwgP`)~I^5~pBEWo+F6 zSf2ncyMurJN91#cJTy_u8Y}@%!bq1RkGC~-bV@SXRd4F{R-*V`bS+6;W5vZ(&+I<9$;-V|eNfLa5n-6% z2(}&uGRF;p92eS*sE*oR$@pexaqr*meB)VhmIg@h{uzkk$9~qh#cHhw#>O%)b@+(| z^IQgqzuj~Sk(J;swEM-3TrJAPCq9k^^^`q{IItKBRXYe}e0Tdr=Huf7da3$l4PdpwWDop%^}n;dD#K4s#DYA8SHZ z&1!riV4W4R7R#C))JH1~axJ)RYnM$$lIR%6fIVA@zV{XVyx}C+a-Dt8Y9M)^KU0+H zR4IUb2CJ{Hg>CuaXtD50jB(_Tcx=Z$^WYu2u5kubqmwp%drJ6 z?Fo40g!Qd<-l=TQxqHEOuPX0;^z7iX?Ke^a%XT<13TA^5`4Xcw6D@Ur&VT&CUe0d} z1GjOVF1^L@>O)l@?bD~$wzgf(nxX1OGD8fEV?TdJcZc2KoUe|oP1#=$$7ee|xbY)A zDZq+cuTpc(fFdj^=!;{k03C69lMQ(|>uhRfRu%+!k&YOi-3|1QKB z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/helpdesk_mgmt_stage_server_action/tests/__init__.py b/helpdesk_mgmt_stage_server_action/tests/__init__.py new file mode 100644 index 0000000000..e12b67ce0c --- /dev/null +++ b/helpdesk_mgmt_stage_server_action/tests/__init__.py @@ -0,0 +1 @@ +from . import test_helpdesk_ticket_stage diff --git a/helpdesk_mgmt_stage_server_action/tests/test_helpdesk_ticket_stage.py b/helpdesk_mgmt_stage_server_action/tests/test_helpdesk_ticket_stage.py new file mode 100644 index 0000000000..68e2bc14da --- /dev/null +++ b/helpdesk_mgmt_stage_server_action/tests/test_helpdesk_ticket_stage.py @@ -0,0 +1,96 @@ +# Copyright 2023 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.tests.common import SavepointCase + + +class HelpdeskTicketStageServerAction(SavepointCase): + @classmethod + def setUpClass(cls): + super(HelpdeskTicketStageServerAction, cls).setUpClass() + cls.ServerAction = cls.env["ir.actions.server"] + cls.HelpdeskTicket = cls.env["helpdesk.ticket"] + cls.HelpdeskTicketStage = cls.env["helpdesk.ticket.stage"] + cls.field = cls.env["ir.model.fields"]._get(cls.HelpdeskTicket._name, "user_id") + cls.server_action_helpdesk_ticket = cls.ServerAction.create( + { + "name": "Helpdesk Ticket Server Action", + "model_id": cls.env.ref("helpdesk_mgmt.model_helpdesk_ticket").id, + "state": "object_write", + "fields_lines": [ + ( + 0, + 0, + { + "col1": cls.field.id, + "evaluation_type": "value", + "value": cls.env.user.id, + }, + ) + ], + } + ) + cls.helpdesk_ticket_stage_1 = cls.HelpdeskTicketStage.create( + {"name": "Stage 1", "sequence": 1} + ) + cls.helpdesk_ticket_stage_2 = cls.HelpdeskTicketStage.create( + { + "name": "Stage 2", + "action_id": cls.server_action_helpdesk_ticket.id, + "sequence": 2, + } + ) + + def test_helpdesk_ticket_create(self): + self.helpdesk_ticket_1 = self.HelpdeskTicket.create( + { + "name": "Helpdesk Ticket 1", + "stage_id": self.helpdesk_ticket_stage_2.id, + "description": "Helpdesk Ticket Description", + } + ) + self.assertEqual(self.helpdesk_ticket_1.user_id, self.env.user) + + def test_helpdesk_ticket_write(self): + self.helpdesk_ticket_2 = self.HelpdeskTicket.create( + { + "name": "Helpdesk Ticket 2", + "stage_id": self.helpdesk_ticket_stage_1.id, + "description": "Helpdesk Ticket Description", + } + ) + self.helpdesk_ticket_3 = self.HelpdeskTicket.create( + { + "name": "Helpdesk Ticket 3", + "stage_id": self.helpdesk_ticket_stage_1.id, + "description": "Helpdesk Ticket Description", + } + ) + self.assertNotEqual(self.helpdesk_ticket_2.user_id, self.env.user) + self.assertNotEqual(self.helpdesk_ticket_3.user_id, self.env.user) + self.helpdesk_ticket_2.write({"stage_id": self.helpdesk_ticket_stage_2.id}) + self.helpdesk_ticket_3.write({"stage_id": self.helpdesk_ticket_stage_2.id}) + self.assertEqual(self.helpdesk_ticket_2.user_id, self.env.user) + self.assertEqual(self.helpdesk_ticket_3.user_id, self.env.user) + self.helpdesk_ticket_3.write({"user_id": False}) + self.helpdesk_ticket_3.write({"stage_id": self.helpdesk_ticket_stage_2.id}) + self.assertFalse(self.helpdesk_ticket_3.user_id) + + def test_helpdesk_ticket_without_stage(self): + self.helpdesk_ticket_4 = self.HelpdeskTicket.create( + { + "name": "Helpdesk Ticket 4", + "description": "Helpdesk Ticket Description", + } + ) + self.assertFalse(self.helpdesk_ticket_4.user_id) + self.helpdesk_ticket_stage_3 = self.HelpdeskTicketStage.create( + { + "name": "Stage 3", + "sequence": 3, + } + ) + self.helpdesk_ticket_4.write({"stage_id": self.helpdesk_ticket_stage_3.id}) + self.assertFalse(self.helpdesk_ticket_4.user_id) + self.helpdesk_ticket_4.write({"stage_id": self.helpdesk_ticket_stage_2.id}) + self.assertEqual(self.helpdesk_ticket_4.user_id, self.env.user) diff --git a/helpdesk_mgmt_stage_server_action/views/helpdesk_ticket_stage.xml b/helpdesk_mgmt_stage_server_action/views/helpdesk_ticket_stage.xml new file mode 100644 index 0000000000..947e458249 --- /dev/null +++ b/helpdesk_mgmt_stage_server_action/views/helpdesk_ticket_stage.xml @@ -0,0 +1,13 @@ + + + + helpdesk.ticket.stage + + + + + + + + + diff --git a/setup/helpdesk_mgmt_stage_server_action/odoo/addons/helpdesk_mgmt_stage_server_action b/setup/helpdesk_mgmt_stage_server_action/odoo/addons/helpdesk_mgmt_stage_server_action new file mode 120000 index 0000000000..f12f97cbf7 --- /dev/null +++ b/setup/helpdesk_mgmt_stage_server_action/odoo/addons/helpdesk_mgmt_stage_server_action @@ -0,0 +1 @@ +../../../../helpdesk_mgmt_stage_server_action \ No newline at end of file diff --git a/setup/helpdesk_mgmt_stage_server_action/setup.py b/setup/helpdesk_mgmt_stage_server_action/setup.py new file mode 100644 index 0000000000..28c57bb640 --- /dev/null +++ b/setup/helpdesk_mgmt_stage_server_action/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From 484553573d5fe7a7771246041627deb9475f96f1 Mon Sep 17 00:00:00 2001 From: Maksym Yankin Date: Tue, 29 Oct 2024 16:13:38 +0200 Subject: [PATCH 2/3] [IMP] helpdesk_mgmt_stage_server_action: pre-commit auto fixes --- helpdesk_mgmt_stage_server_action/README.rst | 92 ++++ .../pyproject.toml | 3 + .../readme/CONFIGURE.md | 3 + .../readme/CONFIGURE.rst | 3 - .../readme/CONTRIBUTORS.md | 1 + .../readme/CONTRIBUTORS.rst | 1 - .../{DESCRIPTION.rst => DESCRIPTION.md} | 4 +- .../readme/USAGE.md | 4 + .../readme/USAGE.rst | 4 - .../static/description/index.html | 443 ++++++++++++++++++ 10 files changed, 548 insertions(+), 10 deletions(-) create mode 100644 helpdesk_mgmt_stage_server_action/README.rst create mode 100644 helpdesk_mgmt_stage_server_action/pyproject.toml create mode 100644 helpdesk_mgmt_stage_server_action/readme/CONFIGURE.md delete mode 100644 helpdesk_mgmt_stage_server_action/readme/CONFIGURE.rst create mode 100644 helpdesk_mgmt_stage_server_action/readme/CONTRIBUTORS.md delete mode 100644 helpdesk_mgmt_stage_server_action/readme/CONTRIBUTORS.rst rename helpdesk_mgmt_stage_server_action/readme/{DESCRIPTION.rst => DESCRIPTION.md} (65%) create mode 100644 helpdesk_mgmt_stage_server_action/readme/USAGE.md delete mode 100644 helpdesk_mgmt_stage_server_action/readme/USAGE.rst create mode 100644 helpdesk_mgmt_stage_server_action/static/description/index.html diff --git a/helpdesk_mgmt_stage_server_action/README.rst b/helpdesk_mgmt_stage_server_action/README.rst new file mode 100644 index 0000000000..21445dee57 --- /dev/null +++ b/helpdesk_mgmt_stage_server_action/README.rst @@ -0,0 +1,92 @@ +============================ +Helpdesk Stage Server Action +============================ + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:5088a8a0de0750867808606407f0644523fd0ece3129431c36afeb51a3f2e4cd + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Fhelpdesk-lightgray.png?logo=github + :target: https://github.com/OCA/helpdesk/tree/17.0/helpdesk_ticket_stage_server_action + :alt: OCA/helpdesk +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/helpdesk-17-0/helpdesk-17-0-helpdesk_ticket_stage_server_action + :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/helpdesk&target_branch=17.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows you to execute server actions when a Helpdesk ticket +enters a specific stage. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +- Go to Helpdesk > Configuration > Stages +- Create or select a stage +- Select or create a server action + +Usage +===== + +- Go to Helpdesk +- Select or create a Helpdesk tickets +- Move it to the stage configured before to trigger the execution of + the server action + +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 +------- + +* Camptocamp + +Contributors +------------ + +- Bojan Anchev + +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/helpdesk `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/helpdesk_mgmt_stage_server_action/pyproject.toml b/helpdesk_mgmt_stage_server_action/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/helpdesk_mgmt_stage_server_action/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/helpdesk_mgmt_stage_server_action/readme/CONFIGURE.md b/helpdesk_mgmt_stage_server_action/readme/CONFIGURE.md new file mode 100644 index 0000000000..5ac151fbc6 --- /dev/null +++ b/helpdesk_mgmt_stage_server_action/readme/CONFIGURE.md @@ -0,0 +1,3 @@ +- Go to Helpdesk \> Configuration \> Stages +- Create or select a stage +- Select or create a server action diff --git a/helpdesk_mgmt_stage_server_action/readme/CONFIGURE.rst b/helpdesk_mgmt_stage_server_action/readme/CONFIGURE.rst deleted file mode 100644 index 2564cbafde..0000000000 --- a/helpdesk_mgmt_stage_server_action/readme/CONFIGURE.rst +++ /dev/null @@ -1,3 +0,0 @@ -* Go to Helpdesk > Configuration > Stages -* Create or select a stage -* Select or create a server action diff --git a/helpdesk_mgmt_stage_server_action/readme/CONTRIBUTORS.md b/helpdesk_mgmt_stage_server_action/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..2be296829f --- /dev/null +++ b/helpdesk_mgmt_stage_server_action/readme/CONTRIBUTORS.md @@ -0,0 +1 @@ +- Bojan Anchev \<\> diff --git a/helpdesk_mgmt_stage_server_action/readme/CONTRIBUTORS.rst b/helpdesk_mgmt_stage_server_action/readme/CONTRIBUTORS.rst deleted file mode 100644 index 7d1a526704..0000000000 --- a/helpdesk_mgmt_stage_server_action/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1 +0,0 @@ -* Bojan Anchev diff --git a/helpdesk_mgmt_stage_server_action/readme/DESCRIPTION.rst b/helpdesk_mgmt_stage_server_action/readme/DESCRIPTION.md similarity index 65% rename from helpdesk_mgmt_stage_server_action/readme/DESCRIPTION.rst rename to helpdesk_mgmt_stage_server_action/readme/DESCRIPTION.md index dd79e13f93..faebb27935 100644 --- a/helpdesk_mgmt_stage_server_action/readme/DESCRIPTION.rst +++ b/helpdesk_mgmt_stage_server_action/readme/DESCRIPTION.md @@ -1,2 +1,2 @@ -This module allows you to execute server actions when a Helpdesk ticket enters a -specific stage. +This module allows you to execute server actions when a Helpdesk ticket +enters a specific stage. diff --git a/helpdesk_mgmt_stage_server_action/readme/USAGE.md b/helpdesk_mgmt_stage_server_action/readme/USAGE.md new file mode 100644 index 0000000000..5798481147 --- /dev/null +++ b/helpdesk_mgmt_stage_server_action/readme/USAGE.md @@ -0,0 +1,4 @@ +- Go to Helpdesk +- Select or create a Helpdesk tickets +- Move it to the stage configured before to trigger the execution of the + server action diff --git a/helpdesk_mgmt_stage_server_action/readme/USAGE.rst b/helpdesk_mgmt_stage_server_action/readme/USAGE.rst deleted file mode 100644 index 76b4bf7f30..0000000000 --- a/helpdesk_mgmt_stage_server_action/readme/USAGE.rst +++ /dev/null @@ -1,4 +0,0 @@ -* Go to Helpdesk -* Select or create a Helpdesk tickets -* Move it to the stage configured before to trigger the execution of the - server action diff --git a/helpdesk_mgmt_stage_server_action/static/description/index.html b/helpdesk_mgmt_stage_server_action/static/description/index.html new file mode 100644 index 0000000000..463772f7d3 --- /dev/null +++ b/helpdesk_mgmt_stage_server_action/static/description/index.html @@ -0,0 +1,443 @@ + + + + + +Helpdesk Stage Server Action + + + +
+

Helpdesk Stage Server Action

+ + +

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

+

This module allows you to execute server actions when a Helpdesk ticket +enters a specific stage.

+

Table of contents

+ +
+

Configuration

+
    +
  • Go to Helpdesk > Configuration > Stages
  • +
  • Create or select a stage
  • +
  • Select or create a server action
  • +
+
+
+

Usage

+
    +
  • Go to Helpdesk
  • +
  • Select or create a Helpdesk tickets
  • +
  • Move it to the stage configured before to trigger the execution of +the server action
  • +
+
+
+

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

+
    +
  • Camptocamp
  • +
+
+ +
+

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.

+

This module is part of the OCA/helpdesk project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + From 5809a6bedb49982960e78e5066200c9606f84b40 Mon Sep 17 00:00:00 2001 From: Maksym Yankin Date: Tue, 29 Oct 2024 16:36:46 +0200 Subject: [PATCH 3/3] [MIG] helpdesk_mgmt_stage_server_action: Migration to 17.0 --- helpdesk_mgmt_stage_server_action/README.rst | 8 +-- helpdesk_mgmt_stage_server_action/__init__.py | 3 - .../__manifest__.py | 2 +- .../models/__init__.py | 3 - .../models/helpdesk_ticket.py | 17 +++--- .../static/description/index.html | 6 +- .../tests/test_helpdesk_ticket_stage.py | 61 +++++++++++++------ 7 files changed, 62 insertions(+), 38 deletions(-) diff --git a/helpdesk_mgmt_stage_server_action/README.rst b/helpdesk_mgmt_stage_server_action/README.rst index 21445dee57..45312dd111 100644 --- a/helpdesk_mgmt_stage_server_action/README.rst +++ b/helpdesk_mgmt_stage_server_action/README.rst @@ -17,10 +17,10 @@ Helpdesk Stage Server Action :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fhelpdesk-lightgray.png?logo=github - :target: https://github.com/OCA/helpdesk/tree/17.0/helpdesk_ticket_stage_server_action + :target: https://github.com/OCA/helpdesk/tree/17.0/helpdesk_mgmt_stage_server_action :alt: OCA/helpdesk .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/helpdesk-17-0/helpdesk-17-0-helpdesk_ticket_stage_server_action + :target: https://translation.odoo-community.org/projects/helpdesk-17-0/helpdesk-17-0-helpdesk_mgmt_stage_server_action :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/helpdesk&target_branch=17.0 @@ -57,7 +57,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. @@ -87,6 +87,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/helpdesk `_ project on GitHub. +This module is part of the `OCA/helpdesk `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/helpdesk_mgmt_stage_server_action/__init__.py b/helpdesk_mgmt_stage_server_action/__init__.py index f575e55c77..0650744f6b 100644 --- a/helpdesk_mgmt_stage_server_action/__init__.py +++ b/helpdesk_mgmt_stage_server_action/__init__.py @@ -1,4 +1 @@ -# Copyright 2023 Camptocamp SA -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - from . import models diff --git a/helpdesk_mgmt_stage_server_action/__manifest__.py b/helpdesk_mgmt_stage_server_action/__manifest__.py index 1ab25e76f1..673fed8e1d 100644 --- a/helpdesk_mgmt_stage_server_action/__manifest__.py +++ b/helpdesk_mgmt_stage_server_action/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Helpdesk Stage Server Action", "summary": "Execute server actions when reaching a Helpdesk ticket stage", - "version": "14.0.1.0.0", + "version": "17.0.1.0.0", "category": "HelpDesk Service", "author": "Camptocamp, Odoo Community Association (OCA)", "website": "https://github.com/OCA/helpdesk", diff --git a/helpdesk_mgmt_stage_server_action/models/__init__.py b/helpdesk_mgmt_stage_server_action/models/__init__.py index ad81b3bf9e..f6ced2e983 100644 --- a/helpdesk_mgmt_stage_server_action/models/__init__.py +++ b/helpdesk_mgmt_stage_server_action/models/__init__.py @@ -1,5 +1,2 @@ -# Copyright 2023 Camptocamp SA -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - from . import helpdesk_ticket_stage from . import helpdesk_ticket diff --git a/helpdesk_mgmt_stage_server_action/models/helpdesk_ticket.py b/helpdesk_mgmt_stage_server_action/models/helpdesk_ticket.py index 20a113a1e1..af39931dc3 100644 --- a/helpdesk_mgmt_stage_server_action/models/helpdesk_ticket.py +++ b/helpdesk_mgmt_stage_server_action/models/helpdesk_ticket.py @@ -12,17 +12,19 @@ def create(self, vals_list): records = super().create(vals_list) for record in records: action = record.stage_id.action_id - if action: - context = { - "active_model": self._name, - "active_ids": [record.id], - } - action.with_context(**context).run() + if not action: + continue + context = { + "active_model": self._name, + "active_id": record.id, + "active_ids": records.ids, + } + action.with_context(**context).run() return records def write(self, vals): records = "stage_id" in vals and self.filtered( - lambda l: l.stage_id.id != vals.get("stage_id") + lambda ticket: ticket.stage_id.id != vals.get("stage_id") ) if records: res = super().write(vals) @@ -32,6 +34,7 @@ def write(self, vals): if action: context = { "active_model": self._name, + "active_id": records.id, "active_ids": records.ids, } action.with_context(**context).run() diff --git a/helpdesk_mgmt_stage_server_action/static/description/index.html b/helpdesk_mgmt_stage_server_action/static/description/index.html index 463772f7d3..c413662bb3 100644 --- a/helpdesk_mgmt_stage_server_action/static/description/index.html +++ b/helpdesk_mgmt_stage_server_action/static/description/index.html @@ -369,7 +369,7 @@

Helpdesk Stage Server Action

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:5088a8a0de0750867808606407f0644523fd0ece3129431c36afeb51a3f2e4cd !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

+

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

This module allows you to execute server actions when a Helpdesk ticket enters a specific stage.

Table of contents

@@ -408,7 +408,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.

@@ -434,7 +434,7 @@

Maintainers

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/helpdesk project on GitHub.

+

This module is part of the OCA/helpdesk project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

diff --git a/helpdesk_mgmt_stage_server_action/tests/test_helpdesk_ticket_stage.py b/helpdesk_mgmt_stage_server_action/tests/test_helpdesk_ticket_stage.py index 68e2bc14da..a4c3b6fb7a 100644 --- a/helpdesk_mgmt_stage_server_action/tests/test_helpdesk_ticket_stage.py +++ b/helpdesk_mgmt_stage_server_action/tests/test_helpdesk_ticket_stage.py @@ -1,33 +1,32 @@ # Copyright 2023 Camptocamp SA # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo.tests.common import SavepointCase +from odoo.tests.common import RecordCapturer, TransactionCase +from odoo.addons.base.tests.common import DISABLED_MAIL_CONTEXT -class HelpdeskTicketStageServerAction(SavepointCase): + +class HelpdeskTicketStageServerAction(TransactionCase): @classmethod def setUpClass(cls): - super(HelpdeskTicketStageServerAction, cls).setUpClass() - cls.ServerAction = cls.env["ir.actions.server"] + super().setUpClass() + cls.env = cls.env(context=dict(cls.env.context, **DISABLED_MAIL_CONTEXT)) cls.HelpdeskTicket = cls.env["helpdesk.ticket"] cls.HelpdeskTicketStage = cls.env["helpdesk.ticket.stage"] - cls.field = cls.env["ir.model.fields"]._get(cls.HelpdeskTicket._name, "user_id") + cls.HelpdeskTicketTag = cls.env["helpdesk.ticket.tag"] + cls.ServerAction = cls.env["ir.actions.server"] cls.server_action_helpdesk_ticket = cls.ServerAction.create( { "name": "Helpdesk Ticket Server Action", - "model_id": cls.env.ref("helpdesk_mgmt.model_helpdesk_ticket").id, + "model_id": cls.env["ir.model"]._get_id("helpdesk.ticket"), + "crud_model_id": cls.env["ir.model"]._get_id("helpdesk.ticket"), + "value": str(cls.env.user.id), + "update_path": "user_id", + "update_field_id": cls.env["ir.model.fields"]._get_ids( + "helpdesk.ticket" + )["user_id"], + "evaluation_type": "value", "state": "object_write", - "fields_lines": [ - ( - 0, - 0, - { - "col1": cls.field.id, - "evaluation_type": "value", - "value": cls.env.user.id, - }, - ) - ], } ) cls.helpdesk_ticket_stage_1 = cls.HelpdeskTicketStage.create( @@ -94,3 +93,31 @@ def test_helpdesk_ticket_without_stage(self): self.assertFalse(self.helpdesk_ticket_4.user_id) self.helpdesk_ticket_4.write({"stage_id": self.helpdesk_ticket_stage_2.id}) self.assertEqual(self.helpdesk_ticket_4.user_id, self.env.user) + + def test_helpdesk_ticket_run_action(self): + create_tag_action = self.ServerAction.create( + { + "model_id": self.env["ir.model"]._get_id("helpdesk.ticket.tag"), + "crud_model_id": self.env["ir.model"]._get_id("helpdesk.ticket.tag"), + "name": "Create new helpdesk tag", + "value": "New helpdesk tag", + "state": "object_create", + } + ) + stage_1 = self.HelpdeskTicketStage.create( + {"name": "Stage 1", "sequence": 1, "action_id": create_tag_action.id} + ) + ticket = self.HelpdeskTicket.create( + { + "name": "Create a tag ticket", + "description": "Ticket Description", + } + ) + self.assertFalse( + self.HelpdeskTicketTag.search([("name", "=", "New helpdesk tag")]).exists() + ) + with RecordCapturer(self.HelpdeskTicketTag, []) as capture: + ticket.write({"stage_id": stage_1.id}) + tag = capture.records + self.assertEqual(1, len(tag)) + self.assertEqual("New helpdesk tag", tag.name)