[IMP] Remove duplicate fields names

This commit is contained in:
Fabien Pinckaers
2018-01-07 19:28:03 +01:00
80 changed files with 123 additions and 124 deletions
@@ -352,7 +352,7 @@ class AccountBankStatementLine(models.Model):
name = fields.Char(string='Label', required=True)
date = fields.Date(required=True, default=lambda self: self._context.get('date', fields.Date.context_today(self)))
amount = fields.Monetary(digits=0, currency_field='journal_currency_id')
journal_currency_id = fields.Many2one('res.currency', related='statement_id.currency_id',
journal_currency_id = fields.Many2one('res.currency', string="Journal's Currency", related='statement_id.currency_id',
help='Utility field to express amount currency', readonly=True)
partner_id = fields.Many2one('res.partner', string='Partner')
bank_account_id = fields.Many2one('res.partner.bank', string='Bank Account')
+6 -6
View File
@@ -366,7 +366,7 @@ class AccountInvoice(models.Model):
#fields use to set the sequence, on the first invoice of the journal
sequence_number_next = fields.Char(string='Next Number', compute="_get_sequence_number_next", inverse="_set_sequence_next")
sequence_number_next_prefix = fields.Char(string='Next Number', compute="_get_sequence_prefix")
sequence_number_next_prefix = fields.Char(string='Next Number Prefix', compute="_get_sequence_prefix")
_sql_constraints = [
('number_uniq', 'unique(number, company_id, journal_id, type)', 'Invoice Number must be unique per Company!'),
@@ -1500,9 +1500,9 @@ class AccountInvoiceLine(models.Model):
default=_default_account,
help="The income or expense account related to the selected product.")
price_unit = fields.Float(string='Unit Price', required=True, digits=dp.get_precision('Product Price'))
price_subtotal = fields.Monetary(string='Amount',
price_subtotal = fields.Monetary(string='Amount (without Taxes)',
store=True, readonly=True, compute='_compute_price', help="Total amount without taxes")
price_total = fields.Monetary(string='Amount',
price_total = fields.Monetary(string='Amount (with Taxes)',
store=True, readonly=True, compute='_compute_price', help="Total amount with taxes")
price_subtotal_signed = fields.Monetary(string='Amount Signed', currency_field='company_currency_id',
store=True, readonly=True, compute='_compute_price',
@@ -1696,9 +1696,9 @@ class AccountInvoiceTax(models.Model):
tax_id = fields.Many2one('account.tax', string='Tax', ondelete='restrict')
account_id = fields.Many2one('account.account', string='Tax Account', required=True, domain=[('deprecated', '=', False)])
account_analytic_id = fields.Many2one('account.analytic.account', string='Analytic account')
amount = fields.Monetary()
amount_rounding = fields.Monetary()
amount_total = fields.Monetary(string="Amount", compute='_compute_amount_total')
amount = fields.Monetary('Tax Amount')
amount_rounding = fields.Monetary('Amount Delta')
amount_total = fields.Monetary(string="Amount Total", compute='_compute_amount_total')
manual = fields.Boolean(default=True)
sequence = fields.Integer(help="Gives the sequence order when displaying a list of invoice tax.")
company_id = fields.Many2one('res.company', string='Company', related='account_id.company_id', store=True, readonly=True)
+2 -2
View File
@@ -1562,9 +1562,9 @@ class AccountPartialReconcile(models.Model):
amount = fields.Monetary(currency_field='company_currency_id', help="Amount concerned by this matching. Assumed to be always positive")
amount_currency = fields.Monetary(string="Amount in Currency")
currency_id = fields.Many2one('res.currency', string='Currency')
company_currency_id = fields.Many2one('res.currency', related='company_id.currency_id', readonly=True,
company_currency_id = fields.Many2one('res.currency', string="Company Currency", related='company_id.currency_id', readonly=True,
help='Utility field to express amount currency')
company_id = fields.Many2one('res.company', related='debit_move_id.company_id', store=True, string='Currency')
company_id = fields.Many2one('res.company', related='debit_move_id.company_id', store=True, string='Company')
full_reconcile_id = fields.Many2one('account.full.reconcile', string="Full Reconcile", copy=False)
max_date = fields.Date(string='Max Date of Matched Lines', compute='_compute_max_date',
readonly=True, copy=False, store=True,
+1 -1
View File
@@ -290,7 +290,7 @@ class account_payment(models.Model):
invoice_ids = fields.Many2many('account.invoice', 'account_invoice_payment_rel', 'payment_id', 'invoice_id', string="Invoices", copy=False, readonly=True)
has_invoices = fields.Boolean(compute="_get_has_invoices", help="Technical field used for usability purposes")
payment_difference = fields.Monetary(compute='_compute_payment_difference', readonly=True)
payment_difference_handling = fields.Selection([('open', 'Keep open'), ('reconcile', 'Mark invoice as fully paid')], default='open', string="Payment Difference", copy=False)
payment_difference_handling = fields.Selection([('open', 'Keep open'), ('reconcile', 'Mark invoice as fully paid')], default='open', string="Payment Difference Handling", copy=False)
writeoff_account_id = fields.Many2one('account.account', string="Difference Account", domain=[('deprecated', '=', False)], copy=False)
writeoff_label = fields.Char(
string='Journal Item Label',
+1 -1
View File
@@ -380,7 +380,7 @@ class ResPartner(models.Model):
groups='account.group_account_invoice')
currency_id = fields.Many2one('res.currency', compute='_get_company_currency', readonly=True,
string="Currency", help='Utility field to express amount currency')
contracts_count = fields.Integer(compute='_compute_contracts_count', string="Contracts", type='integer')
contracts_count = fields.Integer(compute='_compute_contracts_count', string="Contracts Count", type='integer')
journal_item_count = fields.Integer(compute='_compute_journal_item_count', string="Journal Items", type="integer")
property_account_payable_id = fields.Many2one('account.account', company_dependent=True,
string="Account Payable", oldname="property_account_payable",
+1 -1
View File
@@ -28,7 +28,7 @@ class ResConfigSettings(models.TransientModel):
module_account_accountant = fields.Boolean(string='Accounting')
group_analytic_accounting = fields.Boolean(string='Analytic Accounting',
implied_group='analytic.group_analytic_accounting')
group_warning_account = fields.Boolean(string="Warnings", implied_group='account.group_warning_account')
group_warning_account = fields.Boolean(string="Warnings in Invoices", implied_group='account.group_warning_account')
group_cash_rounding = fields.Boolean(string="Cash Rounding", implied_group='account.group_cash_rounding')
module_account_asset = fields.Boolean(string='Assets Management')
module_account_deferred_revenue = fields.Boolean(string="Revenue Recognition")
@@ -42,11 +42,11 @@ class AccountInvoiceReport(models.Model):
company_id = fields.Many2one('res.company', string='Company', readonly=True)
user_id = fields.Many2one('res.users', string='Salesperson', readonly=True)
price_total = fields.Float(string='Total Without Tax', readonly=True)
user_currency_price_total = fields.Float(string="Total Without Tax", compute='_compute_amounts_in_user_currency', digits=0)
user_currency_price_total = fields.Float(string="Total Without Tax in Currency", compute='_compute_amounts_in_user_currency', digits=0)
price_average = fields.Float(string='Average Price', readonly=True, group_operator="avg")
user_currency_price_average = fields.Float(string="Average Price", compute='_compute_amounts_in_user_currency', digits=0)
user_currency_price_average = fields.Float(string="Average Price in Currency", compute='_compute_amounts_in_user_currency', digits=0)
currency_rate = fields.Float(string='Currency Rate', readonly=True, group_operator="avg", groups="base.group_multi_currency")
nbr = fields.Integer(string='# of Lines', readonly=True) # TDE FIXME master: rename into nbr_lines
nbr = fields.Integer(string='Line Count', readonly=True) # TDE FIXME master: rename into nbr_lines
type = fields.Selection([
('out_invoice', 'Customer Invoice'),
('in_invoice', 'Vendor Bill'),
@@ -95,7 +95,7 @@
<field name="name"/>
<field name="account_id" groups="account.group_account_user"/>
<field name="base"/>
<field name="amount_total"/>
<field name="amount_total" string="Amount"/>
<field name="currency_id" invisible="1"/>
</tree>
</field>
@@ -112,7 +112,7 @@
<field name="account_id" groups="account.group_account_user"/>
<field name="account_analytic_id" domain="[('company_id', '=', parent.company_id)]" groups="analytic.group_analytic_accounting"/>
<field name="manual"/>
<field name="amount_total"/>
<field name="amount_total" string="Amount"/>
<field name="base"/>
<field name="currency_id" invisible="1"/>
</group>
@@ -279,7 +279,7 @@
<field name="discount" groups="base.group_no_one"/>
<field name="invoice_line_tax_ids" widget="many2many_tags" options="{'no_create': True}" context="{'type':parent.type}"
domain="[('type_tax_use','=','purchase'),('company_id', '=', parent.company_id)]"/>
<field name="price_subtotal"/>
<field name="price_subtotal" string="Amount"/>
<field name="currency_id" invisible="1"/>
</tree>
</field>
@@ -429,7 +429,7 @@
<field name="discount" groups="base.group_no_one"/>
<field name="invoice_line_tax_ids" widget="many2many_tags" options="{'no_create': True}" context="{'type':parent.type}"
domain="[('type_tax_use','=','sale'),('company_id', '=', parent.company_id)]"/>
<field name="price_subtotal"/>
<field name="price_subtotal" string="Subtotal"/>
<field name="currency_id" invisible="1"/>
</tree>
<kanban class="o_kanban_mobile">
@@ -396,7 +396,7 @@
<field name="group_warning_account"/>
</div>
<div class="o_setting_right_pane">
<label for="group_warning_account"/>
<label for="group_warning_account" string="Warnings"/>
<div class="text-muted">
Get warnings when invoicing specific customers
</div>
@@ -20,8 +20,8 @@ class AccountingReport(models.TransientModel):
account_report_id = fields.Many2one('account.financial.report', string='Account Reports', required=True, default=_get_account_report)
label_filter = fields.Char(string='Column Label', help="This label will be displayed on report to show the balance computed for the given comparison filter.")
filter_cmp = fields.Selection([('filter_no', 'No Filters'), ('filter_date', 'Date')], string='Filter by', required=True, default='filter_no')
date_from_cmp = fields.Date(string='Start Date')
date_to_cmp = fields.Date(string='End Date')
date_from_cmp = fields.Date(string='Start Date Comparison')
date_to_cmp = fields.Date(string='End Date Comparison')
debit_credit = fields.Boolean(string='Display Debit/Credit Columns', help="This option allows you to get more details about the way your balances are computed. Because it is space consuming, we do not allow to use it while doing a comparison.")
def _build_comparison_context(self, data):
+1 -1
View File
@@ -9,7 +9,7 @@ class AccountMoveLineReconcile(models.TransientModel):
_name = 'account.move.line.reconcile'
_description = 'Account move line reconcile'
trans_nbr = fields.Integer(string='# of Transaction', readonly=True)
trans_nbr = fields.Integer(string='Transaction Count', readonly=True)
credit = fields.Float(string='Credit amount', readonly=True, digits=0)
debit = fields.Float(string='Debit amount', readonly=True, digits=0)
writeoff = fields.Float(string='Write-Off amount', readonly=True, digits=0)
@@ -18,8 +18,8 @@ class AssetAssetReport(models.Model):
depreciation_value = fields.Float(string='Amount of Depreciation Lines', readonly=True)
installment_value = fields.Float(string='Amount of Installment Lines', readonly=True)
move_check = fields.Boolean(string='Posted', readonly=True)
installment_nbr = fields.Integer(string='# of Installment Lines', readonly=True)
depreciation_nbr = fields.Integer(string='# of Depreciation Lines', readonly=True)
installment_nbr = fields.Integer(string='Installment Count', readonly=True)
depreciation_nbr = fields.Integer(string='Depreciation Count', readonly=True)
gross_value = fields.Float(string='Gross Amount', readonly=True)
posted_value = fields.Float(string='Posted Amount', readonly=True)
unposted_value = fields.Float(string='Unposted Amount', readonly=True)
+1 -1
View File
@@ -144,5 +144,5 @@ class IrModelFieldsAnonymizationMigrationFix(models.Model):
model_name = fields.Char('Model')
field_name = fields.Char('Field')
query = fields.Text()
query_type = fields.Selection(selection=[('sql', 'sql'), ('python', 'python')], string='Query')
query_type = fields.Selection(selection=[('sql', 'sql'), ('python', 'python')], string='Query Type')
sequence = fields.Integer()
@@ -9,7 +9,7 @@ class Partner(models.Model):
_inherit = 'res.partner'
country_enforce_cities = fields.Boolean(related='country_id.enforce_cities')
city_id = fields.Many2one('res.city', string='City')
city_id = fields.Many2one('res.city', string='City of Address')
@api.onchange('city_id')
def _onchange_city_id(self):
@@ -29,7 +29,7 @@ class Partner(models.Model):
<div>
<field name="country_enforce_cities" invisible="1"/>
<field name='city' attrs="{'invisible': [('country_enforce_cities', '=', True), ('city_id', '!=', False)], 'readonly': [('type', '=', 'contact'), ('parent_id', '!=', False)]}"/>
<field name='city_id' attrs="{'invisible': [('country_enforce_cities', '=', False)], 'readonly': [('type', '=', 'contact'), ('parent_id', '!=', False)]}" context="{'default_country_id': country_id}" domain="[('country_id', '=', country_id)]"/>
<field name='city_id' attrs="{'invisible': [('country_enforce_cities', '=', False)], 'readonly': [('type', '=', 'contact'), ('parent_id', '!=', False)]}" context="{'default_country_id': country_id}" domain="[('country_id', '=', country_id)]" string="City"/>
</div>
"""
city_id_node = etree.fromstring(replacement_xml)
@@ -28,7 +28,7 @@ class ResConfigSettings(models.TransientModel):
help="Share your partners to all companies defined in your instance.\n"
" * Checked : Partners are visible for every companies, even if a company is defined on the partner.\n"
" * Unchecked : Each company can see only its partner (partners where company is defined). Partners not related to a company are visible for all companies.")
default_custom_report_footer = fields.Boolean("Custom Report Footer")
default_custom_report_footer = fields.Boolean("Default Custom Report Footer")
report_footer = fields.Text(related="company_id.report_footer", string='Custom Report Footer', help="Footer text displayed at the bottom of all reports.")
group_multi_currency = fields.Boolean(string='Multi-Currencies',
implied_group='base.group_multi_currency',
+1 -1
View File
@@ -116,7 +116,7 @@ class ResPartner(models.Model):
vat = country_code + vat
return vat
@api.constrains('vat', 'commercial_partner_country_id')
@api.constrains('vat')
def check_vat(self):
if self.env.context.get('company_id'):
company = self.env['res.company'].browse(self.env.context['company_id'])
+1 -1
View File
@@ -816,7 +816,7 @@ class Meeting(models.Model):
('-1', 'Last')
], string='By day')
final_date = fields.Date('Repeat Until')
user_id = fields.Many2one('res.users', 'Responsible', states={'done': [('readonly', True)]}, default=lambda self: self.env.user)
user_id = fields.Many2one('res.users', 'Owner', states={'done': [('readonly', True)]}, default=lambda self: self.env.user)
partner_id = fields.Many2one('res.partner', string='Responsible', related='user_id.partner_id', readonly=True)
active = fields.Boolean('Active', default=True, help="If the active field is set to false, it will allow you to hide the event alarm information without removing it.")
categ_ids = fields.Many2many('calendar.event.type', 'meeting_category_rel', 'event_id', 'type_id', 'Tags')
+1 -1
View File
@@ -72,7 +72,7 @@ class Lead(models.Model):
team_id = fields.Many2one('crm.team', string='Sales Channel', oldname='section_id', default=lambda self: self.env['crm.team'].sudo()._get_default_team_id(user_id=self.env.uid),
index=True, track_visibility='onchange', help='When sending mails, the default email address is taken from the sales channel.')
kanban_state = fields.Selection([('grey', 'No next activity planned'), ('red', 'Next activity late'), ('green', 'Next activity is planned')],
string='Activity State', compute='_compute_kanban_state')
string='Kanban State', compute='_compute_kanban_state')
email_cc = fields.Text('Global CC', help="These email addresses will be added to the CC field of all inbound and outbound emails for this record before being sent. Separate multiple email addresses with a comma")
description = fields.Text('Notes')
create_date = fields.Datetime('Create Date', readonly=True)
+2 -2
View File
@@ -23,7 +23,7 @@ class Team(models.Model):
string='Number of open opportunities', readonly=True)
opportunities_amount = fields.Integer(
compute='_compute_opportunities',
string='Amount of quotations to invoice', readonly=True)
string='Opportunities Revenues', readonly=True)
dashboard_graph_model = fields.Selection(selection_add=[('crm.opportunity.report', 'Pipeline')])
dashboard_graph_period_pipeline = fields.Selection([
('week', 'Within a Week'),
@@ -37,7 +37,7 @@ class Team(models.Model):
('month', 'Expected Closing Month'),
('user', 'Salesperson'),
('stage', 'Stage'),
], string='Group by', default='day', help="How this channel's dashboard graph will group the results.")
], string='Grouping Method', default='day', help="How this channel's dashboard graph will group the results.")
def _compute_unassigned_leads_count(self):
leads_data = self.env['crm.lead'].read_group([
+1 -1
View File
@@ -11,7 +11,7 @@
<field name="is_ssl"/>
<field name="object_id"/>
<field name="date"/>
<field name="message_ids" string="# of emails"/>
<field name="message_ids" string="Email Count"/>
<field name="state"/>
</tree>
</field>
+2 -2
View File
@@ -27,9 +27,9 @@ class FleetVehicle(models.Model):
log_services = fields.One2many('fleet.vehicle.log.services', 'vehicle_id', 'Services Logs')
log_contracts = fields.One2many('fleet.vehicle.log.contract', 'vehicle_id', 'Contracts')
cost_count = fields.Integer(compute="_compute_count_all", string="Costs")
contract_count = fields.Integer(compute="_compute_count_all", string='Contracts')
contract_count = fields.Integer(compute="_compute_count_all", string='Contract Count')
service_count = fields.Integer(compute="_compute_count_all", string='Services')
fuel_logs_count = fields.Integer(compute="_compute_count_all", string='Fuel Logs')
fuel_logs_count = fields.Integer(compute="_compute_count_all", string='Fuel Log Count')
odometer_count = fields.Integer(compute="_compute_count_all", string='Odometer')
acquisition_date = fields.Date('Immatriculation Date', required=False, help='Date when the vehicle has been immatriculated')
color = fields.Char(help='Color of the vehicle')
@@ -7,4 +7,4 @@ from odoo import fields, models
class ResConfigSettings(models.TransientModel):
_inherit = "res.config.settings"
google_drive_uri_copy = fields.Char(related='google_drive_uri', string='URI', help="The URL to generate the authorization code from Google")
google_drive_uri_copy = fields.Char(related='google_drive_uri', string='URI Copy', help="The URL to generate the authorization code from Google")
+1 -1
View File
@@ -25,7 +25,7 @@ class HrEmployee(models.Model):
attendance_ids = fields.One2many('hr.attendance', 'employee_id', help='list of attendances for the employee')
last_attendance_id = fields.Many2one('hr.attendance', compute='_compute_last_attendance_id', store=True)
attendance_state = fields.Selection(string="Attendance", compute='_compute_attendance_state', selection=[('checked_out', "Checked out"), ('checked_in', "Checked in")])
attendance_state = fields.Selection(string="Attendance Status", compute='_compute_attendance_state', selection=[('checked_out', "Checked out"), ('checked_in', "Checked in")])
manual_attendance = fields.Boolean(string='Manual Attendance', compute='_compute_manual_attendance', inverse='_inverse_manual_attendance',
help='The employee will have access to the "My Attendances" menu to check in and out from his session')
+1 -1
View File
@@ -21,7 +21,7 @@ class Employee(models.Model):
string='Home-Work Dist.', help="In kilometers", groups="hr.group_hr_user")
contract_ids = fields.One2many('hr.contract', 'employee_id', string='Contracts')
contract_id = fields.Many2one('hr.contract', compute='_compute_contract_id', string='Current Contract', help='Latest contract of the employee')
contracts_count = fields.Integer(compute='_compute_contracts_count', string='Contracts')
contracts_count = fields.Integer(compute='_compute_contracts_count', string='Contract Count')
def _compute_contract_id(self):
""" get the lastest contract """
@@ -14,6 +14,7 @@ class HrExpenseRegisterPaymentWizard(models.TransientModel):
"you can manage the numbering in the journal configuration page.")
payment_method_code_2 = fields.Char(related='payment_method_id.code',
help="Technical field used to adapt the interface to the payment type selected.",
string="Payment Method Code 2",
readonly=True)
@api.onchange('journal_id')
+1 -1
View File
@@ -9,7 +9,7 @@ class HrEmployee(models.Model):
_description = 'Employee'
slip_ids = fields.One2many('hr.payslip', 'employee_id', string='Payslips', readonly=True)
payslip_count = fields.Integer(compute='_compute_payslip_count', string='Payslips', groups="hr_payroll.group_hr_payroll_user")
payslip_count = fields.Integer(compute='_compute_payslip_count', string='Payslip Count', groups="hr_payroll.group_hr_payroll_user")
@api.multi
def _compute_payslip_count(self):
+3 -3
View File
@@ -15,15 +15,15 @@ class Job(models.Model):
'res.partner', "Job Location", default=_default_address_id,
help="Address where employees are working")
application_ids = fields.One2many('hr.applicant', 'job_id', "Applications")
application_count = fields.Integer(compute='_compute_application_count', string="Applications")
application_count = fields.Integer(compute='_compute_application_count', string="Application Count")
manager_id = fields.Many2one(
'hr.employee', related='department_id.manager_id', string="Department Manager",
readonly=True, store=True)
user_id = fields.Many2one('res.users', "Recruitment Responsible", track_visibility='onchange')
hr_responsible_id = fields.Many2one('res.users', "HR Responsible", track_visibility='onchange',
help="Person responsible of validating the employee's contracts.")
document_ids = fields.One2many('ir.attachment', compute='_compute_document_ids', string="Applications")
documents_count = fields.Integer(compute='_compute_document_ids', string="Documents")
document_ids = fields.One2many('ir.attachment', compute='_compute_document_ids', string="Documents")
documents_count = fields.Integer(compute='_compute_document_ids', string="Document Count")
alias_id = fields.Many2one(
'mail.alias', "Alias", ondelete="restrict", required=True,
help="Email alias for this job position. New emails will automatically create new applicants for this job position.")
@@ -36,7 +36,7 @@ class HrContract(models.Model):
company_car_total_depreciated_cost = fields.Monetary()
public_transport_reimbursed_amount = fields.Monetary(string='Reimbursed amount',
compute='_compute_public_transport_reimbursed_amount', readonly=False, store=True)
others_reimbursed_amount = fields.Monetary(string='Reimbursed amount')
others_reimbursed_amount = fields.Monetary(string='Other Reimbursed amount')
transport_employer_cost = fields.Monetary(compute='_compute_transport_employer_cost', string="Employer cost from employee transports")
warrants_cost = fields.Monetary(compute='_compute_warrants_cost')
+1 -1
View File
@@ -26,7 +26,7 @@ class AccountInvoice(models.Model):
l10n_ch_isr_valid = fields.Boolean(compute='_compute_l10n_ch_isr_valid', help='Boolean value. True iff all the data required to generate the ISR are present')
l10n_ch_isr_sent = fields.Boolean(defaut=False, help="Boolean value telling whether or not the ISR corresponding to this invoice has already been printed or sent by mail.")
l10n_ch_currency_name = fields.Char(related='currency_id.name', help="The name of this invoice's currency") #This field is used in the "invisible" condition field of the 'Print ISR' button.
l10n_ch_currency_name = fields.Char(related='currency_id.name', string="Currency Name", help="The name of this invoice's currency") #This field is used in the "invisible" condition field of the 'Print ISR' button.
@api.depends('partner_bank_id.bank_id.l10n_ch_postal_eur', 'partner_bank_id.bank_id.l10n_ch_postal_chf')
def _compute_l10n_ch_isr_postal(self):
+3 -3
View File
@@ -70,7 +70,7 @@ class MailActivity(models.Model):
# owner
res_id = fields.Integer('Related Document ID', index=True, required=True)
res_model_id = fields.Many2one(
'ir.model', 'Related Document Model',
'ir.model', 'Document Model',
index=True, ondelete='cascade', required=True)
res_model = fields.Char(
'Related Document Model',
@@ -299,13 +299,13 @@ class MailActivityMixin(models.AbstractModel):
activity_state = fields.Selection([
('overdue', 'Overdue'),
('today', 'Today'),
('planned', 'Planned')], string='State',
('planned', 'Planned')], string='Activity State',
compute='_compute_activity_state',
groups="base.group_user",
help='Status based on activities\nOverdue: Due date is already passed\n'
'Today: Activity date is today\nPlanned: Future activities.')
activity_user_id = fields.Many2one(
'res.users', 'Responsible',
'res.users', 'Responsible User',
related='activity_ids.user_id',
search='_search_activity_user_id',
groups="base.group_user")
+3 -3
View File
@@ -37,7 +37,7 @@ class MaintenanceEquipmentCategory(models.Model):
equipment_ids = fields.One2many('maintenance.equipment', 'category_id', string='Equipments', copy=False)
equipment_count = fields.Integer(string="Equipment", compute='_compute_equipment_count')
maintenance_ids = fields.One2many('maintenance.request', 'category_id', copy=False)
maintenance_count = fields.Integer(string="Maintenance", compute='_compute_maintenance_count')
maintenance_count = fields.Integer(string="Maintenance Count", compute='_compute_maintenance_count')
alias_id = fields.Many2one(
'mail.alias', 'Alias', ondelete='restrict', required=True,
help="Email alias for this equipment category. New emails will automatically "
@@ -137,7 +137,7 @@ class MaintenanceEquipment(models.Model):
color = fields.Integer('Color Index')
scrap_date = fields.Date('Scrap Date')
maintenance_ids = fields.One2many('maintenance.request', 'equipment_id')
maintenance_count = fields.Integer(compute='_compute_maintenance_count', string="Maintenance", store=True)
maintenance_count = fields.Integer(compute='_compute_maintenance_count', string="Maintenance Count", store=True)
maintenance_open_count = fields.Integer(compute='_compute_maintenance_count', string="Current Maintenance", store=True)
period = fields.Integer('Days between each preventive maintenance')
next_action_date = fields.Date(compute='_compute_next_maintenance', string='Date of the next preventive maintenance', store=True)
@@ -275,7 +275,7 @@ class MaintenanceRequest(models.Model):
description = fields.Text('Description')
request_date = fields.Date('Request Date', track_visibility='onchange', default=fields.Date.context_today,
help="Date requested for the maintenance to happen")
owner_user_id = fields.Many2one('res.users', string='Created by', default=lambda s: s.env.uid)
owner_user_id = fields.Many2one('res.users', string='Created by User', default=lambda s: s.env.uid)
category_id = fields.Many2one('maintenance.equipment.category', related='equipment_id.category_id', string='Category', store=True, readonly=True)
equipment_id = fields.Many2one('maintenance.equipment', string='Equipment', index=True)
technician_user_id = fields.Many2one('res.users', string='Owner', track_visibility='onchange', oldname='user_id')
@@ -10,7 +10,7 @@ class MailComposeMessage(models.TransientModel):
mass_mailing_campaign_id = fields.Many2one('mail.mass_mailing.campaign', string='Mass Mailing Campaign')
mass_mailing_id = fields.Many2one('mail.mass_mailing', string='Mass Mailing', ondelete='cascade')
mass_mailing_name = fields.Char(string='Mass Mailing')
mass_mailing_name = fields.Char(string='Mass Mailing Name')
mailing_list_ids = fields.Many2many('mail.mass_mailing.list', string='Mailing List')
@api.multi
+2 -2
View File
@@ -36,14 +36,14 @@ class MrpWorkcenter(models.Model):
workorder_count = fields.Integer('# Work Orders', compute='_compute_workorder_count')
workorder_ready_count = fields.Integer('# Read Work Orders', compute='_compute_workorder_count')
workorder_progress_count = fields.Integer('Total Running Orders', compute='_compute_workorder_count')
workorder_pending_count = fields.Integer('Total Running Orders', compute='_compute_workorder_count')
workorder_pending_count = fields.Integer('Total Pending Orders', compute='_compute_workorder_count')
workorder_late_count = fields.Integer('Total Late Orders', compute='_compute_workorder_count')
time_ids = fields.One2many('mrp.workcenter.productivity', 'workcenter_id', 'Time Logs')
working_state = fields.Selection([
('normal', 'Normal'),
('blocked', 'Blocked'),
('done', 'In Progress')], 'Status', compute="_compute_working_state", store=True)
('done', 'In Progress')], 'Workcenter Status', compute="_compute_working_state", store=True)
blocked_time = fields.Float(
'Blocked Time', compute='_compute_blocked_time',
help='Blocked hour(s) over the last month', digits=(16, 2))
-1
View File
@@ -113,7 +113,6 @@ class MrpWorkorder(models.Model):
final_lot_id = fields.Many2one(
'stock.production.lot', 'Lot/Serial Number', domain="[('product_id', '=', product_id)]",
states={'done': [('readonly', True)], 'cancel': [('readonly', True)]})
tracking = fields.Selection(related='production_id.product_id.tracking')
time_ids = fields.One2many(
'mrp.workcenter.productivity', 'workorder_id')
is_user_working = fields.Boolean(
+1 -1
View File
@@ -16,7 +16,7 @@ class ResConfigSettings(models.TransientModel):
module_mrp_workorder = fields.Boolean("Work Orders")
module_mrp_repair = fields.Boolean("Repair")
module_quality_control = fields.Boolean("Quality")
group_mrp_routings = fields.Boolean("Work Orders",
group_mrp_routings = fields.Boolean("MRP Work Orders",
implied_group='mrp.group_mrp_routings')
@api.model
@@ -17,7 +17,7 @@
<field name="module_mrp_workorder" invisible="1"/>
</div>
<div class="o_setting_right_pane">
<label for="group_mrp_routings"/>
<label for="group_mrp_routings" string="Work Orders"/>
<div class="text-muted">
Process operations at specific work centers based on the routing
</div>
+1 -1
View File
@@ -864,7 +864,7 @@ class PosOrderLine(models.Model):
order_id = fields.Many2one('pos.order', string='Order Ref', ondelete='cascade')
create_date = fields.Datetime(string='Creation Date', readonly=True)
tax_ids = fields.Many2many('account.tax', string='Taxes', readonly=True)
tax_ids_after_fiscal_position = fields.Many2many('account.tax', compute='_get_tax_ids_after_fiscal_position', string='Taxes')
tax_ids_after_fiscal_position = fields.Many2many('account.tax', compute='_get_tax_ids_after_fiscal_position', string='Taxes to Apply')
pack_lot_ids = fields.One2many('pos.pack.operation.lot', 'pos_order_line_id', string='Lot/serial Number')
@api.model
@@ -26,7 +26,7 @@ class PosOrderReport(models.Model):
average_price = fields.Float(string='Average Price', readonly=True, group_operator="avg")
location_id = fields.Many2one('stock.location', string='Location', readonly=True)
company_id = fields.Many2one('res.company', string='Company', readonly=True)
nbr_lines = fields.Integer(string='# of Lines', readonly=True, oldname='nbr')
nbr_lines = fields.Integer(string='Sale Line Count', readonly=True, oldname='nbr')
product_qty = fields.Integer(string='Product Quantity', readonly=True)
journal_id = fields.Many2one('account.journal', string='Journal')
delay_validation = fields.Integer(string='Delay Validation')
@@ -37,7 +37,7 @@
<field name="qty"/>
<field name="price_unit" widget="monetary"/>
<field name="discount" widget="monetary"/>
<field name="tax_ids_after_fiscal_position" widget="many2many_tags"/>
<field name="tax_ids_after_fiscal_position" widget="many2many_tags" string="Taxes"/>
<field name="tax_ids" widget="many2many_tags" invisible="1"/>
<field name="price_subtotal" widget="monetary"/>
<field name="price_subtotal_incl" widget="monetary"/>
@@ -50,7 +50,7 @@
<field name="price_unit" widget="monetary"/>
<field name="price_subtotal" invisible="1" widget="monetary"/>
<field name="price_subtotal_incl" invisible="1" widget="monetary"/>
<field name="tax_ids_after_fiscal_position" widget="many2many_tags"/>
<field name="tax_ids_after_fiscal_position" widget="many2many_tags" string="Taxes"/>
<field name="tax_ids" widget="many2many_tags" invisible="1"/>
<field name="notice"/>
</group>
+1 -1
View File
@@ -28,7 +28,7 @@ class AccountBankStatementLine(models.Model):
_inherit = "account.bank.statement.line"
mercury_card_number = fields.Char(string='Card Number', help='The last 4 numbers of the card used to pay')
mercury_prefixed_card_number = fields.Char(string='Card Number', compute='_compute_prefixed_card_number', help='The card number used for the payment.')
mercury_prefixed_card_number = fields.Char(string='Card Number Prefix', compute='_compute_prefixed_card_number', help='The card number used for the payment.')
mercury_card_brand = fields.Char(string='Card Brand', help='The brand of the payment card (e.g. Visa, AMEX, ...)')
mercury_card_owner_name = fields.Char(string='Card Owner Name', help='The name of the card owner')
mercury_ref_no = fields.Char(string='Mercury reference number', help='Payment reference number from Mercury Pay')
@@ -97,7 +97,7 @@
<field name="inherit_id" ref="point_of_sale.view_pos_pos_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='amount']" position="before">
<field name="mercury_prefixed_card_number"/>
<field name="mercury_prefixed_card_number" string="Card Number"/>
<field name="mercury_card_brand"/>
<field name="mercury_card_owner_name"/>
</xpath>
+1 -1
View File
@@ -13,7 +13,7 @@ class PosConfig(models.Model):
floor_ids = fields.One2many('restaurant.floor', 'pos_config_id', string='Restaurant Floors', help='The restaurant floors served by this point of sale.')
printer_ids = fields.Many2many('restaurant.printer', 'pos_config_printer_rel', 'config_id', 'printer_id', string='Order Printers')
is_table_management = fields.Boolean('Table Management')
is_order_printer = fields.Boolean('Order Printers')
is_order_printer = fields.Boolean('Order Printer')
module_pos_restaurant = fields.Boolean(default=True)
@api.onchange('iface_tipproduct')
+1 -1
View File
@@ -18,7 +18,7 @@ class CrmTeam(models.Model):
('month', 'Month'),
('user', 'Salesperson'),
('pos', 'Point of Sale'),
], string='Group by', default='day', help="How this channel's dashboard graph will group the results.")
], string='POS Grouping', default='day', help="How this channel's dashboard graph will group the results.")
@api.onchange('dashboard_graph_group_pos')
def _onchange_dashboard_graph_group_pos(self):
+1 -1
View File
@@ -12,7 +12,7 @@
<attribute name="attrs">{'invisible': ['|', ('dashboard_graph_model', '=', 'crm.opportunity.report'), ('team_type', '=', 'pos')]}</attribute>
</xpath>
<xpath expr="//field[@name='dashboard_graph_group']" position="after">
<field name="dashboard_graph_group_pos" attrs="{'invisible': [('team_type', '!=', 'pos')]}"/>
<field name="dashboard_graph_group_pos" string="Group by" attrs="{'invisible': [('team_type', '!=', 'pos')]}"/>
</xpath>
</field>
</record>
@@ -8,7 +8,7 @@
<field name="sequence" widget="handle"/>
<field name="default_code"/>
<field name="name"/>
<field name="list_price"/>
<field name="list_price" string="Sales Price"/>
<field name="standard_price"/>
<field name="categ_id"/>
<field name="type"/>
+1 -1
View File
@@ -47,7 +47,7 @@
<field name="categ_id" string="Product Category"/>
</group>
<group name="group_standard_price">
<field name="list_price" widget='monetary' options="{'currency_field': 'currency_id'}"/>
<field name="list_price" string="Sales Price" widget='monetary' options="{'currency_field': 'currency_id'}"/>
<field name="company_id" groups="base.group_multi_company"
options="{'no_create': True}"/>
<field name="uom_id" groups="product.group_uom" options="{'no_create': True}"/>
@@ -17,9 +17,9 @@ class ProductProduct(models.Model):
('open_paid', 'Open and Paid'),
('draft_open_paid', 'Draft, Open and Paid')
], string='Invoice State', readonly=True)
sale_avg_price = fields.Float(compute='_compute_product_margin_fields_values', string='Avg. Unit Price',
sale_avg_price = fields.Float(compute='_compute_product_margin_fields_values', string='Avg. Sale Unit Price',
help="Avg. Price in Customer Invoices.")
purchase_avg_price = fields.Float(compute='_compute_product_margin_fields_values', string='Avg. Unit Price',
purchase_avg_price = fields.Float(compute='_compute_product_margin_fields_values', string='Avg. Purchase Unit Price',
help="Avg. Price in Vendor Bills ")
sale_num_invoiced = fields.Float(compute='_compute_product_margin_fields_values', string='# Invoiced in Sale',
help="Sum of Quantity in Customer Invoices")
@@ -31,7 +31,7 @@
<field name="invoice_state" />
<separator string="Sales" colspan="4"/>
<field name="sale_avg_price"/>
<field name="sale_avg_price" string="Avg. Unit Price"/>
<field name="list_price" string="Catalog Price" readonly="1"/>
<field name="sale_num_invoiced" />
<field name="sales_gap" />
@@ -39,7 +39,7 @@
<field name="sale_expected" />
<separator string="Purchases" colspan="4"/>
<field name="purchase_avg_price"/>
<field name="purchase_avg_price" string="Avg. Unit Price"/>
<field name="standard_price" string="Standard Price" readonly="1"/>
<field name="purchase_num_invoiced" />
<field name="purchase_gap" />
+3 -3
View File
@@ -197,8 +197,8 @@ class Project(models.Model):
default=lambda self: self.env.user.company_id.resource_calendar_id.id,
help="Timetable working hours to adjust the gantt diagram report")
type_ids = fields.Many2many('project.task.type', 'project_task_type_rel', 'project_id', 'type_id', string='Tasks Stages')
task_count = fields.Integer(compute='_compute_task_count', string="Tasks")
task_needaction_count = fields.Integer(compute='_compute_task_needaction_count', string="Tasks")
task_count = fields.Integer(compute='_compute_task_count', string="Task Count")
task_needaction_count = fields.Integer(compute='_compute_task_needaction_count', string="Task Activitie Count")
task_ids = fields.One2many('project.task', 'project_id', string='Tasks',
domain=['|', ('stage_id.fold', '=', False), ('stage_id', '=', False)])
color = fields.Integer(string='Color Index')
@@ -482,7 +482,7 @@ class Task(models.Model):
('done', 'Green'),
('blocked', 'Red')], string='Kanban State',
copy=False, default='normal', required=True)
kanban_state_label = fields.Char(compute='_compute_kanban_state_label', string='Kanban State', track_visibility='onchange')
kanban_state_label = fields.Char(compute='_compute_kanban_state_label', string='Kanban State Label', track_visibility='onchange')
create_date = fields.Datetime(index=True)
write_date = fields.Datetime(index=True) #not displayed in the view but it might be useful with base_automation module (and it needs to be defined first for that)
date_start = fields.Datetime(string='Starting Date',
+2 -2
View File
@@ -130,7 +130,7 @@ class PurchaseOrder(models.Model):
order_line = fields.One2many('purchase.order.line', 'order_id', string='Order Lines', states={'cancel': [('readonly', True)], 'done': [('readonly', True)]}, copy=True)
notes = fields.Text('Terms and Conditions')
invoice_count = fields.Integer(compute="_compute_invoice", string='# of Bills', copy=False, default=0, store=True)
invoice_count = fields.Integer(compute="_compute_invoice", string='Bill Count', copy=False, default=0, store=True)
invoice_ids = fields.Many2many('account.invoice', compute="_compute_invoice", string='Bills', copy=False, store=True)
invoice_status = fields.Selection([
('no', 'Nothing to Bill'),
@@ -138,7 +138,7 @@ class PurchaseOrder(models.Model):
('invoiced', 'No Bill to Receive'),
], string='Billing Status', compute='_get_invoiced', store=True, readonly=True, copy=False, default='no')
picking_count = fields.Integer(compute='_compute_picking', string='Receptions', default=0, store=True)
picking_count = fields.Integer(compute='_compute_picking', string='Picking count', default=0, store=True)
picking_ids = fields.Many2many('stock.picking', compute='_compute_picking', string='Receptions', copy=False, store=True)
# There is no inverse function on purpose since the date may be different on each line
@@ -12,7 +12,7 @@ class ResConfigSettings(models.TransientModel):
po_order_approval = fields.Boolean("Order Approval", default=lambda self: self.env.user.company_id.po_double_validation == 'two_step')
po_double_validation = fields.Selection(related='company_id.po_double_validation', string="Levels of Approvals *")
po_double_validation_amount = fields.Monetary(related='company_id.po_double_validation_amount', string="Minimum Amount", currency_field='company_currency_id')
company_currency_id = fields.Many2one('res.currency', related='company_id.currency_id', readonly=True,
company_currency_id = fields.Many2one('res.currency', related='company_id.currency_id', string="Company Currency", readonly=True,
help='Utility field to express amount currency')
default_purchase_method = fields.Selection([
('purchase', 'Ordered quantities'),
@@ -21,7 +21,7 @@ class ResConfigSettings(models.TransientModel):
help="This default value is applied to any new product created. "
"This can be changed in the product detail form.", default="receive")
module_purchase_requisition = fields.Boolean("Purchase Agreements")
group_warning_purchase = fields.Boolean("Warnings", implied_group='purchase.group_warning_purchase')
group_warning_purchase = fields.Boolean("Purchase Warnings", implied_group='purchase.group_warning_purchase')
module_stock_dropshipping = fields.Boolean("Dropshipping")
group_manage_vendor_price = fields.Boolean("Vendor Pricelists",
implied_group="purchase.group_manage_vendor_price")
+1 -1
View File
@@ -24,7 +24,7 @@ class res_partner(models.Model):
property_purchase_currency_id = fields.Many2one(
'res.currency', string="Supplier Currency", company_dependent=True,
help="This currency will be used, instead of the default one, for purchases from the current partner")
purchase_order_count = fields.Integer(compute='_purchase_invoice_count', string='# of Purchase Order')
purchase_order_count = fields.Integer(compute='_purchase_invoice_count', string='Purchase Order Count')
supplier_invoice_count = fields.Integer(compute='_purchase_invoice_count', string='# Vendor Bills')
purchase_warn = fields.Selection(WARNING_MESSAGE, 'Purchase Order', help=WARNING_HELP, required=True, default="no-message")
purchase_warn_msg = fields.Text('Message for Purchase Order')
@@ -62,7 +62,7 @@
<field name="group_warning_purchase"/>
</div>
<div class="o_setting_right_pane">
<label for="group_warning_purchase"/>
<label for="group_warning_purchase" string="Warnings"/>
<div class="text-muted">
Get warnings in orders for products or vendors
</div>
+1 -1
View File
@@ -42,7 +42,7 @@ class Rating(models.Model):
parent_res_id = fields.Integer('Parent Document', index=True)
rated_partner_id = fields.Many2one('res.partner', string="Rated person", help="Owner of the rated resource")
partner_id = fields.Many2one('res.partner', string='Customer', help="Author of the rating")
rating = fields.Float(string="Rating", group_operator="avg", default=0, help="Rating value: 0=Unhappy, 10=Happy")
rating = fields.Float(string="Rating Number", group_operator="avg", default=0, help="Rating value: 0=Unhappy, 10=Happy")
rating_image = fields.Binary('Image', compute='_compute_rating_image')
rating_text = fields.Selection([
('satisfied', 'Satisfied'),
+4 -4
View File
@@ -16,19 +16,19 @@ class ResConfigSettings(models.TransientModel):
group_discount_per_so_line = fields.Boolean("Discounts", implied_group='sale.group_discount_per_so_line')
module_sale_margin = fields.Boolean("Margins")
group_sale_layout = fields.Boolean("Sections on Sales Orders", implied_group='sale.group_sale_layout')
group_warning_sale = fields.Boolean("Warnings", implied_group='sale.group_warning_sale')
group_warning_sale = fields.Boolean("Sale Order Warnings", implied_group='sale.group_warning_sale')
portal_confirmation = fields.Boolean('Online Signature & Payment')
portal_confirmation_options = fields.Selection([
('sign', 'Signature'),
('pay', 'Payment')], string="Online Signature & Payment options")
module_sale_payment = fields.Boolean("Online Signature & Payment", help='Technical field implied by user choice of online_confirmation')
module_sale_payment = fields.Boolean("Sale Payment", help='Technical field implied by user choice of online_confirmation')
module_website_quote = fields.Boolean("Quotations Templates")
group_sale_delivery_address = fields.Boolean("Customer Addresses", implied_group='sale.group_delivery_invoice_address')
multi_sales_price = fields.Boolean("Multiple Sales Prices per Product")
multi_sales_price_method = fields.Selection([
('percentage', 'Multiple prices per product (e.g. customer segments, currencies)'),
('formula', 'Prices computed from formulas (discounts, margins, roundings)')
], default='percentage', string="Pricelists")
], default='percentage', string="Pricelists Method")
sale_pricelist_setting = fields.Selection([
('fixed', 'A single sales price per product'),
('percentage', 'Multiple prices per product (e.g. customer segments, currencies)'),
@@ -60,7 +60,7 @@ class ResConfigSettings(models.TransientModel):
domain="[('type', '=', 'service')]",
oldname='deposit_product_id_setting',
help='Default product used for payment advances')
auto_done_setting = fields.Boolean("Lock Confirmed Orders")
auto_done_setting = fields.Boolean("Lock Confirmed Sales")
module_website_sale_digital = fields.Boolean("Sell digital products - provide downloadable content on your customer portal")
auth_signup_uninvited = fields.Selection([
+2 -2
View File
@@ -8,9 +8,9 @@ from odoo.addons.base.models.res_partner import WARNING_MESSAGE, WARNING_HELP
class ResPartner(models.Model):
_inherit = 'res.partner'
sale_order_count = fields.Integer(compute='_compute_sale_order_count', string='# of Sales Order')
sale_order_count = fields.Integer(compute='_compute_sale_order_count', string='Sale Order Count')
sale_order_ids = fields.One2many('sale.order', 'partner_id', 'Sales Order')
sale_warn = fields.Selection(WARNING_MESSAGE, 'Sales Order', default='no-message', help=WARNING_HELP)
sale_warn = fields.Selection(WARNING_MESSAGE, 'Sales Warnings', default='no-message', help=WARNING_HELP)
sale_warn_msg = fields.Text('Message for Sales Order')
def _compute_sale_order_count(self):
+3 -3
View File
@@ -142,7 +142,7 @@ class SaleOrder(models.Model):
order_line = fields.One2many('sale.order.line', 'order_id', string='Order Lines', states={'cancel': [('readonly', True)], 'done': [('readonly', True)]}, copy=True, auto_join=True)
invoice_count = fields.Integer(string='# of Invoices', compute='_get_invoiced', readonly=True)
invoice_count = fields.Integer(string='Invoice Count', compute='_get_invoiced', readonly=True)
invoice_ids = fields.Many2many("account.invoice", string='Invoices', compute="_get_invoiced", readonly=True, copy=False)
invoice_status = fields.Selection([
('upselling', 'Upselling Opportunity'),
@@ -843,7 +843,7 @@ class SaleOrderLine(models.Model):
price_unit = fields.Float('Unit Price', required=True, digits=dp.get_precision('Product Price'), default=0.0)
price_subtotal = fields.Monetary(compute='_compute_amount', string='Subtotal', readonly=True, store=True)
price_tax = fields.Float(compute='_compute_amount', string='Taxes', readonly=True, store=True)
price_tax = fields.Float(compute='_compute_amount', string='Total Tax', readonly=True, store=True)
price_total = fields.Monetary(compute='_compute_amount', string='Total', readonly=True, store=True)
price_reduce = fields.Float(compute='_get_price_reduce', string='Price Reduce', digits=dp.get_precision('Product Price'), readonly=True, store=True)
@@ -855,7 +855,7 @@ class SaleOrderLine(models.Model):
product_id = fields.Many2one('product.product', string='Product', domain=[('sale_ok', '=', True)], change_default=True, ondelete='restrict', required=True)
product_updatable = fields.Boolean(compute='_compute_product_updatable', string='Can Edit Product', readonly=True, default=True)
product_uom_qty = fields.Float(string='Quantity', digits=dp.get_precision('Product Unit of Measure'), required=True, default=1.0)
product_uom_qty = fields.Float(string='Ordered Quantity', digits=dp.get_precision('Product Unit of Measure'), required=True, default=1.0)
product_uom = fields.Many2one('product.uom', string='Unit of Measure', required=True)
# Non-stored related field to allow portal user to see the image of the product he has ordered
product_image = fields.Binary('Product Image', related="product_id.image", store=False)
@@ -219,7 +219,7 @@
<field name="group_warning_sale"/>
</div>
<div class="o_setting_right_pane">
<label for="group_warning_sale"/>
<label for="group_warning_sale" string="Sale Warnings"/>
<div class="text-muted">
Get warnings in orders for products or customers
</div>
@@ -48,7 +48,7 @@ class SaleAdvancePaymentInv(models.TransientModel):
], string='What do you want to invoice?', default=_get_advance_payment_method, required=True)
product_id = fields.Many2one('product.product', string='Down Payment Product', domain=[('type', '=', 'service')],
default=_default_product_id)
count = fields.Integer(default=_count, string='# of Orders')
count = fields.Integer(default=_count, string='Order Count')
amount = fields.Float('Down Payment Amount', digits=dp.get_precision('Account'), help="The amount to be invoiced in advance, taxes excluded.")
deposit_account_id = fields.Many2one("account.account", string="Income Account", domain=[('deprecated', '=', False)],
help="Account used for deposits", default=_default_deposit_account_id)
@@ -19,7 +19,7 @@ class ResConfigSettings(models.TransientModel):
default_picking_policy = fields.Selection([
('direct', 'Ship products as soon as available, with back orders'),
('one', 'Ship all products at once')
], "Shipping Management", default='direct', default_model="sale.order", required=True)
], "Picking Policy", default='direct', default_model="sale.order", required=True)
@api.onchange('use_security_lead')
def _onchange_use_security_lead(self):
+1 -1
View File
@@ -8,7 +8,7 @@ class ResUsers(models.Model):
_inherit = 'res.users'
sale_team_id = fields.Many2one(
'crm.team', 'Sales Channel',
'crm.team', 'Sales Team',
help='Sales Channel the user is member of. Used to compute the members of a sales channel through the inverse one2many')
@api.model
+2 -2
View File
@@ -23,8 +23,8 @@ class ResConfigSettings(models.TransientModel):
group_stock_adv_location = fields.Boolean("Multi-Step Routes",
implied_group='stock.group_adv_location',
help="Add and customize route operations to process product moves in your warehouse(s): e.g. unload > quality control > stock for incoming products, pick > pack > ship for outgoing products. \n You can also set putaway strategies on warehouse locations in order to send incoming products into specific child locations straight away (e.g. specific bins, racks).")
group_warning_stock = fields.Boolean("Warnings", implied_group='stock.group_warning_stock')
propagation_minimum_delta = fields.Integer(related='company_id.propagation_minimum_delta', string="No Rescheduling Propagation")
group_warning_stock = fields.Boolean("Warnings for Stock", implied_group='stock.group_warning_stock')
propagation_minimum_delta = fields.Integer(related='company_id.propagation_minimum_delta', string="Minimum Delta for Propagation")
use_propagation_minimum_delta = fields.Boolean(
string="No Rescheduling Propagation",
oldname='default_new_propagation_minimum_delta',
+1 -1
View File
@@ -336,7 +336,7 @@ class InventoryLine(models.Model):
'Theoretical Quantity', compute='_compute_theoretical_qty',
digits=dp.get_precision('Product Unit of Measure'), readonly=True, store=True)
inventory_location_id = fields.Many2one(
'stock.location', 'Location', related='inventory_id.location_id', related_sudo=False)
'stock.location', 'Inventory Location', related='inventory_id.location_id', related_sudo=False)
@api.one
@api.depends('location_id', 'product_id', 'package_id', 'product_uom_id', 'company_id', 'prod_lot_id', 'partner_id')
@@ -52,7 +52,7 @@
<field name="group_warning_stock"/>
</div>
<div class="o_setting_right_pane">
<label for="group_warning_stock"/>
<label for="group_warning_stock" string="Warnings"/>
<div class="text-muted">
Get informative or blocking warnings on partners
</div>
+1 -1
View File
@@ -9,4 +9,4 @@ class Attachment(models.Model):
_inherit = "ir.attachment"
# related for backward compatibility with saas-6
website_url = fields.Char(string="Attachment URL", related='local_url', deprecated=True)
website_url = fields.Char(string="Website URL", related='local_url', deprecated=True)
+1 -1
View File
@@ -148,7 +148,7 @@ class BlogPost(models.Model):
post_date = fields.Datetime('Publishing date', compute='_compute_post_date', inverse='_set_post_date', store=True,
help="The blog post will be visible for your visitors as of this date on the website if it is set as published.")
create_uid = fields.Many2one('res.users', 'Created by', index=True, readonly=True)
write_date = fields.Datetime('Last Modified on', index=True, readonly=True)
write_date = fields.Datetime('Last Updated on', index=True, readonly=True)
write_uid = fields.Many2one('res.users', 'Last Contributor', index=True, readonly=True)
author_avatar = fields.Binary(related='author_id.image_small', string="Avatar")
visits = fields.Integer('No of Views')
+2 -2
View File
@@ -30,10 +30,10 @@ class Event(models.Model):
_inherit = "event.event"
track_ids = fields.One2many('event.track', 'event_id', 'Tracks')
track_count = fields.Integer('Tracks', compute='_compute_track_count')
track_count = fields.Integer('Track Count', compute='_compute_track_count')
sponsor_ids = fields.One2many('event.sponsor', 'event_id', 'Sponsors')
sponsor_count = fields.Integer('Sponsors', compute='_compute_sponsor_count')
sponsor_count = fields.Integer('Sponsor Count', compute='_compute_sponsor_count')
website_track = fields.Boolean('Tracks on Website')
website_track_proposal = fields.Boolean('Proposals on Website')
@@ -28,13 +28,13 @@
type="action"
class="oe_stat_button"
icon="fa-inbox">
<field name="track_count" widget="statinfo"/>
<field name="track_count" string="Tracks" widget="statinfo"/>
</button>
<button name="%(action_event_sponsor_from_event)d"
type="action"
class="oe_stat_button"
icon="fa-users">
<field name="sponsor_count" widget="statinfo"/>
<field name="sponsor_count" string="Sponsors" widget="statinfo"/>
</button>
</button>
<label for="website_menu" position="after">
@@ -22,7 +22,7 @@ class ResConfigSettings(models.TransientModel):
salesperson_id = fields.Many2one('res.users', related='website_id.salesperson_id', string='Salesperson')
salesteam_id = fields.Many2one('crm.team', related='website_id.salesteam_id', string='Sales Channel', domain=[('team_type', '!=', 'pos')])
module_website_sale_delivery = fields.Boolean("Shipping Costs")
module_website_sale_delivery = fields.Boolean("eCommerce Shipping Costs")
# field used to have a nice radio in form view, resuming the 2 fields above
sale_delivery_settings = fields.Selection([
('none', 'No shipping management on website'),
@@ -12,7 +12,7 @@ class ResConfigSettings(models.TransientModel):
('always', 'Show inventory on website and prevent sales if not enough stock'),
('threshold', 'Show inventory below a threshold and prevent sales if not enough stock'),
('custom', 'Show product-specific notifications'),
], string='Inventory', default='never')
], string='Inventory Availability', default='never')
available_threshold = fields.Float(string='Availability Threshold')
@api.multi
@@ -6,7 +6,7 @@
<field name="inherit_id" ref="website_sale.product_template_form_view" />
<field name="arch" type="xml">
<field name="website_style_ids" position="before">
<field name="inventory_availability" widget="selection" attrs="{'invisible':[('type', 'in', ['service', 'consu'])]}"/>
<field name="inventory_availability" string="Inventory" widget="selection" attrs="{'invisible':[('type', 'in', ['service', 'consu'])]}"/>
<field name="available_threshold" attrs="{'invisible': ['|', ('type', 'in', ['service', 'consu']), ('inventory_availability', '!=', 'threshold')], 'required': [('inventory_availability', '=', 'threshold'), ('type', '=', 'product')]}"/>
<field name="custom_message" attrs="{'invisible': ['|', ('type', 'in', ['service', 'consu']), ('inventory_availability', '!=', 'custom')]}"/>
</field>
@@ -14,7 +14,7 @@
<div class="content-group">
<div class="row mt16" title="Default availability mode set on newly created stockable products. This can be changed at the product level.">
<label for="inventory_availability" string="Default Availability Mode" class="col-md-3 o_light_label" />
<field name="inventory_availability" />
<field name="inventory_availability" string="Inventory"/>
</div><br/>
<div class="row" attrs="{'invisible': [('inventory_availability', '!=', 'threshold')]}">
<label for="available_threshold" string="Default threshold" class="col-md-3 o_light_label" />
+2 -2
View File
@@ -173,7 +173,7 @@ class IrActionsActWindow(models.Model):
help="View type: Tree type to use for the tree view, set to 'tree' for a hierarchical tree view, or 'form' for a regular list view")
usage = fields.Char(string='Action Usage',
help="Used to filter menu and home actions from the user form.")
view_ids = fields.One2many('ir.actions.act_window.view', 'act_window_id', string='Views')
view_ids = fields.One2many('ir.actions.act_window.view', 'act_window_id', string='No of Views')
views = fields.Binary(compute='_compute_views',
help="This function field computes the ordered list of views that should be enabled " \
"when displaying the result of an action, federating view mode, views and " \
@@ -358,7 +358,7 @@ class IrActionsServer(models.Model):
"based on the sequence. Low number means high priority.")
model_id = fields.Many2one('ir.model', string='Model', required=True, ondelete='cascade',
help="Model on which the server action runs.")
model_name = fields.Char(related='model_id.model', readonly=True, store=True)
model_name = fields.Char(related='model_id.model', string='Model Name', readonly=True, store=True)
# Python code
code = fields.Text(string='Python Code', groups='base.group_system',
default=DEFAULT_PYTHON_CODE,
+2 -2
View File
@@ -126,7 +126,7 @@ class IrSequence(models.Model):
suffix = fields.Char(help="Suffix value of the record for the sequence", trim=False)
number_next = fields.Integer(string='Next Number', required=True, default=1, help="Next number of this sequence")
number_next_actual = fields.Integer(compute='_get_number_next_actual', inverse='_set_number_next_actual',
string='Next Number',
string='Actual Next Number',
help="Next number that will be used. This number can be incremented "
"frequently so the displayed value might already be obsolete")
number_increment = fields.Integer(string='Step', required=True, default=1,
@@ -340,7 +340,7 @@ class IrSequenceDateRange(models.Model):
sequence_id = fields.Many2one("ir.sequence", string='Main Sequence', required=True, ondelete='cascade')
number_next = fields.Integer(string='Next Number', required=True, default=1, help="Next number of this sequence")
number_next_actual = fields.Integer(compute='_get_number_next_actual', inverse='_set_number_next_actual',
string='Next Number',
string='Actual Next Number',
help="Next number that will be used. This number can be incremented "
"frequently so the displayed value might already be obsolete")
+2 -2
View File
@@ -195,7 +195,7 @@ class View(models.Model):
('search', 'Search'),
('qweb', 'QWeb')], string='View Type')
arch = fields.Text(compute='_compute_arch', inverse='_inverse_arch', string='View Architecture', nodrop=True)
arch_base = fields.Text(compute='_compute_arch_base', inverse='_inverse_arch_base', string='View Architecture')
arch_base = fields.Text(compute='_compute_arch_base', inverse='_inverse_arch_base', string='Base View Architecture')
arch_db = fields.Text(string='Arch Blob', translate=xml_translate, oldname='arch')
arch_fs = fields.Char(string='Arch Filename')
inherit_id = fields.Many2one('ir.ui.view', string='Inherited View', ondelete='restrict', index=True)
@@ -207,7 +207,7 @@ class View(models.Model):
help="ID of the view defined in xml file")
groups_id = fields.Many2many('res.groups', 'ir_ui_view_group_rel', 'view_id', 'group_id',
string='Groups', help="If this field is empty, the view applies to all users. Otherwise, the view applies to the users of those groups only.")
model_ids = fields.One2many('ir.model.data', 'res_id', domain=[('model', '=', 'ir.ui.view')], auto_join=True)
model_ids = fields.One2many('ir.model.data', 'res_id', string="Models", domain=[('model', '=', 'ir.ui.view')], auto_join=True)
create_date = fields.Datetime(readonly=True)
write_date = fields.Datetime(string='Last Modification Date', readonly=True)
-1
View File
@@ -213,7 +213,6 @@ class Partner(models.Model):
# technical field used for managing commercial fields
commercial_partner_id = fields.Many2one('res.partner', compute='_compute_commercial_partner',
string='Commercial Entity', store=True, index=True)
commercial_partner_country_id = fields.Many2one('res.country', related='commercial_partner_id.country_id', store=True)
commercial_company_name = fields.Char('Company Name Entity', compute='_compute_commercial_company_name',
store=True)
company_name = fields.Char('Company Name')
+3 -3
View File
@@ -28,14 +28,14 @@
<group>
<field name="padding"/>
<field name="number_increment"/>
<field name="number_next_actual" attrs="{'invisible': [('use_date_range', '=', True)]}"/>
<field name="number_next_actual" string="Next Number" attrs="{'invisible': [('use_date_range', '=', True)]}"/>
</group>
</group>
<field name="date_range_ids" attrs="{'invisible': [('use_date_range', '=', False)]}">
<tree string="Sequences" editable="top">
<field name="date_from"/>
<field name="date_to"/>
<field name="number_next_actual"/>
<field name="number_next_actual" string="Next Number"/>
</tree>
</field>
<group col="3" string="Legend (for prefix, suffix)">
@@ -78,7 +78,7 @@
<field name="prefix"/>
<field name="padding"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="number_next_actual"/>
<field name="number_next_actual" string="Next Number"/>
<field name="number_increment"/>
<field name="implementation"/>
</tree>
+1 -1
View File
@@ -26,7 +26,7 @@
<page string="Architecture">
<button type="object" name="open_translations"
string="Edit Translations" class="oe_link oe_right"/>
<field name="arch_base" widget="ace" options="{'mode': 'xml'}"/>
<field name="arch_base" string="View Architecture" widget="ace" options="{'mode': 'xml'}"/>
</page>
<page string="Access Rights">
<field name="groups_id"/>
@@ -34,7 +34,7 @@
</kanban>
</field>
<h3>The following documents will be permanently lost</h3>
<field name="model_ids">
<field name="model_ids" string="Models">
<tree string="Models">
<field name="name" string="Document"/>
<field name="count"/>
+2 -2
View File
@@ -317,8 +317,8 @@ class Related(models.Model):
name = fields.Char()
# related fields with a single field
related_name = fields.Char(related='name')
related_related_name = fields.Char(related='related_name')
related_name = fields.Char(related='name', string='A related on Name')
related_related_name = fields.Char(related='related_name', string='A related on a related on Name')
class ComputeInverse(models.Model):