summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2018-06-06 15:46:36 +0200
committerChristophe Simonis <chs@odoo.com>2018-06-06 15:46:36 +0200
commit969eb3fa2f9fe78e3f01a6d4caca1aeae753c58c (patch)
tree25e7833ea517141e4e900305288e1c242dabac46
parent976499ac782f9704bf1eb26067b5c4b3a9b22b24 (diff)
parentc834c0f5879c0e5023645b4a8a57c1b19a9eee18 (diff)
[MERGE] forward port branch saas-11.2 up to c834c0f5879
-rw-r--r--addons/account/data/mail_template_data.xml2
-rw-r--r--addons/account/models/account_invoice.py2
-rw-r--r--addons/account/models/company.py59
-rw-r--r--addons/account/tests/test_account_move_closed_period.py18
-rw-r--r--addons/account/tests/test_reconciliation.py49
-rw-r--r--addons/account/views/account_view.xml3
-rw-r--r--addons/account_lock/__init__.py3
-rw-r--r--addons/account_lock/__manifest__.py16
-rw-r--r--addons/account_lock/models/__init__.py3
-rw-r--r--addons/account_lock/models/res_company.py14
-rw-r--r--addons/analytic/models/analytic_account.py2
-rw-r--r--addons/barcodes/static/src/js/barcode_events.js23
-rw-r--r--addons/base_automation/i18n/tr.po2
-rw-r--r--addons/base_geolocalize/i18n/tr.po28
-rw-r--r--addons/base_import/i18n/zh_CN.po7
-rw-r--r--addons/calendar/i18n/calendar.pot11
-rw-r--r--addons/calendar/i18n/zh_CN.po5
-rw-r--r--addons/calendar/models/calendar.py8
-rw-r--r--addons/crm/i18n/tr.po4
-rw-r--r--addons/crm_project/i18n/tr.po2
-rw-r--r--addons/delivery/models/stock_picking.py3
-rw-r--r--addons/event/i18n/es.po162
-rw-r--r--addons/event/views/res_partner_views.xml1
-rw-r--r--addons/google_calendar/models/google_calendar.py4
-rw-r--r--addons/hr_holidays/report/hr_leave_report.py3
-rw-r--r--addons/hr_holidays/report/hr_leave_reports.xml5
-rw-r--r--addons/hr_holidays/views/hr_leave_views.xml7
-rw-r--r--addons/hr_timesheet/models/project.py2
-rw-r--r--addons/hw_escpos/escpos/escpos.py4
-rw-r--r--addons/l10n_fr_certification/models/res_company.py3
-rw-r--r--addons/l10n_generic_coa/__init__.py6
-rw-r--r--addons/l10n_generic_coa/__manifest__.py1
-rw-r--r--addons/mail/i18n/tr.po2
-rw-r--r--addons/mass_mailing/i18n/tr.po2
-rw-r--r--addons/mass_mailing/models/mail_mail.py2
-rw-r--r--addons/mrp/i18n/nl.po2
-rw-r--r--addons/point_of_sale/i18n/nl.po2
-rw-r--r--addons/point_of_sale/models/pos_config.py9
-rw-r--r--addons/purchase/data/mail_template_data.xml4
-rw-r--r--addons/purchase/models/purchase.py6
-rw-r--r--addons/purchase/tests/test_stockvaluation.py5
-rw-r--r--addons/repair/i18n/es.po17
-rw-r--r--addons/sale/data/mail_data.xml2
-rw-r--r--addons/sale/models/product_template.py2
-rw-r--r--addons/stock/i18n/nl.po7
-rw-r--r--addons/stock/models/stock_move.py6
-rw-r--r--addons/stock/report/report_stock_forecast.py4
-rw-r--r--addons/stock/tests/test_move.py26
-rw-r--r--addons/stock_account/views/stock_account_views.xml2
-rw-r--r--addons/survey/wizard/survey_email_compose_message.py2
-rw-r--r--addons/web/static/src/js/views/basic/basic_model.js7
-rw-r--r--addons/web/static/src/less/list_view.less1
-rw-r--r--addons/web/static/tests/fields/relational_fields_tests.js52
-rw-r--r--addons/web_editor/static/src/js/editor/summernote.js2
-rw-r--r--addons/website/controllers/main.py3
-rw-r--r--addons/website_crm_partner_assign/models/res_partner.py6
-rw-r--r--addons/website_event/static/src/js/website_event.js13
-rw-r--r--addons/website_sale/views/templates.xml2
-rw-r--r--doc/setup/deploy.rst10
-rw-r--r--odoo/addons/base/i18n/tr.po527
-rw-r--r--odoo/addons/base/views/res_config_settings_views.xml2
-rw-r--r--odoo/addons/base/views/res_partner_views.xml4
-rw-r--r--odoo/modules/loading.py52
-rw-r--r--odoo/modules/registry.py2
64 files changed, 929 insertions, 318 deletions
diff --git a/addons/account/data/mail_template_data.xml b/addons/account/data/mail_template_data.xml
index f461a271452..4bb340a4f5c 100644
--- a/addons/account/data/mail_template_data.xml
+++ b/addons/account/data/mail_template_data.xml
@@ -7,7 +7,7 @@
<!--Email template -->
<record id="email_template_edi_invoice" model="mail.template">
<field name="name">Invoicing: Invoice email</field>
- <field name="email_from">${(object.user_id.email and '%s &lt;%s&gt;' % (object.user_id.name, object.user_id.email) or '')|safe}</field>
+ <field name="email_from">${(object.user_id.email and '&quot;%s&quot; &lt;%s&gt;' % (object.user_id.name, object.user_id.email) or '')|safe}</field>
<field name="subject">${object.company_id.name} Invoice (Ref ${object.number or 'n/a'})</field>
<field name="partner_to">${object.partner_id.id}</field>
<field name="model_id" ref="account.model_account_invoice"/>
diff --git a/addons/account/models/account_invoice.py b/addons/account/models/account_invoice.py
index 905f10f4334..020d725e3ca 100644
--- a/addons/account/models/account_invoice.py
+++ b/addons/account/models/account_invoice.py
@@ -1374,8 +1374,6 @@ class AccountInvoice(models.Model):
else:
payment_method = self.env.ref('account.account_payment_method_manual_out')
journal_payment_methods = pay_journal.outbound_payment_method_ids
- if payment_method not in journal_payment_methods:
- raise UserError(_('No appropriate payment method enabled on journal %s') % pay_journal.name)
communication = self.type in ('in_invoice', 'in_refund') and self.reference or self.number
if self.origin:
diff --git a/addons/account/models/company.py b/addons/account/models/company.py
index 8ae4230a7b2..0209ea5c849 100644
--- a/addons/account/models/company.py
+++ b/addons/account/models/company.py
@@ -2,10 +2,12 @@
from datetime import timedelta, datetime
import calendar
+import time
+from dateutil.relativedelta import relativedelta
from odoo import fields, models, api, _
from odoo.exceptions import ValidationError, UserError
-from odoo.exceptions import UserError
+from odoo.tools.misc import DEFAULT_SERVER_DATE_FORMAT
from odoo.tools.float_utils import float_round, float_is_zero
@@ -63,6 +65,61 @@ Best Regards,'''))
account_setup_coa_done = fields.Boolean(string='Chart of Account Checked', help="Technical field holding the status of the chart of account setup step.")
account_setup_bar_closed = fields.Boolean(string='Setup Bar Closed', help="Technical field set to True when setup bar has been closed by the user.")
+ @api.multi
+ def _check_lock_dates(self, vals):
+ '''Check the lock dates for the current companies. This can't be done in a api.constrains because we need
+ to perform some comparison between new/old values. This method forces the lock dates to be irreversible.
+
+ * You cannot define stricter conditions on advisors than on users. Then, the lock date on advisor must be set
+ after the lock date for users.
+ * You cannot lock a period that is not finished yet. Then, the lock date for advisors must be set after the
+ last day of the previous month.
+ * The new lock date for advisors must be set after the previous lock date.
+
+ :param vals: The values passed to the write method.
+ '''
+ period_lock_date = vals.get('period_lock_date') and\
+ time.strptime(vals['period_lock_date'], DEFAULT_SERVER_DATE_FORMAT)
+ fiscalyear_lock_date = vals.get('fiscalyear_lock_date') and\
+ time.strptime(vals['fiscalyear_lock_date'], DEFAULT_SERVER_DATE_FORMAT)
+
+ previous_month = datetime.strptime(fields.Date.today(), DEFAULT_SERVER_DATE_FORMAT) + relativedelta(months=-1)
+ days_previous_month = calendar.monthrange(previous_month.year, previous_month.month)
+ previous_month = previous_month.replace(day=days_previous_month[1]).timetuple()
+ for company in self:
+ old_fiscalyear_lock_date = company.fiscalyear_lock_date and\
+ time.strptime(company.fiscalyear_lock_date, DEFAULT_SERVER_DATE_FORMAT)
+
+ # The user attempts to remove the lock date for advisors
+ if old_fiscalyear_lock_date and not fiscalyear_lock_date and 'fiscalyear_lock_date' in vals:
+ raise ValidationError(_('The lock date for advisors is irreversible and can\'t be removed.'))
+
+ # The user attempts to set a lock date for advisors prior to the previous one
+ if old_fiscalyear_lock_date and fiscalyear_lock_date and fiscalyear_lock_date < old_fiscalyear_lock_date:
+ raise ValidationError(_('The new lock date for advisors must be set after the previous lock date.'))
+
+ # In case of no new fiscal year in vals, fallback to the oldest
+ if not fiscalyear_lock_date:
+ if old_fiscalyear_lock_date:
+ fiscalyear_lock_date = old_fiscalyear_lock_date
+ else:
+ continue
+
+ # The user attempts to set a lock date for advisors prior to the last day of previous month
+ if fiscalyear_lock_date > previous_month:
+ raise ValidationError(_('You cannot lock a period that is not finished yet. Please make sure that the lock date for advisors is not set after the last day of the previous month.'))
+
+ # In case of no new period lock date in vals, fallback to the one defined in the company
+ if not period_lock_date:
+ if company.period_lock_date:
+ period_lock_date = time.strptime(company.period_lock_date, DEFAULT_SERVER_DATE_FORMAT)
+ else:
+ continue
+
+ # The user attempts to set a lock date for advisors prior to the lock date for users
+ if period_lock_date < fiscalyear_lock_date:
+ raise ValidationError(_('You cannot define stricter conditions on advisors than on users. Please make sure that the lock date on advisor is set before the lock date for users.'))
+
@api.model
def _verify_fiscalyear_last_day(self, company_id, last_day, last_month):
company = self.browse(company_id)
diff --git a/addons/account/tests/test_account_move_closed_period.py b/addons/account/tests/test_account_move_closed_period.py
index 298738a0d6c..5de3e97ac4f 100644
--- a/addons/account/tests/test_account_move_closed_period.py
+++ b/addons/account/tests/test_account_move_closed_period.py
@@ -1,6 +1,8 @@
from odoo.addons.account.tests.account_test_classes import AccountingTestCase
from odoo.osv.orm import except_orm
-from datetime import datetime, timedelta
+from datetime import datetime
+from dateutil.relativedelta import relativedelta
+from calendar import monthrange
from odoo.tools import DEFAULT_SERVER_DATE_FORMAT
from odoo.tests import tagged
@@ -14,14 +16,16 @@ class TestPeriodState(AccountingTestCase):
def setUp(self):
super(TestPeriodState, self).setUp()
self.user_id = self.env.user
- self.day_before_yesterday = datetime.now() - timedelta(2)
- self.yesterday = datetime.now() - timedelta(1)
- self.yesterday_str = self.yesterday.strftime(DEFAULT_SERVER_DATE_FORMAT)
+
+ last_day_month = datetime.now() - relativedelta(months=1)
+ last_day_month = last_day_month.replace(day=monthrange(last_day_month.year, last_day_month.month)[1])
+ self.last_day_month_str = last_day_month.strftime(DEFAULT_SERVER_DATE_FORMAT)
+
#make sure there is no unposted entry
- draft_entries = self.env['account.move'].search([('date', '<=', self.yesterday_str), ('state', '=', 'draft')])
+ draft_entries = self.env['account.move'].search([('date', '<=', self.last_day_month_str), ('state', '=', 'draft')])
if draft_entries:
draft_entries.post()
- self.user_id.company_id.write({'fiscalyear_lock_date': self.yesterday_str})
+ self.user_id.company_id.fiscalyear_lock_date = self.last_day_month_str
self.sale_journal_id = self.env['account.journal'].search([('type', '=', 'sale')])[0]
self.account_id = self.env['account.account'].search([('internal_type', '=', 'receivable')])[0]
@@ -30,7 +34,7 @@ class TestPeriodState(AccountingTestCase):
move = self.env['account.move'].create({
'name': '/',
'journal_id': self.sale_journal_id.id,
- 'date': self.day_before_yesterday.strftime(DEFAULT_SERVER_DATE_FORMAT),
+ 'date': self.last_day_month_str,
'line_ids': [(0, 0, {
'name': 'foo',
'debit': 10,
diff --git a/addons/account/tests/test_reconciliation.py b/addons/account/tests/test_reconciliation.py
index 4a50c812620..1fce897b602 100644
--- a/addons/account/tests/test_reconciliation.py
+++ b/addons/account/tests/test_reconciliation.py
@@ -42,6 +42,12 @@ class TestReconciliation(AccountingTestCase):
self.diff_income_account = self.env['res.users'].browse(self.env.uid).company_id.income_currency_exchange_account_id
self.diff_expense_account = self.env['res.users'].browse(self.env.uid).company_id.expense_currency_exchange_account_id
+ self.inbound_payment_method = self.env['account.payment.method'].create({
+ 'name': 'inbound',
+ 'code': 'IN',
+ 'payment_type': 'inbound',
+ })
+
def create_invoice(self, type='out_invoice', invoice_amount=50, currency_id=None):
#we create an invoice in given currency
invoice = self.account_invoice_model.create({'partner_id': self.partner_agrolait_id,
@@ -709,6 +715,49 @@ class TestReconciliation(AccountingTestCase):
credit_aml.with_context(invoice_id=inv.id).remove_move_reconcile()
self.assertAlmostEquals(inv.residual, 111)
+ def test_revert_payment_and_reconcile(self):
+ payment = self.env['account.payment'].create({
+ 'payment_method_id': self.inbound_payment_method.id,
+ 'payment_type': 'inbound',
+ 'partner_type': 'customer',
+ 'partner_id': self.partner_agrolait_id,
+ 'journal_id': self.bank_journal_usd.id,
+ 'payment_date': '2018-06-04',
+ 'amount': 666,
+ })
+ payment.post()
+
+ self.assertEqual(len(payment.move_line_ids), 2)
+
+ bank_line = payment.move_line_ids.filtered(lambda l: l.account_id.id == self.bank_journal_usd.default_debit_account_id.id)
+ customer_line = payment.move_line_ids - bank_line
+
+ self.assertEqual(len(bank_line), 1)
+ self.assertEqual(len(customer_line), 1)
+ self.assertNotEqual(bank_line.id, customer_line.id)
+
+ self.assertEqual(bank_line.move_id.id, customer_line.move_id.id)
+ move = bank_line.move_id
+
+ # Reversing the payment's move
+ reversed_move_list = move.reverse_moves('2018-06-04')
+ self.assertEqual(len(reversed_move_list), 1)
+ reversed_move = self.env['account.move'].browse(reversed_move_list[0])
+
+ self.assertEqual(len(reversed_move.line_ids), 2)
+
+ # Testing the reconciliation matching between the move lines and their reversed counterparts
+ reversed_bank_line = reversed_move.line_ids.filtered(lambda l: l.account_id.id == self.bank_journal_usd.default_debit_account_id.id)
+ reversed_customer_line = reversed_move.line_ids - reversed_bank_line
+
+ self.assertEqual(len(reversed_bank_line), 1)
+ self.assertEqual(len(reversed_customer_line), 1)
+ self.assertNotEqual(reversed_bank_line.id, reversed_customer_line.id)
+ self.assertEqual(reversed_bank_line.move_id.id, reversed_customer_line.move_id.id)
+
+ self.assertEqual(reversed_bank_line.full_reconcile_id.id, bank_line.full_reconcile_id.id)
+ self.assertEqual(reversed_customer_line.full_reconcile_id.id, customer_line.full_reconcile_id.id)
+
def test_partial_reconcile_currencies_02(self):
####
# Day 1: Invoice Cust/001 to customer (expressed in USD)
diff --git a/addons/account/views/account_view.xml b/addons/account/views/account_view.xml
index 00b716edb51..503ac0bd0a7 100644
--- a/addons/account/views/account_view.xml
+++ b/addons/account/views/account_view.xml
@@ -1166,7 +1166,8 @@
<group>
<field name="name"/>
<field name="partner_id"
- domain="['|', ('parent_id', '=', False), ('is_company', '=', True)]"/>
+ domain="['|', ('parent_id', '=', False), ('is_company', '=', True)]"
+ attrs="{'readonly': [('parent_state', '=', 'posted')]}"/>
</group>
<notebook colspan="4">
<page string="Information">
diff --git a/addons/account_lock/__init__.py b/addons/account_lock/__init__.py
new file mode 100644
index 00000000000..cde864bae21
--- /dev/null
+++ b/addons/account_lock/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+
+from . import models
diff --git a/addons/account_lock/__manifest__.py b/addons/account_lock/__manifest__.py
new file mode 100644
index 00000000000..67e76b49098
--- /dev/null
+++ b/addons/account_lock/__manifest__.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+{
+ 'name' : 'Irreversible Lock Date',
+ 'version' : '1.0',
+ 'category': 'Accounting',
+ 'description': """
+ Make the lock date irreversible:
+
+ * You cannot define stricter conditions on advisors than on users. Then, the lock date on advisor must be set before the lock date for users.
+ * You cannot lock a period that is not finished yet. Then, the lock date for advisors must be set before the last day of the previous month.
+ * The new lock date for advisors must be set after the previous lock date.
+ """,
+ 'depends' : ['account'],
+ 'data': [],
+}
diff --git a/addons/account_lock/models/__init__.py b/addons/account_lock/models/__init__.py
new file mode 100644
index 00000000000..e759f74fc8d
--- /dev/null
+++ b/addons/account_lock/models/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+
+from . import res_company
diff --git a/addons/account_lock/models/res_company.py b/addons/account_lock/models/res_company.py
new file mode 100644
index 00000000000..5a01046f36b
--- /dev/null
+++ b/addons/account_lock/models/res_company.py
@@ -0,0 +1,14 @@
+# -*- coding: utf-8 -*-
+
+from odoo import models, api
+
+
+class ResCompany(models.Model):
+ _inherit = 'res.company'
+
+ @api.multi
+ def write(self, vals):
+ # fiscalyear_lock_date can't be set to a prior date
+ if 'fiscalyear_lock_date' in vals or 'period_lock_date' in vals:
+ self._check_lock_dates(vals)
+ return super(ResCompany, self).write(vals)
diff --git a/addons/analytic/models/analytic_account.py b/addons/analytic/models/analytic_account.py
index 9cd801144e8..7096852528c 100644
--- a/addons/analytic/models/analytic_account.py
+++ b/addons/analytic/models/analytic_account.py
@@ -97,6 +97,7 @@ class AccountAnalyticAccount(models.Model):
domain=domain + [('amount', '>=', 0.0)],
fields=['account_id', 'currency_id', 'amount'],
groupby=['account_id', 'currency_id'],
+ lazy=False,
)
data_credit = defaultdict(float)
for l in credit_groups:
@@ -106,6 +107,7 @@ class AccountAnalyticAccount(models.Model):
domain=domain + [('amount', '<', 0.0)],
fields=['account_id', 'currency_id', 'amount'],
groupby=['account_id', 'currency_id'],
+ lazy=False,
)
data_debit = defaultdict(float)
for l in debit_groups:
diff --git a/addons/barcodes/static/src/js/barcode_events.js b/addons/barcodes/static/src/js/barcode_events.js
index a2e5808f8be..2d602a36b97 100644
--- a/addons/barcodes/static/src/js/barcode_events.js
+++ b/addons/barcodes/static/src/js/barcode_events.js
@@ -64,12 +64,14 @@ var BarcodeEvents = core.Class.extend(mixins.PropertiesMixin, {
'position': 'fixed',
'top': '50%',
'transform': 'translateY(-50%)',
- 'opacity': 0,
+ 'z-index': '-1',
},
});
+ // Avoid to show autocomplete for a non appearing input
+ this.$barcodeInput.attr('autocomplete', 'off');
}
- this.__removeBarcodeField = _.debounce(this._removeBarcodeField, this.inputTimeOut);
+ this.__blurBarcodeInput = _.debounce(this._blurBarcodeInput, this.inputTimeOut);
},
handle_buffered_keys: function() {
@@ -232,7 +234,7 @@ var BarcodeEvents = core.Class.extend(mixins.PropertiesMixin, {
this.max_time_between_keys_in_ms);
}
// if the barcode input doesn't receive keydown for a while, remove it.
- this.__removeBarcodeField();
+ this.__blurBarcodeInput();
}
},
@@ -247,21 +249,22 @@ var BarcodeEvents = core.Class.extend(mixins.PropertiesMixin, {
var barcodeValue = this.$barcodeInput.val();
if (barcodeValue.match(this.regexp)) {
core.bus.trigger('barcode_scanned', barcodeValue, $(e.target).parent()[0]);
- this.$barcodeInput.val('');
+ this._blurBarcodeInput();
}
},
/**
- * Remove the temporary input created to store the barcode value.
- * If nothing happens, this input will be removed, so the focus will be lost
- * and the virtual keyboard on mobile devices will be closed.
+ * Removes the value and focus from the barcode input.
+ * If nothing happens, the focus will be lost and
+ * the virtual keyboard on mobile devices will be closed.
*
* @private
*/
- _removeBarcodeField: function () {
+ _blurBarcodeInput: function () {
if (this.$barcodeInput) {
- // Reset the value and remove from the DOM.
- this.$barcodeInput.val('').remove();
+ // Close the virtual keyboard on mobile browsers
+ // FIXME: actually we can't prevent keyboard from opening
+ this.$barcodeInput.val('').blur();
}
},
diff --git a/addons/base_automation/i18n/tr.po b/addons/base_automation/i18n/tr.po
index f943fc6fda0..f1bdb579a5d 100644
--- a/addons/base_automation/i18n/tr.po
+++ b/addons/base_automation/i18n/tr.po
@@ -123,7 +123,7 @@ msgstr "Bağlantı Modeli"
#. module: base_automation
#: model:ir.model.fields,field_description:base_automation.field_base_automation__binding_type
msgid "Binding Type"
-msgstr ""
+msgstr "Bağlantı Türü"
#. module: base_automation
#: selection:base.automation.lead.test,state:0
diff --git a/addons/base_geolocalize/i18n/tr.po b/addons/base_geolocalize/i18n/tr.po
index b858540b3b8..506cb5037a7 100644
--- a/addons/base_geolocalize/i18n/tr.po
+++ b/addons/base_geolocalize/i18n/tr.po
@@ -3,19 +3,19 @@
# * base_geolocalize
#
# Translators:
-# Martin Trigaux <mat@odoo.com>, 2017
+# Martin Trigaux, 2017
# Ahmet Altinisik <aaltinisik@altinkaya.com.tr>, 2017
# Ayhan KIZILTAN <akiziltan76@hotmail.com>, 2017
# gezgin biri <gezginbiri@hotmail.com>, 2017
-# Murat Kaplan <muratk@projetgrup.com>, 2017
# Matanat Ahmadova <ahmadova.matanat01@gmail.com>, 2017
+# Umur Akın <umura@projetgrup.com>, 2018
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-20 09:53+0000\n"
-"PO-Revision-Date: 2017-09-20 09:53+0000\n"
-"Last-Translator: Matanat Ahmadova <ahmadova.matanat01@gmail.com>, 2017\n"
+"POT-Creation-Date: 2018-03-22 14:10+0000\n"
+"PO-Revision-Date: 2018-03-22 14:10+0000\n"
+"Last-Translator: Umur Akın <umura@projetgrup.com>, 2018\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -45,6 +45,8 @@ msgid ""
"Cannot contact geolocation servers. Please make sure that your Internet "
"connection is up and running (%s)."
msgstr ""
+"Coğrafi konumlandıma sunucusuna bağlanılamıyor. Lütfen internet bağlantınızı"
+" açık ve çalışmakta olduğundan emin olun (%s)."
#. module: base_geolocalize
#: model:ir.model,name:base_geolocalize.model_res_partner
@@ -52,21 +54,21 @@ msgid "Contact"
msgstr "Kontak"
#. module: base_geolocalize
-#: model:ir.model.fields,field_description:base_geolocalize.field_res_partner_partner_latitude
-#: model:ir.model.fields,field_description:base_geolocalize.field_res_users_partner_latitude
+#: model:ir.model.fields,field_description:base_geolocalize.field_res_partner__partner_latitude
+#: model:ir.model.fields,field_description:base_geolocalize.field_res_users__partner_latitude
msgid "Geo Latitude"
msgstr "Coğrafi Enlem"
#. module: base_geolocalize
-#: model:ir.model.fields,field_description:base_geolocalize.field_res_partner_partner_longitude
-#: model:ir.model.fields,field_description:base_geolocalize.field_res_users_partner_longitude
+#: model:ir.model.fields,field_description:base_geolocalize.field_res_partner__partner_longitude
+#: model:ir.model.fields,field_description:base_geolocalize.field_res_users__partner_longitude
msgid "Geo Longitude"
msgstr "Coğ Boylam"
#. module: base_geolocalize
#: model:ir.ui.view,arch_db:base_geolocalize.view_crm_partner_geo_form
msgid "Geolocate"
-msgstr ""
+msgstr "Yer Etiketi"
#. module: base_geolocalize
#: model:ir.ui.view,arch_db:base_geolocalize.view_crm_partner_geo_form
@@ -74,8 +76,8 @@ msgid "Geolocation"
msgstr "Coğrafi Konum"
#. module: base_geolocalize
-#: model:ir.model.fields,field_description:base_geolocalize.field_res_partner_date_localization
-#: model:ir.model.fields,field_description:base_geolocalize.field_res_users_date_localization
+#: model:ir.model.fields,field_description:base_geolocalize.field_res_partner__date_localization
+#: model:ir.model.fields,field_description:base_geolocalize.field_res_users__date_localization
msgid "Geolocation Date"
msgstr "Coğrafi Konum"
diff --git a/addons/base_import/i18n/zh_CN.po b/addons/base_import/i18n/zh_CN.po
index 0eb1389d7a7..222ed8f1b4a 100644
--- a/addons/base_import/i18n/zh_CN.po
+++ b/addons/base_import/i18n/zh_CN.po
@@ -8,13 +8,14 @@
# 苏州远鼎 <tiexinliu@126.com>, 2016
# liAnGjiA <liangjia@qq.com>, 2016
# 山西清水欧度(QQ:54773801) <54773801@qq.com>, 2018
+# John Lin <linyinhuan@139.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
-"Last-Translator: 山西清水欧度(QQ:54773801) <54773801@qq.com>, 2018\n"
+"Last-Translator: John Lin <linyinhuan@139.com>, 2018\n"
"Language-Team: Chinese (China) (https://www.transifex.com/odoo/teams/41243/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -143,7 +144,7 @@ msgstr "十进制分隔符:"
#: code:addons/base_import/static/src/xml/base_import.xml:76
#, python-format
msgid "Defer parent/child computation"
-msgstr ""
+msgstr "推迟父/子计算"
#. module: base_import
#: model:ir.model.fields,field_description:base_import.field_base_import_import__display_name
@@ -317,7 +318,7 @@ msgid ""
"If the model uses parent/child relations, computing the"
" parent / child relation occurs on every line, and lead"
" to a slower import. Defering it can speed up import."
-msgstr ""
+msgstr "如果该模型使用父/子关系,每行都会发生父/子关系计算,并使导入更慢。推迟她能提升导入速度。"
#. module: base_import
#. openerp-web
diff --git a/addons/calendar/i18n/calendar.pot b/addons/calendar/i18n/calendar.pot
index 2ed94168f2a..ab1483026ae 100644
--- a/addons/calendar/i18n/calendar.pot
+++ b/addons/calendar/i18n/calendar.pot
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-03-22 14:11+0000\n"
-"PO-Revision-Date: 2018-03-22 14:11+0000\n"
+"POT-Creation-Date: 2018-06-06 08:01+0000\n"
+"PO-Revision-Date: 2018-06-06 08:01+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -866,6 +866,13 @@ msgid "Meeting"
msgstr ""
#. module: calendar
+#: code:addons/calendar/models/calendar.py:933
+#: code:addons/calendar/models/calendar.py:937
+#, python-format
+msgid "Meeting '%s' starts '%s' and ends '%s'"
+msgstr ""
+
+#. module: calendar
#: model:ir.ui.view,arch_db:calendar.view_calendar_event_form
msgid "Meeting Details"
msgstr ""
diff --git a/addons/calendar/i18n/zh_CN.po b/addons/calendar/i18n/zh_CN.po
index 8e768bb2786..37ccc737772 100644
--- a/addons/calendar/i18n/zh_CN.po
+++ b/addons/calendar/i18n/zh_CN.po
@@ -13,13 +13,14 @@
# 老窦 北京 <2662059195@qq.com>, 2018
# e2f <projects@e2f.com>, 2018
# e2f_cn c5 <jarvisn@ecinnovations.com>, 2018
+# John Lin <linyinhuan@139.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:11+0000\n"
"PO-Revision-Date: 2018-03-22 14:11+0000\n"
-"Last-Translator: e2f_cn c5 <jarvisn@ecinnovations.com>, 2018\n"
+"Last-Translator: John Lin <linyinhuan@139.com>, 2018\n"
"Language-Team: Chinese (China) (https://www.transifex.com/odoo/teams/41243/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1062,7 +1063,7 @@ msgstr "邀请向导"
#. module: calendar
#: model:ir.model.fields,field_description:calendar.field_calendar_event__is_highlighted
msgid "Is the Event Highlighted"
-msgstr ""
+msgstr "是事件高亮"
#. module: calendar
#: selection:calendar.event,byday:0
diff --git a/addons/calendar/models/calendar.py b/addons/calendar/models/calendar.py
index 161130e1e94..7a338adc52b 100644
--- a/addons/calendar/models/calendar.py
+++ b/addons/calendar/models/calendar.py
@@ -930,9 +930,13 @@ class Meeting(models.Model):
def _check_closing_date(self):
for meeting in self:
if meeting.start_datetime and meeting.stop_datetime and meeting.stop_datetime < meeting.start_datetime:
- raise ValidationError(_('Ending datetime cannot be set before starting datetime.'))
+ raise ValidationError(_('Ending datetime cannot be set before starting datetime.') + "\n" +
+ _("Meeting '%s' starts '%s' and ends '%s'") % (meeting.name, meeting.start_datetime, meeting.stop_datetime)
+ )
if meeting.start_date and meeting.stop_date and meeting.stop_date < meeting.start_date:
- raise ValidationError(_('Ending date cannot be set before starting date.'))
+ raise ValidationError(_('Ending date cannot be set before starting date.') + "\n" +
+ _("Meeting '%s' starts '%s' and ends '%s'") % (meeting.name, meeting.start_date, meeting.stop_date)
+ )
@api.onchange('start_datetime', 'duration')
def _onchange_duration(self):
diff --git a/addons/crm/i18n/tr.po b/addons/crm/i18n/tr.po
index 1dc1294b67b..503973f4250 100644
--- a/addons/crm/i18n/tr.po
+++ b/addons/crm/i18n/tr.po
@@ -1021,7 +1021,7 @@ msgstr "Atamaya Zorla"
#. module: crm
#: model:ir.ui.view,arch_db:crm.res_config_settings_view_form
msgid "Format phone numbers based on national conventions"
-msgstr ""
+msgstr "Telefon numaralarını ulusal sözleşmelere göre biçimlendirme"
#. module: crm
#: code:addons/crm/models/crm_lead.py:588
@@ -1869,7 +1869,7 @@ msgstr "Telefon"
#. module: crm
#: model:ir.model.fields,field_description:crm.field_res_config_settings__module_crm_phone_validation
msgid "Phone Formatting"
-msgstr ""
+msgstr "Telefon Biçimlendirmesi"
#. module: crm
#: code:addons/crm/models/crm_team.py:165
diff --git a/addons/crm_project/i18n/tr.po b/addons/crm_project/i18n/tr.po
index f1d4348f477..9406b7286ab 100644
--- a/addons/crm_project/i18n/tr.po
+++ b/addons/crm_project/i18n/tr.po
@@ -91,4 +91,4 @@ msgstr "Proje"
#. module: crm_project
#: model:ir.model,name:crm_project.model_crm_lead_convert2task
msgid "crm.lead.convert2task"
-msgstr ""
+msgstr "crm.lead.convert2task"
diff --git a/addons/delivery/models/stock_picking.py b/addons/delivery/models/stock_picking.py
index 86517b1d0ec..908b7587c51 100644
--- a/addons/delivery/models/stock_picking.py
+++ b/addons/delivery/models/stock_picking.py
@@ -162,7 +162,8 @@ class StockPicking(models.Model):
if self.carrier_id.free_over and self.sale_id and self.sale_id._compute_amount_total_without_delivery() >= self.carrier_id.amount:
res['exact_price'] = 0.0
self.carrier_price = res['exact_price']
- self.carrier_tracking_ref = res['tracking_number']
+ if res['tracking_number']:
+ self.carrier_tracking_ref = res['tracking_number']
order_currency = self.sale_id.currency_id or self.company_id.currency_id
msg = _("Shipment sent to carrier %s for shipping with tracking number %s<br/>Cost: %.2f %s") % (self.carrier_id.name, self.carrier_tracking_ref, self.carrier_price, order_currency.name)
self.message_post(body=msg)
diff --git a/addons/event/i18n/es.po b/addons/event/i18n/es.po
index f55e9ffd371..418660796de 100644
--- a/addons/event/i18n/es.po
+++ b/addons/event/i18n/es.po
@@ -206,6 +206,168 @@ msgid ""
"</div>\n"
" "
msgstr ""
+"\n"
+"<div style=\"background:#F3F5F6;color:#515166;padding:25px 0px;font-family:Arial,Helvetica,sans-serif;font-size:14px;\">\n"
+"% set date_begin = format_tz(object.event_id.date_begin, tz='UTC', format='%Y%m%dT%H%M%SZ')\n"
+"% set date_end = format_tz(object.event_id.date_end, tz='UTC', format='%Y%m%dT%H%M%SZ')\n"
+" <table style=\"width:600px;margin:5px auto;\">\n"
+" <tbody>\n"
+" <tr>\n"
+" <td>\n"
+" <a href=\"/\">\n"
+" <img src=\"/logo\" alt=\"${object.company_id.name}\" style=\"vertical-align:baseline;max-width:100px;\" />\n"
+" </a>\n"
+" </td>\n"
+" <td style=\"text-align:right;vertical-align:middle;\">\n"
+" % if 'website_url' in object.event_id and object.event_id.website_url:\n"
+" <a href=\"${object.event_id.website_url}\" style=\"background-color: #1abc9c; padding: 12px; font-weight: 12px; text-decoration: none; color: #fff; border-radius: 5px; font-size:16px;\">Ver evento</a>\n"
+" % endif\n"
+" </td>\n"
+" </tr>\n"
+" </tbody>\n"
+" </table>\n"
+" <table style=\"width:600px;margin:0px auto;background:white;border:1px solid #e1e1e1;\">\n"
+" <tbody>\n"
+" <tr>\n"
+" <td style=\"padding:15px 20px 0px 20px; font-size:16px; font-weight:300;\">\n"
+" <p style=\"font-size:16px;\">\n"
+" Hi,\n"
+" </p><p style=\"font-size:16px;\">\n"
+" Nos alegra confirmarle su registro en el evento:\n"
+" </p>\n"
+" <ul>\n"
+" <li>Evento: \n"
+" % if 'website_url' in object.event_id and object.event_id.website_url:\n"
+" <a href=\"${object.event_id.website_url}\" style=\"color:#875A7B;text-decoration:none;\">${object.event_id.name}</a>\n"
+" % else:\n"
+" <strong>${object.event_id.name}</strong>\n"
+" % endif\n"
+" </li>\n"
+" <li>Asistente: ${object.name}</li>\n"
+" </ul>\n"
+" <p style=\"font-size:16px;\">\n"
+" Nos vemos pronto,\n"
+" </p>\n"
+" <p style=\"font-size:16px; margin-bottom: 30px\">\n"
+" <i>\n"
+" -- <br/>\n"
+" % if object.event_id.organizer_id:\n"
+" ${object.event_id.organizer_id.name}\n"
+" % else:\n"
+" Los organizadores.\n"
+" % endif\n"
+" </i>\n"
+" </p>\n"
+" </td>\n"
+" </tr>\n"
+" <tr>\n"
+" <td style=\"padding:15px 20px 0px 20px;\">\n"
+" <table style=\"width:100%;border-top:1px solid #e1e1e1;\">\n"
+" <tr>\n"
+" <td style=\"padding:25px 0px;vertical-align:top;\">\n"
+" <img src=\"/web_editor/font_to_img/61555/rgb(81,81,102)/34\" style=\"padding:4px;max-width:inherit;\" height=\"34\">\n"
+" </td>\n"
+" <td style=\"padding:25px 10px 25px 10px;width:50%;line-height:20px;vertical-align:top;\">\n"
+" <div><strong>Desde</strong> ${object.event_id.date_begin_located}</div>\n"
+" <div><strong>Hasta</strong> ${object.event_id.date_end_located}</div>\n"
+" <div style=\"font-size:12px;color:#9e9e9e\"><i><strong>TZ</strong> ${object.event_id.date_tz}</i></div>\n"
+" </td>\n"
+" % if object.event_id.address_id.country_id.name:\n"
+" <td style=\"padding:25px 0px;vertical-align:top;\">\n"
+" <img src=\"/web_editor/font_to_img/61505/rgb(81,81,102)/34\" style=\"padding:4px;max-width:inherit;\" height=\"34\">\n"
+" </td>\n"
+" <td style=\"padding:30px 10px 25px 10px;width:50%;vertical-align:top;\">\n"
+" % set location = ''\n"
+" % if object.event_id.address_id.name:\n"
+" <p style=\"margin:0px 0px 0px 0px;\">${object.event_id.address_id.name}</p>\n"
+" % endif\n"
+" % if object.event_id.address_id.street:\n"
+" <p style=\"margin:0px 0px 0px 0px;\">${object.event_id.address_id.street}</p>\n"
+" % set location = object.event_id.address_id.street\n"
+" % endif\n"
+" % if object.event_id.address_id.street2:\n"
+" <p style=\"margin:0px 0px 0px 0px;\">${object.event_id.address_id.street2}</p>\n"
+" % set location = '%s, %s' % (location, object.event_id.address_id.street2)\n"
+" % endif\n"
+" <p style=\"margin:0px 0px 0px 0px;\">\n"
+" % if object.event_id.address_id.city:\n"
+" ${object.event_id.address_id.city},\n"
+" % set location = '%s, %s' % (location, object.event_id.address_id.city)\n"
+" % endif\n"
+" % if object.event_id.address_id.state_id.name:\n"
+" ${object.event_id.address_id.state_id.name},\n"
+" % set location = '%s, %s' % (location, object.event_id.address_id.state_id.name)\n"
+" % endif\n"
+" % if object.event_id.address_id.zip:\n"
+" ${object.event_id.address_id.zip}\n"
+" % set location = '%s, %s' % (location, object.event_id.address_id.zip)\n"
+" % endif\n"
+" </p>\n"
+" % if object.event_id.address_id.country_id.name:\n"
+" <p style=\"margin:0px 0px 0px 0px;\">${object.event_id.address_id.country_id.name}</p>\n"
+" % set location = '%s, %s' % (location, object.event_id.address_id.country_id.name)\n"
+" % endif\n"
+" </td>\n"
+" % endif\n"
+" </tr>\n"
+" </table>\n"
+" % if object.event_id.organizer_id:\n"
+" <table style=\"width:100%;border-top:1px solid #e1e1e1;\">\n"
+" <tr>\n"
+" <td style=\"padding:10px 0px 25px 0px;\">\n"
+" <h2 style=\"font-weight:300;margin:10px 0px\">¿Preguntas sobre este evento?</h2>\n"
+" <p>Por favor contacte con el organizador:</p>\n"
+" <ul>\n"
+" <li>${object.event_id.organizer_id.name}</li>\n"
+" % if object.event_id.organizer_id.email\n"
+" <li>Correo: <a href=\"mailto:${object.event_id.organizer_id.email}\" style=\"text-decoration:none;color:#875A7B;\">${object.event_id.organizer_id.email}</a></li>\n"
+" % endif\n"
+" % if object.event_id.organizer_id.phone\n"
+" <li>Teléfono: ${object.event_id.organizer_id.phone}</li>\n"
+" % endif\n"
+" </ul>\n"
+"\n"
+" </td>\n"
+" </tr>\n"
+" </table>\n"
+" % endif\n"
+" <table style=\"width:100%;border-top:1px solid #e1e1e1;\">\n"
+" <tr>\n"
+" <td style=\"padding:25px 0px;\">\n"
+" <strong>Añada este evento a su calendario</strong>\n"
+" <a href=\"https://www.google.com/calendar/render?action=TEMPLATE&text=${object.event_id.name}&dates=${date_begin}/${date_end}&location=${location}\" style=\"padding:3px 5px;border:1px solid #875A7B;color:#875A7B;text-decoration:none;border-radius:3px;\" target=\"new\"><img src=\"/web_editor/font_to_img/61525/rgb(135,90,123)/16\" style=\"vertical-align:middle;\" height=\"16\"> Google</a>\n"
+" <a href=\"https://bay02.calendar.live.com/calendar/calendar.aspx?rru=addevent&summary=${object.event_id.name}&dtstart=${date_begin}&dtend=${date_end}&location=${location}\" style=\"padding:3px 5px;border:1px solid #875A7B;color:#875A7B;text-decoration:none;border-radius:3px;\" target=\"new\"><img src=\"/web_editor/font_to_img/61525/rgb(135,90,123)/16\" style=\"vertical-align:middle;\" height=\"16\"> Outlook</a>\n"
+" <a href=\"https://calendar.yahoo.com/?v=60&view=d&type=20&title=${object.event_id.name}&in_loc=${location}&st=${format_tz(object.event_id.date_begin, tz='UTC', format='%Y%m%dT%H%M%S')}&et=${format_tz(object.event_id.date_end, tz='UTC', format='%Y%m%dT%H%M%S')}\" style=\"padding:3px 5px;border:1px solid #875A7B;color:#875A7B;text-decoration:none;border-radius:3px;\" target=\"new\"><img src=\"/web_editor/font_to_img/61525/rgb(135,90,123)/16\" style=\"vertical-align:middle;\" height=\"16\"> Yahoo</a>\n"
+" </td>\n"
+" </tr>\n"
+" </table>\n"
+" </td>\n"
+" </tr>\n"
+" </tbody>\n"
+" </table>\n"
+" % if object.event_id.address_id:\n"
+" <div style=\"width:598px;margin:0px auto;border-left:1px solid #dddddd;border-right:1px solid #dddddd;border-bottom:1px solid #dddddd;\">\n"
+" <a href=\"https://maps.google.com/maps?q=${location}\" target=\"new\">\n"
+" <img src=\"http://maps.googleapis.com/maps/api/staticmap?autoscale=1&size=598x200&maptype=roadmap&format=png&visual_refresh=true&markers=size:mid%7Ccolor:0xa5117d%7Clabel:%7C${location}\" style=\"vertical-align:bottom;\" />\n"
+" </a>\n"
+" </div>\n"
+" % endif\n"
+" <table style=\"width:600px;margin:0px auto;text-align:center;\">\n"
+" <tbody>\n"
+" <tr>\n"
+" <td style=\"padding-top:10px;font-size: 12px;\">\n"
+" <div>Enviado por ${object.company_id.name}</div>\n"
+" % if 'website_url' in object.event_id and object.event_id.website_url:\n"
+" <div>\n"
+" Descubra <a href=\"/event\" style=\"text-decoration:none;color:#717188;\">todos nuestros eventos</a>.\n"
+" </div>\n"
+" % endif\n"
+" </td>\n"
+" </tr>\n"
+" </tbody>\n"
+" </table>\n"
+"</div>\n"
+" "
#. module: event
#: model:mail.template,body_html:event.event_reminder
diff --git a/addons/event/views/res_partner_views.xml b/addons/event/views/res_partner_views.xml
index 8fd4b774c5e..59d096efcd1 100644
--- a/addons/event/views/res_partner_views.xml
+++ b/addons/event/views/res_partner_views.xml
@@ -5,6 +5,7 @@
<field name="name">view.res.partner.form.event.inherited</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
+ <field name="groups_id" eval="[(4, ref('event.group_event_user'))]"/>
<field name="arch" type="xml">
<div name="button_box" position="inside">
<button class="oe_stat_button"
diff --git a/addons/google_calendar/models/google_calendar.py b/addons/google_calendar/models/google_calendar.py
index df0df9e3388..a422438778c 100644
--- a/addons/google_calendar/models/google_calendar.py
+++ b/addons/google_calendar/models/google_calendar.py
@@ -677,7 +677,7 @@ class GoogleCalendar(models.AbstractModel):
try:
all_event_from_google = self.get_event_synchro_dict(lastSync=lastSync)
except requests.HTTPError as e:
- if e.response.code == 410: # GONE, Google is lost.
+ if e.response.status_code == 410: # GONE, Google is lost.
# we need to force the rollback from this cursor, because it locks my res_users but I need to write in this tuple before to raise.
self.env.cr.rollback()
self.env.user.write({'google_calendar_last_sync_date': False})
@@ -842,7 +842,7 @@ class GoogleCalendar(models.AbstractModel):
try:
# if already deleted from gmail or never created
recs.delete_an_event(current_event[0])
- except Exception as e:
+ except requests.exceptions.HTTPError as e:
if e.response.status_code in (401, 410,):
pass
else:
diff --git a/addons/hr_holidays/report/hr_leave_report.py b/addons/hr_holidays/report/hr_leave_report.py
index acca821f58a..5df7a3e4636 100644
--- a/addons/hr_holidays/report/hr_leave_report.py
+++ b/addons/hr_holidays/report/hr_leave_report.py
@@ -5,9 +5,10 @@ from odoo import fields, models, tools
class LeaveReport(models.Model):
-
_name = "hr.leave.report"
+ _description = 'Leave Summary / Report'
_auto = False
+ _order = "date_from DESC, employee_id"
employee_id = fields.Many2one('hr.employee', string="Employee", readonly=True)
name = fields.Char('Description', readonly=True)
diff --git a/addons/hr_holidays/report/hr_leave_reports.xml b/addons/hr_holidays/report/hr_leave_reports.xml
index 6f884671c37..5afe663eaf5 100644
--- a/addons/hr_holidays/report/hr_leave_reports.xml
+++ b/addons/hr_holidays/report/hr_leave_reports.xml
@@ -46,12 +46,13 @@
<field name="model">hr.leave.report</field>
<field name="arch" type="xml">
<tree create="0" edit="0" delete="0">
- <field name="type"/>
- <field name="name"/>
+ <field name="employee_id"/>
<field name="number_of_days" string="Number of Days" sum="Remaining Days"/>
<field name="date_from"/>
<field name="date_to"/>
<field name="state"/>
+ <field name="type"/>
+ <field name="name"/>
</tree>
</field>
</record>
diff --git a/addons/hr_holidays/views/hr_leave_views.xml b/addons/hr_holidays/views/hr_leave_views.xml
index 1b210c22eb4..97c88dfcbfa 100644
--- a/addons/hr_holidays/views/hr_leave_views.xml
+++ b/addons/hr_holidays/views/hr_leave_views.xml
@@ -20,6 +20,9 @@
<field name="model">hr.leave</field>
<field name="arch" type="xml">
<search string="Search Leave">
+ <field name="employee_id"/>
+ <field name="department_id"/>
+ <field name="holiday_status_id"/>
<field name="name"/>
<filter domain="[('state','in',('confirm','validate1'))]" string="To Approve" name="approve"/>
<filter string="Approved Leaves" domain="[('state', '=', 'validate')]" name="validated"/>
@@ -40,10 +43,6 @@
<separator/>
<filter string="My Leaves" name="my_leaves" domain="[('employee_id.user_id', '=', uid)]"/>
<separator/>
- <field name="employee_id"/>
- <field name="department_id"/>
- <field name="holiday_status_id"/>
- <separator/>
<filter string="Late Activities" name="activities_overdue"
domain="[('activity_ids.date_deadline', '&lt;', context_today().strftime('%Y-%m-%d'))]"
help="Show all records which has next action date is before today"/>
diff --git a/addons/hr_timesheet/models/project.py b/addons/hr_timesheet/models/project.py
index 6276aa166ca..f58f49a3218 100644
--- a/addons/hr_timesheet/models/project.py
+++ b/addons/hr_timesheet/models/project.py
@@ -111,7 +111,7 @@ class Task(models.Model):
@api.depends('timesheet_ids.unit_amount')
def _compute_effective_hours(self):
for task in self:
- task.effective_hours = sum(task.timesheet_ids.mapped('unit_amount'))
+ task.effective_hours = round(sum(task.timesheet_ids.mapped('unit_amount')), 2)
@api.depends('effective_hours', 'subtask_effective_hours', 'planned_hours')
def _compute_progress_hours(self):
diff --git a/addons/hw_escpos/escpos/escpos.py b/addons/hw_escpos/escpos/escpos.py
index 7159ac3b31e..f31b1619894 100644
--- a/addons/hw_escpos/escpos/escpos.py
+++ b/addons/hw_escpos/escpos/escpos.py
@@ -522,6 +522,10 @@ class Escpos:
# Print Code
if code:
self._raw(code)
+ # We are using type A commands
+ # So we need to add the 'NULL' character
+ # https://github.com/python-escpos/python-escpos/pull/98/files#diff-a0b1df12c7c67e38915adbe469051e2dR444
+ self._raw('\x00')
else:
raise exception.BarcodeCodeError()
diff --git a/addons/l10n_fr_certification/models/res_company.py b/addons/l10n_fr_certification/models/res_company.py
index 97aa993aa7e..f5f962f6fa3 100644
--- a/addons/l10n_fr_certification/models/res_company.py
+++ b/addons/l10n_fr_certification/models/res_company.py
@@ -30,6 +30,9 @@ class ResCompany(models.Model):
if company._is_accounting_unalterable():
sequence_fields = ['l10n_fr_secure_sequence_id']
company._create_secure_sequence(sequence_fields)
+ # fiscalyear_lock_date can't be set to a prior date
+ if 'fiscalyear_lock_date' in vals or 'period_lock_date' in vals:
+ self._check_lock_dates(vals)
return res
def _create_secure_sequence(self, sequence_fields):
diff --git a/addons/l10n_generic_coa/__init__.py b/addons/l10n_generic_coa/__init__.py
index 67dee8c60db..d417dc6807c 100644
--- a/addons/l10n_generic_coa/__init__.py
+++ b/addons/l10n_generic_coa/__init__.py
@@ -1,2 +1,8 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+
+def uninstall_hook(cr, registry):
+ cr.execute(
+ "DELETE FROM ir_model_data WHERE module = 'l10n_generic_coa'"
+ )
diff --git a/addons/l10n_generic_coa/__manifest__.py b/addons/l10n_generic_coa/__manifest__.py
index 314e13f44ff..2f04d8df530 100644
--- a/addons/l10n_generic_coa/__manifest__.py
+++ b/addons/l10n_generic_coa/__manifest__.py
@@ -24,4 +24,5 @@ Install some generic chart of accounts.
'data/account_invoice_demo.xml',
],
'website': 'https://www.odoo.com/page/accounting',
+ 'uninstall_hook': 'uninstall_hook',
}
diff --git a/addons/mail/i18n/tr.po b/addons/mail/i18n/tr.po
index b989dc5f3bd..10f755b2fec 100644
--- a/addons/mail/i18n/tr.po
+++ b/addons/mail/i18n/tr.po
@@ -3048,7 +3048,7 @@ msgstr "Modeller"
#. module: mail
#: model:ir.model,name:mail.model_base_module_uninstall
msgid "Module Uninstallation"
-msgstr ""
+msgstr "Yüklemeyi Kaldırma Modülü"
#. module: mail
#: model:ir.ui.view,arch_db:mail.view_mail_search
diff --git a/addons/mass_mailing/i18n/tr.po b/addons/mass_mailing/i18n/tr.po
index c43c4af4b0d..03ea4cd2a45 100644
--- a/addons/mass_mailing/i18n/tr.po
+++ b/addons/mass_mailing/i18n/tr.po
@@ -667,7 +667,7 @@ msgstr "E-Posta"
#: model:ir.ui.menu,name:mass_mailing.mass_mailing_menu_root
#: model:ir.ui.view,arch_db:mass_mailing.res_config_settings_view_form
msgid "Email Marketing"
-msgstr ""
+msgstr "E-posta Pazarlama"
#. module: mass_mailing
#: model:ir.model,name:mass_mailing.model_mail_mail_statistics
diff --git a/addons/mass_mailing/models/mail_mail.py b/addons/mass_mailing/models/mail_mail.py
index 1589f22d5a4..c89986556d0 100644
--- a/addons/mass_mailing/models/mail_mail.py
+++ b/addons/mass_mailing/models/mail_mail.py
@@ -84,7 +84,7 @@ class MailMail(models.Model):
def _send_prepare_values(self, partner=None):
# TDE: temporary addition (mail was parameter) due to semi-new-API
res = super(MailMail, self)._send_prepare_values(partner)
- base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
+ base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url').rstrip('/')
if self.mailing_id and res.get('body') and res.get('email_to'):
emails = tools.email_split(res.get('email_to')[0])
email_to = emails and emails[0] or False
diff --git a/addons/mrp/i18n/nl.po b/addons/mrp/i18n/nl.po
index a9638223b4f..b179108cd7d 100644
--- a/addons/mrp/i18n/nl.po
+++ b/addons/mrp/i18n/nl.po
@@ -3604,7 +3604,7 @@ msgid ""
"link to your file."
msgstr ""
"U kan een bestand van uw computer uploaden of een internet link "
-"kopiëren/plakken die linkt naar uw bestand"
+"kopiëren/plakken die linkt naar uw bestand."
#. module: mrp
#: code:addons/mrp/models/mrp_production.py:523
diff --git a/addons/point_of_sale/i18n/nl.po b/addons/point_of_sale/i18n/nl.po
index 85cd5756e51..b04366f186e 100644
--- a/addons/point_of_sale/i18n/nl.po
+++ b/addons/point_of_sale/i18n/nl.po
@@ -3575,7 +3575,7 @@ msgid ""
"category is specified, all available products will be shown."
msgstr ""
"De kassa toont de productcategorieën standaard. Als er geen categorie is "
-"gespecificeerd worden alle producten getoond"
+"gespecificeerd worden alle producten getoond."
#. module: point_of_sale
#: model:ir.model.fields,help:point_of_sale.field_pos_config__pricelist_id
diff --git a/addons/point_of_sale/models/pos_config.py b/addons/point_of_sale/models/pos_config.py
index 1b41565401d..2ef110a6dae 100644
--- a/addons/point_of_sale/models/pos_config.py
+++ b/addons/point_of_sale/models/pos_config.py
@@ -364,11 +364,12 @@ class PosConfig(models.Model):
@api.multi
def write(self, vals):
- if (self.is_posbox or vals.get('is_posbox')) and (self.iface_customer_facing_display or vals.get('iface_customer_facing_display')):
- facing_display = (self.customer_facing_display_html or vals.get('customer_facing_display_html') or '').strip()
- if not facing_display:
- vals['customer_facing_display_html'] = self._compute_default_customer_html()
result = super(PosConfig, self).write(vals)
+
+ config_display = self.filtered(lambda c: c.is_posbox and c.iface_customer_facing_display and not (c.customer_facing_display_html or '').strip())
+ if config_display:
+ super(PosConfig, config_display).write({'customer_facing_display_html': self._compute_default_customer_html()})
+
self.sudo()._set_fiscal_position()
self.sudo()._check_modules_to_install()
self.sudo()._check_groups_implied()
diff --git a/addons/purchase/data/mail_template_data.xml b/addons/purchase/data/mail_template_data.xml
index d3c075c3ff0..072342afc87 100644
--- a/addons/purchase/data/mail_template_data.xml
+++ b/addons/purchase/data/mail_template_data.xml
@@ -5,7 +5,7 @@
<!--Email template -->
<record id="email_template_edi_purchase" model="mail.template">
<field name="name">RFQ - Send by Email</field>
- <field name="email_from">${(object.create_uid.email and '%s &lt;%s&gt;' % (object.create_uid.name, object.create_uid.email) or '')|safe}</field>
+ <field name="email_from">${(object.create_uid.email and '&quot;%s&quot; &lt;%s&gt;' % (object.create_uid.name, object.create_uid.email) or '')|safe}</field>
<field name="subject">${object.company_id.name} Order (Ref ${object.name or 'n/a' })</field>
<field name="partner_to">${object.partner_id.id}</field>
<field name="model_id" ref="purchase.model_purchase_order"/>
@@ -46,7 +46,7 @@ from ${object.company_id.name}.
<!--Email template -->
<record id="email_template_edi_purchase_done" model="mail.template">
<field name="name">Purchase Order - Send by Email</field>
- <field name="email_from">${(object.create_uid.email and '%s &lt;%s&gt;' % (object.create_uid.name, object.create_uid.email) or '')|safe}</field>
+ <field name="email_from">${(object.create_uid.email and '&quot;%s&quot; &lt;%s&gt;' % (object.create_uid.name, object.create_uid.email) or '')|safe}</field>
<field name="subject">${object.company_id.name} Order (Ref ${object.name or 'n/a' })</field>
<field name="partner_to">${object.partner_id.id}</field>
<field name="model_id" ref="purchase.model_purchase_order"/>
diff --git a/addons/purchase/models/purchase.py b/addons/purchase/models/purchase.py
index 78997867716..72c1cedab76 100644
--- a/addons/purchase/models/purchase.py
+++ b/addons/purchase/models/purchase.py
@@ -943,12 +943,12 @@ class ProcurementRule(models.Model):
if domain in cache:
po = cache[domain]
else:
- po = self.env['purchase.order'].search([dom for dom in domain])
+ po = self.env['purchase.order'].sudo().search([dom for dom in domain])
po = po[0] if po else False
cache[domain] = po
if not po:
vals = self._prepare_purchase_order(product_id, product_qty, product_uom, origin, values, partner)
- po = self.env['purchase.order'].create(vals)
+ po = self.env['purchase.order'].sudo().create(vals)
cache[domain] = po
elif not po.origin or origin not in po.origin.split(', '):
if po.origin:
@@ -969,7 +969,7 @@ class ProcurementRule(models.Model):
break
if not po_line:
vals = self._prepare_purchase_order_line(product_id, product_qty, product_uom, values, po, partner)
- self.env['purchase.order.line'].create(vals)
+ self.env['purchase.order.line'].sudo().create(vals)
def _get_purchase_schedule_date(self, values):
"""Return the datetime value to use as Schedule Date (``date_planned``) for the
diff --git a/addons/purchase/tests/test_stockvaluation.py b/addons/purchase/tests/test_stockvaluation.py
index 54fd5bc63f0..e515bd32c82 100644
--- a/addons/purchase/tests/test_stockvaluation.py
+++ b/addons/purchase/tests/test_stockvaluation.py
@@ -184,7 +184,7 @@ class TestStockValuation(TransactionCase):
'company_id': po1.company_id.id,
})
eur_currency._compute_current_rate()
- price_unit_usd_new_rate = po1.currency_id.compute(po1.order_line.price_unit, po1.company_id.currency_id, round=True)
+ price_unit_usd_new_rate = po1.currency_id.compute(po1.order_line.price_unit, po1.company_id.currency_id, round=False)
# the new price_unit is lower than th initial because of the rate's change
self.assertLess(price_unit_usd_new_rate, price_unit_usd)
@@ -198,7 +198,7 @@ class TestStockValuation(TransactionCase):
wizard.process()
# the unit price of the stock move has been updated to the latest value
- self.assertAlmostEqual(move1.price_unit, price_unit_usd_new_rate, places=2)
+ self.assertAlmostEqual(move1.price_unit, price_unit_usd_new_rate)
self.assertAlmostEqual(self.product1.stock_value, price_unit_usd_new_rate * 10, delta=0.1)
@@ -412,4 +412,3 @@ class TestStockValuationWithCOA(AccountingTestCase):
# check the anglo saxon entries
price_diff_entry = self.env['account.move.line'].search([('account_id', '=', price_diff_account.id)])
self.assertEqual(price_diff_entry.credit, 100)
-
diff --git a/addons/repair/i18n/es.po b/addons/repair/i18n/es.po
index 32b246189f6..b38c0edb03b 100644
--- a/addons/repair/i18n/es.po
+++ b/addons/repair/i18n/es.po
@@ -26,13 +26,14 @@
# Fernando San Martín Woerner <fsnmartin@gmail.com>, 2018
# José Matias Zuazo <jose.zuazo@tpsistemas.com.ar>, 2018
# Nicolás Broggi <rnbroggi@gmail.com>, 2018
+# Carlos Vásquez <carlos.vasquez@clearcorp.co.cr>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:11+0000\n"
"PO-Revision-Date: 2018-03-22 14:11+0000\n"
-"Last-Translator: Nicolás Broggi <rnbroggi@gmail.com>, 2018\n"
+"Last-Translator: Carlos Vásquez <carlos.vasquez@clearcorp.co.cr>, 2018\n"
"Language-Team: Spanish (https://www.transifex.com/odoo/teams/41243/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -97,6 +98,20 @@ msgid ""
" <p>Thank you,</p>\n"
" </data>"
msgstr ""
+"<?xml version=\"1.0\"?>\n"
+"<data>Estimado(a) ${object.partner_id.name}</p>\n"
+" <p>\n"
+" Ésta es su orden de reparación ${doc_name} <strong>${object.name}</strong>\n"
+" % if object.origin:\n"
+" (con referencia: ${object.origin} )\n"
+" % endif\n"
+" % if object.invoice_method != 'none':\n"
+" por un total de <strong>${format_amount(object.amount_total, object.pricelist_id.currency_id)}.</strong>\n"
+" % endif\n"
+" </p>\n"
+" <p>Puede responder a este correo electrónico si tiene alguna duda.</p>\n"
+" <p>Gracias,</p>\n"
+" </data>"
#. module: repair
#: model:ir.ui.view,arch_db:repair.report_repairorder
diff --git a/addons/sale/data/mail_data.xml b/addons/sale/data/mail_data.xml
index 5c9d0b6a2e5..ce8dcc651a1 100644
--- a/addons/sale/data/mail_data.xml
+++ b/addons/sale/data/mail_data.xml
@@ -55,7 +55,7 @@
<!--Email template -->
<record id="email_template_edi_sale" model="mail.template">
<field name="name">Sales Order - Send by Email</field>
- <field name="email_from">${(object.user_id.email and '%s &lt;%s&gt;' % (object.user_id.name, object.user_id.email) or '')|safe}</field>
+ <field name="email_from">${(object.user_id.email and '&quot;%s&quot; &lt;%s&gt;' % (object.user_id.name, object.user_id.email) or '')|safe}</field>
<field name="subject">${object.company_id.name} ${object.state in ('draft', 'sent') and 'Quotation' or 'Order'} (Ref ${object.name or 'n/a' })</field>
<field name="partner_to">${object.partner_id.id}</field>
<field name="model_id" ref="sale.model_sale_order"/>
diff --git a/addons/sale/models/product_template.py b/addons/sale/models/product_template.py
index e1ffda478ab..79dffdd719b 100644
--- a/addons/sale/models/product_template.py
+++ b/addons/sale/models/product_template.py
@@ -24,7 +24,7 @@ class ProductTemplate(models.Model):
@api.depends('product_variant_ids.sales_count')
def _sales_count(self):
for product in self:
- product.sales_count = sum([p.sales_count for p in product.product_variant_ids])
+ product.sales_count = sum([p.sales_count for p in product.with_context(active_test=False).product_variant_ids])
@api.multi
def action_view_sales(self):
diff --git a/addons/stock/i18n/nl.po b/addons/stock/i18n/nl.po
index 90ec0e3c55a..1541859ac42 100644
--- a/addons/stock/i18n/nl.po
+++ b/addons/stock/i18n/nl.po
@@ -4454,7 +4454,8 @@ msgstr "Aantallen"
#, python-format
msgid "Quants cannot be created for consumables or services."
msgstr ""
-"Quants kunnen niet worden aangemaakt voor verbruiksartikelen of diensten."
+"Hoeveelheden kunnen niet worden aangemaakt voor verbruiksartikelen of "
+"diensten."
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_picking_type__rate_picking_backorders
@@ -5429,8 +5430,8 @@ msgid ""
"Technical field used to compute whether the mark as todo button should be "
"shown."
msgstr ""
-"Technisch veld waarmee berekend wordt of de markeer als ToDo zichtbaar mag "
-"zijn."
+"Technisch veld waarmee berekend wordt of de markeer als \"Te doen\" "
+"zichtbaar mag zijn."
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_picking__show_validate
diff --git a/addons/stock/models/stock_move.py b/addons/stock/models/stock_move.py
index e621a86c61a..28a0055b5a4 100644
--- a/addons/stock/models/stock_move.py
+++ b/addons/stock/models/stock_move.py
@@ -930,11 +930,15 @@ class StockMove(models.Model):
if not move.move_orig_ids:
if move.procure_method == 'make_to_order':
continue
+ # If we don't need any quantity, consider the move assigned.
+ need = move.product_qty - move.reserved_availability
+ if float_is_zero(need, precision_rounding=move.product_id.uom_id.rounding):
+ assigned_moves |= move
+ continue
# Reserve new quants and create move lines accordingly.
available_quantity = self.env['stock.quant']._get_available_quantity(move.product_id, move.location_id)
if available_quantity <= 0:
continue
- need = move.product_qty - move.reserved_availability
taken_quantity = move._update_reserved_quantity(need, available_quantity, move.location_id, strict=False)
if float_is_zero(taken_quantity, precision_rounding=move.product_id.uom_id.rounding):
continue
diff --git a/addons/stock/report/report_stock_forecast.py b/addons/stock/report/report_stock_forecast.py
index 700aa5455de..1ca3b1195b5 100644
--- a/addons/stock/report/report_stock_forecast.py
+++ b/addons/stock/report/report_stock_forecast.py
@@ -66,7 +66,7 @@ class ReportStockForecat(models.Model):
LEFT JOIN
stock_location source_location ON sm.location_id = source_location.id
WHERE
- sm.state IN ('confirmed','assigned','waiting') and
+ sm.state IN ('confirmed','partially_available','assigned','waiting') and
source_location.usage != 'internal' and dest_location.usage = 'internal'
GROUP BY sm.date_expected,sm.product_id, sm.company_id
UNION ALL
@@ -88,7 +88,7 @@ class ReportStockForecat(models.Model):
LEFT JOIN
stock_location dest_location ON sm.location_dest_id = dest_location.id
WHERE
- sm.state IN ('confirmed','assigned','waiting') and
+ sm.state IN ('confirmed','partially_available','assigned','waiting') and
source_location.usage = 'internal' and dest_location.usage != 'internal'
GROUP BY sm.date_expected,sm.product_id, sm.company_id)
as MAIN
diff --git a/addons/stock/tests/test_move.py b/addons/stock/tests/test_move.py
index f1879f97d06..9b5de71473c 100644
--- a/addons/stock/tests/test_move.py
+++ b/addons/stock/tests/test_move.py
@@ -1074,6 +1074,31 @@ class StockMove(TransactionCase):
self.assertEqual(self.env['stock.quant']._get_available_quantity(self.product2, self.customer_location), 12.0)
self.assertEqual(len(self.env['stock.quant']._gather(self.product2, self.customer_location)), 12)
+ def test_availability_8(self):
+ """ Test the assignment mechanism when the product quantity is decreased on a partially
+ reserved stock move.
+ """
+ # make some stock
+ self.env['stock.quant']._update_available_quantity(self.product1, self.stock_location, 3.0)
+ self.assertAlmostEqual(self.product1.qty_available, 3.0)
+
+ move_partial = self.env['stock.move'].create({
+ 'name': 'test_partial',
+ 'location_id': self.stock_location.id,
+ 'location_dest_id': self.customer_location.id,
+ 'product_id': self.product1.id,
+ 'product_uom': self.uom_unit.id,
+ 'product_uom_qty': 5.0,
+ })
+
+ move_partial._action_confirm()
+ move_partial._action_assign()
+ self.assertAlmostEqual(self.product1.virtual_available, -2.0)
+ self.assertEqual(move_partial.state, 'partially_available')
+ move_partial.product_uom_qty = 3.0
+ move_partial._action_assign()
+ self.assertEqual(move_partial.state, 'assigned')
+
def test_unreserve_1(self):
""" Check that unreserving a stock move sets the products reserved as available and
set the state back to confirmed.
@@ -3917,4 +3942,3 @@ class StockMove(TransactionCase):
picking.button_validate()
self.assertEqual(self.env['stock.quant']._get_available_quantity(self.product1, self.stock_location), 0)
self.assertEqual(self.env['stock.quant']._get_available_quantity(self.product1, self.customer_location), 2)
-
diff --git a/addons/stock_account/views/stock_account_views.xml b/addons/stock_account/views/stock_account_views.xml
index 656d6ea7364..77747cdea5c 100644
--- a/addons/stock_account/views/stock_account_views.xml
+++ b/addons/stock_account/views/stock_account_views.xml
@@ -44,7 +44,7 @@
<field name="model">stock.return.picking</field>
<field name="arch" type="xml">
<xpath expr="//field[@name='product_return_moves']/tree" position="inside">
- <field name="to_refund" widget="boolean_toggle"/>
+ <field name="to_refund"/>
</xpath>
</field>
</record>
diff --git a/addons/survey/wizard/survey_email_compose_message.py b/addons/survey/wizard/survey_email_compose_message.py
index f23d836bc30..80884543585 100644
--- a/addons/survey/wizard/survey_email_compose_message.py
+++ b/addons/survey/wizard/survey_email_compose_message.py
@@ -87,8 +87,6 @@ class SurveyMailComposeMessage(models.TransientModel):
#set url
url = wizard.survey_id.public_url
- url = urls.url_parse(url).path[1:] # dirty hack to avoid incorrect urls
-
if token:
url = url + '/' + token
diff --git a/addons/web/static/src/js/views/basic/basic_model.js b/addons/web/static/src/js/views/basic/basic_model.js
index 4c2b213243f..c6f67bc23fa 100644
--- a/addons/web/static/src/js/views/basic/basic_model.js
+++ b/addons/web/static/src/js/views/basic/basic_model.js
@@ -1990,9 +1990,7 @@ var BasicModel = AbstractModel.extend({
var records = [];
var ids = [];
list = this._applyX2ManyOperations(list);
- if (_.isEmpty(list.data)) {
- return $.when();
- }
+
_.each(list.data, function (localId) {
var record = self.localData[localId];
var data = record._changes || record.data;
@@ -2003,6 +2001,9 @@ var BasicModel = AbstractModel.extend({
ids.push(many2oneRecord.res_id);
model = many2oneRecord.model;
});
+ if (!ids.length) {
+ return $.when();
+ }
return this._rpc({
model: model,
method: 'name_get',
diff --git a/addons/web/static/src/less/list_view.less b/addons/web/static/src/less/list_view.less
index 666b4a8e116..e56e94fff93 100644
--- a/addons/web/static/src/less/list_view.less
+++ b/addons/web/static/src/less/list_view.less
@@ -84,7 +84,6 @@
padding: 0px;
background-style: none;
border-style: none;
- height: 0px;
display: table-cell;
}
diff --git a/addons/web/static/tests/fields/relational_fields_tests.js b/addons/web/static/tests/fields/relational_fields_tests.js
index 67698bc285c..a9e6a27e077 100644
--- a/addons/web/static/tests/fields/relational_fields_tests.js
+++ b/addons/web/static/tests/fields/relational_fields_tests.js
@@ -2551,6 +2551,58 @@ QUnit.module('relational_fields', {
QUnit.module('FieldOne2Many');
+ QUnit.test('New record with a o2m also with 2 new records, ordered, and resequenced', function (assert) {
+ assert.expect(3);
+
+ // Needed to have two new records in a single stroke
+ this.data.partner.onchanges = {
+ foo: function(obj) {
+ obj.p = [
+ [5],
+ [0, 0, {trululu: false}],
+ [0, 0, {trululu: false}],
+ ]
+ }
+ };
+
+ var form = createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch:'<form string="Partners">' +
+ '<field name="foo" />' +
+ '<field name="p">' +
+ '<tree editable="bottom" default_order="int_field">' +
+ '<field name="int_field" widget="handle"/>' +
+ '<field name="trululu"/>' +
+ '</tree>' +
+ '</field>' +
+ '</form>',
+ viewOptions: {
+ mode: 'create',
+ },
+ mockRPC: function (route, args) {
+ assert.step(args.method + ' ' + args.model)
+ return this._super(route, args);
+ },
+ });
+
+ // change the int_field through drag and drop
+ // that way, we'll trigger the sorting and the name_get
+ // of the lines of "p"
+ testUtils.dragAndDrop(
+ form.$('.ui-sortable-handle').eq(1),
+ form.$('tbody tr').first(),
+ {position: 'top'}
+ );
+
+ // Only those two should have been called
+ // name_get on trululu would trigger an traceback
+ assert.verifySteps(['default_get partner', 'onchange partner']);
+
+ form.destroy();
+ });
+
QUnit.test('O2M List with pager, decoration and default_order: add and cancel adding', function (assert) {
assert.expect(3);
diff --git a/addons/web_editor/static/src/js/editor/summernote.js b/addons/web_editor/static/src/js/editor/summernote.js
index b3e06fa1716..657a8bbac8c 100644
--- a/addons/web_editor/static/src/js/editor/summernote.js
+++ b/addons/web_editor/static/src/js/editor/summernote.js
@@ -2255,7 +2255,7 @@ $.summernote.pluginEvents.backColor = function (event, editor, layoutInfo, backC
};
options.onCreateLink = function (sLinkUrl) {
- if (sLinkUrl.indexOf('mailto:') === 0) {
+ if (sLinkUrl.indexOf('mailto:') === 0 || sLinkUrl.indexOf('tel:') === 0) {
// pass
} else if (sLinkUrl.indexOf('@') !== -1 && sLinkUrl.indexOf(':') === -1) {
sLinkUrl = 'mailto:' + sLinkUrl;
diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py
index 62d862afe35..ead68c28274 100644
--- a/addons/website/controllers/main.py
+++ b/addons/website/controllers/main.py
@@ -18,8 +18,9 @@ from odoo import http, models, fields, _
from odoo.http import request
from odoo.tools import pycompat, OrderedSet
from odoo.addons.http_routing.models.ir_http import slug, _guess_mimetype
-from odoo.addons.web.controllers.main import WebClient, Binary, Home
+from odoo.addons.web.controllers.main import WebClient, Binary
from odoo.addons.portal.controllers.portal import pager as portal_pager
+from odoo.addons.portal.controllers.web import Home
logger = logging.getLogger(__name__)
diff --git a/addons/website_crm_partner_assign/models/res_partner.py b/addons/website_crm_partner_assign/models/res_partner.py
index aa0d40af98e..9b47a9f791d 100644
--- a/addons/website_crm_partner_assign/models/res_partner.py
+++ b/addons/website_crm_partner_assign/models/res_partner.py
@@ -34,11 +34,11 @@ class ResPartnerActivation(models.Model):
class ResPartner(models.Model):
_inherit = "res.partner"
- partner_weight = fields.Integer('Level Weight', default=lambda *args: 0,
+ 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.)")
- grade_id = fields.Many2one('res.partner.grade', 'Level')
+ 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)
+ activation = fields.Many2one('res.partner.activation', 'Activation', index=True, track_visibility='onchange')
date_partnership = fields.Date('Partnership Date')
date_review = fields.Date('Latest Partner Review')
date_review_next = fields.Date('Next Partner Review')
diff --git a/addons/website_event/static/src/js/website_event.js b/addons/website_event/static/src/js/website_event.js
index 3aa8691fca7..ebe38118559 100644
--- a/addons/website_event/static/src/js/website_event.js
+++ b/addons/website_event/static/src/js/website_event.js
@@ -20,8 +20,11 @@ return instance.appendTo($form).then(function () {
odoo.define('website_event.website_event', function (require) {
var ajax = require('web.ajax');
+var core = require('web.core');
var Widget = require('web.Widget');
+var _t = core._t;
+
// Catch registration form event, because of JS for attendee details
var EventRegistrationForm = Widget.extend({
start: function () {
@@ -31,7 +34,6 @@ var EventRegistrationForm = Widget.extend({
.off('click')
.removeClass('a-submit')
.click(function (ev) {
- $(this).attr('disabled', true);
self.on_click(ev);
});
});
@@ -43,15 +45,18 @@ var EventRegistrationForm = Widget.extend({
var $form = $(ev.currentTarget).closest('form');
var $button = $(ev.currentTarget).closest('[type="submit"]');
var post = {};
+ $('#registration_form table').siblings('.alert').remove();
$('#registration_form select').each(function () {
post[$(this).attr('name')] = $(this).val();
});
var tickets_ordered = _.some(_.map(post, function (value, key) { return parseInt(value); }));
if (!tickets_ordered) {
- return $('#registration_form table').after(
- '<div class="alert alert-info">Please select at least one ticket.</div>'
- );
+ $('<div class="alert alert-info"/>')
+ .text(_t('Please select at least one ticket.'))
+ .insertAfter('#registration_form table');
+ return $.Deferred();
} else {
+ $button.attr('disabled', true);
return ajax.jsonRpc($form.attr('action'), 'call', post).then(function (modal) {
var $modal = $(modal);
$modal.find('.modal-body > div').removeClass('container'); // retrocompatibility - REMOVE ME in master / saas-19
diff --git a/addons/website_sale/views/templates.xml b/addons/website_sale/views/templates.xml
index a99870fae86..3026da8365e 100644
--- a/addons/website_sale/views/templates.xml
+++ b/addons/website_sale/views/templates.xml
@@ -427,7 +427,7 @@
<div id="o-carousel-product" class="carousel slide" data-ride="carousel" data-interval="0">
<div class="carousel-outer">
<div class="carousel-inner">
- <div t-if="variant_img" class="item active" itemprop="image" t-field="product.product_variant_id.image" t-options="{'widget': 'image', 'class': 'product_detail_img js_variant_img', 'alt-field': 'name', 'zoom': 'image', 'unique': product['__last_update'] + (product.product_variant_id['__last_update'] or '')}"/>
+ <div t-if="variant_img" class="item active" itemprop="image" t-field="product[:1].product_variant_id.image" t-options="{'widget': 'image', 'class': 'product_detail_img js_variant_img', 'alt-field': 'name', 'zoom': 'image', 'unique': product['__last_update'] + (product.product_variant_id['__last_update'] or '')}"/>
<div t-attf-class="item#{'' if variant_img else ' active'}" itemprop="image" t-field="product.image" t-options="{'widget': 'image', 'class': 'product_detail_img', 'alt-field': 'name', 'zoom': 'image', 'unique': product['__last_update']}"/>
<t t-if="len(image_ids)" t-foreach="image_ids" t-as="pimg">
<div class="item" t-field="pimg.image" t-options='{"widget": "image", "class": "product_detail_img", "alt-field": "name", "zoom": "image" }'/>
diff --git a/doc/setup/deploy.rst b/doc/setup/deploy.rst
index 13d4198cceb..dadd1484d46 100644
--- a/doc/setup/deploy.rst
+++ b/doc/setup/deploy.rst
@@ -534,10 +534,14 @@ Supported Browsers
Odoo is supported by multiple browsers for each of its versions. No
distinction is made according to the browser version in order to be
up-to-date. Odoo is supported on the current browser version. The list
-of the supported browsers by Odoo version is the following:
+of the supported browsers is the following:
+
+- IE11,
+- Mozilla Firefox,
+- Google Chrome,
+- Safari,
+- Microsoft Edge
-- **Odoo 9:** IE11, Mozilla Firefox, Google Chrome, Safari, Microsoft Edge
-- **Odoo 10+:** Mozilla Firefox, Google Chrome, Safari, Microsoft Edge
.. [#different-machines]
to have multiple Odoo installations use the same PostgreSQL database,
diff --git a/odoo/addons/base/i18n/tr.po b/odoo/addons/base/i18n/tr.po
index fe58a04c1a8..ff3637e92d3 100644
--- a/odoo/addons/base/i18n/tr.po
+++ b/odoo/addons/base/i18n/tr.po
@@ -8009,7 +8009,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,summary:base.module_web_grid
msgid "Basic 2D Grid view for odoo"
-msgstr ""
+msgstr "Odoo için Temel 2D Tablo görünümü"
#. module: base
#: model:ir.module.module,summary:base.module_quality
@@ -8020,6 +8020,7 @@ msgstr ""
#: model:ir.module.module,summary:base.module_iap
msgid "Basic models and helpers to support In-App purchases."
msgstr ""
+"Uygulama içi satın alımları destekleyecek temel modeller ve yardımcılar."
#. module: base
#: model:ir.module.module,shortdesc:base.module_account_batch_deposit
@@ -8029,7 +8030,7 @@ msgstr "Toplu Mevduat"
#. module: base
#: selection:res.country,name_position:0
msgid "Before Address"
-msgstr ""
+msgstr "Adresten Önce"
#. module: base
#: selection:res.currency,position:0
@@ -8041,7 +8042,7 @@ msgstr "Tutar Önce"
#, python-format
msgid ""
"Before clicking on 'Change Password', you have to write a new password."
-msgstr ""
+msgstr "'Şifreyi Değiştir' e tıklamadan önce, yeni bir şifre yazmalısınız."
#. module: base
#: model:res.country,name:base.by
@@ -8056,7 +8057,7 @@ msgstr "Belçika Intrastat beyannamesi"
#. module: base
#: model:ir.module.module,shortdesc:base.module_pos_blackbox_be
msgid "Belgian Registered Cash Register"
-msgstr ""
+msgstr "Belçika Kaydedilmiş Kasa Hareketleri "
#. module: base
#: model:res.country,name:base.be
@@ -8086,7 +8087,7 @@ msgstr "Belçika - Bordro"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_be_hr_payroll_fleet
msgid "Belgium - Payroll - Fleet"
-msgstr ""
+msgstr "Belçika - Bordro - Filo"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_be_hr_payroll_account
@@ -8121,7 +8122,7 @@ msgstr "Bütan"
#. module: base
#: model:ir.module.module,summary:base.module_mrp_plm
msgid "Bill of Materials, Routings, Versions, Engineering Change Orders"
-msgstr ""
+msgstr "Ürün Reçeteleri, Rotalar, Sürümler, Mühendislik Değişim Siparişleri"
#. module: base
#: selection:ir.property,type:0
@@ -8151,12 +8152,12 @@ msgstr "Bağlantı Modeli"
#: model:ir.model.fields,field_description:base.field_ir_actions_server__binding_type
#: model:ir.model.fields,field_description:base.field_ir_cron__binding_type
msgid "Binding Type"
-msgstr ""
+msgstr "Bağlantı Türü"
#. module: base
#: model:ir.module.module,shortdesc:base.module_hw_blackbox_be
msgid "Blackbox Hardware Driver"
-msgstr ""
+msgstr "Blackbox Donanım Sürücüsü"
#. module: base
#: model:ir.module.module,shortdesc:base.module_website_blog
@@ -8196,7 +8197,7 @@ msgstr "Bootswatch Tema"
#. module: base
#: model:res.country,name:base.ba
msgid "Bosnia and Herzegovina"
-msgstr ""
+msgstr "Bosna Hersek"
#. module: base
#: model:res.country,name:base.bw
@@ -8216,7 +8217,7 @@ msgstr "Bouvet Adası"
#. module: base
#: selection:res.company,external_report_layout:0
msgid "Boxed"
-msgstr ""
+msgstr "Kutulanmış"
#. module: base
#: model:res.country,name:base.br
@@ -8242,7 +8243,7 @@ msgstr "Web sitesi ve acquirers köprü modülü."
#: model:ir.module.module,description:base.module_website_helpdesk
#: model:ir.module.module,summary:base.module_website_helpdesk
msgid "Bridge module for helpdesk modules using the website."
-msgstr ""
+msgstr "Websitesini kullanarak yardım masası modülleri için köprü modülü."
#. module: base
#: model:res.country,name:base.io
@@ -8298,7 +8299,7 @@ msgstr "İle"
#. module: base
#: model:res.partner.industry,full_name:base.res_partner_industry_C
msgid "C MANUFACTURING"
-msgstr ""
+msgstr "C Üretimi"
#. module: base
#: selection:report.paperformat,format:0
@@ -8318,7 +8319,7 @@ msgstr "CRM Ödüllendirme"
#. module: base
#: model:ir.module.module,shortdesc:base.module_crm_livechat
msgid "CRM Livechat"
-msgstr ""
+msgstr "CRM Canlı Sohbet"
#. module: base
#: selection:base.language.export,format:0
@@ -8349,7 +8350,7 @@ msgstr ""
#. module: base
#: model:res.country,name:base.kh
msgid "Cambodia"
-msgstr ""
+msgstr "Kamboçya"
#. module: base
#: model:res.country,name:base.cm
@@ -8362,6 +8363,8 @@ msgstr "Kamerun"
msgid ""
"Can not create Many-To-One records indirectly, import the field separately"
msgstr ""
+"Dolaylı olarak Many-To-One kayıtları oluşturamaz, alanı ayrı olarak içe "
+"aktarabilir"
#. module: base
#: code:addons/base/models/ir_module.py:616
@@ -8373,7 +8376,7 @@ msgstr "'%s' modülü güncellenemiyor. Yüklü değil"
#: code:addons/base/models/ir_model.py:669
#, python-format
msgid "Can only rename one field at a time!"
-msgstr ""
+msgstr "Bir seferde sadece bir alanı yeniden adlandırabilir!"
#. module: base
#: model:res.country,name:base.ca
@@ -8439,12 +8442,13 @@ msgstr "Yapılandırmasını çoğaltması yamazsınız!"
#, python-format
msgid "Cannot rename/delete fields that are still present in views:"
msgstr ""
+"Görünümlerde hâlâ mevcut olan alanları yeniden adlandıramaz / silemezsiniz:"
#. module: base
#: code:addons/base/models/res_lang.py:228
#, python-format
msgid "Cannot unactivate a language that is currently used by users."
-msgstr ""
+msgstr "Kullanıcı tarafından kullanılan bir dili pasif hale getiremez."
#. module: base
#: model:res.country,name:base.cv
@@ -8506,7 +8510,7 @@ msgstr "Parolayı değiştir"
#. module: base
#: model:ir.ui.view,arch_db:base.view_country_form
msgid "Change the way addresses are displayed in reports"
-msgstr ""
+msgstr "Adreslerin raporlarda gösterilme şeklini değiştirin"
#. module: base
#: code:addons/base/models/res_partner.py:337
@@ -8517,6 +8521,10 @@ msgid ""
"a new contact should be created under that new company. You can use the "
"\"Discard\" button to abandon this change."
msgstr ""
+"Bir kişinin şirketini değiştirmek, doğru bir şekilde ayarlanmadığında "
+"yapılmalıdır. Var olan bir kişi yeni bir şirket için çalışmaya başlarsa, o "
+"zaman yeni şirketin altında yeni bir bağlantı kurulmalıdır. Bu değişikliği "
+"iptal etmek için \"Atma\" düğmesini kullanabilirsiniz."
#. module: base
#: code:addons/base/models/ir_model.py:656
@@ -8531,6 +8539,8 @@ msgid ""
"Changing the type of a field is not yet supported. Please drop it and create"
" it again!"
msgstr ""
+"Bir alan türünün değişikliği henüz desteklenmiyor. Lütfen bunu bırakın ve "
+"yeniden oluşturun!"
#. module: base
#: selection:ir.property,type:0
@@ -8550,12 +8560,12 @@ msgstr "Çek Yazdırma"
#. module: base
#: model:ir.module.module,shortdesc:base.module_account_check_printing
msgid "Check Printing Base"
-msgstr ""
+msgstr "Çek Yazdırma Temeli"
#. module: base
#: model:ir.module.module,shortdesc:base.module_hr_expense_check
msgid "Check Printing in Expenses"
-msgstr ""
+msgstr "Giderlerde Çek Yazdırma"
#. module: base
#: model:ir.model.fields,help:base.field_res_partner__is_company
@@ -8567,7 +8577,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,summary:base.module_account_check_printing
msgid "Check printing commons"
-msgstr ""
+msgstr "Genel Çek Yazdırma"
#. module: base
#: model:ir.model.fields,help:base.field_res_partner__customer
@@ -8684,6 +8694,8 @@ msgid ""
"Choose a subview of partners that includes only address fields, to change "
"the way users can input addresses."
msgstr ""
+"Kullanıcıların adres girme şeklini değiştirmek için yalnızca adres "
+"alanlarını içeren iş ortaklarının alt görünümünü seçin."
#. module: base
#: model:ir.model.fields,help:base.field_ir_mail_server__smtp_encryption
@@ -8693,6 +8705,10 @@ msgid ""
"- TLS (STARTTLS): TLS encryption is requested at start of SMTP session (Recommended)\n"
"- SSL/TLS: SMTP sessions are encrypted with SSL/TLS through a dedicated port (default: 465)"
msgstr ""
+"Bağlantı şifreleme şemasını seçin:\n"
+"- Yok: SMTP oturumları açık metin içinde yapılır.\n"
+"- TLS (STARTTLS): SMTP oturumunun başlangıcında TLS şifrelemesi istenir (Tavsiye edilir)\n"
+"- SSL / TLS: SMTP oturumları özel bir port üzerinden SSL / TLS ile şifrelenir (varsayılan: 465)"
#. module: base
#: model:res.country,name:base.cx
@@ -8715,12 +8731,12 @@ msgstr "Semt/İlçe"
#. module: base
#: model:ir.module.module,shortdesc:base.module_base_address_city
msgid "City Addresses"
-msgstr ""
+msgstr "Şehir "
#. module: base
#: selection:res.company,external_report_layout:0
msgid "Clean"
-msgstr ""
+msgstr "Temizle"
#. module: base
#: model:ir.ui.view,arch_db:base.view_base_module_update
@@ -8777,6 +8793,7 @@ msgstr "İşbirliği Bloknotları"
#: model:ir.module.module,summary:base.module_account_sepa_direct_debit
msgid "Collect payments from your customers through SEPA direct debit."
msgstr ""
+"SEPA doğrudan ödeme yoluyla, müşterilerinizden ödemelerinizi toplayın."
#. module: base
#: model:res.country,name:base.co
@@ -8819,12 +8836,12 @@ msgstr "Sütun 2"
#. module: base
#: model:ir.model.fields,help:base.field_ir_model_fields__column2
msgid "Column referring to the record in the comodel table"
-msgstr ""
+msgstr "Comodel tablosundaki reklama başvuran sütun"
#. module: base
#: model:ir.model.fields,help:base.field_ir_model_fields__column1
msgid "Column referring to the record in the model table"
-msgstr ""
+msgstr "Model tablosundaki kayda başvuran sütun"
#. module: base
#: selection:report.paperformat,format:0
@@ -8859,7 +8876,7 @@ msgstr "Ticari Varlık"
#. module: base
#: model:ir.module.module,summary:base.module_pos_data_drinks
msgid "Common Drinks data for points of sale"
-msgstr ""
+msgstr "Satış noktaları için ortak içecek verileri "
#. module: base
#: model:ir.ui.view,arch_db:base.view_res_bank_form
@@ -8885,7 +8902,7 @@ msgstr "Firmalar"
#. module: base
#: model:ir.ui.view,arch_db:base.view_users_form
msgid "Companies count"
-msgstr ""
+msgstr "Firma sayıları"
#. module: base
#: model:ir.model.fields,field_description:base.field_ir_attachment__company_id
@@ -8924,7 +8941,7 @@ msgstr "Firma Adı"
#: model:ir.model.fields,field_description:base.field_res_partner__commercial_company_name
#: model:ir.model.fields,field_description:base.field_res_users__commercial_company_name
msgid "Company Name Entity"
-msgstr ""
+msgstr "Firma Adı Varlığı"
#. module: base
#: model:ir.actions.act_window,name:base.ir_property_form
@@ -8951,7 +8968,7 @@ msgstr "Firma Türü"
#. module: base
#: model:ir.module.module,shortdesc:base.module_project_timesheet_forecast_sale
msgid "Compare timesheets and forecast for your projects"
-msgstr ""
+msgstr "Projeleriniz için zaman çizelgelerini ve öngörüleri kıyaslayın"
#. module: base
#: model:ir.model.fields,field_description:base.field_res_partner__contact_address
@@ -9002,7 +9019,7 @@ msgstr "Yapılandırma Sihirbazı Adımları"
#. module: base
#: model:ir.actions.server,name:base.action_run_ir_action_todo
msgid "Config: Run Remaining Action Todo"
-msgstr ""
+msgstr "Yapılandır: Yapılacak Kalan Eylemleri Çalıştır"
#. module: base
#: model:ir.ui.menu,name:base.menu_reporting_config
@@ -9025,7 +9042,7 @@ msgstr "Yapılandırma Sihirbazları"
#. module: base
#: model:ir.module.module,summary:base.module_timesheet_grid_sale
msgid "Configure timesheet invoicing"
-msgstr ""
+msgstr "Zaman çizelgesi faturalamayı yapılandır"
#. module: base
#: model:ir.ui.view,arch_db:base.view_base_module_uninstall
@@ -9065,7 +9082,7 @@ msgstr ""
#: code:addons/base/models/ir_mail_server.py:172
#, python-format
msgid "Connection Test Succeeded! Everything seems properly set up!"
-msgstr ""
+msgstr "Bağlantı Testi Başarılı! Her şey düzgün ayarlanmış görünüyor!"
#. module: base
#: model:ir.model.fields,field_description:base.field_ir_model_constraint__name
@@ -9086,7 +9103,7 @@ msgstr "Aynı ada sahip modül benzersiz kısıtlamalardır."
#. module: base
#: model:res.partner.industry,name:base.res_partner_industry_F
msgid "Construction"
-msgstr ""
+msgstr "Yap"
#. module: base
#: model:ir.model,name:base.model_res_partner
@@ -9113,7 +9130,7 @@ msgstr "İletişim Formu"
#. module: base
#: model:ir.module.module,shortdesc:base.module_website_crm_phone_validation
msgid "Contact Form Number Validation"
-msgstr ""
+msgstr "İletişim Form Numarası Doğrulaması"
#. module: base
#: model:ir.ui.view,arch_db:base.view_partner_form
@@ -9217,7 +9234,7 @@ msgstr "E-posta adresi olmayan kişi oluşturulamadı!"
#. module: base
#: model:ir.model.fields,field_description:base.field_ir_model__count
msgid "Count (incl. archived)"
-msgstr ""
+msgstr "Say ( arşivleri dahil et)"
#. module: base
#: model:ir.actions.act_window,name:base.action_country
@@ -9288,7 +9305,7 @@ msgstr "Erişim Yetkisi Oluştur"
#. module: base
#: model:ir.ui.view,arch_db:base.view_server_action_form
msgid "Create Contextual Action"
-msgstr ""
+msgstr "Bağlamsal Eylem Oluştur"
#. module: base
#: model:ir.model.fields,field_description:base.field_ir_logging__create_date
@@ -9310,12 +9327,12 @@ msgstr "Menü Oluştur"
#. module: base
#: model:ir.module.module,summary:base.module_website_form_project
msgid "Create Tasks From Contact Form"
-msgstr ""
+msgstr "İletişim Formundan Görevler Oluştur"
#. module: base
#: model:ir.module.module,summary:base.module_crm_project
msgid "Create Tasks from Leads"
-msgstr ""
+msgstr "Müşteri Adaylarından Görevler Oluştur"
#. module: base
#: model:ir.ui.view,arch_db:base.view_model_menu_create
@@ -9408,12 +9425,13 @@ msgstr "Firma oluştur"
#. module: base
#: model:ir.module.module,summary:base.module_crm_livechat
msgid "Create lead from livechat conversation"
-msgstr ""
+msgstr "Canlı görüşmelerden müşteri adayı oluştur"
#. module: base
#: model:ir.module.module,description:base.module_crm_livechat
msgid "Create new lead with using /lead command in the channel"
msgstr ""
+"Kanalda / müşteri adayı komutunu kullanarak yeni müşteri adayı oluşturun"
#. module: base
#: model:ir.module.module,summary:base.module_survey
@@ -9604,7 +9622,7 @@ msgstr "Satış Noktası için kredi kartı desteği"
#. module: base
#: model:ir.module.module,shortdesc:base.module_crm_phone_validation
msgid "Crm Phone Numbers Validation"
-msgstr ""
+msgstr "CRM Telefon Numarası Doğrulama"
#. module: base
#: model:res.country,name:base.hr
@@ -9614,12 +9632,12 @@ msgstr "Hırvatistan"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_hr
msgid "Croatia - Accounting (RRIF 2012)"
-msgstr ""
+msgstr "Hırvatistan - Muhasebe (RRIF 2012)"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_hr_reports
msgid "Croatia - RRIF 2012 COA - Accounting Reports"
-msgstr ""
+msgstr "Hırvatistan - RRIF 2012 COA - Muhasebe Raporları"
#. module: base
#: model:res.country,name:base.cu
@@ -9687,7 +9705,7 @@ msgstr "Para Birimi"
#. module: base
#: model:ir.model.fields,help:base.field_res_currency__currency_unit_label
msgid "Currency Unit Name"
-msgstr ""
+msgstr "Para Birimi Adı"
#. module: base
#: model:ir.model.fields,help:base.field_res_currency__symbol
@@ -9756,13 +9774,13 @@ msgstr "Özel alanların 'x_' ile başlayan bir adı olmalıdır !"
#. module: base
#: model:ir.model.fields,field_description:base.field_res_country__name_position
msgid "Customer Name Position"
-msgstr ""
+msgstr "Müşteri Adı Pozisyonu"
#. module: base
#: model:ir.module.module,shortdesc:base.module_portal
#: model:ir.module.module,summary:base.module_portal
msgid "Customer Portal"
-msgstr ""
+msgstr "Müşteri Portalı"
#. module: base
#: model:ir.module.module,shortdesc:base.module_rating
@@ -9817,17 +9835,17 @@ msgstr "Çek Cumhuriyeti"
#. module: base
#: model:res.country,name:base.ci
msgid "Côte d'Ivoire"
-msgstr ""
+msgstr "Fil Dişi Sahili"
#. module: base
#: model:res.partner.industry,full_name:base.res_partner_industry_D
msgid "D ELECTRICITY,GAS,STEAM AND AIR CONDITIONING SUPPLY"
-msgstr ""
+msgstr "D Elektrik, gaz, buhar ve iklimlendirme arzı"
#. module: base
#: model:ir.module.module,shortdesc:base.module_delivery_dhl
msgid "DHL Shipping"
-msgstr ""
+msgstr "DHL Kargo"
#. module: base
#: selection:report.paperformat,format:0
@@ -9849,7 +9867,7 @@ msgstr "Verileri xml dönüştürme testler için"
#. module: base
#: model:ir.ui.view,arch_db:base.view_server_action_form
msgid "Data to Write"
-msgstr ""
+msgstr "Yazma verisi"
#. module: base
#: model:ir.ui.view,arch_db:base.ir_logging_search_view
@@ -9983,7 +10001,7 @@ msgstr "Diğer Kişileri Tekilleştir"
#. module: base
#: model:ir.model.fields,field_description:base.field_ir_filters__is_default
msgid "Default Filter"
-msgstr ""
+msgstr "Varsayılan Filtre"
#. module: base
#: model:ir.module.module,shortdesc:base.module_theme_default
@@ -9993,7 +10011,7 @@ msgstr "Öntanımlı Tema"
#. module: base
#: model:ir.model.fields,field_description:base.field_ir_default__json_value
msgid "Default Value (JSON format)"
-msgstr ""
+msgstr "Varsayılan Değer (JSON formatı)"
#. module: base
#: model:ir.model.fields,help:base.field_ir_actions_act_window__limit
@@ -10009,6 +10027,7 @@ msgstr "Varsayılan kağıt formatı?"
#: model:ir.module.module,description:base.module_theme_default
msgid "Default website theme to showcase customization possibilities."
msgstr ""
+"Özelleştirme olanaklarını sergilemek için varsayılan web sitesi teması."
#. module: base
#: model:ir.module.module,shortdesc:base.module_account_deferred_revenue
@@ -10018,12 +10037,12 @@ msgstr "Ertelenmiş Gelirler"
#. module: base
#: model:ir.module.module,shortdesc:base.module_sale_subscription_asset
msgid "Deferred Revenues Management for Subscriptions"
-msgstr ""
+msgstr "Abonelikler için Ertelenmiş Gelir Yönetimi"
#. module: base
#: model:ir.module.module,shortdesc:base.module_account_tax_python
msgid "Define Taxes as Python Code"
-msgstr ""
+msgstr "Vergileri Python Kodu Olarak Tanımlayın"
#. module: base
#: model:ir.ui.view,arch_db:base.module_form
@@ -10048,7 +10067,7 @@ msgstr "Erişim Yetkilerini Sil"
#. module: base
#: model:ir.module.module,shortdesc:base.module_delivery_barcode
msgid "Delivery Barcode Scanning"
-msgstr ""
+msgstr "Teslimat Barkodu Taraması"
#. module: base
#: model:ir.module.module,shortdesc:base.module_delivery
@@ -10063,7 +10082,7 @@ msgstr "Demo Veri"
#. module: base
#: model:res.country,name:base.cd
msgid "Democratic Republic of the Congo"
-msgstr ""
+msgstr "Demokratik Kongo Cumhuriyeti"
#. module: base
#: model:res.country,name:base.dk
@@ -10084,6 +10103,9 @@ msgid ""
"\n"
" name, partner_id.name"
msgstr ""
+"Hesaplama yönteminin bağlılıkları; virgül ile ayrılmış alan adlarının listesi, şöyle\n"
+"\n"
+"ad, partner_id.name"
#. module: base
#: model:ir.model.fields,field_description:base.field_ir_module_module_dependency__depend_id
@@ -10108,7 +10130,7 @@ msgstr "Açıklama HTML"
#. module: base
#: model:ir.module.module,summary:base.module_mass_mailing_themes
msgid "Design gorgeous mails"
-msgstr ""
+msgstr "Harika mailler tasarlayın"
#. module: base
#: model:ir.module.module,summary:base.module_mass_mailing
@@ -10144,6 +10166,8 @@ msgid ""
"Determines where the customer/company name should be placed, i.e. after or "
"before the address."
msgstr ""
+"Müşteri/firma isimlerinin nerede olacağını belirler, örn. adresten önce yada"
+" sonra."
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_de
@@ -10153,17 +10177,17 @@ msgstr "Almanya - Muhasebe"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_de_reports
msgid "Deutschland - Accounting Reports"
-msgstr ""
+msgstr "Almanya - Muhasebe Raporları"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_de_skr03
msgid "Deutschland SKR03 - Accounting"
-msgstr ""
+msgstr "Almanya SKR03 - Muhasebe"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_de_skr04
msgid "Deutschland SKR04 - Accounting"
-msgstr ""
+msgstr "Almanya SKR04 - Muhasebe"
#. module: base
#: selection:ir.ui.view,type:0
@@ -10312,7 +10336,7 @@ msgstr "Görünüm Adı"
#. module: base
#: model:ir.module.module,summary:base.module_website_studio
msgid "Display Website Elements in Studio"
-msgstr ""
+msgstr "Studio'daki Website Elemanlarını Göster"
#. module: base
#: model:ir.model.fields,field_description:base.field_report_paperformat__header_line
@@ -10323,11 +10347,12 @@ msgstr "Bir başlık satırı görüntüleme"
#: model:ir.ui.view,arch_db:base.view_server_action_form
msgid "Display an option in the 'More' top-menu in order to run this action."
msgstr ""
+"Bu eylemi çalıştırmak için 'Diğer' üst menüsünde bir seçenek görüntüleyin."
#. module: base
#: model:ir.ui.view,arch_db:base.act_report_xml_view
msgid "Display an option on related documents to print this report"
-msgstr ""
+msgstr "Bu raporu yazdırmak için ilgili belgelerdeki bir seçeneği görüntüle"
#. module: base
#: model:ir.actions.act_window,help:base.action_country_group
@@ -10335,6 +10360,9 @@ msgid ""
"Display and manage the list of all countries group. You can create or delete"
" country group to make sure the ones you are working on will be maintained."
msgstr ""
+"Tüm ülkeler grubunun listesini görüntüleyin ve yönetin. Üzerinde "
+"çalıştığınız şeylerin korunacağından emin olmak için ülke grubu "
+"oluşturabilir veya silebilirsiniz."
#. module: base
#: model:ir.actions.act_window,help:base.action_country
@@ -10460,12 +10488,12 @@ msgstr "Süreler negatif olamaz"
#. module: base
#: model:res.partner.industry,full_name:base.res_partner_industry_E
msgid "E WATER SUPPLY;SEWERAGE,WASTE MANAGEMENT AND REMEDIATION ACTIVITIES"
-msgstr ""
+msgstr "E Su temini; Kanalizasyon, atık yönetimi ve çözüm faaliyetleri "
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_mx_edi
msgid "EDI for Mexico"
-msgstr ""
+msgstr "Meksika için EDI"
#. module: base
#: model:ir.module.module,shortdesc:base.module_hw_escpos
@@ -10485,7 +10513,7 @@ msgstr "Her model eşşiz olmalı!"
#. module: base
#: model:ir.module.module,summary:base.module_web_studio
msgid "Easily create and customize your applications"
-msgstr ""
+msgstr "Uygulamanızı kolayca oluşturun ve kişiselleştirin"
#. module: base
#: model:res.country,name:base.ec
@@ -10561,6 +10589,31 @@ msgid ""
"* Nhomar Hernandez <nhomar@vauxoo.com> (Planner/Auditor)\n"
"* Luis Torres <luis_t@vauxoo.com> (Developer)\n"
msgstr ""
+"Meksika için Elektronik Muhasebe ve Mali Raporlar\n"
+"\n"
+"Meksika Elektronik Faturasına mali raporları ekleyin\n"
+"\n"
+"- COA\n"
+"- Geçici Mizan\n"
+"- Yevmiye Kalemleri\n"
+"\n"
+"DIOT gibi başka operatör raporlar ekleyin.\n"
+"\n"
+"- DIOT\n"
+"\n"
+"Bilinen özellik sızması :\n"
+"\n"
+"- Mali beyan edilen belgelerin geçmişini sunmak için oluşturulan xml'yi kaydedin.\n"
+"- Bu modülün kapsamını arttırmak ve ileride regresyonlardan kaçınmak için birim testleri.\n"
+"\n"
+"Yapılandırma\n"
+"\n"
+"Bu modülü yapılandırmak için, hesap çizelgenizin l10n_mx verisine ve yapısına bağlı olması şiddetle tavsiye edilir. Eğer CoA, l10n_mx'in ne yaptığına bağlı değilse bunu daha sonra ayarlayabilirsiniz, ancak fazladan manuel çalışmaya ihtiyacınız olacaktır.\n"
+"\n"
+"Katkıda bulunanlar\n"
+"* Nhomar Hernandez <nhomar@vauxoo.com> (Planlayıcı/Denetleyici)\n"
+"* Luis Torres\n"
+"<luis_t@vauxoo.com> (Geliştirici)\n"
#. module: base
#: code:addons/base/models/ir_ui_view.py:641
@@ -10592,7 +10645,7 @@ msgstr "E-posta Ağ Geçidi"
#. module: base
#: model:ir.module.module,shortdesc:base.module_mass_mailing
msgid "Email Marketing"
-msgstr ""
+msgstr "E-posta Pazarlama"
#. module: base
#: model:ir.ui.view,arch_db:base.view_users_form_simple_modif
@@ -10631,12 +10684,12 @@ msgstr "Personeller"
#: code:addons/base/models/ir_model.py:430
#, python-format
msgid "Empty dependency in %r"
-msgstr ""
+msgstr "% r'de boş bağımlılık"
#. module: base
#: model:res.partner.industry,name:base.res_partner_industry_D
msgid "Energy supply"
-msgstr ""
+msgstr "Enerji temini"
#. module: base
#: model:ir.ui.view,arch_db:base.view_server_action_form
@@ -10659,7 +10712,7 @@ msgstr ""
#. module: base
#: model:res.partner.industry,name:base.res_partner_industry_R
msgid "Entertainment"
-msgstr ""
+msgstr "Eğlence"
#. module: base
#: model:res.country,name:base.gq
@@ -10670,7 +10723,7 @@ msgstr "Ekvatoral Gine"
#: model:ir.module.module,summary:base.module_hr_maintenance
#: model:ir.module.module,summary:base.module_maintenance
msgid "Equipments, Assets, Internal Hardware, Allocation Tracking"
-msgstr ""
+msgstr "Ekipmanlar, Varlıklar, İç Donanım, Tahsis Takibi"
#. module: base
#: model:res.country,name:base.er
@@ -10681,19 +10734,19 @@ msgstr "Eritre"
#: code:addons/base/models/res_partner.py:86
#, python-format
msgid "Error ! You can not create recursive tags."
-msgstr ""
+msgstr "Hata ! Tekrarlanan etiketler oluşturamazsınız."
#. module: base
#: code:addons/base/models/res_company.py:234
#, python-format
msgid "Error ! You cannot create recursive companies."
-msgstr ""
+msgstr "Hata! Tekrarlayan firmalar oluşturamazsınız."
#. module: base
#: code:addons/base/models/report_paperformat.py:68
#, python-format
msgid "Error ! You cannot select a format AND specific page width/height."
-msgstr ""
+msgstr "Hata! Spesifik bir sayfa genişliği/yüksekliği formatı seçemezsiniz."
#. module: base
#: code:addons/base/models/ir_ui_view.py:491
@@ -10715,13 +10768,13 @@ msgstr "Hata detayları:"
#: code:addons/models.py:987
#, python-format
msgid "Error while validating constraint"
-msgstr ""
+msgstr "Kısıtlama doğrulanırken hata oluştu"
#. module: base
#: code:addons/base/models/ir_ui_menu.py:76
#, python-format
msgid "Error! You cannot create recursive menus."
-msgstr ""
+msgstr "Hata! Tekrarlanan menüler oluşturamazsınız. "
#. module: base
#: model:res.country,name:base.ee
@@ -10741,7 +10794,7 @@ msgstr "Etiyopya - Muhasebe"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_et_reports
msgid "Ethiopia - Accounting Reports"
-msgstr ""
+msgstr "Etiyopya - Muhasebe Raporları1"
#. module: base
#: model:res.country.group,name:base.europe
@@ -10756,17 +10809,17 @@ msgstr "Değerlendirme Tipi"
#. module: base
#: model:ir.module.module,shortdesc:base.module_event_barcode
msgid "Event Barcode Scanning"
-msgstr ""
+msgstr "Etkinlik Barkod Tarama"
#. module: base
#: model:ir.module.module,shortdesc:base.module_event_barcode_mobile
msgid "Event Barcode in Mobile"
-msgstr ""
+msgstr "Moıbil için Etkinlik Barkodu"
#. module: base
#: model:ir.module.module,summary:base.module_event_barcode_mobile
msgid "Event Barcode scan in Mobile"
-msgstr ""
+msgstr "Mobilde Etkinlik Barkodu Tarama"
#. module: base
#: model:ir.module.category,name:base.module_category_event_management
@@ -10786,7 +10839,7 @@ msgstr "Etkinlik Satışı"
#. module: base
#: model:ir.ui.view,arch_db:base.view_server_action_form
msgid "Example of Python code"
-msgstr ""
+msgstr "Python kodu örnekleri"
#. module: base
#: model:ir.module.module,description:base.module_gamification_sale_crm
@@ -10819,28 +10872,28 @@ msgstr "Bunu içeren kişiler hariç"
#. module: base
#: model:ir.model.fields,field_description:base.field_ir_module_module_exclusion__exclusion_id
msgid "Exclusion Module"
-msgstr ""
+msgstr "İhraç Modülü"
#. module: base
#: model:ir.model.fields,field_description:base.field_ir_module_module__exclusion_ids
#: model:ir.ui.view,arch_db:base.module_form
msgid "Exclusions"
-msgstr ""
+msgstr "İstisnalar"
#. module: base
#: model:ir.model.fields,field_description:base.field_ir_module_category__exclusive
msgid "Exclusive"
-msgstr ""
+msgstr "İstisna"
#. module: base
#: model:ir.ui.view,arch_db:base.ir_cron_view_form
msgid "Execute Every"
-msgstr ""
+msgstr "Her şeyi Yürüt"
#. module: base
#: selection:ir.actions.server,state:0
msgid "Execute Python Code"
-msgstr ""
+msgstr "Python Kodunu Uygula"
#. module: base
#: selection:ir.actions.server,state:0
@@ -10913,12 +10966,12 @@ msgstr "Çevirileri Dışa Aktar"
#. module: base
#: model:ir.module.module,summary:base.module_hr_expense_sepa
msgid "Export expenses payments as SEPA Credit Transfer files"
-msgstr ""
+msgstr "Gider ödemelerini, SEPA Kredi Transfer dosyaları olarak dışa aktarın."
#. module: base
#: model:ir.module.module,summary:base.module_account_sepa
msgid "Export payments as SEPA Credit Transfer files"
-msgstr ""
+msgstr "Ödemeleri, SEPA Kredi Transfer dosyaları olarak dışarı aktarın."
#. module: base
#: model:ir.model.fields,help:base.field_ir_server_object_lines__value
@@ -10927,11 +10980,14 @@ msgid ""
"When Formula type is selected, this field may be a Python expression that can use the same values as for the code field on the server action.\n"
"If Value type is selected, the value will be used directly without evaluation."
msgstr ""
+"Bir değer belirtimi içeren ifade.\n"
+" Formül türü seçildiğinde, bu alan sunucu eylemi üzerindeki kod alanıyla aynı değerleri kullanabilen bir Python ifadesi olabilir.\n"
+" Değer türü seçiliyse, değer doğrudan değerlendirme olmadan kullanılır."
#. module: base
#: model:ir.module.module,shortdesc:base.module_base_address_extended
msgid "Extended Addresses"
-msgstr ""
+msgstr "Genişletilmiş Adresler"
#. module: base
#: selection:ir.ui.view,mode:0
@@ -11003,12 +11059,12 @@ msgstr "Ek Araçlar"
#. module: base
#: model:res.partner.industry,name:base.res_partner_industry_U
msgid "Extraterritorial"
-msgstr ""
+msgstr "Yasal Sınırların Dışında"
#. module: base
#: model:res.partner.industry,full_name:base.res_partner_industry_F
msgid "F CONSTRUCTION"
-msgstr ""
+msgstr "F Yapı"
#. module: base
#: model:res.country,name:base.fk
@@ -11034,7 +11090,7 @@ msgstr "İller/Eyaletler"
#. module: base
#: model:ir.module.module,shortdesc:base.module_delivery_fedex
msgid "Fedex Shipping"
-msgstr ""
+msgstr "Fedex Kargo"
#. module: base
#: model:ir.module.module,summary:base.module_l10n_fr_fec
@@ -11099,25 +11155,25 @@ msgstr "Alan"
#: code:addons/base/models/ir_model.py:200
#, python-format
msgid "Field \"Model\" cannot be modified on models."
-msgstr ""
+msgstr "Alan 'Modeli', modeller üzerinden değiştirilemez."
#. module: base
#: code:addons/base/models/ir_model.py:204
#, python-format
msgid "Field \"Transient Model\" cannot be modified on models."
-msgstr ""
+msgstr "Alan \"Geçici Model\", modellerde değiştirilemez."
#. module: base
#: code:addons/base/models/ir_model.py:202
#, python-format
msgid "Field \"Type\" cannot be modified on models."
-msgstr ""
+msgstr "Alan 'Tür', modeller üzerinden değiştirilemez."
#. module: base
#: code:addons/base/models/ir_ui_view.py:1047
#, python-format
msgid "Field %r used in attributes must be present in view but is missing:"
-msgstr ""
+msgstr "Niteliklerde kullanılan % r alanı görünmelidir, ancak mevcut değil:"
#. module: base
#: model:ir.model.fields,field_description:base.field_ir_model_fields__help
@@ -11157,11 +11213,13 @@ msgstr "`%(field_name)s` alanı mevcut değil"
msgid ""
"Field names can only contain characters, digits and underscores (up to 63)."
msgstr ""
+"Alan isimleri sadece karakterler, rakamlar ve alt çizgi içerebilir (63e "
+"kadar)"
#. module: base
#: sql_constraint:ir.model.fields:0
msgid "Field names must be unique per model."
-msgstr ""
+msgstr "Alan isimleri her model için benzersiz olmalıdır."
#. module: base
#: model:ir.actions.act_window,name:base.action_model_fields
@@ -11184,7 +11242,7 @@ msgstr "Alan Açıklaması"
#: code:addons/base/models/ir_model.py:570
#, python-format
msgid "Fields: %s"
-msgstr ""
+msgstr "Alanlar: %s"
#. module: base
#: model:res.country,name:base.fj
@@ -11229,6 +11287,10 @@ msgid ""
"Technical Details:\n"
"%s"
msgstr ""
+"Dosya, uyumsuzluk veya hatalı biçimlendirilmiş bir dosya nedeniyle içe aktarılmadı. (Geçerli biçimler .csv, .po, .pot)\n"
+"\n"
+"Teknik Detaylar:\n"
+"%s"
#. module: base
#: model:ir.model.fields,field_description:base.field_ir_actions_act_window__filter
@@ -11279,7 +11341,7 @@ msgstr "Yalnızca bir kullanıcı görebilir Filtreler"
#. module: base
#: model:res.partner.industry,name:base.res_partner_industry_K
msgid "Finance/Insurance"
-msgstr ""
+msgstr "Finans/Sigorta"
#. module: base
#: model:ir.module.module,summary:base.module_account_accountant
@@ -11299,7 +11361,7 @@ msgstr "Finlandiya"
#. module: base
#: model:ir.module.module,shortdesc:base.module_mail_push
msgid "Firebase Cloud Messaging"
-msgstr ""
+msgstr "Firebase Bulut Mesajlaşma"
#. module: base
#: model:ir.model.fields,field_description:base.field_res_lang__week_start
@@ -11324,7 +11386,7 @@ msgstr "Folio 27 210 x 330 mm"
#. module: base
#: model:res.partner.industry,name:base.res_partner_industry_I
msgid "Food"
-msgstr ""
+msgstr "Gıda"
#. module: base
#: model:ir.model.fields,help:base.field_res_company__report_footer
@@ -11355,6 +11417,8 @@ msgid ""
"For one2many fields, the field on the target model that implement the "
"opposite many2one relationship"
msgstr ""
+"One2many alanları için, ters modele many2one uygulanan ilişkiyi hedefleyen "
+"alan."
#. module: base
#: model:ir.model.fields,help:base.field_ir_model_fields__relation
@@ -11385,6 +11449,9 @@ msgid ""
"\n"
"(Document type: %s)"
msgstr ""
+"Bu çeşit belge için, sadece kendi oluşturduğunuz kayıtlara ulaşabilirsiniz.\n"
+"\n"
+"(Belge Türü: %s)"
#. module: base
#: selection:ir.actions.act_window,view_type:0
@@ -11397,7 +11464,7 @@ msgstr "Form"
#: model:ir.model.fields,help:base.field_res_partner__email_formatted
#: model:ir.model.fields,help:base.field_res_users__email_formatted
msgid "Format email address \"Name <email@domain>\""
-msgstr ""
+msgstr "E-posta adresini \"Ad <email @ alan adı>\" şeklinde biçimlendirin"
#. module: base
#: model:ir.model.fields,field_description:base.field_res_partner__email_formatted
@@ -11439,34 +11506,38 @@ msgstr "Fransa - Muhasebe"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_fr_reports
msgid "France - Accounting Reports"
-msgstr ""
+msgstr "Fransa - Muhasebe Raporları"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_fr_fec
msgid "France - FEC"
-msgstr ""
+msgstr "Franca - FEC"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_fr_certification
msgid "France - VAT Anti-Fraud Certification (CGI 286 I-3 bis)"
-msgstr ""
+msgstr "Fransa - Vergi Numarası Anti-Fraud Sertifikası (CGI 286 I-3 bis)"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_fr_sale_closing
msgid ""
"France - VAT Anti-Fraud Certification (CGI 286 I-3 bis) - Sale Closings"
msgstr ""
+"Fransa - Vergi Numarası Anti-Fraud Sertifikası (CGI 286 I-3 bis) - Satış "
+"Kapanmaları"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_fr_pos_cert
msgid ""
"France - VAT Anti-Fraud Certification for Point of Sale (CGI 286 I-3 bis)"
msgstr ""
+"Fransa - Satış Noktası için Vergi Numarası Anti-Fraud Sertifikası (CGI 286 "
+"I-3 bis)"
#. module: base
#: model:res.country,name:base.gf
msgid "French Guiana"
-msgstr ""
+msgstr "Fransız Guyanası"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_fr_hr_payroll
@@ -11476,7 +11547,7 @@ msgstr "Fransa Bodro"
#. module: base
#: model:res.country,name:base.pf
msgid "French Polynesia"
-msgstr ""
+msgstr "Fransız Polinezyası"
#. module: base
#: model:res.country,name:base.tf
@@ -11528,6 +11599,7 @@ msgstr "Fonksiyon"
#: model:res.partner.industry,full_name:base.res_partner_industry_G
msgid "G WHOLESALE AND RETAIL TRADE;REPAIR OF MOTOR VEHICLES AND MOTORCYCLES"
msgstr ""
+"Toptan ve Perakende Ticareti, Motorlu Araçlar ve Motosikletlerin Onarımı"
#. module: base
#: selection:ir.module.module,license:0
@@ -11557,22 +11629,22 @@ msgstr ""
#. module: base
#: model:ir.module.module,description:base.module_l10n_in_purchase
msgid "GST Purchase Report"
-msgstr ""
+msgstr "GST Satın Alma Raporu"
#. module: base
#: model:ir.module.module,description:base.module_l10n_in_sale
msgid "GST Sale Report"
-msgstr ""
+msgstr "GST Satış Raporu"
#. module: base
#: model:ir.module.module,description:base.module_l10n_in_stock
msgid "GST Stock Report"
-msgstr ""
+msgstr "GST Stok Raporu"
#. module: base
#: model:res.country,vat_label:base.in
msgid "GSTIN"
-msgstr ""
+msgstr "GSTIN"
#. module: base
#: model:res.country,name:base.ga
@@ -11599,7 +11671,7 @@ msgstr "Gantt"
#. module: base
#: model:ir.module.module,summary:base.module_hr_holidays_gantt
msgid "Gantt view for Leaves Dashboard"
-msgstr ""
+msgstr "İzin paneli için Gantt görünümü"
#. module: base
#: model:ir.module.module,shortdesc:base.module_web_kanban_gauge
@@ -11626,7 +11698,7 @@ msgstr "Genel Ayarlar"
#: model:ir.ui.menu,name:base.menu_wizard_update_translations
#: model:ir.ui.view,arch_db:base.wizard_update_translations
msgid "Generate Missing Terms"
-msgstr ""
+msgstr "Eksik Şartları Oluşturun"
#. module: base
#: model:ir.ui.view,arch_db:base.ir_property_view_search
@@ -11679,7 +11751,7 @@ msgstr "Cebelitarık"
#. module: base
#: model:ir.module.module,shortdesc:base.module_mail_github
msgid "Github Integration with Discuss"
-msgstr ""
+msgstr "Discuss ile Github Entegrasyonu"
#. module: base
#: model:ir.model.fields,field_description:base.field_ir_rule__global
@@ -11805,7 +11877,7 @@ msgstr "Yunanistan - Muhasebe"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_gr_reports
msgid "Greece - Accounting Reports"
-msgstr ""
+msgstr "Yunanistan - Muhasebe Raporları"
#. module: base
#: model:res.country,name:base.gl
@@ -11826,7 +11898,7 @@ msgstr "Tablo"
#. module: base
#: model:ir.module.module,shortdesc:base.module_web_grid
msgid "Grid View"
-msgstr ""
+msgstr "Tablo Görünümü"
#. module: base
#: model:ir.model.fields,field_description:base.field_ir_model_access__group_id
@@ -11903,12 +11975,12 @@ msgstr "Gruplar (grupsuz = global)"
#. module: base
#: model:res.country,name:base.gp
msgid "Guadeloupe"
-msgstr ""
+msgstr "Guadeloupe"
#. module: base
#: model:res.country,name:base.gu
msgid "Guam"
-msgstr ""
+msgstr "Guam"
#. module: base
#: model:res.country,name:base.gt
@@ -11933,7 +12005,7 @@ msgstr "Gine"
#. module: base
#: model:res.country,name:base.gw
msgid "Guinea-Bissau"
-msgstr ""
+msgstr "Gine Bissau"
#. module: base
#: model:res.country,name:base.gy
@@ -11943,12 +12015,12 @@ msgstr "Guyana"
#. module: base
#: model:res.partner.industry,full_name:base.res_partner_industry_H
msgid "H TRANSPORTATION AND STORAGE"
-msgstr ""
+msgstr "H Ulaşım ve Depolama "
#. module: base
#: model:ir.module.module,shortdesc:base.module_hr_contract_salary
msgid "HR Contract Salary (Belgium)"
-msgstr ""
+msgstr "İK Sözleşme Maaşı"
#. module: base
#: model:ir.module.module,shortdesc:base.module_hr_gamification
@@ -11958,7 +12030,7 @@ msgstr "IK Ödüllendirme"
#. module: base
#: model:ir.module.module,shortdesc:base.module_hr_org_chart
msgid "HR Org Chart"
-msgstr ""
+msgstr "İK Organizasyon Planı"
#. module: base
#: selection:ir.actions.report,report_type:0
@@ -11983,7 +12055,7 @@ msgstr "Barkod Tarayıcıları için Donanım Sürücüleri"
#. module: base
#: model:ir.module.module,summary:base.module_hw_blackbox_be
msgid "Hardware Driver for Belgian Fiscal Data Modules"
-msgstr ""
+msgstr "Belçika Mali Veri Modülleri için Donanım Sürücüsü"
#. module: base
#: model:ir.module.module,summary:base.module_hw_escpos
@@ -12013,12 +12085,12 @@ msgstr "Başlık boşluğu"
#. module: base
#: model:res.partner.industry,name:base.res_partner_industry_Q
msgid "Health/Social"
-msgstr ""
+msgstr "Sağlık/Sosyal"
#. module: base
#: model:res.country,name:base.hm
msgid "Heard Island and McDonald Islands"
-msgstr ""
+msgstr "Heard Adası ve McDonald Adaları"
#. module: base
#: selection:ir.translation,type:0
@@ -12030,7 +12102,7 @@ msgstr "Yardım"
#. module: base
#: model:ir.ui.view,arch_db:base.view_server_action_form
msgid "Help with Python expressions"
-msgstr ""
+msgstr "Python ifadeleri ile yardım."
#. module: base
#: model:ir.module.category,name:base.module_category_helpdesk
@@ -12041,12 +12113,12 @@ msgstr "Yardım Masası"
#. module: base
#: model:ir.module.module,shortdesc:base.module_helpdesk_timesheet
msgid "Helpdesk Timesheet"
-msgstr ""
+msgstr "Yardım Masası Zaman Çizelgesi"
#. module: base
#: model:ir.module.module,shortdesc:base.module_website_helpdesk_forum
msgid "Helpdesk: Knowledge Base"
-msgstr ""
+msgstr "Yardım Masası: Bilgi Üssü"
#. module: base
#: model:ir.module.category,description:base.module_category_point_of_sale
@@ -12055,6 +12127,9 @@ msgid ""
"simplified payment mode encoding, automatic picking lists generation and "
"more."
msgstr ""
+"Hızlı satış şifreleme, basit ödeme modu şifreleme, otomatik ayıklama listesi"
+" oluşturma ve daha birçok işlem ile Satış Noktasından en iyi verimi almanıza"
+" yardım eder."
#. module: base
#: model:ir.module.category,description:base.module_category_accounting_and_finance
@@ -12074,6 +12149,8 @@ msgstr "Teklifleri, sipariş emirlerini ve faturalarınızı yönetmenizi sağla
#: model:ir.module.category,description:base.module_category_lead_automation
msgid "Helps you manage lead of your marketing campaigns step by step."
msgstr ""
+"Pazarlama kampanyanızın müşteri potansiyelini adım adım yönetmenize yardımcı"
+" olur."
#. module: base
#: model:ir.module.category,description:base.module_category_hr_attendance
@@ -12122,7 +12199,7 @@ msgstr ""
#. module: base
#: model:ir.module.category,description:base.module_category_hr_holidays
msgid "Helps you manage your leaves."
-msgstr ""
+msgstr "İzinlerinizi yönetmenize yardımcı olur."
#. module: base
#: model:ir.module.category,description:base.module_category_manufacturing
@@ -12138,6 +12215,8 @@ msgid ""
"Helps you manage your mass mailing for design\n"
" professional emails and reuse templates."
msgstr ""
+"Profesyonel e-postalar tasarlamak ve şablonları yeniden kullanmak için toplu"
+" e-postanızı yönetmenize yardımcı olur."
#. module: base
#: model:ir.module.category,description:base.module_category_hr_payroll
@@ -12159,6 +12238,8 @@ msgid ""
"Helps you manage your purchase-related processes such as requests for "
"quotations, supplier bills, etc..."
msgstr ""
+"Teklif talepleri, tedarikçi faturaları gibi satın alma ile ilgili "
+"süreçlerinizi yönetmenize yardımcı olur"
#. module: base
#: model:ir.module.category,description:base.module_category_hr_recruitment
@@ -12240,7 +12321,7 @@ msgstr "Saat"
#. module: base
#: model:res.partner.industry,name:base.res_partner_industry_T
msgid "Households"
-msgstr ""
+msgstr "Mesken"
#. module: base
#: model:ir.model.fields,help:base.field_ir_cron__numbercall
@@ -12265,7 +12346,7 @@ msgstr "İK İşe Alım Görüşme Formları"
#. module: base
#: model:ir.module.category,name:base.module_category_human_resource
msgid "Human Resource"
-msgstr ""
+msgstr "İnsan Kaynakları"
#. module: base
#: model:ir.module.category,name:base.module_category_human_resources_survey
@@ -12280,7 +12361,7 @@ msgstr "Macar - muhasebe"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_hu_reports
msgid "Hungarian - Accounting Reports"
-msgstr ""
+msgstr "Macaristan - Muhasebe Raporları"
#. module: base
#: model:res.country,name:base.hu
@@ -12290,7 +12371,7 @@ msgstr "Macaristan"
#. module: base
#: model:res.partner.industry,full_name:base.res_partner_industry_I
msgid "I ACCOMMODATION AND FOOD SERVICE ACTIVITIES"
-msgstr ""
+msgstr "Konaklama ve Gıda Hizmet Faaliyetleri"
#. module: base
#: model:ir.module.module,shortdesc:base.module_base_iban
@@ -12428,7 +12509,7 @@ msgstr "ISO kodu"
#. module: base
#: model:res.partner.industry,name:base.res_partner_industry_J
msgid "IT/Communication"
-msgstr ""
+msgstr "BT/İletişim"
#. module: base
#: model:res.country,name:base.is
@@ -12456,6 +12537,8 @@ msgid ""
"If checked and the action is bound to a model, it will only appear in the "
"More menu on list views"
msgstr ""
+"İşaretlenirse ve eylem modele bağlıysa, yalnızca liste görünümündeki Diğer "
+"menüsünde görünür."
#. module: base
#: model:ir.model.fields,help:base.field_ir_mail_server__smtp_debug
@@ -12463,6 +12546,8 @@ msgid ""
"If enabled, the full output of SMTP sessions will be written to the server "
"log at DEBUG level (this is very verbose and may include confidential info!)"
msgstr ""
+"Etkinleştirilmişse, SMTP oturumlarının tam çıkışı, DEBUG düzeyinde sunucu "
+"günlüğüne yazılır (bu çok ayrıntılıdır ve gizli bilgileri içerebilir!)"
#. module: base
#: model:ir.model.fields,help:base.field_ir_rule__global
@@ -12497,7 +12582,7 @@ msgstr "İşlem bağlayıcı sadece bu kullanıcı için geçerli."
#. module: base
#: model:ir.model.fields,help:base.field_ir_default__condition
msgid "If set, applies the default upon condition."
-msgstr ""
+msgstr "Ayarlanırsa, koşullu varsayılanı uygular."
#. module: base
#: model:ir.ui.view,arch_db:base.view_server_action_form
@@ -12505,6 +12590,8 @@ msgid ""
"If several child actions return an action, only the last one will be executed.\n"
" This may happen when having server actions executing code that returns an action, or server actions returning a client action."
msgstr ""
+"Birden fazla alt eylemi bir eylem döndürürse, yalnızca sonuncu yürütülür.\n"
+" Bu, bir eylemi döndüren kod yürüten sunucu eylemleri veya istemci eylemi döndüren sunucu eylemleri olduğunda ortaya çıkabilir."
#. module: base
#: model:ir.model.fields,help:base.field_res_users__action_id
@@ -12587,6 +12674,8 @@ msgid ""
"If you enable this option, existing translations (including custom ones) "
"will be overwritten and replaced by those in this file"
msgstr ""
+"Bu seçeneği etkinleştirirseniz, mevcut çevirilerin (özel olanlar dahil) "
+"üzerine yazılır ve bu dosyadakiler tarafından değiştirilir."
#. module: base
#: model:ir.model.fields,help:base.field_ir_ui_menu__groups_id
@@ -12606,6 +12695,9 @@ msgid ""
" (if you delete a native ACL, it will be re-created when you reload the "
"module)."
msgstr ""
+"Etkin alanın işaretini kaldırırsanız, ACL'yi silmeden devre dışı bırakır "
+"(yerel bir ACL'yi silerseniz, modülü yeniden yüklediğinizde yeniden "
+"oluşturulur)."
#. module: base
#: model:ir.model.fields,help:base.field_ir_rule__active
@@ -12614,11 +12706,14 @@ msgid ""
"deleting it (if you delete a native record rule, it may be re-created when "
"you reload the module)."
msgstr ""
+"Etkin alanın işaretini kaldırırsanız, kayıt kuralını silmeden devre dışı "
+"bırakır (bir yerel kayıt kuralını silerseniz, modülü yeniden yüklediğinizde "
+"yeniden oluşturulabilir)."
#. module: base
#: model:ir.ui.view,arch_db:base.view_base_module_upgrade
msgid "If you wish to cancel the process, press the cancel button below"
-msgstr ""
+msgstr "Eğer işlemi iptal etmek isterseniz, aşağıdaki iptal tuşuna basın"
#. module: base
#: model:ir.model.fields,field_description:base.field_res_country__image
@@ -12635,12 +12730,12 @@ msgstr "Etkilenen Uygulamalar"
#. module: base
#: model:ir.model.fields,field_description:base.field_base_module_uninstall__model_ids
msgid "Impacted data models"
-msgstr ""
+msgstr "Etkilenen veri modelleri"
#. module: base
#: model:ir.model.fields,field_description:base.field_base_module_uninstall__module_ids
msgid "Impacted modules"
-msgstr ""
+msgstr "Etkilenen modüller"
#. module: base
#: model:ir.model.fields,field_description:base.field_ir_sequence__implementation
@@ -12650,7 +12745,7 @@ msgstr "Uygulama"
#. module: base
#: model:ir.module.module,summary:base.module_base_sparse_field
msgid "Implementation of sparse fields."
-msgstr ""
+msgstr "Seyrek alanların uygulanması"
#. module: base
#: model:ir.module.module,summary:base.module_pos_blackbox_be
@@ -12658,6 +12753,8 @@ msgid ""
"Implements the registered cash system, adhering to guidelines by FPS "
"Finance."
msgstr ""
+"Kayıtlı nakit sistemini uygular ve FPS Finance tarafından yönergelere bağlı "
+"kalır."
#. module: base
#: model:ir.ui.menu,name:base.menu_translation_export
@@ -12694,7 +12791,7 @@ msgstr "Çeviri İçe Aktar"
#. module: base
#: model:ir.module.module,description:base.module_currency_rate_live
msgid "Import exchange rates from the Internet.\n"
-msgstr ""
+msgstr "Döviz kurlarını internetten içe aktar.\n"
#. module: base
#: model:ir.model.fields,field_description:base.field_ir_model__modules
@@ -12742,27 +12839,27 @@ msgstr "Hindistan Hesapplanı"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_in_reports
msgid "Indian - Accounting Reports"
-msgstr ""
+msgstr "Hindistan - Muhasebe Raporları"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_in_purchase
msgid "Indian - Purchase Report(GST)"
-msgstr ""
+msgstr "Hindistan - Satın Alma Raporları (GST)"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_in_sale
msgid "Indian - Sale Report(GST)"
-msgstr ""
+msgstr "Hindistan - Satış Raporları (GST)"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_in_schedule6
msgid "Indian - Schedule VI Accounting"
-msgstr ""
+msgstr "Hindistan - Program VI Muhasebe"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_in_stock
msgid "Indian - Stock Report(GST)"
-msgstr ""
+msgstr "Hindistan - Stok Raporu (GST)"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_in_hr_payroll
@@ -12849,7 +12946,7 @@ msgstr "Satırda Düzenle"
#. module: base
#: model:ir.model.fields,field_description:base.field_res_country__address_view_id
msgid "Input View"
-msgstr ""
+msgstr "Giriş Görünümü"
#. module: base
#: code:addons/base/models/ir_module.py:436
@@ -12920,22 +13017,22 @@ msgstr "Tamsayı"
#. module: base
#: model:ir.module.module,description:base.module_web_clearbit
msgid "Integrate Clearbit API to get company logo"
-msgstr ""
+msgstr "Firma logosu almak için Clearbit API entegre olun"
#. module: base
#: model:ir.module.module,description:base.module_sale_coupon
msgid "Integrate coupon mechanism in sales orders."
-msgstr ""
+msgstr "Satış siparişlerinde kupon mekanizması ile entegre olun."
#. module: base
#: model:ir.module.module,description:base.module_sale_coupon_delivery
msgid "Integrate coupon mechanism with shipping costs."
-msgstr ""
+msgstr "Teslimat maliyeti ile kupon mekanizmasını entegre edin."
#. module: base
#: model:ir.module.module,description:base.module_website_sale_coupon
msgid "Integrate coupons mechanism in ecommerce."
-msgstr ""
+msgstr "Kupon mekanizmasını, eticarete entegre edin."
#. module: base
#: model:ir.module.module,shortdesc:base.module_inter_company_rules
@@ -13045,7 +13142,7 @@ msgstr ""
#: code:addons/base/models/ir_default.py:68
#, python-format
msgid "Invalid field %s.%s"
-msgstr ""
+msgstr "Geçersiz alan %s.%s"
#. module: base
#: sql_constraint:ir.ui.view:0
@@ -13053,13 +13150,15 @@ msgid ""
"Invalid inheritance mode: if the mode is 'extension', the view must extend "
"an other view"
msgstr ""
+"Geçersiz kalıtım modu: mod 'uzantı' ise, görünüm başka bir görünümü "
+"uzatmalıdır"
#. module: base
#: code:addons/base/models/ir_actions.py:128
#: code:addons/base/models/ir_actions.py:130
#, python-format
msgid "Invalid model name %r in action definition."
-msgstr ""
+msgstr "Eylem tanımındaki geçersiz model adı %r"
#. module: base
#: code:addons/base/models/ir_ui_view.py:632
@@ -13077,7 +13176,7 @@ msgstr "Dizisi için geçersiz önek veya sonek '%s'"
#: code:addons/base/models/res_users.py:327
#, python-format
msgid "Invalid search criterion"
-msgstr ""
+msgstr "Geçersiz arama kriteri"
#. module: base
#: code:addons/base/models/ir_property.py:69
@@ -13089,7 +13188,7 @@ msgstr "Geçersiz tür"
#: code:addons/base/models/ir_default.py:70
#, python-format
msgid "Invalid value for %s.%s: %s"
-msgstr ""
+msgstr "%s.%s:%s için geçersiz değer"
#. module: base
#: code:addons/base/models/ir_ui_view.py:343
@@ -13136,7 +13235,7 @@ msgstr "Faturalama & Ödemeler"
#: model:ir.module.category,name:base.module_category_invoicing_management
#: model:ir.module.module,shortdesc:base.module_account_invoicing
msgid "Invoicing Management"
-msgstr ""
+msgstr "Faturalama Yönetimi"
#. module: base
#: model:res.country,name:base.ir
@@ -13204,7 +13303,7 @@ msgstr "İtalya - Muhasebe"
#. module: base
#: model:res.partner.industry,full_name:base.res_partner_industry_J
msgid "J INFORMATION AND COMMUNICATION"
-msgstr ""
+msgstr "J BİLGİ VE İLETİŞİM"
#. module: base
#: model:res.country,name:base.jm
@@ -13270,7 +13369,7 @@ msgstr "Zamanında Planlama"
#. module: base
#: model:res.partner.industry,full_name:base.res_partner_industry_K
msgid "K FINANCIAL AND INSURANCE ACTIVITIES"
-msgstr ""
+msgstr "K FİNANSAL VE SİGORTA ETKİNLİKLERİ"
#. module: base
#: selection:ir.actions.act_window.view,view_mode:0
@@ -13287,7 +13386,7 @@ msgstr "Kazkistan"
#: model:ir.model.fields,help:base.field_res_users__password
msgid ""
"Keep empty if you don't want the user to be able to connect on the system."
-msgstr ""
+msgstr "Kullanıcının sisteme bağlanmasını istemiyorsanız boş tutun."
#. module: base
#: model:res.country,name:base.ke
@@ -13314,7 +13413,7 @@ msgstr "Kiribati"
#. module: base
#: model:ir.module.module,summary:base.module_website_helpdesk_forum
msgid "Knowledge base for helpdesk based on Odoo Forum"
-msgstr ""
+msgstr "Odoo Forumuna dayanan yardım masası için bilgi bankası"
#. module: base
#: model:ir.module.module,description:base.module_l10n_si
@@ -13329,12 +13428,12 @@ msgstr "Kuveyt"
#. module: base
#: model:res.country,name:base.kg
msgid "Kyrgyzstan"
-msgstr ""
+msgstr "Kırgızistan"
#. module: base
#: model:res.partner.industry,full_name:base.res_partner_industry_L
msgid "L REAL ESTATE ACTIVITIES"
-msgstr ""
+msgstr "L EMLAK FAALİYETLERİ"
#. module: base
#: selection:ir.module.module,license:0
@@ -13685,7 +13784,7 @@ msgstr "Launchpad"
#. module: base
#: model:ir.model.fields,field_description:base.field_res_country__address_format
msgid "Layout in Reports"
-msgstr ""
+msgstr "Rapor Düzeni"
#. module: base
#: model:ir.module.category,name:base.module_category_lead_automation
@@ -13700,7 +13799,7 @@ msgstr "Aday Skoru"
#. module: base
#: model:ir.module.module,shortdesc:base.module_crm_project
msgid "Lead to Tasks"
-msgstr ""
+msgstr "Görevlere Öncülük Et"
#. module: base
#: model:ir.module.module,summary:base.module_crm
@@ -13715,7 +13814,7 @@ msgstr "İzin Yönetimi"
#. module: base
#: model:ir.module.module,summary:base.module_hr_holidays
msgid "Leave allocations and leave requests"
-msgstr ""
+msgstr "İzin tahsisleri ve izin talepleri"
#. module: base
#: model:ir.module.category,name:base.module_category_hr_holidays
@@ -13725,7 +13824,7 @@ msgstr "İzinler"
#. module: base
#: model:ir.module.module,shortdesc:base.module_hr_holidays_gantt
msgid "Leaves Gantt"
-msgstr ""
+msgstr "İzin Gantt"
#. module: base
#: model:res.country,name:base.lb
@@ -13775,7 +13874,7 @@ msgstr "Lesotho"
#. module: base
#: model:ir.module.module,description:base.module_website_sale_wishlist
msgid "Let returning shoppers save products in a wishlist"
-msgstr ""
+msgstr "Alışveriş yapanlara bir istek listesinde ürün kaydetme izni verin"
#. module: base
#: selection:report.paperformat,format:0
@@ -13833,11 +13932,16 @@ msgid ""
"\n"
" * UPDATE ME\n"
msgstr ""
+"Bağlantı Hesabı ve Ödeme ve Portal Ödeme Ekleme\n"
+"\n"
+"Ödemeyi etkinleştirmek için hesapla ilgili ödeme araçları ve portal seçenekleri sağlayın.\n"
+"\n"
+"* BENİ GÜNCELLE\n"
#. module: base
#: model:ir.module.module,summary:base.module_sale_payment
msgid "Link Sales and Payment"
-msgstr ""
+msgstr "Satış Bağlantısı ve Ödeme"
#. module: base
#: model:ir.module.module,description:base.module_sale_payment
@@ -13851,6 +13955,14 @@ msgid ""
" * JS code to handle a payment form (eCommerce\n"
" * add payment-related fields on SO\n"
msgstr ""
+"Satış Bağlantısı ve Ödeme\n"
+"\n"
+"Satışla ilgili ödeme için araçlar sağlayın.\n"
+"\n"
+"* satış siparişi onayı gibi işlemlerin özel yönetimi\n"
+"* öde/sat izni verildiğinde işlemlerle işlemek için araçlar yöntemi\n"
+"* bir ödeme formunu işlemek için JS kodu (eTicaret)\n"
+"* satış siparişi üzerine ödeme ile ilgili alan ekleyin\n"
#. module: base
#: model:ir.module.module,shortdesc:base.module_link_tracker
@@ -13860,12 +13972,12 @@ msgstr "Bağlantı İzleyici"
#. module: base
#: model:ir.module.module,summary:base.module_pos_sale
msgid "Link module between Point of Sale and Sales"
-msgstr ""
+msgstr "Satış ve Satış Noktası arasındaki bağlantı modülü"
#. module: base
#: model:ir.module.module,shortdesc:base.module_project_forecast_sale
msgid "Link module between project_forecast and sale(_timesheet)"
-msgstr ""
+msgstr "project_forecast ile sale(_timesheet) arasındaki bağlantı modülü."
#. module: base
#: model:ir.model.fields,field_description:base.field_ir_actions_server__link_field_id
@@ -13912,7 +14024,7 @@ msgstr "Ziyaretçiler / Müşteriler ile Canlı Sohbet"
#. module: base
#: model:ir.module.module,shortdesc:base.module_currency_rate_live
msgid "Live Currency Exchange Rate"
-msgstr ""
+msgstr "Canlı Döviz Kuru"
#. module: base
#: model:ir.ui.view,arch_db:base.view_base_language_install
@@ -14002,7 +14114,7 @@ msgstr "Lüksemburg - Muhasebe Raporları"
#. module: base
#: model:res.partner.industry,full_name:base.res_partner_industry_M
msgid "M PROFESSIONAL, SCIENTIFIC AND TECHNICAL ACTIVITIES"
-msgstr ""
+msgstr "M PROFESYONEL, BİLİMSEL VE TEKNİK ETKİNLİKLER"
#. module: base
#: model:ir.module.module,shortdesc:base.module_mrp_byproduct
@@ -14013,7 +14125,7 @@ msgstr "MRP Yan Ürünleri"
#: model:ir.module.module,shortdesc:base.module_quality_mrp
#: model:ir.module.module,shortdesc:base.module_quality_mrp_workorder
msgid "MRP features for Quality Control"
-msgstr ""
+msgstr "Kalite Kontrol için MRP özellikleri"
#. module: base
#: model:res.country,name:base.mo
@@ -14075,7 +14187,7 @@ msgstr "Ana Sıra"
#: selection:ir.actions.act_window,target:0
#: selection:ir.actions.client,target:0
msgid "Main action of Current Window"
-msgstr ""
+msgstr "Geçerli Pencerenin ana aksiyonu"
#. module: base
#: model:ir.model.fields,field_description:base.field_ir_module_module__maintainer
@@ -14095,7 +14207,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_mrp_maintenance
msgid "Maintenance - MRP"
-msgstr ""
+msgstr "Bakım - MRP"
#. module: base
#: model:res.country,name:base.mw
@@ -14125,7 +14237,7 @@ msgstr "Malta"
#. module: base
#: model:ir.module.module,summary:base.module_website_event_sale
msgid "Manage Events and Sell Tickets Online"
-msgstr ""
+msgstr "Etkinlikleri Yönet ve Online Bilet Sat"
#. module: base
#: model:ir.module.module,description:base.module_hr_recruitment
@@ -14188,7 +14300,7 @@ msgstr ""
#. module: base
#: model:ir.actions.act_window,help:base.action_res_bank_form
msgid "Manage bank records you want to be used in the system."
-msgstr ""
+msgstr "Sistemde kullanmak istediğiniz banka hesaplarınızı yönetin."
#. module: base
#: model:ir.actions.act_window,help:base.action_partner_category_form
@@ -14208,6 +14320,8 @@ msgid ""
"Manage sectors of activity to better classify partners for tracking and "
"analysis purposes."
msgstr ""
+"İzleme ve analiz amacıyla iş ortaklarını daha iyi sınıflandırmak için "
+"faaliyet sektörlerini yönetin."
#. module: base
#: model:ir.actions.act_window,help:base.action_partner_title_contact
@@ -14216,16 +14330,20 @@ msgid ""
"way you want to print them in letters and other documents. Some example: "
"Mr., Mrs."
msgstr ""
+"Sisteminizde bulundurmak istediğiniz iletişim başlıkları ve bunları mektup "
+"ve diğer belgelerde yazdırmak istediğiniz gibi yönetin. Örnek: Bay Bayan"
#. module: base
#: model:ir.module.module,summary:base.module_account_voucher
msgid "Manage your debts and credits thanks to simple sale/purchase receipts"
msgstr ""
+"Basit satış / satın alma makbuzları sayesinde borçlarınızı ve kredilerinizi "
+"yönetin"
#. module: base
#: model:ir.module.module,summary:base.module_hr_payroll
msgid "Manage your employee payroll records"
-msgstr ""
+msgstr "Çalışan bordro kayıtlarınızı yönetin"
#. module: base
#: model:ir.module.category,name:base.module_category_manufacturing
@@ -14301,7 +14419,7 @@ msgstr "Marshall Adaları"
#. module: base
#: model:res.country,name:base.mq
msgid "Martinique"
-msgstr ""
+msgstr "Martinique"
#. module: base
#: model:ir.module.category,name:base.module_category_mass_mailing
@@ -14316,12 +14434,12 @@ msgstr "Toplu Posta Şablonları"
#. module: base
#: model:ir.module.module,shortdesc:base.module_mass_mailing_event
msgid "Mass mailing on attendees"
-msgstr ""
+msgstr "Katılımcılara toplu mail gönderimi"
#. module: base
#: model:ir.module.module,shortdesc:base.module_mass_mailing_event_track
msgid "Mass mailing on track speakers"
-msgstr ""
+msgstr "Konuşmacı için toplu mail gönderimi"
#. module: base
#: model:ir.module.module,shortdesc:base.module_mrp_mps
@@ -14411,7 +14529,7 @@ msgstr "Menüleri özelleştirme"
#. module: base
#: model:ir.module.module,shortdesc:base.module_pos_mercury
msgid "Mercury Payment Services"
-msgstr ""
+msgstr "Mercury Ödeme Hizmetleri"
#. module: base
#: model:ir.ui.view,arch_db:base.base_partner_merge_automatic_wizard_form
@@ -14472,7 +14590,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,summary:base.module_l10n_mx_edi
msgid "Mexican Localization for EDI documents"
-msgstr ""
+msgstr "EDI Belgeleri için Meksika Yerelleştirmesi"
#. module: base
#: model:res.country,name:base.mx
@@ -14502,7 +14620,7 @@ msgstr "EnazID"
#. module: base
#: model:res.partner.industry,name:base.res_partner_industry_B
msgid "Mining"
-msgstr ""
+msgstr "Madencilik"
#. module: base
#: model:ir.ui.view,arch_db:base.sequence_view
@@ -14541,7 +14659,7 @@ msgstr "SMTP Sunucusu Yok"
#: code:addons/models.py:2782
#, python-format
msgid "Missing document(s)"
-msgstr ""
+msgstr "Eksik belgeler"
#. module: base
#: code:addons/models.py:5176
@@ -14553,7 +14671,7 @@ msgstr "Alan için gerekli değer eksik '%s' (%s)"
#: code:addons/base/models/ir_ui_view.py:387
#, python-format
msgid "Missing view architecture."
-msgstr ""
+msgstr "Eksik görünüm yapısı"
#. module: base
#: model:res.partner.title,name:base.res_partner_title_mister
@@ -14706,7 +14824,7 @@ msgstr "Modül Adı"
#. module: base
#: model:ir.model,name:base.model_base_module_uninstall
msgid "Module Uninstallation"
-msgstr ""
+msgstr "Yüklemeyi Kaldırma Modülü"
#. module: base
#: model:ir.actions.act_window,name:base.action_view_base_module_update
@@ -14736,7 +14854,7 @@ msgstr "Modül Bağımlığı"
#. module: base
#: model:ir.model,name:base.model_ir_module_module_exclusion
msgid "Module exclusion"
-msgstr ""
+msgstr "Modül ihracı"
#. module: base
#: code:addons/convert.py:830
@@ -14765,7 +14883,7 @@ msgstr ""
#. module: base
#: model:res.country,name:base.md
msgid "Moldova"
-msgstr ""
+msgstr "Moldova"
#. module: base
#: model:res.country,name:base.mc
@@ -14825,7 +14943,7 @@ msgstr "Bay."
#. module: base
#: model:ir.module.module,shortdesc:base.module_mrp_workorder
msgid "Mrp Workorder"
-msgstr ""
+msgstr "Mrp İş Siparişi"
#. module: base
#: model:res.partner.title,shortcut:base.res_partner_title_madam
@@ -14871,7 +14989,7 @@ msgstr "Myanmar"
#. module: base
#: model:res.partner.industry,full_name:base.res_partner_industry_N
msgid "N ADMINISTRATIVE AND SUPPORT SERVICE ACTIVITIES"
-msgstr ""
+msgstr "N İDARİ VE DESTEK HİZMET FAALİYETLERİ"
#. module: base
#: model:ir.model.fields,field_description:base.field_base_partner_merge_automatic_wizard__group_by_name
@@ -14944,7 +15062,7 @@ msgstr "Hollanda - Muhasebe Raporları"
#. module: base
#: model:res.country,name:base.nc
msgid "New Caledonia"
-msgstr ""
+msgstr "Yeni Kaledonya"
#. module: base
#: code:addons/base/wizard/base_export_language.py:18
@@ -14972,7 +15090,7 @@ msgstr "Yeni Zelanda"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_nz
msgid "New Zealand - Accounting"
-msgstr ""
+msgstr "Yeni Zelanda - Muhasebe"
#. module: base
#: model:ir.module.module,summary:base.module_website_blog
@@ -15036,7 +15154,7 @@ msgstr "Niue"
#. module: base
#: model:ir.ui.view,arch_db:base.res_config_settings_view_form
msgid "No Record Found"
-msgstr ""
+msgstr "Kayıt Bulunamadı"
#. module: base
#: code:addons/models.py:1299
@@ -15178,7 +15296,7 @@ msgstr "Arama Sayısı"
#. module: base
#: model:ir.model.fields,field_description:base.field_res_users__companies_count
msgid "Number of Companies"
-msgstr ""
+msgstr "Şirket Sayısı"
#. module: base
#: model:ir.model.fields,field_description:base.field_base_module_update__added
@@ -15193,7 +15311,7 @@ msgstr "Bir kaç modül güncllendi"
#. module: base
#: model:res.partner.industry,full_name:base.res_partner_industry_O
msgid "O PUBLIC ADMINISTRATION AND DEFENCE;COMPULSORY SOCIAL SECURITY"
-msgstr ""
+msgstr "O KAMU YÖNETİMİ VE SAVUNMA, ZORUNLU SOSYAL GÜVENLİK"
#. module: base
#: model:ir.module.module,shortdesc:base.module_auth_oauth
@@ -15221,7 +15339,7 @@ msgstr "Nesne"
#: code:addons/model.py:148
#, python-format
msgid "Object %s doesn't exist"
-msgstr ""
+msgstr "Nesne %s bulunamadı"
#. module: base
#: model:ir.model.fields,field_description:base.field_ir_model_fields__model
@@ -15440,7 +15558,7 @@ msgstr ""
#. module: base
#: selection:ir.module.module,license:0
msgid "Odoo Enterprise Edition License v1.0"
-msgstr ""
+msgstr "Odoo Kurumsal Sürüm Lisansı v1.0"
#. module: base
#: model:ir.module.module,description:base.module_mail
@@ -15770,12 +15888,12 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_mx_reports
msgid "Odoo Mexican Localization Reports"
-msgstr ""
+msgstr "Odoo Meksika Yerelleştirme Raporları"
#. module: base
#: model:ir.module.module,summary:base.module_web_mobile
msgid "Odoo Mobile Core module"
-msgstr ""
+msgstr "Odoo Mobil Çekirdek Modülü"
#. module: base
#: model:ir.module.module,description:base.module_note
@@ -15957,12 +16075,12 @@ msgstr ""
#. module: base
#: selection:ir.module.module,license:0
msgid "Odoo Proprietary License v1.0"
-msgstr ""
+msgstr "Odoo Tescilli Lisansı v1.0"
#. module: base
#: model:ir.module.module,shortdesc:base.module_web_settings_dashboard
msgid "Odoo Settings Dashboard"
-msgstr ""
+msgstr "Odoo Ayarlar Paneli"
#. module: base
#: model:ir.module.module,description:base.module_purchase
@@ -16035,7 +16153,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_web_diagram
msgid "Odoo Web Diagram"
-msgstr ""
+msgstr "Odoo Web Diyagramı"
#. module: base
#: model:ir.module.module,description:base.module_website
@@ -16391,6 +16509,8 @@ msgid ""
"One2Many fields cannot be synchronized as part of `commercial_fields` or "
"`address fields`"
msgstr ""
+"One2Many alanları, `commercial_fields` yada `address fields` parçası olarak "
+"senkronize olamaz."
#. module: base
#: model:ir.module.module,shortdesc:base.module_website_event_sale
@@ -16415,7 +16535,7 @@ msgstr "Çevrimiçi Teklif"
#. module: base
#: model:ir.module.module,shortdesc:base.module_website_quote_subscription
msgid "Online Subscription Quotes"
-msgstr ""
+msgstr "Online Abonelik Teklifleri"
#. module: base
#: code:addons/base/models/res_config.py:560
@@ -16446,7 +16566,7 @@ msgstr ""
#. module: base
#: sql_constraint:res.currency.rate:0
msgid "Only one currency rate per day allowed!"
-msgstr ""
+msgstr "Günlük sadece bir kur miktarına izin verildi!"
#. module: base
#: code:addons/base/wizard/base_partner_merge.py:286
@@ -16472,7 +16592,7 @@ msgstr ""
#. module: base
#: model:ir.ui.view,arch_db:base.view_base_module_update
msgid "Open Apps"
-msgstr ""
+msgstr "Açık Uygulamalar"
#. module: base
#: model:ir.actions.client,name:base.action_client_base_menu
@@ -16552,6 +16672,9 @@ msgid ""
"Schedule, organize, promote or sell events online; conferences, webinars, trainings, etc.\n"
"\n"
msgstr ""
+" \n"
+"Online Etkinlikler\n"
+"\n"
#. module: base
#: model:ir.ui.view,arch_db:base.view_window_action_tree
diff --git a/odoo/addons/base/views/res_config_settings_views.xml b/odoo/addons/base/views/res_config_settings_views.xml
index 0f130d3ce10..74ce361e96b 100644
--- a/odoo/addons/base/views/res_config_settings_views.xml
+++ b/odoo/addons/base/views/res_config_settings_views.xml
@@ -16,7 +16,7 @@
</div>
<header>
<button string="Save" type="object" name="execute" class="oe_highlight" />
- <button string="Discard" type="object" name="cancel" />
+ <button string="Discard" type="object" name="cancel" special="cancel" />
</header>
</div>
<div class="o_setting_container">
diff --git a/odoo/addons/base/views/res_partner_views.xml b/odoo/addons/base/views/res_partner_views.xml
index 28ad85b892a..3370eaeb5ce 100644
--- a/odoo/addons/base/views/res_partner_views.xml
+++ b/odoo/addons/base/views/res_partner_views.xml
@@ -171,7 +171,7 @@
<field name="country_id" placeholder="Country" class="o_address_country" options='{"no_open": True, "no_create": True}'
attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}"/>
</div>
- <field name="vat" placeholder="e.g. BE0477472701"/>
+ <field name="vat" placeholder="e.g. BE0477472701" attrs="{'readonly': [('parent_id','!=',False)]}"/>
</group>
<group>
<field name="function" placeholder="e.g. Sales Director"
@@ -244,7 +244,7 @@
<field name="country_id" placeholder="Country" class="o_address_country" options='{"no_open": True, "no_create": True}'
attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}"/>
</div>
- <field name="vat" placeholder="e.g. BE0477472701"/>
+ <field name="vat" placeholder="e.g. BE0477472701" attrs="{'readonly': [('parent_id','!=',False)]}"/>
<field name="category_id" widget="many2many_tags" options="{'color_field': 'color', 'no_create_edit': True}" placeholder="Tags..."/>
</group>
<group>
diff --git a/odoo/modules/loading.py b/odoo/modules/loading.py
index 4dda572fb13..b9f4e2fdc7b 100644
--- a/odoo/modules/loading.py
+++ b/odoo/modules/loading.py
@@ -25,7 +25,8 @@ _logger = logging.getLogger(__name__)
_test_logger = logging.getLogger('odoo.tests')
-def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules=None, report=None):
+def load_module_graph(cr, graph, status=None, perform_checks=True,
+ skip_modules=None, report=None, models_to_check=None):
"""Migrates+Updates or Installs all module nodes from ``graph``
:param graph: graph of module nodes to load
:param status: deprecated parameter, unused, left to avoid changing signature in 8.0
@@ -93,6 +94,9 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules=
if kind in ('demo', 'test'):
threading.currentThread().testing = False
+ if models_to_check is None:
+ models_to_check = set()
+
processed_modules = []
loaded_modules = []
registry = odoo.registry(cr.dbname)
@@ -106,6 +110,8 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules=
t0 = time.time()
t0_sql = odoo.sql_db.sql_counter
+ models_updated = set()
+
for index, package in enumerate(graph, 1):
module_name = package.name
module_id = package.id
@@ -127,10 +133,20 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules=
model_names = registry.load(cr, package)
loaded_modules.append(package.name)
- if hasattr(package, 'init') or hasattr(package, 'update') or package.state in ('to install', 'to upgrade'):
+ if (hasattr(package, 'init') or hasattr(package, 'update')
+ or package.state in ('to install', 'to upgrade')):
+ models_updated |= set(model_names)
+ models_to_check -= set(model_names)
registry.setup_models(cr)
registry.init_models(cr, model_names, {'module': package.name})
cr.commit()
+ elif package.state != 'to remove':
+ # The current module has simply been loaded. The models extended by this module
+ # and for which we updated the schema, must have their schema checked again.
+ # This is because the extension may have changed the model,
+ # e.g. adding required=True to an existing field, but the schema has not been
+ # updated by this module because it's not marked as 'to upgrade/to install'.
+ models_to_check |= set(model_names) & models_updated
idref = {}
@@ -225,9 +241,14 @@ def _check_module_names(cr, module_names):
incorrect_names = mod_names.difference([x['name'] for x in cr.dictfetchall()])
_logger.warning('invalid module names, ignored: %s', ", ".join(incorrect_names))
-def load_marked_modules(cr, graph, states, force, progressdict, report, loaded_modules, perform_checks):
+def load_marked_modules(cr, graph, states, force, progressdict, report,
+ loaded_modules, perform_checks, models_to_check=None):
"""Loads modules marked with ``states``, adding them to ``graph`` and
``loaded_modules`` and returns a list of installed/upgraded modules."""
+
+ if models_to_check is None:
+ models_to_check = set()
+
processed_modules = []
while True:
cr.execute("SELECT name from ir_module_module WHERE state IN %s" ,(tuple(states),))
@@ -236,7 +257,10 @@ def load_marked_modules(cr, graph, states, force, progressdict, report, loaded_m
break
graph.add_modules(cr, module_list, force)
_logger.debug('Updating graph with %d more modules', len(module_list))
- loaded, processed = load_module_graph(cr, graph, progressdict, report=report, skip_modules=loaded_modules, perform_checks=perform_checks)
+ loaded, processed = load_module_graph(
+ cr, graph, progressdict, report=report, skip_modules=loaded_modules,
+ perform_checks=perform_checks, models_to_check=models_to_check
+ )
processed_modules.extend(processed)
loaded_modules.extend(loaded)
if not processed:
@@ -250,6 +274,8 @@ def load_modules(db, force_demo=False, status=None, update_module=False):
if force_demo:
force.append('demo')
+ models_to_check = set()
+
cr = db.cursor()
try:
if not odoo.modules.db.is_initialized(cr):
@@ -278,7 +304,9 @@ def load_modules(db, force_demo=False, status=None, update_module=False):
# processed_modules: for cleanup step after install
# loaded_modules: to avoid double loading
report = registry._assertion_report
- loaded_modules, processed_modules = load_module_graph(cr, graph, status, perform_checks=update_module, report=report)
+ loaded_modules, processed_modules = load_module_graph(
+ cr, graph, status, perform_checks=update_module,
+ report=report, models_to_check=models_to_check)
load_lang = tools.config.pop('load_language')
if load_lang or update_module:
@@ -333,11 +361,11 @@ def load_modules(db, force_demo=False, status=None, update_module=False):
previously_processed = len(processed_modules)
processed_modules += load_marked_modules(cr, graph,
['installed', 'to upgrade', 'to remove'],
- force, status, report, loaded_modules, update_module)
+ force, status, report, loaded_modules, update_module, models_to_check)
if update_module:
processed_modules += load_marked_modules(cr, graph,
['to install'], force, status, report,
- loaded_modules, update_module)
+ loaded_modules, update_module, models_to_check)
registry.loaded = True
registry.setup_models(cr)
@@ -407,6 +435,16 @@ def load_modules(db, force_demo=False, status=None, update_module=False):
cr.commit()
return registry
+ # STEP 5.5: Verify extended fields on every model
+ # This will fix the schema of all models in a situation such as:
+ # - module A is loaded and defines model M;
+ # - module B is installed/upgraded and extends model M;
+ # - module C is loaded and extends model M;
+ # - module B and C depend on A but not on each other;
+ # The changes introduced by module C are not taken into account by the upgrade of B.
+ if models_to_check:
+ registry.init_models(cr, list(models_to_check), {'models_to_check': True})
+
# STEP 6: verify custom views on every model
if update_module:
env = api.Environment(cr, SUPERUSER_ID, {})
diff --git a/odoo/modules/registry.py b/odoo/modules/registry.py
index 712b25aefb3..9e180138a21 100644
--- a/odoo/modules/registry.py
+++ b/odoo/modules/registry.py
@@ -287,6 +287,8 @@ class Registry(Mapping):
"""
if 'module' in context:
_logger.info('module %s: creating or updating database tables', context['module'])
+ elif context.get('models_to_check', False):
+ _logger.info("verifying fields for every extended model")
env = odoo.api.Environment(cr, SUPERUSER_ID, context)
models = [env[model_name] for model_name in model_names]