From 287a696856025e42e6202653f34946d9a600a554 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa Date: Mon, 18 Apr 2016 19:20:01 +0200 Subject: [PATCH 1/3] partner_ref_unique addon and change description icon --- partner_ref_unique/README.rst | 34 ++++++++++++++++++ partner_ref_unique/__init__.py | 5 +++ partner_ref_unique/__openerp__.py | 30 ++++++++++++++++ partner_ref_unique/models/__init__.py | 6 ++++ partner_ref_unique/models/res_company.py | 16 +++++++++ partner_ref_unique/models/res_partner.py | 31 ++++++++++++++++ .../static/description/icon.png | Bin 0 -> 11429 bytes partner_ref_unique/views/res_company_view.xml | 23 ++++++++++++ 8 files changed, 145 insertions(+) create mode 100644 partner_ref_unique/README.rst create mode 100644 partner_ref_unique/__init__.py create mode 100644 partner_ref_unique/__openerp__.py create mode 100644 partner_ref_unique/models/__init__.py create mode 100644 partner_ref_unique/models/res_company.py create mode 100644 partner_ref_unique/models/res_partner.py create mode 100644 partner_ref_unique/static/description/icon.png create mode 100644 partner_ref_unique/views/res_company_view.xml diff --git a/partner_ref_unique/README.rst b/partner_ref_unique/README.rst new file mode 100644 index 000000000..7a8502323 --- /dev/null +++ b/partner_ref_unique/README.rst @@ -0,0 +1,34 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +======================== +Partner unique reference +======================== + +Add an unique constraint to partner ref field + +Credits +======= + +Contributors +------------ + +* Antonio Espinosa + +Maintainer +---------- + +.. image:: http://www.antiun.com/images/logo-b.png + :alt: Antiun Ingeniería S.L. + :target: http://www.antiun.com + +This module is maintained by Antiun Ingeniería S.L. + +Antiun Ingeniería S.L. is an IT consulting company especialized in Odoo +and provides Odoo development, install, maintenance and hosting +services. + +To contribute to this module, please visit https://github.com/Antiun +or contact us at odoo@antiun.com + diff --git a/partner_ref_unique/__init__.py b/partner_ref_unique/__init__.py new file mode 100644 index 000000000..6b49297d7 --- /dev/null +++ b/partner_ref_unique/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import models diff --git a/partner_ref_unique/__openerp__.py b/partner_ref_unique/__openerp__.py new file mode 100644 index 000000000..9a611b5eb --- /dev/null +++ b/partner_ref_unique/__openerp__.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + "name": "Partner unique reference", + "summary": "Add an unique constraint to partner ref field", + "version": "8.0.1.0.0", + "category": "Customer Relationship Management", + "website": "http://www.antiun.com", + "author": "Antiun Ingeniería S.L.", + "license": "AGPL-3", + "application": False, + "installable": True, + # 'auto_install':False, + "external_dependencies": { + "python": [], + "bin": [], + }, + "depends": [ + "base", + ], + "data": [ + "views/res_company_view.xml", + ], + "demo": [ + ], + "qweb": [ + ] +} diff --git a/partner_ref_unique/models/__init__.py b/partner_ref_unique/models/__init__.py new file mode 100644 index 000000000..0b15881ca --- /dev/null +++ b/partner_ref_unique/models/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import res_company +from . import res_partner diff --git a/partner_ref_unique/models/res_company.py b/partner_ref_unique/models/res_company.py new file mode 100644 index 000000000..5b0909de9 --- /dev/null +++ b/partner_ref_unique/models/res_company.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import models, fields + + +class ResCompany(models.Model): + _inherit = "res.company" + + partner_ref_unique = fields.Selection( + selection=[ + ('none', 'None'), + ('companies', 'Only companies'), + ('all', 'All partners'), + ], string="Unique partner reference for", default="none") diff --git a/partner_ref_unique/models/res_partner.py b/partner_ref_unique/models/res_partner.py new file mode 100644 index 000000000..13b3284ef --- /dev/null +++ b/partner_ref_unique/models/res_partner.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import models, api, _ +from openerp.exceptions import ValidationError + + +class ResPartner(models.Model): + _inherit = "res.partner" + + @api.multi + @api.constrains('ref', 'is_company', 'company_id') + def _check_ref(self): + for partner in self: + mode = partner.company_id.partner_ref_unique + if (partner.ref and ( + mode == 'all' or + (mode == 'companies' and partner.is_company))): + domain = [ + ('id', '!=', partner.id), + ('ref', '=', partner.ref), + ('customer', '=', True), + ] + if mode == 'companies': + domain.append(('is_company', '=', True)) + other = self.search(domain) + if other: + raise ValidationError( + _("This reference is equal to partner '%s'") % + other[0].display_name) diff --git a/partner_ref_unique/static/description/icon.png b/partner_ref_unique/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2d8a45c39a9b63943bc91733947e8c6a99c9babf GIT binary patch literal 11429 zcmW++1z1z>7ans%I!8AQL>M6@NF&`XUBc*)?gnWI0Rd?lB`6>@8bqWKL}GLgq@?@5 z-~ZWjcc0y7yWib8?>XN&=Y8X~HI)eQXz>650HKPqye{S({@;Ovjd|~rvL42qux-?o zLDV?3us%OpCjfvMpdv4; z??1nvACzk5=d&$+F@1P|4j6Y3npCdm8Ek^lxQwuc^K-ywHm!6uMV4H;YfXN_t93sR zX2#4ziadwFDoy+b`aB9a)OdeVLASkgBvH?-UW+%u=;pG{Xp@Bw(P*^a@-3PKYxBV-DHS!*XemTIx-@`nXty^*}5=$dn?h<(0~*9)siGy5A#FI z_Go~+X3rCL6(rqdq~B+4PLg*6b*^+ekT>R3fEk}BRSriR>|lTLq^qkd@#;vXMy<>$JHJR8J3+A3I@1E;qcEIWIMtEmI&UF9!nS(tK_2MpI| zJ(X!VaYZ4FU^cmM9@+&<7^QSa(8a-j1_1a6JXo%(-c}9EPI*2jH5E+LkfzJVO~L9`9^-e zGp_-HfDv}v&DTLQK2ITd9}wumb9-w!LJfn)fK_hSa4)P%ONjy~y(6(WY4_Uj{<`c z_*wBXd8WxVPq$KEiOdxhs%$XbCc;JQ;sE|>E6{APe{00Ez?~4ujKe*Dp_!70K<9-k z-cPvwXx78) z|hn?^v_=xR3@x-_iQx>YUBS0Yf>c#?*vR zjUg^axRyJrX}`Gn8*t;~>MoM`cdJi5jBWUzSgTL9!XwO6v&uXn>BWHnY1<5&Gdabvtc7j6LKEb?Ys6tzU05g9H2cCwv%;v&2~=swwVO!<=(DauL=j z-~E6KG%|E0IQ9F9F2sa4`yz9A(=x8)vS@osEnS|O#E5FuPk8wGQTW2B7mtshM}pj=|4z$a z<&Iq&>I`_cs#ogw@+YMnydsH4K@`Ni|IXI6@!^3uGgWUCbZ&iJFAX6I@;YYEg4^be z?-cF3_K>bBD^6F6g6v0=qZZ5+)2;d6sa;T^DkRau?D5W3fKAUUSsjSG^W%$cfyD9t z#of~dO%0jy+ioB8uCcFwmfd|0oFJGFn7A&}MN6TYhym?7B`pZNBF9`)@jW^W{Jx$v zo}Qu1$MpbwWV7+T!Z+y5>=`)l)fzaz1e5kaK&-%^pu1oNk-QMHqUPp{NAB|Qed!uLR_-kf)l%Cel{Y8bbO*z2up70z#9+x0jj_!w;LbrE0`x17d2SZjx>hi z$)6~fPdR(u2^)l8T?I^{g)qr0T8^d5=7%6wvh*wNooTX;d1v1e`5NlBC$?HEqj1;q zi>_Q!qPHp>8KE_63k&oa85zUc@IFqNX#$Vi%Qx7MAEWp7oXy-{UG#!wEA(RF32%7C z9;UDVGRmGrK3f{k)!r9-YQF#Qs+2jBc>;w}gOXu!t?p(#(MliQGz_UZsRA@U7nYXR z;>fV}_I~dmg#1f?$TFW3Wq4rIu-uH-DP+-QSYhFb(C4~};n=1%dO^kRh@e0A|5#hg z+jU?a7?@jGS&0a1V<9a%|Dir*8yx(xvr`K5T-mLWORXBL)(max`Ssg|%jFrzuA!!nNZ|fu1j?>8Q~UjV;U5?X!)Y zR63COejBO52G_it9Gb1It=!J>Mnh1}i4gt3>M42(N`@=qzSM4GwG%wreinV6smMvB}9QN zK3eM^=1+Kfrn`usyknc!CFrt1O?m7o>-^83D-~;7+1i2>bp9x`iRU*m(&iJ};=Jwi z_VKw=%~mb@kdt#P`Of5IHlEcCLSHnEf%Qj;fb^v$i|gxaUQX{BvfeXoMU`}AjtmT{ zK(aCh28i<(%xA=Wb|E1lA>Mv|UDkw_t}AxJ%QNW4 zM-hN{`QCSY?^W5yK8i(IQ}eVAt8V%9WpqEUs!U8w-0&2Oef#!qVU~No^!5_xj*EcsaBTJ3BvfEXl(OL?;nBes7 zR$s+}U+TFaaSUeJV{0KH#OIWV}4&xZ8woA z)YZe17{>mS(CB?bdtwYDm7#J%v^8G)lW6b7&xgNboUxCoYH*E) zb+|IM4KfP~7?DV%Nc54NF$d$j8=n+pt)QS_R8W58A3-x@P;Bsa#?T8D;32;Gv6%+Kc>i(-B{?c69WPk1o!7 zeltr)xS_`ugP?j|%;%oUD*-{8{7Uvrv$+yH(CHJ1;!Up$Q=G?~$9oTLMTjX?^6wP6 z;*|{fFO0{@xd7v=c*W9C=y*MBYkT`?_Hea8P^O$N)s*Li2AvLI*q0QH!)0^U_TA25 zVn|`(h@)r@{~1AEr9x)Zx>$i^!K$}O=_eFK7=Hju1)>d&xR(#tSd?ArXvo|1^{#7u zu6yA*KPog_Z)9Y|Oq-mp&LN)5UK7nk^!CoX#@;PAt=%vIjXPBDBA^guHfYOLlm3dw z>{Yif{TfUBl2N$7JiLfo847KL2JYG6{V~JJ?a6Qzhi!O=dI|OMz5664Wyzse1 z$4Kma=KWaq2=>vfW_vsdA6Osvl)?})8Et6QbxrxEo$B!iMBi~hrpw&M@5rIYwfX_$ zwTz0_tgbqUUyZ8eQ=q6GiVQUiC?9R|pR{&$j+eaId!j;nAz$polE$&ezI67w3CNbhPf@s2X1|1;!iKex5HbvYMx*ta23AK9|17O;K zJ?4(IjeswJfZbE~qkr;QPb@S}7UG9G#G9fv4P%U3^`iSLF$|svMfhN9<-$6=+c$2#U2> zU-y>_ZPpT#g zama87L6FKaGMAmm)Oo7Hr@8Gf3~YI;U$^q&0D(nuK*>75-J2K;P;G_6-R5nFDX-E8 z<$9R)n)qF)9!JD0Br{1rf9Hz75O~M@XtB6SqR8N7h4+hnDhEL5KZG`C>L`5gg^#zY zr%#_vaP3cNNx?qyw|XPCKA&^HPyu>;(&VvpK&V>gkL!l-d%-Yf1O5QCdRomRo!GXQ zr#|sK_%-m1K5P$M)f{Zf${|J}BgDhu9CJuxNiHMUtXVCYW1tP!6?w za1Ef}s~XmD_FmfLC=riNk!QDF&C9Z~w6ZO?>0lBlYc3*98R|j*c5co%th6GNvQ&s@ z>YJE|`9{w+;%X+F>ce=R&p1u0f(=VfDl9dQQ<>FPjU#ted%{I%xTlgU!dhINr?Ool zZF_h04RReX0Vc9ZLuZKPq!Di2Is&Ww$|`1+Yt`7x#KlKaZ zzp3hcNqtGhxyM_sYsaB$S4$mV^7C^bLw~F+VDxK_$>gB3h^Fv-X&f+{xZi(#%%YZN zuY?;Zu{%SaicY}ZiGNI^i5&-Gzu(`47*F?pGY=Iv-bjl&A@F%SD*|!d9d4G3)Lc8u z=jv8B*<8h#ZH^nWA7{E*CO{{ch>x0FRhBxcvxj3@Pvsv$St+8u%%~PUKB!i^?Bkz& zuTE^2GA*eReIY3KU3IJi94G z1?uAmZfirGqED!g#=5`M%PaRS)yTi{N=CNRIEwS;u3Cx9QQU(?&Z1ibg?g+6zS*=h zG1I?q^%NRo>U93#XYuQ$d>SCadvK$ij}Ma*7>Db{k%d2kk=a9M^Zk`oyL=CBXBUyo zMY|$hp**86$HxWorrrQZvl*hE-5)Ko-TpdsfiIuCrPl!xU{~h4?PrhEp`?V|E;MmR zW88tWjZYONpf`&z2!_kFo1VG8ljF4JDEtn)B zt@M&thbPBC)VPM1O>NSq{?8@5D4qKi^S%YoMUEzd?>LXMpZ7VnTZnQtyyhS3tmDPb zz^Za2rk9mzpchaeA1HGSi)qvaz3G5U%UCp4cZN-G6R9Sh$L^$nZ=qV{#N-4+W^HVP zO77I~AWIPGght*nz3Cdpl@o+*n~9X52qTzb_Q02rVhdPzlnJKc6LM%DyG~yy^Lu%%FK$N*Gt869u(dTGTyhG~6!NK~=pc{08{?4#m&xZY5y^qG6 z%}M_PxIJ^{JP+qBh`JN;XPc6%syc&=aGi{AZ;$AuANC~zM&$sp8P-zQDb{Xn*3rcU z%BUOnA3Bj(ImHM3rIIX>s?$Fnfu~tb1?IPSL_XqHB!loGWjHxm;@9SIs96(OS=DR? zj+QU~1(L~1ee(+sd5sIH>lI8Hfn1H&5#(CW;C`#F9_B*{Xpp0t?#hg7AmjM>LHQcq z=3jg-n*uhyQ$CF2d=8}!q}2x66V~pVT7002;Cm%-wV5WQ=Qw(Jo~aB?g<_^r zn4THanD&Hm+sqOWa%>CSZnUacNago=n%U}D9X5fQ7x{Zoz^?qCC%=EO55d89v2A?|fr~gZN$hEMmFUJ?+zy(g zLdo(?31hE+eiq6_uy_zf9TwJ~EpcqjH@~@uuiBD$3}$H*h!t4#nxfnHg~MDv=In!h z|79B%K$af;{zagtX6M0D64&nTN6fS!t_&k{h=$M4 z&&}nn2CUu_TP&)v?))Yl_T8Br3VjtC2(IUTQt&63VLgyb2FfY;o}f4`v%SkT%CWVY zBeW*?x-Ly>smuO@t^N%R8hS6|Oc zlJ)zTV|F!UZFBpD;e=(Fd(HQWV3s)hl0U5M?X_v$;jHzo&(($WaT6R6dKv_+)kw{K zrF3Y?FU~rnByIj~gHm&s{bXi975ZpWJ`3HiJ3RO2DW1Q@=rJ0|S1?j!N))+Q@5@3V`t=V z_;kEbr;vaIcgqNT7xz2=MN!l8)`G!Wg3(f#_BZ2rrUoKgNFBBLnVVUt=Ii_s&V+vy zW-)Q>HBQ}_icz=_VsdlLt#&s-p;Tx2?S(Ju-#woSYc}B%>Rlo>0CMx+e2xUZv1@;k ziukH{%5a*XampxVoq4LltYrF1Zk-#XtP|W>!ii~v8|9;XRacO_4QgBs#x=PDU(Nsv zO&qp;Z4rRFuOkP)L|4P3@i7(R00N&H(IE%qT;b~{1NAK1l+m;?p_4tXJm?i5bqv{+ zWdioPWhqA9)rWkJB5yhBVU(wM#e~X#QGfb8v_7$SImBR(PX1b2rbYDq$^i<}jQXXF zA%bEOr|=yJ=KnG#PcgmXk{|slDqz5D*<>L!l(*hj9CNpJ`4w$jUb3XQ7%v_YWV zV#JRU$^r9cz(fE`#L`1Ek$kI*Xl!`mW^WoAxPH=a7tBIUK$h5l8&iO+y{Vit$u2+c z=dS3_GGS8GC$BEs10uGtg?DNDnO#F#VU49_26DS1%^~%4+b-DJjj~JAqUJ zKZse?CU#>%q@D47td9269C2^1K3fx4S~{#@HtzFwmly4# z1+Sl#-#8z&=d4lKeoNdC&LjMlD)-q$+P)2lSt(JhhUdoJ4k*+I7cf^8u5lVNwEZTn zD$3k=n`c`-{WU1ehf`66qrP!=Mxw+SBj5 zvZJ2%+KY?%8g1f!Sdb~;JZdgJW{C61Zn31ufD-<#ex|0A?UjI72A8#A;tjcVjE1Cj zmwel_WTPMaz&gTJ)E8T_1eC7c2;2~`}f6~8Ct5XmA*17ogYajjF!-sA8ASSt*OdZWgiH77~;>pn& zcBYFRjTply*~sEkpBmrp{$%x%y7{6{B`jE(?{7+%3o=Z230Z2hC%C|k^S4Ve z&!DM_zrD(oaayKNUS+>7s{Q3jOkrkA`?}puv??--!m3lR9+zLrbfb<6{$Wgi0ab*9 z+2@xNNx?hGTrPA;#Xt8@UXJE$5%nVjjIAGhQ00rV#Dc&scz^r{w2Z_F}4k4w^ z-=U6wRG%*X_?xpS`U(Gq;>*EHRYbQBi>1gjbw6WWH}(&Qwpnm|Y-vfM;f5!Z)G1M% z-3PyT-C876L^)aYqcjia=lU8^Z8}Z~8oasMUpW&nv$5XQuT1r4O)ATsPkWMs9;?Js zkboxHqm=GL66`H3zkmCfV(;|2vdMA!@Mseli?%{(n)c3c>i5;>48Q-SUd>3kpvv%4 zd~GJ>GhSpk!u0lfI)E|gO;&%f!fIQuz|EHf`wIs$6%tZ#OEBlqW8Wueys7$BpFY;` z=X)K2FZgiQ`VU`XX+td6o2?v>LtTxBqv&&z-6Gi}+R$a4E>;l;n?1{A{igFsg?+%kHY$ zt%JmEA3re~veaxJM|VL$X28Y4YW~gtbcNuZq;&sn`tHjMRf`C_IdvY&fHQSpF)!)2 zTt(rmzX}P+)7jgxIb!MuzXzwe=ve*&yU;i7^EVi+t=gAgWk)q^2;-B)ak64uuzeSV zjRS^)NSn?TS~vImk_Zi*7+KTe+~pVsdiV*tmUL!(q?PKeAu{Pu%$QWipwV#+aSkTD zkiXm^G;Ik~BQyRy`&aKoq4Q$nY3R|Oo_d+8XbS3l6IrW}A8DWh^KzSC(*O&astnJ2h2)^{c`D!=S!gCsv)V(ZBz! ze^BZDB>pV~Q_rUQVOT#S@;3xAa-p1asDv3*W^f-%xGQSoBmjXxVCWrJ*AkeTSy#h5 z)N(`2=%S8vY?zD4_(fPi0+X~??7E(qci#^uIUV>3nj4Cn5wcgmrp*w{s=SkHGknsSq?u14t* zrgnS$85cEH!`Jw)??}%NX^NhZI;liQK&S6AZPy zH?@2R6NGtYD%+Rd1z}>Mqow0o&oT|Gx#O%`#J?Y!OZO(v5Rl>;_^RpIru~ZG>rA(nu^}0ji)Uz8fe@J-NVToKO@d7;FW zXm*HZK4_*Xw}dX+4A*mJ5Bo5NBOLLyq^>rW!?pwqTbVvw4r+zkxO0L43wiFHSMCR$ zHwUlWS~s)C2W;y0ErO=yin~`lFZbx0JJLXM7KpK&AneCBUb{$+U0~&R49ccIpFWU=N63d0ce%!iFFpT} zvg&WjYR;RTP1=5Ze5^!7FM8A%^_W=d(R*ijM_VxjVAOutc@rAE9CFcdnd~0C-gP+N zxTghCh{y1=92^|Cl0fH^+v1`TpI4`^jfgO_Bf$YmooWpVgJFf?T^L2OlV6=`*=OsB zeM8XUH`37Rk_kglRlTkFPYO13mxJW=u{~1!@~iQ~B-BH*!Pp2!Z#$`^DN7wd{$oL;@eBxENc!DiuW0 z>sjBjFILmi%?$j1hlZP~JI)tOOfA`V!lCuR0X>WCTBl)iIg?*6d+xWBbw%IqF+S%lG@sp{v~yk1nvv{{;RiCVpi(*VxeEz7SO0~`iN`iAq`rSht&PlWNPXqUQjfG%}MQ`GkkOLI4 zYlDlW0x*We$533a$qM!TP`ek_19YvGV`1eYqw3{lD0O`D`Xf`EK4c!0xj9Qk?2)A^ zV3W%(`E4>kpgT-k&#p(!MA9qBJGTWe)C}@2MtuqkQZb-1Nj~F_bzXm?1N%%{RW@^J3AoqNH^> z88YqfLkX{qNzf^esnPNE&d?rVRNzktVg2;KDn)Pwg$WPPzs8z&{knvc1b0Zj+76De zD@9NH`niFd*mdMdxT=fT66B3Y=Nifq-*tN7`?ZJB%~<{#u+jomV(2@JZ88RbKfA>U zhYG`X^$M>So_Af1-b7TMh2NaW0$=F@8ANZ(_(B}7j|Z5-_5};CM#2^`08lcUIcpB1 zVPrhNz@ptrNsq&x6CioLd=Bwaz|xjZ zH(PaQ0)={QX1PJIFhh#}(qw!LD?UwTz2iEPV)cR@c={cfbgmGvJpHnLJwXaPgQbgD zw`PrphiBULNqN<7Zy&Mr?R3y#$Awb2Xl8BQ9`7Z7F<|LstIYLEPn2}WdWtwg>Sk{I zehZQ3c0FYTYg*(d&@7bF5XiBeLTGR%$ca{X%qgdL*7En)tEdPXSH$XT6Z`YhQeY%yRkWNc0cLC9$^K}{cPAb^_nQGBO#}C`jMnHN zT_Y{y)!!2(YBj@9U)tLT3}T)e5qx1+!^_g%I}>~}lZ~bZi`Z0d{tAbS-35oi+v0@_ ztzO#h;&+qIvcO6=;HxZpH_fvtH}|otE8I;c{p}SWp1=Obx_f;i_l&s#^T~ z7s_CnLn?3d`r%-I-xd9CCX{}l>=P{}C-r@MT1lDpIwJ{N8(KHNc;f;czj;5rX?KHf zCy>)8ec3~NU%Wf7QNY)-jDs^lK$sO?E`5LejxYFMMq%*vMcBi|gHVq8K^-hn(0(j+ ze4B=rmKE{>zp}V!!6eh1OFT9H+dkeOx2@-D-*AB6S+Q8B%MP;aUZI+1EUQJ*XJ!MJ zghnS<``$9O?A5k);SYnVe58* z)}qghdEw&%>~Fa$D;5>me06oPSRVua)(xa!0CML$ULYwhS3FU)hlJpPF>{_(kJ&FG zRY7R>jBHIroolvvUYq}T=1Vg_V`)tJON#f~Z~yZ?$w3T)PN&!qmzJW~fa?$HMUyt? zZ?HFG*zIxG&Eg4ej@^MmEC2R8+s5{rtauCBt> z)m7wKB>Lmf>xa--Zwq^r)yH4=oNOIB*nzCWa3|jE6YzU=j=bD(c%+*|Xcm*`y+vdr z=QAm(`=6E%XO_|)I}^nN)oJa7Y?sNO0m;zgdW=xb{N!pp?7qu&{u?@~Gm$c$UqC=k zg7G5fT)isVZH@rS4Q5DyO}E+8~;LxuBW45OFdReQ%bJ=HZdrpsI!=Kik!7by>W zOF@SrMO?R&id6Ugp8$-sw)Xb+TK79j(z#%w15CKsGn4F`uk9inF~Wf~yH;01s~YD& zsu;?)t6A%fNZ#4I9E5Qox-7dh=w`q9;jmQc-97yWYle*H?!x2~2cZMui_2GIe)ow~ zGXLg(y3W;?@rM6)z;@D*sqO&L#T2TR8JU>;bN&aCwX(Keof{81@UoP|MDNLTc#2Q) zBJ#N)5ccxX%E(J%Ng-)z>4!axM$Zi+kc+C_OCNo@cAFW6Jei zGjWY6%Fx?&rsW&^uygz6+`POS;Z)=Y_+5VzpynV<@ay)T<-@ho7vyf0I50xy8`smN-$Cr%pSTuAF^k<{NiYCJoH?A z+PJXI$o?)57b{nC80YJDLD0cfKAn5}v0gpwhJvZDuP-Sn>C&0fY^H`S0^xWK{=D?n zwaxqTX!WtwalFG9Iy`$3Je6?X7S{x z$Lez#G&>uKfe7e1^KhxymHwcRu_i2MFc zvlDYd`I=i-t&6H_X=M!B23uI6e9`vOH*?F20o(aumdVS7&3O50IA71lDM4j}r7l<6_mJcN zRgeiX%oFC-pj-rx#O+bv#r;*`!_`AR#$n*ENAUbJcM6ch`A4jkK<2B(!_W)q!`Zs^ z3tQt9M#;d_h<71>UlZ%^-=d$F)`V4a%j`EKbTfZF{A23QfbD + + + + + + Add partner_ref_unique field + res.company + + + + + + + + + + + + + + From c53af38ca92f1eafcb25a4cde6e3cae2a0204c0b Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Fri, 13 May 2016 18:36:57 +0200 Subject: [PATCH 2/3] Work with contact deduplicator. This contraint is self-disabled when it detects by context that it is being used from the contact deduplicator. Otherwise, the user cannot deduplicate a contact selecting the "good" one as the one without reference. Anyway, in these cases, the check has no meaning, since it is to avoid duplicates and in this context we are currently removing them. --- partner_ref_unique/models/res_partner.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/partner_ref_unique/models/res_partner.py b/partner_ref_unique/models/res_partner.py index 13b3284ef..fe76d9192 100644 --- a/partner_ref_unique/models/res_partner.py +++ b/partner_ref_unique/models/res_partner.py @@ -25,7 +25,10 @@ class ResPartner(models.Model): if mode == 'companies': domain.append(('is_company', '=', True)) other = self.search(domain) - if other: + + # active_test is False when called from + # base.partner.merge.automatic.wizard + if other and self.env.context.get("active_test", True): raise ValidationError( _("This reference is equal to partner '%s'") % other[0].display_name) From fb832f004e848c0f6f04fb7ccd12e874b4bbdf53 Mon Sep 17 00:00:00 2001 From: cubells Date: Fri, 13 Jan 2017 19:34:51 +0100 Subject: [PATCH 3/3] [9.0][ADD] partner_ref_unique module - Added OCA icon --- partner_ref_unique/README.rst | 45 ++++++++++++++---- partner_ref_unique/__init__.py | 2 +- partner_ref_unique/__openerp__.py | 18 +++---- partner_ref_unique/models/__init__.py | 2 +- partner_ref_unique/models/res_company.py | 2 +- partner_ref_unique/models/res_partner.py | 2 +- .../static/description/icon.png | Bin 11429 -> 9455 bytes partner_ref_unique/tests/__init__.py | 5 ++ .../tests/test_res_partner_ref.py | 43 +++++++++++++++++ partner_ref_unique/views/res_company_view.xml | 11 ++--- 10 files changed, 98 insertions(+), 32 deletions(-) create mode 100644 partner_ref_unique/tests/__init__.py create mode 100644 partner_ref_unique/tests/test_res_partner_ref.py diff --git a/partner_ref_unique/README.rst b/partner_ref_unique/README.rst index 7a8502323..e4a903827 100644 --- a/partner_ref_unique/README.rst +++ b/partner_ref_unique/README.rst @@ -8,27 +8,52 @@ Partner unique reference Add an unique constraint to partner ref field +Usage +===== + +To use this module, you need to: + +* Go to your company settings and choose an option on section *Partner* in tab + *Configuration*. +* Try to create two partners with the same ref. + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/134/9.0 + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smashing it by providing a detailed and welcomed feedback. + Credits ======= +Images +------ + +* Odoo Community Association: `Icon `_. + Contributors ------------ * Antonio Espinosa +* Vicent Cubells Maintainer ---------- -.. image:: http://www.antiun.com/images/logo-b.png - :alt: Antiun Ingeniería S.L. - :target: http://www.antiun.com - -This module is maintained by Antiun Ingeniería S.L. +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org -Antiun Ingeniería S.L. is an IT consulting company especialized in Odoo -and provides Odoo development, install, maintenance and hosting -services. +This module is maintained by the OCA. -To contribute to this module, please visit https://github.com/Antiun -or contact us at odoo@antiun.com +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. +To contribute to this module, please visit https://odoo-community.org. diff --git a/partner_ref_unique/__init__.py b/partner_ref_unique/__init__.py index 6b49297d7..5a5c25ccb 100644 --- a/partner_ref_unique/__init__.py +++ b/partner_ref_unique/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# Copyright 2016 Antiun Ingenieria S.L. - Antonio Espinosa # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import models diff --git a/partner_ref_unique/__openerp__.py b/partner_ref_unique/__openerp__.py index 9a611b5eb..0b8490f6f 100644 --- a/partner_ref_unique/__openerp__.py +++ b/partner_ref_unique/__openerp__.py @@ -1,30 +1,24 @@ # -*- coding: utf-8 -*- -# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# Copyright 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# Copyright 2017 Tecnativa - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { "name": "Partner unique reference", "summary": "Add an unique constraint to partner ref field", - "version": "8.0.1.0.0", + "version": "9.0.1.0.0", "category": "Customer Relationship Management", "website": "http://www.antiun.com", - "author": "Antiun Ingeniería S.L.", + "author": "Antiun Ingeniería S.L., " + "Tecnativa, " + "Odoo Community Association (OCA)", "license": "AGPL-3", "application": False, "installable": True, - # 'auto_install':False, - "external_dependencies": { - "python": [], - "bin": [], - }, "depends": [ "base", ], "data": [ "views/res_company_view.xml", ], - "demo": [ - ], - "qweb": [ - ] } diff --git a/partner_ref_unique/models/__init__.py b/partner_ref_unique/models/__init__.py index 0b15881ca..f33d10808 100644 --- a/partner_ref_unique/models/__init__.py +++ b/partner_ref_unique/models/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# Copyright 2016 Antiun Ingenieria S.L. - Antonio Espinosa # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import res_company diff --git a/partner_ref_unique/models/res_company.py b/partner_ref_unique/models/res_company.py index 5b0909de9..0cae5c203 100644 --- a/partner_ref_unique/models/res_company.py +++ b/partner_ref_unique/models/res_company.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# Copyright 2016 Antiun Ingenieria S.L. - Antonio Espinosa # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from openerp import models, fields diff --git a/partner_ref_unique/models/res_partner.py b/partner_ref_unique/models/res_partner.py index fe76d9192..14adeb0e6 100644 --- a/partner_ref_unique/models/res_partner.py +++ b/partner_ref_unique/models/res_partner.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# Copyright 2016 Antiun Ingenieria S.L. - Antonio Espinosa # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from openerp import models, api, _ diff --git a/partner_ref_unique/static/description/icon.png b/partner_ref_unique/static/description/icon.png index 2d8a45c39a9b63943bc91733947e8c6a99c9babf..3a0328b516c4980e8e44cdb63fd945757ddd132d 100644 GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 11429 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 - - - + Add partner_ref_unique field res.company - + @@ -19,5 +19,4 @@ - - +