From 814321a0db0ac1a590ae3e1f240e1c6c04af2b6e Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Mon, 31 Aug 2015 12:08:06 +0200 Subject: [PATCH 01/61] new module account_invoice_pricelist; --- account_invoice_pricelist/README.rst | 79 ++++++++++++++++++ account_invoice_pricelist/__init__.py | 3 + account_invoice_pricelist/__openerp__.py | 40 +++++++++ account_invoice_pricelist/demo/res_groups.yml | 36 ++++++++ .../l10n/account_invoice_pricelist.pot | 45 ++++++++++ account_invoice_pricelist/l10n/fr.po | 45 ++++++++++ account_invoice_pricelist/model/__init__.py | 3 + .../model/account_invoice.py | 58 +++++++++++++ .../static/src/description/icon.png | Bin 0 -> 5089 bytes .../src/description/screenshot_group_by.png | Bin 0 -> 39211 bytes account_invoice_pricelist/view/view.xml | 58 +++++++++++++ 11 files changed, 367 insertions(+) create mode 100644 account_invoice_pricelist/README.rst create mode 100644 account_invoice_pricelist/__init__.py create mode 100644 account_invoice_pricelist/__openerp__.py create mode 100644 account_invoice_pricelist/demo/res_groups.yml create mode 100644 account_invoice_pricelist/l10n/account_invoice_pricelist.pot create mode 100644 account_invoice_pricelist/l10n/fr.po create mode 100644 account_invoice_pricelist/model/__init__.py create mode 100644 account_invoice_pricelist/model/account_invoice.py create mode 100644 account_invoice_pricelist/static/src/description/icon.png create mode 100644 account_invoice_pricelist/static/src/description/screenshot_group_by.png create mode 100644 account_invoice_pricelist/view/view.xml diff --git a/account_invoice_pricelist/README.rst b/account_invoice_pricelist/README.rst new file mode 100644 index 00000000000..7842a75245c --- /dev/null +++ b/account_invoice_pricelist/README.rst @@ -0,0 +1,79 @@ +.. 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 + +===================== +Pricelist on Invoices +===================== + +* Add a stored field pricelist on invoices, related to the partner pricelist; +* Possibility to group by pricelist on account.invoice view; + +.. image:: static/src/description/screenshot_group_by.png + + +This module doesn't add real feature by it self for end-users, but is useful +to do reporting, in a inherited module. + +Installation +============ + +Nothing special. + +Configuration +============= + +Nothing to do. + + +Usage +===== + +To use this module, you need to: + +* go to ... + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/95/8.0 + +For further information, please visit: + +* https://www.odoo.com/forum/help-1 + +Known issues / Roadmap +====================== + +* When changing the pricelist, give the possibility to recompute prices; + +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 +`here `_. + + +Credits +======= + +Contributors +------------ + +* Sylvain LE GAL (https://twitter.com/legalsylvain) + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +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 http://odoo-community.org. diff --git a/account_invoice_pricelist/__init__.py b/account_invoice_pricelist/__init__.py new file mode 100644 index 00000000000..dd9f4cd3e7a --- /dev/null +++ b/account_invoice_pricelist/__init__.py @@ -0,0 +1,3 @@ +# -*- encoding: utf-8 -*- + +from . import model diff --git a/account_invoice_pricelist/__openerp__.py b/account_invoice_pricelist/__openerp__.py new file mode 100644 index 00000000000..0f3c3a01fba --- /dev/null +++ b/account_invoice_pricelist/__openerp__.py @@ -0,0 +1,40 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# Account - Pricelist on Invoices for Odoo +# Copyright (C) 2015-Today GRAP (http://www.grap.coop) +# @author Sylvain LE GAL (https://twitter.com/legalsylvain) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +{ + 'name': 'Account - Pricelist on Invoices', + 'version': '8.0.1.0.0', + 'summary': 'Add partner pricelist on invoices', + 'category': 'Accounting & Finance', + 'author': 'GRAP,Odoo Community Association (OCA)', + 'website': 'http://www.grap.coop', + 'license': 'AGPL-3', + 'depends': [ + 'account', + ], + 'data': [ + 'view/view.xml', + ], + 'demo': [ + 'demo/res_groups.yml', + ], +} diff --git a/account_invoice_pricelist/demo/res_groups.yml b/account_invoice_pricelist/demo/res_groups.yml new file mode 100644 index 00000000000..b1cc4750b6e --- /dev/null +++ b/account_invoice_pricelist/demo/res_groups.yml @@ -0,0 +1,36 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# Account - Price List on Invoice for Odoo +# Copyright (C) 2015-Today GRAP (http://www.grap.coop) +# @author Sylvain LE GAL (https://twitter.com/legalsylvain) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +- !record {model: res.groups, id: base.group_no_one}: + users: + - base.user_root + +- !record {model: res.groups, id: product.group_sale_pricelist}: + users: + - base.user_root + +- !record {model: res.groups, id: product.group_purchase_pricelist}: + users: + - base.user_root + + + diff --git a/account_invoice_pricelist/l10n/account_invoice_pricelist.pot b/account_invoice_pricelist/l10n/account_invoice_pricelist.pot new file mode 100644 index 00000000000..1245a5923e2 --- /dev/null +++ b/account_invoice_pricelist/l10n/account_invoice_pricelist.pot @@ -0,0 +1,45 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_invoice_pricelist +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-08-31 10:03+0000\n" +"PO-Revision-Date: 2015-08-31 10:03+0000\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: account_invoice_pricelist +#: code:addons/account_invoice_pricelist/model/account_invoice.py:68 +#, python-format +msgid "Can not compute Pricelist for invoices with type '%s' because 'purchase' module is not installed." +msgstr "" + +#. module: account_invoice_pricelist +#: code:addons/account_invoice_pricelist/model/account_invoice.py:73 +#, python-format +msgid "Can not compute Pricelist for invoices with type '%s'." +msgstr "" + +#. module: account_invoice_pricelist +#: model:ir.model,name:account_invoice_pricelist.model_account_invoice +msgid "Invoice" +msgstr "" + +#. module: account_invoice_pricelist +#: view:account.invoice:account_invoice_pricelist.view_account_invoice_search +#: field:account.invoice,pricelist_id:0 +msgid "Pricelist" +msgstr "" + +#. module: account_invoice_pricelist +#: help:account.invoice,pricelist_id:0 +msgid "The pricelist of the partner, when the invoice is created or the partner has changed. This is a technical field used to reporting." +msgstr "" + diff --git a/account_invoice_pricelist/l10n/fr.po b/account_invoice_pricelist/l10n/fr.po new file mode 100644 index 00000000000..b689ba92329 --- /dev/null +++ b/account_invoice_pricelist/l10n/fr.po @@ -0,0 +1,45 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_invoice_pricelist +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-08-31 10:04+0000\n" +"PO-Revision-Date: 2015-08-31 10:04+0000\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: account_invoice_pricelist +#: code:addons/account_invoice_pricelist/model/account_invoice.py:68 +#, python-format +msgid "Can not compute Pricelist for invoices with type '%s' because 'purchase' module is not installed." +msgstr "Impossible de calculer la liste de prix pour des factures de type '%s' car le module 'achat' n'est pas installé." + +#. module: account_invoice_pricelist +#: code:addons/account_invoice_pricelist/model/account_invoice.py:73 +#, python-format +msgid "Can not compute Pricelist for invoices with type '%s'." +msgstr "Impossible de calculer la liste de prix pour des factures de type '%s'." + +#. module: account_invoice_pricelist +#: model:ir.model,name:account_invoice_pricelist.model_account_invoice +msgid "Invoice" +msgstr "Facture" + +#. module: account_invoice_pricelist +#: view:account.invoice:account_invoice_pricelist.view_account_invoice_search +#: field:account.invoice,pricelist_id:0 +msgid "Pricelist" +msgstr "Liste de prix" + +#. module: account_invoice_pricelist +#: help:account.invoice,pricelist_id:0 +msgid "The pricelist of the partner, when the invoice is created or the partner has changed. This is a technical field used to reporting." +msgstr "La liste de prix du partenaire, quand la facture est créé ou que le partenaire change. Il s'agit d'un champ technique utilisé pour faire des reporting." + diff --git a/account_invoice_pricelist/model/__init__.py b/account_invoice_pricelist/model/__init__.py new file mode 100644 index 00000000000..ba0f3da7d8c --- /dev/null +++ b/account_invoice_pricelist/model/__init__.py @@ -0,0 +1,3 @@ +# -*- encoding: utf-8 -*- + +from . import account_invoice diff --git a/account_invoice_pricelist/model/account_invoice.py b/account_invoice_pricelist/model/account_invoice.py new file mode 100644 index 00000000000..137a03ca7dd --- /dev/null +++ b/account_invoice_pricelist/model/account_invoice.py @@ -0,0 +1,58 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# Account - Pricelist on Invoices for Odoo +# Copyright (C) 2015-Today GRAP (http://www.grap.coop) +# @author Sylvain LE GAL (https://twitter.com/legalsylvain) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from openerp import models, fields, api + + +class AccountInvoice(models.Model): + _inherit = 'account.invoice' + + # Column Section + pricelist_id = fields.Many2one( + comodel_name='product.pricelist', string='Pricelist', + help="The pricelist of the partner, when the invoice is created" + " or the partner has changed. This is a technical field used" + " for reporting.") + + @api.multi + def onchange_partner_id( + self, type, partner_id, date_invoice=False, payment_term=False, + partner_bank_id=False, company_id=False): + partner_obj = self.env['res.partner'] + res = super(AccountInvoice, self).onchange_partner_id( + type, partner_id, date_invoice=date_invoice, + payment_term=payment_term, partner_bank_id=partner_bank_id, + company_id=company_id) + pricelist_id = False + if partner_id: + partner = partner_obj.browse(partner_id) + if type in ('out_invoice', 'out_refund'): + # Customer Invoices + pricelist_id = partner.property_product_pricelist.id + elif type in ('in_invoice', 'in_refund'): + # Supplier Invoices + if partner._model._columns.get( + 'property_product_pricelist_purchase', False): + pricelist_id =\ + partner.property_product_pricelist_purchase.id + res['value']['pricelist_id'] = pricelist_id + return res diff --git a/account_invoice_pricelist/static/src/description/icon.png b/account_invoice_pricelist/static/src/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1cef54c55ced30014dd8ad46a393b0a2c646c7f5 GIT binary patch literal 5089 zcmaKwbySn@|No~TqLQM7lz@a1(n<<4N@UWZfH1m27$ZbbYB&L<8vzLcK{`j*fDzK& zF&rQcr15)sKL7pB@4R<*?>^go?w#v?#pCsSUg26WRm!Wku0kLXN_91;4mbz?JIKkv zXPdl5FF28UJXY5u2d~%URw(fOikq6T2LwXZ{_nUD$4|u!eq{1gHuBVUwedt+yt0NU zTDiilZ>u|7*jnpYTUhzHW36Q&5IQq;sG^>C>QgXVNRy<+qHhO?!XKQoUWEnP`Yj`FAYDsk?7s2V4# z`{YbMU}fek6*J)fsk0<&HX~`j3-goUaWJ`_iW#3nmQFY0FzTD>HBlpFywY0PtHNKWY_WKam?49_uFOrbFh}1;<922Z?9FNo& z5)kNmX* zKUKy&qN3OL_xFoT{Qc!#zkZ!4FD|Y}q$$`3v0mM?x3`};;?+zhwY9ZHH(^}oOi`jA~aFNl8nC|M1+xotoTDy)1y!-*7p+=M&3R?ih0AC6&0~@J||n%wab)bBw1Nm zzxu=m>~8%jACR|PZ9LhQfhDA;_nWpI%m)nM83doV<3X;Aq?%gHg_|&`0wy&yQ0UE@ zHyI@yZnU(|EHimbv%Ny?a-Wj*e#Bd10x| z_~AT7sGgP<1mwo6!K|dK4)L?5x~i<~dddS=n~Z9w$=0*ZzzZZ=dV1}fiK(f5_&iuz zPfvfEOu}%QtWR{|^b1!^2cG!*cj7r%-uTSQhYu7ZqoZ$8cBhBCsV*S*GqoL6QUT|$ zdutXQwr6UC{%lQ`Kk*_=(1O}1avyDbS6?rKywG&|`x*-?Yf__OiCGPDCmn}ok@Kw> ztscETIy!1{_CbZ~JsO>9v)mamBbE0oqrd-XZ}^!9^>?h*(wk@aQ3WXZ)vHUMNl8gF zK6y`*TJar=i@z4zQX6&iU{A+$G!o*G#BdakW^%h}`y9rvwo|{;g=h1DgoH%gu(hr2 zbVGM*>*EbiX|D!R*@>0HlE$SsmSaW6G}!L$g~+3om}d%5&)p^E?GtPauSXLS|ARZ_ zSTTr9Bn^$e<}%lS#kaM#Ce95H$E3{v{WI;F>^ogQ7LbbZJ9ri6>E;#)`jK~&Sp~|+ z&u__)#dg`$)O1V8jqgEd_`|v9@R=HSlO&}uDtk7_e#9W&lTSc^ly>N3r)ePWY%RsL zWBYx!grZQPl+2y@5tY@^LPH#a zOgq~mFFp635?zdDiljRN*VD7K=a3SD;u95(#y4OvNwb4+txzDIM@=!wDb1Xr zZP|K%8VT*tWVtN|Y#0Eewl0cEEEErlKwC$r6(6^3T$0@w+0*mHrQo4?b6`Az*mU;i zMe&Kw+zoWY-VY5EC01GQkF5NSY0wBFAvl;63WYWUMrkAnS$FYEUgQO^5)lzWq0veT z3Xq0|hMG)hh4!AW948kSEiG*eVhF%W%SMdCy#P-jIJqCIK(*%VI2}@_3Tz)OQ5F>x zyh}-89_DvEqgYj3X8YU{beT&;MB7sBd|A)H;IVUBU2SdV=g-X!InYADj4i?hmujTl z8ZnEnlZIBJadGoOS2W5J|1aE0C~lw4uX%2S2@#w`dwaW)Y@_W!`o?_IqZ7iyLg3Hw zlJeg@O8wAN2EEdoiTUiWH~|DWw=e0U;SV24x7Xs!tb3gd)KY)GpFL#{IDH!%d&3j| zrG?diT z$e&j_T*8<|H8(5V;o*T3*Kqk?zm|GaUb=LNQPK&}i3Gfl|7@Wp9LGKv6kK(ls<0UU zA}}Fr)1QhpC4w2zgO8hhr!S|S-7;P2Xt=TOyKPjO5dB}X?Z2-@UtY+Lk}taz)HO6j zD=#mP3J))3o*ZU_e-TDdWCmOpq5902k`G||bbV*1BwYBoM2X_iNh9{KF5ns>@E$h} zkxTIdNq!^|xxc9o%Y)u?q>qwzL}_l%H$@qIdu~7H&CbrQ`H?HDv&OsHW!B;MCDfvB zocYrzQUr@a8mvoM!L;0l(r^G2taxF1PEL-As~DhDya(V#EKR}FrKKe!;m+e@--d%Z zzvQrmk*~U%ji{-q=dlS1Vx{!6KLa#PO<5UAO+FBjf6x7k(5UEX|b-)$Tv_$Tlh6a`$%mEu26$?tzd8!$Uy|TT%4N%efkwZz? zbxxMP@UXP|7F;xmhK8nDe-q5)8IsRdt>(Ym>7IRmf>xP5JtEfLp`)Ur0&EJl^So;+ zoLx~d;)F83$$cNPyn>CPQNq3#_1w^kxWLHl|zWFDG4FpyV{mB z^XF$LT=MeitJkzt@8WQ{RRaCXmoGtG!~0XEOx|4JeD_M1X;YfNsWFj|?>AXt`Pz%P zf-X~cg6Ti0IBcs#X;NZgMYnop9GA$)+A$$_JS@{XvQ-32> zXq7ZZ*Ow6z*&6CX9ah~RIlP#==OSp7S+C5@ZDvT5B-I>`4-N)e_r|yA(2JDwU3tj( zzyIUCrBOv=_@kXAz@doAG^<1I)rwkuQ^}oRc$VihuDBdd5Yhgih>neoUFiPAWmM^K zGXVi*T4Mwc_HQ*yOYjHF3Acvwb#42!EPFSuvqPRedv8vJU5JF8AW38_RtZ{K? zhnn-vY_nNf7&W`gt~CJcTQK)bOigK-nbDvq8;JcfiBcXsj~_p-$yAx`sNN{zfKH7* z(r}HIaQgNod_uGig^K-h-Js)#kwCGA5#9canb^@s`@Oeq49f4Utt4#zbQm&LLZJk{ zoy*x7`!PxM&D0^#Vs#@-m=TtTZV+{Kb#e-dV6&1iAg!d4+aF3TyPj8QI5;|%0(wAI zRI-3}20Fvd!$S$kIpNobZUSZvMq=#M`nLNl8NmsQts&RCySo*foCKu32;|h%)Ib_} z`}uLn%CdN@_gg28K&{4T{vS`XqDb?%nErrN-sN;XRWliVh^+K={_DORu;}!=B)2xe zuv(n0svO(IrqO>ds^$r9$wDSY*3-ek;a3O4OY?RVEl_Z9DtZnMjzoEXX%8Ha zzCP%iH}X0s5AxU=Ihg#7|W6que}&2LE-7Z)!CwFCm@nh~Fw z0tw7NUgi7(z3;nKIX)pm7IY!t{D@a(d#55s&Xz8#v#A!jH5GD&j_3BBJEQ=Hz%VF= zQL%nZOzhsu7S;vrPc454DJ?Ap+zl!(7X$i1*lzH1t`9pH6d$H%%+)VmyeJ;Pgobg% z@Mtc1wd5X(_?7G z|C|SGXJ;oWQz?v7Qj*@x%q)4!5lt_+6uC2$eRAAAdrBdwa3ifH*5Hp zd4uMG0qU+Oc3Ud?EZyv-P-SR*+G9~sQKO(p_DAW%cVzb=%3+JNLpc_+_ z{L>nV85sjx?b^jrBDVc3#YI!S#+doR-d^-<{#wPq=O1e6XeiHbY)og>H8#fjXgg0= zMVx#yF1Km15-qLclSxYio~6sTKI)dldzpt19wc~NtABkYnzu7q&MT8tvuZrE&O=2F z8tl!&Wd#CN!0E24fq|#!?yp}9opv3L;p#vL9n`}yxY>Qs^otuC-HnFGTAV%ai+-N0 zAT(xy8Q6+{PF1E6^g?%k|5_>>RGB!U(pz+>rIpZ@r!u+HZ3UD$!ODTFucJeGcr-X9 zLM!rRFWa%;D&aFbBk zlH<(M&>D_EieJ8er-_V*#mB@b0g*uPc>MU?T4I_E@>K?|D>g1}aiY|caB_I){d<2O zAshhIX=jp{ZKAx8P~@I3hC~ih@3qCb@OK)1_-k=xV`Jm#6BCN;q3*q{>1tI3LIPDmMV}(+yp%pyR3rc^VQV9B6rbO3+ zFPmJ_r~$>&2q)Qy5WBG7%`F=Vyia`R3NjZMwVH;i*y{p~Hn~ zT74#Up5Zbo&XfG1Kb0K+W$}MrqcR3yJ(5+X=B~A!9pCsikkz9j)qo1qRnE(~CG@oO z@GO;U64KJQK#$KHT%#8-=cQv6X!r5b*N;2GlYVl}qoo}(RyH}KOMBX0dC9r}+x}xI z{I`Pr9bw^*9_p?xGPK4>Ne<4Q{{FGlaXWEN9v(7xcXzNAH3-$#KE0CY?duC)Y7aO1 zZhpb0FYzrf^^!Ris|BjihzB}b6&C6M9N*uZ`EEnAf;ytPH6HrIU{rb4tKyt+*ZqO? zm~h{?f%wI*>HH}j$(5(bX>5G?742o_;_bVF;TsLljf}d#=^Djc-bNG_6nuYu^y;6< z86KvC!C-d7xs<>rd`wFEik}K6$b^9Yoy?u1uQK>ckV?A2z~E7S*%8JEZAeqFn%7+i z-~)Xp26jBU|NlOL^Zxy3y15kYIi{trj843Yo< literal 0 HcmV?d00001 diff --git a/account_invoice_pricelist/static/src/description/screenshot_group_by.png b/account_invoice_pricelist/static/src/description/screenshot_group_by.png new file mode 100644 index 0000000000000000000000000000000000000000..9eb1f6b29b4ed8f3921524166273a9906f6818a3 GIT binary patch literal 39211 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 literal 0 HcmV?d00001 diff --git a/account_invoice_pricelist/view/view.xml b/account_invoice_pricelist/view/view.xml new file mode 100644 index 00000000000..15afe67bbf4 --- /dev/null +++ b/account_invoice_pricelist/view/view.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + account.invoice + + + + + + + + + + account.invoice + + + + + + + + + + account.invoice + + + + + + + + + + + + From 523c0697ca661983b0ea3c3c94372e8b7cb081f6 Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Sat, 19 Sep 2015 20:45:08 -0400 Subject: [PATCH 02/61] OCA Transbot updated translations from Transifex --- account_invoice_pricelist/i18n/de.po | 37 +++++++++++++++++++++++++ account_invoice_pricelist/i18n/el_GR.po | 36 ++++++++++++++++++++++++ account_invoice_pricelist/i18n/es.po | 37 +++++++++++++++++++++++++ account_invoice_pricelist/i18n/fr.po | 36 ++++++++++++++++++++++++ account_invoice_pricelist/i18n/hr.po | 36 ++++++++++++++++++++++++ account_invoice_pricelist/i18n/it.po | 36 ++++++++++++++++++++++++ account_invoice_pricelist/i18n/nl.po | 36 ++++++++++++++++++++++++ account_invoice_pricelist/i18n/pt_BR.po | 36 ++++++++++++++++++++++++ account_invoice_pricelist/i18n/sl.po | 37 +++++++++++++++++++++++++ account_invoice_pricelist/i18n/zh_CN.po | 36 ++++++++++++++++++++++++ 10 files changed, 363 insertions(+) create mode 100644 account_invoice_pricelist/i18n/de.po create mode 100644 account_invoice_pricelist/i18n/el_GR.po create mode 100644 account_invoice_pricelist/i18n/es.po create mode 100644 account_invoice_pricelist/i18n/fr.po create mode 100644 account_invoice_pricelist/i18n/hr.po create mode 100644 account_invoice_pricelist/i18n/it.po create mode 100644 account_invoice_pricelist/i18n/nl.po create mode 100644 account_invoice_pricelist/i18n/pt_BR.po create mode 100644 account_invoice_pricelist/i18n/sl.po create mode 100644 account_invoice_pricelist/i18n/zh_CN.po diff --git a/account_invoice_pricelist/i18n/de.po b/account_invoice_pricelist/i18n/de.po new file mode 100644 index 00000000000..fecba883dd1 --- /dev/null +++ b/account_invoice_pricelist/i18n/de.po @@ -0,0 +1,37 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_invoice_pricelist +# +# Translators: +# Rudolf Schnapka , 2015 +msgid "" +msgstr "" +"Project-Id-Version: account-invoicing (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-11-21 01:40+0000\n" +"PO-Revision-Date: 2015-11-24 09:45+0000\n" +"Last-Translator: Rudolf Schnapka \n" +"Language-Team: German (http://www.transifex.com/oca/OCA-account-invoicing-8-0/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: account_invoice_pricelist +#: model:ir.model,name:account_invoice_pricelist.model_account_invoice +msgid "Invoice" +msgstr "Rechnung" + +#. module: account_invoice_pricelist +#: view:account.invoice:account_invoice_pricelist.view_account_invoice_search +#: field:account.invoice,pricelist_id:0 +msgid "Pricelist" +msgstr "Preisliste" + +#. module: account_invoice_pricelist +#: help:account.invoice,pricelist_id:0 +msgid "" +"The pricelist of the partner, when the invoice is created or the partner has" +" changed. This is a technical field used for reporting." +msgstr "Die Preisliste des Partners bei Erstellung der Rechnung oder der Partner ausgetauscht wird. Dies ist ein technisches Feld für das Reporting." diff --git a/account_invoice_pricelist/i18n/el_GR.po b/account_invoice_pricelist/i18n/el_GR.po new file mode 100644 index 00000000000..256a07dfe18 --- /dev/null +++ b/account_invoice_pricelist/i18n/el_GR.po @@ -0,0 +1,36 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_invoice_pricelist +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: account-invoicing (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-17 03:48+0000\n" +"PO-Revision-Date: 2015-09-15 08:11+0000\n" +"Last-Translator: <>\n" +"Language-Team: Greek (Greece) (http://www.transifex.com/oca/OCA-account-invoicing-8-0/language/el_GR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: el_GR\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: account_invoice_pricelist +#: model:ir.model,name:account_invoice_pricelist.model_account_invoice +msgid "Invoice" +msgstr "Τιμολόγιο" + +#. module: account_invoice_pricelist +#: view:account.invoice:account_invoice_pricelist.view_account_invoice_search +#: field:account.invoice,pricelist_id:0 +msgid "Pricelist" +msgstr "" + +#. module: account_invoice_pricelist +#: help:account.invoice,pricelist_id:0 +msgid "" +"The pricelist of the partner, when the invoice is created or the partner has" +" changed. This is a technical field used for reporting." +msgstr "" diff --git a/account_invoice_pricelist/i18n/es.po b/account_invoice_pricelist/i18n/es.po new file mode 100644 index 00000000000..d8f05eb337f --- /dev/null +++ b/account_invoice_pricelist/i18n/es.po @@ -0,0 +1,37 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_invoice_pricelist +# +# Translators: +# Antonio Trueba, 2016 +msgid "" +msgstr "" +"Project-Id-Version: account-invoicing (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-12-04 01:38+0000\n" +"PO-Revision-Date: 2016-02-16 15:30+0000\n" +"Last-Translator: Antonio Trueba\n" +"Language-Team: Spanish (http://www.transifex.com/oca/OCA-account-invoicing-8-0/language/es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: account_invoice_pricelist +#: model:ir.model,name:account_invoice_pricelist.model_account_invoice +msgid "Invoice" +msgstr "Factura" + +#. module: account_invoice_pricelist +#: view:account.invoice:account_invoice_pricelist.view_account_invoice_search +#: field:account.invoice,pricelist_id:0 +msgid "Pricelist" +msgstr "rifa" + +#. module: account_invoice_pricelist +#: help:account.invoice,pricelist_id:0 +msgid "" +"The pricelist of the partner, when the invoice is created or the partner has" +" changed. This is a technical field used for reporting." +msgstr "" diff --git a/account_invoice_pricelist/i18n/fr.po b/account_invoice_pricelist/i18n/fr.po new file mode 100644 index 00000000000..ace53a3294b --- /dev/null +++ b/account_invoice_pricelist/i18n/fr.po @@ -0,0 +1,36 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_invoice_pricelist +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: account-invoicing (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-09-17 01:02+0000\n" +"PO-Revision-Date: 2015-09-15 08:11+0000\n" +"Last-Translator: <>\n" +"Language-Team: French (http://www.transifex.com/oca/OCA-account-invoicing-8-0/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: account_invoice_pricelist +#: model:ir.model,name:account_invoice_pricelist.model_account_invoice +msgid "Invoice" +msgstr "Facture" + +#. module: account_invoice_pricelist +#: view:account.invoice:account_invoice_pricelist.view_account_invoice_search +#: field:account.invoice,pricelist_id:0 +msgid "Pricelist" +msgstr "" + +#. module: account_invoice_pricelist +#: help:account.invoice,pricelist_id:0 +msgid "" +"The pricelist of the partner, when the invoice is created or the partner has" +" changed. This is a technical field used for reporting." +msgstr "" diff --git a/account_invoice_pricelist/i18n/hr.po b/account_invoice_pricelist/i18n/hr.po new file mode 100644 index 00000000000..4b452622880 --- /dev/null +++ b/account_invoice_pricelist/i18n/hr.po @@ -0,0 +1,36 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_invoice_pricelist +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: account-invoicing (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-17 03:48+0000\n" +"PO-Revision-Date: 2015-09-15 08:11+0000\n" +"Last-Translator: <>\n" +"Language-Team: Croatian (http://www.transifex.com/oca/OCA-account-invoicing-8-0/language/hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: hr\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#. module: account_invoice_pricelist +#: model:ir.model,name:account_invoice_pricelist.model_account_invoice +msgid "Invoice" +msgstr "Račun" + +#. module: account_invoice_pricelist +#: view:account.invoice:account_invoice_pricelist.view_account_invoice_search +#: field:account.invoice,pricelist_id:0 +msgid "Pricelist" +msgstr "" + +#. module: account_invoice_pricelist +#: help:account.invoice,pricelist_id:0 +msgid "" +"The pricelist of the partner, when the invoice is created or the partner has" +" changed. This is a technical field used for reporting." +msgstr "" diff --git a/account_invoice_pricelist/i18n/it.po b/account_invoice_pricelist/i18n/it.po new file mode 100644 index 00000000000..46e17f1667c --- /dev/null +++ b/account_invoice_pricelist/i18n/it.po @@ -0,0 +1,36 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_invoice_pricelist +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: account-invoicing (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-17 03:48+0000\n" +"PO-Revision-Date: 2015-09-15 08:11+0000\n" +"Last-Translator: <>\n" +"Language-Team: Italian (http://www.transifex.com/oca/OCA-account-invoicing-8-0/language/it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: account_invoice_pricelist +#: model:ir.model,name:account_invoice_pricelist.model_account_invoice +msgid "Invoice" +msgstr "Fattura" + +#. module: account_invoice_pricelist +#: view:account.invoice:account_invoice_pricelist.view_account_invoice_search +#: field:account.invoice,pricelist_id:0 +msgid "Pricelist" +msgstr "Listino prezzi" + +#. module: account_invoice_pricelist +#: help:account.invoice,pricelist_id:0 +msgid "" +"The pricelist of the partner, when the invoice is created or the partner has" +" changed. This is a technical field used for reporting." +msgstr "" diff --git a/account_invoice_pricelist/i18n/nl.po b/account_invoice_pricelist/i18n/nl.po new file mode 100644 index 00000000000..4258a14f6bd --- /dev/null +++ b/account_invoice_pricelist/i18n/nl.po @@ -0,0 +1,36 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_invoice_pricelist +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: account-invoicing (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-09-17 01:02+0000\n" +"PO-Revision-Date: 2015-09-15 08:11+0000\n" +"Last-Translator: <>\n" +"Language-Team: Dutch (http://www.transifex.com/oca/OCA-account-invoicing-8-0/language/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: account_invoice_pricelist +#: model:ir.model,name:account_invoice_pricelist.model_account_invoice +msgid "Invoice" +msgstr "Factuur" + +#. module: account_invoice_pricelist +#: view:account.invoice:account_invoice_pricelist.view_account_invoice_search +#: field:account.invoice,pricelist_id:0 +msgid "Pricelist" +msgstr "" + +#. module: account_invoice_pricelist +#: help:account.invoice,pricelist_id:0 +msgid "" +"The pricelist of the partner, when the invoice is created or the partner has" +" changed. This is a technical field used for reporting." +msgstr "" diff --git a/account_invoice_pricelist/i18n/pt_BR.po b/account_invoice_pricelist/i18n/pt_BR.po new file mode 100644 index 00000000000..42a5f77a6d6 --- /dev/null +++ b/account_invoice_pricelist/i18n/pt_BR.po @@ -0,0 +1,36 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_invoice_pricelist +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: account-invoicing (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-09-17 01:02+0000\n" +"PO-Revision-Date: 2015-09-15 08:11+0000\n" +"Last-Translator: <>\n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/OCA-account-invoicing-8-0/language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: account_invoice_pricelist +#: model:ir.model,name:account_invoice_pricelist.model_account_invoice +msgid "Invoice" +msgstr "Fatura" + +#. module: account_invoice_pricelist +#: view:account.invoice:account_invoice_pricelist.view_account_invoice_search +#: field:account.invoice,pricelist_id:0 +msgid "Pricelist" +msgstr "" + +#. module: account_invoice_pricelist +#: help:account.invoice,pricelist_id:0 +msgid "" +"The pricelist of the partner, when the invoice is created or the partner has" +" changed. This is a technical field used for reporting." +msgstr "" diff --git a/account_invoice_pricelist/i18n/sl.po b/account_invoice_pricelist/i18n/sl.po new file mode 100644 index 00000000000..9b2677e9cbb --- /dev/null +++ b/account_invoice_pricelist/i18n/sl.po @@ -0,0 +1,37 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_invoice_pricelist +# +# Translators: +# Matjaž Mozetič , 2015 +msgid "" +msgstr "" +"Project-Id-Version: account-invoicing (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-09-17 01:02+0000\n" +"PO-Revision-Date: 2015-09-15 16:35+0000\n" +"Last-Translator: Matjaž Mozetič \n" +"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-account-invoicing-8-0/language/sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" + +#. module: account_invoice_pricelist +#: model:ir.model,name:account_invoice_pricelist.model_account_invoice +msgid "Invoice" +msgstr "Račun" + +#. module: account_invoice_pricelist +#: view:account.invoice:account_invoice_pricelist.view_account_invoice_search +#: field:account.invoice,pricelist_id:0 +msgid "Pricelist" +msgstr "Cenik" + +#. module: account_invoice_pricelist +#: help:account.invoice,pricelist_id:0 +msgid "" +"The pricelist of the partner, when the invoice is created or the partner has" +" changed. This is a technical field used for reporting." +msgstr "Cenik za partnerja, ko se ustvari račun ali spremeni partnerja. To je tehnično polje, ki se uporablja za poročanje." diff --git a/account_invoice_pricelist/i18n/zh_CN.po b/account_invoice_pricelist/i18n/zh_CN.po new file mode 100644 index 00000000000..c766b1d31a3 --- /dev/null +++ b/account_invoice_pricelist/i18n/zh_CN.po @@ -0,0 +1,36 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_invoice_pricelist +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: account-invoicing (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-09-17 01:02+0000\n" +"PO-Revision-Date: 2015-09-15 08:11+0000\n" +"Last-Translator: <>\n" +"Language-Team: Chinese (China) (http://www.transifex.com/oca/OCA-account-invoicing-8-0/language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: account_invoice_pricelist +#: model:ir.model,name:account_invoice_pricelist.model_account_invoice +msgid "Invoice" +msgstr "发票" + +#. module: account_invoice_pricelist +#: view:account.invoice:account_invoice_pricelist.view_account_invoice_search +#: field:account.invoice,pricelist_id:0 +msgid "Pricelist" +msgstr "" + +#. module: account_invoice_pricelist +#: help:account.invoice,pricelist_id:0 +msgid "" +"The pricelist of the partner, when the invoice is created or the partner has" +" changed. This is a technical field used for reporting." +msgstr "" From b7ccce64af2ca4c715549f3ede5f10ad33f01941 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Tue, 29 Sep 2015 12:31:39 +0200 Subject: [PATCH 03/61] use pricelist when calculating prices --- account_invoice_pricelist/README.rst | 8 +- account_invoice_pricelist/__openerp__.py | 2 +- account_invoice_pricelist/model/__init__.py | 1 + .../model/account_invoice.py | 9 ++- .../model/account_invoice_line.py | 78 +++++++++++++++++++ account_invoice_pricelist/tests/__init__.py | 20 +++++ .../tests/test_account_invoice_pricelist.py | 34 ++++++++ account_invoice_pricelist/view/view.xml | 12 +++ 8 files changed, 157 insertions(+), 7 deletions(-) create mode 100644 account_invoice_pricelist/model/account_invoice_line.py create mode 100644 account_invoice_pricelist/tests/__init__.py create mode 100644 account_invoice_pricelist/tests/test_account_invoice_pricelist.py diff --git a/account_invoice_pricelist/README.rst b/account_invoice_pricelist/README.rst index 7842a75245c..44e715eef17 100644 --- a/account_invoice_pricelist/README.rst +++ b/account_invoice_pricelist/README.rst @@ -7,14 +7,11 @@ Pricelist on Invoices ===================== * Add a stored field pricelist on invoices, related to the partner pricelist; +* Use this pricelist when manually adding invoice lines * Possibility to group by pricelist on account.invoice view; .. image:: static/src/description/screenshot_group_by.png - -This module doesn't add real feature by it self for end-users, but is useful -to do reporting, in a inherited module. - Installation ============ @@ -44,7 +41,7 @@ For further information, please visit: Known issues / Roadmap ====================== -* When changing the pricelist, give the possibility to recompute prices; +None currently Bug Tracker =========== @@ -62,6 +59,7 @@ Contributors ------------ * Sylvain LE GAL (https://twitter.com/legalsylvain) +* Holger Brunn Maintainer ---------- diff --git a/account_invoice_pricelist/__openerp__.py b/account_invoice_pricelist/__openerp__.py index 0f3c3a01fba..0c89126c9f6 100644 --- a/account_invoice_pricelist/__openerp__.py +++ b/account_invoice_pricelist/__openerp__.py @@ -25,7 +25,7 @@ 'version': '8.0.1.0.0', 'summary': 'Add partner pricelist on invoices', 'category': 'Accounting & Finance', - 'author': 'GRAP,Odoo Community Association (OCA)', + 'author': 'GRAP,Therp BV,Odoo Community Association (OCA)', 'website': 'http://www.grap.coop', 'license': 'AGPL-3', 'depends': [ diff --git a/account_invoice_pricelist/model/__init__.py b/account_invoice_pricelist/model/__init__.py index ba0f3da7d8c..c36935ae8ea 100644 --- a/account_invoice_pricelist/model/__init__.py +++ b/account_invoice_pricelist/model/__init__.py @@ -1,3 +1,4 @@ # -*- encoding: utf-8 -*- from . import account_invoice +from . import account_invoice_line diff --git a/account_invoice_pricelist/model/account_invoice.py b/account_invoice_pricelist/model/account_invoice.py index 137a03ca7dd..7ddbcba9e89 100644 --- a/account_invoice_pricelist/model/account_invoice.py +++ b/account_invoice_pricelist/model/account_invoice.py @@ -31,7 +31,8 @@ class AccountInvoice(models.Model): comodel_name='product.pricelist', string='Pricelist', help="The pricelist of the partner, when the invoice is created" " or the partner has changed. This is a technical field used" - " for reporting.") + " for reporting.", + readonly=True, states={'draft': [('readonly', False)]}) @api.multi def onchange_partner_id( @@ -56,3 +57,9 @@ def onchange_partner_id( partner.property_product_pricelist_purchase.id res['value']['pricelist_id'] = pricelist_id return res + + @api.multi + def button_update_prices_from_pricelist(self): + for this in self: + this.invoice_line.filtered('product_id').update_from_pricelist() + this.button_reset_taxes() diff --git a/account_invoice_pricelist/model/account_invoice_line.py b/account_invoice_pricelist/model/account_invoice_line.py new file mode 100644 index 00000000000..a8ef7eba91d --- /dev/null +++ b/account_invoice_pricelist/model/account_invoice_line.py @@ -0,0 +1,78 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# This module copyright (C) 2015 Therp BV (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +from openerp import models, api + + +class AccountInvoiceLine(models.Model): + _inherit = 'account.invoice.line' + + @api.multi + def product_id_change( + self, product, uom_id, qty=0, name='', type='out_invoice', + partner_id=False, fposition_id=False, price_unit=False, + currency_id=False, company_id=None): + result = super(AccountInvoiceLine, self).product_id_change( + product, uom_id, qty=qty, name=name, type=type, + partner_id=partner_id, fposition_id=fposition_id, + price_unit=price_unit, currency_id=currency_id, + company_id=company_id) + values = result.get('value', {}) + if product and 'pricelist_id' in self.env.context: + # get pricelist price + values['price_unit'] = self.env['product.product']\ + .browse([product])\ + .with_context( + quantity=qty, pricelist=self.env.context['pricelist_id'], + partner=partner_id)\ + ._product_price(None, None)\ + .get(product) + # adjust for currency, uos (taken from super) + if company_id and currency_id: + company = self.env['res.company'].browse([company_id]) + product = self.env['product.product'].browse([product]) + currency = self.env['res.currency'].browse([currency_id]) + if company.currency_id != currency: + if type in ('in_invoice', 'in_refund'): + values['price_unit'] = product.standard_price + values['price_unit'] = values['price_unit'] * currency.rate + + if values['uos_id'] and values['uos_id'] != product.uom_id.id: + values['price_unit'] = self.env['product.uom']\ + ._compute_price(product.uom_id.id, + values['price_unit'], values['uos_id']) + return result + + @api.multi + def update_from_pricelist(self): + """overwrite current prices from pricelist""" + for this in self: + values = this\ + .with_context(pricelist_id=this.invoice_id.pricelist_id.id)\ + .product_id_change( + this.product_id.id, this.uos_id.id, qty=this.quantity, + name=this.name, type=this.invoice_id.type, + partner_id=this.invoice_id.partner_id.id, + fposition_id=this.invoice_id.fiscal_position.id, + price_unit=this.price_unit, + currency_id=this.invoice_id.currency_id.id, + company_id=this.invoice_id.company_id.id)['value'] + this.write({ + 'price_unit': values['price_unit'], + }) diff --git a/account_invoice_pricelist/tests/__init__.py b/account_invoice_pricelist/tests/__init__.py new file mode 100644 index 00000000000..12e258a2028 --- /dev/null +++ b/account_invoice_pricelist/tests/__init__.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# This module copyright (C) 2015 Therp BV . +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +from . import test_account_invoice_pricelist diff --git a/account_invoice_pricelist/tests/test_account_invoice_pricelist.py b/account_invoice_pricelist/tests/test_account_invoice_pricelist.py new file mode 100644 index 00000000000..f8d7e329458 --- /dev/null +++ b/account_invoice_pricelist/tests/test_account_invoice_pricelist.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# This module copyright (C) 2015 Therp BV . +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +from openerp.tests.common import TransactionCase + + +class TestAccountInvoicePricelist(TransactionCase): + def test_account_invoice_pricelist(self): + invoice = self.env['account.invoice'].search([ + ('type', '=', 'out_invoice'), + ('partner_id.property_product_pricelist', '!=', False) + ], limit=1) + on_change_partner_id = invoice.onchange_partner_id( + invoice.type, invoice.partner_id.id) + self.assertEqual( + on_change_partner_id['value']['pricelist_id'], + invoice.partner_id.property_product_pricelist.id) + invoice.button_update_prices_from_pricelist() diff --git a/account_invoice_pricelist/view/view.xml b/account_invoice_pricelist/view/view.xml index 15afe67bbf4..aa8a82c0be1 100644 --- a/account_invoice_pricelist/view/view.xml +++ b/account_invoice_pricelist/view/view.xml @@ -26,9 +26,15 @@ account.invoice + +