From 781c561e516b4c7dfb0a28e62966478965d2a224 Mon Sep 17 00:00:00 2001 From: projectsodoo Date: Mon, 7 Dec 2020 14:59:11 +0530 Subject: [PATCH 1/3] Project maintenance code added --- project_maintenance/__init__.py | 6 ++ project_maintenance/__manifest__.py | 23 +++++ .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 195 bytes project_maintenance/models/__init__.py | 6 ++ .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 208 bytes .../analytic_account.cpython-36.pyc | Bin 0 -> 2551 bytes .../models/__pycache__/digest.cpython-36.pyc | Bin 0 -> 1449 bytes .../__pycache__/maintenance.cpython-36.pyc | Bin 0 -> 1397 bytes .../models/__pycache__/project.cpython-36.pyc | Bin 0 -> 2349 bytes .../project_task_recurrence.cpython-36.pyc | Bin 0 -> 10171 bytes .../res_config_settings.cpython-36.pyc | Bin 0 -> 1194 bytes .../__pycache__/res_partner.cpython-36.pyc | Bin 0 -> 1262 bytes project_maintenance/models/maintenance.py | 25 +++++ project_maintenance/models/project.py | 38 ++++++++ project_maintenance/report/__init__.py | 4 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 185 bytes .../maintenance_report.cpython-36.pyc | Bin 0 -> 1744 bytes .../report/maintenance_report.py | 35 +++++++ .../report/maintenance_report_views.xml | 58 +++++++++++ .../security/ir.model.access.csv | 12 +++ .../views/maintenance_view.xml | 91 ++++++++++++++++++ project_maintenance/views/project_view.xml | 49 ++++++++++ 22 files changed, 347 insertions(+) create mode 100755 project_maintenance/__init__.py create mode 100755 project_maintenance/__manifest__.py create mode 100644 project_maintenance/__pycache__/__init__.cpython-36.pyc create mode 100755 project_maintenance/models/__init__.py create mode 100644 project_maintenance/models/__pycache__/__init__.cpython-36.pyc create mode 100644 project_maintenance/models/__pycache__/analytic_account.cpython-36.pyc create mode 100644 project_maintenance/models/__pycache__/digest.cpython-36.pyc create mode 100644 project_maintenance/models/__pycache__/maintenance.cpython-36.pyc create mode 100644 project_maintenance/models/__pycache__/project.cpython-36.pyc create mode 100644 project_maintenance/models/__pycache__/project_task_recurrence.cpython-36.pyc create mode 100644 project_maintenance/models/__pycache__/res_config_settings.cpython-36.pyc create mode 100644 project_maintenance/models/__pycache__/res_partner.cpython-36.pyc create mode 100755 project_maintenance/models/maintenance.py create mode 100755 project_maintenance/models/project.py create mode 100755 project_maintenance/report/__init__.py create mode 100644 project_maintenance/report/__pycache__/__init__.cpython-36.pyc create mode 100644 project_maintenance/report/__pycache__/maintenance_report.cpython-36.pyc create mode 100755 project_maintenance/report/maintenance_report.py create mode 100755 project_maintenance/report/maintenance_report_views.xml create mode 100755 project_maintenance/security/ir.model.access.csv create mode 100644 project_maintenance/views/maintenance_view.xml create mode 100644 project_maintenance/views/project_view.xml diff --git a/project_maintenance/__init__.py b/project_maintenance/__init__.py new file mode 100755 index 0000000..e23d082 --- /dev/null +++ b/project_maintenance/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- + +from . import models +from . import report + + diff --git a/project_maintenance/__manifest__.py b/project_maintenance/__manifest__.py new file mode 100755 index 0000000..9f13ef2 --- /dev/null +++ b/project_maintenance/__manifest__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- + +{ + 'name': 'Project Maintanence', + 'summary': 'Projects Maintanence', + 'description': "", + 'version': '1.0', + 'license': 'LGPL-3', + 'category': 'Services/Project', + 'author': "SunArc Technologies", + 'website': "http://www.sunarctechnologies.com", + 'depends': [ + 'base', 'project' + ], + 'data': [ + 'security/ir.model.access.csv', + 'report/maintenance_report_views.xml', + 'views/maintenance_view.xml', + 'views/project_view.xml', + ], + 'auto_install': False, + 'installable': True, +} \ No newline at end of file diff --git a/project_maintenance/__pycache__/__init__.cpython-36.pyc b/project_maintenance/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..be8f91af8044d6c438e514fc4b6a92a82d2c67ac GIT binary patch literal 195 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

=Gsn7SLy zN>XXQ5`7zX*YNvbR91FW%Cda;WRy&dE%OJllx1N?t6Pc2@zIjRQNuK>rW#4~VVVFS zpqz5HPHXE0uG`?nVU7T<%{2%9f$vj4>ZtCx_l2BL*^~Xx!GcEpFNBk5P-|f0k_N6M z=C83yz3xFp#~KR^nZ{e_4#0l|v~d_07nS4MNos?e(=pj2XLWHzm1B@6=MK&J4) z;n&;+u*A|iS+Fsi(*^y+tS9N5&B>TAJWA#aZpV&hFOAAhh9W6Jt{?62t+My;#feQn zDAb9{?uC2T9ii`hGpUr;cObp%Np%uWGAkga^D7Xf1s$#ug`VS>c_}atUP4G+M~Ebg zjS*t0q-_YJcK|kF8dL)T0j$y4&LvKUjb!1PUW2Xr2EsbR2Et7Q?2g88dJDh>(C+D@ zvQWBwDLE-C$KwqO$C)DinE0HMUsS72<9CFb&2ylj#<#yKoc+j^i_^V=vPq kOB!|U{6lPUt>}99`2#v{fD4{MLGWPrYG(29HoMvW1Ls_Gi2wiq literal 0 HcmV?d00001 diff --git a/project_maintenance/models/__pycache__/project.cpython-36.pyc b/project_maintenance/models/__pycache__/project.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8988166eb4c52a9d726ba3263aed381c5d74bae4 GIT binary patch literal 2349 zcma)8&2HO95a#knq-4pmB}aDR#CH0xwviCGXfH;Z!a<4vwHves0uU_-ma|SN@JC)! zK_u8G=jsRPv-A!2+LK?Q=%F)9N|qfZs0ttnrukZ$;Do*5-aD zt{>x-{fq)MV38Ixm&LlP$A)XfrfV|o2Mu&E-e_QOV_=;dZUr?aSg5f|jg6WL*r>5f zjRVdvTDN+M`)XZN8vZbpmE({{kjYA%0*^AuynxKpA0}5M^8qfn<}%P+9hhryb6`;l z6cj2Kri-C)b4S|GMLOU?K4}h%MX$V1Hm8c%50jiHeiHB=@Z1kEZml$WA;_hJD~G3D zT~@MOgvm>32I+8o*tMnOd5Ir$&yzLJ!^B4st?Qn5GV-I+;&@^52Nz*33`|`*KP7xO z_LH$}&V|Ql*`JzNMGqzZ`L3T1^L`3x`ta+1Fv{{Ye&7S7N!FhxIQM$LDB9H28;%7P zjINB@=rB`Pnrk(+(ejvF-k_MTDd?`rtw9Bhb5=C-oVhl4232Y#I8cQeR=TD%OHfBm zepf8!g7~U*M!?}2R7j@+(WMw*ut*u$c^Vk zv#9bM{{sG`Xv}-NHZ$(bb!?}6Q#ujuMHLPh9+ZAm6T0^C%Jxva{^nGBqW#u8W5CYz z*ITD-K+kJu#;Gx2qI0U#{afu!Kk2;C@QHc)N#zBO1!k=u3fj19h&8+sIno_t>L@h5#!Oac6}HSK zpS`P8y&JE;H313=N74@bEbxINvK_%sMxo#!oixGu<2j#fltAmv0j-yhhkUX!U*#jz zbeXt|*-h$#XT4w~1U7Cgo&9n(t2>p6E>-s$E>5+9HedrCtH=(!hBSEc3iHC#(}XNd zx5DOOh;@A7W~rRL$d7*q|IsEIGrY9P{dd-7>WiJKq9>i&$B~N0(guF)kD`21Kccqn ze6QMeNrk`EQHVPv?xVm~Rv>&C=2?*^c1c<|o`TEeS-OhLCbt(Akot`*Q_>9{Y|@^u zW{Fv38Mhlr)`c$P>tl>>_)G?*?G)nzkbSO-d1Yvuw`iiOut)h*BvdO4g$TY|`t!j&{ zunt>e%6g4;W=#Gox-Vv(g3G~1Ua%Dp5#w0MIfm<~XW|?S8nBEU(?qW-YHP?j9psrc zVj{SOh+3DOx1gZP|DMjwOxKv?M{3%PWUdWF*+|zeJ9i`qiP$k32yqX^q`d$K!Xd9k zVgw}2!%BFkc5Qv_|0t*bl zo&mWFVQreAEc!u3mTlRV<;3wJRjwRT_95j{4oSsTb}Cg#Du<*KUy{m!zT}Wp4m>3J z{=f0s)viUQg01QK`Y}D-{lEX&M@L7~|MlOO^40@}@vp|vZxr}xT+uI42t$}vqh|VM z&GN09?b{}`SyiXz`YvO;ny4lHBx9%Q)lzV* zL~YWatWEh-wP}C4HsjCK_V{~hv;J&tufG@1CPWgK*S!WP^?t^m3nqi9U^CcN1krAU}OpL$p`1?L-hzT)y%@C7;UD@BU{R3iZ*~m@b#D0vNt?WXhtP(5b zpeiDjsMSSKjdG?M|6HM37KON64^K;3muO1Y>S4Sp3t=fhZBzzTbYBYaKwQX;Dp$&8 zHBcVkq99i8sguut`kYFfJ$?F9xF=tHY3a;!)Ntw=7 zm9=~l*DE*g!s2copyEziW=16|g|JzW8_HV=E=Wdhtssl5$}KcxxvK11VM95UW*AUe z-B5`_v($`Ym5PE!9MmoZQYGufxK6+e>z8zsCxRlQToO~%LuJR!K-rfA0kqmw_KGYk zJ1WE|n&C~8mSj<3Q{m9!9ObT*CEk>Xf?_=s%8ggcQYfcdh~gqf^nYVr6dlJDf#I9N z@GW8bwy=CBa4QL63#ViGNno#I_$l1e!WD@dra!_s2}VfWu>1^aqvDI=iujVaT5>?} zDYTApYe!rYZheT6c!u_|zWwDO?5wRg!xF3DfSTV)xqJ7Qtk1^g9UjTmiO~Wz# zMy@AwpD9FZF9*e@ltEYwT6-J1`ACfRBXZC&P6M+;BQwJzNtAnY(3? zE^wP+T&~{oPKP3U3QK|Puf&18wP&zmT2WjkwH5j9D>NKSqUm^D{>V_ja-iRWTaz>s zZ+11v@^WrXV7(t`84RLT-WneoLk-Htv&ue0+T$!~k29n_7D;<7llE9{hDFjI^dkl0 z;(8WWL|U$7w2kvKn`UgZArHD-vA$tlbe4@D8#r+rC!VvEb>x^b%kr~$go|4XN9&FF zXkFCn4?lLaAOyC3v`gEgT9@~#d7@>0K-|hcj(TsvhP(oGvOYCdx}I*)t#|@!4XJA3d-x4yU>y z=V*NL1#L~_JWsaRH7Rl*RoxfKuE_n2Pm*zwL?aLwue*bg^8(C_B+En)lajeoiIZ$_ zWR@za<(}1%cT+w2k~Tf^9;$guUHc>NLWTqw=Q4}Ow=bJL)ZF`gw9h|fRrq>msAYuyu}VsIPOnCT0`&}**H+WNFOeEaKDnZAC5 zW!`f3G#$x6MB*Cb=qgsn_zE4T&0Y{GJFjEPgR%3QrD2*T`5+~(8*8NTpvq2S0Cvtq z_yS=~1Xx)&u9Hb&YLHfALR_c$a2c(qZ)cS4Y{zM4vR zNr;o$LO@zGF?sZVRAA(!^@ZoLuJBlOLb|kty#^FJXmL9xwO0~r@Q`4}n5gneOd(IB z$R#y-$y`aIu_SR)HuRJ1Q1x*XAh;=a61^Mf)D%B?`-jDcvjfQ=-i74sxiZypkUeLU zC%Fx&oZpGs{P5Rk?S0Wa`VrT^g`ks|iU~^I895siol-Q4gao2cksc%(D8*2k1SO`H z{E0%fT1WhxZ$^PcJQ1lhd6=-ysHhPUL`7L{kcaM1iE`Aa7B(=rTq~3U8sG)BLb;kR z7FDWIKwJZ(Bh)Bh43{g?}0)I@q%?Nqei)NmI^zCH5_T)=J z+;y{QyiTmVO;qtv7*^V(zt)4hP-ds6i{zKlkM1O9bVUm&uA3F3W0-U|g}G+Q!*3dI znkyF3>Y5i@6}w}cf{VCp06Q23xw(#d2`wZw1HJzD3I<1&;>C+)C?HqfENq zo4-RVWs;d52sUT7?!Arm7BhH^etU2waeWF`^rx`Q(bL6k%Bq8i(vOS6P(%6iFdup$-IlBH_oNkYDT(Yn^)gG^m#F=&~ z9t9f1HI8J8HE*CCzhPqDiONKKyknY1dmM9GV&aDRINo>hKhGNNiDe^v4Qs@Hu%dV3 zNxjB+DxR*)bijy}J?#-BaV)%dx;>5FN$fM(+X26Kx?<3nj)mSS^ma$#TxYwp?Onmy zzGZICv}f>^pT<+|84{Ti`3uua$}QGmPP^$1<@J1A)Ia#Zc5QS<1y3MYYLrLKauZ|asG-;y&k3>?U8!1Z&8Im%T zsa;miT7a~TTMk9AE=TAwl84+LmL!!XA12Qyz%d33;=rrY7Plvb@E&Mg%Ik?2o8i7E zPOW|4Q13pmcDW!+k^DYh>1Q~poYzgt<(Dd#7J&6}0$QG-^^pUBL^Sfy(Lg!r0Ck?F zI}Fx`wKLD~13VNxhr+Nj<`|^i!JlW&S)S#Y6ZoTh20DQBz!>UjTw`Vy_bD^M?X%oB zW2W&8l>2UGmz4WXE9fhDicN{U&*F++MFA&=6+G@{$JnI!-fAOVONxEd))|1dP1=Ff z{3gf!m4sZxI8GwdP9<`mv5o)JqiiQ`YWp}`bv3rrhLpfJEZ9vCWNW~?kw>%QCDd*5)AR1)!+YiJ+q*W2KS^H(;> zNe2JGIdJBOxM$NwJ3cyqJE#{{fO*HMxEVtx+Hk970+z^Ke~2(2A zPm_GFpQBINL3l|e^r7--l`5{5tMC;u;?FTc{uo8h>#CzcYE%9Nb^av^-|HQ^^7vUe zl+foii=WYx?M$u7e3zIkuC%Vd$8^yw3WK#k+MEH&9B2%3=a7-Oe;1-{pQleXa<#^B zk?2KNQ4E6K>qgA7eZz!ZGuH)9*5M!+4mbtDpvV$*0m7iRNfg2b%L!Uol@zWtt`S@r z_zYGB-UjThRT+o2aBpNldt1ijJCGm?JeQxi_)wQpo~9Ip`iEFhf2kzlB$w3 zVHt1Gm~NcAH7x%(^hCIf)^0%>zCjLaTk`IAiOcZ@GBdok#oXj}3rluYhu}XWL zjGg=w>L3qS$Cy7M^ivdSW=QGxmyvTc<9czuR>vpS%aZh;pW?A(n6#TZ9OTdEciYpy z;8D)nYVMpfkMC}UcAKM5ZsJV3Sf8u{5NRnPBk*w|nxZsh44Z>s0^Etd1ce)IbHy&9 zAAAXJq@ZN|Adp8PV>e4ZMZD)2m6S*v2S4Rg7Z;&5z^^o#lbgw<)}coCBUVY)n~i+8 zHWX2jFh=t4u&kD~@Kk@%JsxEX_QCu$?FD2eX6v%mHU-VOo_|NTW~x)WiZfi9u1s%@ z3Wse`H-)Wz#u52TOsgESLMpXdi1NI(ZCplQkNLa9-(axjw!bArdZ)`O?C<$qQQ=^e z(^bSa+cu*PV2!&j^d=tYS{|q{sIMtlof%3FJ@V0a-S=HckM*wTF;w7nKuI8FH`ham zc&r5@He=|n4uVtq*v0$;{{{X(eQH3a^mW<~?H#t4yk7Ww%|;;QqtyOaRPdSDUBe6o zj*w3V^j{09e7=aU?omFk4}{`6e&jy@hU5c2o!L6D^JX=1citAo+`Y|w*tSR{){^o# z1Z1#1#N7SuF%Nh5DF2aGN;_2UWr;9$c#l$1=RctU>;5z0fhznJs<&`O9C(r`vL@iJ zVte~{-X716;Fp7x<20wmX#n|z#!uoVX`g7P7)GAZn6$NgTH}+1pV62EOP! zdHzohwUdY4d++la(-%bfI~pG&d`{zs3Hut8xskuC@j=3`YJ7gh?r4FLw|wYkVi+ipF;lUeh>B zxT^8pglih#Lpap)KfmM(s?9a1wtC&Og?|HS*Uh?jx${xfOy^DgQJ$P}5@bF#9 zF)jY1_)lX}j~Vn)&9ilh`rr>ev)oHhdVSQJC*7Y@w+u?p&L*bZ8FwbJ&mBvq6Jrl~ zBi@*o^wOCmYl5ZR9m=6k`+R8HT##8-0B4=!5IxB&)KQw+5Zc?#9U?o literal 0 HcmV?d00001 diff --git a/project_maintenance/models/__pycache__/res_config_settings.cpython-36.pyc b/project_maintenance/models/__pycache__/res_config_settings.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4db73b40ad696a77177bac054ac92e700e63cdb8 GIT binary patch literal 1194 zcma)6OK%e~5Vm(W$tF$OLR%rEBIUv%NF*RQa6kyP2QE;dwkKb#?b=B;-CYOIZYx&3 zrBYA*A^as@IU#Z8zyUFKHb8kuIPyF^1sXAKb?kwN1V`jdfg{Aiw-<~Wh50MpErkSWC0 zwpuoWU2uX#5=I4Ko}kQ^!K`6pUsKj}a^U2alN+KbTGt*6ofe9=)7nn!h&88muE>~* zuIOEcZ0(8!gmtm9b#v=b!oJGK$>c~DMUqdT+R_q+u{#?=eaOPMX_V(^A5hbTLZei* zk0UtkzgBpseN>)2EKr5&-dwAhjEmt!t8&hvJhA7zKE><3B%7y+6x=yfoBJgcDwDc@ z7%dCfy&0j_xOV1h<50$>wgvQUeyHyM!+qt(U0pGC$P!{XcGhj!L*atVu$K#poSypn z5pqv>cgf6OkXbMx3yRqL)|#LfB}KDnU66%03l|tn5X3P!_|Gb;ja9KVH#LO~`Qm zUT)$ShyW`}B3LeGSp=TRm(HyzF~e3@Fg%lW%9N^48VlYA=iE!sBD zwDy!rWt6i!wf_o|u|gOlDA-nQm}*`mnS`m71>5=SK(g)MV0BZbJDAA5$MkA!Vwt9# z>n&@rWI*+8D{ot3v2EdobtEATye{q1b^G(2?O@O}frV6i*4;is+mGF>AL}TGMCQdC a`*+}+f96<9HiHSDFW>aSUIQCt+y4%4;AQ9l literal 0 HcmV?d00001 diff --git a/project_maintenance/models/__pycache__/res_partner.cpython-36.pyc b/project_maintenance/models/__pycache__/res_partner.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b6e3fb911794465dd1fab11486bee7d71fc8a807 GIT binary patch literal 1262 zcmaJ>&2G~`5Z)grcH9&~K|ps{iZv3EQR!{XjQ92kdBte7weB}ZKK5xQhtH%E*)Q3>& zOvu^m_F*;>GS;d+DP8R_k+(Fnt+u5L1xFZ^ z{VczhiZ>uC0X0Vnu)K~EY`KLM8PFlvr7Y+<)&(&aXpRri0x$46Io+J219bG_oX$z& z%xMC&Er_lIWi^PSiCacK2Ag@uJ71xbK%LjWU7xf-42iRAbOan0p|Y|8YL1ScoZ~q( zYrQ}T7FkCF@&#dZ40s`{Q>2l$K+{?hRuaK6Kt+Ho8OPD#RKbElZO3!6PlUHINElr(vkbPK+-_ z$k|Zl(}|%myb*`Tkv4QFG<1L)s-|Pph(>YBVcL{@04X|-ag<00fjUUO*$5{O& zBXD~xF5jKB+!^nECSH!i?96xtN47xsFwB>bz8slBuRmSX#^e8$@?vF{agY|*vo9|3bhCIA2c literal 0 HcmV?d00001 diff --git a/project_maintenance/models/maintenance.py b/project_maintenance/models/maintenance.py new file mode 100755 index 0000000..2815f84 --- /dev/null +++ b/project_maintenance/models/maintenance.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- + +from odoo import api, fields, models, _ + +class ProjectMainenenceType(models.Model): + _name = 'project.maintenance.type' + _description = "project Maintenance Type" + + name = fields.Char('Maintenance Type', required=True, ondelete="restrict") + maintenance_ids = fields.One2many('project.maintenance', 'maintenance_type_id', string='Maintenance', copy=False) + +class ProjectMainenence(models.Model): + _name = 'project.maintenance' + _description = "project Maintenance" + + name = fields.Char('Maintenance', required=True, ondelete="restrict") + maintenance_type_id = fields.Many2one('project.maintenance.type', 'Manintenance Type', required=True, readonly=True, ondelete='cascade') + + @api.model + def default_get(self, fields): + res = super(ProjectMainenence, self).default_get(fields) + print("self._context.get('active_model')>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", res, self._context) + return res + + diff --git a/project_maintenance/models/project.py b/project_maintenance/models/project.py new file mode 100755 index 0000000..f39e3e1 --- /dev/null +++ b/project_maintenance/models/project.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- + +from odoo import api, fields, models, _ + + +class Project(models.Model): + _inherit = 'project.project' + + maintenance_ids = fields.One2many('project.maintenance.details', 'project_id', string='Maintenance', copy=False) + + +class ProjectMainenenceDetails(models.Model): + _name = 'project.maintenance.details' + _description = "project Maintenance Details" + + @api.depends('line_ids') + def _compute_amount(self): + for val in self: + total_cost = 0 + for line in val.line_ids: + if line.cost: + total_cost += line.cost + val.total_amount = total_cost + + project_id = fields.Many2one('project.project', 'Project', required=True, ondelete='cascade') + maintenance_type_id = fields.Many2one('project.maintenance.type', 'Maintenance Type', required=True) + currency_id = fields.Many2one('res.currency', string='Currency', readonly=True, default=lambda self: self.env.company.currency_id) + total_amount = fields.Float("Total Amount", digits=(16, 2), compute='_compute_amount', store=True, currency_field='currency_id') + line_ids = fields.One2many('project.maintenance.lines', 'details_id', string='Maintenance Details', copy=False) + +class ProjectMainenencelines(models.Model): + _name = 'project.maintenance.lines' + _description = "project Maintenance Lines" + + details_id = fields.Many2one('project.maintenance.details', 'Details', required=True, ondelete='cascade') + maintenance_id = fields.Many2one('project.maintenance', 'Maintenance', required=True) + currency_id = fields.Many2one('res.currency', string='Currency', readonly=True, default=lambda self: self.env.company.currency_id) + cost = fields.Float("Cost", digits=(16, 2), currency_field='currency_id') diff --git a/project_maintenance/report/__init__.py b/project_maintenance/report/__init__.py new file mode 100755 index 0000000..cfaf8e9 --- /dev/null +++ b/project_maintenance/report/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import maintenance_report diff --git a/project_maintenance/report/__pycache__/__init__.cpython-36.pyc b/project_maintenance/report/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6a0ff6f7c6e03654cfbde38a0d05a07de2541f54 GIT binary patch literal 185 zcmXr!<>gBCJr&=|z`*brh~a<<$Z`PUVgVqL!jQt4!;s4u#mLBz!W7J)$^4QLD6GkN zODH!nGp{5yFEKAUHNGgdAit=@Pm}2uLlH>-N`@j9AO$9VS?lK)l<4QDl%hrK1h(1&dm%O=#;-N_W|EyAF=!INOF%IKy*j;=z=e#GB1^!@rfCy`qv*dSL=tW5ce0QygyGx zZg`&N6TbeW0!L@J!ss+lvy~Rwb}AJr*t7LstzW%utI{3Et_`(OBEPb2#ZxBpY_93Z&x?ZF2MVN^!@1P=rbLiUPi|o7@{vn&qu>?G#B}CCUUO(g2hp)Bf(C#aF8@y z;Z2o3lzAJ$xJgB(n;oNALI9##qq4PlTfcPQg#BOfzdlQy36vXM;Cn0Rsgm*I^_=(sA!<62mMuaIo~0oIH7(RO)2%XJwc`NyTWUx_}< zc3txbjbcXFzT0@4IaXcT4*W{VPS{;PymL175qciGstZ8X z0}}7qHl=ww=akwGr7&Ta8J@e8{Lw^4AY@!mlvo%cb4XGu#+40dx-?SZps?+; zG+%usbFMHLd(aHIYLdOz6bfd8XPHcm_3`6Z4=^&!ra_L7#R=bnt?vVAJAU~ + + + + report.project.maintenance.pivot + report.project.maintenance + + + + + + + + + + + report.project.maintenance.graph + report.project.maintenance + + + + + + + + + + + + report.project.maintenance.search + report.project.maintenance + + + + + + + + + + + + + + + Maintenance Analysis + report.project.maintenance + graph,pivot + + {'group_by_no_leaf':1,'group_by':[]} + + + + diff --git a/project_maintenance/security/ir.model.access.csv b/project_maintenance/security/ir.model.access.csv new file mode 100755 index 0000000..830e848 --- /dev/null +++ b/project_maintenance/security/ir.model.access.csv @@ -0,0 +1,12 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_project_maintenance_type_puser,project.maintenance.type,model_project_maintenance_type,project.group_project_user,1,0,0,0 +access_project_maintenance_type_pmanager,project.maintenance.type,model_project_maintenance_type,project.group_project_manager,1,1,1,1 +access_project_maintenance_puser,project.maintenance,model_project_maintenance,project.group_project_user,1,0,0,0 +access_project_maintenance_pmanager,project.maintenance,model_project_maintenance,project.group_project_manager,1,1,1,1 +access_project_maintenance_details_puser,project.maintenance.details,model_project_maintenance_details,project.group_project_user,1,0,0,0 +access_project_maintenance_details_pmanager,project.maintenance.details,model_project_maintenance_details,project.group_project_manager,1,1,1,1 +access_project_maintenance_lines_puser,project.maintenance.lines,model_project_maintenance_lines,project.group_project_user,1,0,0,0 +access_project_maintenance_lines_pmanager,project.maintenance.lines,model_project_maintenance_lines,project.group_project_manager,1,1,1,1 +access_report_project_maintenance,report.project.maintenance,model_report_project_maintenance,project.group_project_manager,1,1,1,1 + + diff --git a/project_maintenance/views/maintenance_view.xml b/project_maintenance/views/maintenance_view.xml new file mode 100644 index 0000000..1d16f06 --- /dev/null +++ b/project_maintenance/views/maintenance_view.xml @@ -0,0 +1,91 @@ + + + + + + project.maintenance.type.form + project.maintenance.type + +

+ + + + + + + + + + + + + + + + + +
+ + + + + + + project.maintenance.type.tree + project.maintenance.type + + + + + + + + + + Maintenance Type + project.maintenance.type + tree,form + + + + + + + + + diff --git a/project_maintenance/views/project_view.xml b/project_maintenance/views/project_view.xml new file mode 100644 index 0000000..3e6c764 --- /dev/null +++ b/project_maintenance/views/project_view.xml @@ -0,0 +1,49 @@ + + + + + + project.project.maintenance.view.form + project.project + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+
+ + +
From 5057288b39f930062a56ff156d8e51aa733b0ec4 Mon Sep 17 00:00:00 2001 From: projectsodoo Date: Tue, 8 Dec 2020 10:47:31 +0530 Subject: [PATCH 2/3] Added sum total widget --- .../__pycache__/maintenance.cpython-36.pyc | Bin 1397 -> 1065 bytes project_maintenance/models/maintenance.py | 6 +----- project_maintenance/views/project_view.xml | 2 +- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/project_maintenance/models/__pycache__/maintenance.cpython-36.pyc b/project_maintenance/models/__pycache__/maintenance.cpython-36.pyc index a2cc2819c93c3497ba55ca389dd6aece2f05b5ea..57c637e3b84d7114bb8557bdd26a0c6d87f02205 100644 GIT binary patch delta 105 zcmey$wUUF&n3tEUn(KW0EvAiJRZMIS3=9m#78B>`2(qNGq;RHi^|D5Brf>%{X!1)1R(+9N&*QUkbVvz!NJJF$igJRI9Z%E4gmVz6Mp~z delta 439 zcmaKoze+9#B}qlfl@3?vuHNfA}f+U zN4<)oS#=KjP*!E_DK25JHU|Xsl54<{#V2~32^8M>z&^=(H^=^9frSMqQHBaw!bfDW zgas-zBCW~BTCS#@b zq364*RQ+_4Tkb_&G}eQmb@7J8up^V>Ug=S$gzYra!BF`nRC|lY>Wd7YcY-x8T76@s;*zz#PPrj>B%ZmC7E65d3&nzL-~a#s diff --git a/project_maintenance/models/maintenance.py b/project_maintenance/models/maintenance.py index 2815f84..c3cddd5 100755 --- a/project_maintenance/models/maintenance.py +++ b/project_maintenance/models/maintenance.py @@ -16,10 +16,6 @@ class ProjectMainenence(models.Model): name = fields.Char('Maintenance', required=True, ondelete="restrict") maintenance_type_id = fields.Many2one('project.maintenance.type', 'Manintenance Type', required=True, readonly=True, ondelete='cascade') - @api.model - def default_get(self, fields): - res = super(ProjectMainenence, self).default_get(fields) - print("self._context.get('active_model')>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", res, self._context) - return res + diff --git a/project_maintenance/views/project_view.xml b/project_maintenance/views/project_view.xml index 3e6c764..7b99945 100644 --- a/project_maintenance/views/project_view.xml +++ b/project_maintenance/views/project_view.xml @@ -13,7 +13,7 @@ - +
From 12c27baff436119ea0324de15d8bbdd19e3906d4 Mon Sep 17 00:00:00 2001 From: projectsodoo Date: Tue, 8 Dec 2020 11:01:29 +0530 Subject: [PATCH 3/3] Context default maintenance type added --- .../__pycache__/__init__.cpython-36.pyc | Bin 195 -> 0 bytes .../models/__pycache__/__init__.cpython-36.pyc | Bin 208 -> 0 bytes .../__pycache__/analytic_account.cpython-36.pyc | Bin 2551 -> 0 bytes .../models/__pycache__/digest.cpython-36.pyc | Bin 1449 -> 0 bytes .../__pycache__/maintenance.cpython-36.pyc | Bin 1065 -> 0 bytes .../models/__pycache__/project.cpython-36.pyc | Bin 2349 -> 0 bytes .../project_task_recurrence.cpython-36.pyc | Bin 10171 -> 0 bytes .../res_config_settings.cpython-36.pyc | Bin 1194 -> 0 bytes .../__pycache__/res_partner.cpython-36.pyc | Bin 1262 -> 0 bytes .../report/__pycache__/__init__.cpython-36.pyc | Bin 185 -> 0 bytes .../maintenance_report.cpython-36.pyc | Bin 1744 -> 0 bytes project_maintenance/views/project_view.xml | 6 +++--- 12 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 project_maintenance/__pycache__/__init__.cpython-36.pyc delete mode 100644 project_maintenance/models/__pycache__/__init__.cpython-36.pyc delete mode 100644 project_maintenance/models/__pycache__/analytic_account.cpython-36.pyc delete mode 100644 project_maintenance/models/__pycache__/digest.cpython-36.pyc delete mode 100644 project_maintenance/models/__pycache__/maintenance.cpython-36.pyc delete mode 100644 project_maintenance/models/__pycache__/project.cpython-36.pyc delete mode 100644 project_maintenance/models/__pycache__/project_task_recurrence.cpython-36.pyc delete mode 100644 project_maintenance/models/__pycache__/res_config_settings.cpython-36.pyc delete mode 100644 project_maintenance/models/__pycache__/res_partner.cpython-36.pyc delete mode 100644 project_maintenance/report/__pycache__/__init__.cpython-36.pyc delete mode 100644 project_maintenance/report/__pycache__/maintenance_report.cpython-36.pyc diff --git a/project_maintenance/__pycache__/__init__.cpython-36.pyc b/project_maintenance/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index be8f91af8044d6c438e514fc4b6a92a82d2c67ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 195 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 diff --git a/project_maintenance/models/__pycache__/project.cpython-36.pyc b/project_maintenance/models/__pycache__/project.cpython-36.pyc deleted file mode 100644 index 8988166eb4c52a9d726ba3263aed381c5d74bae4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2349 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 diff --git a/project_maintenance/models/__pycache__/res_config_settings.cpython-36.pyc b/project_maintenance/models/__pycache__/res_config_settings.cpython-36.pyc deleted file mode 100644 index 4db73b40ad696a77177bac054ac92e700e63cdb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1194 zcma)6OK%e~5Vm(W$tF$OLR%rEBIUv%NF*RQa6kyP2QE;dwkKb#?b=B;-CYOIZYx&3 zrBYA*A^as@IU#Z8zyUFKHb8kuIPyF^1sXAKb?kwN1V`jdfg{Aiw-<~Wh50MpErkSWC0 zwpuoWU2uX#5=I4Ko}kQ^!K`6pUsKj}a^U2alN+KbTGt*6ofe9=)7nn!h&88muE>~* zuIOEcZ0(8!gmtm9b#v=b!oJGK$>c~DMUqdT+R_q+u{#?=eaOPMX_V(^A5hbTLZei* zk0UtkzgBpseN>)2EKr5&-dwAhjEmt!t8&hvJhA7zKE><3B%7y+6x=yfoBJgcDwDc@ z7%dCfy&0j_xOV1h<50$>wgvQUeyHyM!+qt(U0pGC$P!{XcGhj!L*atVu$K#poSypn z5pqv>cgf6OkXbMx3yRqL)|#LfB}KDnU66%03l|tn5X3P!_|Gb;ja9KVH#LO~`Qm zUT)$ShyW`}B3LeGSp=TRm(HyzF~e3@Fg%lW%9N^48VlYA=iE!sBD zwDy!rWt6i!wf_o|u|gOlDA-nQm}*`mnS`m71>5=SK(g)MV0BZbJDAA5$MkA!Vwt9# z>n&@rWI*+8D{ot3v2EdobtEATye{q1b^G(2?O@O}frV6i*4;is+mGF>AL}TGMCQdC a`*+}+f96<9HiHSDFW>aSUIQCt+y4%4;AQ9l diff --git a/project_maintenance/models/__pycache__/res_partner.cpython-36.pyc b/project_maintenance/models/__pycache__/res_partner.cpython-36.pyc deleted file mode 100644 index b6e3fb911794465dd1fab11486bee7d71fc8a807..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1262 zcmaJ>&2G~`5Z)grcH9&~K|ps{iZv3EQR!{XjQ92kdBte7weB}ZKK5xQhtH%E*)Q3>& zOvu^m_F*;>GS;d+DP8R_k+(Fnt+u5L1xFZ^ z{VczhiZ>uC0X0Vnu)K~EY`KLM8PFlvr7Y+<)&(&aXpRri0x$46Io+J219bG_oX$z& z%xMC&Er_lIWi^PSiCacK2Ag@uJ71xbK%LjWU7xf-42iRAbOan0p|Y|8YL1ScoZ~q( zYrQ}T7FkCF@&#dZ40s`{Q>2l$K+{?hRuaK6Kt+Ho8OPD#RKbElZO3!6PlUHINElr(vkbPK+-_ z$k|Zl(}|%myb*`Tkv4QFG<1L)s-|Pph(>YBVcL{@04X|-ag<00fjUUO*$5{O& zBXD~xF5jKB+!^nECSH!i?96xtN47xsFwB>bz8slBuRmSX#^e8$@?vF{agY|*vo9|3bhCIA2c diff --git a/project_maintenance/report/__pycache__/__init__.cpython-36.pyc b/project_maintenance/report/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index 6a0ff6f7c6e03654cfbde38a0d05a07de2541f54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 185 zcmXr!<>gBCJr&=|z`*brh~a<<$Z`PUVgVqL!jQt4!;s4u#mLBz!W7J)$^4QLD6GkN zODH!nGp{5yFEKAUHNGgdAit=@Pm}2uLlH>-N`@j9AO$9VS?lK)l<4QDl%hrK1h(1&dm%O=#;-N_W|EyAF=!INOF%IKy*j;=z=e#GB1^!@rfCy`qv*dSL=tW5ce0QygyGx zZg`&N6TbeW0!L@J!ss+lvy~Rwb}AJr*t7LstzW%utI{3Et_`(OBEPb2#ZxBpY_93Z&x?ZF2MVN^!@1P=rbLiUPi|o7@{vn&qu>?G#B}CCUUO(g2hp)Bf(C#aF8@y z;Z2o3lzAJ$xJgB(n;oNALI9##qq4PlTfcPQg#BOfzdlQy36vXM;Cn0Rsgm*I^_=(sA!<62mMuaIo~0oIH7(RO)2%XJwc`NyTWUx_}< zc3txbjbcXFzT0@4IaXcT4*W{VPS{;PymL175qciGstZ8X z0}}7qHl=ww=akwGr7&Ta8J@e8{Lw^4AY@!mlvo%cb4XGu#+40dx-?SZps?+; zG+%usbFMHLd(aHIYLdOz6bfd8XPHcm_3`6Z4=^&!ra_L7#R=bnt?vVAJAU~ - + - + - +