summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPrakash Prajapati <ppr@odoo.com>2018-09-14 14:18:23 +0530
committerThibault Delavallée <tde@odoo.com>2018-09-21 10:57:58 +0200
commit4b5265b9b99a7ded943c5692d927b3a6163d75da (patch)
treefab9920801170c962edce75bf14d6f52900f7840
parentc2328f5dcdc0ada9f4580e10573cd7d36d323ee5 (diff)
[IMP] contact, product, various: improve labels and tooltips of partner and product fields
Purpose: improve understanding of partner and product models as well as their daily use. This is done by improving tooltips and labels of some fields according to business logic. This commit is related to task ID 1880696 and closes PR #27133 . Thanks to @xmo-odoo for its in-depth review.
-rw-r--r--addons/account/models/partner.py2
-rw-r--r--addons/account/models/product.py6
-rw-r--r--addons/event_sale/models/product.py4
-rw-r--r--addons/hr_expense/models/product_template.py2
-rw-r--r--addons/membership/models/partner.py2
-rw-r--r--addons/point_of_sale/models/product.py6
-rw-r--r--addons/product/models/product_template.py31
-rw-r--r--addons/product_email_template/models/product.py4
-rw-r--r--addons/purchase/models/product.py7
-rw-r--r--addons/purchase_requisition/models/purchase_requisition.py9
-rw-r--r--addons/sale/models/product_template.py19
-rw-r--r--addons/stock/models/product.py6
-rw-r--r--addons/stock/models/res_partner.py4
-rw-r--r--addons/stock_landed_costs/models/product.py2
-rw-r--r--addons/website_crm_partner_assign/models/res_partner.py2
-rw-r--r--addons/website_sale/models/product.py14
-rw-r--r--addons/website_sale_options/models/product.py4
-rw-r--r--odoo/addons/base/models/res_partner.py20
18 files changed, 62 insertions, 82 deletions
diff --git a/addons/account/models/partner.py b/addons/account/models/partner.py
index ac2e82fcdb5..e828a29564d 100644
--- a/addons/account/models/partner.py
+++ b/addons/account/models/partner.py
@@ -394,7 +394,7 @@ class ResPartner(models.Model):
required=True)
property_account_position_id = fields.Many2one('account.fiscal.position', company_dependent=True,
string="Fiscal Position",
- help="The fiscal position will determine taxes and accounts used for the partner.", oldname="property_account_position")
+ help="The fiscal position determines the taxes/accounts used for this contact.", oldname="property_account_position")
property_payment_term_id = fields.Many2one('account.payment.term', company_dependent=True,
string='Customer Payment Terms',
help="This payment term will be used instead of the default one for sales orders and customer invoices", oldname="property_payment_term")
diff --git a/addons/account/models/product.py b/addons/account/models/product.py
index b72bc31d7bd..43ea3d90b7a 100644
--- a/addons/account/models/product.py
+++ b/addons/account/models/product.py
@@ -22,9 +22,9 @@ class ProductCategory(models.Model):
class ProductTemplate(models.Model):
_inherit = "product.template"
- taxes_id = fields.Many2many('account.tax', 'product_taxes_rel', 'prod_id', 'tax_id', string='Customer Taxes',
+ taxes_id = fields.Many2many('account.tax', 'product_taxes_rel', 'prod_id', 'tax_id', help="Default taxes used when selling the product.", string='Customer Taxes',
domain=[('type_tax_use', '=', 'sale')], default=lambda self: self.env.user.company_id.account_sale_tax_id)
- supplier_taxes_id = fields.Many2many('account.tax', 'product_supplier_taxes_rel', 'prod_id', 'tax_id', string='Vendor Taxes',
+ supplier_taxes_id = fields.Many2many('account.tax', 'product_supplier_taxes_rel', 'prod_id', 'tax_id', string='Vendor Taxes', help='Default taxes used when buying the product.',
domain=[('type_tax_use', '=', 'purchase')], default=lambda self: self.env.user.company_id.account_purchase_tax_id)
property_account_income_id = fields.Many2one('account.account', company_dependent=True,
string="Income Account", oldname="property_account_income",
@@ -33,7 +33,7 @@ class ProductTemplate(models.Model):
property_account_expense_id = fields.Many2one('account.account', company_dependent=True,
string="Expense Account", oldname="property_account_expense",
domain=[('deprecated', '=', False)],
- help="The expense is accounted for when a vendor bill is validated, except in anglo-saxon accounting with perpetual inventory valuation in which case the expense (Cost of Goods Sold account) is recognized at the customer invoice validation. If the field is empty, it uses the one defined in the product category.")
+ help="Keep this field empty to use the default value from the product category. If anglo-saxon accounting with automated valuation method is configured, the expense account on the product category will be used.")
@api.multi
def _get_product_accounts(self):
diff --git a/addons/event_sale/models/product.py b/addons/event_sale/models/product.py
index fb03a5b250b..a898046647e 100644
--- a/addons/event_sale/models/product.py
+++ b/addons/event_sale/models/product.py
@@ -6,8 +6,8 @@ from odoo import api, fields, models
class ProductTemplate(models.Model):
_inherit = 'product.template'
- event_ok = fields.Boolean(string='Is an Event Ticket', help='Determine if a product needs '
- 'to create automatically an event registration at the confirmation of a sales order line.')
+ event_ok = fields.Boolean(string='Is an Event Ticket', help="If checked this product automatically "
+ "creates an event registration at the sales order confirmation.")
@api.onchange('event_ok')
def _onchange_event_ok(self):
diff --git a/addons/hr_expense/models/product_template.py b/addons/hr_expense/models/product_template.py
index 82ebf240311..25c4719a612 100644
--- a/addons/hr_expense/models/product_template.py
+++ b/addons/hr_expense/models/product_template.py
@@ -7,7 +7,7 @@ from odoo import api, fields, models
class ProductTemplate(models.Model):
_inherit = "product.template"
- can_be_expensed = fields.Boolean(help="Specify whether the product can be selected in an HR expense.", string="Can be Expensed")
+ can_be_expensed = fields.Boolean(string="Can be Expensed", help="Specify whether the product can be selected in an expense.")
@api.model
def create(self, vals):
diff --git a/addons/membership/models/partner.py b/addons/membership/models/partner.py
index 4ac0cedb4b0..5287773cd81 100644
--- a/addons/membership/models/partner.py
+++ b/addons/membership/models/partner.py
@@ -10,7 +10,7 @@ class Partner(models.Model):
_inherit = 'res.partner'
associate_member = fields.Many2one('res.partner', string='Associate Member',
- help="A member with whom you want to associate your membership. "
+ help="A member with whom you want to associate your membership."
"It will consider the membership state of the associated member.")
member_lines = fields.One2many('membership.membership_line', 'partner', string='Membership')
free_member = fields.Boolean(string='Free Member',
diff --git a/addons/point_of_sale/models/product.py b/addons/point_of_sale/models/product.py
index 609b220dbdd..57e5bf66490 100644
--- a/addons/point_of_sale/models/product.py
+++ b/addons/point_of_sale/models/product.py
@@ -7,11 +7,11 @@ from odoo.exceptions import UserError
class ProductTemplate(models.Model):
_inherit = 'product.template'
- available_in_pos = fields.Boolean(string='Available in POS', help='Check if you want this product to appear in the Point of Sale', default=False)
- to_weight = fields.Boolean(string='To Weigh With Scale', help="Check if the product should be weighted using the hardware scale integration")
+ available_in_pos = fields.Boolean(string='Available in POS', help='Check if you want this product to appear in the Point of Sale.', default=False)
+ to_weight = fields.Boolean(string='To Weigh With Scale', help="Check if the product should be weighted using the hardware scale integration.")
pos_categ_id = fields.Many2one(
'pos.category', string='Point of Sale Category',
- help="Those categories are used to group similar products for point of sale.")
+ help="Category used in the Point of Sale.")
@api.multi
def unlink(self):
diff --git a/addons/product/models/product_template.py b/addons/product/models/product_template.py
index 2aceabd28c1..e035e68cffe 100644
--- a/addons/product/models/product_template.py
+++ b/addons/product/models/product_template.py
@@ -36,12 +36,9 @@ class ProductTemplate(models.Model):
name = fields.Char('Name', index=True, required=True, translate=True)
sequence = fields.Integer('Sequence', default=1, help='Gives the sequence order when displaying a product list')
description = fields.Text(
- 'Description', translate=True,
- help="A precise description of the Product, used only for internal information purposes.")
+ 'Description', translate=True)
description_purchase = fields.Text(
- 'Purchase Description', translate=True,
- help="A description of the Product that you want to communicate to your vendors. "
- "This description will be copied to every Purchase Order, Receipt and Vendor Bill/Credit Note.")
+ 'Purchase Description', translate=True)
description_sale = fields.Text(
'Sale Description', translate=True,
help="A description of the Product that you want to communicate to your customers. "
@@ -49,11 +46,9 @@ class ProductTemplate(models.Model):
type = fields.Selection([
('consu', 'Consumable'),
('service', 'Service')], string='Product Type', default='consu', required=True,
- help='A storable product is a product for which you manage stock. The "Inventory" app has to be installed.\n'
- 'A consumable product, on the other hand, is a product for which stock is not managed.\n'
- 'A service is a non-material product you provide.\n'
- 'A digital content is a non-material product you sell online. The files attached to the products are the one that are sold on '
- 'the e-commerce such as e-books, music, pictures,... The "Digital Product" module has to be installed.')
+ help='A storable product is a product for which you manage stock. The Inventory app has to be installed.\n'
+ 'A consumable product is a product for which stock is not managed.\n'
+ 'A service is a non-material product you provide.')
rental = fields.Boolean('Can be Rent')
categ_id = fields.Many2one(
'product.category', 'Product Category',
@@ -70,7 +65,7 @@ class ProductTemplate(models.Model):
list_price = fields.Float(
'Sales Price', default=1.0,
digits=dp.get_precision('Product Price'),
- help="Base price to compute the customer price. Sometimes called the catalog price.")
+ help="Price at which the product is sold to customers.")
lst_price = fields.Float(
'Public Price', related='list_price',
digits=dp.get_precision('Product Price'))
@@ -78,9 +73,7 @@ class ProductTemplate(models.Model):
'Cost', compute='_compute_standard_price',
inverse='_set_standard_price', search='_search_standard_price',
digits=dp.get_precision('Product Price'), groups="base.group_user",
- help = "Cost used for stock valuation in standard price and as a first price to set in average/fifo. "
- "Also used as a base price for pricelists. "
- "Expressed in the default unit of measure of the product. ")
+ help = "Cost used for stock valuation in standard price and as a first price to set in average/FIFO.")
volume = fields.Float(
'Volume', compute='_compute_volume', inverse='_set_volume',
@@ -92,9 +85,7 @@ class ProductTemplate(models.Model):
weight_uom_id = fields.Many2one('uom.uom', string='Weight Unit of Measure', compute='_compute_weight_uom_id')
weight_uom_name = fields.Char(string='Weight unit of measure label', related='weight_uom_id.name', readonly=True)
- sale_ok = fields.Boolean(
- 'Can be Sold', default=True,
- help="Specify if the product can be selected in a sales order line.")
+ sale_ok = fields.Boolean('Can be Sold', default=True)
purchase_ok = fields.Boolean('Can be Purchased', default=True)
pricelist_id = fields.Many2one(
'product.pricelist', 'Pricelist', store=False,
@@ -102,19 +93,19 @@ class ProductTemplate(models.Model):
uom_id = fields.Many2one(
'uom.uom', 'Unit of Measure',
default=_get_default_uom_id, required=True,
- help="Default Unit of Measure used for all stock operation.")
+ help="Default unit of measure used for all stock operations.")
uom_name = fields.Char(string='Unit of Measure Name', related='uom_id.name', readonly=True)
uom_po_id = fields.Many2one(
'uom.uom', 'Purchase Unit of Measure',
default=_get_default_uom_id, required=True,
- help="Default Unit of Measure used for purchase orders. It must be in the same category than the default unit of measure.")
+ help="Default unit of measure used for purchase orders. It must be in the same category as the default unit of measure.")
company_id = fields.Many2one(
'res.company', 'Company',
default=lambda self: self.env['res.company']._company_default_get('product.template'), index=1)
packaging_ids = fields.One2many(
'product.packaging', string="Product Packages", compute="_compute_packaging_ids", inverse="_set_packaging_ids",
help="Gives the different ways to package the same product.")
- seller_ids = fields.One2many('product.supplierinfo', 'product_tmpl_id', 'Vendors')
+ seller_ids = fields.One2many('product.supplierinfo', 'product_tmpl_id', 'Vendors', help="Define vendor pricelists.")
variant_seller_ids = fields.One2many('product.supplierinfo', 'product_tmpl_id')
active = fields.Boolean('Active', default=True, help="If unchecked, it will allow you to hide the product without removing it.")
diff --git a/addons/product_email_template/models/product.py b/addons/product_email_template/models/product.py
index 83583c3a237..9ef844e8f46 100644
--- a/addons/product_email_template/models/product.py
+++ b/addons/product_email_template/models/product.py
@@ -11,6 +11,4 @@ class ProductTemplate(models.Model):
_inherit = "product.template"
email_template_id = fields.Many2one('mail.template', string='Product Email Template',
- help='When validating an invoice, an email will be sent to the customer '
- 'based on this template. The customer will receive an email for each '
- 'product linked to an email template.')
+ help='Send a product-specific email once the invoice is paid.')
diff --git a/addons/purchase/models/product.py b/addons/purchase/models/product.py
index 9f502d2c88a..724fdb45069 100644
--- a/addons/purchase/models/product.py
+++ b/addons/purchase/models/product.py
@@ -15,14 +15,13 @@ class ProductTemplate(models.Model):
property_account_creditor_price_difference = fields.Many2one(
'account.account', string="Price Difference Account", company_dependent=True,
help="This account is used in automated inventory valuation to "\
- "record the price difference between a purchase order and its related vendor bill "\
- "when validating this vendor bill.")
+ "record the price difference between a purchase order and its related vendor bill when validating this vendor bill.")
purchased_product_qty = fields.Float(compute='_compute_purchased_product_qty', string='Purchased')
purchase_method = fields.Selection([
('purchase', 'On ordered quantities'),
('receive', 'On received quantities'),
- ], string="Control Policy", help="On ordered quantities: control bills based on ordered quantities.\n"
- "On received quantities: control bills based on received quantity.", default="receive")
+ ], string="Control Policy", help="On ordered quantities: Control bills based on ordered quantities.\n"
+ "On received quantities: Control bills based on received quantities.", default="receive")
purchase_line_warn = fields.Selection(WARNING_MESSAGE, 'Purchase Order Line', help=WARNING_HELP, required=True, default="no-message")
purchase_line_warn_msg = fields.Text('Message for Purchase Order Line')
diff --git a/addons/purchase_requisition/models/purchase_requisition.py b/addons/purchase_requisition/models/purchase_requisition.py
index 40bd2e74b25..a3f0bc72a2b 100644
--- a/addons/purchase_requisition/models/purchase_requisition.py
+++ b/addons/purchase_requisition/models/purchase_requisition.py
@@ -433,12 +433,17 @@ class ProductTemplate(models.Model):
purchase_requisition = fields.Selection(
[('rfq', 'Create a draft purchase order'),
('tenders', 'Propose a call for tenders')],
- string='Procurement', default='rfq')
+ string='Procurement', default='rfq',
+ help="Create a draft purchase order: Based on your product configuration, the system will create a draft "
+ "purchase order.Propose a call for tender : If the 'purchase_requisition' module is installed and this option "
+ "is selected, the system will create a draft call for tender.")
+
class StockMove(models.Model):
_inherit = "stock.move"
- requistion_line_ids = fields.One2many('purchase.requisition.line', 'move_dest_id')
+ requistion_line_ids = fields.One2many('purchase.requisition.line', 'move_dest_id')
+
class ProcurementGroup(models.Model):
_inherit = 'procurement.group'
diff --git a/addons/sale/models/product_template.py b/addons/sale/models/product_template.py
index e1d0739082f..08baafac38f 100644
--- a/addons/sale/models/product_template.py
+++ b/addons/sale/models/product_template.py
@@ -20,20 +20,15 @@ class ProductTemplate(models.Model):
[('no', 'No'), ('cost', 'At cost'), ('sales_price', 'Sales price')],
string='Re-Invoice Policy',
default='no',
- help="Expenses registered in Expense app or in a vendor bill (with an analytic account set) "
- "can be automatically re-invoiced to the customer. This is useful for customer projects. "
- "With this option activated, the validated expense is added to the sales order linked to the "
- "analytic account, in order to be invoiced. With Project Management, such an analytic account "
- "can be automatically generated at the order confirmation, if set on the Service Tracking "
- "option of one product item.")
+ help="Expenses and vendor bills can be re-invoiced to a customer."
+ "With this option, a validated expense can be re-invoice to a customer at its cost or sales price.")
sales_count = fields.Float(compute='_compute_sales_count', string='Sold')
hide_expense_policy = fields.Boolean(compute='_compute_hide_expense_policy')
- invoice_policy = fields.Selection(
- [('order', 'Ordered quantities'),
- ('delivery', 'Delivered quantities'),
- ], string='Invoicing Policy',
- help='Ordered Quantity: Invoice based on the quantity the customer ordered.\n'
- 'Delivered Quantity: Invoiced based on the quantity the vendor delivered (time or deliveries).',
+ invoice_policy = fields.Selection([
+ ('order', 'Ordered quantities'),
+ ('delivery', 'Delivered quantities')], string='Invoicing Policy',
+ help='Ordered Quantity: Invoice quantities ordered by the customer.\n'
+ 'Delivered Quantity: Invoice quantities delivered to the customer.',
default='order')
@api.multi
diff --git a/addons/stock/models/product.py b/addons/stock/models/product.py
index cb625a758e5..2e8b73d3ee8 100644
--- a/addons/stock/models/product.py
+++ b/addons/stock/models/product.py
@@ -415,11 +415,11 @@ class ProductTemplate(models.Model):
help="This stock location will be used, instead of the default one, as the source location for stock moves generated when you do an inventory.")
sale_delay = fields.Float(
'Customer Lead Time', default=0,
- help="Delivery lead time, in days. It's the number of days, promised to the customer, between the confirmation of the order and the delivery.")
+ help="Delivery lead time, in days. It's the number of days, promised to the customer, between the confirmation of the sales order and the delivery.")
tracking = fields.Selection([
('serial', 'By Unique Serial Number'),
('lot', 'By Lots'),
- ('none', 'No Tracking')], string="Tracking", default='none', required=True)
+ ('none', 'No Tracking')], string="Tracking", help="Ensure the traceability of a storable product in your warehouse.", default='none', required=True)
description_picking = fields.Text('Description on Picking', translate=True)
description_pickingout = fields.Text('Description on Delivery Orders', translate=True)
description_pickingin = fields.Text('Description on Receptions', translate=True)
@@ -443,7 +443,7 @@ class ProductTemplate(models.Model):
route_ids = fields.Many2many(
'stock.location.route', 'stock_route_product', 'product_id', 'route_id', 'Routes',
domain=[('product_selectable', '=', True)],
- help="Depending on the modules installed, this will allow you to define the route of the product: whether it will be bought, manufactured, MTO/MTS,...")
+ help="Depending on the modules installed, this will allow you to define the route of the product: whether it will be bought, manufactured, MTO, etc.")
nbr_reordering_rules = fields.Integer('Reordering Rules', compute='_compute_nbr_reordering_rules')
# TDE FIXME: really used ?
reordering_min_qty = fields.Float(compute='_compute_nbr_reordering_rules')
diff --git a/addons/stock/models/res_partner.py b/addons/stock/models/res_partner.py
index d58e2b1d853..897e40320c3 100644
--- a/addons/stock/models/res_partner.py
+++ b/addons/stock/models/res_partner.py
@@ -10,10 +10,10 @@ class Partner(models.Model):
property_stock_customer = fields.Many2one(
'stock.location', string="Customer Location", company_dependent=True,
- help="This stock location will be used, instead of the default one, as the destination location for goods you send to this partner")
+ help="The stock location used as destination when sending goods to this contact.")
property_stock_supplier = fields.Many2one(
'stock.location', string="Vendor Location", company_dependent=True,
- help="This stock location will be used, instead of the default one, as the source location for goods you receive from the current partner")
+ help="The stock location used as source when receiving goods from this contact.")
picking_warn = fields.Selection(WARNING_MESSAGE, 'Stock Picking', help=WARNING_HELP, default='no-message')
# TDE FIXME: expand this message / help
picking_warn_msg = fields.Text('Message for Stock Picking')
diff --git a/addons/stock_landed_costs/models/product.py b/addons/stock_landed_costs/models/product.py
index 1b124a20b3c..47719e4fe04 100644
--- a/addons/stock_landed_costs/models/product.py
+++ b/addons/stock_landed_costs/models/product.py
@@ -15,7 +15,7 @@ SPLIT_METHOD = [
class ProductTemplate(models.Model):
_inherit = "product.template"
- landed_cost_ok = fields.Boolean('Is a Landed Cost')
+ landed_cost_ok = fields.Boolean('Is a Landed Cost', help='Indicates whether the product is a landed cost.')
split_method = fields.Selection(
selection=SPLIT_METHOD, string='Split Method', default='equal',
help="Equal : Cost will be equally divided.\n"
diff --git a/addons/website_crm_partner_assign/models/res_partner.py b/addons/website_crm_partner_assign/models/res_partner.py
index 9b47a9f791d..28372c1e402 100644
--- a/addons/website_crm_partner_assign/models/res_partner.py
+++ b/addons/website_crm_partner_assign/models/res_partner.py
@@ -35,7 +35,7 @@ class ResPartner(models.Model):
_inherit = "res.partner"
partner_weight = fields.Integer('Level Weight', default=0, track_visibility='onchange',
- help="Gives the probability to assign a lead to this partner. (0 means no assignation.)")
+ help="This should be a numerical value greater than 0 which will decide the contention for this partner to take this lead/opportunity.")
grade_id = fields.Many2one('res.partner.grade', 'Level', track_visibility='onchange')
grade_sequence = fields.Integer(related='grade_id.sequence', readonly=True, store=True)
activation = fields.Many2one('res.partner.activation', 'Activation', index=True, track_visibility='onchange')
diff --git a/addons/website_sale/models/product.py b/addons/website_sale/models/product.py
index 5737d55cb9f..1f70b83b563 100644
--- a/addons/website_sale/models/product.py
+++ b/addons/website_sale/models/product.py
@@ -112,21 +112,19 @@ class ProductTemplate(models.Model):
website_description = fields.Html('Description for the website', sanitize_attributes=False, translate=html_translate)
alternative_product_ids = fields.Many2many('product.template', 'product_alternative_rel', 'src_id', 'dest_id',
- string='Alternative Products', help='Suggest more expensive alternatives to '
- 'your customers (upsell strategy). Those products show up on the product page.')
+ string='Alternative Products', help='Suggest alternatives to your customer'
+ '(upsell strategy).Those product show up on the product page.')
accessory_product_ids = fields.Many2many('product.product', 'product_accessory_rel', 'src_id', 'dest_id',
- string='Accessory Products', help='Accessories show up when the customer reviews the '
- 'cart before paying (cross-sell strategy, e.g. for computers: mouse, keyboard, etc.). '
- 'An algorithm figures out a list of accessories based on all the products added to cart.')
+ string='Accessory Products', help='Accessories show up when the customer'
+ 'reviews the cart before payment (cross-sell strategy).')
website_size_x = fields.Integer('Size X', default=1)
website_size_y = fields.Integer('Size Y', default=1)
website_style_ids = fields.Many2many('product.style', string='Styles')
website_sequence = fields.Integer('Website Sequence', help="Determine the display order in the Website E-commerce",
default=lambda self: self._default_website_sequence())
public_categ_ids = fields.Many2many('product.public.category', string='Website Product Category',
- help="Categories can be published on the Shop page (online catalog grid) to help "
- "customers find all the items within a category. To publish them, go to the Shop page, "
- "hit Customize and turn *Product Categories* on. A product can belong to several categories.")
+ help="The product will be available in each mentioned e-commerce category. Go to"
+ "Shop > Customize and enable 'E-commerce categories' to view all e-commerce categories.")
product_image_ids = fields.One2many('product.image', 'product_tmpl_id', string='Images')
website_price = fields.Float('Website price', compute='_website_price', digits=dp.get_precision('Product Price'))
diff --git a/addons/website_sale_options/models/product.py b/addons/website_sale_options/models/product.py
index 75f323331f7..56b8116d611 100644
--- a/addons/website_sale_options/models/product.py
+++ b/addons/website_sale_options/models/product.py
@@ -8,6 +8,4 @@ class ProductTemplate(models.Model):
_inherit = "product.template"
optional_product_ids = fields.Many2many('product.template', 'product_optional_rel', 'src_id', 'dest_id',
- string='Optional Products', help="Optional Products are suggested "
- "whenever the customer hits *Add to Cart* (cross-sell strategy, "
- "e.g. for computers: warranty, software, etc.).")
+ string='Optional Products', help="Suggest optional products when adding the product to a cart.")
diff --git a/odoo/addons/base/models/res_partner.py b/odoo/addons/base/models/res_partner.py
index aeaad1f3968..f676ab7dcc0 100644
--- a/odoo/addons/base/models/res_partner.py
+++ b/odoo/addons/base/models/res_partner.py
@@ -150,8 +150,7 @@ class Partner(models.Model):
child_ids = fields.One2many('res.partner', 'parent_id', string='Contacts', domain=[('active', '=', True)]) # force "active_test" domain to bypass _search() override
ref = fields.Char(string='Internal Reference', index=True)
lang = fields.Selection(_lang_get, string='Language', default=lambda self: self.env.lang,
- help="If the selected language is loaded in the system, all documents related to "
- "this contact will be printed in this language. If not, it will be English.")
+ help="All the emails and documents sent to this contact will be translated in this language.")
tz = fields.Selection(_tz_get, string='Timezone', default=lambda self: self._context.get('tz'),
help="The partner's timezone, used to output proper date and time values "
"inside printed reports. It is important to set a value for this field. "
@@ -159,24 +158,21 @@ class Partner(models.Model):
"render date and time values: your computer's timezone.")
tz_offset = fields.Char(compute='_compute_tz_offset', string='Timezone offset', invisible=True)
user_id = fields.Many2one('res.users', string='Salesperson',
- help='The internal user that is in charge of communicating with this contact if any.')
- vat = fields.Char(string='Tax ID', help="Tax Identification Number. "
- "Fill it if the company is subjected to taxes. "
- "Used by the some of the legal statements.")
+ help='The internal user in charge of this contact.')
+ vat = fields.Char(string='Tax ID', help="The Tax Identification Number. Complete it if the contact is subjected to government taxes. Used in some legal statements.")
bank_ids = fields.One2many('res.partner.bank', 'partner_id', string='Banks')
- website = fields.Char(help="Website of Partner or Company")
+ website = fields.Char()
comment = fields.Text(string='Notes')
category_id = fields.Many2many('res.partner.category', column1='partner_id',
column2='category_id', string='Tags', default=_default_category)
credit_limit = fields.Float(string='Credit Limit')
- barcode = fields.Char(oldname='ean13')
+ barcode = fields.Char(oldname='ean13', help="Use a barcode to identify this contact from the Point of Sale.")
active = fields.Boolean(default=True)
customer = fields.Boolean(string='Is a Customer', default=True,
- help="Check this box if this contact is a customer.")
+ help="Check this box if this contact is a customer. It can be selected in sales orders.")
supplier = fields.Boolean(string='Is a Vendor',
- help="Check this box if this contact is a vendor. "
- "If it's not checked, purchase people will not see it when encoding a purchase order.")
+ help="Check this box if this contact is a vendor. It can be selected in purchase orders.")
employee = fields.Boolean(help="Check this box if this contact is an Employee.")
function = fields.Char(string='Job Position')
type = fields.Selection(
@@ -187,7 +183,7 @@ class Partner(models.Model):
("private", "Private Address"),
], string='Address Type',
default='contact',
- help="Used to select automatically the right address according to the context in sales and purchases documents.")
+ help="Used by Sales and Purchase Apps to select the relevant address depending on the context.")
street = fields.Char()
street2 = fields.Char()
zip = fields.Char(change_default=True)