From c5d49c63f4579d291b1954d34f31f22d64b4bbf2 Mon Sep 17 00:00:00 2001 From: "JAM (OpenERP)" <> Date: Thu, 5 Aug 2010 16:08:45 +0530 Subject: [PATCH] [IMP] outlook: improvement bzr revid: hmo@tinyerp.com-20100805103845-fiiiavbohbka01pl --- addons/outlook/__openerp__.py | 6 +- addons/outlook/plugin/dialogs/dialog_map.py | 2 +- .../plugin/dialogs/resources/OpenERP_Logo.bmp | Bin 0 -> 80062 bytes .../plugin/dialogs/resources/dialogs.py | 6 +- .../plugin/dialogs/resources/dialogs.rc | 28 ++--- addons/outlook/plugin/eml.py | 5 +- addons/outlook/plugin/tiny_xmlrpc.py | 111 ++++++++++-------- 7 files changed, 85 insertions(+), 73 deletions(-) create mode 100755 addons/outlook/plugin/dialogs/resources/OpenERP_Logo.bmp diff --git a/addons/outlook/__openerp__.py b/addons/outlook/__openerp__.py index b59f158e5e0..7a6d56b9e59 100644 --- a/addons/outlook/__openerp__.py +++ b/addons/outlook/__openerp__.py @@ -23,15 +23,15 @@ "version" : "1.0", "author" : "OpenERP SA", "website" : "http://www.openerp.com/", - "depends" : ["base"], + "depends" : ["base", "mail_gateway"], "category" : "Generic Modules/Outlook interface", "description": ''' This module provide the Outlook plug-in. Outlook plug-in allows you to select an object that you’d like to add to your email and its attachments from MS Outlook. You can select a partner, a task, - a project, an analytical account, or any other object and attach selected - mail as .eml file in attachment of selected record. + a project, an analytical account, or any other object and Archived selected + mail in mailgate.messages with attachments. ''', "init_xml" : [], diff --git a/addons/outlook/plugin/dialogs/dialog_map.py b/addons/outlook/plugin/dialogs/dialog_map.py index 2cb9477d2a8..98dcc6baa2c 100755 --- a/addons/outlook/plugin/dialogs/dialog_map.py +++ b/addons/outlook/plugin/dialogs/dialog_map.py @@ -711,7 +711,7 @@ def SearchObjectsForText(btnProcessor,*args): search_txt = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[0]) if not search_txt: - win32ui.MessageBox("Enter text to search for", "", flag_info) + win32ui.MessageBox("Enter text to search for", "Archive to OpenERP", flag_info) return # Get titles from list obj_titles=[] diff --git a/addons/outlook/plugin/dialogs/resources/OpenERP_Logo.bmp b/addons/outlook/plugin/dialogs/resources/OpenERP_Logo.bmp new file mode 100755 index 0000000000000000000000000000000000000000..c8bb6091839f35a092455f2e783608d725e9c470 GIT binary patch literal 80062 zcmeI5cbpVun#bLo^WJT8b$1aakpx7-GAKbM2%;z;iV{>%K|xIHu8Rp1%8Hm!Frt6~ za|Bc{Cs34~?w-s9W(F|a-tFGqKlgp!r~93ns_N?Mo}Pi>dOk(-)?06Q-lyvQ)sx=0 zh8(-G-&YQhzrOs-=ih8jNAUkw4)`U%2OMy1{JJ@b|CBWB${jflIP%XuyVpKk*QZ~MWA5ClB{$Y^3anH{nz$5xsJW6k z4&*q{MjYq>IKs&9zN5CFdlVcwBtNQ0m%>Qb9?^|2Hnb66a?R#AkmEpj4s;A0dGVQ@ z3L;$!qn!(4hZIER$d6usO-=Zr=1S%`kmEobaiC-1$ez00BS)7VQV{D>5aAan5j4q< zO+KZvjrfvlHphV+2f}lpW8etmnLe$ub6%u#0Y@{AAfALDYOZ9C133<~5eGU9jx4{e zCa-I=Jc4~h1e3hTu9}?RI>&(=2lg@tIt-3%d%v-3_gLrrXlG+0>0BTQOeAl3VCgd@>yOBbj#?#DMNH?$lF z_Hhn$FdX@>-Mi0g5k(@ll1_QimCJL{XgP^2$AP`ZfwXbtKX>i^qG5M!`L5U}P20CL ze)^#t+x2%#W7+nm9kE@kd7%vMmH+-c`{vK*pRP9|iI`e(*~kju{OIi2l?2Xj-_jJP zXG`PXw>Fi2+EiO6l>FySN*Tgno@R@R-6B|yIt3dq=6$Jz1Q&cAzPh(JHDq@w-Mg zVA3g1#1q2jIl2_Zjv7%4wJVm_GSySwr!WQ9KezMJODcyQUCLmU446>VGcxXk(s^^M zZdp>Zc|!xZ5T+?x=H3;x6DL<(G{5TlYj!NZz4npSbuT@;^W%3LQ-Z?3KHqcA)jK-p zM<9mZX;Uljysegsw&iRkZn|#Kk%NnmJ9hNGaEu*2YSb}D|IZg`FnRW@nIn!Go|1T4 z9(LprH(q=7e}A6giyaKQ^uh~<4>>YrU$(%QQ6ndeKmNlvHwWJ=NILQO<3^7-##T(0 zU=-Y}$5*ckZZNx7L*dAKZ#FKvy1KZyR6u9!d+OoD=dtckNtp z`?8|Kf-rsAGRKcSHnwexvmI|5lCHbzih}$+TPs=O+u#1yNhgeZ`?U?;M%peX1&$!7 z-*D}Y{)3P;n5bfmVA>?!|Iq=1O2LSWE~>g>;f{ruRg;)Cv+C3-W#h(`_3kT=wFR0k zg|T77$}YLMs@OyYBoRUapfLUNiUhVsjVWFCX#JLV8Xy284zF~G{P69@iId7ZnF&9jIJ)|Qv;~v* z-e@c~cm!l5@XPSToU&YyJq<>UDK8#chHN5=mBF&!{bJ|Mu1Yyrn0C^Ha^bMC_^2z2 z(}(U$LFc9oI}aBe5lDr}hA;tBgKLpqePY*Lvm=Xw$y1N6(TCOb1h46KffBIV935Vt#9bpA8Tj{b-@vZp>Zdaqn@N?P;_?p@B?+I z4?2HzR?9@nj|MEXf#8!TF;`2Nr9c~&i10RGO5SsKZC+7{&<}W-c}tH*7>N!T9DQeV zi#LB|v}w-l$^nC7U3-)u$93xw#ioNT!#Mm_QI+ zxF|6-oeN5edX!)uqRlgBRDM<;_GUS$@}{4E@^NHl-|5l*nHk{7%g;QSj85h@moAw< z&pYZ2axlmEcBH-NFJ_bshJbc6W%9||xVB?E(o=Bcna3Z=faX?KNrEFEHT55$FS^7_ zGC#@-ze`aG5vAd0pc02raK?;E6=!6&7+s*(VWp3)tAl{ON0F~ zAmi{6aUlXS=FX|AiiA?KzHHjPU_n)4o}1S`s4Am~vTH2Tgzr6oORv1taQ3VUCH2C2 z)%cHmOOnZMOtdD5V3ZoeqUiML<%opIs*sPsHDqYBsmLIRu%dWqY{QEUcivh%awJk% z1Xib1kpgrW%7%5pgO#m5*93|PFL`zDb~~^a766_0(N0$ z^{q?MAXF!kUz|{zUT&e4IBC{25iui2Hp7;gf~3UCLlBk#^wZ=-+q0^PT%wEO&A>t#pUMkyqC@w*$J{qc`}6u{mv zmpTTHu$s0|{2=nWj^jweE0M*$f{53|p}@2^5`ocijJ$)BGW=_EXXS1TBGQhL=jBz5 zL7`75FB%b_U3-Wg6j#~A5>!G^X)>T>Q-WDDD}`W#S*Dg$U$VF+E$j<^P(FC8aqtkM zJ&D0ppo+VYR}>>ZpdvJP?T!;lqT{5BAY-hkTNFoiK&{L!rNoibPo11u%W2iRVbN7z z|N7T~s&M|sAYPHvp}S4vDlfJBQM5} z!i7}1hV6TbbptPkbVL_MD2QwLdC?oLPeXN5UBgZuu@U4)2^;b4)R~DfV*UjZfs#-M zq~h4)%Ihlp-~14axI`Jn5i`jp20y#<2u9P1lY}j{Bf2Av%h^f1H%-(ZK`S~Iy=7er zVry2Vh&}PPlQL%?!4cm4NF~gulmxp9v>lGDzW?6ufA4!Lbm*@aM^@f>n~R2_MYxgLdIVY>-%D?=w9afT$ z&+UR3julri-%}R;06+|uF)Eyq#t7;wlAyd0)Eh5s#2=%JMW;_I2V#8N&n%O$;4XzF z$b$f@5N3j6iiea2w?^Emxohz%+&&<6?%dQWUU0MCtNRF!cnJ%c(?&Q#NIPMv7C2NY z(Nimo5c!^g0OcK5$G{QvYAYV=bIcqg2PbQAAcJ?nDRY?cUAiiWn8|Fy?Fl>|Gp0Ob z==xKS)psJc%?R@X3barZ?b6zw4X$~BL&c_m_eP1iN+8o&4SiAU=@7na25zhHsP z0b_cI+UL?+0VZJ!@lnL-hO7=l*Lo+TbrBMqrwBHGRKPx))zM9TK= zBT!|SW8eIdBZkJ-KOa_r@-o4jgArPh5pI}371$CXB;Q-onKS7WQHWHKG!-KRzh(VP zgE<^=@?6uKUVg!1ht+7Di68#p2M^u5(pxdJoDP5^tW}ryvoTo8%P?_}dGW#_I{eMp%eo6Acq_yJYbWfuXp8hDj(mGGStw zZ@-u=2M-qcMJBni92x#lMGh7L6Z*B}#+ue+iis<0W{6RsA_d)}EAI*d$G_cZ!|J6j zbaE`ZYKQMwGS1B5h>LajkAC*kpMoP6IGmV5CQ)G%$DiP;)tb`|fFs0%$@6ETDlCZT zLy18#gQ(M#{Caks`L2~i0^)5i@BIAeisiUMQkx#ekB^6kQBj2p>f*<7EqL*zWZl~O zu07S(YosBwnz>h>Xr*7UJRz+oPgWx+9f|0qoLTosJ$_jt_gH09&`mI5F_9SOv5E=C14`g*>N)&TQ}4r!d(~(+B8Zu#x456i31M5o?u7m zE@UE@V4;e{|9-jWh+#31V#_=JQ6YG;Pc%CZKoxHS5$p2V9VQxP^^lVx!Rh@KM|9eQ z0^#G(-gH@y7>BFer9kr07rBbdw+e6c?9F`4}FgHmnZVV`E6n! zfsbqjBH)z};}iXgsRCsxC8N={G=$$kiO#*)q?2Wd?MV~MQ?5*7Geogvnz={U3Jrv% zB4WpH$M z#-#AV#KYq3QJoYr0}CQynjK`e7ZN0r84ec2P(bdxyB5tNU^^0R`Q{}UBjTpk1Pvv9 z`zLjdAX#Aeq%TDr{eALLe-{s%m9h7NIFdxli(uw>@frV;u3@s;h$>1CT_9eaIim`Z zge{R+Fn#|De;=@He{J?p5=b>*M7G9N&;tZ?WnCRmGJE0{G z%imJyOq6XWpk6>hdNeW=i3t-con@Tqhwra1><;MYZj5os!dbvKz3gUDi$D;DL;ENx zgO4l)N9rqgWAea8Q{%TaBx;ug`x~W(il%OC@+p;Ah<$s>ATuS7OgeEq@9OI4-_t#I z#7fGxf6N9v1az^*$ty2Bn*n(#s|4VPzRaD75S#`<6h!pbS=d~WpYMF<+blSGck?SL z2@78!7)R0_g_CS=`WxT)#!r9plkwxmKD+Kw`sE0qvl&N_y=8hx;8|P}F^{9n>fy(f zW$|%zQbSnEgozcrKjkf&c=}10xf;U{;wkZJp3&$wsf8a38HaE|uXtD$YdZb}1E~gpgcSrL_lRX{du@6Tz!9B1 z-e)m`obP@2yX}u7&=0Blo08^$VwMliGDrunZ+Iz#Efl>EVK9zpr_QcZj>Wftx1ECy zJn-TB?y30uCti{?rx{0XyuL=>W{#k2^DN5j>d`yO)?3M%XiYu_!rAA_5;(e6V<(-O zP!17ESeT!(@x{h2U~z<|1`Uqe7w=zLiz0yg6Z1i`c4Tfl4KxBJ5jG`AR-XAxd7b2l z4B~7qh^>9tU)P|Ke}1;7M=$9@aK~sILx+_G3wP*xLY0E4k<ocdy`x?{vyI(=x#(zWL2>jy(FP)>|%u zaU^4cy%nL{`KJZYnAi>9^;GC-Gman_8@*a4hCO%|N%M3DZ_MS}beK#e0(5vY%^dMv z37Kfv(Pb`MDa+4Xn-#GT*~~i80+dvu%j~SXe4$J&c3n&621fUxfGQDMozrt?CskD# z)ZKU1iZ8}&H!FZr7(MOu3h*M?c;}pBL>Lhh1a}Zg@CVz%xMo*BSnmv+yXtJi(U z943?b!<^^ow|b3C<^+)8aZq{QHifMb`vt*TR+YGJksyW0BMNy&eXzbBip`vfc~ZPT z&bg`$aurL2gtVHv@fM6-+4ks75cZPz@P)98-un+M4G2QN`6j!@Prwcg;)7MTS$3Re zDVzDg$~uNaUBg3>?@0GKJmwv^ zt&&zEC5|}fPsZtvh$GHv<{Y@qC!uK!w0MOw*n~;%RQuqF9fH#AJk=b$Q7$NH#t{fL zI}$gCNGOzusiGkI=<1}Rds@$;x3Ce^4GJU_d+k>yLw@wbmJt&KVwf*Tuzn7+7`e)RMZrV3}f z;nRFgE+G`On9tff-cwgo*acXGLKS)Us_P^!LrHaGTfv7?QSI3108L@|h!}HhU~v>5 z4dw|ozDmfs)J-^F61u>wS*dWOVb{Bx8!0xJcDgqJb@rh()<5I(V4d zwS3lDm3-1v?L-2Lf*nS$i6di-J>R`<(@sr!Pz-kr%V*dVV8{`J`N$UEzGA0%Od&dU z9S&)40^jx<8(&VB|CDc29I>RzoiKmN2BP`wx?+dW0!N6CkT;>xnkh{rss*%FU! z-%d$mM@t;Jq*5bNFQ6o3E^2e9hGZ`Wn!}|2>(LJwAXM%KbS3B>Zi+(QIAz*g3JG`~Pk=I_1e}dZq zB1}$sMtM?S-&S%?wE2f(n zj3Yc@JcSuVKxtUi5ygZ4@cZA>2s^5`zu#A9PWZU^VAioVZ`n(c0y%3QxKCSa zfg^mdif^o#X{PUXV|ozrL=1j^THycmd&x>G2Y51@fYD35Q=32&ak@6V&EjL4NBjt1 zCQrQZ&D&T`AG+U1m?vCiT#igA@g^4eR)6r?Cy#M*aCR-?Y`wGZGSK?El>>4M4 zm>0z+I%7r!wpcb3;?#5`B+-#TNkJrF*$Wh|y03oB7!hHpC<2Axh(Vu=s**Xd`CxcF zjz%C=1RvFCj5rfTAPTd1I$(f$DJ71aeA0=S-)hSu=^l0EQQmAHzPXuTO7>pe`1~^| ziOHZqa2y)5B3n43v@yqMQ|F=Ut*)o2PU(&!431>wJ6K!Zdj0yVuSEZ12uiJU2&DD& zoU_ir-vBNCXNS zqsiJfBb6}mbk?Dx`EJ6Dq)_qqCL;Z%M>DsXt_DOzp&-FW(Zi7KDue4Mwynv0RY#zN zKr-4__pmBWa8iT?)(u^e)FP{GLLm;_OD?IVIwXNj0tet11 zJ&qoeog0@7NA!{6fouIf&xEx8{AWMo1DY=OX63Yv4p6@>xBf4M-94o7oWBA4fiV=S|BTXM(AyvvK=}@1-@CcE%BCvrwo6J4Znpfko+e z;|L1>ym^((Ly`7H(TJNZc*(O3qOYkhEk<|?i=9;j0eM%O9tB4`cc+SJVx zCvG}>)|T6Dsfca!H*f^BeEzxfe)a2dBS$^I=<0@&tw~wI$6N?Byn5kfnEGgq4Q>h8 z8-46Ec?HX!cqEj~IDiIwsU2{{_SF`N_Qw&74z7vEsZL1!O*g`|{c(hyWnDDe5$O>0 zPPuV}Twch1TYMy3rngbKONeyH`VGdNX;7mXL{ym~lMNQtL7VkX+qA*bPqudHd0jcc}-yv2xG3VEcq0}{_lVHJ28VL|8O7Qrat($zjYee zo_u6Ao$}#(SG-U_BgroD>^`#UevB8i@B5u_`(U+R9!W++R`S~)N7y4C!>8qsGoh1k z)jccH8e03~2;@OF)GEQQA&{x````!{h`BZKNP)7|N^1#ZwY)(J|S7pFeE-hcSlpzc~axgfe+Ol^TlACQd4QDH_LqeI*=GwM=P&;K-!N7Y%Y=EH&pRcf8CSyE z2k%4508{YHJ@x1sYee8#L}qbT#Cu0;&K%z~n+8puaMEGDdj;&c!+z+$`Sq_Lm}2zq z3NEk%(L@eMTzr1}wGA#7amq7bf7h*f$W5r)nDA_J@x&uOv0=gEPj;0!_p{{VTh0C&?U9b~R)pV?vwqVn|P6rSAqtbc)xo3kZIlaa*CrqMyx2|>) z+Ue(f29j|;S>x@GBRq{x%3W#Rmr80<9O3f9zs6VMb}8UPGe$Nkl-TWAGpqUJZL*=J zmCr^Y!-kg`XN|}^;%pW zYpAt0rB|K52qek}X+0z*pKqxm~ zgmaeHH2Y<+L6%a8-b7|HJFBI+9pn-ANg~E1v(16p**-#uJ>2t+Y2jBm`y}$Y}SmH?(6&5JLK_fxwU?()Dv>xKJF&-Qwg>`=6>cK4Vy~^Sm8dnpH zs!k^OD%zuWBp_D8x2b(9lZZ^;03>@Sya@#e@_nB?=e@Kgotac59@Hf#qq*P_D9FzX z=nhMbmvv0n3(lKOExI^&=2==G8IEW%ep|nfYYAP(C{SXEiLh&Nve?aJP3=?p z|J>6^sGpPd%6DguO*=2yGztYq6W#{C#Wa(`wmdmZc%C!mL*%0m&|FwFVN2R}oH<|? zTc5jFhq+|#>~ko_W8}2&ro<6;KYr}t2k*Q4&bB!2z3Yyf7hl)^@V*e1(l+cGk)9^Q z5gJrBBI%%$q8NrbP)XRq^qox`+3Sn|T#QF|-g5Ir^UfbV;uz(yeIGdQkzUeY`tqeS zATt0*bQIvo{VSG(Wns3qM22NcZ6Rap`wWMrgP77++;J;+ADf*LX^FQ9XFh!?wJC6f zLVW*0Kl^AR(?AmmEdfUc7Q0un2aMnM(gL$bp>Yfef|!H^gN-?^oRulQRXR{6&mvlh zlj)jv{_4Hq*Zy%8os)UU3xOGa;BS6S4p*JEY+7sC0-O>;0*kO^puAXHuU2<8qNit0 zpUTU}$yJmfwppc3%rQ4zw+KMASCiq0ZJ&^K3^!BT-vWI!SqM;HY*Z;+RD zZeb3jJiPlDrw%^oAk1OxQDj&8!aXI`#dE!Jn#qpJ8GIruC63TX_5d9?pJy=3=*^|iBRRvCFjWCs&6FJWUthL*7;KUuBd zd={!AcZg*~4p|i5+LD^DmwanIzIv6DfuII94xIy+U3#(e66s_(Ld)8b?YHd`I+nJO zN1R;BjDBrFS)sqKc5Eg#a(rqo_J%o4i6csbtKW1_EuGGawq;Eq_^@NEr8%`cVvDlf z7T6(bi1E?p6^T^Re_-sTR1xU51)Jbo4ZZpZ5{Z9Ttf~^6BJxOKmOr~~d)!+IcC6uM zFf)Dcjov4{F^CU;U2q8w8Yih3{9X6Yd25~3N!u=*RWxlcX)#3#(pUWDPu72odx)2$ zw&}akP5_Q*E!(f2X8qT;-xfFmwYL4tC{I@1nGffgfvg60-sSM=lsMA*QP{CN$<|DA zG?O7*df^35veUp3sv&(09a@U)00eY00VXU<0Zp#EW(V5~rCd}>)EV)qY^12m*bs0; zx-r|GfFtapxbej-*j${$+ZWQe{p}{69{%hdawfPXm?2O@(1X0xqJM%f_Wn65ded}) z^Tit~ruUxm+77=IyJ68)=pcx)D9QATMvWI)+f4S9r^FF2No|yq8IBP3+eY*xYu3ei zieV(a_R7n>H#%faFpeZ6qm}vgvC(!=-`K#(MR0mJLS1oz~U7WY4sGP0* zJ{CBl)+=bX&1Ri`SA%q9`(lX(jyx}))5Z~P0;lZl%W90bMbr~LSZE6(3>+L~6T`_T zSDbTB<%RRB&p)qn>Qvc@qqsO$AUkw4n^y=$!63q=)eqKn(2z4PLzCs8K42KfFH0;u zTV`QN#aM_@Jz061&qqU8b7^m+K0tbEGc|z{1ddP6r~F^(cS*?zqVh}Sl4zuqp|C+Cy*-|>={G6(ZBNRC!qnwvOXOJCxI!l2ZyZR zH``~JOU4@FDATQHbi$;H$JW#%s<>#%ow_){TL`xz(*Pd`aome#N<*Tl&c>@$kng*}ktuwwkg?1zqjhrl*A3Sn*Dw)Y#^ zDm^Ve{y#5_jzge2xAWE|HxlV!V?*=-!U5@eOS94!c_;euhlICM(dogpoMb5wvkN6F zICu%8ntGA5^02nPk&oYf%MKw-V%U*Kv>W}1cs;szQg9WV zl)MRXW1|Y~-2)o1Qv!>@1iP-{-fknZv276`$7Dm|aQWI?G_>**93euC?y^1*9Rf-# z(R3MX8LQ*U;Ydy<%5fmaf!1;$ha;`!U@PA<1jk;YbcgavaEUptT%0;Qs*V CdP', ':', '?', '"', '|', '\t', '\n'] - attachments_folder_path = os.path.abspath(os.path.dirname(__file__)+"\\dialogs\\resources\\attachments\\") + mails_folder_path = os.path.abspath(os.path.dirname(__file__)+"\\dialogs\\resources\\mails\\") + attachments_folder_path = mails_folder_path + "\\attachments\\" if not os.path.exists(attachments_folder_path): os.makedirs(attachments_folder_path) for i in xrange(1, attachments.Count+1): @@ -62,7 +63,7 @@ def generateEML(mail): print mail.lastErrorText() sys.exit() - mails_folder_path = os.path.abspath(os.path.dirname(__file__)+"\\dialogs\\resources\\mails\\") + if not os.path.exists(mails_folder_path): os.makedirs(mails_folder_path) for c in ls: diff --git a/addons/outlook/plugin/tiny_xmlrpc.py b/addons/outlook/plugin/tiny_xmlrpc.py index b5153ee88cc..a6ac9081307 100755 --- a/addons/outlook/plugin/tiny_xmlrpc.py +++ b/addons/outlook/plugin/tiny_xmlrpc.py @@ -26,11 +26,11 @@ import os import pythoncom import time from manager import ustr - waittime = 10 wait_count = 0 wait_limit = 12 - +import binascii +import base64 def execute(connector, method, *args): global wait_count res = False @@ -119,7 +119,7 @@ class XMLRpcConn(object): def InsertObj(self, obj_title,obj_name,image_path): self._obj_list=list(self._obj_list) - self._obj_list.append((obj_title,obj_name,ustr(image_path).encode('iso-8859-1'))) + self._obj_list.append((obj_title,obj_name,ustr(image_path))) self._obj_list.sort(reverse=True) def DeleteObject(self,sel_text): @@ -133,46 +133,53 @@ class XMLRpcConn(object): import win32ui, win32con conn = xmlrpclib.ServerProxy(self._uri + '/xmlrpc/object') import eml - msg = "" - ext_msg = "" + new_msg = files = ext_msg ="" eml_path=eml.generateEML(mail) att_name = ustr(eml_path.split('\\')[-1]) - cnt=1 flag=False - for rec in recs: #[('res.partner', 3, 'Agrolait')] - cnt+=1 - obj = rec[0] - obj_id = rec[1] - ids=execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.attachment','search',[('res_id','=',obj_id),('name','=',att_name)]) - object_ids = execute ( conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','search',[('model','=',obj)]) - object_name = execute( conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','read',object_ids,['name'])[0]['name'] - sub = ustr(mail.Subject) - if ids: - name=execute(conn,'execute',self._dbname,int(self._uid),self._pwd,obj,'read',obj_id,['name'])['name'] - ext_msg+=""" - File "{0}.eml" is already archived to {1} "{2}" . -""".format(sub,object_name,name) - continue - if len(sub) > 60: - l = 60 - len(sub) - sub = sub[0:l] - res={} - res['res_model'] = obj - content = "".join(open(eml_path,"r").readlines()).encode('base64') - res['name'] = att_name - res['datas_fname'] = sub+".eml" - res['datas'] = content - res['res_id'] = obj_id - execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.attachment','create',res) - msg+=""" - File "{0}.eml" archived to {1} "{2}". -""".format(sub,object_name,str(rec[2])) - flag=True - if flag: - t = "Mail archived to OpenERP.\nArchive Summary : \n" - if ext_msg != "" : - t+="\nAlready Attached Documents : \n"+ext_msg +"\n" - t+="Newly Attachment Documents:\n"+msg - win32ui.MessageBox(t,"Archive To OpenERP",win32con.MB_ICONINFORMATION) + attachments=mail.Attachments + for rec in recs: #[('res.partner', 3, 'Agrolait')] + model = rec[0] + res_id = rec[1] + + object_ids = execute ( conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','search',[('model','=',model)]) + object_name = execute( conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','read',object_ids,['name'])[0]['name'] + + + #Reading the Object ir.model Name + + ext_ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'mailgate.message','search',[('message_id','=',mail.EntryID),('model','=',model),('res_id','=',res_id)]) + if ext_ids: + name = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,model,'read',res_id,['name'])['name'] + ext_msg += """This mail is already archived to {1} '{2}'. +""".format(object_name,name) + continue + + msg = { + 'subject':mail.Subject, + 'date':str(mail.ReceivedTime), + 'body':mail.Body, + 'cc':mail.CC, + 'from':mail.SenderEmailAddress, + 'to':mail.To, + 'message-id':str(mail.EntryID),## we are use Entry_Id as a MessageID Because MessageID is not provided by Outlook API, http://msdn.microsoft.com/en-us/library/bb176688%28v=office.12%29.aspx + 'references':False, + } + result = {} + if attachments: + result = self.MakeAttachment([rec], mail) + + attachment_ids = result.get(model, {}).get(res_id, []) + ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'email.server.tools','history',model, res_id, msg, attachment_ids) + + new_msg += """- {0} : {1}\n""".format(object_name,str(rec[2])) + flag = True + + if flag: + t = ext_msg + t += """Mail archived Successfully with attachments.\n"""+new_msg + win32ui.MessageBox(t,"Archived to OpenERP",win32con.MB_ICONINFORMATION) return flag def IsCRMInstalled(self): @@ -189,7 +196,7 @@ class XMLRpcConn(object): obj_list.append((-999, ustr(''))) for id in ids: object = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.partner','read',[id],['id','name'])[0] - obj_list.append((object['id'], ustr(object['name']).encode('iso-8859-1'))) + obj_list.append((object['id'], ustr(object['name']))) return obj_list def GetObjectItems(self, search_list=[], search_text=''): @@ -203,17 +210,17 @@ class XMLRpcConn(object): ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,obj,'search',['|',('name','ilike',ustr(search_text)),('email','ilike',ustr(search_text))]) recs = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,obj,'read',ids,['id','name','street','city']) for rec in recs: - name = ustr(rec['name']).encode('iso-8859-1') + name = ustr(rec['name']) if rec['street']: - name += ', ' + ustr(rec['street']).encode('iso-8859-1') + name += ', ' + ustr(rec['street']) if rec['city']: - name += ', ' + ustr(rec['city']).encode('iso-8859-1') + name += ', ' + ustr(rec['city']) res.append((obj,rec['id'],name,object_name)) else: ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,obj,'search',[('name','ilike',ustr(search_text))]) recs = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,obj,'read',ids,['id','name']) for rec in recs: - name = ustr(rec['name']).encode('iso-8859-1') + name = ustr(rec['name']) res.append((obj,rec['id'],name,object_name)) return res @@ -247,17 +254,22 @@ class XMLRpcConn(object): def MakeAttachment(self, recs, mail): attachments = mail.Attachments + result = {} conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object') att_folder_path = os.path.abspath(os.path.dirname(__file__)+"\\dialogs\\resources\\attachments\\") if not os.path.exists(att_folder_path): os.makedirs(att_folder_path) for rec in recs: #[('res.partner', 3, 'Agrolait')] + obj = rec[0] obj_id = rec[1] res={} res['res_model'] = obj + attachment_ids = [] + if obj not in result: + result[obj] = {} for i in xrange(1, attachments.Count+1): - fn = ustr(attachments[i].FileName).encode('iso-8859-1') + fn = ustr(attachments[i].FileName) if len(fn) > 64: l = 64 - len(fn) f = fn.split('.') @@ -271,7 +283,10 @@ class XMLRpcConn(object): res['datas_fname'] = ustr(fn) res['datas'] = content res['res_id'] = obj_id - execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.attachment','create',res) + id = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.attachment','create',res) + attachment_ids.append(id) + result[obj].update({obj_id: attachment_ids}) + return result def CreateContact(self, sel=None, res=None): res=eval(str(res)) @@ -345,7 +360,7 @@ class XMLRpcConn(object): state_ids = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country.state', 'search', []) for state_id in state_ids: obj = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country.state', 'read', [state_id],['id','name'])[0] - state_list.append((obj['id'], ustr(obj['name']).encode('iso-8859-1'))) + state_list.append((obj['id'], ustr(obj['name']))) return state_list def GetAllCountry(self): @@ -356,5 +371,5 @@ class XMLRpcConn(object): country_ids = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country', 'search', []) for country_id in country_ids: obj = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country','read', [country_id], ['id','name'])[0] - country_list.append((obj['id'], ustr(obj['name']).encode('iso-8859-1'))) + country_list.append((obj['id'], ustr(obj['name']))) return country_list