-
Are you sure you want to hide these onboarding tips?
+
Are you sure you want to hide these configuration steps?
diff --git a/addons/point_of_sale/models/product.py b/addons/point_of_sale/models/product.py
index 78caf1118ee..de971654832 100644
--- a/addons/point_of_sale/models/product.py
+++ b/addons/point_of_sale/models/product.py
@@ -28,7 +28,9 @@ class ProductTemplate(models.Model):
product_ctx = dict(self.env.context or {}, active_test=False)
if self.with_context(product_ctx).search_count([('id', 'in', self.ids), ('available_in_pos', '=', True)]):
if self.env['pos.session'].sudo().search_count([('state', '!=', 'closed')]):
- raise UserError(_('You cannot delete a product saleable in point of sale while a session is still opened.'))
+ raise UserError(_("To delete a product, make sure all point of sale sessions are closed.\n\n"
+ "Deleting a product available in a session would be like attempting to snatch a"
+ "hamburger from a customer’s hand mid-bite; chaos will ensue as ketchup and mayo go flying everywhere!"))
@api.onchange('sale_ok')
def _onchange_sale_ok(self):
@@ -51,7 +53,9 @@ class ProductProduct(models.Model):
product_ctx = dict(self.env.context or {}, active_test=False)
if self.env['pos.session'].sudo().search_count([('state', '!=', 'closed')]):
if self.with_context(product_ctx).search_count([('id', 'in', self.ids), ('product_tmpl_id.available_in_pos', '=', True)]):
- raise UserError(_('You cannot delete a product saleable in point of sale while a session is still opened.'))
+ raise UserError(_("To delete a product, make sure all point of sale sessions are closed.\n\n"
+ "Deleting a product available in a session would be like attempting to snatch a"
+ "hamburger from a customer’s hand mid-bite; chaos will ensue as ketchup and mayo go flying everywhere!"))
def get_product_info_pos(self, price, quantity, pos_config_id):
self.ensure_one()
diff --git a/addons/purchase_requisition/models/purchase.py b/addons/purchase_requisition/models/purchase.py
index cd856cf5766..5e9686b79f9 100644
--- a/addons/purchase_requisition/models/purchase.py
+++ b/addons/purchase_requisition/models/purchase.py
@@ -113,7 +113,7 @@ class PurchaseOrder(models.Model):
if alternative_po_ids:
view = self.env.ref('purchase_requisition.purchase_requisition_alternative_warning_form')
return {
- 'name': _('Remaining Open Alternatives'),
+ 'name': _("What about the alternative Requests for Quotations?"),
'type': 'ir.actions.act_window',
'view_mode': 'form',
'res_model': 'purchase.requisition.alternative.warning',
diff --git a/addons/purchase_requisition/models/purchase_requisition.py b/addons/purchase_requisition/models/purchase_requisition.py
index db23c16253f..04faa2b613f 100644
--- a/addons/purchase_requisition/models/purchase_requisition.py
+++ b/addons/purchase_requisition/models/purchase_requisition.py
@@ -143,7 +143,8 @@ class PurchaseRequisition(models.Model):
Generate all purchase order based on selected lines, should only be called on one agreement at a time
"""
if any(purchase_order.state in ['draft', 'sent', 'to approve'] for purchase_order in self.mapped('purchase_ids')):
- raise UserError(_('You have to cancel or validate every RfQ before closing the purchase requisition.'))
+ raise UserError(_("To close this purchase requisition, cancel related Requests for Quotation.\n\n"
+ "Imagine the mess if someone confirms these duplicates: double the order, double the trouble :)"))
for requisition in self:
for requisition_line in requisition.line_ids:
requisition_line.supplier_info_ids.sudo().unlink()
diff --git a/addons/sale/models/sale_order_line.py b/addons/sale/models/sale_order_line.py
index d5b1187a950..31d6ce2387f 100644
--- a/addons/sale/models/sale_order_line.py
+++ b/addons/sale/models/sale_order_line.py
@@ -1062,7 +1062,8 @@ class SaleOrderLine(models.Model):
@api.ondelete(at_uninstall=False)
def _unlink_except_confirmed(self):
if self._check_line_unlink():
- raise UserError(_("You can not remove an order line once the sales order is confirmed.\nYou should rather set the quantity to 0."))
+ raise UserError(_("Once a sales order is confirmed, you can't remove one of its lines (we need to track if something gets invoiced or delivered).\n\
+ Set the quantity to 0 instead."))
#=== ACTION METHODS ===#
diff --git a/addons/stock/models/stock_picking.py b/addons/stock/models/stock_picking.py
index a945a86798b..3d139fddf19 100644
--- a/addons/stock/models/stock_picking.py
+++ b/addons/stock/models/stock_picking.py
@@ -1091,7 +1091,7 @@ class Picking(models.Model):
if not self._should_show_transfers():
if pickings_without_moves:
- raise UserError(_('Please add some items to move.'))
+ raise UserError(_("You can’t validate an empty transfer. Please add some products to move before proceeding."))
if pickings_without_quantities:
raise UserError(self._get_without_quantities_error_message())
if pickings_without_lots:
@@ -1588,7 +1588,7 @@ class Picking(models.Model):
if move.state not in ('draft', 'cancel') and move.product_id.type in ('product', 'consu'):
products |= move.product_id
return {
- 'name': _('Scrap'),
+ 'name': _('Scrap Products'),
'view_mode': 'form',
'res_model': 'stock.scrap',
'view_id': view.id,
diff --git a/addons/stock/models/stock_scrap.py b/addons/stock/models/stock_scrap.py
index eb68107be3b..68ecb960f7d 100644
--- a/addons/stock/models/stock_scrap.py
+++ b/addons/stock/models/stock_scrap.py
@@ -52,7 +52,7 @@ class StockScrap(models.Model):
('done', 'Done')],
string='Status', default="draft", readonly=True, tracking=True)
date_done = fields.Datetime('Date', readonly=True)
- should_replenish = fields.Boolean(string='Replenish Scrapped Quantities')
+ should_replenish = fields.Boolean(string='Replenish Quantities')
@api.depends('product_id')
def _compute_product_uom_id(self):
diff --git a/addons/stock/views/stock_scrap_views.xml b/addons/stock/views/stock_scrap_views.xml
index 72022522593..6619a7ab45c 100644
--- a/addons/stock/views/stock_scrap_views.xml
+++ b/addons/stock/views/stock_scrap_views.xml
@@ -171,6 +171,7 @@