From cd22dac68509337b6348a597dba20f9b34b21670 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduardo=20L=C3=B3pez=20Pe=C3=B1alver?= Date: Wed, 21 Feb 2024 10:58:01 +0100 Subject: [PATCH 1/6] [ADD] sale_timesheet_analytic_propagation: update timesheet analytic account from task. This module allows to update the timesheet's analytic account when the task related to it changes the analytic account. This only happens if the timesheet is not invoiced yet. @moduon MT-5142 --- project_task_analytic_propagation/README.rst | 114 +++++ project_task_analytic_propagation/__init__.py | 1 + .../__manifest__.py | 19 + .../project_task_analytic_propagation.pot | 24 + .../models/__init__.py | 1 + .../models/account_analytic_line.py | 24 + .../readme/CONTRIBUTORS.md | 2 + .../readme/DESCRIPTION.md | 2 + .../readme/USAGE.md | 11 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 452 ++++++++++++++++++ .../tests/__init__.py | 1 + .../tests/test_hr_timesheet.py | 129 +++++ 13 files changed, 780 insertions(+) create mode 100644 project_task_analytic_propagation/README.rst create mode 100644 project_task_analytic_propagation/__init__.py create mode 100644 project_task_analytic_propagation/__manifest__.py create mode 100644 project_task_analytic_propagation/i18n/project_task_analytic_propagation.pot create mode 100644 project_task_analytic_propagation/models/__init__.py create mode 100644 project_task_analytic_propagation/models/account_analytic_line.py create mode 100644 project_task_analytic_propagation/readme/CONTRIBUTORS.md create mode 100644 project_task_analytic_propagation/readme/DESCRIPTION.md create mode 100644 project_task_analytic_propagation/readme/USAGE.md create mode 100644 project_task_analytic_propagation/static/description/icon.png create mode 100644 project_task_analytic_propagation/static/description/index.html create mode 100644 project_task_analytic_propagation/tests/__init__.py create mode 100644 project_task_analytic_propagation/tests/test_hr_timesheet.py diff --git a/project_task_analytic_propagation/README.rst b/project_task_analytic_propagation/README.rst new file mode 100644 index 0000000000..499fc3b1fc --- /dev/null +++ b/project_task_analytic_propagation/README.rst @@ -0,0 +1,114 @@ +================================= +Project Task Analytic Propagation +================================= + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:cd89d301e3b1fc9a8d09fed055da543c8997957de72b6f1c5d5369e093b01023 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png + :target: https://odoo-community.org/page/development-status + :alt: Alpha +.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Ftimesheet-lightgray.png?logo=github + :target: https://github.com/OCA/timesheet/tree/16.0/project_task_analytic_propagation + :alt: OCA/timesheet +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/timesheet-16-0/timesheet-16-0-project_task_analytic_propagation + :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/timesheet&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows you to change the analytical account of the unbilled +timesheet when your related task changes the account as it does with the +sales order item. + +.. IMPORTANT:: + This is an alpha version, the data model and design can change at any time without warning. + Only for development or testing purpose, do not use in production. + `More details on development status `_ + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +To use this module, you need to: + +1. Go to Sales > Order and select an order with a project related to it + but not invoiced yet. +2. Click on task's smart button and select a task with 'Sales Order + Item' set (or create a new task in other case). +3. Select any analytic account in 'Extra Info'. +4. Record some time on timesheets page. +5. Go back to your order and create an invoice. +6. Go to the previous task and record some time. Then change the + analytic account. +7. In timesheet's page only not invoiced timesheets changed the analytic + account. +8. To check this go to Timesheets > Reporting > by Task. +9. Change to list view and group by Project > Task > Analytic Account. + +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 +------- + +* Moduon + +Contributors +------------ + +- Eduardo López (`Moduon `__) +- Rafael Blasco (`Moduon `__) + +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-edlopen| image:: https://github.com/edlopen.png?size=40px + :target: https://github.com/edlopen + :alt: edlopen +.. |maintainer-rafaelbn| image:: https://github.com/rafaelbn.png?size=40px + :target: https://github.com/rafaelbn + :alt: rafaelbn + +Current `maintainers `__: + +|maintainer-edlopen| |maintainer-rafaelbn| + +This module is part of the `OCA/timesheet `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/project_task_analytic_propagation/__init__.py b/project_task_analytic_propagation/__init__.py new file mode 100644 index 0000000000..0650744f6b --- /dev/null +++ b/project_task_analytic_propagation/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/project_task_analytic_propagation/__manifest__.py b/project_task_analytic_propagation/__manifest__.py new file mode 100644 index 0000000000..e59f01d504 --- /dev/null +++ b/project_task_analytic_propagation/__manifest__.py @@ -0,0 +1,19 @@ +# Copyright 2024 Moduon Team S.L. +# License LGPL-3.0 or later (https://www.gnu.org/licenses/LGPL-3.0) + +{ + "name": "Project Task Analytic Propagation", + "summary": "Updates timesheet's analytic account when their task changes the analytic.", + "version": "16.0.1.0.0", + "development_status": "Alpha", + "category": "Timesheet", + "website": "https://github.com/OCA/timesheet", + "author": "Moduon, Odoo Community Association (OCA)", + "maintainers": ["edlopen", "rafaelbn"], + "license": "LGPL-3", + "application": False, + "installable": True, + "depends": [ + "sale_timesheet", + ], +} diff --git a/project_task_analytic_propagation/i18n/project_task_analytic_propagation.pot b/project_task_analytic_propagation/i18n/project_task_analytic_propagation.pot new file mode 100644 index 0000000000..5212997311 --- /dev/null +++ b/project_task_analytic_propagation/i18n/project_task_analytic_propagation.pot @@ -0,0 +1,24 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * project_task_analytic_propagation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: project_task_analytic_propagation +#: model:ir.model.fields,field_description:project_task_analytic_propagation.field_account_analytic_line__account_id +msgid "Analytic Account" +msgstr "" + +#. module: project_task_analytic_propagation +#: model:ir.model,name:project_task_analytic_propagation.model_account_analytic_line +msgid "Analytic Line" +msgstr "" diff --git a/project_task_analytic_propagation/models/__init__.py b/project_task_analytic_propagation/models/__init__.py new file mode 100644 index 0000000000..f69550ae91 --- /dev/null +++ b/project_task_analytic_propagation/models/__init__.py @@ -0,0 +1 @@ +from . import account_analytic_line diff --git a/project_task_analytic_propagation/models/account_analytic_line.py b/project_task_analytic_propagation/models/account_analytic_line.py new file mode 100644 index 0000000000..1169727f98 --- /dev/null +++ b/project_task_analytic_propagation/models/account_analytic_line.py @@ -0,0 +1,24 @@ +# Copyright 2024 Moduon Team S.L. +# License LGPL-3.0 or later (https://www.gnu.org/licenses/LGPL-3.0) +from odoo import api, fields, models + + +class AccountAnalyticLine(models.Model): + _inherit = "account.analytic.line" + + account_id = fields.Many2one( + compute="_compute_account_id", + store=True, + readonly=False, + ) + + @api.depends("task_id.analytic_account_id") + def _compute_account_id(self): + """Change the analytic account non billed lines.""" + timesheet_ids = self.filtered( + lambda t: not t.is_so_line_edited + and t._is_not_billed() + and t.task_id.analytic_account_id + ) + for timesheet in timesheet_ids: + timesheet.account_id = timesheet.task_id.analytic_account_id diff --git a/project_task_analytic_propagation/readme/CONTRIBUTORS.md b/project_task_analytic_propagation/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..43dd2e5acd --- /dev/null +++ b/project_task_analytic_propagation/readme/CONTRIBUTORS.md @@ -0,0 +1,2 @@ +- Eduardo López ([Moduon](https://www.moduon.team/)) +- Rafael Blasco ([Moduon](https://www.moduon.team/)) diff --git a/project_task_analytic_propagation/readme/DESCRIPTION.md b/project_task_analytic_propagation/readme/DESCRIPTION.md new file mode 100644 index 0000000000..f2ae2c07b6 --- /dev/null +++ b/project_task_analytic_propagation/readme/DESCRIPTION.md @@ -0,0 +1,2 @@ +This module allows you to change the analytical account of the unbilled timesheet when your +related task changes the account as it does with the sales order item. diff --git a/project_task_analytic_propagation/readme/USAGE.md b/project_task_analytic_propagation/readme/USAGE.md new file mode 100644 index 0000000000..9a8bebb750 --- /dev/null +++ b/project_task_analytic_propagation/readme/USAGE.md @@ -0,0 +1,11 @@ +To use this module, you need to: + +1. Go to Sales > Order and select an order with a project related to it but not invoiced yet. +2. Click on task's smart button and select a task with 'Sales Order Item' set (or create a new task in other case). +3. Select any analytic account in 'Extra Info'. +4. Record some time on timesheets page. +5. Go back to your order and create an invoice. +6. Go to the previous task and record some time. Then change the analytic account. +7. In timesheet's page only not invoiced timesheets changed the analytic account. +8. To check this go to Timesheets > Reporting > by Task. +9. Change to list view and group by Project > Task > Analytic Account. diff --git a/project_task_analytic_propagation/static/description/icon.png b/project_task_analytic_propagation/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/project_task_analytic_propagation/static/description/index.html b/project_task_analytic_propagation/static/description/index.html new file mode 100644 index 0000000000..45fa454a9a --- /dev/null +++ b/project_task_analytic_propagation/static/description/index.html @@ -0,0 +1,452 @@ + + + + + + +Project Task Analytic Propagation + + + +
+

Project Task Analytic Propagation

+ + +

Alpha License: LGPL-3 OCA/timesheet Translate me on Weblate Try me on Runboat

+

This module allows you to change the analytical account of the unbilled +timesheet when your related task changes the account as it does with the +sales order item.

+
+

Important

+

This is an alpha version, the data model and design can change at any time without warning. +Only for development or testing purpose, do not use in production. +More details on development status

+
+

Table of contents

+ +
+

Usage

+

To use this module, you need to:

+
    +
  1. Go to Sales > Order and select an order with a project related to it +but not invoiced yet.
  2. +
  3. Click on task’s smart button and select a task with ‘Sales Order +Item’ set (or create a new task in other case).
  4. +
  5. Select any analytic account in ‘Extra Info’.
  6. +
  7. Record some time on timesheets page.
  8. +
  9. Go back to your order and create an invoice.
  10. +
  11. Go to the previous task and record some time. Then change the +analytic account.
  12. +
  13. In timesheet’s page only not invoiced timesheets changed the analytic +account.
  14. +
  15. To check this go to Timesheets > Reporting > by Task.
  16. +
  17. Change to list view and group by Project > Task > Analytic Account.
  18. +
+
+
+

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

+
    +
  • Moduon
  • +
+
+
+

Contributors

+ +
+
+

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:

+

edlopen rafaelbn

+

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

+

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

+
+
+
+ + diff --git a/project_task_analytic_propagation/tests/__init__.py b/project_task_analytic_propagation/tests/__init__.py new file mode 100644 index 0000000000..48a7960b7e --- /dev/null +++ b/project_task_analytic_propagation/tests/__init__.py @@ -0,0 +1 @@ +from . import test_hr_timesheet diff --git a/project_task_analytic_propagation/tests/test_hr_timesheet.py b/project_task_analytic_propagation/tests/test_hr_timesheet.py new file mode 100644 index 0000000000..c07185a851 --- /dev/null +++ b/project_task_analytic_propagation/tests/test_hr_timesheet.py @@ -0,0 +1,129 @@ +# Copyright 2024 Moduon Team S.L. +# License LGPL-3.0 or later (https://www.gnu.org/licenses/LGPL-3.0) +from odoo.tests import new_test_user, tagged, users + +from odoo.addons.sale_timesheet.tests.common import TestCommonSaleTimesheet + + +@tagged("-at_install", "post_install") +class HrTimesheet(TestCommonSaleTimesheet): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.analytic_user = new_test_user( + cls.env, "test_user", "analytic.group_analytic_accounting,base.group_user" + ) + cls.employee_user.user_id = cls.analytic_user.id + cls.task1 = cls.env["project.task"].create( + { + "name": "Task One", + "priority": "0", + "kanban_state": "normal", + "project_id": cls.project_global.id, + "partner_id": cls.partner_b.id, + "user_ids": [(6, 0, cls.analytic_user.ids)], + } + ) + cls.env["account.analytic.line"].create( + [ + { + "project_id": cls.project_global.id, + "task_id": cls.task1.id, + "name": "my first timesheet", + "unit_amount": 4, + "employee_id": cls.employee_user.id, + }, + { + "project_id": cls.project_global.id, + "task_id": cls.task1.id, + "name": "my second timesheet", + "unit_amount": 4, + "employee_id": cls.employee_user.id, + }, + { + "project_id": cls.project_global.id, + "task_id": cls.task1.id, + "name": "my third timesheet", + "unit_amount": 4, + "employee_id": cls.employee_user.id, + }, + ] + ) + cls.plan = cls.env["account.analytic.plan"].create( + { + "name": "Projects Plan", + "company_id": False, + } + ) + cls.analytic_account_maintenance = cls.env["account.analytic.account"].create( + { + "name": "Maintenance Analytic Account for Test Customer", + "partner_id": cls.partner_b.id, + "code": "MAINTENANCE", + "plan_id": cls.plan.id, + } + ) + + cls.so = ( + cls.env["sale.order"] + .with_context(mail_notrack=True, mail_create_nolog=True) + .create( + { + "partner_id": cls.partner_b.id, + "partner_invoice_id": cls.partner_b.id, + "partner_shipping_id": cls.partner_b.id, + } + ) + ) + cls.so_line_1 = cls.env["sale.order.line"].create( + [ + { + "order_id": cls.so.id, + "name": cls.product_delivery_timesheet1.name, + "product_id": cls.product_delivery_timesheet1.id, + "product_uom_qty": 10, + "price_unit": cls.product_delivery_timesheet1.list_price, + } + ] + ) + cls.task1.sale_line_id = cls.so_line_1 + cls.so.action_confirm() + cls.so._create_invoices() + + @users("test_user") + def test_compute_account_id_01(self): + """Test analytic account doesn't change if timesheets are invoiced.""" + self.assertEqual( + self.task1.timesheet_ids.mapped("account_id"), + self.analytic_account_sale, + ) + self.task1.analytic_account_id = self.analytic_account_maintenance + self.assertEqual( + self.task1.timesheet_ids.mapped("account_id"), + self.analytic_account_sale, + ) + + @users("test_user") + def test_compute_account_id_02(self): + """Test only not billed analytic account lines change.""" + self.assertEqual( + self.task1.timesheet_ids.mapped("account_id"), + self.analytic_account_sale, + ) + timesheet_id = self.env["account.analytic.line"].create( + [ + { + "project_id": self.project_global.id, + "task_id": self.task1.id, + "name": "Log additional time", + "unit_amount": 4, + "employee_id": self.employee_user.id, + } + ] + ) + self.task1.analytic_account_id = self.analytic_account_maintenance + self.assertEqual(timesheet_id.account_id, self.analytic_account_maintenance) + self.assertNotEqual( + self.task1.timesheet_ids.mapped("account_id"), + self.analytic_account_maintenance, + ) From e56839be045e5be60b9a72085925f0ef7ee38b17 Mon Sep 17 00:00:00 2001 From: mymage Date: Mon, 26 Feb 2024 13:35:18 +0000 Subject: [PATCH 2/6] Added translation using Weblate (Italian) --- project_task_analytic_propagation/i18n/it.po | 25 ++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 project_task_analytic_propagation/i18n/it.po diff --git a/project_task_analytic_propagation/i18n/it.po b/project_task_analytic_propagation/i18n/it.po new file mode 100644 index 0000000000..2e593805ad --- /dev/null +++ b/project_task_analytic_propagation/i18n/it.po @@ -0,0 +1,25 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * project_task_analytic_propagation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: project_task_analytic_propagation +#: model:ir.model.fields,field_description:project_task_analytic_propagation.field_account_analytic_line__account_id +msgid "Analytic Account" +msgstr "" + +#. module: project_task_analytic_propagation +#: model:ir.model,name:project_task_analytic_propagation.model_account_analytic_line +msgid "Analytic Line" +msgstr "" From ad784628b86d65e4de7aaac23f6af7712ec2bb5c Mon Sep 17 00:00:00 2001 From: mymage Date: Mon, 26 Feb 2024 13:35:35 +0000 Subject: [PATCH 3/6] Translated using Weblate (Italian) Currently translated at 100.0% (2 of 2 strings) Translation: timesheet-16.0/timesheet-16.0-project_task_analytic_propagation Translate-URL: https://translation.odoo-community.org/projects/timesheet-16-0/timesheet-16-0-project_task_analytic_propagation/it/ --- project_task_analytic_propagation/i18n/it.po | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/project_task_analytic_propagation/i18n/it.po b/project_task_analytic_propagation/i18n/it.po index 2e593805ad..ed9e3aef2e 100644 --- a/project_task_analytic_propagation/i18n/it.po +++ b/project_task_analytic_propagation/i18n/it.po @@ -6,20 +6,22 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2024-02-26 16:34+0000\n" +"Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" #. module: project_task_analytic_propagation #: model:ir.model.fields,field_description:project_task_analytic_propagation.field_account_analytic_line__account_id msgid "Analytic Account" -msgstr "" +msgstr "Conto analitico" #. module: project_task_analytic_propagation #: model:ir.model,name:project_task_analytic_propagation.model_account_analytic_line msgid "Analytic Line" -msgstr "" +msgstr "Riga analitica" From c67be9acf27c805ccd1296e35e286329bc5b932f Mon Sep 17 00:00:00 2001 From: Rodrigo Macedo Date: Mon, 20 May 2024 22:53:02 +0000 Subject: [PATCH 4/6] Added translation using Weblate (Portuguese (Brazil)) --- .../i18n/pt_BR.po | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 project_task_analytic_propagation/i18n/pt_BR.po diff --git a/project_task_analytic_propagation/i18n/pt_BR.po b/project_task_analytic_propagation/i18n/pt_BR.po new file mode 100644 index 0000000000..178ceda946 --- /dev/null +++ b/project_task_analytic_propagation/i18n/pt_BR.po @@ -0,0 +1,25 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * project_task_analytic_propagation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" + +#. module: project_task_analytic_propagation +#: model:ir.model.fields,field_description:project_task_analytic_propagation.field_account_analytic_line__account_id +msgid "Analytic Account" +msgstr "" + +#. module: project_task_analytic_propagation +#: model:ir.model,name:project_task_analytic_propagation.model_account_analytic_line +msgid "Analytic Line" +msgstr "" From bcfe78a0c3c2ea47cdf8150d6ae8c6c4f25036a2 Mon Sep 17 00:00:00 2001 From: Rodrigo Macedo Date: Wed, 22 May 2024 00:38:50 +0000 Subject: [PATCH 5/6] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (2 of 2 strings) Translation: timesheet-16.0/timesheet-16.0-project_task_analytic_propagation Translate-URL: https://translation.odoo-community.org/projects/timesheet-16-0/timesheet-16-0-project_task_analytic_propagation/pt_BR/ --- project_task_analytic_propagation/i18n/pt_BR.po | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/project_task_analytic_propagation/i18n/pt_BR.po b/project_task_analytic_propagation/i18n/pt_BR.po index 178ceda946..b6ea341226 100644 --- a/project_task_analytic_propagation/i18n/pt_BR.po +++ b/project_task_analytic_propagation/i18n/pt_BR.po @@ -6,20 +6,23 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2024-05-22 03:22+0000\n" +"Last-Translator: Rodrigo Macedo \n" "Language-Team: none\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" #. module: project_task_analytic_propagation #: model:ir.model.fields,field_description:project_task_analytic_propagation.field_account_analytic_line__account_id msgid "Analytic Account" -msgstr "" +msgstr "Conta Analítica" #. module: project_task_analytic_propagation #: model:ir.model,name:project_task_analytic_propagation.model_account_analytic_line msgid "Analytic Line" -msgstr "" +msgstr "Linha Analítica" From b2df0cf1df93d32ad35777bb0d1c1aa0ed600f1f Mon Sep 17 00:00:00 2001 From: JordiToledo Date: Mon, 3 Feb 2025 10:33:09 +0100 Subject: [PATCH 6/6] [MIG] project_task_analytic_propagation: Migration to 17.0 --- project_task_analytic_propagation/README.rst | 14 +++++++------- .../__manifest__.py | 5 +++-- .../pyproject.toml | 3 +++ .../static/description/index.html | 18 ++++++++++-------- .../tests/test_hr_timesheet.py | 11 ++++++++--- 5 files changed, 31 insertions(+), 20 deletions(-) create mode 100644 project_task_analytic_propagation/pyproject.toml diff --git a/project_task_analytic_propagation/README.rst b/project_task_analytic_propagation/README.rst index 499fc3b1fc..5529bada92 100644 --- a/project_task_analytic_propagation/README.rst +++ b/project_task_analytic_propagation/README.rst @@ -17,13 +17,13 @@ Project Task Analytic Propagation :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html :alt: License: LGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Ftimesheet-lightgray.png?logo=github - :target: https://github.com/OCA/timesheet/tree/16.0/project_task_analytic_propagation + :target: https://github.com/OCA/timesheet/tree/17.0/project_task_analytic_propagation :alt: OCA/timesheet .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/timesheet-16-0/timesheet-16-0-project_task_analytic_propagation + :target: https://translation.odoo-community.org/projects/timesheet-17-0/timesheet-17-0-project_task_analytic_propagation :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/timesheet&target_branch=16.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/timesheet&target_branch=17.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -67,7 +67,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. @@ -82,8 +82,8 @@ Authors Contributors ------------ -- Eduardo López (`Moduon `__) -- Rafael Blasco (`Moduon `__) +- Eduardo López (`Moduon `__) +- Rafael Blasco (`Moduon `__) Maintainers ----------- @@ -109,6 +109,6 @@ Current `maintainers `__: |maintainer-edlopen| |maintainer-rafaelbn| -This module is part of the `OCA/timesheet `_ project on GitHub. +This module is part of the `OCA/timesheet `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/project_task_analytic_propagation/__manifest__.py b/project_task_analytic_propagation/__manifest__.py index e59f01d504..240b36bb28 100644 --- a/project_task_analytic_propagation/__manifest__.py +++ b/project_task_analytic_propagation/__manifest__.py @@ -3,8 +3,9 @@ { "name": "Project Task Analytic Propagation", - "summary": "Updates timesheet's analytic account when their task changes the analytic.", - "version": "16.0.1.0.0", + "summary": "Updates timesheet's analytic account" + " when their task changes the analytic.", + "version": "17.0.1.0.0", "development_status": "Alpha", "category": "Timesheet", "website": "https://github.com/OCA/timesheet", diff --git a/project_task_analytic_propagation/pyproject.toml b/project_task_analytic_propagation/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/project_task_analytic_propagation/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/project_task_analytic_propagation/static/description/index.html b/project_task_analytic_propagation/static/description/index.html index 45fa454a9a..204639f087 100644 --- a/project_task_analytic_propagation/static/description/index.html +++ b/project_task_analytic_propagation/static/description/index.html @@ -1,4 +1,3 @@ - @@ -9,10 +8,11 @@ /* :Author: David Goodger (goodger@python.org) -:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $ +:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $ :Copyright: This stylesheet has been placed in the public domain. Default cascading style sheet for the HTML output of Docutils. +Despite the name, some widely supported CSS2 features are used. See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to customize this style sheet. @@ -275,7 +275,7 @@ margin-left: 2em ; margin-right: 2em } -pre.code .ln { color: grey; } /* line numbers */ +pre.code .ln { color: gray; } /* line numbers */ pre.code, code { background-color: #eeeeee } pre.code .comment, code .comment { color: #5C6576 } pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold } @@ -301,7 +301,7 @@ span.pre { white-space: pre } -span.problematic { +span.problematic, pre.problematic { color: red } span.section-subtitle { @@ -369,7 +369,7 @@

Project Task Analytic Propagation

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:cd89d301e3b1fc9a8d09fed055da543c8997957de72b6f1c5d5369e093b01023 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Alpha License: LGPL-3 OCA/timesheet Translate me on Weblate Try me on Runboat

+

Alpha License: LGPL-3 OCA/timesheet Translate me on Weblate Try me on Runboat

This module allows you to change the analytical account of the unbilled timesheet when your related task changes the account as it does with the sales order item.

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

@@ -437,13 +437,15 @@

Contributors

Maintainers

This module is maintained by the OCA.

-Odoo Community Association + +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:

edlopen rafaelbn

-

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

+

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

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

diff --git a/project_task_analytic_propagation/tests/test_hr_timesheet.py b/project_task_analytic_propagation/tests/test_hr_timesheet.py index c07185a851..b55b828c57 100644 --- a/project_task_analytic_propagation/tests/test_hr_timesheet.py +++ b/project_task_analytic_propagation/tests/test_hr_timesheet.py @@ -1,5 +1,7 @@ # Copyright 2024 Moduon Team S.L. # License LGPL-3.0 or later (https://www.gnu.org/licenses/LGPL-3.0) +import requests + from odoo.tests import new_test_user, tagged, users from odoo.addons.sale_timesheet.tests.common import TestCommonSaleTimesheet @@ -9,6 +11,7 @@ class HrTimesheet(TestCommonSaleTimesheet): @classmethod def setUpClass(cls): + cls._super_send = requests.Session.send super().setUpClass() cls.analytic_user = new_test_user( cls.env, "test_user", "analytic.group_analytic_accounting,base.group_user" @@ -18,7 +21,6 @@ def setUpClass(cls): { "name": "Task One", "priority": "0", - "kanban_state": "normal", "project_id": cls.project_global.id, "partner_id": cls.partner_b.id, "user_ids": [(6, 0, cls.analytic_user.ids)], @@ -52,7 +54,6 @@ def setUpClass(cls): cls.plan = cls.env["account.analytic.plan"].create( { "name": "Projects Plan", - "company_id": False, } ) cls.analytic_account_maintenance = cls.env["account.analytic.account"].create( @@ -87,9 +88,13 @@ def setUpClass(cls): ] ) cls.task1.sale_line_id = cls.so_line_1 - cls.so.action_confirm() cls.so._create_invoices() + @classmethod + def _request_handler(cls, s, r, /, **kw): + """Don't block external requests.""" + return cls._super_send(s, r, **kw) + @users("test_user") def test_compute_account_id_01(self): """Test analytic account doesn't change if timesheets are invoiced."""