From fd2e044f83e1661ca8f80768222b40ae981c5279 Mon Sep 17 00:00:00 2001 From: pilarvargas-tecnativa Date: Tue, 3 Sep 2024 16:16:10 +0200 Subject: [PATCH 1/3] [ADD] sale_order_whole_delivered_invoiceability: Add new module TT50680 --- .../README.rst | 96 ++++ .../__init__.py | 3 + .../__manifest__.py | 14 + .../i18n/es.po | 46 ++ ...e_order_whole_delivered_invoiceability.pot | 42 ++ .../models/__init__.py | 3 + .../models/res_partner.py | 18 + .../models/sale_order.py | 40 ++ .../readme/CONFIGURE.rst | 2 + .../readme/CONTRIBUTORS.rst | 4 + .../readme/DESCRIPTION.rst | 2 + .../readme/USAGE.rst | 6 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 446 ++++++++++++++++++ .../tests/__init__.py | 3 + ...le_order_whole_delivered_invoiceability.py | 60 +++ .../views/res_partner_view.xml | 13 + .../views/sale_order_view.xml | 19 + 18 files changed, 817 insertions(+) create mode 100644 sale_order_whole_delivered_invoiceability/README.rst create mode 100644 sale_order_whole_delivered_invoiceability/__init__.py create mode 100644 sale_order_whole_delivered_invoiceability/__manifest__.py create mode 100644 sale_order_whole_delivered_invoiceability/i18n/es.po create mode 100644 sale_order_whole_delivered_invoiceability/i18n/sale_order_whole_delivered_invoiceability.pot create mode 100644 sale_order_whole_delivered_invoiceability/models/__init__.py create mode 100644 sale_order_whole_delivered_invoiceability/models/res_partner.py create mode 100644 sale_order_whole_delivered_invoiceability/models/sale_order.py create mode 100644 sale_order_whole_delivered_invoiceability/readme/CONFIGURE.rst create mode 100644 sale_order_whole_delivered_invoiceability/readme/CONTRIBUTORS.rst create mode 100644 sale_order_whole_delivered_invoiceability/readme/DESCRIPTION.rst create mode 100644 sale_order_whole_delivered_invoiceability/readme/USAGE.rst create mode 100644 sale_order_whole_delivered_invoiceability/static/description/icon.png create mode 100644 sale_order_whole_delivered_invoiceability/static/description/index.html create mode 100644 sale_order_whole_delivered_invoiceability/tests/__init__.py create mode 100644 sale_order_whole_delivered_invoiceability/tests/test_sale_order_whole_delivered_invoiceability.py create mode 100644 sale_order_whole_delivered_invoiceability/views/res_partner_view.xml create mode 100644 sale_order_whole_delivered_invoiceability/views/sale_order_view.xml diff --git a/sale_order_whole_delivered_invoiceability/README.rst b/sale_order_whole_delivered_invoiceability/README.rst new file mode 100644 index 00000000000..43f5d47b498 --- /dev/null +++ b/sale_order_whole_delivered_invoiceability/README.rst @@ -0,0 +1,96 @@ +========================================= +Sale Order Whole Delivered Invoiceability +========================================= + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:d41a21754b0e3e1281e8d05a8276d9b5aff794c2e7d2959ce8e04d5e055fa7e5 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Faccount--invoicing-lightgray.png?logo=github + :target: https://github.com/OCA/account-invoicing/tree/15.0/sale_order_whole_delivered_invoiceability + :alt: OCA/account-invoicing +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/account-invoicing-15-0/account-invoicing-15-0-sale_order_whole_delivered_invoiceability + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/account-invoicing&target_branch=15.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module prevents the invoiceability of the sale orders until all the +stockable products has been delivered. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +#. Create a new storable product +#. Set its invoicing policy as "Delivered Quantities". + +Usage +===== + +To use this module you need to: + +#. Go to a customer that you do not want to invoice for incomplete deliveries and check the option ‘Whole Delivered Invoiceability’. +#. Create a sales order and do a partial delivery. + +Although it is possible to create an invoice from the order itself, the ‘Create invoice’ button will remain white and the order will not appear in the list of orders to be invoiced, which can be consulted from the ‘To invoice’ menu. + +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 to smash 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 `__: + + * Pedro M. Baeza + * Pilar Vargas + +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/account-invoicing `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/sale_order_whole_delivered_invoiceability/__init__.py b/sale_order_whole_delivered_invoiceability/__init__.py new file mode 100644 index 00000000000..69f7babdfb1 --- /dev/null +++ b/sale_order_whole_delivered_invoiceability/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models diff --git a/sale_order_whole_delivered_invoiceability/__manifest__.py b/sale_order_whole_delivered_invoiceability/__manifest__.py new file mode 100644 index 00000000000..da026e31d88 --- /dev/null +++ b/sale_order_whole_delivered_invoiceability/__manifest__.py @@ -0,0 +1,14 @@ +# Copyright 2024 Tecnativa - Pilar Vargas +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Sale Order Whole Delivered Invoiceability", + "version": "15.0.1.0.0", + "category": "Sales Management", + "license": "AGPL-3", + "author": "Tecnativa, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/account-invoicing", + "depends": ["sale"], + "data": ["views/res_partner_view.xml", "views/sale_order_view.xml"], + "installable": True, +} diff --git a/sale_order_whole_delivered_invoiceability/i18n/es.po b/sale_order_whole_delivered_invoiceability/i18n/es.po new file mode 100644 index 00000000000..dca211a3975 --- /dev/null +++ b/sale_order_whole_delivered_invoiceability/i18n/es.po @@ -0,0 +1,46 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_whole_delivered_invoiceability +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-09-03 16:50+0000\n" +"PO-Revision-Date: 2024-09-03 18:54+0200\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: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 3.0.1\n" + +#. module: sale_order_whole_delivered_invoiceability +#: model:ir.model,name:sale_order_whole_delivered_invoiceability.model_res_partner +msgid "Contact" +msgstr "Contacto" + +#. module: sale_order_whole_delivered_invoiceability +#: model_terms:ir.ui.view,arch_db:sale_order_whole_delivered_invoiceability.view_sales_order_filter +msgid "Partial orders not invoiced" +msgstr "Pedidos parciales no facturados" + +#. module: sale_order_whole_delivered_invoiceability +#: model:ir.model.fields,help:sale_order_whole_delivered_invoiceability.field_res_partner__whole_delivered_invoiceability +#: model:ir.model.fields,help:sale_order_whole_delivered_invoiceability.field_res_users__whole_delivered_invoiceability +msgid "Prevent invoicing until everything has been delivered." +msgstr "Evitar la facturación hasta que se haya entregado todo." + +#. module: sale_order_whole_delivered_invoiceability +#: model:ir.model,name:sale_order_whole_delivered_invoiceability.model_sale_order +msgid "Sales Order" +msgstr "Órdenes de Venta" + +#. module: sale_order_whole_delivered_invoiceability +#: model:ir.model.fields,field_description:sale_order_whole_delivered_invoiceability.field_res_partner__whole_delivered_invoiceability +#: model:ir.model.fields,field_description:sale_order_whole_delivered_invoiceability.field_res_users__whole_delivered_invoiceability +#: model:ir.model.fields,field_description:sale_order_whole_delivered_invoiceability.field_sale_order__whole_delivered_invoiceability +msgid "Whole Delivered Invoiceability" +msgstr "Facturación de entregas completas" diff --git a/sale_order_whole_delivered_invoiceability/i18n/sale_order_whole_delivered_invoiceability.pot b/sale_order_whole_delivered_invoiceability/i18n/sale_order_whole_delivered_invoiceability.pot new file mode 100644 index 00000000000..c92d8631fef --- /dev/null +++ b/sale_order_whole_delivered_invoiceability/i18n/sale_order_whole_delivered_invoiceability.pot @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_whole_delivered_invoiceability +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.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: sale_order_whole_delivered_invoiceability +#: model:ir.model,name:sale_order_whole_delivered_invoiceability.model_res_partner +msgid "Contact" +msgstr "" + +#. module: sale_order_whole_delivered_invoiceability +#: model_terms:ir.ui.view,arch_db:sale_order_whole_delivered_invoiceability.view_sales_order_filter +msgid "Partial orders not invoiced" +msgstr "" + +#. module: sale_order_whole_delivered_invoiceability +#: model:ir.model.fields,help:sale_order_whole_delivered_invoiceability.field_res_partner__whole_delivered_invoiceability +#: model:ir.model.fields,help:sale_order_whole_delivered_invoiceability.field_res_users__whole_delivered_invoiceability +msgid "Prevent invoicing until everything has been delivered." +msgstr "" + +#. module: sale_order_whole_delivered_invoiceability +#: model:ir.model,name:sale_order_whole_delivered_invoiceability.model_sale_order +msgid "Sales Order" +msgstr "" + +#. module: sale_order_whole_delivered_invoiceability +#: model:ir.model.fields,field_description:sale_order_whole_delivered_invoiceability.field_res_partner__whole_delivered_invoiceability +#: model:ir.model.fields,field_description:sale_order_whole_delivered_invoiceability.field_res_users__whole_delivered_invoiceability +#: model:ir.model.fields,field_description:sale_order_whole_delivered_invoiceability.field_sale_order__whole_delivered_invoiceability +msgid "Whole Delivered Invoiceability" +msgstr "" diff --git a/sale_order_whole_delivered_invoiceability/models/__init__.py b/sale_order_whole_delivered_invoiceability/models/__init__.py new file mode 100644 index 00000000000..b66355c63c1 --- /dev/null +++ b/sale_order_whole_delivered_invoiceability/models/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from . import res_partner +from . import sale_order diff --git a/sale_order_whole_delivered_invoiceability/models/res_partner.py b/sale_order_whole_delivered_invoiceability/models/res_partner.py new file mode 100644 index 00000000000..0ae03ea239c --- /dev/null +++ b/sale_order_whole_delivered_invoiceability/models/res_partner.py @@ -0,0 +1,18 @@ +# Copyright 2024 Tecnativa - Pilar Vargas +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import api, fields, models + + +class ResPartner(models.Model): + _inherit = "res.partner" + + whole_delivered_invoiceability = fields.Boolean( + help="Prevent invoicing until everything has been delivered." + ) + + @api.model + def _commercial_fields(self): + """Add this field to commercial fields, as it should be propagated + to children. + """ + return super()._commercial_fields() + ["whole_delivered_invoiceability"] diff --git a/sale_order_whole_delivered_invoiceability/models/sale_order.py b/sale_order_whole_delivered_invoiceability/models/sale_order.py new file mode 100644 index 00000000000..f07225df395 --- /dev/null +++ b/sale_order_whole_delivered_invoiceability/models/sale_order.py @@ -0,0 +1,40 @@ +# Copyright 2024 Tecnativa - Pilar Vargas +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import api, fields, models +from odoo.tools import float_compare + + +class SaleOrder(models.Model): + _inherit = "sale.order" + + whole_delivered_invoiceability = fields.Boolean( + compute="_compute_whole_delivered_invoiceability", + store=True, + readonly=False, + ) + + @api.depends("partner_id") + def _compute_whole_delivered_invoiceability(self): + for record in self: + if record.partner_id.whole_delivered_invoiceability: + record.whole_delivered_invoiceability = True + + @api.depends("whole_delivered_invoiceability") + def _get_invoice_status(self): + # Intercept the invoice_status computed method to + # set it as not invoiceable if the delivered quantity + # is less than the ordered quantity. + res = super()._get_invoice_status() + for order in self.filtered("whole_delivered_invoiceability"): + uncomplete_lines = order.order_line.filtered( + lambda line: line.product_id.invoice_policy == "delivery" + and float_compare( + line.product_uom_qty, + line.qty_delivered, + precision_rounding=line.product_uom.rounding, + ) + > 0 + ) + if uncomplete_lines: + order.invoice_status = "no" + return res diff --git a/sale_order_whole_delivered_invoiceability/readme/CONFIGURE.rst b/sale_order_whole_delivered_invoiceability/readme/CONFIGURE.rst new file mode 100644 index 00000000000..36f69fe084e --- /dev/null +++ b/sale_order_whole_delivered_invoiceability/readme/CONFIGURE.rst @@ -0,0 +1,2 @@ +#. Create a new storable product +#. Set its invoicing policy as "Delivered Quantities". diff --git a/sale_order_whole_delivered_invoiceability/readme/CONTRIBUTORS.rst b/sale_order_whole_delivered_invoiceability/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000000..c858c3a7ed9 --- /dev/null +++ b/sale_order_whole_delivered_invoiceability/readme/CONTRIBUTORS.rst @@ -0,0 +1,4 @@ +* `Tecnativa `__: + + * Pedro M. Baeza + * Pilar Vargas diff --git a/sale_order_whole_delivered_invoiceability/readme/DESCRIPTION.rst b/sale_order_whole_delivered_invoiceability/readme/DESCRIPTION.rst new file mode 100644 index 00000000000..c18fab7df4e --- /dev/null +++ b/sale_order_whole_delivered_invoiceability/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module prevents the invoiceability of the sale orders until all the +stockable products has been delivered. diff --git a/sale_order_whole_delivered_invoiceability/readme/USAGE.rst b/sale_order_whole_delivered_invoiceability/readme/USAGE.rst new file mode 100644 index 00000000000..63732a1635f --- /dev/null +++ b/sale_order_whole_delivered_invoiceability/readme/USAGE.rst @@ -0,0 +1,6 @@ +To use this module you need to: + +#. Go to a customer that you do not want to invoice for incomplete deliveries and check the option ‘Whole Delivered Invoiceability’. +#. Create a sales order and do a partial delivery. + +Although it is possible to create an invoice from the order itself, the ‘Create invoice’ button will remain white and the order will not appear in the list of orders to be invoiced, which can be consulted from the ‘To invoice’ menu. diff --git a/sale_order_whole_delivered_invoiceability/static/description/icon.png b/sale_order_whole_delivered_invoiceability/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 zcmW++2RxMjAAjx~&dlBk9S+%}OXg)AGE&Cb*&}d0jUxM@u(PQx^-s)697TX`ehR4?GS^qbkof1cslKgkU)h65qZ9Oc=ml_0temigYLJfnz{IDzUf>bGs4N!v3=Z3jMq&A#7%rM5eQ#dc?k~! zVpnB`o+K7|Al`Q_U;eD$B zfJtP*jH`siUq~{KE)`jP2|#TUEFGRryE2`i0**z#*^6~AI|YzIWy$Cu#CSLW3q=GA z6`?GZymC;dCPk~rBS%eCb`5OLr;RUZ;D`}um=H)BfVIq%7VhiMr)_#G0N#zrNH|__ zc+blN2UAB0=617@>_u;MPHN;P;N#YoE=)R#i$k_`UAA>WWCcEVMh~L_ zj--gtp&|K1#58Yz*AHCTMziU1Jzt_jG0I@qAOHsk$2}yTmVkBp_eHuY$A9)>P6o~I z%aQ?!(GqeQ-Y+b0I(m9pwgi(IIZZzsbMv+9w{PFtd_<_(LA~0H(xz{=FhLB@(1&qHA5EJw1>>=%q2f&^X>IQ{!GJ4e9U z&KlB)z(84HmNgm2hg2C0>WM{E(DdPr+EeU_N@57;PC2&DmGFW_9kP&%?X4}+xWi)( z;)z%wI5>D4a*5XwD)P--sPkoY(a~WBw;E~AW`Yue4kFa^LM3X`8x|}ZUeMnqr}>kH zG%WWW>3ml$Yez?i%)2pbKPI7?5o?hydokgQyZsNEr{a|mLdt;X2TX(#B1j35xPnPW z*bMSSOauW>o;*=kO8ojw91VX!qoOQb)zHJ!odWB}d+*K?#sY_jqPdg{Sm2HdYzdEx zOGVPhVRTGPtv0o}RfVP;Nd(|CB)I;*t&QO8h zFfekr30S!-LHmV_Su-W+rEwYXJ^;6&3|L$mMC8*bQptyOo9;>Qb9Q9`ySe3%V$A*9 zeKEe+b0{#KWGp$F+tga)0RtI)nhMa-K@JS}2krK~n8vJ=Ngm?R!9G<~RyuU0d?nz# z-5EK$o(!F?hmX*2Yt6+coY`6jGbb7tF#6nHA zuKk=GGJ;ZwON1iAfG$E#Y7MnZVmrY|j0eVI(DN_MNFJmyZ|;w4tf@=CCDZ#5N_0K= z$;R~bbk?}TpfDjfB&aiQ$VA}s?P}xPERJG{kxk5~R`iRS(SK5d+Xs9swCozZISbnS zk!)I0>t=A<-^z(cmSFz3=jZ23u13X><0b)P)^1T_))Kr`e!-pb#q&J*Q`p+B6la%C zuVl&0duN<;uOsB3%T9Fp8t{ED108<+W(nOZd?gDnfNBC3>M8WE61$So|P zVvqH0SNtDTcsUdzaMDpT=Ty0pDHHNL@Z0w$Y`XO z2M-_r1S+GaH%pz#Uy0*w$Vdl=X=rQXEzO}d6J^R6zjM1u&c9vYLvLp?W7w(?np9x1 zE_0JSAJCPB%i7p*Wvg)pn5T`8k3-uR?*NT|J`eS#_#54p>!p(mLDvmc-3o0mX*mp_ zN*AeS<>#^-{S%W<*mz^!X$w_2dHWpcJ6^j64qFBft-o}o_Vx80o0>}Du;>kLts;$8 zC`7q$QI(dKYG`Wa8#wl@V4jVWBRGQ@1dr-hstpQL)Tl+aqVpGpbSfN>5i&QMXfiZ> zaA?T1VGe?rpQ@;+pkrVdd{klI&jVS@I5_iz!=UMpTsa~mBga?1r}aRBm1WS;TT*s0f0lY=JBl66Upy)-k4J}lh=P^8(SXk~0xW=T9v*B|gzIhN z>qsO7dFd~mgxAy4V?&)=5ieYq?zi?ZEoj)&2o)RLy=@hbCRcfT5jigwtQGE{L*8<@Yd{zg;CsL5mvzfDY}P-wos_6PfprFVaeqNE%h zKZhLtcQld;ZD+>=nqN~>GvROfueSzJD&BE*}XfU|H&(FssBqY=hPCt`d zH?@s2>I(|;fcW&YM6#V#!kUIP8$Nkdh0A(bEVj``-AAyYgwY~jB zT|I7Bf@%;7aL7Wf4dZ%VqF$eiaC38OV6oy3Z#TER2G+fOCd9Iaoy6aLYbPTN{XRPz z;U!V|vBf%H!}52L2gH_+j;`bTcQRXB+y9onc^wLm5wi3-Be}U>k_u>2Eg$=k!(l@I zcCg+flakT2Nej3i0yn+g+}%NYb?ta;R?(g5SnwsQ49U8Wng8d|{B+lyRcEDvR3+`O{zfmrmvFrL6acVP%yG98X zo&+VBg@px@i)%o?dG(`T;n*$S5*rnyiR#=wW}}GsAcfyQpE|>a{=$Hjg=-*_K;UtD z#z-)AXwSRY?OPefw^iI+ z)AXz#PfEjlwTes|_{sB?4(O@fg0AJ^g8gP}ex9Ucf*@_^J(s_5jJV}c)s$`Myn|Kd z$6>}#q^n{4vN@+Os$m7KV+`}c%4)4pv@06af4-x5#wj!KKb%caK{A&Y#Rfs z-po?Dcb1({W=6FKIUirH&(yg=*6aLCekcKwyfK^JN5{wcA3nhO(o}SK#!CINhI`-I z1)6&n7O&ZmyFMuNwvEic#IiOAwNkR=u5it{B9n2sAJV5pNhar=j5`*N!Na;c7g!l$ z3aYBqUkqqTJ=Re-;)s!EOeij=7SQZ3Hq}ZRds%IM*PtM$wV z@;rlc*NRK7i3y5BETSKuumEN`Xu_8GP1Ri=OKQ$@I^ko8>H6)4rjiG5{VBM>B|%`&&s^)jS|-_95&yc=GqjNo{zFkw%%HHhS~e=s zD#sfS+-?*t|J!+ozP6KvtOl!R)@@-z24}`9{QaVLD^9VCSR2b`b!KC#o;Ki<+wXB6 zx3&O0LOWcg4&rv4QG0)4yb}7BFSEg~=IR5#ZRj8kg}dS7_V&^%#Do==#`u zpy6{ox?jWuR(;pg+f@mT>#HGWHAJRRDDDv~@(IDw&R>9643kK#HN`!1vBJHnC+RM&yIh8{gG2q zA%e*U3|N0XSRa~oX-3EAneep)@{h2vvd3Xvy$7og(sayr@95+e6~Xvi1tUqnIxoIH zVWo*OwYElb#uyW{Imam6f2rGbjR!Y3`#gPqkv57dB6K^wRGxc9B(t|aYDGS=m$&S!NmCtrMMaUg(c zc2qC=2Z`EEFMW-me5B)24AqF*bV5Dr-M5ig(l-WPS%CgaPzs6p_gnCIvTJ=Y<6!gT zVt@AfYCzjjsMEGi=rDQHo0yc;HqoRNnNFeWZgcm?f;cp(6CNylj36DoL(?TS7eU#+ z7&mfr#y))+CJOXQKUMZ7QIdS9@#-}7y2K1{8)cCt0~-X0O!O?Qx#E4Og+;A2SjalQ zs7r?qn0H044=sDN$SRG$arw~n=+T_DNdSrarmu)V6@|?1-ZB#hRn`uilTGPJ@fqEy zGt(f0B+^JDP&f=r{#Y_wi#AVDf-y!RIXU^0jXsFpf>=Ji*TeqSY!H~AMbJdCGLhC) zn7Rx+sXw6uYj;WRYrLd^5IZq@6JI1C^YkgnedZEYy<&4(z%Q$5yv#Boo{AH8n$a zhb4Y3PWdr269&?V%uI$xMcUrMzl=;w<_nm*qr=c3Rl@i5wWB;e-`t7D&c-mcQl7x! zZWB`UGcw=Y2=}~wzrfLx=uet<;m3~=8I~ZRuzvMQUQdr+yTV|ATf1Uuomr__nDf=X zZ3WYJtHp_ri(}SQAPjv+Y+0=fH4krOP@S&=zZ-t1jW1o@}z;xk8 z(Nz1co&El^HK^NrhVHa-_;&88vTU>_J33=%{if;BEY*J#1n59=07jrGQ#IP>@u#3A z;!q+E1Rj3ZJ+!4bq9F8PXJ@yMgZL;>&gYA0%_Kbi8?S=XGM~dnQZQ!yBSgcZhY96H zrWnU;k)qy`rX&&xlDyA%(a1Hhi5CWkmg(`Gb%m(HKi-7Z!LKGRP_B8@`7&hdDy5n= z`OIxqxiVfX@OX1p(mQu>0Ai*v_cTMiw4qRt3~NBvr9oBy0)r>w3p~V0SCm=An6@3n)>@z!|o-$HvDK z|3D2ZMJkLE5loMKl6R^ez@Zz%S$&mbeoqH5`Bb){Ei21q&VP)hWS2tjShfFtGE+$z zzCR$P#uktu+#!w)cX!lWN1XU%K-r=s{|j?)Akf@q#3b#{6cZCuJ~gCxuMXRmI$nGtnH+-h z+GEi!*X=AP<|fG`1>MBdTb?28JYc=fGvAi2I<$B(rs$;eoJCyR6_bc~p!XR@O-+sD z=eH`-ye})I5ic1eL~TDmtfJ|8`0VJ*Yr=hNCd)G1p2MMz4C3^Mj?7;!w|Ly%JqmuW zlIEW^Ft%z?*|fpXda>Jr^1noFZEwFgVV%|*XhH@acv8rdGxeEX{M$(vG{Zw+x(ei@ zmfXb22}8-?Fi`vo-YVrTH*C?a8%M=Hv9MqVH7H^J$KsD?>!SFZ;ZsvnHr_gn=7acz z#W?0eCdVhVMWN12VV^$>WlQ?f;P^{(&pYTops|btm6aj>_Uz+hqpGwB)vWp0Cf5y< zft8-je~nn?W11plq}N)4A{l8I7$!ks_x$PXW-2XaRFswX_BnF{R#6YIwMhAgd5F9X zGmwdadS6(a^fjHtXg8=l?Rc0Sm%hk6E9!5cLVloEy4eh(=FwgP`)~I^5~pBEWo+F6 zSf2ncyMurJN91#cJTy_u8Y}@%!bq1RkGC~-bV@SXRd4F{R-*V`bS+6;W5vZ(&+I<9$;-V|eNfLa5n-6% z2(}&uGRF;p92eS*sE*oR$@pexaqr*meB)VhmIg@h{uzkk$9~qh#cHhw#>O%)b@+(| z^IQgqzuj~Sk(J;swEM-3TrJAPCq9k^^^`q{IItKBRXYe}e0Tdr=Huf7da3$l4PdpwWDop%^}n;dD#K4s#DYA8SHZ z&1!riV4W4R7R#C))JH1~axJ)RYnM$$lIR%6fIVA@zV{XVyx}C+a-Dt8Y9M)^KU0+H zR4IUb2CJ{Hg>CuaXtD50jB(_Tcx=Z$^WYu2u5kubqmwp%drJ6 z?Fo40g!Qd<-l=TQxqHEOuPX0;^z7iX?Ke^a%XT<13TA^5`4Xcw6D@Ur&VT&CUe0d} z1GjOVF1^L@>O)l@?bD~$wzgf(nxX1OGD8fEV?TdJcZc2KoUe|oP1#=$$7ee|xbY)A zDZq+cuTpc(fFdj^=!;{k03C69lMQ(|>uhRfRu%+!k&YOi-3|1QKB z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/sale_order_whole_delivered_invoiceability/static/description/index.html b/sale_order_whole_delivered_invoiceability/static/description/index.html new file mode 100644 index 00000000000..0725c3d2fb0 --- /dev/null +++ b/sale_order_whole_delivered_invoiceability/static/description/index.html @@ -0,0 +1,446 @@ + + + + + +Sale Order Whole Delivered Invoiceability + + + +
+

Sale Order Whole Delivered Invoiceability

+ + +

Beta License: AGPL-3 OCA/account-invoicing Translate me on Weblate Try me on Runboat

+

This module prevents the invoiceability of the sale orders until all the +stockable products has been delivered.

+

Table of contents

+ +
+

Configuration

+
    +
  1. Create a new storable product
  2. +
  3. Set its invoicing policy as “Delivered Quantities”.
  4. +
+
+
+

Usage

+

To use this module you need to:

+
    +
  1. Go to a customer that you do not want to invoice for incomplete deliveries and check the option ‘Whole Delivered Invoiceability’.
  2. +
  3. Create a sales order and do a partial delivery.
  4. +
+

Although it is possible to create an invoice from the order itself, the ‘Create invoice’ button will remain white and the order will not appear in the list of orders to be invoiced, which can be consulted from the ‘To invoice’ menu.

+
+
+

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 to smash 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:
      +
    • Pedro M. Baeza
    • +
    • Pilar Vargas
    • +
    +
  • +
+
+
+

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/account-invoicing project on GitHub.

+

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

+
+
+
+ + diff --git a/sale_order_whole_delivered_invoiceability/tests/__init__.py b/sale_order_whole_delivered_invoiceability/tests/__init__.py new file mode 100644 index 00000000000..39809b5539d --- /dev/null +++ b/sale_order_whole_delivered_invoiceability/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import test_sale_order_whole_delivered_invoiceability diff --git a/sale_order_whole_delivered_invoiceability/tests/test_sale_order_whole_delivered_invoiceability.py b/sale_order_whole_delivered_invoiceability/tests/test_sale_order_whole_delivered_invoiceability.py new file mode 100644 index 00000000000..53d6caa8514 --- /dev/null +++ b/sale_order_whole_delivered_invoiceability/tests/test_sale_order_whole_delivered_invoiceability.py @@ -0,0 +1,60 @@ +# Copyright 2024 Tecnativa - Pilar Vargas +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.tests import TransactionCase + + +class TestSaleOrderWholeDeliveredInvoiceability(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True)) + cls.partner = cls.env["res.partner"].create( + {"name": "Test partner", "whole_delivered_invoiceability": True} + ) + cls.product_1 = cls.env["product.product"].create( + { + "name": "Test product One", + "invoice_policy": "delivery", + } + ) + cls.product_2 = cls.env["product.product"].create( + { + "name": "Test product Two", + "invoice_policy": "delivery", + } + ) + cls.order = cls.env["sale.order"].create( + { + "partner_id": cls.partner.id, + "order_line": [ + ( + 0, + 0, + { + "name": cls.product_1.name, + "product_id": cls.product_1.id, + "product_uom_qty": 5, + "qty_delivered": 2, + }, + ), + ( + 0, + 0, + { + "name": cls.product_2.name, + "product_id": cls.product_2.id, + "product_uom_qty": 5, + "qty_delivered": 5, + }, + ), + ], + } + ) + + def test_whole_delivered_invoiceability_partner(self): + self.assertTrue(self.order.whole_delivered_invoiceability) + + def test_whole_delivered_invoiceability(self): + self.order.action_confirm() + self.assertEqual(self.order.invoice_status, "no") diff --git a/sale_order_whole_delivered_invoiceability/views/res_partner_view.xml b/sale_order_whole_delivered_invoiceability/views/res_partner_view.xml new file mode 100644 index 00000000000..ee3c7b58390 --- /dev/null +++ b/sale_order_whole_delivered_invoiceability/views/res_partner_view.xml @@ -0,0 +1,13 @@ + + + + res.partner.sale_type.form + res.partner + + + + + + + + diff --git a/sale_order_whole_delivered_invoiceability/views/sale_order_view.xml b/sale_order_whole_delivered_invoiceability/views/sale_order_view.xml new file mode 100644 index 00000000000..f9d18ec1106 --- /dev/null +++ b/sale_order_whole_delivered_invoiceability/views/sale_order_view.xml @@ -0,0 +1,19 @@ + + + + sale.order + + + + + + + + From 0a65f61aa0881ff086002473b8812328533357d1 Mon Sep 17 00:00:00 2001 From: pilarvargas-tecnativa Date: Fri, 10 Jan 2025 08:26:09 +0100 Subject: [PATCH 2/3] [IMP] sale_order_whole_delivered_invoiceability: pre-commit auto fixes --- .../README.rst | 36 ++++++++++--------- .../pyproject.toml | 3 ++ .../readme/CONFIGURE.md | 2 ++ .../readme/CONFIGURE.rst | 2 -- .../readme/CONTRIBUTORS.md | 3 ++ .../readme/CONTRIBUTORS.rst | 4 --- .../{DESCRIPTION.rst => DESCRIPTION.md} | 0 .../readme/USAGE.md | 10 ++++++ .../readme/USAGE.rst | 6 ---- .../static/description/index.html | 14 +++++--- 10 files changed, 47 insertions(+), 33 deletions(-) create mode 100644 sale_order_whole_delivered_invoiceability/pyproject.toml create mode 100644 sale_order_whole_delivered_invoiceability/readme/CONFIGURE.md delete mode 100644 sale_order_whole_delivered_invoiceability/readme/CONFIGURE.rst create mode 100644 sale_order_whole_delivered_invoiceability/readme/CONTRIBUTORS.md delete mode 100644 sale_order_whole_delivered_invoiceability/readme/CONTRIBUTORS.rst rename sale_order_whole_delivered_invoiceability/readme/{DESCRIPTION.rst => DESCRIPTION.md} (100%) create mode 100644 sale_order_whole_delivered_invoiceability/readme/USAGE.md delete mode 100644 sale_order_whole_delivered_invoiceability/readme/USAGE.rst diff --git a/sale_order_whole_delivered_invoiceability/README.rst b/sale_order_whole_delivered_invoiceability/README.rst index 43f5d47b498..4784d05b607 100644 --- a/sale_order_whole_delivered_invoiceability/README.rst +++ b/sale_order_whole_delivered_invoiceability/README.rst @@ -17,13 +17,13 @@ Sale Order Whole Delivered Invoiceability :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Faccount--invoicing-lightgray.png?logo=github - :target: https://github.com/OCA/account-invoicing/tree/15.0/sale_order_whole_delivered_invoiceability + :target: https://github.com/OCA/account-invoicing/tree/17.0/sale_order_whole_delivered_invoiceability :alt: OCA/account-invoicing .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/account-invoicing-15-0/account-invoicing-15-0-sale_order_whole_delivered_invoiceability + :target: https://translation.odoo-community.org/projects/account-invoicing-17-0/account-invoicing-17-0-sale_order_whole_delivered_invoiceability :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/account-invoicing&target_branch=15.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/account-invoicing&target_branch=17.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -39,18 +39,22 @@ stockable products has been delivered. Configuration ============= -#. Create a new storable product -#. Set its invoicing policy as "Delivered Quantities". +1. Create a new storable product +2. Set its invoicing policy as "Delivered Quantities". Usage ===== To use this module you need to: -#. Go to a customer that you do not want to invoice for incomplete deliveries and check the option ‘Whole Delivered Invoiceability’. -#. Create a sales order and do a partial delivery. +1. Go to a customer that you do not want to invoice for incomplete + deliveries and check the option ‘Whole Delivered Invoiceability’. +2. Create a sales order and do a partial delivery. -Although it is possible to create an invoice from the order itself, the ‘Create invoice’ button will remain white and the order will not appear in the list of orders to be invoiced, which can be consulted from the ‘To invoice’ menu. +Although it is possible to create an invoice from the order itself, the +‘Create invoice’ button will remain white and the order will not appear +in the list of orders to be invoiced, which can be consulted from the +‘To invoice’ menu. Bug Tracker =========== @@ -58,7 +62,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 to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -66,20 +70,20 @@ Credits ======= Authors -~~~~~~~ +------- * Tecnativa Contributors -~~~~~~~~~~~~ +------------ -* `Tecnativa `__: +- `Tecnativa `__: - * Pedro M. Baeza - * Pilar Vargas + - Pedro M. Baeza + - Pilar Vargas Maintainers -~~~~~~~~~~~ +----------- This module is maintained by the OCA. @@ -91,6 +95,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/account-invoicing `_ project on GitHub. +This module is part of the `OCA/account-invoicing `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/sale_order_whole_delivered_invoiceability/pyproject.toml b/sale_order_whole_delivered_invoiceability/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/sale_order_whole_delivered_invoiceability/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/sale_order_whole_delivered_invoiceability/readme/CONFIGURE.md b/sale_order_whole_delivered_invoiceability/readme/CONFIGURE.md new file mode 100644 index 00000000000..e91f5b7d601 --- /dev/null +++ b/sale_order_whole_delivered_invoiceability/readme/CONFIGURE.md @@ -0,0 +1,2 @@ +1. Create a new storable product +2. Set its invoicing policy as "Delivered Quantities". diff --git a/sale_order_whole_delivered_invoiceability/readme/CONFIGURE.rst b/sale_order_whole_delivered_invoiceability/readme/CONFIGURE.rst deleted file mode 100644 index 36f69fe084e..00000000000 --- a/sale_order_whole_delivered_invoiceability/readme/CONFIGURE.rst +++ /dev/null @@ -1,2 +0,0 @@ -#. Create a new storable product -#. Set its invoicing policy as "Delivered Quantities". diff --git a/sale_order_whole_delivered_invoiceability/readme/CONTRIBUTORS.md b/sale_order_whole_delivered_invoiceability/readme/CONTRIBUTORS.md new file mode 100644 index 00000000000..a064898e338 --- /dev/null +++ b/sale_order_whole_delivered_invoiceability/readme/CONTRIBUTORS.md @@ -0,0 +1,3 @@ +- [Tecnativa](https://www.tecnativa.com): + - Pedro M. Baeza + - Pilar Vargas diff --git a/sale_order_whole_delivered_invoiceability/readme/CONTRIBUTORS.rst b/sale_order_whole_delivered_invoiceability/readme/CONTRIBUTORS.rst deleted file mode 100644 index c858c3a7ed9..00000000000 --- a/sale_order_whole_delivered_invoiceability/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1,4 +0,0 @@ -* `Tecnativa `__: - - * Pedro M. Baeza - * Pilar Vargas diff --git a/sale_order_whole_delivered_invoiceability/readme/DESCRIPTION.rst b/sale_order_whole_delivered_invoiceability/readme/DESCRIPTION.md similarity index 100% rename from sale_order_whole_delivered_invoiceability/readme/DESCRIPTION.rst rename to sale_order_whole_delivered_invoiceability/readme/DESCRIPTION.md diff --git a/sale_order_whole_delivered_invoiceability/readme/USAGE.md b/sale_order_whole_delivered_invoiceability/readme/USAGE.md new file mode 100644 index 00000000000..05f50d413d3 --- /dev/null +++ b/sale_order_whole_delivered_invoiceability/readme/USAGE.md @@ -0,0 +1,10 @@ +To use this module you need to: + +1. Go to a customer that you do not want to invoice for incomplete + deliveries and check the option ‘Whole Delivered Invoiceability’. +2. Create a sales order and do a partial delivery. + +Although it is possible to create an invoice from the order itself, the +‘Create invoice’ button will remain white and the order will not appear +in the list of orders to be invoiced, which can be consulted from the +‘To invoice’ menu. diff --git a/sale_order_whole_delivered_invoiceability/readme/USAGE.rst b/sale_order_whole_delivered_invoiceability/readme/USAGE.rst deleted file mode 100644 index 63732a1635f..00000000000 --- a/sale_order_whole_delivered_invoiceability/readme/USAGE.rst +++ /dev/null @@ -1,6 +0,0 @@ -To use this module you need to: - -#. Go to a customer that you do not want to invoice for incomplete deliveries and check the option ‘Whole Delivered Invoiceability’. -#. Create a sales order and do a partial delivery. - -Although it is possible to create an invoice from the order itself, the ‘Create invoice’ button will remain white and the order will not appear in the list of orders to be invoiced, which can be consulted from the ‘To invoice’ menu. diff --git a/sale_order_whole_delivered_invoiceability/static/description/index.html b/sale_order_whole_delivered_invoiceability/static/description/index.html index 0725c3d2fb0..d9c896c64d1 100644 --- a/sale_order_whole_delivered_invoiceability/static/description/index.html +++ b/sale_order_whole_delivered_invoiceability/static/description/index.html @@ -369,7 +369,7 @@

Sale Order Whole Delivered Invoiceability

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:d41a21754b0e3e1281e8d05a8276d9b5aff794c2e7d2959ce8e04d5e055fa7e5 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/account-invoicing Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/account-invoicing Translate me on Weblate Try me on Runboat

This module prevents the invoiceability of the sale orders until all the stockable products has been delivered.

Table of contents

@@ -397,17 +397,21 @@

Configuration

Usage

To use this module you need to:

    -
  1. Go to a customer that you do not want to invoice for incomplete deliveries and check the option ‘Whole Delivered Invoiceability’.
  2. +
  3. Go to a customer that you do not want to invoice for incomplete +deliveries and check the option ‘Whole Delivered Invoiceability’.
  4. Create a sales order and do a partial delivery.
-

Although it is possible to create an invoice from the order itself, the ‘Create invoice’ button will remain white and the order will not appear in the list of orders to be invoiced, which can be consulted from the ‘To invoice’ menu.

+

Although it is possible to create an invoice from the order itself, the +‘Create invoice’ button will remain white and the order will not appear +in the list of orders to be invoiced, which can be consulted from the +‘To invoice’ menu.

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 to smash it by providing a detailed and welcomed -feedback.

+feedback.

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

@@ -437,7 +441,7 @@

Maintainers

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/account-invoicing project on GitHub.

+

This module is part of the OCA/account-invoicing project on GitHub.

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

From c71d356ac3942b10a9776f9feba42926a3151ff5 Mon Sep 17 00:00:00 2001 From: pilarvargas-tecnativa Date: Fri, 10 Jan 2025 11:03:14 +0100 Subject: [PATCH 3/3] [MIG] sale_order_whole_delivered_invoiceability: Migration to version 17.0 TT52356 --- sale_order_whole_delivered_invoiceability/__manifest__.py | 2 +- .../models/sale_order.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sale_order_whole_delivered_invoiceability/__manifest__.py b/sale_order_whole_delivered_invoiceability/__manifest__.py index da026e31d88..34f715ed866 100644 --- a/sale_order_whole_delivered_invoiceability/__manifest__.py +++ b/sale_order_whole_delivered_invoiceability/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Sale Order Whole Delivered Invoiceability", - "version": "15.0.1.0.0", + "version": "17.0.1.0.0", "category": "Sales Management", "license": "AGPL-3", "author": "Tecnativa, Odoo Community Association (OCA)", diff --git a/sale_order_whole_delivered_invoiceability/models/sale_order.py b/sale_order_whole_delivered_invoiceability/models/sale_order.py index f07225df395..18d0d6a3e66 100644 --- a/sale_order_whole_delivered_invoiceability/models/sale_order.py +++ b/sale_order_whole_delivered_invoiceability/models/sale_order.py @@ -20,11 +20,11 @@ def _compute_whole_delivered_invoiceability(self): record.whole_delivered_invoiceability = True @api.depends("whole_delivered_invoiceability") - def _get_invoice_status(self): + def _compute_invoice_status(self): # Intercept the invoice_status computed method to # set it as not invoiceable if the delivered quantity # is less than the ordered quantity. - res = super()._get_invoice_status() + res = super()._compute_invoice_status() for order in self.filtered("whole_delivered_invoiceability"): uncomplete_lines = order.order_line.filtered( lambda line: line.product_id.invoice_policy == "delivery"