From b9c238d386d71b635dd35e0d8dfc8be0841e5491 Mon Sep 17 00:00:00 2001 From: david Date: Thu, 18 Mar 2021 17:03:26 +0100 Subject: [PATCH 1/9] [12.0] stock_whole_kit_constraint: New Addon --- stock_whole_kit_constraint/README.rst | 98 ++++ stock_whole_kit_constraint/__init__.py | 1 + stock_whole_kit_constraint/__manifest__.py | 14 + stock_whole_kit_constraint/i18n/es.po | 52 ++ .../i18n/stock_whole_kit_constraint.pot | 49 ++ stock_whole_kit_constraint/models/__init__.py | 3 + .../models/product_template.py | 13 + .../models/stock_move.py | 58 +++ .../models/stock_picking.py | 29 ++ .../readme/CONFIGURE.rst | 6 + .../readme/CONTRIBUTORS.rst | 3 + .../readme/DESCRIPTION.rst | 2 + stock_whole_kit_constraint/readme/USAGE.rst | 8 + .../static/description/icon.png | Bin 0 -> 2589 bytes .../static/description/index.html | 446 ++++++++++++++++++ stock_whole_kit_constraint/tests/__init__.py | 1 + .../tests/test_stock_whole_kit_constraint.py | 145 ++++++ .../views/product_template_views.xml | 31 ++ 18 files changed, 959 insertions(+) create mode 100644 stock_whole_kit_constraint/README.rst create mode 100644 stock_whole_kit_constraint/__init__.py create mode 100644 stock_whole_kit_constraint/__manifest__.py create mode 100644 stock_whole_kit_constraint/i18n/es.po create mode 100644 stock_whole_kit_constraint/i18n/stock_whole_kit_constraint.pot create mode 100644 stock_whole_kit_constraint/models/__init__.py create mode 100644 stock_whole_kit_constraint/models/product_template.py create mode 100644 stock_whole_kit_constraint/models/stock_move.py create mode 100644 stock_whole_kit_constraint/models/stock_picking.py create mode 100644 stock_whole_kit_constraint/readme/CONFIGURE.rst create mode 100644 stock_whole_kit_constraint/readme/CONTRIBUTORS.rst create mode 100644 stock_whole_kit_constraint/readme/DESCRIPTION.rst create mode 100644 stock_whole_kit_constraint/readme/USAGE.rst create mode 100644 stock_whole_kit_constraint/static/description/icon.png create mode 100644 stock_whole_kit_constraint/static/description/index.html create mode 100644 stock_whole_kit_constraint/tests/__init__.py create mode 100644 stock_whole_kit_constraint/tests/test_stock_whole_kit_constraint.py create mode 100644 stock_whole_kit_constraint/views/product_template_views.xml diff --git a/stock_whole_kit_constraint/README.rst b/stock_whole_kit_constraint/README.rst new file mode 100644 index 000000000..073303fa8 --- /dev/null +++ b/stock_whole_kit_constraint/README.rst @@ -0,0 +1,98 @@ +========================== +Stock whole kit constraint +========================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmanufacture-lightgray.png?logo=github + :target: https://github.com/OCA/manufacture/tree/12.0/stock_whole_kit_constraint + :alt: OCA/manufacture +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/manufacture-12-0/manufacture-12-0-stock_whole_kit_constraint + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/129/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows to configure a product that has a BoM of type kit to disallow partial +deliveries so that the components can't be partially delivered. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +To allow/disallow the partial delivery of kits: + +#. Go to the kit product template or variant and then to the *Inventory* tab, + *Logistics* group. +#. The "Allow Partial Kit" check controls this. If marked, it will allow it. +#. By default, the check is not marked. + +Usage +===== + +To use this module, you need to: + +#. Make a delivery picking with a kit product. +#. Try to deliver it partially. +#. An error will raise. + +If you want to deliver other items in the picking you can do so and leave the +whole kit components units pending in a backorder. + +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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* Tecnativa __ + + * David Vidal + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/manufacture `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/stock_whole_kit_constraint/__init__.py b/stock_whole_kit_constraint/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/stock_whole_kit_constraint/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/stock_whole_kit_constraint/__manifest__.py b/stock_whole_kit_constraint/__manifest__.py new file mode 100644 index 000000000..9c6e31ba7 --- /dev/null +++ b/stock_whole_kit_constraint/__manifest__.py @@ -0,0 +1,14 @@ +# Copyright 2021 Tecnativa - David Vidal +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Stock whole kit constraint", + "summary": "Avoid to deliver a kit partially", + "version": "12.0.1.0.0", + "category": "Stock", + "website": "https://github.com/OCA/manufacture", + "author": "Tecnativa, Odoo Community Association (OCA)", + "license": "AGPL-3", + "installable": True, + "depends": ["mrp"], + "data": ["views/product_template_views.xml"], +} diff --git a/stock_whole_kit_constraint/i18n/es.po b/stock_whole_kit_constraint/i18n/es.po new file mode 100644 index 000000000..8e5a1b473 --- /dev/null +++ b/stock_whole_kit_constraint/i18n/es.po @@ -0,0 +1,52 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_whole_kit_constraint +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-03-19 10:39+0000\n" +"PO-Revision-Date: 2021-03-19 11:41+0100\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"Language: es\n" +"X-Generator: Poedit 2.3\n" + +#. module: stock_whole_kit_constraint +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_product_product__allow_partial_kit_delivery +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_product_template__allow_partial_kit_delivery +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_stock_move__allow_partial_kit_delivery +msgid "Allow Partial Kit Delivery" +msgstr "Permitir entrega parcial de kit" + +#. module: stock_whole_kit_constraint +#: model:ir.model.fields,help:stock_whole_kit_constraint.field_product_product__allow_partial_kit_delivery +#: model:ir.model.fields,help:stock_whole_kit_constraint.field_product_template__allow_partial_kit_delivery +msgid "If not set when a kit product components are delivered, it won't be allowed to do it partially." +msgstr "No no está activo, cuando haya una entrega con un kit, no se permitirá la entrega parcial de sus componentes." + +#. module: stock_whole_kit_constraint +#: model:ir.model,name:stock_whole_kit_constraint.model_product_template +msgid "Product Template" +msgstr "Plantilla de producto" + +#. module: stock_whole_kit_constraint +#: model:ir.model,name:stock_whole_kit_constraint.model_stock_move +msgid "Stock Move" +msgstr "Movimiento de existencias" + +#. module: stock_whole_kit_constraint +#: model:ir.model,name:stock_whole_kit_constraint.model_stock_picking +msgid "Transfer" +msgstr "Albarán" + +#. module: stock_whole_kit_constraint +#: code:addons/stock_whole_kit_constraint/models/stock_picking.py:23 +#, python-format +msgid "You can't make a partial delivery of components of the %s kit" +msgstr "No puede realizar una entrega parcial de los componentes del kit %s" diff --git a/stock_whole_kit_constraint/i18n/stock_whole_kit_constraint.pot b/stock_whole_kit_constraint/i18n/stock_whole_kit_constraint.pot new file mode 100644 index 000000000..5c414e923 --- /dev/null +++ b/stock_whole_kit_constraint/i18n/stock_whole_kit_constraint.pot @@ -0,0 +1,49 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_whole_kit_constraint +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: stock_whole_kit_constraint +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_product_product__allow_partial_kit_delivery +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_product_template__allow_partial_kit_delivery +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_stock_move__allow_partial_kit_delivery +msgid "Allow Partial Kit Delivery" +msgstr "" + +#. module: stock_whole_kit_constraint +#: model:ir.model.fields,help:stock_whole_kit_constraint.field_product_product__allow_partial_kit_delivery +#: model:ir.model.fields,help:stock_whole_kit_constraint.field_product_template__allow_partial_kit_delivery +msgid "If not set, and this product is delivered with a BoM of type kit, partial deliveries of the components won't be allowed." +msgstr "" + +#. module: stock_whole_kit_constraint +#: model:ir.model,name:stock_whole_kit_constraint.model_product_template +msgid "Product Template" +msgstr "" + +#. module: stock_whole_kit_constraint +#: model:ir.model,name:stock_whole_kit_constraint.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: stock_whole_kit_constraint +#: model:ir.model,name:stock_whole_kit_constraint.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: stock_whole_kit_constraint +#: code:addons/stock_whole_kit_constraint/models/stock_picking.py:23 +#, python-format +msgid "You can't make a partial delivery of components of the %s kit" +msgstr "" + diff --git a/stock_whole_kit_constraint/models/__init__.py b/stock_whole_kit_constraint/models/__init__.py new file mode 100644 index 000000000..7e2c2a891 --- /dev/null +++ b/stock_whole_kit_constraint/models/__init__.py @@ -0,0 +1,3 @@ +from . import product_template +from . import stock_move +from . import stock_picking diff --git a/stock_whole_kit_constraint/models/product_template.py b/stock_whole_kit_constraint/models/product_template.py new file mode 100644 index 000000000..5540989f5 --- /dev/null +++ b/stock_whole_kit_constraint/models/product_template.py @@ -0,0 +1,13 @@ +# Copyright 2021 Tecnativa - David Vidal +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class ProductTemplate(models.Model): + _inherit = "product.template" + + allow_partial_kit_delivery = fields.Boolean( + default=True, + help="If not set, and this product is delivered with a BoM of type " + "kit, partial deliveries of the components won't be allowed.", + ) diff --git a/stock_whole_kit_constraint/models/stock_move.py b/stock_whole_kit_constraint/models/stock_move.py new file mode 100644 index 000000000..335498e63 --- /dev/null +++ b/stock_whole_kit_constraint/models/stock_move.py @@ -0,0 +1,58 @@ +# Copyright 2021 Tecnativa - David Vidal +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import api, fields, models + + +class StockMove(models.Model): + _inherit = "stock.move" + + allow_partial_kit_delivery = fields.Boolean( + compute="_compute_allow_partial_kit_delivery", compute_sudo=True, + ) + + @api.depends("product_id.product_tmpl_id.allow_partial_kit_delivery", "state") + def _compute_allow_partial_kit_delivery(self): + """Take it from the product only if it's a kit""" + self.write({"allow_partial_kit_delivery": True}) + for move in self.filtered( + lambda x: x.product_id and x.state not in ["done", "cancel"] + ): + # If it isn't a kit it will always be True + if not move.bom_line_id or move.bom_line_id.bom_id.type != "phantom": + move.allow_partial_kit_delivery = True + continue + move.allow_partial_kit_delivery = ( + move.bom_line_id.bom_id.product_tmpl_id.allow_partial_kit_delivery + ) + + def _prepare_phantom_move_values(self, bom_line, quantity): + """TODO: Not necessary in Odoo 13 or if this PR gets merged someday: + https://github.com/odoo/odoo/pull/67536""" + vals = super()._prepare_phantom_move_values(bom_line, quantity) + vals["bom_line_id"] = bom_line.id + return vals + + def _check_backorder_moves(self): + """Check if there are partial deliveries on any set of moves. The + computing is done in the same way the main picking method does it """ + quantity_todo = {} + quantity_done = {} + for move in self: + quantity_todo.setdefault(move.product_id.id, 0) + quantity_done.setdefault(move.product_id.id, 0) + quantity_todo[move.product_id.id] += move.product_uom_qty + quantity_done[move.product_id.id] += move.quantity_done + for ops in self.mapped("move_line_ids").filtered( + lambda x: x.package_id and not x.product_id and not x.move_id + ): + for quant in ops.package_id.quant_ids: + quantity_done.setdefault(quant.product_id.id, 0) + quantity_done[quant.product_id.id] += quant.qty + for pack in self.mapped("move_line_ids").filtered( + lambda x: x.product_id and not x.move_id + ): + quantity_done.setdefault(pack.product_id.id, 0) + quantity_done[pack.product_id.id] += pack.product_uom_id._compute_quantity( + pack.qty_done, pack.product_id.uom_id + ) + return any(quantity_done[x] < quantity_todo.get(x, 0) for x in quantity_done) diff --git a/stock_whole_kit_constraint/models/stock_picking.py b/stock_whole_kit_constraint/models/stock_picking.py new file mode 100644 index 000000000..a756094ce --- /dev/null +++ b/stock_whole_kit_constraint/models/stock_picking.py @@ -0,0 +1,29 @@ +# Copyright 2021 Tecnativa - David Vidal +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import _, models +from odoo.exceptions import ValidationError + + +class StockPicking(models.Model): + _inherit = "stock.picking" + + def _check_backorder(self): + """On the moment of the picking validation, we'll check wether there + are kits that can't be partially delivered or not""" + moves = self.mapped("move_lines").filtered( + lambda x: not x.allow_partial_kit_delivery and x.bom_line_id + ) + boms = moves.mapped("bom_line_id.bom_id") + for bom in boms: + bom_moves = moves.filtered(lambda x: x.bom_line_id.bom_id == bom) + # We can put it in backorder if the whole kit goes + if not sum(bom_moves.mapped("quantity_done")): + continue + if bom_moves._check_backorder_moves(): + raise ValidationError( + _( + "You can't make a partial delivery of components of the " + "%s kit" % bom.product_tmpl_id.display_name + ) + ) + return super()._check_backorder() diff --git a/stock_whole_kit_constraint/readme/CONFIGURE.rst b/stock_whole_kit_constraint/readme/CONFIGURE.rst new file mode 100644 index 000000000..f3185dfd2 --- /dev/null +++ b/stock_whole_kit_constraint/readme/CONFIGURE.rst @@ -0,0 +1,6 @@ +To allow/disallow the partial delivery of kits: + +#. Go to the kit product template or variant and then to the *Inventory* tab, + *Logistics* group. +#. The "Allow Partial Kit" check controls this. If marked, it will allow it. +#. By default, the check is not marked. diff --git a/stock_whole_kit_constraint/readme/CONTRIBUTORS.rst b/stock_whole_kit_constraint/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..61589bc27 --- /dev/null +++ b/stock_whole_kit_constraint/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* Tecnativa __ + + * David Vidal diff --git a/stock_whole_kit_constraint/readme/DESCRIPTION.rst b/stock_whole_kit_constraint/readme/DESCRIPTION.rst new file mode 100644 index 000000000..cf1aba01d --- /dev/null +++ b/stock_whole_kit_constraint/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module allows to configure a product that has a BoM of type kit to disallow partial +deliveries so that the components can't be partially delivered. diff --git a/stock_whole_kit_constraint/readme/USAGE.rst b/stock_whole_kit_constraint/readme/USAGE.rst new file mode 100644 index 000000000..a5bbc3d41 --- /dev/null +++ b/stock_whole_kit_constraint/readme/USAGE.rst @@ -0,0 +1,8 @@ +To use this module, you need to: + +#. Make a delivery picking with a kit product. +#. Try to deliver it partially. +#. An error will raise. + +If you want to deliver other items in the picking you can do so and leave the +whole kit components units pending in a backorder. diff --git a/stock_whole_kit_constraint/static/description/icon.png b/stock_whole_kit_constraint/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..757fd5906ef7f8aaf9324134da1a8927e53fc500 GIT binary patch literal 2589 zcmXArdmz*M8^^z!xlC#ip$S#E_DaZWCC5KFloVFbIT<&zwewszTeODeZJ4<`8@B}^ZfBiu(2}VFMdQE0D%2?3sXCA zr3fA|5%Aq%c;yWMz$fvh#`Yn(3whSpTssvzTe%DUBboLUUZI#ywLA2fgSW(DTqXSQ zszC??VbL7wU#SZi`am3VU*r9QRLeHe45O@K8V(I}hXx&pO+P9T!y34G@VcjRn*9lR zmvp~{yKH8c@pjO3Pw%$TYEaO|1|v!5Q%yv~ zp8M(m%R$ZywROBap$S*r-=MQ;hDUR@W`rIP6>V$x>o+%&p z2D$pjx2(aDp~%m~f{D=WMZkk_SkCLk33dAv9|GWo(`7^3j;=Jz0%N!2vQUnO`T6xE zLnHq!5?`fGR87X-RW@_x`UTCCJKgmQ)`0$v@Riwea!WmvpS6&jd}MWJG&!qI@@u#C zh*=79)GrH z3gKt@!7Cn?VFGP_g|tx8I#uh_t0Z;d0K5n$W_PrGGovjf@OYXB4}Z{-g2qTCX~O5V z!2rQ}A_e?L!RP7Ncv$Z7cvuj!Qwq+Cg9R0>Ccq9EQ~4+88*fdigX{5KC^M-+gK5g4 zG!IV;Exmo;4Nj+_>kK?s%oAYil+*1A7Fz2{0h>9s(dVS|-m(?g6DP*G|IE$CA>wXY z9lp;g_CctIg#gzU7N0Qcb#1t#Up>p>tkv9G@;@zVwEP*^=3BFGU-lbBZQRmnaw|et z_t=QbTiFR|8C1ZQmD*MD7*hj$k-##W*90f0AAm>Ll1V@BxUjsN%z z8D|bBUHQQeXZ$E&BU8gsx^;E01~%qjdTsvGl~Fp}ECyGYIco}mZ*qj%cKyd*%YLp@ zy@5va4opT>l^aryT`YiGZM#2vtrdIs{iQVGNRa#3h z7k}O^E+F9Muj!B+(+V#k+A7ki2;ec->rPm6ZZ~v3OPb`?^rz^1Hne&wI4mN&ovY>G zw)Aq>xtVZlsrC>cH@_Te@lGUQd)(xX_2b`z*VoTi_!mx23(>>#&|5CJL=xhgDA}%v zEOAgzbjyN+J=gxZG&+=ID<%C%I3#I&z0mwFG8cv(dtPoqjGM}qx8Ojec~a8N8c|=B z#JJ*CcxWn?WYVr_M)>5uQWRuk>nwF!u0t1-%2XzlGC!h?;FHr(&vV<-yjz)9F=s4^ zoe@UUYFw>Yf7Q)z>etUW&|u5TQ4R0;^*zOl<{12aAIuqR;=RJxxX6s(0A?WvagnF& zrl=H;p>)a#lm8W`R@{T_1VW&2eb$Rl#2L~VyYmUhZSYW4h|1#X!cMGyyz_1j)og0OfL1#08V6{(~!y1-Rq(9nkO}HsD|av z?W3}yJyy3)1^#RIQs2peY)$XwwC)byaPHpu$x41%$t}GbzBC$1lxq3wD{M|HHaW=U zjR|dK<{Be~wRT&j>Yd1YvD1Unq*ZB{QQH}KR(!Fl?I z4o#aR+|I?zwLxa_I1w#V^XVxq)EepUjm>8~eWd_xBUyk`b3Y?^qk$p(&E@Yk*<)<=CM%mq5W(-^ zuoX2`bfFsx&?oakCV!QU90uokx_SK`vx1B{=H9{{>>zXVo98fgTCR4@1l+dz*?b zGt9tXISBUqF^GIy07jCoA_%?5ZZC|2c>^7p4}j3UY}F^n)b> zw{oO!mB;SyB6FFtZXRg)l4CVBdiE7in&{;Rs9=W|VaBLkx<7=Kh+z7vZ${KT!h)q~ zDQ0K4lWNrz$6PFsJ6H1*K^-5`vgO}?CJH?ip(lgIn%wsOQ$+OGUFO3wB}m?W?FK_2 zWMi_+NlH3T@!b&4?8l7VH8&KNt66P@yDB8}vE*WUsSB-&3eyH@HFXN)Vp6_b>N_A{ zWtrM*0tHzoKI|+%DnRoswEpTZdyFc+%U}eC3}M+4jA;{7=^2i26QFi%*V$FtGgwt5 z!X7SL_VT5@zHB1&BJI-!9ZC;clLixbm=@jJL;R|+WDmMJQN7{6{tPq1U!go)GXqqL zRN&uz>Er1OGZ_mI3980+I5uBbMj(#aQTyojTCY0yCI=~q$##DJaVdK4{7c1P2Q7{7 zq=*gZ5uu0A8aU<1Lm;bu&)P)g;$rb0ZZp~9N0>Jd^~$N@D`jqdS5g%HF%enyTrdz% zVu&)L(T}Spw6!GLa3^7d<_#qej6sbw%-oh|Sq9knU(}>|4@+~bK$)>c=V}w1CZZjt zC~N=8)Pm`_%8Dx7lyq>a6Yd5_itY_M?(p;2J*dOrU}4I}o1UHRZHvo!9E*dV!r_Sx z8dD0&+q(;e*hY&U}RCAXE3lP`g z>J^kC(Z1|cG}xJgP40G9inkSbxcMzlq8vQPr9vkMJEiIymoU(-u?~?~Yrq{(=QNLv z-3eP*95cc`!QFg13x)!4eof<0(`R4)7?i@+UwvB})7Y4g%+1cW>pziEfZnv_IuZB) zyaA~YteD?tIeJv%7z7AmrW*8h1eM3^-t?;tXH{Nq3SFJH+R!A|zhvxilk*fm`k9`x zk+@cSHjfPzYjw8L-&rF7f*TZ}?Ssu?N|Bj_lc<+EV92a)`sqg7HGu2dM5_vW$Ai~C N0B>exTKT&N_5b)i)j9wG literal 0 HcmV?d00001 diff --git a/stock_whole_kit_constraint/static/description/index.html b/stock_whole_kit_constraint/static/description/index.html new file mode 100644 index 000000000..6d57274b1 --- /dev/null +++ b/stock_whole_kit_constraint/static/description/index.html @@ -0,0 +1,446 @@ + + + + + + +Stock whole kit constraint + + + +
+

Stock whole kit constraint

+ + +

Beta License: AGPL-3 OCA/manufacture Translate me on Weblate Try me on Runbot

+

This module allows to configure a product that has a BoM of type kit to disallow partial +deliveries so that the components can’t be partially delivered.

+

Table of contents

+ +
+

Configuration

+

To allow/disallow the partial delivery of kits:

+
    +
  1. Go to the kit product template or variant and then to the Inventory tab, +Logistics group.
  2. +
  3. The “Allow Partial Kit” check controls this. If marked, it will allow it.
  4. +
  5. By default, the check is not marked.
  6. +
+
+
+

Usage

+

To use this module, you need to:

+
    +
  1. Make a delivery picking with a kit product.
  2. +
  3. Try to deliver it partially.
  4. +
  5. An error will raise.
  6. +
+

If you want to deliver other items in the picking you can do so and leave the +whole kit components units pending in a backorder.

+
+
+

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.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

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

+

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

+
+
+
+ + diff --git a/stock_whole_kit_constraint/tests/__init__.py b/stock_whole_kit_constraint/tests/__init__.py new file mode 100644 index 000000000..5eb9fbc7c --- /dev/null +++ b/stock_whole_kit_constraint/tests/__init__.py @@ -0,0 +1 @@ +from . import test_stock_whole_kit_constraint diff --git a/stock_whole_kit_constraint/tests/test_stock_whole_kit_constraint.py b/stock_whole_kit_constraint/tests/test_stock_whole_kit_constraint.py new file mode 100644 index 000000000..71a892fe8 --- /dev/null +++ b/stock_whole_kit_constraint/tests/test_stock_whole_kit_constraint.py @@ -0,0 +1,145 @@ +# Copyright 2021 Tecnativa - David Vidal +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo.exceptions import ValidationError +from odoo.tests import Form, common + + +class TestStockWholeKitConstraint(common.SavepointCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.customer = cls.env["res.partner"].create({"name": "Mr. Odoo"}) + # Kit 1 that can be partially delivered + cls.product_kit_1 = cls.env["product.product"].create( + {"name": "Product Kit 1", "type": "consu"} + ) + cls.component_1_kit_1 = cls.env["product.product"].create( + {"name": "Component 1 Kit 1", "type": "product"} + ) + cls.component_2_kit_1 = cls.env["product.product"].create( + {"name": "Component 2 Kit 1", "type": "product"} + ) + bom_form = Form(cls.env["mrp.bom"]) + bom_form.product_tmpl_id = cls.product_kit_1.product_tmpl_id + bom_form.product_id = cls.product_kit_1 + bom_form.type = "phantom" + with bom_form.bom_line_ids.new() as line: + line.product_id = cls.component_1_kit_1 + with bom_form.bom_line_ids.new() as line: + line.product_id = cls.component_2_kit_1 + cls.bom_kit_1 = bom_form.save() + # Kit 2 - disallow partial deliveries + cls.product_kit_2 = cls.env["product.product"].create( + { + "name": "Product Kit 2", + "type": "consu", + "allow_partial_kit_delivery": False, + } + ) + cls.component_1_kit_2 = cls.env["product.product"].create( + {"name": "Component 1 Kit 2", "type": "product"} + ) + cls.component_2_kit_2 = cls.env["product.product"].create( + {"name": "Component 2 Kit 2", "type": "product"} + ) + bom_form = Form(cls.env["mrp.bom"]) + bom_form.product_tmpl_id = cls.product_kit_2.product_tmpl_id + bom_form.product_id = cls.product_kit_2 + bom_form.type = "phantom" + with bom_form.bom_line_ids.new() as line: + line.product_id = cls.component_1_kit_2 + with bom_form.bom_line_ids.new() as line: + line.product_id = cls.component_2_kit_2 + cls.bom_kit_2 = bom_form.save() + # Manufactured product as control + cls.product_mrp = cls.env["product.product"].create( + { + "name": "Product Kit 2", + "type": "consu", + # Force the setting in a manufactured product. + # It should not affect it + "allow_partial_kit_delivery": False, + } + ) + bom_form = Form(cls.env["mrp.bom"]) + bom_form.product_tmpl_id = cls.product_mrp.product_tmpl_id + bom_form.product_id = cls.product_mrp + bom_form.type = "normal" + with bom_form.bom_line_ids.new() as line: + line.product_id = cls.component_1_kit_2 + cls.bom_mrp = bom_form.save() + # Not a kit product as control + cls.regular_product = cls.env["product.product"].create( + { + "name": "Regular test product", + "type": "product", + # Force the setting in a regular product. It should not affect it + "allow_partial_kit_delivery": False, + } + ) + # Delivery picking + picking_form = Form(cls.env["stock.picking"]) + picking_form.picking_type_id = cls.env.ref("stock.picking_type_out") + picking_form.partner_id = cls.customer + with picking_form.move_ids_without_package.new() as move: + move.product_id = cls.product_kit_1 + move.product_uom_qty = 3.0 + with picking_form.move_ids_without_package.new() as move: + move.product_id = cls.product_kit_2 + move.product_uom_qty = 3.0 + with picking_form.move_ids_without_package.new() as move: + move.product_id = cls.product_mrp + move.product_uom_qty = 3.0 + with picking_form.move_ids_without_package.new() as move: + move.product_id = cls.regular_product + move.product_uom_qty = 3.0 + cls.customer_picking = picking_form.save() + cls.customer_picking.action_confirm() + + def test_01_all_partially_done_but_the_disallow_partial_kit(self): + """No quantity is done for the kit disallowed and only partially for the + others so the backorder wizard raises.""" + moves_allowed = self.customer_picking.move_lines.filtered( + lambda x: x.bom_line_id.bom_id != self.bom_kit_2 + ) + moves_allowed.write({"quantity_done": 1}) + response = self.customer_picking.button_validate() + self.assertEqual("stock.backorder.confirmation", response.get("res_model")) + + def test_02_all_done_but_partial_disallow_partial_kit(self): + """We try to deliver partially the disallowed kit""" + moves_disallowed = self.customer_picking.move_lines.filtered( + lambda x: x.bom_line_id.bom_id == self.bom_kit_2 + ) + moves_disallowed.write({"quantity_done": 1}) + with self.assertRaises(ValidationError): + self.customer_picking.button_validate() + # We can split the picking if the whole kit components are delivered + moves_disallowed.write({"quantity_done": 3}) + # We've got a backorder on the rest of the lines + response = self.customer_picking.button_validate() + self.assertEqual("stock.backorder.confirmation", response.get("res_model")) + + def test_03_all_done(self): + """Deliver the whole picking normally""" + self.customer_picking.move_lines.write({"quantity_done": 3}) + self.customer_picking.button_validate() + self.assertEqual("done", self.customer_picking.state) + + def test_04_manual_move_lines(self): + """If a user adds manual operations, we should consider it as well""" + # We need to enable detaild operations to test this case + self.customer_picking.picking_type_id.show_operations = True + picking_form = Form(self.customer_picking) + for product in (self.bom_kit_1 + self.bom_kit_2).mapped( + "bom_line_ids.product_id" + ): + with picking_form.move_line_ids_without_package.new() as line: + line.product_id = product + line.qty_done = 3 + picking_form.save() + self.customer_picking.move_lines.filtered( + lambda x: x.product_id in (self.product_mrp, self.regular_product) + ).write({"quantity_done": 3}) + self.customer_picking.button_validate() + self.assertEqual("done", self.customer_picking.state) diff --git a/stock_whole_kit_constraint/views/product_template_views.xml b/stock_whole_kit_constraint/views/product_template_views.xml new file mode 100644 index 000000000..c3d24cc3f --- /dev/null +++ b/stock_whole_kit_constraint/views/product_template_views.xml @@ -0,0 +1,31 @@ + + + + + product.template + + + + + + + + + + product.product + + + + + + + + + + From e109cb7064ba41e7e190ea6b6c76d86f9b19781e Mon Sep 17 00:00:00 2001 From: david Date: Tue, 28 Sep 2021 12:26:40 +0200 Subject: [PATCH 2/9] [MIG] stock_whole_kit_constraint: Migration to 13.0 TT29360 --- stock_whole_kit_constraint/README.rst | 10 +++++----- stock_whole_kit_constraint/__manifest__.py | 2 +- .../i18n/stock_whole_kit_constraint.pot | 13 +++++++------ stock_whole_kit_constraint/models/stock_move.py | 7 ------- .../static/description/index.html | 6 +++--- .../views/product_template_views.xml | 4 ++-- 6 files changed, 18 insertions(+), 24 deletions(-) diff --git a/stock_whole_kit_constraint/README.rst b/stock_whole_kit_constraint/README.rst index 073303fa8..739c896a4 100644 --- a/stock_whole_kit_constraint/README.rst +++ b/stock_whole_kit_constraint/README.rst @@ -14,13 +14,13 @@ Stock whole kit constraint :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmanufacture-lightgray.png?logo=github - :target: https://github.com/OCA/manufacture/tree/12.0/stock_whole_kit_constraint + :target: https://github.com/OCA/manufacture/tree/13.0/stock_whole_kit_constraint :alt: OCA/manufacture .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/manufacture-12-0/manufacture-12-0-stock_whole_kit_constraint + :target: https://translation.odoo-community.org/projects/manufacture-13-0/manufacture-13-0-stock_whole_kit_constraint :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/129/12.0 + :target: https://runbot.odoo-community.org/runbot/129/13.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -61,7 +61,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -93,6 +93,6 @@ 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. -This module is part of the `OCA/manufacture `_ project on GitHub. +This module is part of the `OCA/manufacture `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/stock_whole_kit_constraint/__manifest__.py b/stock_whole_kit_constraint/__manifest__.py index 9c6e31ba7..88e8d4b93 100644 --- a/stock_whole_kit_constraint/__manifest__.py +++ b/stock_whole_kit_constraint/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Stock whole kit constraint", "summary": "Avoid to deliver a kit partially", - "version": "12.0.1.0.0", + "version": "13.0.1.0.0", "category": "Stock", "website": "https://github.com/OCA/manufacture", "author": "Tecnativa, Odoo Community Association (OCA)", diff --git a/stock_whole_kit_constraint/i18n/stock_whole_kit_constraint.pot b/stock_whole_kit_constraint/i18n/stock_whole_kit_constraint.pot index 5c414e923..26a803b60 100644 --- a/stock_whole_kit_constraint/i18n/stock_whole_kit_constraint.pot +++ b/stock_whole_kit_constraint/i18n/stock_whole_kit_constraint.pot @@ -1,12 +1,12 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * stock_whole_kit_constraint +# * stock_whole_kit_constraint # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: <>\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,7 +23,9 @@ msgstr "" #. module: stock_whole_kit_constraint #: model:ir.model.fields,help:stock_whole_kit_constraint.field_product_product__allow_partial_kit_delivery #: model:ir.model.fields,help:stock_whole_kit_constraint.field_product_template__allow_partial_kit_delivery -msgid "If not set, and this product is delivered with a BoM of type kit, partial deliveries of the components won't be allowed." +msgid "" +"If not set, and this product is delivered with a BoM of type kit, partial " +"deliveries of the components won't be allowed." msgstr "" #. module: stock_whole_kit_constraint @@ -42,8 +44,7 @@ msgid "Transfer" msgstr "" #. module: stock_whole_kit_constraint -#: code:addons/stock_whole_kit_constraint/models/stock_picking.py:23 +#: code:addons/stock_whole_kit_constraint/models/stock_picking.py:0 #, python-format msgid "You can't make a partial delivery of components of the %s kit" msgstr "" - diff --git a/stock_whole_kit_constraint/models/stock_move.py b/stock_whole_kit_constraint/models/stock_move.py index 335498e63..aaaa4249a 100644 --- a/stock_whole_kit_constraint/models/stock_move.py +++ b/stock_whole_kit_constraint/models/stock_move.py @@ -25,13 +25,6 @@ class StockMove(models.Model): move.bom_line_id.bom_id.product_tmpl_id.allow_partial_kit_delivery ) - def _prepare_phantom_move_values(self, bom_line, quantity): - """TODO: Not necessary in Odoo 13 or if this PR gets merged someday: - https://github.com/odoo/odoo/pull/67536""" - vals = super()._prepare_phantom_move_values(bom_line, quantity) - vals["bom_line_id"] = bom_line.id - return vals - def _check_backorder_moves(self): """Check if there are partial deliveries on any set of moves. The computing is done in the same way the main picking method does it """ diff --git a/stock_whole_kit_constraint/static/description/index.html b/stock_whole_kit_constraint/static/description/index.html index 6d57274b1..caaa84f38 100644 --- a/stock_whole_kit_constraint/static/description/index.html +++ b/stock_whole_kit_constraint/static/description/index.html @@ -367,7 +367,7 @@ ul.auto-toc { !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/manufacture Translate me on Weblate Try me on Runbot

+

Beta License: AGPL-3 OCA/manufacture Translate me on Weblate Try me on Runbot

This module allows to configure a product that has a BoM of type kit to disallow partial deliveries so that the components can’t be partially delivered.

Table of contents

@@ -410,7 +410,7 @@ whole kit components units pending in a backorder.

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.

+feedback.

Do not contact contributors directly about support or help with technical issues.

@@ -437,7 +437,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome

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.

-

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

+

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

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

diff --git a/stock_whole_kit_constraint/views/product_template_views.xml b/stock_whole_kit_constraint/views/product_template_views.xml index c3d24cc3f..a423c002c 100644 --- a/stock_whole_kit_constraint/views/product_template_views.xml +++ b/stock_whole_kit_constraint/views/product_template_views.xml @@ -9,7 +9,7 @@ @@ -22,7 +22,7 @@ From b996d011354d2c3f4fb60059f414bb4f64cf6bd1 Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Wed, 20 Oct 2021 14:44:56 +0000 Subject: [PATCH 3/9] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: manufacture-13.0/manufacture-13.0-stock_whole_kit_constraint Translate-URL: https://translation.odoo-community.org/projects/manufacture-13-0/manufacture-13-0-stock_whole_kit_constraint/ --- stock_whole_kit_constraint/i18n/es.po | 17 +++++++++++++---- stock_whole_kit_constraint/models/stock_move.py | 5 +++-- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/stock_whole_kit_constraint/i18n/es.po b/stock_whole_kit_constraint/i18n/es.po index 8e5a1b473..cc1ab5e9a 100644 --- a/stock_whole_kit_constraint/i18n/es.po +++ b/stock_whole_kit_constraint/i18n/es.po @@ -10,11 +10,11 @@ msgstr "" "PO-Revision-Date: 2021-03-19 11:41+0100\n" "Last-Translator: <>\n" "Language-Team: \n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: \n" -"Language: es\n" "X-Generator: Poedit 2.3\n" #. module: stock_whole_kit_constraint @@ -27,8 +27,10 @@ msgstr "Permitir entrega parcial de kit" #. module: stock_whole_kit_constraint #: model:ir.model.fields,help:stock_whole_kit_constraint.field_product_product__allow_partial_kit_delivery #: model:ir.model.fields,help:stock_whole_kit_constraint.field_product_template__allow_partial_kit_delivery -msgid "If not set when a kit product components are delivered, it won't be allowed to do it partially." -msgstr "No no está activo, cuando haya una entrega con un kit, no se permitirá la entrega parcial de sus componentes." +msgid "" +"If not set, and this product is delivered with a BoM of type kit, partial " +"deliveries of the components won't be allowed." +msgstr "" #. module: stock_whole_kit_constraint #: model:ir.model,name:stock_whole_kit_constraint.model_product_template @@ -46,7 +48,14 @@ msgid "Transfer" msgstr "Albarán" #. module: stock_whole_kit_constraint -#: code:addons/stock_whole_kit_constraint/models/stock_picking.py:23 +#: code:addons/stock_whole_kit_constraint/models/stock_picking.py:0 #, python-format msgid "You can't make a partial delivery of components of the %s kit" msgstr "No puede realizar una entrega parcial de los componentes del kit %s" + +#~ msgid "" +#~ "If not set when a kit product components are delivered, it won't be " +#~ "allowed to do it partially." +#~ msgstr "" +#~ "No no está activo, cuando haya una entrega con un kit, no se permitirá la " +#~ "entrega parcial de sus componentes." diff --git a/stock_whole_kit_constraint/models/stock_move.py b/stock_whole_kit_constraint/models/stock_move.py index aaaa4249a..acf7830b4 100644 --- a/stock_whole_kit_constraint/models/stock_move.py +++ b/stock_whole_kit_constraint/models/stock_move.py @@ -7,7 +7,8 @@ class StockMove(models.Model): _inherit = "stock.move" allow_partial_kit_delivery = fields.Boolean( - compute="_compute_allow_partial_kit_delivery", compute_sudo=True, + compute="_compute_allow_partial_kit_delivery", + compute_sudo=True, ) @api.depends("product_id.product_tmpl_id.allow_partial_kit_delivery", "state") @@ -27,7 +28,7 @@ class StockMove(models.Model): def _check_backorder_moves(self): """Check if there are partial deliveries on any set of moves. The - computing is done in the same way the main picking method does it """ + computing is done in the same way the main picking method does it""" quantity_todo = {} quantity_done = {} for move in self: From b51756dc435383f7e43ab26a1b77ec9954c59722 Mon Sep 17 00:00:00 2001 From: ferran-73 Date: Thu, 27 Jan 2022 08:38:49 +0100 Subject: [PATCH 4/9] [14.0][MIG] stock_whole_kit_constraint: Migration to V14 --- stock_whole_kit_constraint/README.rst | 10 ++++---- stock_whole_kit_constraint/__manifest__.py | 2 +- .../i18n/stock_whole_kit_constraint.pot | 23 ++++++++++++++++++- .../static/description/index.html | 6 ++--- 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/stock_whole_kit_constraint/README.rst b/stock_whole_kit_constraint/README.rst index 739c896a4..b258a62e2 100644 --- a/stock_whole_kit_constraint/README.rst +++ b/stock_whole_kit_constraint/README.rst @@ -14,13 +14,13 @@ Stock whole kit constraint :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmanufacture-lightgray.png?logo=github - :target: https://github.com/OCA/manufacture/tree/13.0/stock_whole_kit_constraint + :target: https://github.com/OCA/manufacture/tree/14.0/stock_whole_kit_constraint :alt: OCA/manufacture .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/manufacture-13-0/manufacture-13-0-stock_whole_kit_constraint + :target: https://translation.odoo-community.org/projects/manufacture-14-0/manufacture-14-0-stock_whole_kit_constraint :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/129/13.0 + :target: https://runbot.odoo-community.org/runbot/129/14.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -61,7 +61,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -93,6 +93,6 @@ 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. -This module is part of the `OCA/manufacture `_ project on GitHub. +This module is part of the `OCA/manufacture `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/stock_whole_kit_constraint/__manifest__.py b/stock_whole_kit_constraint/__manifest__.py index 88e8d4b93..747055600 100644 --- a/stock_whole_kit_constraint/__manifest__.py +++ b/stock_whole_kit_constraint/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Stock whole kit constraint", "summary": "Avoid to deliver a kit partially", - "version": "13.0.1.0.0", + "version": "14.0.1.0.0", "category": "Stock", "website": "https://github.com/OCA/manufacture", "author": "Tecnativa, Odoo Community Association (OCA)", diff --git a/stock_whole_kit_constraint/i18n/stock_whole_kit_constraint.pot b/stock_whole_kit_constraint/i18n/stock_whole_kit_constraint.pot index 26a803b60..95248d3ee 100644 --- a/stock_whole_kit_constraint/i18n/stock_whole_kit_constraint.pot +++ b/stock_whole_kit_constraint/i18n/stock_whole_kit_constraint.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 13.0\n" +"Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -20,6 +20,20 @@ msgstr "" msgid "Allow Partial Kit Delivery" msgstr "" +#. module: stock_whole_kit_constraint +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_product_template__display_name +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_stock_move__display_name +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_stock_picking__display_name +msgid "Display Name" +msgstr "" + +#. module: stock_whole_kit_constraint +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_product_template__id +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_stock_move__id +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_stock_picking__id +msgid "ID" +msgstr "" + #. module: stock_whole_kit_constraint #: model:ir.model.fields,help:stock_whole_kit_constraint.field_product_product__allow_partial_kit_delivery #: model:ir.model.fields,help:stock_whole_kit_constraint.field_product_template__allow_partial_kit_delivery @@ -28,6 +42,13 @@ msgid "" "deliveries of the components won't be allowed." msgstr "" +#. module: stock_whole_kit_constraint +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_product_template____last_update +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_stock_move____last_update +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_stock_picking____last_update +msgid "Last Modified on" +msgstr "" + #. module: stock_whole_kit_constraint #: model:ir.model,name:stock_whole_kit_constraint.model_product_template msgid "Product Template" diff --git a/stock_whole_kit_constraint/static/description/index.html b/stock_whole_kit_constraint/static/description/index.html index caaa84f38..4df089d8f 100644 --- a/stock_whole_kit_constraint/static/description/index.html +++ b/stock_whole_kit_constraint/static/description/index.html @@ -367,7 +367,7 @@ ul.auto-toc { !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/manufacture Translate me on Weblate Try me on Runbot

+

Beta License: AGPL-3 OCA/manufacture Translate me on Weblate Try me on Runbot

This module allows to configure a product that has a BoM of type kit to disallow partial deliveries so that the components can’t be partially delivered.

Table of contents

@@ -410,7 +410,7 @@ whole kit components units pending in a backorder.

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.

+feedback.

Do not contact contributors directly about support or help with technical issues.

@@ -437,7 +437,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome

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.

-

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

+

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

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

From 31965bb004b0ca0be79ac0904361b1186ea06d33 Mon Sep 17 00:00:00 2001 From: mymage Date: Thu, 22 Dec 2022 11:40:00 +0000 Subject: [PATCH 5/9] Added translation using Weblate (Italian) --- stock_whole_kit_constraint/i18n/it.po | 72 +++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 stock_whole_kit_constraint/i18n/it.po diff --git a/stock_whole_kit_constraint/i18n/it.po b/stock_whole_kit_constraint/i18n/it.po new file mode 100644 index 000000000..83368f1fd --- /dev/null +++ b/stock_whole_kit_constraint/i18n/it.po @@ -0,0 +1,72 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_whole_kit_constraint +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: stock_whole_kit_constraint +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_product_product__allow_partial_kit_delivery +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_product_template__allow_partial_kit_delivery +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_stock_move__allow_partial_kit_delivery +msgid "Allow Partial Kit Delivery" +msgstr "" + +#. module: stock_whole_kit_constraint +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_product_template__display_name +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_stock_move__display_name +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_stock_picking__display_name +msgid "Display Name" +msgstr "" + +#. module: stock_whole_kit_constraint +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_product_template__id +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_stock_move__id +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_stock_picking__id +msgid "ID" +msgstr "" + +#. module: stock_whole_kit_constraint +#: model:ir.model.fields,help:stock_whole_kit_constraint.field_product_product__allow_partial_kit_delivery +#: model:ir.model.fields,help:stock_whole_kit_constraint.field_product_template__allow_partial_kit_delivery +msgid "" +"If not set, and this product is delivered with a BoM of type kit, partial " +"deliveries of the components won't be allowed." +msgstr "" + +#. module: stock_whole_kit_constraint +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_product_template____last_update +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_stock_move____last_update +#: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_stock_picking____last_update +msgid "Last Modified on" +msgstr "" + +#. module: stock_whole_kit_constraint +#: model:ir.model,name:stock_whole_kit_constraint.model_product_template +msgid "Product Template" +msgstr "" + +#. module: stock_whole_kit_constraint +#: model:ir.model,name:stock_whole_kit_constraint.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: stock_whole_kit_constraint +#: model:ir.model,name:stock_whole_kit_constraint.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: stock_whole_kit_constraint +#: code:addons/stock_whole_kit_constraint/models/stock_picking.py:0 +#, python-format +msgid "You can't make a partial delivery of components of the %s kit" +msgstr "" From a9f4c9540be557488e5fda02d6ffa7dd8ac26f8e Mon Sep 17 00:00:00 2001 From: mymage Date: Thu, 22 Dec 2022 11:40:20 +0000 Subject: [PATCH 6/9] Translated using Weblate (Italian) Currently translated at 100.0% (9 of 9 strings) Translation: manufacture-14.0/manufacture-14.0-stock_whole_kit_constraint Translate-URL: https://translation.odoo-community.org/projects/manufacture-14-0/manufacture-14-0-stock_whole_kit_constraint/it/ --- stock_whole_kit_constraint/i18n/it.po | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/stock_whole_kit_constraint/i18n/it.po b/stock_whole_kit_constraint/i18n/it.po index 83368f1fd..9e460d377 100644 --- a/stock_whole_kit_constraint/i18n/it.po +++ b/stock_whole_kit_constraint/i18n/it.po @@ -6,34 +6,36 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2022-12-22 13:44+0000\n" +"Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.14.1\n" #. module: stock_whole_kit_constraint #: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_product_product__allow_partial_kit_delivery #: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_product_template__allow_partial_kit_delivery #: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_stock_move__allow_partial_kit_delivery msgid "Allow Partial Kit Delivery" -msgstr "" +msgstr "Consenti consegna confezione parziale" #. module: stock_whole_kit_constraint #: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_product_template__display_name #: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_stock_move__display_name #: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_stock_picking__display_name msgid "Display Name" -msgstr "" +msgstr "Nome visualizzato" #. module: stock_whole_kit_constraint #: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_product_template__id #: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_stock_move__id #: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_stock_picking__id msgid "ID" -msgstr "" +msgstr "ID" #. module: stock_whole_kit_constraint #: model:ir.model.fields,help:stock_whole_kit_constraint.field_product_product__allow_partial_kit_delivery @@ -42,31 +44,33 @@ msgid "" "If not set, and this product is delivered with a BoM of type kit, partial " "deliveries of the components won't be allowed." msgstr "" +"Se non impostato e il prodotto viene consegnato con una DB di tipo " +"confezione, consegne parziali dei componenti non sono consentite." #. module: stock_whole_kit_constraint #: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_product_template____last_update #: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_stock_move____last_update #: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_stock_picking____last_update msgid "Last Modified on" -msgstr "" +msgstr "Utima modifica il" #. module: stock_whole_kit_constraint #: model:ir.model,name:stock_whole_kit_constraint.model_product_template msgid "Product Template" -msgstr "" +msgstr "Modello prodotto" #. module: stock_whole_kit_constraint #: model:ir.model,name:stock_whole_kit_constraint.model_stock_move msgid "Stock Move" -msgstr "" +msgstr "Movimento di magazzino" #. module: stock_whole_kit_constraint #: model:ir.model,name:stock_whole_kit_constraint.model_stock_picking msgid "Transfer" -msgstr "" +msgstr "Trasferimento" #. module: stock_whole_kit_constraint #: code:addons/stock_whole_kit_constraint/models/stock_picking.py:0 #, python-format msgid "You can't make a partial delivery of components of the %s kit" -msgstr "" +msgstr "Non si può fare una consegna parziale di componenti della confezione %s" From 55a02f9ec26b848cb23e2552b121319e7adcc000 Mon Sep 17 00:00:00 2001 From: Francesco Foresti Date: Thu, 29 Dec 2022 14:34:30 +0000 Subject: [PATCH 7/9] Translated using Weblate (Italian) Currently translated at 100.0% (9 of 9 strings) Translation: manufacture-14.0/manufacture-14.0-stock_whole_kit_constraint Translate-URL: https://translation.odoo-community.org/projects/manufacture-14-0/manufacture-14-0-stock_whole_kit_constraint/it/ --- stock_whole_kit_constraint/i18n/it.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/stock_whole_kit_constraint/i18n/it.po b/stock_whole_kit_constraint/i18n/it.po index 9e460d377..76f034cd8 100644 --- a/stock_whole_kit_constraint/i18n/it.po +++ b/stock_whole_kit_constraint/i18n/it.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2022-12-22 13:44+0000\n" -"Last-Translator: mymage \n" +"PO-Revision-Date: 2022-12-29 16:45+0000\n" +"Last-Translator: Francesco Foresti \n" "Language-Team: none\n" "Language: it\n" "MIME-Version: 1.0\n" @@ -52,7 +52,7 @@ msgstr "" #: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_stock_move____last_update #: model:ir.model.fields,field_description:stock_whole_kit_constraint.field_stock_picking____last_update msgid "Last Modified on" -msgstr "Utima modifica il" +msgstr "Ultima modifica il" #. module: stock_whole_kit_constraint #: model:ir.model,name:stock_whole_kit_constraint.model_product_template From 25cc236f6a3205f5d4918492cbe82312620b2f02 Mon Sep 17 00:00:00 2001 From: mymage Date: Sun, 1 Jan 2023 11:37:08 +0000 Subject: [PATCH 8/9] Translated using Weblate (Italian) Currently translated at 100.0% (9 of 9 strings) Translation: manufacture-14.0/manufacture-14.0-stock_whole_kit_constraint Translate-URL: https://translation.odoo-community.org/projects/manufacture-14-0/manufacture-14-0-stock_whole_kit_constraint/it/ --- .../odoo/addons/stock_whole_kit_constraint | 1 + setup/stock_whole_kit_constraint/setup.py | 6 ++++++ stock_whole_kit_constraint/i18n/it.po | 6 +++--- 3 files changed, 10 insertions(+), 3 deletions(-) create mode 120000 setup/stock_whole_kit_constraint/odoo/addons/stock_whole_kit_constraint create mode 100644 setup/stock_whole_kit_constraint/setup.py diff --git a/setup/stock_whole_kit_constraint/odoo/addons/stock_whole_kit_constraint b/setup/stock_whole_kit_constraint/odoo/addons/stock_whole_kit_constraint new file mode 120000 index 000000000..5e49291ba --- /dev/null +++ b/setup/stock_whole_kit_constraint/odoo/addons/stock_whole_kit_constraint @@ -0,0 +1 @@ +../../../../stock_whole_kit_constraint \ No newline at end of file diff --git a/setup/stock_whole_kit_constraint/setup.py b/setup/stock_whole_kit_constraint/setup.py new file mode 100644 index 000000000..28c57bb64 --- /dev/null +++ b/setup/stock_whole_kit_constraint/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/stock_whole_kit_constraint/i18n/it.po b/stock_whole_kit_constraint/i18n/it.po index 76f034cd8..356de731e 100644 --- a/stock_whole_kit_constraint/i18n/it.po +++ b/stock_whole_kit_constraint/i18n/it.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2022-12-29 16:45+0000\n" -"Last-Translator: Francesco Foresti \n" +"PO-Revision-Date: 2023-01-01 13:44+0000\n" +"Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" "MIME-Version: 1.0\n" @@ -44,7 +44,7 @@ msgid "" "If not set, and this product is delivered with a BoM of type kit, partial " "deliveries of the components won't be allowed." msgstr "" -"Se non impostato e il prodotto viene consegnato con una DB di tipo " +"Se non impostato e il prodotto viene consegnato con una DiBa di tipo " "confezione, consegne parziali dei componenti non sono consentite." #. module: stock_whole_kit_constraint From 8abd7491b336d90395be0b89856d57d83c172e54 Mon Sep 17 00:00:00 2001 From: pilarvargas-tecnativa Date: Wed, 11 Jan 2023 16:27:40 +0100 Subject: [PATCH 9/9] [MIG] stock_whole_kit_constraint: Migration to version 15.0 TT37325 --- stock_whole_kit_constraint/README.rst | 17 +++++++++-------- stock_whole_kit_constraint/__manifest__.py | 2 +- .../models/stock_picking.py | 3 ++- stock_whole_kit_constraint/readme/CONFIGURE.rst | 2 +- .../readme/CONTRIBUTORS.rst | 1 + .../static/description/index.html | 11 ++++++----- .../tests/test_stock_whole_kit_constraint.py | 2 +- 7 files changed, 21 insertions(+), 17 deletions(-) diff --git a/stock_whole_kit_constraint/README.rst b/stock_whole_kit_constraint/README.rst index b258a62e2..3f98de7c3 100644 --- a/stock_whole_kit_constraint/README.rst +++ b/stock_whole_kit_constraint/README.rst @@ -14,14 +14,14 @@ Stock whole kit constraint :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmanufacture-lightgray.png?logo=github - :target: https://github.com/OCA/manufacture/tree/14.0/stock_whole_kit_constraint + :target: https://github.com/OCA/manufacture/tree/15.0/stock_whole_kit_constraint :alt: OCA/manufacture .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/manufacture-14-0/manufacture-14-0-stock_whole_kit_constraint + :target: https://translation.odoo-community.org/projects/manufacture-15-0/manufacture-15-0-stock_whole_kit_constraint :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/129/14.0 - :alt: Try me on Runbot +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/webui/builds.html?repo=OCA/manufacture&target_branch=15.0 + :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -41,7 +41,7 @@ To allow/disallow the partial delivery of kits: #. Go to the kit product template or variant and then to the *Inventory* tab, *Logistics* group. #. The "Allow Partial Kit" check controls this. If marked, it will allow it. -#. By default, the check is not marked. +#. By default, the check is marked. Usage ===== @@ -61,7 +61,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -79,6 +79,7 @@ Contributors * Tecnativa __ * David Vidal + * Pilar Vargas Maintainers ~~~~~~~~~~~ @@ -93,6 +94,6 @@ 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. -This module is part of the `OCA/manufacture `_ project on GitHub. +This module is part of the `OCA/manufacture `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/stock_whole_kit_constraint/__manifest__.py b/stock_whole_kit_constraint/__manifest__.py index 747055600..71f2493be 100644 --- a/stock_whole_kit_constraint/__manifest__.py +++ b/stock_whole_kit_constraint/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Stock whole kit constraint", "summary": "Avoid to deliver a kit partially", - "version": "14.0.1.0.0", + "version": "15.0.1.0.0", "category": "Stock", "website": "https://github.com/OCA/manufacture", "author": "Tecnativa, Odoo Community Association (OCA)", diff --git a/stock_whole_kit_constraint/models/stock_picking.py b/stock_whole_kit_constraint/models/stock_picking.py index a756094ce..24754be4c 100644 --- a/stock_whole_kit_constraint/models/stock_picking.py +++ b/stock_whole_kit_constraint/models/stock_picking.py @@ -23,7 +23,8 @@ class StockPicking(models.Model): raise ValidationError( _( "You can't make a partial delivery of components of the " - "%s kit" % bom.product_tmpl_id.display_name + "%s kit", + bom.product_tmpl_id.display_name, ) ) return super()._check_backorder() diff --git a/stock_whole_kit_constraint/readme/CONFIGURE.rst b/stock_whole_kit_constraint/readme/CONFIGURE.rst index f3185dfd2..981c7ce5d 100644 --- a/stock_whole_kit_constraint/readme/CONFIGURE.rst +++ b/stock_whole_kit_constraint/readme/CONFIGURE.rst @@ -3,4 +3,4 @@ To allow/disallow the partial delivery of kits: #. Go to the kit product template or variant and then to the *Inventory* tab, *Logistics* group. #. The "Allow Partial Kit" check controls this. If marked, it will allow it. -#. By default, the check is not marked. +#. By default, the check is marked. diff --git a/stock_whole_kit_constraint/readme/CONTRIBUTORS.rst b/stock_whole_kit_constraint/readme/CONTRIBUTORS.rst index 61589bc27..da6fbe9c5 100644 --- a/stock_whole_kit_constraint/readme/CONTRIBUTORS.rst +++ b/stock_whole_kit_constraint/readme/CONTRIBUTORS.rst @@ -1,3 +1,4 @@ * Tecnativa __ * David Vidal + * Pilar Vargas diff --git a/stock_whole_kit_constraint/static/description/index.html b/stock_whole_kit_constraint/static/description/index.html index 4df089d8f..5d933e574 100644 --- a/stock_whole_kit_constraint/static/description/index.html +++ b/stock_whole_kit_constraint/static/description/index.html @@ -3,7 +3,7 @@ - + Stock whole kit constraint