diff --git a/addons/account/data/mail_template_data.xml b/addons/account/data/mail_template_data.xml index f461a27145232043a0ff7899d3e94bddc22d2393..4bb340a4f5c38f2ba6b356cf25a8f0e3a2824d15 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 <%s>' % (object.user_id.name, object.user_id.email) or '')|safe}</field> + <field name="email_from">${(object.user_id.email and '"%s" <%s>' % (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 905f10f4334cd92de94e1bcdf081f21126da06e1..020d725e3caf6071ef1a8e53587e7618f71b2e35 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 8ae4230a7b20ee03037630df9410555b26c91ec3..0209ea5c849ea2193d89b00264fa1c15bfceba07 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 298738a0d6c54ebbbd7c86f133ae0ff59e8a0576..5de3e97ac4fe632b990b4dd7429ce7679cccfad8 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 4a50c812620f7e6fdeacf9fd9110fb9db534cf83..1fce897b602243105e93eecc3bc72588537b6a9d 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 00b716edb51ae19877c9d4171afdd24cd3c16404..503ac0bd0a75fbe5dde3a0fcc97bf9a719ffd648 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 0000000000000000000000000000000000000000..cde864bae21a11c0e4f50067aa46b4c497549b4c --- /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 0000000000000000000000000000000000000000..67e76b49098bc2eaeeb9eeec4d28e2f64621e5d4 --- /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 0000000000000000000000000000000000000000..e759f74fc8dba3b0da63684c75f0ac24dc55fc99 --- /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 0000000000000000000000000000000000000000..5a01046f36bbb0a09533840ad9a304bb1205fcb0 --- /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 9cd801144e8c5181fe25e9fa788608fcea01fdc9..7096852528c4b0c1fa33a1a5ce82ae93aea962b1 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 a2e5808f8be3ff6ffec34d5d0ad678be6fbc637d..2d602a36b9701a302cdce4faf5ab50275bbdbd14 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 f943fc6fda0a8afe4425a8809d3858216e7b79a6..f1bdb579a5d4c3b5a31012ac236a8eb7c8006104 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 b858540b3b8cf6d445d656388a50dd7fa8bda221..506cb5037a71da4fe630e4830b698f80ed4342b7 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 0eb1389d7a7ff3957f942378d694d3ae08ff0cfc..222ed8f1b4abf24608ad781aab4ffd5b7c012a1b 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 2ed94168f2ad56caecf6e221dafa42de88ef064a..ab1483026ae277857e16d6d1c5869093d547e18f 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" @@ -865,6 +865,13 @@ msgstr "" 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" diff --git a/addons/calendar/i18n/zh_CN.po b/addons/calendar/i18n/zh_CN.po index 8e768bb2786e91065fe8acff3cf8bb4d60457a68..37ccc73777294ca7df3370df4513219729e4900d 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 161130e1e9402f947968f0a46864d1f164304f9e..7a338adc52bf9bd22ea284e91bf25aec7692b340 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 1dc1294b67b732797ba8897dcb04fdfcdbf1d209..503973f4250fad1e004db148c12250c2671ff810 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 f1d4348f47747a02592a9fb886db00cd888f6f17..9406b7286abbd14c96a8596c0105e77823352e0e 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 86517b1d0ecd120fc03c402e387134be79969b3b..908b7587c5127640a6d2d35705cb024a716c36d8 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 f55e9ffd371af1e75c36180ad7fd91bdaaa37a00..418660796dea900fd5a39ed5b10c58089929a528 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 8fd4b774c5ee928b8c880d3f6dddc1729dde2388..59d096efcd1528d7834b32574744e4fa1d136677 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 df0df9e3388c231c1d9e3c6974c8dc455275c032..a422438778ce5dd550fda4f9d2f243aabd9ba966 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 acca821f58a9b672be043c19053d13cb19fd8cc2..5df7a3e46367d45bb8c084de9225850a3fb2fc08 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 6f884671c3754e0cacb5dca6f76efab0dbfc62be..5afe663eaf5b3274631dcc2062762d10f52bef5e 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 1b210c22eb4ee2d6ca58a4b7b918d7713cdecd72..97c88dfcbfad0225fb9b0253e2dff4b464db63f9 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', '<', 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 6276aa166ca55866b359f9b11f4da577e47d99f8..f58f49a32186a4a34a8dfe0792a3a9895c2657e3 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 7159ac3b31e5f28e4e093187665bb3eeac6f02ab..f31b16198943dd21ee0b4dfc3ec63f2dbc109fe8 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 97aa993aa7e6b3d670265a44ca01e8c4e7680a89..f5f962f6fa326a4c4c65e8cf41ade14e43ba43b7 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 67dee8c60dbf8317b263fbc3279f0823b2eb4b35..d417dc6807ce40bce885a2985d34ab3a70b396be 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 314e13f44ff61c86f7727153fc826e0c2787afac..2f04d8df53012803e700d23b4eebc23b7d019f9d 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 b989dc5f3bded69d3dcdf9269fcee28ee481b234..10f755b2fecbcb3485f2000c1d2131de94640f16 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 c43c4af4b0dac1ee07a75b568f388621b1891889..03ea4cd2a459bf8d38b7a6abe13bfce26560de81 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 1589f22d5a416f9fa3430981dd1f9b22fcd087e4..c89986556d07acd0dcfffd47a8229ad956514908 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 a9638223b4fdc75b3727da6bc69cd071c794d98a..b179108cd7dbb639e7fae14c58b8b399b1c7fae5 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 85cd5756e5135ecace42e176eea42822ad7df033..b04366f186e69d284e30ec8c2c621f332370e7c1 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 1b41565401db7dafcd720492d485dfd0377ad0ef..2ef110a6dae79d45a4dba0cd8f3be3828b0e974a 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 d3c075c3ff05c7f8e026f5d16394790d432a08f3..072342afc871c8374d5fcf57adcd9f40a7ef74df 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 <%s>' % (object.create_uid.name, object.create_uid.email) or '')|safe}</field> + <field name="email_from">${(object.create_uid.email and '"%s" <%s>' % (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 <%s>' % (object.create_uid.name, object.create_uid.email) or '')|safe}</field> + <field name="email_from">${(object.create_uid.email and '"%s" <%s>' % (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 78997867716d0af535e0e53d4f890542663ff122..72c1cedab76d8da65b66a51122cee36dfbbbc701 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 54fd5bc63f041946de95900be91621e1f207899b..e515bd32c82d19ff477da975fed88ab4fa148758 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 32b246189f6ad3805bab1628d21604dde01c58ba..b38c0edb03bdc5c7bfcc0f0e5dc4cb0b6f3772d4 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 5c9d0b6a2e54b9b91b08e0e878dd3ce7a496a966..ce8dcc651a17d02a6f47b5f88809595452cb50ac 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 <%s>' % (object.user_id.name, object.user_id.email) or '')|safe}</field> + <field name="email_from">${(object.user_id.email and '"%s" <%s>' % (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 e1ffda478abf948695a5b74ed41a9be18d69c35d..79dffdd719bbea33c2bcb4ae0db8477afe54820e 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 90ec0e3c55a4c3124355a609962e939621541fd5..1541859ac42bdf8c5773c8f42bc0bded21dcba6b 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 e621a86c61af83abb51f97700076479320ea9f57..28a0055b5a49188daa22cb43f8fedda0a1c3a377 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 700aa5455de80563897188e3cc37091b5d74c91b..1ca3b1195b5b4a7fd804e7eaee34ff438ed79c22 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 f1879f97d0620f37e3975ccd19c44539a868f3d8..9b5de71473ce7ac4590fff876769d8f93380db1b 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 656d6ea7364f6cfa125292eab41ce8075dea84a4..77747cdea5ce388f75402745300b1027ef335bb4 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 f23d836bc30ef7bca657a54f2738f07582e4ee36..8088454358579757eb32384656e3954d7b176a7f 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 4c2b213243f711bd10bd69db4a0f47906632c363..c6f67bc23fac275022758678e35fc3c71ba31a15 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 666b4a8e116de85bbcd7383a3032ab6fe3916902..e56e94fff934f4d2e93d6ad19e36af17e8f6bd7e 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 67698bc285c64fa215579fde6c686ec7ab5ba4d6..a9e6a27e07738144567e9b6eff49e83473fb4eb2 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 b3e06fa1716b646cd09d2f18766cb74d7c71a44d..657a8bbac8c904256fc2433ee7e10e77de830dde 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 62d862afe35a6ca90cd9b397fd075eec67eea76e..ead68c28274df05dbc63c1ff5590c4d088d69428 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 aa0d40af98e185309c1c581ed755ece168fb4691..9b47a9f791d461c4bb5bfcbeff96c0f0697aeca8 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 3aa8691fca74524a30e70fb694b3d4956ac946cc..ebe38118559e399e53f2bf8f54421b82b81a2ab6 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 a99870fae86d79b0a9d5728275f6ee9a1628f816..3026da8365e2684df8d144302e2f36cbcec29b3a 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 13d4198cceb3ae2ebe3a695f5c6e378686fd6887..dadd1484d460d02832f114964e52fabb13a4f411 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 fe58a04c1a82f1035cbf950702bd79db769695cb..ff3637e92d364fa25ae89c419b0090588172f7f2 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 0f130d3ce1078acb55a88e3200ff1d8bbdb0419c..74ce361e96b72ee2028e726665d6b09ababd906e 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 28ad85b892a5d1e08e775a3711f0e14b7d4a2833..3370eaeb5ce815bdace5875028fa02450e70b7b8 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 4dda572fb1340dc70e27175943b2579333bb60c5..b9f4e2fdc7bfe0ec5a737624a85ca4d766a07fb1 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 712b25aefb38c8778117f4a218d5970146b0b7ed..9e180138a21a451ad2a4127146cfea66c14c8c76 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]