Skip to content

Commit

Permalink
[IMP] stock_picking_warn_message: show blocking messages in red
Browse files Browse the repository at this point in the history
 This allows the distinction between warn and block to be visible in the
 stock picking dialog by adding the additional picking_warn field to the
 stock.picking model containing what kind of message is to be shown.
  • Loading branch information
dhx committed Oct 31, 2023
1 parent cef7622 commit 8c4c30d
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 3 deletions.
1 change: 1 addition & 0 deletions stock_picking_warn_message/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ Contributors
~~~~~~~~~~~~

* Héctor Villarreal <[email protected]>
* Daniel Haag <[email protected]>

Maintainers
~~~~~~~~~~~
Expand Down
24 changes: 22 additions & 2 deletions stock_picking_warn_message/models/stock_picking.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,28 @@ class StockPicking(models.Model):

_inherit = "stock.picking"

picking_warn = fields.Text(compute="_compute_picking_warn")
picking_warn_msg = fields.Text(compute="_compute_picking_warn_msg")

@api.depends(
"state",
"partner_id.picking_warn",
"partner_id.commercial_partner_id.picking_warn",
)
def _compute_picking_warn(self):
for rec in self:
picking_warn = "no-message"
if rec.state not in ["done", "cancel"] and rec.partner_id:
p = rec.partner_id.commercial_partner_id
if p.picking_warn == "block" or rec.partner_id.picking_warn == "block":
picking_warn = "block"
elif (
p.picking_warn == "warning"
or rec.partner_id.picking_warn == "warning"
):
picking_warn = "warning"
rec.picking_warn = picking_warn

@api.depends(
"state",
"partner_id.picking_warn",
Expand All @@ -21,9 +41,9 @@ def _compute_picking_warn_msg(self):
if rec.state not in ["done", "cancel"] and rec.partner_id:
p = rec.partner_id.commercial_partner_id
separator = ""
if p.picking_warn == "warning":
if p.picking_warn != "no-message":
separator = "\n"
picking_warn_msg += p.picking_warn_msg
if p != rec.partner_id and rec.partner_id.picking_warn == "warning":
if p != rec.partner_id and rec.partner_id.picking_warn != "no-message":
picking_warn_msg += separator + rec.partner_id.picking_warn_msg
rec.picking_warn_msg = picking_warn_msg or False
1 change: 1 addition & 0 deletions stock_picking_warn_message/readme/CONTRIBUTORS.rst
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
* Héctor Villarreal <[email protected]>
* Daniel Haag <[email protected]>
Original file line number Diff line number Diff line change
Expand Up @@ -82,3 +82,53 @@ def test_compute_picking_warn_msg_parent(self):
self.assertEqual(
picking.picking_warn_msg, self.warn_msg_parent + "\n" + self.warn_msg
)

def test_compute_picking_warn(self):
picking = self.env["stock.picking"].create(
{
"partner_id": self.partner.id,
"picking_type_id": self.picking_type_out.id,
"location_id": self.picking_type_out.default_location_src_id.id,
"location_dest_id": self.customer_location.id,
"move_lines": [
(
0,
0,
{
"name": self.product.name,
"product_id": self.product.id,
"product_uom": self.product.uom_id.id,
"product_uom_qty": 1,
},
),
],
}
)
self.partner.update({"picking_warn": "block"})
self.assertEqual(picking.picking_warn, "block")
self.partner.update({"picking_warn": "warning"})
self.assertEqual(picking.picking_warn, "warning")

# Check that block always overrules warning
self.partner.update({"parent_id": self.parent.id})
self.parent.update({"picking_warn": "warning"})
self.partner.update({"picking_warn": "block"})
self.assertEqual(picking.picking_warn, "block")
self.parent.update({"picking_warn": "block"})
self.partner.update({"picking_warn": "warning"})
self.assertEqual(picking.picking_warn, "block")

# We should still see the warning of the partner even when the parent partner
# has no warning set
self.parent.update({"picking_warn": "no-message"})
self.assertEqual(picking.picking_warn, "warning")

# When both the partner and the parent partner have no message set we expect
# to see that also in the picking
self.partner.update({"picking_warn": "no-message"})
self.assertEqual(picking.picking_warn, "no-message")

# On the other hand even when the partner has no warning set we still see
# the one from the parent
self.parent.update({"picking_warn": "warning"})
self.assertEqual(picking.picking_warn, "warning")
15 changes: 14 additions & 1 deletion stock_picking_warn_message/views/stock_picking_views.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@
<field name="inherit_id" ref="stock.view_picking_form" />
<field name="arch" type="xml">
<header position="after">
<field name="picking_warn" invisible="1" />
<div
class="alert alert-warning"
role="alert"
attrs="{'invisible': [('picking_warn_msg', '=', False)]}"
attrs="{'invisible': [('picking_warn', '!=', 'warning')]}"
style="margin-bottom:0px;"
>
<p>
Expand All @@ -20,6 +21,18 @@
<field name="picking_warn_msg" class="oe_inline" />
</p>
</div>
<div
class="alert alert-danger"
role="alert"
attrs="{'invisible': [('picking_warn', '!=', 'block')]}"
style="margin-bottom:0px;"
>
<p>
<i class="fa fa-warning" />
&amp;nbsp;
<field name="picking_warn_msg" class="oe_inline" />
</p>
</div>
</header>
</field>
</record>
Expand Down

0 comments on commit 8c4c30d

Please sign in to comment.