From a3c60ae4b81c10fcfb9ae8c7a58c3c5b1f8d3ace Mon Sep 17 00:00:00 2001
From: Aaron Henriquez
Date: Tue, 2 Jul 2019 16:36:56 +0200
Subject: [PATCH 01/33] [ADD]purchase_reception_notify
---
purchase_reception_notify/README.rst | 81 ++++
purchase_reception_notify/__init__.py | 1 +
purchase_reception_notify/__manifest__.py | 18 +
purchase_reception_notify/data/mail.xml | 12 +
purchase_reception_notify/models/__init__.py | 1 +
.../models/stock_picking.py | 57 +++
.../readme/CONTRIBUTORS.rst | 1 +
.../readme/DESCRIPTION.rst | 4 +
purchase_reception_notify/readme/USAGE.rst | 1 +
.../static/description/index.html | 404 ++++++++++++++++++
purchase_reception_notify/tests/__init__.py | 1 +
.../tests/test_purchase_reception_notify.py | 59 +++
12 files changed, 640 insertions(+)
create mode 100644 purchase_reception_notify/README.rst
create mode 100644 purchase_reception_notify/__init__.py
create mode 100644 purchase_reception_notify/__manifest__.py
create mode 100644 purchase_reception_notify/data/mail.xml
create mode 100644 purchase_reception_notify/models/__init__.py
create mode 100644 purchase_reception_notify/models/stock_picking.py
create mode 100644 purchase_reception_notify/readme/CONTRIBUTORS.rst
create mode 100644 purchase_reception_notify/readme/DESCRIPTION.rst
create mode 100644 purchase_reception_notify/readme/USAGE.rst
create mode 100644 purchase_reception_notify/static/description/index.html
create mode 100644 purchase_reception_notify/tests/__init__.py
create mode 100644 purchase_reception_notify/tests/test_purchase_reception_notify.py
diff --git a/purchase_reception_notify/README.rst b/purchase_reception_notify/README.rst
new file mode 100644
index 00000000000..33bef6cb683
--- /dev/null
+++ b/purchase_reception_notify/README.rst
@@ -0,0 +1,81 @@
+=========================
+Purchase Reception Notify
+=========================
+
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! 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%2Fpurchase--workflow-lightgray.png?logo=github
+ :target: https://github.com/OCA/purchase-workflow/tree/11.0/purchase_reception_notify
+ :alt: OCA/purchase-workflow
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/purchase-workflow-11-0/purchase-workflow-11-0-purchase_reception_notify
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
+ :target: https://runbot.odoo-community.org/runbot/142/11.0
+ :alt: Try me on Runbot
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+This module notifies purchase users when the receptions are performed
+
+This module creates a new message subtype specifically created for those
+notifications. This subtype is internal activated by default when subscribing.
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Usage
+=====
+
+Integrated in the normal flow.
+
+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
+~~~~~~~
+
+* Eficent
+
+Contributors
+~~~~~~~~~~~~
+
+* Aaron Henriquez
+
+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/purchase-workflow `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/purchase_reception_notify/__init__.py b/purchase_reception_notify/__init__.py
new file mode 100644
index 00000000000..0650744f6bc
--- /dev/null
+++ b/purchase_reception_notify/__init__.py
@@ -0,0 +1 @@
+from . import models
diff --git a/purchase_reception_notify/__manifest__.py b/purchase_reception_notify/__manifest__.py
new file mode 100644
index 00000000000..9f71e9838b4
--- /dev/null
+++ b/purchase_reception_notify/__manifest__.py
@@ -0,0 +1,18 @@
+# Copyright 2018 Eficent Business and IT Consulting Services S.L.
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl-3.0).
+
+{
+ 'name': "Purchase Reception Notify",
+ 'version': '11.0.1.0.0',
+ 'category': 'Purchase Management',
+ 'author': "Eficent, "
+ "Odoo Community Association (OCA)",
+ 'website': 'https://github.com/OCA/purchase-workflow',
+ 'license': 'AGPL-3',
+ "depends": [
+ 'purchase',
+ ],
+ "data": ["data/mail.xml",
+ ],
+ "installable": True
+}
diff --git a/purchase_reception_notify/data/mail.xml b/purchase_reception_notify/data/mail.xml
new file mode 100644
index 00000000000..c2130532bd0
--- /dev/null
+++ b/purchase_reception_notify/data/mail.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+ Purchase Receptions
+ purchase.order
+
+
+
+
+
diff --git a/purchase_reception_notify/models/__init__.py b/purchase_reception_notify/models/__init__.py
new file mode 100644
index 00000000000..ae4c27227f1
--- /dev/null
+++ b/purchase_reception_notify/models/__init__.py
@@ -0,0 +1 @@
+from . import stock_picking
diff --git a/purchase_reception_notify/models/stock_picking.py b/purchase_reception_notify/models/stock_picking.py
new file mode 100644
index 00000000000..249ca41489e
--- /dev/null
+++ b/purchase_reception_notify/models/stock_picking.py
@@ -0,0 +1,57 @@
+# Copyright 2018 Eficent Business and IT Consulting Services S.L.
+# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl-3.0).
+
+from odoo import _, api, models
+
+
+class StockPicking(models.Model):
+ _inherit = "stock.picking"
+
+ @api.model
+ def _purchase_order_picking_confirm_message_content(
+ self, picking, purchase_dict):
+ if not purchase_dict:
+ purchase_dict = {}
+ title = _('Receipt confirmation %s') % (
+ picking.name)
+ message = '%s
' % title
+ message += _('The following items '
+ 'have now been received in Incoming Shipment %s:') % (
+ picking.name)
+ message += ''
+ for purchase_line_id in purchase_dict.values():
+ message += _(
+ '- %s: Received quantity %s %s
'
+ ) % (purchase_line_id['purchase_line'].product_id.display_name,
+ purchase_line_id['stock_move'].product_qty,
+ purchase_line_id['stock_move'].product_uom.name,
+ )
+ message += '
'
+ return message
+
+ @api.multi
+ def action_done(self):
+ super(StockPicking, self).action_done()
+ for picking in self:
+ purchase_dict = {}
+ if picking.picking_type_id.code != 'incoming':
+ continue
+ for move in picking.move_lines:
+ if move.purchase_line_id:
+ pol_id = move.purchase_line_id
+ if pol_id.id not in purchase_dict:
+ purchase_dict[pol_id.id] = {}
+ data = {
+ 'purchase_line': pol_id,
+ 'stock_move': move,
+ }
+ purchase_dict[pol_id.id][pol_id.id] = data
+ for purchase_line_id in purchase_dict:
+ po = self.env['purchase.order.line'].sudo().browse(
+ purchase_line_id).order_id
+ message = \
+ self._purchase_order_picking_confirm_message_content(
+ picking, purchase_dict[purchase_line_id])
+ po.message_post(
+ body=message,
+ subtype='purchase_reception_notify.mt_purchase_reception')
diff --git a/purchase_reception_notify/readme/CONTRIBUTORS.rst b/purchase_reception_notify/readme/CONTRIBUTORS.rst
new file mode 100644
index 00000000000..1d7aca078e4
--- /dev/null
+++ b/purchase_reception_notify/readme/CONTRIBUTORS.rst
@@ -0,0 +1 @@
+* Aaron Henriquez
diff --git a/purchase_reception_notify/readme/DESCRIPTION.rst b/purchase_reception_notify/readme/DESCRIPTION.rst
new file mode 100644
index 00000000000..31d679fb5bb
--- /dev/null
+++ b/purchase_reception_notify/readme/DESCRIPTION.rst
@@ -0,0 +1,4 @@
+This module notifies purchase users when the receptions are performed
+
+This module creates a new message subtype specifically created for those
+notifications. This subtype is internal activated by default when subscribing.
diff --git a/purchase_reception_notify/readme/USAGE.rst b/purchase_reception_notify/readme/USAGE.rst
new file mode 100644
index 00000000000..7be60ab0f8d
--- /dev/null
+++ b/purchase_reception_notify/readme/USAGE.rst
@@ -0,0 +1 @@
+Integrated in the normal flow.
\ No newline at end of file
diff --git a/purchase_reception_notify/static/description/index.html b/purchase_reception_notify/static/description/index.html
new file mode 100644
index 00000000000..1763a69f522
--- /dev/null
+++ b/purchase_reception_notify/static/description/index.html
@@ -0,0 +1,404 @@
+
+
+
+
+
+
+Purchase Reception Notify
+
+
+
+
+
Purchase Reception Notify
+
+
+

+
This module notifies purchase users when the receptions are performed
+
This module creates a new message subtype specifically created for those
+notifications. This subtype is internal activated by default when subscribing.
+
Table of contents
+
+
+
+
Integrated in the normal flow.
+
+
+
+
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.
+
+
+
+
+
+
+
+
This module is maintained by the OCA.
+

+
OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
This module is part of the OCA/purchase-workflow project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
+
+
+
+
+
diff --git a/purchase_reception_notify/tests/__init__.py b/purchase_reception_notify/tests/__init__.py
new file mode 100644
index 00000000000..c973f1c733f
--- /dev/null
+++ b/purchase_reception_notify/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_purchase_reception_notify
diff --git a/purchase_reception_notify/tests/test_purchase_reception_notify.py b/purchase_reception_notify/tests/test_purchase_reception_notify.py
new file mode 100644
index 00000000000..1239defcd0f
--- /dev/null
+++ b/purchase_reception_notify/tests/test_purchase_reception_notify.py
@@ -0,0 +1,59 @@
+# Copyright 2017 Eficent Business and IT Consulting Services S.L.
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo.tests.common import TransactionCase
+from odoo.fields import Datetime
+
+
+class TestPurchaseReceptionNotify(TransactionCase):
+ def setUp(self):
+ super(TestPurchaseReceptionNotify, self).setUp()
+ self.purchase_order_model = self.env['purchase.order']
+ purchase_order_line_model = self.env['purchase.order.line']
+ partner_model = self.env['res.partner']
+ prod_model = self.env['product.product']
+ self.product_uom_model = self.env['product.uom']
+
+ # partners
+ pa_dict = {
+ 'name': 'Partner 1',
+ 'supplier': True,
+ }
+ self.partner = partner_model.sudo().create(pa_dict)
+
+ # Purchase Order Num 1
+ po_dict = {
+ 'partner_id': self.partner.id,
+ }
+ self.purchase_order = self.purchase_order_model.create(po_dict)
+ uom_id = self.product_uom_model.search([
+ ('name', '=', 'Unit(s)')])[0].id
+ pr_dict = {
+ 'name': 'Product Test',
+ 'uom_id': uom_id,
+ 'purchase_method': 'purchase',
+ }
+ self.product = prod_model.sudo().create(pr_dict)
+ pl_dict1 = {
+ 'date_planned': Datetime.now(),
+ 'name': 'PO01',
+ 'order_id': self.purchase_order.id,
+ 'product_id': self.product.id,
+ 'product_uom': uom_id,
+ 'price_unit': 1.0,
+ 'product_qty': 5.0,
+ }
+ self.purchase_order_line = \
+ purchase_order_line_model.sudo().create(pl_dict1)
+ self.purchase_order.button_confirm()
+
+ def test_reception_notification(self):
+ # Now we receive the products
+ for picking in self.purchase_order.picking_ids:
+ picking.move_lines.write({'quantity_done': 5.0})
+ picking.button_validate()
+ self.assertTrue(
+ 'Receipt confirmation %s'
+ % picking.name in
+ self.purchase_order_line.order_id.message_ids[0].body,
+ "PO user not notified")
From ea2b0afad2a4941c1919ffc5832b0e9944401bd9 Mon Sep 17 00:00:00 2001
From: Jordi Ballester Alomar
Date: Thu, 4 Jul 2019 12:18:56 +0200
Subject: [PATCH 02/33] add post init hook to update followers of existing POs
---
purchase_reception_notify/README.rst | 7 +++-
purchase_reception_notify/__init__.py | 1 +
purchase_reception_notify/__manifest__.py | 5 +--
purchase_reception_notify/hooks.py | 28 ++++++++++++++++
.../models/stock_picking.py | 32 +++++++++----------
.../readme/CONTRIBUTORS.rst | 1 +
.../readme/DESCRIPTION.rst | 5 ++-
.../tests/test_purchase_reception_notify.py | 10 +++---
8 files changed, 63 insertions(+), 26 deletions(-)
create mode 100644 purchase_reception_notify/hooks.py
diff --git a/purchase_reception_notify/README.rst b/purchase_reception_notify/README.rst
index 33bef6cb683..0c2e232a293 100644
--- a/purchase_reception_notify/README.rst
+++ b/purchase_reception_notify/README.rst
@@ -25,10 +25,14 @@ Purchase Reception Notify
|badge1| |badge2| |badge3| |badge4| |badge5|
-This module notifies purchase users when the receptions are performed
+This module notifies to the employees following a the purchase order
+when the associated products have been received into stock.
This module creates a new message subtype specifically created for those
notifications. This subtype is internal activated by default when subscribing.
+The old purchase orders will be updated to assign this new subtype to the
+existing followers, as long as they are still active employees.
+
**Table of contents**
@@ -62,6 +66,7 @@ Contributors
~~~~~~~~~~~~
* Aaron Henriquez
+* Jordi Ballester
Maintainers
~~~~~~~~~~~
diff --git a/purchase_reception_notify/__init__.py b/purchase_reception_notify/__init__.py
index 0650744f6bc..cc6b6354ad8 100644
--- a/purchase_reception_notify/__init__.py
+++ b/purchase_reception_notify/__init__.py
@@ -1 +1,2 @@
from . import models
+from .hooks import post_init_hook
diff --git a/purchase_reception_notify/__manifest__.py b/purchase_reception_notify/__manifest__.py
index 9f71e9838b4..1becfe46a87 100644
--- a/purchase_reception_notify/__manifest__.py
+++ b/purchase_reception_notify/__manifest__.py
@@ -1,4 +1,4 @@
-# Copyright 2018 Eficent Business and IT Consulting Services S.L.
+# Copyright 2019 Eficent Business and IT Consulting Services S.L.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl-3.0).
{
@@ -14,5 +14,6 @@
],
"data": ["data/mail.xml",
],
- "installable": True
+ "installable": True,
+ "post_init_hook": "post_init_hook",
}
diff --git a/purchase_reception_notify/hooks.py b/purchase_reception_notify/hooks.py
new file mode 100644
index 00000000000..7210af78df9
--- /dev/null
+++ b/purchase_reception_notify/hooks.py
@@ -0,0 +1,28 @@
+# Copyright 2019 Eficent Business and IT Consulting Services S.L.
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+import logging
+from odoo import api, SUPERUSER_ID
+
+_logger = logging.getLogger(__name__)
+
+
+def post_init_hook(cr, registry):
+ """Existing employees should be subscribed to the new subtype for all
+ existing purchase orders..
+ """
+ _logger.info('Starting task to update internal followers for '
+ 'existing purchase orders to assign the new subtype '
+ 'Purchase Receptions.')
+ with api.Environment.manage():
+ env = api.Environment(cr, SUPERUSER_ID, {})
+ users = env['res.users'].search([])
+ followers = env['mail.followers'].search([
+ ('res_model', '=', 'purchase.order'),
+ ('partner_id', 'in', users.mapped('partner_id').ids),
+ ])
+ for follower in followers:
+ follower.subtype_ids += env.ref(
+ 'purchase_reception_notify.mt_purchase_reception')
+ _logger.info('Finalized task to update internal followers for '
+ 'existing purchase orders to assign the new subtype '
+ 'Purchase Receptions.')
diff --git a/purchase_reception_notify/models/stock_picking.py b/purchase_reception_notify/models/stock_picking.py
index 249ca41489e..ef1c87a66ce 100644
--- a/purchase_reception_notify/models/stock_picking.py
+++ b/purchase_reception_notify/models/stock_picking.py
@@ -32,26 +32,24 @@ def _purchase_order_picking_confirm_message_content(
@api.multi
def action_done(self):
super(StockPicking, self).action_done()
- for picking in self:
+ for picking in self.filtered(
+ lambda p: p.picking_type_id.code == 'incoming'):
purchase_dict = {}
- if picking.picking_type_id.code != 'incoming':
- continue
- for move in picking.move_lines:
- if move.purchase_line_id:
- pol_id = move.purchase_line_id
- if pol_id.id not in purchase_dict:
- purchase_dict[pol_id.id] = {}
- data = {
- 'purchase_line': pol_id,
- 'stock_move': move,
- }
- purchase_dict[pol_id.id][pol_id.id] = data
- for purchase_line_id in purchase_dict:
- po = self.env['purchase.order.line'].sudo().browse(
- purchase_line_id).order_id
+ for move in picking.move_lines.filtered('purchase_line_id'):
+ pol_id = move.purchase_line_id
+ if pol_id.order_id not in purchase_dict.keys():
+ purchase_dict[pol_id.order_id] = {}
+ if pol_id.id not in purchase_dict[pol_id.order_id].keys():
+ purchase_dict[pol_id.order_id][pol_id.id] = {}
+ data = {
+ 'purchase_line': pol_id,
+ 'stock_move': move,
+ }
+ purchase_dict[pol_id.order_id][pol_id.id] = data
+ for po in purchase_dict.keys():
message = \
self._purchase_order_picking_confirm_message_content(
- picking, purchase_dict[purchase_line_id])
+ picking, purchase_dict[po])
po.message_post(
body=message,
subtype='purchase_reception_notify.mt_purchase_reception')
diff --git a/purchase_reception_notify/readme/CONTRIBUTORS.rst b/purchase_reception_notify/readme/CONTRIBUTORS.rst
index 1d7aca078e4..f136c1c1aa9 100644
--- a/purchase_reception_notify/readme/CONTRIBUTORS.rst
+++ b/purchase_reception_notify/readme/CONTRIBUTORS.rst
@@ -1 +1,2 @@
* Aaron Henriquez
+* Jordi Ballester
diff --git a/purchase_reception_notify/readme/DESCRIPTION.rst b/purchase_reception_notify/readme/DESCRIPTION.rst
index 31d679fb5bb..14315eb2f3b 100644
--- a/purchase_reception_notify/readme/DESCRIPTION.rst
+++ b/purchase_reception_notify/readme/DESCRIPTION.rst
@@ -1,4 +1,7 @@
-This module notifies purchase users when the receptions are performed
+This module notifies to the employees following a the purchase order
+when the associated products have been received into stock.
This module creates a new message subtype specifically created for those
notifications. This subtype is internal activated by default when subscribing.
+The old purchase orders will be updated to assign this new subtype to the
+existing followers, as long as they are still active employees.
diff --git a/purchase_reception_notify/tests/test_purchase_reception_notify.py b/purchase_reception_notify/tests/test_purchase_reception_notify.py
index 1239defcd0f..977692f9dee 100644
--- a/purchase_reception_notify/tests/test_purchase_reception_notify.py
+++ b/purchase_reception_notify/tests/test_purchase_reception_notify.py
@@ -52,8 +52,8 @@ def test_reception_notification(self):
for picking in self.purchase_order.picking_ids:
picking.move_lines.write({'quantity_done': 5.0})
picking.button_validate()
- self.assertTrue(
- 'Receipt confirmation %s'
- % picking.name in
- self.purchase_order_line.order_id.message_ids[0].body,
- "PO user not notified")
+ self.assertTrue(
+ 'Receipt confirmation %s'
+ % picking.name in
+ self.purchase_order_line.order_id.message_ids[0].body,
+ "PO user not notified")
From cd1dae6f1b04b8db60a7e310735cbd66b0eb9c11 Mon Sep 17 00:00:00 2001
From: hveficent
Date: Wed, 28 Aug 2019 14:16:38 +0200
Subject: [PATCH 03/33] [FIX] Sudo on message_post due to Inventory Users
couldn't have Purchase permissions
---
purchase_reception_notify/README.rst | 1 -
.../i18n/purchase_reception_notify.pot | 43 ++++++++++++++++++
.../models/stock_picking.py | 5 +-
.../static/description/icon.png | Bin 0 -> 9455 bytes
.../static/description/index.html | 38 +++++++++++++---
5 files changed, 78 insertions(+), 9 deletions(-)
create mode 100644 purchase_reception_notify/i18n/purchase_reception_notify.pot
create mode 100644 purchase_reception_notify/static/description/icon.png
diff --git a/purchase_reception_notify/README.rst b/purchase_reception_notify/README.rst
index 0c2e232a293..c83a37c1490 100644
--- a/purchase_reception_notify/README.rst
+++ b/purchase_reception_notify/README.rst
@@ -33,7 +33,6 @@ notifications. This subtype is internal activated by default when subscribing.
The old purchase orders will be updated to assign this new subtype to the
existing followers, as long as they are still active employees.
-
**Table of contents**
.. contents::
diff --git a/purchase_reception_notify/i18n/purchase_reception_notify.pot b/purchase_reception_notify/i18n/purchase_reception_notify.pot
new file mode 100644
index 00000000000..ef763cdeeb1
--- /dev/null
+++ b/purchase_reception_notify/i18n/purchase_reception_notify.pot
@@ -0,0 +1,43 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * purchase_reception_notify
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 11.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: purchase_reception_notify
+#: code:addons/purchase_reception_notify/models/stock_picking.py:23
+#, python-format
+msgid "%s: Received quantity %s %s"
+msgstr ""
+
+#. module: purchase_reception_notify
+#: model:mail.message.subtype,name:purchase_reception_notify.mt_purchase_reception
+msgid "Purchase Receptions"
+msgstr ""
+
+#. module: purchase_reception_notify
+#: code:addons/purchase_reception_notify/models/stock_picking.py:15
+#, python-format
+msgid "Receipt confirmation %s"
+msgstr ""
+
+#. module: purchase_reception_notify
+#: code:addons/purchase_reception_notify/models/stock_picking.py:18
+#, python-format
+msgid "The following items have now been received in Incoming Shipment %s:"
+msgstr ""
+
+#. module: purchase_reception_notify
+#: model:ir.model,name:purchase_reception_notify.model_stock_picking
+msgid "Transfer"
+msgstr ""
+
diff --git a/purchase_reception_notify/models/stock_picking.py b/purchase_reception_notify/models/stock_picking.py
index ef1c87a66ce..7dff0815a02 100644
--- a/purchase_reception_notify/models/stock_picking.py
+++ b/purchase_reception_notify/models/stock_picking.py
@@ -50,6 +50,7 @@ def action_done(self):
message = \
self._purchase_order_picking_confirm_message_content(
picking, purchase_dict[po])
- po.message_post(
+ po.sudo().message_post(
body=message,
- subtype='purchase_reception_notify.mt_purchase_reception')
+ subtype='purchase_reception_notify.mt_purchase_reception',
+ author_id=self.env.user.partner_id.id)
diff --git a/purchase_reception_notify/static/description/icon.png b/purchase_reception_notify/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d
GIT binary patch
literal 9455
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
z
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
Xviia!U7SGha1wx#SCgwmn*{w2TRX*I
literal 0
HcmV?d00001
diff --git a/purchase_reception_notify/static/description/index.html b/purchase_reception_notify/static/description/index.html
index 1763a69f522..b459c671a21 100644
--- a/purchase_reception_notify/static/description/index.html
+++ b/purchase_reception_notify/static/description/index.html
@@ -3,13 +3,13 @@
-
+
Purchase Reception Notify
-
-
Purchase Reception Notify
+
+
+
+
+
+
+
Purchase Reception Notify
-

+

This module automatically notifies the employees following a purchase
order as soon as the associated products have been received into stock.
It also introduces a new message subtype specifically created for those
@@ -391,7 +396,7 @@
Purchase Reception Notify
-
+
Integrated in the normal flow.
Create a Purchase Order with at least one product with a specified
quantity and confirm th purchase order to generate the corresponding
@@ -400,7 +405,7 @@
“Validate”. The message will be automatically generated.
-
+
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
@@ -408,15 +413,15 @@
Do not contact contributors directly about support or help with technical issues.
+
From 91bd0c25f7a4238b7c0ef18b1ff787b39994056f Mon Sep 17 00:00:00 2001
From: Marcel Savegnago
Date: Wed, 25 Jun 2025 15:11:08 +0000
Subject: [PATCH 31/33] Added translation using Weblate (Portuguese (Brazil))
---
purchase_reception_notify/i18n/pt_BR.po | 44 +++++++++++++++++++++++++
1 file changed, 44 insertions(+)
create mode 100644 purchase_reception_notify/i18n/pt_BR.po
diff --git a/purchase_reception_notify/i18n/pt_BR.po b/purchase_reception_notify/i18n/pt_BR.po
new file mode 100644
index 00000000000..77c0759f944
--- /dev/null
+++ b/purchase_reception_notify/i18n/pt_BR.po
@@ -0,0 +1,44 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * purchase_reception_notify
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 18.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: pt_BR\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: purchase_reception_notify
+#. odoo-python
+#: code:addons/purchase_reception_notify/models/stock_picking.py:0
+msgid ""
+"%(display_name)s: Received quantity %(product_qty)s %(uom)s"
+msgstr ""
+
+#. module: purchase_reception_notify
+#: model:mail.message.subtype,name:purchase_reception_notify.mt_purchase_reception
+msgid "Purchase Receptions"
+msgstr ""
+
+#. module: purchase_reception_notify
+#. odoo-python
+#: code:addons/purchase_reception_notify/models/stock_picking.py:0
+msgid "Receipt confirmation {}"
+msgstr ""
+
+#. module: purchase_reception_notify
+#. odoo-python
+#: code:addons/purchase_reception_notify/models/stock_picking.py:0
+msgid "The following items have now been received in Incoming Shipment {}:"
+msgstr ""
+
+#. module: purchase_reception_notify
+#: model:ir.model,name:purchase_reception_notify.model_stock_picking
+msgid "Transfer"
+msgstr ""
From daf5e2ce9b80dce30abc868e1103e550bcc13cf3 Mon Sep 17 00:00:00 2001
From: Bhavesh Heliconia
Date: Tue, 28 Apr 2026 16:16:55 +0530
Subject: [PATCH 32/33] [IMP] purchase_reception_notify: pre-commit auto fixes
---
.../models/stock_picking.py | 29 ++++++++++---------
1 file changed, 16 insertions(+), 13 deletions(-)
diff --git a/purchase_reception_notify/models/stock_picking.py b/purchase_reception_notify/models/stock_picking.py
index 46d388cab83..9e02bc86f54 100644
--- a/purchase_reception_notify/models/stock_picking.py
+++ b/purchase_reception_notify/models/stock_picking.py
@@ -3,7 +3,7 @@
from markupsafe import Markup, escape
-from odoo import _, api, models
+from odoo import api, models
class Picking(models.Model):
@@ -13,24 +13,27 @@ class Picking(models.Model):
def _purchase_order_picking_confirm_message_content(self, picking, purchase_dict):
if not purchase_dict:
purchase_dict = {}
- title = _("Receipt confirmation {}").format(picking.name)
- message = f"{title}
"
- message += _(
- "The following items have now been received in Incoming Shipment {}:"
- ).format(picking.name)
+ title = self.env._("Receipt confirmation %s", picking.name)
+ message = "%s
" % title
+
+ message += self.env._(
+ "The following items have now been received in Incoming Shipment %s",
+ picking.name,
+ )
+
message += ""
for purchase_line_id in purchase_dict.values():
display_name = purchase_line_id["purchase_line"].product_id.display_name
product_qty = purchase_line_id["stock_move"].product_qty
uom = purchase_line_id["stock_move"].product_uom.name
- message += _(
+
+ message += self.env._(
"- %(display_name)s: Received quantity "
- "%(product_qty)s %(uom)s
"
- ) % {
- "display_name": escape(display_name),
- "product_qty": product_qty,
- "uom": escape(uom),
- }
+ "%(product_qty)s %(uom)s",
+ display_name=escape(display_name),
+ product_qty=product_qty,
+ uom=escape(uom),
+ )
message += "
"
return Markup(message)
From 649dddc5fb6bde884db2a75cca60d3b37be60e6f Mon Sep 17 00:00:00 2001
From: Bhavesh Heliconia
Date: Tue, 28 Apr 2026 16:20:53 +0530
Subject: [PATCH 33/33] [MIG] purchase_reception_notify: Migration to 19.0
---
purchase_reception_notify/README.rst | 14 +++---
purchase_reception_notify/__manifest__.py | 2 +-
.../models/stock_picking.py | 3 +-
.../readme/CONTRIBUTORS.md | 3 +-
.../static/description/index.html | 11 +++--
.../tests/test_purchase_reception_notify.py | 45 ++++++++++---------
6 files changed, 42 insertions(+), 36 deletions(-)
diff --git a/purchase_reception_notify/README.rst b/purchase_reception_notify/README.rst
index e602da2884e..b80651fbbb8 100644
--- a/purchase_reception_notify/README.rst
+++ b/purchase_reception_notify/README.rst
@@ -21,13 +21,13 @@ Purchase Reception Notify
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fpurchase--workflow-lightgray.png?logo=github
- :target: https://github.com/OCA/purchase-workflow/tree/18.0/purchase_reception_notify
+ :target: https://github.com/OCA/purchase-workflow/tree/19.0/purchase_reception_notify
:alt: OCA/purchase-workflow
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/purchase-workflow-18-0/purchase-workflow-18-0-purchase_reception_notify
+ :target: https://translation.odoo-community.org/projects/purchase-workflow-19-0/purchase-workflow-19-0-purchase_reception_notify
: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/purchase-workflow&target_branch=18.0
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/purchase-workflow&target_branch=19.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -63,7 +63,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.
@@ -80,7 +80,9 @@ Contributors
- Aaron Henriquez
- Jordi Ballester
-- ``Heliconia Solutions Pvt. Ltd. ``\ \_
+- `Heliconia Solutions Pvt. Ltd. `__
+
+ - Bhavesh Heliconia
Maintainers
-----------
@@ -95,6 +97,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/purchase-workflow `_ project on GitHub.
+This module is part of the `OCA/purchase-workflow `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/purchase_reception_notify/__manifest__.py b/purchase_reception_notify/__manifest__.py
index 8ce6fde6f08..9944af4f015 100644
--- a/purchase_reception_notify/__manifest__.py
+++ b/purchase_reception_notify/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Purchase Reception Notify",
- "version": "18.0.1.0.1",
+ "version": "19.0.1.0.0",
"category": "Purchase Management",
"author": "ForgeFlow, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/purchase-workflow",
diff --git a/purchase_reception_notify/models/stock_picking.py b/purchase_reception_notify/models/stock_picking.py
index 9e02bc86f54..2dc4f5d395d 100644
--- a/purchase_reception_notify/models/stock_picking.py
+++ b/purchase_reception_notify/models/stock_picking.py
@@ -14,8 +14,7 @@ def _purchase_order_picking_confirm_message_content(self, picking, purchase_dict
if not purchase_dict:
purchase_dict = {}
title = self.env._("Receipt confirmation %s", picking.name)
- message = "%s
" % title
-
+ message = f"{title}
"
message += self.env._(
"The following items have now been received in Incoming Shipment %s",
picking.name,
diff --git a/purchase_reception_notify/readme/CONTRIBUTORS.md b/purchase_reception_notify/readme/CONTRIBUTORS.md
index 331f9e79019..48e4da05621 100644
--- a/purchase_reception_notify/readme/CONTRIBUTORS.md
+++ b/purchase_reception_notify/readme/CONTRIBUTORS.md
@@ -1,3 +1,4 @@
- Aaron Henriquez \<\>
- Jordi Ballester \<\>
-- `Heliconia Solutions Pvt. Ltd. `_
+- [Heliconia Solutions Pvt. Ltd.](https://www.heliconia.io)
+ - Bhavesh Heliconia
diff --git a/purchase_reception_notify/static/description/index.html b/purchase_reception_notify/static/description/index.html
index 071e40b1849..e85989e04e8 100644
--- a/purchase_reception_notify/static/description/index.html
+++ b/purchase_reception_notify/static/description/index.html
@@ -374,7 +374,7 @@ Purchase Reception Notify
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:56ebe85de4be40127c1f520b1cc3bd4d19e178630d7b83bfc896b95d8c1c6995
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-

+

This module automatically notifies the employees following a purchase
order as soon as the associated products have been received into stock.
It also introduces a new message subtype specifically created for those
@@ -409,7 +409,7 @@
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 +440,7 @@
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/purchase-workflow project on GitHub.
+
This module is part of the OCA/purchase-workflow project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/purchase_reception_notify/tests/test_purchase_reception_notify.py b/purchase_reception_notify/tests/test_purchase_reception_notify.py
index 62761505cbf..becf18ebb87 100644
--- a/purchase_reception_notify/tests/test_purchase_reception_notify.py
+++ b/purchase_reception_notify/tests/test_purchase_reception_notify.py
@@ -1,48 +1,49 @@
from odoo.fields import Datetime
-from odoo.tests.common import TransactionCase
+from odoo.addons.base.tests.common import BaseCommon
-class TestPurchaseReceptionNotify(TransactionCase):
- def setUp(self):
- super().setUp()
- self.purchase_order_model = self.env["purchase.order"]
- self.purchase_order_line_model = self.env["purchase.order.line"]
- self.partner_model = self.env["res.partner"]
- self.product_model = self.env["product.product"]
- self.uom_model = self.env["uom.uom"]
- self.stock_picking_model = self.env["stock.picking"]
- # Partners
- self.partner = self.partner_model.sudo().create({"name": "Partner 1"})
+class TestPurchaseReceptionNotify(BaseCommon):
+ @classmethod
+ def default_env_context(cls):
+ return {}
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls.purchase_order_model = cls.env["purchase.order"]
+ cls.purchase_order_line_model = cls.env["purchase.order.line"]
+ cls.product_model = cls.env["product.product"]
+ cls.uom_model = cls.env["uom.uom"]
+ cls.stock_picking_model = cls.env["stock.picking"]
# UOM
- self.uom_unit = self.env.ref("uom.product_uom_unit")
+ cls.uom_unit = cls.env.ref("uom.product_uom_unit")
# Product
- self.product = self.product_model.sudo().create(
+ cls.product = cls.product_model.sudo().create(
{
"name": "Product Test",
- "uom_id": self.uom_unit.id,
+ "uom_id": cls.uom_unit.id,
"purchase_method": "purchase",
}
)
# Purchase Order
- self.purchase_order = self.purchase_order_model.create(
- {"partner_id": self.partner.id}
+ cls.purchase_order = cls.purchase_order_model.create(
+ {"partner_id": cls.partner.id}
)
- self.purchase_order_line = self.purchase_order_line_model.sudo().create(
+ cls.purchase_order_line = cls.purchase_order_line_model.sudo().create(
{
"date_planned": Datetime.now(),
"name": "PO01",
- "order_id": self.purchase_order.id,
- "product_id": self.product.id,
- "product_uom": self.uom_unit.id,
+ "order_id": cls.purchase_order.id,
+ "product_id": cls.product.id,
+ "product_uom_id": cls.uom_unit.id,
"price_unit": 1.0,
"product_qty": 5.0,
}
)
- self.purchase_order.button_confirm()
+ cls.purchase_order.button_confirm()
def test_action_done_message_post(self):
"""Test that the _action_done method posts the correct message."""