diff options
112 files changed, 1165 insertions, 671 deletions
diff --git a/addons/account/i18n/fr.po b/addons/account/i18n/fr.po index 0f3b96ca128..eb62eed9d9b 100644 --- a/addons/account/i18n/fr.po +++ b/addons/account/i18n/fr.po @@ -4,7 +4,7 @@ # # Translators: # Xavier Belmere <Info@cartmeleon.com>, 2016 -# Martin Trigaux <mat@odoo.com>, 2016 +# Martin Trigaux, 2016 # Maxime Chambreuil <mchambreuil@ursainfosystems.com>, 2016 # Xavier Symons <xsy@openerp.com>, 2016 # Melanie Bernard <mbe@odoo.com>, 2016 @@ -14,7 +14,7 @@ # Olivier Lenoir <olivier.lenoir@free.fr>, 2016 # Olivier Dony <odo@odoo.com>, 2016 # Stanislas Sodonon <stanislas.sodonon@gmail.com>, 2016 -# Florian Hatat <mininet@wanadoo.fr>, 2016 +# Florian Hatat, 2016 # Nissar Chababy <funilrys@outlook.com>, 2016 # Nancy Bolognesi <nb@microcom.ca>, 2016 # Nicolas JEUDY <njeudy@panda-chi.io>, 2016 @@ -25,9 +25,9 @@ # Lucas Deliege <lud@odoo.com>, 2016 # Adriana Ierfino <adriana.ierfino@savoirfairelinux.com>, 2016 # Mickaël Audigane <maudigane@teclib.com>, 2016 -# ShevAbam <shevabam@gmail.com>, 2016 +# ShevAbam, 2016 # Sébastien LANGE (SYLEAM) <sebastien.lange@syleam.fr>, 2016 -# Fabrice Henrion <fhe@odoo.com>, 2016 +# Fabrice Henrion, 2016 # lucasdeliege <deliegelucas@gmail.com>, 2016 # Loic <loic.richard2@gmail.com>, 2016 # Daniel & Delphine <dd2013@leschoupinous.net>, 2016 @@ -37,9 +37,9 @@ # Frédéric LIETART <stuff@tifred.fr>, 2016 # Benjamin Delagoutte <ben@ampletus.fr>, 2016 # Mensanh Dodji Anani LAWSON <omolowo73@gmail.com>, 2016 -# Stéphane Bidoul (ACSONE) <stephane.bidoul@acsone.eu>, 2016 +# Stéphane Bidoul (ACSONE), 2016 # Lionel Sausin <ls@numerigraphe.com>, 2016 -# Hamid Darabi <hamid.darabi@gmail.com>, 2016 +# Hamid Darabi, 2016 # Nacim ABOURA <nacim.aboura@gmail.com>, 2016 # salwa belhadj <salwa.belhadj@gmail.com>, 2016 # Lamia Ishak <lamiaishak@hotmail.co.uk>, 2016 @@ -369,6 +369,50 @@ msgid "" "</p>\n" "</div>" msgstr "" +"<div>\n" +"<p>Cher ${object.partner_id.name}\n" +"% set access_action = object.with_context(force_website=True).get_access_action()\n" +"% set is_online = access_action and access_action['type'] == 'ir.actions.act_url'\n" +"% set access_url = object.get_mail_url()\n" +"\n" +"% if object.partner_id.parent_id:\n" +" (<i>${object.partner_id.parent_id.name}</i>)\n" +"% endif\n" +",</p>\n" +"<p>Voici, en pièce jointe, votre \n" +"% if object.number:\n" +"facture <strong>${object.number}</strong>\n" +"% else:\n" +"facture\n" +"% endif\n" +"% if object.origin:\n" +"(avec la référence ${object.origin})\n" +"% endif\n" +", son montant s'élève à <strong>${object.amount_total} ${object.currency_id.name}</strong>\n" +"émis par ${object.company_id.name}.\n" +"</p>\n" +"\n" +"% if is_online:\n" +" <br/><br/>\n" +" <center>\n" +" <a href=\"${access_url}\" style=\"background-color: #1abc9c; padding: 20px; text-decoration: none; color: #fff; border-radius: 5px; font-size: 16px;\" class=\"o_default_snippet_text\">Voir la facture</a>\n" +" </center>\n" +"% endif\n" +" <br/><br/>\n" +"\n" +"% if object.state=='paid':\n" +" <p>Cette facture est déjà payée.</p>\n" +"% else:\n" +" <p>Merci de procéder au payement dès que possible.</p>\n" +"% endif\n" +"\n" +"<p>Merci,</p>\n" +"<p style=\"color:#888888\">\n" +"% if object.user_id and object.user_id.signature:\n" +" ${object.user_id.signature | safe}\n" +"% endif\n" +"</p>\n" +"</div>" #. module: account #: model:ir.ui.view,arch_db:account.portal_my_invoices diff --git a/addons/account/i18n/zh_CN.po b/addons/account/i18n/zh_CN.po index 6d84fefc536..4195aa29b6e 100644 --- a/addons/account/i18n/zh_CN.po +++ b/addons/account/i18n/zh_CN.po @@ -5,8 +5,8 @@ # Translators: # Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 # Gary Wei <Gary.wei@elico-corp.com>, 2016 -# Martin Trigaux <mat@odoo.com>, 2016 -# fausthuang <faust_huang@hotmail.com>, 2016 +# Martin Trigaux, 2016 +# fausthuang, 2016 # 菜小蛇 <lttlsnk@gmail.com>, 2016 # Connie Xiao <connie.xiao@elico-corp.com>, 2016 # Michael Chong <michaelchong2005@gmail.com>, 2016 @@ -28,11 +28,11 @@ # mrshelly <mrshelly@hotmail.com>, 2016 # Kai Zhu <parahexen@gmail.com>, 2016 # Gang LIU <liu9ang@hotmail.com>, 2016 -# Brown Hu <suhyy@163.com>, 2016 +# Brown Hu, 2016 # 苏州远鼎 <tiexinliu@126.com>, 2016 # 军 李 <niathack@hotmail.com>, 2016 # Rona Lin <ssauapw@qq.com>, 2016 -# 林俊 <54773801@qq.com>, 2016 +# 山西清水欧度(QQ:54773801) <54773801@qq.com>, 2016 # 坤 陈 <1339537473@qq.com>, 2016 # Ted Wang <feiyuwang2012@gmail.com>, 2016 # Godners Ren <godners@163.com>, 2017 @@ -6190,7 +6190,7 @@ msgstr "无详情" msgid "" "No miscellaneous journal could be found. Please create one before " "proceeding." -msgstr "" +msgstr "未找到杂项日记账,请在处理之前先创建一个" #. module: account #: code:addons/account/models/account.py:116 diff --git a/addons/account/models/account_payment.py b/addons/account/models/account_payment.py index e17e48165a5..ce2d9e44d51 100644 --- a/addons/account/models/account_payment.py +++ b/addons/account/models/account_payment.py @@ -332,7 +332,7 @@ class account_payment(models.Model): else: if self.payment_type == 'inbound': domain.append(('at_least_one_inbound', '=', True)) - else: + elif self.payment_type == 'outbound': domain.append(('at_least_one_outbound', '=', True)) return {'domain': domain, 'journal_types': set(journal_type)} @@ -341,9 +341,16 @@ class account_payment(models.Model): jrnl_filters = self._compute_journal_domain_and_types() journal_types = jrnl_filters['journal_types'] domain_on_types = [('type', 'in', list(journal_types))] - if self.journal_id.type not in journal_types: - self.journal_id = self.env['account.journal'].search(domain_on_types, limit=1) - return {'domain': {'journal_id': jrnl_filters['domain'] + domain_on_types}} + + journal_domain = jrnl_filters['domain'] + domain_on_types + default_journal_id = self.env.context.get('default_journal_id') + if not default_journal_id: + if self.journal_id.type not in journal_types: + self.journal_id = self.env['account.journal'].search(domain_on_types, limit=1) + else: + journal_domain = journal_domain.append(('id', '=', default_journal_id)) + + return {'domain': {'journal_id': journal_domain}} @api.one @api.depends('invoice_ids', 'payment_type', 'partner_type', 'partner_id') @@ -374,6 +381,8 @@ class account_payment(models.Model): self.partner_type = 'customer' elif self.payment_type == 'outbound': self.partner_type = 'supplier' + else: + self.partner_type = False # Set payment method domain res = self._onchange_journal() if not res.get('domain', {}): @@ -505,7 +514,7 @@ class account_payment(models.Model): @api.multi def action_draft(self): return self.write({'state': 'draft'}) - + def action_validate_invoice_payment(self): """ Posts a payment used to pay an invoice. This function only posts the payment by default but can be overridden to apply specific post or pre-processing. @@ -669,7 +678,7 @@ class account_payment(models.Model): for inv in invoice: if inv.move_id: name += inv.number + ', ' - name = name[:len(name)-2] + name = name[:len(name)-2] return { 'name': name, 'account_id': self.destination_account_id.id, diff --git a/addons/account/views/res_config_settings_views.xml b/addons/account/views/res_config_settings_views.xml index c6dfbb2005e..5ba661a110f 100644 --- a/addons/account/views/res_config_settings_views.xml +++ b/addons/account/views/res_config_settings_views.xml @@ -168,10 +168,6 @@ <label for="currency_exchange_journal_id" class="col-md-3 o_light_label"/> <field name="currency_exchange_journal_id"/> </div> - <div class="row mt16"> - <label for="currency_exchange_journal_id" class="col-md-3 o_light_label"/> - <field name="currency_exchange_journal_id"/> - </div> </div> </div> </div> diff --git a/addons/account_analytic_default/i18n/zh_CN.po b/addons/account_analytic_default/i18n/zh_CN.po index 359a7c996f5..9955c54f69e 100644 --- a/addons/account_analytic_default/i18n/zh_CN.po +++ b/addons/account_analytic_default/i18n/zh_CN.po @@ -4,15 +4,16 @@ # # Translators: # Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 -# Martin Trigaux <mat@odoo.com>, 2017 +# Martin Trigaux, 2017 # 苏州远鼎 <tiexinliu@126.com>, 2017 +# 老窦 北京 <2662059195@qq.com>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server 10.saas~18\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: 苏州远鼎 <tiexinliu@126.com>, 2017\n" +"Last-Translator: 老窦 北京 <2662059195@qq.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" @@ -90,7 +91,7 @@ msgstr "创建时间" #. module: account_analytic_default #: model:ir.ui.view,arch_db:account_analytic_default.res_config_settings_view_form msgid "Default Analytic Values" -msgstr "" +msgstr "默认值" #. module: account_analytic_default #: model:ir.model.fields,help:account_analytic_default.field_account_analytic_default_date_stop diff --git a/addons/account_asset/i18n/zh_CN.po b/addons/account_asset/i18n/zh_CN.po index 0b45dbe3db8..73b6dbe44d8 100644 --- a/addons/account_asset/i18n/zh_CN.po +++ b/addons/account_asset/i18n/zh_CN.po @@ -3,18 +3,19 @@ # * account_asset # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2016 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 # SHRe Liu <shreliu@outlook.com>, 2016 # 苏州远鼎 <tiexinliu@126.com>, 2016 # Ted Wang <feiyuwang2012@gmail.com>, 2016 # Rangy Chen <rangychen@163.com>, 2017 +# 老窦 北京 <2662059195@qq.com>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-11-30 13:11+0000\n" "PO-Revision-Date: 2017-11-30 13:11+0000\n" -"Last-Translator: Rangy Chen <rangychen@163.com>, 2017\n" +"Last-Translator: 老窦 北京 <2662059195@qq.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" @@ -54,7 +55,7 @@ msgstr "# 分期明细" #: model:ir.cron,cron_name:account_asset.account_asset_cron #: model:ir.cron,name:account_asset.account_asset_cron msgid "Account Asset: Generate asset entries" -msgstr "" +msgstr "资产科目:生成资产分录" #. module: account_asset #: model:ir.model.fields,field_description:account_asset.field_asset_depreciation_confirmation_wizard_date @@ -89,7 +90,7 @@ msgstr "会计用于记录资产采购的原始价格" #: code:addons/account_asset/static/src/js/account_asset.js:52 #, python-format msgid "Accounting entries waiting for manual verification" -msgstr "" +msgstr "会计分录等待手动验证" #. module: account_asset #: model:ir.model.fields,field_description:account_asset.field_account_asset_asset_active diff --git a/addons/account_asset/models/account_invoice.py b/addons/account_asset/models/account_invoice.py index dd22ea851f3..1c8333f550a 100644 --- a/addons/account_asset/models/account_invoice.py +++ b/addons/account_asset/models/account_invoice.py @@ -3,7 +3,8 @@ from datetime import datetime from dateutil.relativedelta import relativedelta -from odoo import api, fields, models +from odoo import api, fields, models, _ +from odoo.exceptions import UserError from odoo.tools import DEFAULT_SERVER_DATE_FORMAT as DF from odoo.addons import decimal_precision as dp diff --git a/addons/account_budget/i18n/zh_CN.po b/addons/account_budget/i18n/zh_CN.po index 449c0bcf725..d5d2a814221 100644 --- a/addons/account_budget/i18n/zh_CN.po +++ b/addons/account_budget/i18n/zh_CN.po @@ -3,14 +3,15 @@ # * account_budget # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2016 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 +# 老窦 北京 <2662059195@qq.com>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-10-10 11:34+0000\n" "PO-Revision-Date: 2017-10-10 11:34+0000\n" -"Last-Translator: Jeffery CHEN <jeffery9@gmail.com>, 2016\n" +"Last-Translator: 老窦 北京 <2662059195@qq.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" @@ -278,7 +279,7 @@ msgstr "状态" #: code:addons/account_budget/models/account_budget.py:31 #, python-format msgid "The budget must have at least one account." -msgstr "" +msgstr "预算应该至少有一个科目" #. module: account_budget #: model:ir.model.fields,field_description:account_budget.field_crossovered_budget_lines_theoritical_amount diff --git a/addons/account_cancel/i18n/zh_CN.po b/addons/account_cancel/i18n/zh_CN.po index ee7ac910420..768096d01ca 100644 --- a/addons/account_cancel/i18n/zh_CN.po +++ b/addons/account_cancel/i18n/zh_CN.po @@ -3,18 +3,15 @@ # * account_cancel # # Translators: -# Martin Trigaux <mat@odoo.com>, 2017 -# 訾明华 <565209960@qq.com>, 2017 -# liAnGjiA <liangjia@qq.com>, 2017 -# Jeffery CHEN <jeffery9@gmail.com>, 2017 -# mrshelly <mrshelly@hotmail.com>, 2017 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 +# 老窦 北京 <2662059195@qq.com>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server 10.saas~18\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: mrshelly <mrshelly@hotmail.com>, 2017\n" +"Last-Translator: 老窦 北京 <2662059195@qq.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" @@ -51,4 +48,4 @@ msgstr "重置为草稿" #. module: account_cancel #: model:ir.ui.view,arch_db:account_cancel.bank_statement_cancel_form_inherit msgid "Revert reconciliation" -msgstr "" +msgstr "反核销" diff --git a/addons/account_check_printing/models/account_payment.py b/addons/account_check_printing/models/account_payment.py index bcf7e279747..3af1cfea95b 100644 --- a/addons/account_check_printing/models/account_payment.py +++ b/addons/account_check_printing/models/account_payment.py @@ -34,7 +34,7 @@ class AccountRegisterPayments(models.TransientModel): res = super(AccountRegisterPayments, self)._prepare_payment_vals(invoices) if self.payment_method_id == self.env.ref('account_check_printing.account_payment_method_check'): res.update({ - 'check_amount_in_words': self.check_amount_in_words, + 'check_amount_in_words': self.currency_id.amount_to_text(res['amount']) if self.multi else self.check_amount_in_words, 'check_manual_sequencing': self.check_manual_sequencing, }) return res diff --git a/addons/account_payment/i18n/zh_CN.po b/addons/account_payment/i18n/zh_CN.po index 47668d86e26..6f360b21074 100644 --- a/addons/account_payment/i18n/zh_CN.po +++ b/addons/account_payment/i18n/zh_CN.po @@ -3,18 +3,19 @@ # * account_payment # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2017 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2017 # Jeff Yu - Elico Corp <jeff.yu@elico-corp.com>, 2017 # glovebx <ruinning@163.com>, 2017 # Luke <cialuo@qq.com>, 2017 # Gary Wei <Gary.wei@elico-corp.com>, 2017 +# 老窦 北京 <2662059195@qq.com>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server saas~11.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-13 14:36+0000\n" "PO-Revision-Date: 2017-12-13 14:36+0000\n" -"Last-Translator: Gary Wei <Gary.wei@elico-corp.com>, 2017\n" +"Last-Translator: 老窦 北京 <2662059195@qq.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" @@ -50,7 +51,7 @@ msgstr "<i class=\"fa fa-arrow-circle-right\"/> 现在付款" msgid "" "<i class=\"fa fa-arrow-circle-right\"/><span class=\"hidden-xs\"> Pay " "Now</span>" -msgstr "" +msgstr "立即支付" #. module: account_payment #: model:ir.ui.view,arch_db:account_payment.portal_invoice_page_inherit_payment diff --git a/addons/barcodes/i18n/zh_CN.po b/addons/barcodes/i18n/zh_CN.po index 593952080e4..b8d23102465 100644 --- a/addons/barcodes/i18n/zh_CN.po +++ b/addons/barcodes/i18n/zh_CN.po @@ -3,16 +3,17 @@ # * barcodes # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2016 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 # 苏州远鼎 <tiexinliu@126.com>, 2016 # liAnGjiA <liangjia@qq.com>, 2017 +# 老窦 北京 <2662059195@qq.com>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server 10.saas~18\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: liAnGjiA <liangjia@qq.com>, 2017\n" +"Last-Translator: 老窦 北京 <2662059195@qq.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" @@ -193,7 +194,7 @@ msgstr "编码" #: code:addons/barcodes/static/src/js/barcode_form_view.js:301 #, python-format msgid "Error : Barcode command is undefined" -msgstr "" +msgstr "错误:条码命令未定义" #. module: barcodes #. openerp-web diff --git a/addons/barcodes/models/__init__.py b/addons/barcodes/models/__init__.py index 05b9acf6f97..e3f49cb14ed 100644 --- a/addons/barcodes/models/__init__.py +++ b/addons/barcodes/models/__init__.py @@ -1,3 +1,4 @@ # -*- coding: utf-8 -*- from . import barcodes from . import barcode_events_mixin +from . import ir_http diff --git a/addons/barcodes/models/ir_http.py b/addons/barcodes/models/ir_http.py new file mode 100644 index 00000000000..7ff6aa7c8f2 --- /dev/null +++ b/addons/barcodes/models/ir_http.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import models + + +class IrHttp(models.AbstractModel): + _inherit = 'ir.http' + + def session_info(self): + res = super(IrHttp, self).session_info() + res['max_time_between_keys_in_ms'] = int( + self.env['ir.config_parameter'].sudo().get_param('barcode.max_time_between_keys_in_ms', default='55')) + return res diff --git a/addons/barcodes/static/src/js/barcode_events.js b/addons/barcodes/static/src/js/barcode_events.js index f26748ac7b3..e02d3aafdb7 100644 --- a/addons/barcodes/static/src/js/barcode_events.js +++ b/addons/barcodes/static/src/js/barcode_events.js @@ -3,6 +3,7 @@ odoo.define('barcodes.BarcodeEvents', function(require) { var core = require('web.core'); var mixins = require('web.mixins'); +var session = require('web.session'); // For IE >= 9, use this, new CustomEvent(), instead of new Event() @@ -26,7 +27,7 @@ var BarcodeEvents = core.Class.extend(mixins.PropertiesMixin, { suffix: /[\n\r\t]+/, // Keys from a barcode scanner are usually processed as quick as possible, // but some scanners can use an intercharacter delay (we support <= 50 ms) - max_time_between_keys_in_ms: 55, + max_time_between_keys_in_ms: session.max_time_between_keys_in_ms || 55, init: function() { mixins.PropertiesMixin.init.call(this); diff --git a/addons/base_automation/i18n/ru.po b/addons/base_automation/i18n/ru.po index 978a993a70a..6d5698ee8c0 100644 --- a/addons/base_automation/i18n/ru.po +++ b/addons/base_automation/i18n/ru.po @@ -3,25 +3,26 @@ # * base_automation # # Translators: -# Martin Trigaux <mat@odoo.com>, 2017 +# Martin Trigaux, 2017 # Max Belyanin <maxbelyanin@gmail.com>, 2017 # Masha Koc <mariya.kos.ua@gmail.com>, 2017 # Максим Дронь <dronmax@gmail.com>, 2017 # Sergey Vilizhanin <sv@grimmette.ru>, 2017 # Viktor Pogrebniak <vp@aifil.ru>, 2017 -# Эдуард Манятовский <manyatovskiy@gmail.com>, 2017 +# Collex100, 2017 # Gennady Marchenko <gennadym@gmail.com>, 2017 # Русский «kolobok2048» Ивашка <kolobok2048@gmail.com>, 2017 # Denis Trepalin <zekarious@gmail.com>, 2017 # Артур Чеботарь <artcha.chebotar@gmail.com>, 2017 -# Dimko Pythonic <d.v.selitsky@gmail.com>, 2017 +# Dmitry sky <d.v.selitsky@gmail.com>, 2017 +# Yuriy Ney <k_wizard@mail.ru>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server 10.saas~18\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-10-02 11:26+0000\n" "PO-Revision-Date: 2017-10-02 11:26+0000\n" -"Last-Translator: Dimko Pythonic <d.v.selitsky@gmail.com>, 2017\n" +"Last-Translator: Yuriy Ney <k_wizard@mail.ru>, 2018\n" "Language-Team: Russian (https://www.transifex.com/odoo/teams/41243/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -162,12 +163,12 @@ msgstr "Перед обновлением домена" #. module: base_automation #: model:ir.model.fields,field_description:base_automation.field_base_automation_binding_model_id msgid "Binding Model" -msgstr "" +msgstr "Связанная модель" #. module: base_automation #: model:ir.model.fields,field_description:base_automation.field_base_automation_binding_type msgid "Binding Type" -msgstr "" +msgstr "Связанный Тип" #. module: base_automation #: selection:base.automation.lead.test,state:0 diff --git a/addons/board/i18n/zh_CN.po b/addons/board/i18n/zh_CN.po index 155359f3dab..95567773369 100644 --- a/addons/board/i18n/zh_CN.po +++ b/addons/board/i18n/zh_CN.po @@ -3,14 +3,15 @@ # * board # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2016 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 +# 老窦 北京 <2662059195@qq.com>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server 10.saas~18\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: Jeffery CHEN <jeffery9@gmail.com>, 2016\n" +"Last-Translator: 老窦 北京 <2662059195@qq.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" @@ -56,7 +57,7 @@ msgstr "添加到我的仪表板" #: code:addons/board/static/src/js/dashboard.js:335 #, python-format msgid "Are you sure you want to remove this item?" -msgstr "" +msgstr "你确定要删除此项吗?" #. module: board #: model:ir.model,name:board.model_board_board diff --git a/addons/calendar/i18n/zh_CN.po b/addons/calendar/i18n/zh_CN.po index 84892dd51a7..415c7674f57 100644 --- a/addons/calendar/i18n/zh_CN.po +++ b/addons/calendar/i18n/zh_CN.po @@ -8,15 +8,16 @@ # liAnGjiA <liangjia@qq.com>, 2017 # Talway <9010446@qq.com>, 2017 # Jeff Yu - Elico Corp <jeff.yu@elico-corp.com>, 2017 -# Martin Trigaux <mat@odoo.com>, 2017 +# Martin Trigaux, 2017 # Gary Wei <Gary.wei@elico-corp.com>, 2017 +# 老窦 北京 <2662059195@qq.com>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-11-30 13:12+0000\n" "PO-Revision-Date: 2017-11-30 13:12+0000\n" -"Last-Translator: Gary Wei <Gary.wei@elico-corp.com>, 2017\n" +"Last-Translator: 老窦 北京 <2662059195@qq.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" @@ -335,37 +336,37 @@ msgstr "%s拒绝了邀请" #. module: calendar #: model:calendar.alarm,name:calendar.alarm_notif_5 msgid "1 Day(s)" -msgstr "" +msgstr "1天" #. module: calendar #: model:calendar.alarm,name:calendar.alarm_notif_3 msgid "1 Hour(s)" -msgstr "" +msgstr "1小时" #. module: calendar #: model:calendar.alarm,name:calendar.alarm_notif_1 msgid "15 Minute(s)" -msgstr "" +msgstr "15分钟" #. module: calendar #: model:calendar.alarm,name:calendar.alarm_notif_4 msgid "2 Hour(s)" -msgstr "" +msgstr "2小时" #. module: calendar #: model:calendar.alarm,name:calendar.alarm_mail_1 msgid "3 Hour(s), by e-mail" -msgstr "" +msgstr "3小时发邮件" #. module: calendar #: model:calendar.alarm,name:calendar.alarm_notif_2 msgid "30 Minute(s)" -msgstr "" +msgstr "20分钟" #. module: calendar #: model:calendar.alarm,name:calendar.alarm_mail_2 msgid "6 Hour(s), by e-mail" -msgstr "" +msgstr "6小时发邮件" #. module: calendar #: model:ir.ui.view,arch_db:calendar.view_calendar_event_form @@ -484,14 +485,14 @@ msgstr "日程邀请" #. module: calendar #: model:ir.model.fields,field_description:calendar.field_mail_activity_calendar_event_id msgid "Calendar Meeting" -msgstr "" +msgstr "日历会议" #. module: calendar #: model:ir.actions.server,name:calendar.ir_cron_scheduler_alarm_ir_actions_server #: model:ir.cron,cron_name:calendar.ir_cron_scheduler_alarm #: model:ir.cron,name:calendar.ir_cron_scheduler_alarm msgid "Calendar: Event Reminder" -msgstr "" +msgstr "日历:活动提醒" #. module: calendar #: model:ir.ui.view,arch_db:calendar.view_calendar_event_form @@ -709,7 +710,7 @@ msgstr "所有人" #: code:addons/calendar/models/mail_activity.py:38 #, python-format msgid "Feedback: " -msgstr "" +msgstr "反馈:" #. module: calendar #: selection:calendar.event,byday:0 @@ -1082,7 +1083,7 @@ msgstr "循环规则" #. module: calendar #: model:ir.model.fields,field_description:calendar.field_calendar_alarm_duration msgid "Remind Before" -msgstr "" +msgstr "提醒早于" #. module: calendar #: model:ir.model.fields,field_description:calendar.field_calendar_event_alarm_ids @@ -1124,7 +1125,7 @@ msgstr "负责人" #. module: calendar #: selection:calendar.alarm,type:0 msgid "SMS Text Message" -msgstr "" +msgstr "短信" #. module: calendar #: model:ir.model.fields,field_description:calendar.field_calendar_event_sa @@ -1139,7 +1140,7 @@ msgstr "周六" #. module: calendar #: model:ir.ui.view,arch_db:calendar.mail_activity_view_form_popup msgid "Schedule a meeting" -msgstr "" +msgstr "安排会议" #. module: calendar #: model:ir.ui.view,arch_db:calendar.view_calendar_event_search diff --git a/addons/crm/i18n/zh_CN.po b/addons/crm/i18n/zh_CN.po index 71e84da8ba8..eccfdd823ea 100644 --- a/addons/crm/i18n/zh_CN.po +++ b/addons/crm/i18n/zh_CN.po @@ -3,10 +3,10 @@ # * crm # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2016 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 # 苏州远鼎 <tiexinliu@126.com>, 2016 # Ted Wang <feiyuwang2012@gmail.com>, 2016 -# Martin Trigaux <mat@odoo.com>, 2016 +# Martin Trigaux, 2016 # zpq001 <zpq001@live.com>, 2017 # waveyeung <waveyeung@qq.com>, 2017 # xiaobin wu <bd5dml@gmail.com>, 2017 @@ -259,7 +259,7 @@ msgstr "活动完成目标" #. module: crm #: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter msgid "Activities Todo" -msgstr "" +msgstr "活动待办" #. module: crm #: model:ir.model.fields,field_description:crm.field_crm_lead_kanban_state @@ -451,7 +451,7 @@ msgstr "取消" #. module: crm #: model:ir.actions.act_window,name:crm.crm_team_act_tree msgid "Cases by Sales Channel" -msgstr "" +msgstr "按销售漏斗" #. module: crm #: model:ir.model,name:crm.model_crm_lead_tag @@ -1753,7 +1753,7 @@ msgstr "业务开启的天数" #. module: crm #: model:ir.model.fields,field_description:crm.field_crm_team_opportunities_count msgid "Number of open opportunities" -msgstr "" +msgstr "开启的商机数" #. module: crm #: model:ir.actions.act_window,help:crm.crm_case_form_view_salesteams_opportunity diff --git a/addons/crm_project/i18n/zh_CN.po b/addons/crm_project/i18n/zh_CN.po index cf03ee80adf..2b9d021df83 100644 --- a/addons/crm_project/i18n/zh_CN.po +++ b/addons/crm_project/i18n/zh_CN.po @@ -4,17 +4,17 @@ # # Translators: # liAnGjiA <liangjia@qq.com>, 2017 -# Jeffery CHEN <jeffery9@gmail.com>, 2017 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2017 # waveyeung <waveyeung@qq.com>, 2017 # 老窦 北京 <2662059195@qq.com>, 2017 -# Martin Trigaux <mat@odoo.com>, 2017 +# Martin Trigaux, 2017 msgid "" msgstr "" "Project-Id-Version: Odoo Server 10.saas~18\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-09-20 09:52+0000\n" "PO-Revision-Date: 2017-09-20 09:52+0000\n" -"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n" +"Last-Translator: Martin Trigaux, 2017\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" @@ -39,7 +39,7 @@ msgstr "取消" #: model:ir.ui.view,arch_db:crm_project.crm_lead_convert2task_view_form #: model:ir.ui.view,arch_db:crm_project.crm_lead_view_form msgid "Convert to Task" -msgstr "" +msgstr "转换为任务" #. module: crm_project #: model:ir.ui.view,arch_db:crm_project.crm_lead_convert2task_view_form diff --git a/addons/delivery/i18n/zh_CN.po b/addons/delivery/i18n/zh_CN.po index d8077b30a58..a511738f8fc 100644 --- a/addons/delivery/i18n/zh_CN.po +++ b/addons/delivery/i18n/zh_CN.po @@ -3,19 +3,20 @@ # * delivery # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2016 -# 林俊 <54773801@qq.com>, 2016 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 +# 山西清水欧度(QQ:54773801) <54773801@qq.com>, 2016 # 苏州远鼎 <tiexinliu@126.com>, 2016 # Ted Wang <feiyuwang2012@gmail.com>, 2016 -# Martin Trigaux <mat@odoo.com>, 2016 +# Martin Trigaux, 2016 # Xiaoming Deng <sumandeng@hotmail.com>, 2016 +# 老窦 北京 <2662059195@qq.com>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server saas~11.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-13 14:36+0000\n" "PO-Revision-Date: 2017-12-13 14:36+0000\n" -"Last-Translator: Xiaoming Deng <sumandeng@hotmail.com>, 2016\n" +"Last-Translator: 老窦 北京 <2662059195@qq.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" @@ -26,7 +27,7 @@ msgstr "" #. module: delivery #: model:mail.template,report_name:delivery.mail_template_data_delivery_confirmation msgid "${(object.name or '').replace('/','_')}" -msgstr "" +msgstr "${(object.name or ‘’).replace(‘/‘,’_’)}" #. module: delivery #: model:mail.template,subject:delivery.mail_template_data_delivery_confirmation @@ -143,7 +144,7 @@ msgstr "<strong>承运商</strong>" #. module: delivery #: model:ir.ui.view,arch_db:delivery.report_delivery_document2 msgid "<strong>Tracking Number</strong>" -msgstr "" +msgstr "<strong>跟踪号码</strong>" #. module: delivery #: model:ir.ui.view,arch_db:delivery.report_delivery_document2 @@ -266,7 +267,7 @@ msgstr "交货承运商" #. module: delivery #: model:ir.ui.view,arch_db:delivery.view_delivery_price_rule_form msgid "Delivery Cost" -msgstr "" +msgstr "运输成本" #. module: delivery #: model:ir.ui.view,arch_db:delivery.view_picking_withcarrier_out_form diff --git a/addons/event/i18n/zh_CN.po b/addons/event/i18n/zh_CN.po index d2a8ba8b759..b1bc9031981 100644 --- a/addons/event/i18n/zh_CN.po +++ b/addons/event/i18n/zh_CN.po @@ -3,10 +3,10 @@ # * event # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2016 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 # 卓忆科技 <zhanghao@jointd.com>, 2016 # 老窦 北京 <2662059195@qq.com>, 2017 -# Martin Trigaux <mat@odoo.com>, 2017 +# Martin Trigaux, 2017 # Michael Chong <michaelchong2005@gmail.com>, 2017 # SHOM <shanmuxin@yeah.net>, 2017 # liAnGjiA <liangjia@qq.com>, 2017 @@ -748,7 +748,7 @@ msgstr "活动" #. module: event #: model:ir.model,name:event.model_event_mail msgid "Event Automated Mailing" -msgstr "" +msgstr "自动发邮件" #. module: event #: model:ir.actions.report,name:event.report_event_event_badge @@ -833,7 +833,7 @@ msgstr "活动类型" #: model:ir.cron,cron_name:event.event_mail_scheduler #: model:ir.cron,name:event.event_mail_scheduler msgid "Event: Mail Scheduler" -msgstr "" +msgstr "活动:邮件计划" #. module: event #: model:ir.actions.act_window,name:event.action_event_view diff --git a/addons/event/models/event_mail.py b/addons/event/models/event_mail.py index d87c24dd663..1013f5a083b 100644 --- a/addons/event/models/event_mail.py +++ b/addons/event/models/event_mail.py @@ -96,6 +96,7 @@ class EventMailScheduler(models.Model): @api.one def execute(self): + now = fields.Datetime.now() if self.interval_type == 'after_sub': # update registration lines lines = [ @@ -105,9 +106,10 @@ class EventMailScheduler(models.Model): if lines: self.write({'mail_registration_ids': lines}) # execute scheduler on registrations - self.mail_registration_ids.filtered(lambda reg: reg.scheduled_date and reg.scheduled_date <= datetime.strftime(fields.datetime.now(), tools.DEFAULT_SERVER_DATETIME_FORMAT)).execute() + self.mail_registration_ids.filtered(lambda reg: reg.scheduled_date and reg.scheduled_date <= now).execute() else: - if not self.mail_sent: + # Do not send emails if the mailing was scheduled before the event but the event is over + if not self.mail_sent and (self.interval_type != 'before_event' or self.event_id.date_end > now): self.event_id.mail_attendees(self.template_id.id) self.write({'mail_sent': True}) return True diff --git a/addons/fetchmail/i18n/zh_CN.po b/addons/fetchmail/i18n/zh_CN.po index 3bf58ecf606..d7a84ef44e6 100644 --- a/addons/fetchmail/i18n/zh_CN.po +++ b/addons/fetchmail/i18n/zh_CN.po @@ -3,15 +3,16 @@ # * fetchmail # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2016 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 # liAnGjiA <liangjia@qq.com>, 2017 +# 老窦 北京 <2662059195@qq.com>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server 10.saas~18\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: liAnGjiA <liangjia@qq.com>, 2017\n" +"Last-Translator: 老窦 北京 <2662059195@qq.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" @@ -131,7 +132,7 @@ msgstr "入局邮件服务器" #. module: fetchmail #: model:ir.ui.view,arch_db:fetchmail.res_config_settings_view_form msgid "Incoming Email Servers" -msgstr "" +msgstr "收取邮件服务器" #. module: fetchmail #: model:ir.ui.view,arch_db:fetchmail.view_email_server_form @@ -218,7 +219,7 @@ msgstr "可选的自定义服务器动作,用于在收到邮件时自动触发 #. module: fetchmail #: model:ir.ui.view,arch_db:fetchmail.res_config_settings_view_form msgid "Outgoing Email Servers" -msgstr "" +msgstr "发送邮件服务器" #. module: fetchmail #: model:ir.model,name:fetchmail.model_mail_mail diff --git a/addons/fleet/i18n/zh_CN.po b/addons/fleet/i18n/zh_CN.po index 261cb8fc25c..6e7f1722098 100644 --- a/addons/fleet/i18n/zh_CN.po +++ b/addons/fleet/i18n/zh_CN.po @@ -5,15 +5,16 @@ # Translators: # Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 # 苏州远鼎 <tiexinliu@126.com>, 2016 -# Martin Trigaux <mat@odoo.com>, 2017 +# Martin Trigaux, 2017 # liAnGjiA <liangjia@qq.com>, 2017 +# 老窦 北京 <2662059195@qq.com>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server 10.saas~18\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-09-20 09:54+0000\n" "PO-Revision-Date: 2017-09-20 09:54+0000\n" -"Last-Translator: liAnGjiA <liangjia@qq.com>, 2017\n" +"Last-Translator: 老窦 北京 <2662059195@qq.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" @@ -170,7 +171,7 @@ msgstr "更换刹车片" #. module: fleet #: model:ir.model,name:fleet.model_fleet_vehicle_model_brand msgid "Brand of the vehicle" -msgstr "" +msgstr "车辆品牌" #. module: fleet #: model:fleet.vehicle.tag,name:fleet.vehicle_tag_break diff --git a/addons/gamification/i18n/zh_CN.po b/addons/gamification/i18n/zh_CN.po index 076d5ca7c64..94111533404 100644 --- a/addons/gamification/i18n/zh_CN.po +++ b/addons/gamification/i18n/zh_CN.po @@ -3,15 +3,16 @@ # * gamification # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2016 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 # 卓忆科技 <zhanghao@jointd.com>, 2016 +# 老窦 北京 <2662059195@qq.com>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server 10.saas~18\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-10-02 11:27+0000\n" "PO-Revision-Date: 2017-10-02 11:27+0000\n" -"Last-Translator: 卓忆科技 <zhanghao@jointd.com>, 2016\n" +"Last-Translator: 老窦 北京 <2662059195@qq.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" @@ -355,6 +356,8 @@ msgid "" "<span class=\"o_stat_text\">Related</span>\n" " <span class=\"o_stat_text\">Goals</span>" msgstr "" +"<span class=\"o_stat_text\">相关的</span>\n" +"<span class=\"o_stat_text\">目标</span>" #. module: gamification #: model:ir.actions.act_window,help:gamification.badge_list_action diff --git a/addons/hr/views/hr_views.xml b/addons/hr/views/hr_views.xml index 781f5faaa7e..ace9e0e1078 100644 --- a/addons/hr/views/hr_views.xml +++ b/addons/hr/views/hr_views.xml @@ -290,12 +290,14 @@ </field> </record> + <!-- TODO remove me in master --> <record id="hr_employee_action_subordinate_hierachy" model="ir.actions.act_window"> <field name="name">Subordinate Hierarchy</field> <field name="type">ir.actions.act_window</field> <field name="res_model">hr.employee</field> - <field name="domain">[('id','in',active_ids)]</field> - <field name="view_type">tree</field> + <field name="domain">['|', ('id','in',active_ids), ('parent_id', 'in', active_ids)]</field> + <field name="view_type">form</field> + <field name="view_mode">tree,form</field> <field name="view_id" ref="view_partner_tree2"/> <field name="binding_model_id" ref="hr.model_hr_employee"/> </record> diff --git a/addons/hr_gamification/i18n/zh_CN.po b/addons/hr_gamification/i18n/zh_CN.po index 8ce6c1d2906..4a5b825b586 100644 --- a/addons/hr_gamification/i18n/zh_CN.po +++ b/addons/hr_gamification/i18n/zh_CN.po @@ -3,16 +3,17 @@ # * hr_gamification # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2016 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 # Xu Lei <xulei8@qq.com>, 2017 # Talway <9010446@qq.com>, 2017 +# 老窦 北京 <2662059195@qq.com>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server 10.saas~18\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: Talway <9010446@qq.com>, 2017\n" +"Last-Translator: 老窦 北京 <2662059195@qq.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" @@ -94,7 +95,7 @@ msgstr "描述他们做了什么,以及为什么它很重要(将公开)" #. module: hr_gamification #: model:ir.model.fields,field_description:hr_gamification.field_hr_employee_direct_badge_ids msgid "Direct Badge" -msgstr "" +msgstr "直接徽章" #. module: hr_gamification #: model:ir.model,name:hr_gamification.model_hr_employee diff --git a/addons/hr_holidays/i18n/zh_CN.po b/addons/hr_holidays/i18n/zh_CN.po index 75636564d8b..f32065ad940 100644 --- a/addons/hr_holidays/i18n/zh_CN.po +++ b/addons/hr_holidays/i18n/zh_CN.po @@ -3,17 +3,18 @@ # * hr_holidays # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2016 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 # zhichen ge <mangoge1999@gmail.com>, 2016 # liAnGjiA <liangjia@qq.com>, 2017 # Connie Xiao <connie.xiao@elico-corp.com>, 2017 +# 老窦 北京 <2662059195@qq.com>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server saas~11.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-13 14:36+0000\n" "PO-Revision-Date: 2017-12-13 14:36+0000\n" -"Last-Translator: Connie Xiao <connie.xiao@elico-corp.com>, 2017\n" +"Last-Translator: 老窦 北京 <2662059195@qq.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" @@ -50,7 +51,7 @@ msgstr "!important; font-size: 8px; min-width: 18px\">" #: code:addons/hr_holidays/models/hr_holidays.py:123 #, python-format msgid "%g remaining out of %g" -msgstr "" +msgstr "%g剩余%g" #. module: hr_holidays #: code:addons/hr_holidays/models/hr_holidays.py:341 @@ -94,12 +95,12 @@ msgstr "<th class=\"text-center\" colspan=" #. module: hr_holidays #: model:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_kanban msgid "<small class=\"text-muted\">from</small>" -msgstr "" +msgstr "<small class=\"text-muted\">从</small>" #. module: hr_holidays #: model:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_kanban msgid "<small class=\"text-muted\">to</small>" -msgstr "" +msgstr "<small class=\"text-muted\">到</small>" #. module: hr_holidays #: model:ir.ui.view,arch_db:hr_holidays.report_holidayssummary diff --git a/addons/hr_payroll/i18n/zh_CN.po b/addons/hr_payroll/i18n/zh_CN.po index 3f05f372c02..3a9bb85de36 100644 --- a/addons/hr_payroll/i18n/zh_CN.po +++ b/addons/hr_payroll/i18n/zh_CN.po @@ -3,9 +3,9 @@ # * hr_payroll # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2016 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 # Gary Wei <Gary.wei@elico-corp.com>, 2016 -# Martin Trigaux <mat@odoo.com>, 2016 +# Martin Trigaux, 2016 # Connie Xiao <connie.xiao@elico-corp.com>, 2017 # 老窦 北京 <2662059195@qq.com>, 2017 msgid "" @@ -153,7 +153,7 @@ msgstr "添加内部备注" #. module: hr_payroll #: model:ir.ui.view,arch_db:hr_payroll.hr_contract_advantage_template_view_form msgid "Advantage Name" -msgstr "" +msgstr "补贴名称" #. module: hr_payroll #: model:ir.actions.act_window,name:hr_payroll.act_children_salary_rules diff --git a/addons/hr_recruitment/i18n/zh_CN.po b/addons/hr_recruitment/i18n/zh_CN.po index 361d4e4f162..97a79799599 100644 --- a/addons/hr_recruitment/i18n/zh_CN.po +++ b/addons/hr_recruitment/i18n/zh_CN.po @@ -3,22 +3,22 @@ # * hr_recruitment # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2016 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 # 苏州远鼎 <tiexinliu@126.com>, 2016 -# Bo Cao <cao.poobo@hotmail.com>, 2017 +# Bo Cao, 2017 # liAnGjiA <liangjia@qq.com>, 2017 -# Martin Trigaux <mat@odoo.com>, 2017 +# Martin Trigaux, 2017 # liulixia <liu.lixia@elico-corp.com>, 2017 # 卓忆科技 <zhanghao@jointd.com>, 2017 # 老窦 北京 <2662059195@qq.com>, 2017 -# fausthuang <faust_huang@hotmail.com>, 2017 +# fausthuang, 2017 msgid "" msgstr "" "Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-11-16 08:08+0000\n" "PO-Revision-Date: 2017-11-16 08:08+0000\n" -"Last-Translator: fausthuang <faust_huang@hotmail.com>, 2017\n" +"Last-Translator: fausthuang, 2017\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" @@ -505,7 +505,7 @@ msgstr "别名的模型" #. module: hr_recruitment #: model:ir.ui.menu,name:hr_recruitment.menu_crm_case_categ_all_app msgid "All Applications" -msgstr "" +msgstr "全部申请" #. module: hr_recruitment #: model:ir.model,name:hr_recruitment.model_hr_applicant @@ -618,7 +618,7 @@ msgstr "附件" #. module: hr_recruitment #: model:ir.model.fields,field_description:hr_recruitment.field_hr_recruitment_stage_template_id msgid "Automated Email" -msgstr "" +msgstr "自动发邮件" #. module: hr_recruitment #: model:ir.model.fields,field_description:hr_recruitment.field_hr_applicant_availability diff --git a/addons/hr_timesheet/i18n/zh_CN.po b/addons/hr_timesheet/i18n/zh_CN.po index 069ac9b7b44..94a6b38f53b 100644 --- a/addons/hr_timesheet/i18n/zh_CN.po +++ b/addons/hr_timesheet/i18n/zh_CN.po @@ -3,7 +3,7 @@ # * hr_timesheet # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2016 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 # 苏州远鼎 <tiexinliu@126.com>, 2016 # zyx <zheng.yaxi@elico-corp.com>, 2017 # Maie <m@maie.name>, 2017 @@ -32,7 +32,7 @@ msgstr "<span class=\"o_label\">工时表</span>" #. module: hr_timesheet #: model:ir.ui.view,arch_db:hr_timesheet.hr_employee_view_form_inherit_timesheet msgid "<span class=\"o_stat_text\">Timesheets</span>" -msgstr "" +msgstr "<span class=\"o_stat_text\">工时表</span>" #. module: hr_timesheet #: model:ir.ui.view,arch_db:hr_timesheet.report_timesheet @@ -42,7 +42,7 @@ msgstr "<span>工时表条目</span>" #. module: hr_timesheet #: model:ir.ui.view,arch_db:hr_timesheet.view_kanban_account_analytic_line msgid "<strong>Duration: </strong>" -msgstr "" +msgstr "<strong>时长:</strong>" #. module: hr_timesheet #: model:ir.ui.view,arch_db:hr_timesheet.report_timesheet diff --git a/addons/hr_timesheet/models/project.py b/addons/hr_timesheet/models/project.py index 0f177599192..e335789a230 100644 --- a/addons/hr_timesheet/models/project.py +++ b/addons/hr_timesheet/models/project.py @@ -50,7 +50,7 @@ class Task(models.Model): if 'project_id' in values: project_id = values.get('project_id') # a timesheet must have an analytic account (and a project) - if not project_id: + if self and not project_id: raise UserError(_('This task must have a project since they are linked to timesheets.')) self.sudo().mapped('timesheet_ids').write({ 'project_id': project_id, diff --git a/addons/http_routing/models/ir_http.py b/addons/http_routing/models/ir_http.py index 34e100cea2e..4011f4987d7 100644 --- a/addons/http_routing/models/ir_http.py +++ b/addons/http_routing/models/ir_http.py @@ -418,6 +418,8 @@ class IrHttp(models.AbstractModel): try: _, path = rule.build(arguments) assert path is not None + except odoo.exceptions.MissingError: + return cls._handle_exception(werkzeug.exceptions.NotFound()) except Exception as e: return cls._handle_exception(e) diff --git a/addons/iap/static/src/xml/iap_templates.xml b/addons/iap/static/src/xml/iap_templates.xml index 9b52a4ec445..4995c4527e3 100644 --- a/addons/iap/static/src/xml/iap_templates.xml +++ b/addons/iap/static/src/xml/iap_templates.xml @@ -17,9 +17,11 @@ </div> <t t-extend="DashboardApps"> - <t t-jquery=".o_web_settings_dashboard_pills" t-operation="append"> - <a class="pull-right" t-att-href="widget.data.url" target="_blank"> - <i class="fa fa-money fa-2x text-muted"/> In-App Purchases</a> + <t t-jquery=".o_web_settings_dashboard_pills" t-operation="after"> + <div class="text-center" style="display: inline-block"> + <a t-att-href="widget.data.url" target="_blank"> + <i class="fa fa-money fa-2x text-muted"/> In-App Purchases</a> + </div> </t> </t> diff --git a/addons/l10n_in_hr_payroll/views/report_payslip_details_template.xml b/addons/l10n_in_hr_payroll/views/report_payslip_details_template.xml index 72bc16378ab..44137ab88f5 100644 --- a/addons/l10n_in_hr_payroll/views/report_payslip_details_template.xml +++ b/addons/l10n_in_hr_payroll/views/report_payslip_details_template.xml @@ -62,7 +62,8 @@ <strong><span t-esc="h['rule_category']"/></strong> </td> <td> - <strong><span t-esc="format(h['total'], 'monetary', o.company_id.currency_id)"/></strong> + <strong><span t-esc="h['total']" + t-esc-options='{"widget": "monetary", "display_currency": o.company_id.currency_id}'/></strong> </td> </tr> </t> @@ -75,7 +76,8 @@ <span t-esc="'..'*h['level']"/><span t-esc="h['rule_category']"/> </td> <td> - <span t-esc="format(h['total'], 'monetary', o.company_id.currency_id)"/> + <span t-esc="h['total']" + t-esc-options='{"widget": "monetary", "display_currency": o.company_id.currency_id}'/> </td> </tr> </t> diff --git a/addons/lunch/i18n/zh_CN.po b/addons/lunch/i18n/zh_CN.po index d5b168bf6d4..ea65acfd000 100644 --- a/addons/lunch/i18n/zh_CN.po +++ b/addons/lunch/i18n/zh_CN.po @@ -3,17 +3,18 @@ # * lunch # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2016 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 # 苏州远鼎 <tiexinliu@126.com>, 2016 -# Martin Trigaux <mat@odoo.com>, 2017 +# Martin Trigaux, 2017 # Jeff Yu - Elico Corp <jeff.yu@elico-corp.com>, 2017 +# 老窦 北京 <2662059195@qq.com>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server 10.saas~18\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-10-02 11:26+0000\n" "PO-Revision-Date: 2017-10-02 11:26+0000\n" -"Last-Translator: Jeff Yu - Elico Corp <jeff.yu@elico-corp.com>, 2017\n" +"Last-Translator: 老窦 北京 <2662059195@qq.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" @@ -115,7 +116,7 @@ msgstr "已归档" #. module: lunch #: model:ir.model.fields,field_description:lunch.field_lunch_order_balance_visible msgid "Balance Visible" -msgstr "" +msgstr "余额可见" #. module: lunch #: model:ir.model.fields,field_description:lunch.field_lunch_alert_start_hour @@ -125,7 +126,7 @@ msgstr "介于" #. module: lunch #: model:ir.ui.view,arch_db:lunch.view_lunch_alert_kanban msgid "Between:" -msgstr "" +msgstr "介于:" #. module: lunch #: model:ir.ui.view,arch_db:lunch.lunch_cashmove_view_search_2 diff --git a/addons/mail/i18n/nl.po b/addons/mail/i18n/nl.po index 59fe917232c..47e7ed6123e 100644 --- a/addons/mail/i18n/nl.po +++ b/addons/mail/i18n/nl.po @@ -6,7 +6,7 @@ # Yenthe Van Ginneken <yenthespam@gmail.com>, 2016 # Stephan Van Dyck <stephan.vandyck@vanroey.be>, 2016 # Cas Vissers <casvissers@brahoo.nl>, 2016 -# Martin Trigaux <mat@odoo.com>, 2016 +# Martin Trigaux, 2016 # Volluta <volluta@tutanota.com>, 2016 # Erwin van der Ploeg <erwin@odooexperts.nl>, 2016 # Eric Geens <ericgeens@yahoo.com>, 2016 @@ -5553,6 +5553,9 @@ msgid "" "and Enterprise versions. Online users already benefit from a ready-to-use " "email server (@mycompany.odoo.com)." msgstr "" +"Het gebruik van uw eigen e-mailserver is vereist voor het verzenden / " +"ontvangen van e-mails in Community- en Enterprise-versies. Online gebruikers" +" profiteren van een kant-en-klare e-mailserver (@ mijnbedrijf.odoo.com)." #. module: mail #: code:addons/mail/models/mail_thread.py:670 diff --git a/addons/mail/i18n/zh_CN.po b/addons/mail/i18n/zh_CN.po index 05b4f0ea1d4..7853c0ce679 100644 --- a/addons/mail/i18n/zh_CN.po +++ b/addons/mail/i18n/zh_CN.po @@ -8,7 +8,7 @@ # liAnGjiA <liangjia@qq.com>, 2017 # liulixia <liu.lixia@elico-corp.com>, 2017 # waveyeung <waveyeung@qq.com>, 2017 -# Martin Trigaux <mat@odoo.com>, 2017 +# Martin Trigaux, 2017 # Rona Lin <ssauapw@qq.com>, 2017 # xiaobin wu <bd5dml@gmail.com>, 2017 # Michael Chong <michaelchong2005@gmail.com>, 2017 @@ -183,7 +183,7 @@ msgstr "%s 加入到 %s 网络." #: code:addons/mail/static/src/xml/client_action.xml:211 #, python-format msgid " (" -msgstr "" +msgstr " (" #. module: mail #. openerp-web @@ -5553,7 +5553,7 @@ msgstr "一般" #. module: mail #: model:ir.ui.view,arch_db:mail.message_origin_link msgid "has been" -msgstr "" +msgstr "已经" #. module: mail #: code:addons/mail/models/mail_alias.py:282 diff --git a/addons/mail/models/mail_template.py b/addons/mail/models/mail_template.py index 5dfaf162573..586c5e9c281 100644 --- a/addons/mail/models/mail_template.py +++ b/addons/mail/models/mail_template.py @@ -331,7 +331,7 @@ class MailTemplate(models.Model): def _process_link(url): new_url = urls.url_parse(url) - if new_url.scheme and new_url.netloc: + if new_url.scheme and (new_url.netloc or new_url.scheme == 'mailto'): return url return new_url.replace(scheme=base.scheme, netloc=base.netloc).to_url() diff --git a/addons/mail/static/src/js/discuss.js b/addons/mail/static/src/js/discuss.js index 4de7e637e8b..52bf2b75822 100644 --- a/addons/mail/static/src/js/discuss.js +++ b/addons/mail/static/src/js/discuss.js @@ -905,7 +905,7 @@ var Discuss = Widget.extend(ControlPanelMixin, { var def = window.Notification && window.Notification.requestPermission(); if (def) { def.then(function (value) { - if (value === 'denied') { + if (value !== 'granted') { self._sendNotification(self, _t('Permission denied'), _t('Odoo will not have the permission to send native notifications on this device.')); } else { diff --git a/addons/maintenance/i18n/zh_CN.po b/addons/maintenance/i18n/zh_CN.po index 3831fdaf496..42941d300a1 100644 --- a/addons/maintenance/i18n/zh_CN.po +++ b/addons/maintenance/i18n/zh_CN.po @@ -3,20 +3,20 @@ # * maintenance # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2016 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 # 卓忆科技 <zhanghao@jointd.com>, 2016 # Eddie Lim <bhweelim@yahoo.com>, 2017 # liulixia <liu.lixia@elico-corp.com>, 2017 # Gary Wei <Gary.wei@elico-corp.com>, 2017 # 老窦 北京 <2662059195@qq.com>, 2017 -# Martin Trigaux <mat@odoo.com>, 2017 +# Martin Trigaux, 2017 msgid "" msgstr "" "Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-11-30 13:12+0000\n" "PO-Revision-Date: 2017-11-30 13:12+0000\n" -"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n" +"Last-Translator: Martin Trigaux, 2017\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" @@ -62,12 +62,12 @@ msgstr "<span>视图</span>" #. module: maintenance #: model:ir.ui.view,arch_db:maintenance.view_maintenance_equipment_category_kanban msgid "<strong>Equipments:</strong>" -msgstr "" +msgstr "<strong>设备:</strong>" #. module: maintenance #: model:ir.ui.view,arch_db:maintenance.view_maintenance_equipment_category_kanban msgid "<strong>Maintenance:</strong>" -msgstr "" +msgstr "<strong>维保:" #. module: maintenance #: model:ir.model.fields,help:maintenance.field_maintenance_equipment_category_alias_defaults diff --git a/addons/maintenance/models/maintenance.py b/addons/maintenance/models/maintenance.py index 689db6b2bfb..ca99ebb28b5 100644 --- a/addons/maintenance/models/maintenance.py +++ b/addons/maintenance/models/maintenance.py @@ -374,7 +374,7 @@ class MaintenanceTeam(models.Model): _name = 'maintenance.team' _description = 'Maintenance Teams' - name = fields.Char(required=True) + name = fields.Char(required=True, translate=True) active = fields.Boolean(default=True) company_id = fields.Many2one('res.company', string='Company', required=True, default=lambda self: self.env.user.company_id) diff --git a/addons/mass_mailing/i18n/zh_CN.po b/addons/mass_mailing/i18n/zh_CN.po index 479bec65409..23fbbde7ef7 100644 --- a/addons/mass_mailing/i18n/zh_CN.po +++ b/addons/mass_mailing/i18n/zh_CN.po @@ -3,13 +3,13 @@ # * mass_mailing # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2016 -# fausthuang <faust_huang@hotmail.com>, 2017 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 +# fausthuang, 2017 # 卓忆科技 <zhanghao@jointd.com>, 2017 # LIYan <liliane.li@elico-corp.com>, 2017 -# Bo Cao <cao.poobo@hotmail.com>, 2017 +# Bo Cao, 2017 # Yuan Xulei <hi@yxl.name>, 2017 -# Martin Trigaux <mat@odoo.com>, 2017 +# Martin Trigaux, 2017 # 钟小华 <mackz@sina.com>, 2017 # Gary Wei <Gary.wei@elico-corp.com>, 2017 # niulin lnc. <admin@niulin.net>, 2017 @@ -35,7 +35,7 @@ msgstr "" #. module: mass_mailing #: model:ir.ui.view,arch_db:mass_mailing.s_mail_block_comparison_table msgid "$18" -msgstr "" +msgstr "$18" #. module: mass_mailing #: model:ir.ui.view,arch_db:mass_mailing.s_mail_block_discount2 @@ -77,6 +77,9 @@ msgid "" " <span class=\"fa fa-compass fa-2x text-delta\"/>\n" " &nbsp;" msgstr "" +"&nbsp;\n" +" 1\n" +" &nbsp" #. module: mass_mailing #: model:ir.ui.view,arch_db:mass_mailing.s_mail_block_steps diff --git a/addons/mass_mailing/static/src/js/mass_mailing_editor.js b/addons/mass_mailing/static/src/js/mass_mailing_editor.js index e88d77864d2..62f2062b75c 100644 --- a/addons/mass_mailing/static/src/js/mass_mailing_editor.js +++ b/addons/mass_mailing/static/src/js/mass_mailing_editor.js @@ -327,20 +327,20 @@ snippets_editor.Class.include({ $body.removeClass(all_classes).addClass(theme_params.className); var $old_layout = $editable_area.find(".o_layout"); - // This wrapper structure is the only way to have a responsive and - // centered fixed-width content column on all mail clients var $new_wrapper, $new_wrapper_content; if (theme_params.nowrap) { $new_wrapper = $new_wrapper_content = $("<div/>", {"class": "oe_structure"}); } else { + // This wrapper structure is the only way to have a responsive and + // centered fixed-width content column on all mail clients $new_wrapper = $('<table/>', {class: 'o_mail_wrapper'}); - $new_wrapper_content = $("<td/>", {class: 'o_mail_no_resize o_mail_wrapper_td oe_structure'}); + $new_wrapper_content = $("<td/>", {class: 'o_mail_no_resize o_mail_no_colorpicker o_mail_wrapper_td oe_structure'}); $new_wrapper.append($('<tr/>').append( - $("<td/>", {class: 'o_mail_no_resize'}), + $("<td/>", {class: 'o_mail_no_resize o_not_editable', contenteditable: 'false'}), $new_wrapper_content, - $("<td/>", {class: 'o_mail_no_resize'}) + $("<td/>", {class: 'o_mail_no_resize o_not_editable', contenteditable: 'false'}) )); } var $new_layout = $("<div/>", {"class": "o_layout " + theme_params.className}).append($new_wrapper); diff --git a/addons/mass_mailing/views/snippets_themes_options.xml b/addons/mass_mailing/views/snippets_themes_options.xml index 50c40473f12..dd8cdee5a9e 100644 --- a/addons/mass_mailing/views/snippets_themes_options.xml +++ b/addons/mass_mailing/views/snippets_themes_options.xml @@ -6,9 +6,12 @@ <t t-raw="0"/> <div data-js="sizing_x" - data-selector="img, .mv, .col_mv, td:not(.o_mail_no_resize), th"/> + data-selector="img, .mv, .col_mv, td, th" + data-exclude=".o_mail_no_resize, .o_mail_wrapper_td"/> - <div data-js="table_item" data-selector="td, th"/> + <div data-js="table_item" + data-selector="td, th" + data-exclude=".o_mail_wrapper_td"/> <div data-js="table_row" data-selector="tr:has(> .row), tr:has(> .col_mv)" @@ -17,11 +20,13 @@ <div data-js="table_column" data-selector=".col>td, .col>th" + data-exclude=".o_mail_wrapper_td" data-drop-near=".col>td, .col>th"> </div> <div data-js="table_column_mv" data-selector=".col_mv, td, th" + data-exclude=".o_mail_wrapper_td" data-drop-near=".col_mv, td, th"> </div> @@ -32,14 +37,16 @@ </div> <div data-js="sizing_y" - data-selector="[data-oe-field='body_html'] > div:not(.o_layout), [data-oe-field='body_html'] .oe_structure > div, td:not(.o_mail_no_resize), th"/> + data-selector="[data-oe-field='body_html'] > div:not(.o_layout), [data-oe-field='body_html'] .oe_structure > div, th" + data-exclude=".o_mail_no_resize, .o_mail_wrapper_td"> <div data-js="colorpicker" data-selector=" - [data-oe-field='body_html'] > div:not(.o_layout):not(.o_mail_no_colorpicker), - [data-oe-field='body_html'] .oe_structure > div:not(.o_mail_no_colorpicker), + [data-oe-field='body_html'] > div:not(.o_layout), + [data-oe-field='body_html'] .oe_structure > div, td, th - "> + " + data-exclude=".o_mail_no_colorpicker"> <li class="dropdown-submenu"> <a tabindex="-1" href="#"><i class="fa fa-eyedropper"/>Background Color</a> <ul class="dropdown-menu"> diff --git a/addons/membership/i18n/zh_CN.po b/addons/membership/i18n/zh_CN.po index a95419a701a..acb87437d9b 100644 --- a/addons/membership/i18n/zh_CN.po +++ b/addons/membership/i18n/zh_CN.po @@ -3,14 +3,15 @@ # * membership # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2016 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 +# 老窦 北京 <2662059195@qq.com>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server 10.saas~18\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: Jeffery CHEN <jeffery9@gmail.com>, 2016\n" +"Last-Translator: 老窦 北京 <2662059195@qq.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" @@ -36,12 +37,12 @@ msgstr "# 正在等待" #. module: membership #: model:ir.ui.view,arch_db:membership.membership_products_kanban msgid "<i class=\"fa fa-clock-o\" aria-hidden=\"true\"/><strong> From: </strong>" -msgstr "" +msgstr "<i class=\"fa fa-clock-o\" aria-hidden=\"true\"/><strong>从:</strong>" #. module: membership #: model:ir.ui.view,arch_db:membership.membership_products_kanban msgid "<strong> To:</strong>" -msgstr "" +msgstr "<strong>到:</strong>" #. module: membership #: model:ir.model.fields,help:membership.field_res_partner_associate_member diff --git a/addons/mrp/i18n/nl.po b/addons/mrp/i18n/nl.po index ed18cbbad44..f5eafb94623 100644 --- a/addons/mrp/i18n/nl.po +++ b/addons/mrp/i18n/nl.po @@ -6,7 +6,7 @@ # Yenthe Van Ginneken <yenthespam@gmail.com>, 2016 # Stephan Van Dyck <stephan.vandyck@vanroey.be>, 2016 # Cas Vissers <casvissers@brahoo.nl>, 2016 -# Martin Trigaux <mat@odoo.com>, 2016 +# Martin Trigaux, 2016 # Erwin van der Ploeg <erwin@odooexperts.nl>, 2016 # Eric Geens <ericgeens@yahoo.com>, 2016 # wilcobergacker <wilcobergacker@gmail.com>, 2016 @@ -1656,6 +1656,9 @@ msgid "" " of workers and/or machines, they are used for costing, scheduling, capacity planning, etc.\n" " The Work Centers are defined on the Routing's operations." msgstr "" +"Productie handelingen worden verwerkt in werkcentra. Een werkcentrum kan worden samengesteld\n" +" uit werknemers en/of machines, ze worden gebruikt voor calculatie, planning, capaciteitsplanning, etc.\n" +" De werkcentra worden gedefinieerd bij de bewerkingen van de routering." #. module: mrp #: model:ir.actions.act_window,help:mrp.mrp_workcenter_kanban_action @@ -1664,6 +1667,9 @@ msgid "" " workers and/or machines, they are used for costing, scheduling, capacity planning, etc.\n" " The Work Centers are defined on the Routing's operations." msgstr "" +"Productie handelingen worden verwerkt in werkcentra. Een werkcentrum kan worden samengesteld\n" +" uit werknemers en/of machines, ze worden gebruikt voor calculatie, planning, capaciteitsplanning, etc.\n" +" De werkcentra worden gedefinieerd bij de bewerkingen van de routering." #. module: mrp #: model:ir.actions.act_window,help:mrp.mrp_production_action_planning @@ -3288,6 +3294,9 @@ msgid "" "is useful if you have long lead time and if you produce based on sales " "forecasts." msgstr "" +"Het gebruik van een MPS rapport om uw bevoorrading- en productieactiviteiten" +" te plannen, is handig als u een lange doorlooptijd hebt en als u produceert" +" op basis van verkoopprognoses." #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_message_valid_until @@ -3467,6 +3476,8 @@ msgid "" "Work Order Messages are used to warn users about any change in the product,\n" " process, etc. These messages will appear on the involved Work Orders." msgstr "" +"Werkorderberichten worden gebruikt om gebruikers te waarschuwen voor alle veranderingen in het product,\n" +" proces, etc. Deze berichten verschijnen op de gerelateerde werkorders." #. module: mrp #: model:ir.ui.view,arch_db:mrp.res_config_settings_view_form @@ -3524,6 +3535,8 @@ msgid "" " Manufacturing Order. Work Orders are trigerred by Manufacturing Orders,\n" " they are based on the Routing defined on these ones" msgstr "" +"Werkorders zijn bewerkingen die moeten worden verwerkt in een werkcentrum om een productie order te realiseren. Werkorders worden aangemaakt door productieorders,\n" +" ze zijn gebaseerd op de routing die op de stuklijst is gedefinieerd." #. module: mrp #: model:ir.actions.act_window,help:mrp.mrp_workorder_todo @@ -3532,6 +3545,8 @@ msgid "" " Manufacturing Order. Work Orders are trigerred by Manufacturing Orders,\n" " they are based on the Routing defined on these ones." msgstr "" +"Werkorders zijn bewerkingen die moeten worden verwerkt in een Werkcentrum om een productie order te realiseren. Werkorders worden aangemaakt door productieorders,\n" +" ze zijn gebaseerd op de routing die op de stuklijst is gedefinieerd." #. module: mrp #: model:ir.actions.act_window,help:mrp.action_mrp_workorder_workcenter @@ -3540,6 +3555,8 @@ msgid "" " Manufacturing Order. Work Orders are trigerred by Manufacturing Orders,\n" " they are based on the Routing defined on these ones." msgstr "" +"Werkorders zijn bewerkingen die moeten worden verwerkt in een Werkcentrum om een productie order te realiseren. Werkorders worden aangemaakt door productieorders,\n" +" ze zijn gebaseerd op de routing die op de stuklijst is gedefinieerd." #. module: mrp #: model:ir.ui.view,arch_db:mrp.mrp_routing_workcenter_form_view diff --git a/addons/mrp/i18n/zh_CN.po b/addons/mrp/i18n/zh_CN.po index 597ce1ae8c1..9cd6ba4ea34 100644 --- a/addons/mrp/i18n/zh_CN.po +++ b/addons/mrp/i18n/zh_CN.po @@ -4,7 +4,7 @@ # # Translators: # Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 -# Martin Trigaux <mat@odoo.com>, 2016 +# Martin Trigaux, 2016 # liAnGjiA <liangjia@qq.com>, 2016 # Gary Wei <Gary.wei@elico-corp.com>, 2016 # waveyeung <waveyeung@qq.com>, 2016 @@ -15,7 +15,7 @@ # Jeff Yu - Elico Corp <jeff.yu@elico-corp.com>, 2017 # xiaobin wu <bd5dml@gmail.com>, 2017 # 老窦 北京 <2662059195@qq.com>, 2017 -# fausthuang <faust_huang@hotmail.com>, 2017 +# fausthuang, 2017 # 山西清水欧度(QQ:54773801) <54773801@qq.com>, 2018 msgid "" msgstr "" @@ -74,7 +74,7 @@ msgstr "# 工单" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_product_template_used_in_bom_count msgid "# of BoM Where is Used" -msgstr "" +msgstr "#BOM 在哪里被使用" #. module: mrp #: code:addons/mrp/models/mrp_bom.py:293 @@ -86,6 +86,11 @@ msgid "" " Use this feature to store any files, like drawings or specifications.\n" " </p>" msgstr "" +"<p class =“oe_view_nocontent_create”>\n" +" 点击上传文件到您的产品。\n" +" </ p> <p>\n" +" 使用此功能存储任何文件,如图纸或规格。\n" +" </ p>" #. module: mrp #: model:ir.ui.view,arch_db:mrp.mrp_production_form_view @@ -94,6 +99,9 @@ msgid "" "['|',('availability', 'in', ('assigned', 'none')), ('state', 'not in', " "('confirmed','progress'))]}\">Raw materials not available!</span>" msgstr "" +"<span class=“label label-danger” attrs=“{‘invisible’: [‘|’,(‘availability’, " +"‘in’, (‘assigned’, ‘none’)), (‘state’, ‘not in’, " +"(‘confirmed’,’progress’))]}”>原材料不可用!</span>" #. module: mrp #: model:ir.ui.view,arch_db:mrp.mrp_workcenter_view @@ -167,16 +175,18 @@ msgid "" "<strong attrs=\"{'invisible': [('date_planned_finished', '=', False)]}\" class=\"mr8\">to</strong>\n" " <strong class=\"oe_edit_only mr8\" attrs=\"{'invisible': [('date_planned_finished', '!=', False)]}\">to</strong>" msgstr "" +"<strong attrs=“{‘invisible’: [(‘date_planned_finished’, ‘=‘, False)]}” class=“mr8”>至</strong>\n" +" <strong class=“oe_edit_only mr8” attrs=“{‘invisible’: [(‘date_planned_finished’, ‘!=‘, False)]}”>至</strong>" #. module: mrp #: model:ir.ui.view,arch_db:mrp.mrp_production_workcenter_form_view_inherit msgid "<strong class=\"mr8\">to</strong>" -msgstr "" +msgstr "<strong class =“mr8”>至</ strong>" #. module: mrp #: model:ir.ui.view,arch_db:mrp.view_mrp_workcenter_productivity_loss_kanban msgid "<strong>Effectiveness Category: </strong>" -msgstr "" +msgstr "<strong>生效类别:</ strong>" #. module: mrp #: model:ir.ui.view,arch_db:mrp.view_mrp_workcenter_productivity_loss_kanban @@ -292,7 +302,7 @@ msgid "" "Add by-products to bills of materials. This can be used to get several " "finished products as well. Without this option you only do: A + B = C. With " "the option: A + B = C + D." -msgstr "" +msgstr "添加副产品到物料清单。 这也可以用来获得几个成品。 没有这个选项,你只能这样做:A + B = C。选项:A + B = C + D" #. module: mrp #: model:ir.ui.view,arch_db:mrp.res_config_settings_view_form @@ -316,16 +326,19 @@ msgid "" "Lines with 0 quantities can be used as optional lines. \n" "You should install the mrp_byproduct module if you want to manage extra products on BoMs !" msgstr "" +"所有产品数量必须大于或等于0。\n" +"数量为0的行可以用作可选行。\n" +"如果要管理BoM上的额外产品,则应安装mrp_byproduct模块!" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_production_post_visible msgid "Allowed to Post Inventory" -msgstr "" +msgstr "允许盘存" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_production_unreserve_visible msgid "Allowed to Unreserve Inventory" -msgstr "" +msgstr "允许取消保留库存" #. module: mrp #: model:ir.ui.view,arch_db:mrp.view_change_production_qty_wizard @@ -427,6 +440,8 @@ msgid "" "Based on a Bill of Material, a Manufacturing Order will consume raw materials\n" " and produce finished products." msgstr "" +"根据材料清单,制造订单将消耗原材料\n" +" 并生产成品。" #. module: mrp #: model:ir.ui.view,arch_db:mrp.report_mrporder @@ -615,32 +630,32 @@ msgstr "清除" #. module: mrp #: model:ir.actions.act_window,help:mrp.mrp_workcenter_kanban_action msgid "Click here" -msgstr "" +msgstr "点击这里" #. module: mrp #: model:ir.actions.act_window,help:mrp.mrp_production_action msgid "Click here to create a Manufacturing Order." -msgstr "" +msgstr "点击这里创建一个制造订单。" #. module: mrp #: model:ir.actions.act_window,help:mrp.mrp_unbuild msgid "Click here to create a Unbuild Order." -msgstr "" +msgstr "点击这里创建一个拆卸单。" #. module: mrp #: model:ir.actions.act_window,help:mrp.mrp_routing_action msgid "Click here to create a new Routing." -msgstr "" +msgstr "点击这里创建一个新的路由。" #. module: mrp #: model:ir.actions.act_window,help:mrp.mrp_workcenter_action msgid "Click here to create a new Work Center" -msgstr "" +msgstr "点击这里创建一个新的工作中心" #. module: mrp #: model:ir.actions.act_window,help:mrp.mrp_message_action_main msgid "Click here to create a new Work Order Message." -msgstr "" +msgstr "点击这里创建一个新的工作订单信息。" #. module: mrp #: model:ir.actions.act_window,help:mrp.action_work_orders @@ -722,17 +737,17 @@ msgstr "消耗的" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_unbuild_consume_line_ids msgid "Consumed Disassembly Lines" -msgstr "" +msgstr "拆卸单行" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_stock_move_consume_unbuild_id msgid "Consumed Disassembly Order" -msgstr "" +msgstr "拆卸单" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_production_consumed_less_than_planned msgid "Consumed Less Than Planned" -msgstr "" +msgstr "消费量少于计划数量" #. module: mrp #: model:ir.ui.view,arch_db:mrp.mrp_production_form_view @@ -762,7 +777,7 @@ msgstr "创建工单" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_stock_move_created_production_id msgid "Created Production Order" -msgstr "" +msgstr "创建生产订单" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_change_production_qty_create_uid @@ -837,12 +852,12 @@ msgstr "日期" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_production_date_planned_finished msgid "Deadline End" -msgstr "" +msgstr "截止日期结束" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_production_date_planned_start msgid "Deadline Start" -msgstr "" +msgstr "截止日期开始" #. module: mrp #: model:ir.ui.view,arch_db:mrp.mrp_routing_workcenter_form_view @@ -852,7 +867,7 @@ msgstr "默认时长" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_res_config_settings_use_manufacturing_lead msgid "Default Manufacturing Lead Time" -msgstr "" +msgstr "默认制造提前期" #. module: mrp #: model:ir.ui.view,arch_db:mrp.view_mrp_bom_filter @@ -889,7 +904,7 @@ msgstr "目的位置" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_stock_move_unbuild_id msgid "Disassembly Order" -msgstr "" +msgstr "拆卸顺序" #. module: mrp #: model:ir.ui.view,arch_db:mrp.mrp_message_view_form_embedded_bom @@ -1049,13 +1064,13 @@ msgstr "完成的批次" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_stock_move_finished_lots_exist msgid "Finished Lots Exist" -msgstr "" +msgstr "已存在完成的批次" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_production_finished_move_line_ids #: model:ir.ui.view,arch_db:mrp.view_finisehd_move_line msgid "Finished Product" -msgstr "" +msgstr "完成的产品" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_production_move_finished_ids @@ -1091,7 +1106,7 @@ msgstr "一般信息" #. module: mrp #: model:ir.model.fields,help:mrp.field_mrp_document_priority msgid "Gives the sequence order when displaying a list of MRP documents." -msgstr "" +msgstr "在显示MRP文档列表时给出序列顺序。" #. module: mrp #: model:ir.model.fields,help:mrp.field_mrp_bom_sequence @@ -1107,7 +1122,7 @@ msgstr "指定一个编号,用于在显示一系列工作中心时排序。" #. module: mrp #: model:ir.model.fields,help:mrp.field_mrp_workcenter_sequence msgid "Gives the sequence order when displaying a list of work centers." -msgstr "" +msgstr "显示工作中心列表时显示顺序顺序。" #. module: mrp #: model:ir.model.fields,help:mrp.field_mrp_bom_line_sequence @@ -1142,7 +1157,7 @@ msgstr "有附件" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_workorder_is_produced msgid "Has Been Produced" -msgstr "" +msgstr "已生产" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_production_has_moves @@ -1215,7 +1230,7 @@ msgstr "如果去掉这个启用的勾,工艺不需要删除就可以隐藏" #: model:ir.ui.view,arch_db:mrp.mrp_production_form_view msgid "" "If the manufacturing order is unlocked you can add to the initial demand." -msgstr "" +msgstr "如果制造订单被解锁,您可以添加到最初的需求。" #. module: mrp #: model:ir.ui.view,arch_db:mrp.mrp_bom_form_view @@ -1224,6 +1239,9 @@ msgid "" " order for this product, the delivery order will contain the raw\n" " materials, instead of the finished product." msgstr "" +"如果产品是成品:处理销售\n" +" 为了这个产品,交货单将包含原料\n" +" 材料,而不是成品。" #. module: mrp #: model:ir.ui.view,arch_db:mrp.mrp_bom_form_view @@ -1233,6 +1251,9 @@ msgid "" " the raw materials of that product will be added to the\n" " manufacturing order of the final product." msgstr "" +"如果产品是半成品:在处理包含该产品作为组件的制造订单时,\n" +" 该产品的原料将被添加到\n" +" 最终产品的生产订单。" #. module: mrp #: model:ir.ui.view,arch_db:mrp.mrp_workcenter_kanban @@ -1303,7 +1324,7 @@ msgstr "这是公开文档" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_workorder_is_user_working msgid "Is the Current User Working" -msgstr "" +msgstr "当前用户正在工作吗?" #. module: mrp #: code:addons/mrp/models/mrp_workcenter.py:162 @@ -1317,7 +1338,7 @@ msgid "" "Keep empty if you produce at the location where you find the raw " "materials.Set a location if you produce at a fixed location. This can be a " "partner location if you subcontract the manufacturing operations." -msgstr "" +msgstr "如果您在找到原材料的位置生产,请保持空置。如果您在固定的位置生产,请设置一个位置。 如果您转包制造业务,这可以是合作伙伴的位置。" #. module: mrp #: model:ir.ui.view,arch_db:mrp.view_mrp_bom_filter selection:mrp.bom,type:0 @@ -1412,7 +1433,7 @@ msgstr "逾期活动" msgid "" "Lines need to be deleted, but can not as you still have some quantities to " "consume in them. " -msgstr "" +msgstr "行需要删除,但不能,因为您还有一些要消耗的数量。" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_unbuild_location_id @@ -1460,7 +1481,7 @@ msgstr "批次/序列号码" #. module: mrp #: model:ir.ui.view,arch_db:mrp.view_finisehd_move_line msgid "Lot/Serial number" -msgstr "" +msgstr "批号/序列号" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_stock_move_active_move_line_ids @@ -1537,7 +1558,7 @@ msgstr "制造提前期(日)" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_stock_warehouse_manu_type_id msgid "Manufacturing Operation Type" -msgstr "" +msgstr "生产操作类型" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_change_production_qty_mo_id @@ -1573,6 +1594,8 @@ msgid "" "Manufacturing Orders can be generated automatically based on customer\n" " requirements or reordering rules." msgstr "" +"制造订单可以根据客户自动生成\n" +" 要求或重新排序规则。" #. module: mrp #: model:ir.ui.view,arch_db:mrp.view_mrp_production_filter @@ -1602,6 +1625,9 @@ msgid "" " of workers and/or machines, they are used for costing, scheduling, capacity planning, etc.\n" " The Work Centers are defined on the Routing's operations." msgstr "" +"制造业务在工作中心进行。 工作中心可以组成\n" +" 的工人和/或机器,它们被用于成本核算,调度,能力计划等。\n" +" 工作中心在路由的操作上定义。" #. module: mrp #: model:ir.actions.act_window,help:mrp.mrp_workcenter_kanban_action @@ -1610,6 +1636,9 @@ msgid "" " workers and/or machines, they are used for costing, scheduling, capacity planning, etc.\n" " The Work Centers are defined on the Routing's operations." msgstr "" +"制造业务在工作中心进行。 一个工作中心可以组成\n" +" 工人和/或机器,它们用于成本核算,进度安排,能力规划等。\n" +" 工作中心在路由的操作上定义" #. module: mrp #: model:ir.actions.act_window,help:mrp.mrp_production_action_planning @@ -1639,7 +1668,7 @@ msgstr "主生产排程" #: model:ir.model.fields,field_description:mrp.field_mrp_production_availability #: model:ir.model.fields,field_description:mrp.field_mrp_workorder_production_availability msgid "Materials Availability" -msgstr "" +msgstr "材料可用性" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_message_message @@ -1672,7 +1701,7 @@ msgstr "移动完成" #. module: mrp #: model:ir.ui.view,arch_db:mrp.res_config_settings_view_form msgid "Move forward deadline start dates by" -msgstr "" +msgstr "提前截止日期开始日期" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_workorder_move_raw_ids @@ -1692,7 +1721,7 @@ msgstr "MRP 工作中心" #. module: mrp #: model:ir.actions.server,name:mrp.production_order_server_action msgid "Mrp: Plan Production Orders" -msgstr "" +msgstr "Mrp:计划生产订单" #. module: mrp #: model:ir.ui.view,arch_db:mrp.mrp_unbuild_search_view @@ -1752,6 +1781,8 @@ msgid "" "No data to display. You will get here statistics about the\n" " work orders duration related to this routing." msgstr "" +"没有数据显示。 你会得到这里的统计数据\n" +" 与此路由相关的工作订单持续时间。" #. module: mrp #: model:ir.actions.act_window,help:mrp.mrp_workcenter_productivity_loss_action @@ -1767,7 +1798,7 @@ msgstr "此设备没有生产力损失" #: model:ir.ui.view,arch_db:mrp.mrp_workcenter_kanban msgid "" "No workorder currently in progress. Click to mark work center as blocked." -msgstr "" +msgstr "没有进行工单。单击以将工作中心标记为阻塞。" #. module: mrp #: selection:mrp.production,availability:0 @@ -1784,7 +1815,7 @@ msgstr "一般" #. module: mrp #: model:ir.model.fields,help:mrp.field_stock_scrap_workorder_id msgid "Not to restrict or prefer quants, but informative." -msgstr "" +msgstr "不限制或偏好数量,但内容丰富。" #. module: mrp #: selection:mrp.production,priority:0 @@ -1799,28 +1830,28 @@ msgstr "备注" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_stock_picking_type_count_mo_late msgid "Number of Manufacturing Orders Late" -msgstr "" +msgstr "制造订单数量延迟" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_stock_picking_type_count_mo_waiting msgid "Number of Manufacturing Orders Waiting" -msgstr "" +msgstr "制造订单等待的数量" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_stock_picking_type_count_mo_todo msgid "Number of Manufacturing Orders to Process" -msgstr "" +msgstr "制造订单的数量" #. module: mrp #: model:ir.model.fields,help:mrp.field_mrp_workcenter_capacity #: model:ir.model.fields,help:mrp.field_mrp_workorder_capacity msgid "Number of pieces that can be produced in parallel." -msgstr "" +msgstr "可以并行生产的件数。" #. module: mrp #: model:ir.ui.view,arch_db:mrp.mrp_workcenter_kanban msgid "OEE" -msgstr "" +msgstr "OEE" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_oee_target @@ -1842,7 +1873,7 @@ msgstr "根据补货规则Odoo用BOM自动的生产生产订单" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_oee msgid "Oee" -msgstr "" +msgstr "Oee" #. module: mrp #: selection:mrp.routing.workcenter,batch:0 @@ -1976,7 +2007,7 @@ msgstr "规划订单" #. module: mrp #: model:ir.ui.view,arch_db:mrp.res_config_settings_view_form msgid "Plan manufacturing or purchase orders based on forecasts" -msgstr "" +msgstr "根据预测计划制造或采购订单" #. module: mrp #: model:ir.ui.view,arch_db:mrp.stock_production_type_kanban @@ -2000,7 +2031,7 @@ msgstr "规划" #: code:addons/mrp/wizard/mrp_product_produce.py:147 #, python-format msgid "Please enter a lot or serial number for %s !" -msgstr "" +msgstr "请输入%s的序列号或序列号!" #. module: mrp #: code:addons/mrp/models/mrp_workorder.py:296 @@ -2008,7 +2039,7 @@ msgstr "" msgid "" "Please set the quantity you are currently producing. It should be different " "from zero." -msgstr "" +msgstr "请设定您正在生产的数量。 它不能为零。" #. module: mrp #: model:ir.ui.view,arch_db:mrp.mrp_production_form_view @@ -2051,7 +2082,7 @@ msgstr "生产" #. module: mrp #: model:ir.ui.view,arch_db:mrp.res_config_settings_view_form msgid "Produce residual products (A + B -> C + D)" -msgstr "" +msgstr "产生残留产物(A + B > C + D)" #. module: mrp #: model:ir.ui.view,arch_db:mrp.production_message @@ -2342,7 +2373,7 @@ msgstr "记录生产明细" msgid "" "Recursion error! A product with a Bill of Material should not have itself " "in its BoM or child BoMs!" -msgstr "" +msgstr "递归错误!一个物料清单的产品不应该自己或孩子BOM BOM!" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_bom_code @@ -2377,7 +2408,7 @@ msgstr "维修" #. module: mrp #: model:ir.ui.view,arch_db:mrp.res_config_settings_view_form msgid "Repair products and invoice the repair orders" -msgstr "" +msgstr "修理产品和发票修理订单" #. module: mrp #: model:ir.ui.menu,name:mrp.menu_mrp_reporting @@ -2475,6 +2506,9 @@ msgid "" " done to realize a Manufacturing Order. Each operation from\n" " a Routing is done at a specific Work Center and has a specific duration." msgstr "" +"路线定义了需要的连续操作\n" +" 完成制造订单。 从每个操作\n" +" 路由在特定的工作中心完成,并具有特定的持续时间。" #. module: mrp #: model:ir.ui.view,arch_db:mrp.mrp_message_view_form_embedded_bom @@ -2485,12 +2519,12 @@ msgstr "保存" #. module: mrp #: model:ir.ui.view,arch_db:mrp.res_config_settings_view_form msgid "Schedule manufacturing orders earlier to avoid delays" -msgstr "" +msgstr "提前安排生产订单以避免延误" #. module: mrp #: model:ir.ui.view,arch_db:mrp.res_config_settings_view_form msgid "Schedule the maintenance of your equipment" -msgstr "" +msgstr "安排设备的保养" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_workorder_date_planned_finished @@ -2605,7 +2639,7 @@ msgid "" "Set 'no' to schedule the next work order after the previous one. Set 'yes' " "to produce after the quantity set in 'Quantity To Process' has been " "produced." -msgstr "" +msgstr "设置“否”,安排上一个工作单之后的下一个工作单。 设置“是”,在“处理数量”中设置的数量生成后生成。" #. module: mrp #: selection:mrp.routing.workcenter,time_mode:0 @@ -2629,7 +2663,7 @@ msgstr "对于产成品应该有批次" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_production_show_final_lots msgid "Show Final Lots" -msgstr "" +msgstr "显示最后一批" #. module: mrp #: model:ir.ui.view,arch_db:mrp.mrp_unbuild_search_view @@ -2677,7 +2711,7 @@ msgstr "库存移动" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_production_move_dest_ids msgid "Stock Movements of Produced Goods" -msgstr "" +msgstr "生产货物的库存移动" #. module: mrp #: model:ir.actions.act_window,name:mrp.action_mrp_unbuild_moves @@ -2708,40 +2742,40 @@ msgstr "TPM 大损失" #: model:ir.model.fields,help:mrp.field_stock_move_is_done #: model:ir.model.fields,help:mrp.field_stock_move_line_done_move msgid "Technical Field to order moves" -msgstr "" +msgstr "技术领域的订单移动" #. module: mrp #: model:ir.model.fields,help:mrp.field_mrp_production_check_to_done msgid "Technical Field to see if we can show 'Mark as Done' button" -msgstr "" +msgstr "技术领域,看看我们是否可以显示“标记为完成”按钮" #. module: mrp #: model:ir.model.fields,help:mrp.field_stock_move_line_done_wo msgid "" "Technical Field which is False when temporarily filled in in work order" -msgstr "" +msgstr "技术领域临时填写工单时为假" #. module: mrp #: model:ir.model.fields,help:mrp.field_mrp_workorder_is_user_working msgid "Technical field indicating whether the current user is working. " -msgstr "" +msgstr "表示当前用户是否正在工作的技术字段。" #. module: mrp #: model:ir.model.fields,help:mrp.field_mrp_production_post_visible msgid "Technical field to check when we can post" -msgstr "" +msgstr "技术领域来检查什么时候我们可以发布" #. module: mrp #: model:ir.model.fields,help:mrp.field_mrp_production_unreserve_visible msgid "Technical field to check when we can unreserve" -msgstr "" +msgstr "技术领域来检查什么时候我们可以保留" #. module: mrp #: model:ir.model.fields,help:mrp.field_mrp_production_consumed_less_than_planned msgid "" "Technical field used to see if we have to display a warning or not when " "confirming an order." -msgstr "" +msgstr "技术领域用于查看在确认订单时是否需要显示警告。" #. module: mrp #: model:ir.model.fields,help:mrp.field_mrp_workorder_production_availability @@ -2764,7 +2798,7 @@ msgstr "技术: 仅用于视图." #. module: mrp #: model:ir.model.fields,help:mrp.field_stock_production_lot_use_next_on_work_order_id msgid "Technical: used to figure out default serial number on work orders" -msgstr "" +msgstr "技术:用于计算工单上的默认序列号" #. module: mrp #: code:addons/mrp/models/mrp_bom.py:76 code:addons/mrp/models/mrp_bom.py:254 @@ -2788,7 +2822,7 @@ msgstr "第一作业的部件" #. module: mrp #: model:ir.model.fields,help:mrp.field_mrp_document_res_model msgid "The database object this attachment will be attached to." -msgstr "" +msgstr "该附件将附加到的数据库对象。" #. module: mrp #: model:ir.model.fields,help:mrp.field_mrp_production_routing_id @@ -2805,12 +2839,12 @@ msgid "" "The list of operations to produce the finished product. The routing is " "mainly used to compute work center costs during operations and to plan " "future loads on work centers based on production planning." -msgstr "" +msgstr "生产成品的操作列表。 路线主要用于计算运营期间的工作中心成本,并根据生产计划计划未来的工作中心负载。" #. module: mrp #: model:ir.model.fields,help:mrp.field_mrp_workorder_qty_produced msgid "The number of products already handled by this work order" -msgstr "" +msgstr "此工单已处理的产品数量" #. module: mrp #: model:ir.model,name:mrp.model_stock_picking_type @@ -2822,7 +2856,7 @@ msgstr "操作类型决定分拣视图。" msgid "" "The operation where the components are consumed, or the finished products " "created." -msgstr "" +msgstr "组件消耗的操作或创建的成品。" #. module: mrp #: model:ir.model.fields,help:mrp.field_mrp_bom_routing_id @@ -2830,13 +2864,13 @@ msgid "" "The operations for producing this BoM. When a routing is specified, the " "production orders will be executed through work orders, otherwise " "everything is processed in the production order itself. " -msgstr "" +msgstr "生产这个BoM的操作。 在指定工艺路线时,将通过工单执行生产订单,否则所有工作都将在生产订单本身中进行处理。" #. module: mrp #: code:addons/mrp/wizard/mrp_product_produce.py:94 #, python-format msgid "The production order for '%s' has no quantity specified" -msgstr "" +msgstr "‘%s’ 的生产订单没有指定的数量" #. module: mrp #: sql_constraint:mrp.production:0 @@ -2846,7 +2880,7 @@ msgstr "待生产的数量必须是正数!" #. module: mrp #: model:ir.model.fields,help:mrp.field_mrp_document_res_id msgid "The record id this is attached to." -msgstr "" +msgstr "这是附加到记录ID。" #. module: mrp #: model:ir.model.fields,help:mrp.field_mrp_routing_workcenter_routing_id @@ -2854,7 +2888,7 @@ msgid "" "The routing contains all the Work Centers used and for how long. This will " "create work orders afterwardswhich alters the execution of the manufacturing" " order. " -msgstr "" +msgstr "路由包含所有使用的工作中心和多久。 这将在之后创建工单,改变制造订单的执行。" #. module: mrp #: code:addons/mrp/models/procurement.py:20 @@ -2862,7 +2896,7 @@ msgstr "" msgid "" "There is no Bill of Material found for the product %s. Please define a Bill " "of Material for this product." -msgstr "" +msgstr "没有为产品 %s找到物料清单。 请为此产品定义物料清单。" #. module: mrp #: model:ir.ui.view,arch_db:mrp.oee_search_view @@ -2903,7 +2937,7 @@ msgstr "时间" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_time_efficiency msgid "Time Efficiency" -msgstr "" +msgstr "时间效率" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_time_ids @@ -2946,7 +2980,7 @@ msgstr "设置的时间,以分钟计." msgid "" "Time in minutes. Is the time used in manual mode, or the first time supposed" " in real time when there are not any work orders yet." -msgstr "" +msgstr "时间在几分钟内。 是在手动模式下使用的时间,还是在没有任何工单的情况下第一次实时应用。" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_product_produce_line_qty_to_consume @@ -3064,7 +3098,7 @@ msgstr "拆解单" #: code:addons/mrp/models/mrp_unbuild.py:77 #, python-format msgid "Unbuild Order product quantity has to be strictly positive." -msgstr "" +msgstr "建立订单产品数量必须严格为正数。" #. module: mrp #: model:ir.actions.act_window,name:mrp.mrp_unbuild @@ -3078,7 +3112,7 @@ msgstr "拆解单" msgid "" "Unbuild Orders are used to break down a product you manufactured or " "purchased into its components, based on its Bill of Material." -msgstr "" +msgstr "未建立订单是用来分解您生产或购买的产品的组件,根据其材料清单。" #. module: mrp #: model:ir.ui.view,arch_db:mrp.mrp_bom_cost_report @@ -3151,7 +3185,7 @@ msgstr "Url网址" msgid "" "Use the Produce button or process the work orders to create some finished " "products." -msgstr "" +msgstr "使用“生产”按钮或处理工单来创建一些成品。" #. module: mrp #: model:ir.ui.view,arch_db:mrp.product_product_form_view_bom_button @@ -3172,7 +3206,7 @@ msgid "" "Using a MPS report to schedule your reordering and manufacturing operations " "is useful if you have long lead time and if you produce based on sales " "forecasts." -msgstr "" +msgstr "如果您的交货时间很长,并根据销售预测进行生产,那么使用MPS报告来安排重新排序和制造操作是非常有用的。" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_message_valid_until @@ -3243,6 +3277,7 @@ msgid "" " operation type. That allows to define procurement rules which trigger " "different manufacturing orders with different BoMs." msgstr "" +"当采购具有设定操作类型的“生产”路线时,它将尝试使用相同操作类型的BoM为该产品创建生产订单。 这允许定义触发与不同BoM的不同制造订单的采购规则。" #. module: mrp #: model:ir.model.fields,help:mrp.field_stock_warehouse_manufacture_to_resupply @@ -3342,7 +3377,7 @@ msgstr "工单消息" msgid "" "Work Order Messages are used to warn users about any change in the product,\n" " process, etc. These messages will appear on the involved Work Orders." -msgstr "" +msgstr "工作订单消息用于警告用户产品中的任何更改, 流程等。这些消息将出现在所涉及的工作订单上。" #. module: mrp #: model:ir.ui.view,arch_db:mrp.res_config_settings_view_form @@ -3397,7 +3432,7 @@ msgid "" "Work Orders are operations to be processed at a Work Center to realize a\n" " Manufacturing Order. Work Orders are trigerred by Manufacturing Orders,\n" " they are based on the Routing defined on these ones" -msgstr "" +msgstr "工作订单是在工作中心进行处理的操作,以实现 制造订单。制造订单与工作订单无关, 它们基于在这些路由上定义的路由。" #. module: mrp #: model:ir.actions.act_window,help:mrp.mrp_workorder_todo @@ -3406,6 +3441,9 @@ msgid "" " Manufacturing Order. Work Orders are trigerred by Manufacturing Orders,\n" " they are based on the Routing defined on these ones." msgstr "" +"工作指令是要在工作中心处理的操作,以实现一个\n" +" 制造订单。 工作订单被制造订单激怒,\n" +" 它们基于这些路由上定义的路由。" #. module: mrp #: model:ir.actions.act_window,help:mrp.action_mrp_workorder_workcenter @@ -3414,6 +3452,9 @@ msgid "" " Manufacturing Order. Work Orders are trigerred by Manufacturing Orders,\n" " they are based on the Routing defined on these ones." msgstr "" +"工作指令是要在工作中心处理的操作,以实现一个\n" +" 制造订单。 工作订单被制造订单激怒,\n" +" 它们基于这些路由上定义的路由。" #. module: mrp #: model:ir.ui.view,arch_db:mrp.mrp_routing_workcenter_form_view @@ -3505,7 +3546,7 @@ msgstr "不能变更已完成的工单." #: code:addons/mrp/models/mrp_production.py:554 #, python-format msgid "You can not consume without telling for which lot you consumed it" -msgstr "" +msgstr "你不能不知道你消费了多少东西" #. module: mrp #: code:addons/mrp/models/mrp_bom.py:91 @@ -3522,7 +3563,7 @@ msgid "" "You cannot cancel a manufacturing order if you have already consumed " "material. If you want to cancel this MO, please change the " "consumed quantities to 0." -msgstr "" +msgstr "如果您已经消耗了材料,则无法取消制造订单。 如果你想取消这个MO,请把消耗的数量改为0。" #. module: mrp #: code:addons/mrp/wizard/mrp_product_produce.py:204 @@ -3530,20 +3571,20 @@ msgstr "" msgid "" "You cannot consume the same serial number twice. Please correct the serial " "numbers encoded." -msgstr "" +msgstr "您不能使用相同的序列号两次。 请更正编码的序列号。" #. module: mrp #: code:addons/mrp/wizard/change_production_qty.py:46 #, python-format msgid "You have already processed %d. Please input a quantity higher than %d " -msgstr "" +msgstr "你已经处理了 %d。 请输入高于 %d 的数量" #. module: mrp #: model:ir.ui.view,arch_db:mrp.mrp_production_form_view msgid "" "You have consumed less material than what was planned. Are you sure you want" " to close this MO?" -msgstr "" +msgstr "你消耗的材料比计划的要少。 你确定要关闭这个MO吗?" #. module: mrp #: code:addons/mrp/models/mrp_workorder.py:406 @@ -3552,7 +3593,7 @@ msgid "" "You need to define at least one productivity loss in the category " "'Performance'. Create one from the Manufacturing app, menu: Configuration / " "Productivity Losses." -msgstr "" +msgstr "您需要在“绩效”类别中至少定义一个生产力损失。 从制造应用程序创建一个菜单:配置/生产力损失。" #. module: mrp #: code:addons/mrp/models/mrp_workorder.py:402 @@ -3561,7 +3602,7 @@ msgid "" "You need to define at least one productivity loss in the category " "'Productivity'. Create one from the Manufacturing app, menu: Configuration /" " Productivity Losses." -msgstr "" +msgstr "您需要在“生产力”类别中至少定义一个生产力损失。 从制造应用程序创建一个菜单:配置/生产力损失。" #. module: mrp #: code:addons/mrp/models/mrp_workorder.py:460 @@ -3570,7 +3611,7 @@ msgid "" "You need to define at least one unactive productivity loss in the category " "'Performance'. Create one from the Manufacturing app, menu: Configuration / " "Productivity Losses." -msgstr "" +msgstr "您需要在“绩效”类别中定义至少一个无效的生产力损失。 从制造应用程序创建一个菜单:配置/生产力损失。" #. module: mrp #: code:addons/mrp/wizard/mrp_product_produce.py:125 @@ -3582,13 +3623,13 @@ msgstr "你需要为产成品提供批号" #: code:addons/mrp/models/mrp_workorder.py:322 #, python-format msgid "You should provide a lot/serial number for a component" -msgstr "" +msgstr "您应该提供组件的批号/序列号" #. module: mrp #: code:addons/mrp/models/mrp_workorder.py:299 #, python-format msgid "You should provide a lot/serial number for the final product" -msgstr "" +msgstr "您应该提供最终产品的批号/序列号" #. module: mrp #: code:addons/mrp/models/mrp_unbuild.py:95 @@ -3596,7 +3637,7 @@ msgstr "" msgid "" "You should specify a manufacturing order in order to find the correct " "tracked products." -msgstr "" +msgstr "您应该指定一个制造订单,以便找到正确的跟踪产品。" #. module: mrp #: model:ir.ui.view,arch_db:mrp.res_config_settings_view_form @@ -3634,17 +3675,17 @@ msgstr "mrp.bom.line" #. module: mrp #: model:ir.ui.view,arch_db:mrp.production_message msgid "quantity has been updated." -msgstr "" +msgstr "quantity has been updated." #. module: mrp #: model:ir.model,name:mrp.model_report_mrp_mrp_bom_cost_report msgid "report.mrp.mrp_bom_cost_report" -msgstr "" +msgstr "report.mrp.mrp_bom_cost_report" #. module: mrp #: model:ir.model,name:mrp.model_report_mrp_mrp_bom_structure_report msgid "report.mrp.mrp_bom_structure_report" -msgstr "" +msgstr "report.mrp.mrp_bom_structure_report" #. module: mrp #: model:ir.model,name:mrp.model_res_config_settings @@ -3664,12 +3705,12 @@ msgstr "stock.traceability.report" #. module: mrp #: model:ir.model,name:mrp.model_stock_warn_insufficient_qty_unbuild msgid "stock.warn.insufficient.qty.unbuild" -msgstr "" +msgstr "stock.warn.insufficient.qty.unbuild" #. module: mrp #: model:ir.actions.act_window,help:mrp.mrp_workcenter_kanban_action msgid "to create a new Work Center." -msgstr "" +msgstr "若要创建新的工作中心,请执行以下操作。" #. module: mrp #: model:ir.ui.view,arch_db:mrp.mrp_routing_workcenter_form_view diff --git a/addons/mrp/models/stock_move.py b/addons/mrp/models/stock_move.py index 73996dd70bd..64c2bcd22cb 100644 --- a/addons/mrp/models/stock_move.py +++ b/addons/mrp/models/stock_move.py @@ -151,7 +151,7 @@ class StockMove(models.Model): # all grouped in the same picking. if not self.picking_type_id: return self - bom = self.env['mrp.bom'].sudo()._bom_find(product=self.product_id) + bom = self.env['mrp.bom'].sudo()._bom_find(product=self.product_id, company_id=self.company_id.id) if not bom or bom.type != 'phantom': return self phantom_moves = self.env['stock.move'] diff --git a/addons/mrp/views/mrp_production_views.xml b/addons/mrp/views/mrp_production_views.xml index f9cfe13ed6c..c22daf42829 100644 --- a/addons/mrp/views/mrp_production_views.xml +++ b/addons/mrp/views/mrp_production_views.xml @@ -48,7 +48,7 @@ <button name="button_unreserve" type="object" string="Unreserve" attrs="{'invisible': [('unreserve_visible', '=', False)]}"/> <span class="label label-danger" attrs="{'invisible': ['|',('availability', 'in', ('assigned', 'none')), ('state', 'not in', ('confirmed','progress'))]}">Raw materials not available!</span> <field name="state" widget="statusbar" statusbar_visible="confirmed,progress,done"/> - <button name="action_toggle_is_locked" attrs="{'invisible': ['|', '|', ('state', '=', 'cancel'), ('id', '=', False), ('is_locked', '=', False)]}" string="Unlock" groups="mrp.group_mrp_manager" type="object" help="If the manufacturing order is unlocked you can add to the initial demand."/> + <button name="action_toggle_is_locked" attrs="{'invisible': ['|', '|', ('state', '=', 'cancel'), ('id', '=', False), ('is_locked', '=', False)]}" string="Unlock" groups="mrp.group_mrp_manager" type="object" help="Unlock the manufacturing order to correct what has been consumed or produced."/> <button name="action_toggle_is_locked" attrs="{'invisible': [('is_locked', '=', True)]}" string="Lock" class="oe_highlight" groups="mrp.group_mrp_manager" type="object"/> </header> <sheet> diff --git a/addons/pad/models/pad.py b/addons/pad/models/pad.py index 60eaa5fc2bb..aebcff24918 100644 --- a/addons/pad/models/pad.py +++ b/addons/pad/models/pad.py @@ -132,7 +132,7 @@ class PadCommon(models.AbstractModel): # Update the `pad_content_field` if the pad is modified for k, v in list(vals.items()): - field = self._fields[k] + field = self._fields.get(k) if hasattr(field, 'pad_content_field'): vals[field.pad_content_field] = self.pad_get_content(v) diff --git a/addons/payment/i18n/zh_CN.po b/addons/payment/i18n/zh_CN.po index 5793613c550..a37b908f3d1 100644 --- a/addons/payment/i18n/zh_CN.po +++ b/addons/payment/i18n/zh_CN.po @@ -6,18 +6,19 @@ # Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 # max_xu <wangzhanwh@163.com>, 2016 # Gary Wei <Gary.wei@elico-corp.com>, 2017 -# Martin Trigaux <mat@odoo.com>, 2017 +# Martin Trigaux, 2017 # liAnGjiA <liangjia@qq.com>, 2017 # glovebx <ruinning@163.com>, 2017 # 老窦 北京 <2662059195@qq.com>, 2017 -# fausthuang <faust_huang@hotmail.com>, 2017 +# fausthuang, 2017 +# 山西清水欧度(QQ:54773801) <54773801@qq.com>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server 10.saas~18\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: fausthuang <faust_huang@hotmail.com>, 2017\n" +"Last-Translator: 山西清水欧度(QQ:54773801) <54773801@qq.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" @@ -38,7 +39,7 @@ msgstr "<i class=\"fa fa-arrow-circle-right\"/> 返回我的帐户" #. module: payment #: model:ir.ui.view,arch_db:payment.payment_tokens_list msgid "<i class=\"fa fa-lock\"> Pay</i>" -msgstr "" +msgstr "<i class=\"fa fa-lock\">付款</i>" #. module: payment #: model:ir.ui.view,arch_db:payment.payment_tokens_list @@ -48,7 +49,7 @@ msgstr "" #. module: payment #: model:ir.ui.view,arch_db:payment.payment_tokens_list msgid "<i class=\"fa fa-trash\"/> Delete" -msgstr "" +msgstr "<i class=\"fa fa-trash\"/>删除" #. module: payment #. openerp-web @@ -1108,7 +1109,7 @@ msgstr "服务器到服务器" #: code:addons/payment/static/src/js/payment_form.js:266 #, python-format msgid "Server error" -msgstr "" +msgstr "服务器错误" #. module: payment #: model:ir.model.fields,field_description:payment.field_payment_token_short_name diff --git a/addons/payment_sips/models/payment.py b/addons/payment_sips/models/payment.py index f06b72461f9..46464b7d60c 100644 --- a/addons/payment_sips/models/payment.py +++ b/addons/payment_sips/models/payment.py @@ -76,7 +76,7 @@ class AcquirerSips(models.Model): if self.environment == 'prod': # For production environment, key version 2 is required merchant_id = getattr(self, 'sips_merchant_id') - key_version = '2' + key_version = self.env['ir.config_parameter'].sudo().get_param('sips.key_version', '2') else: # Test key provided by Atos Wordline works only with version 1 merchant_id = '002001000000001' diff --git a/addons/point_of_sale/i18n/de.po b/addons/point_of_sale/i18n/de.po index 1155d1ebb01..2dfd04f34fd 100644 --- a/addons/point_of_sale/i18n/de.po +++ b/addons/point_of_sale/i18n/de.po @@ -3,15 +3,15 @@ # * point_of_sale # # Translators: -# Martin Trigaux <mat@odoo.com>, 2017 +# Martin Trigaux, 2017 # Anja Funk <anja.funk@afimage.de>, 2017 -# Wolfgang Taferner <wolfgang.transifex@service.wt-io-it.at>, 2017 +# Wolfgang Taferner, 2017 # Tina Rittmüller <tr@ife.de>, 2017 -# Niki Waibel <niki.waibel@gmail.com>, 2017 +# Niki Waibel, 2017 # Ermin Trevisan <trevi@twanda.com>, 2017 # darenkster <inactive+darenkster@transifex.com>, 2017 # Philipp Hug <philipp@hug.cx>, 2017 -# Renzo Meister <info@jamotion.ch>, 2017 +# Renzo Meister, 2017 # JackTheHunter <Maximilian.N98@gmail.com>, 2017 # Malte Jansen <work@maltejansen.de>, 2017 # Andreas Stauder <andreas.stauder@brain-tec.ch>, 2017 @@ -24,7 +24,7 @@ # Martin K <martinkuenz@gmail.com>, 2017 # Alexander Klockhaus <a.klockhaus@gmail.com>, 2017 # Ralf Hilgenstock <rh@dialoge.info>, 2017 -# Andi <flimflam@salasar.de>, 2017 +# Andi, 2017 # Rudolf Schnapka <rs@techno-flex.de>, 2017 # Fabian Liesch <fabian.liesch@gmail.com>, 2017 # Constantin Ehrenstein <transifex@skiller.eu>, 2017 @@ -32,13 +32,14 @@ # DE T1 <e2f8846@yahoo.com>, 2017 # Bülent Tiknas <btiknas@googlemail.com>, 2017 # key six <mobile.umts@gmail.com>, 2017 +# Juan José Trujillo <juanjosetrujillo@gmx.de>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server saas~11.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-13 14:36+0000\n" "PO-Revision-Date: 2017-12-13 14:36+0000\n" -"Last-Translator: key six <mobile.umts@gmail.com>, 2017\n" +"Last-Translator: Juan José Trujillo <juanjosetrujillo@gmx.de>, 2018\n" "Language-Team: German (https://www.transifex.com/odoo/teams/41243/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2404,7 +2405,7 @@ msgstr "Zahlungen" #: code:addons/point_of_sale/static/src/xml/pos.xml:939 #, python-format msgid "Payments:" -msgstr "" +msgstr "Zahlungen" #. module: point_of_sale #: model:ir.filters,name:point_of_sale.filter_orders_per_session @@ -2473,7 +2474,7 @@ msgstr "Bitte Partner für diesen Verkauf definieren" #: code:addons/point_of_sale/static/src/xml/pos.xml:533 #, python-format msgid "Please select a payment method." -msgstr "" +msgstr "Bitte wählen Sie eine Zahlungsmethode" #. module: point_of_sale #. openerp-web @@ -2643,7 +2644,7 @@ msgstr "Gebucht" #. module: point_of_sale #: model:ir.model.fields,field_description:point_of_sale.field_pos_config_iface_precompute_cash msgid "Prefill Cash Payment" -msgstr "" +msgstr "Barzahlung vorausfüllen" #. module: point_of_sale #: model:ir.ui.view,arch_db:point_of_sale.pos_config_view_form @@ -3860,7 +3861,7 @@ msgstr "Gesamtpreis" #: code:addons/point_of_sale/static/src/xml/pos.xml:868 #, python-format msgid "Total Taxes" -msgstr "" +msgstr "Gesamte Steuern" #. module: point_of_sale #: model:ir.model.fields,help:point_of_sale.field_pos_session_cash_register_total_entry_encoding diff --git a/addons/point_of_sale/i18n/zh_CN.po b/addons/point_of_sale/i18n/zh_CN.po index 099ea3237c5..b496597bba5 100644 --- a/addons/point_of_sale/i18n/zh_CN.po +++ b/addons/point_of_sale/i18n/zh_CN.po @@ -4,8 +4,8 @@ # # Translators: # Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 -# Martin Trigaux <mat@odoo.com>, 2017 -# Bo Cao <cao.poobo@hotmail.com>, 2017 +# Martin Trigaux, 2017 +# Bo Cao, 2017 # 卓忆科技 <zhanghao@jointd.com>, 2017 # Talway <9010446@qq.com>, 2017 # Alex Duan <alex.duan@elico-corp.com>, 2017 @@ -509,7 +509,7 @@ msgstr "可用价格表" #. module: point_of_sale #: model:ir.ui.view,arch_db:point_of_sale.view_account_journal_search_inherit_point_of_sale msgid "Available for Point of Sale" -msgstr "" +msgstr "POS可用" #. module: point_of_sale #: model:ir.ui.view,arch_db:point_of_sale.product_template_search_view_pos @@ -520,7 +520,7 @@ msgstr "POS可用" #: model:ir.model.fields,field_description:point_of_sale.field_product_product_available_in_pos #: model:ir.model.fields,field_description:point_of_sale.field_product_template_available_in_pos msgid "Available in Point of Sale" -msgstr "" +msgstr "POS可用" #. module: point_of_sale #: model:ir.model.fields,field_description:point_of_sale.field_report_pos_order_average_price diff --git a/addons/point_of_sale/models/pos_order.py b/addons/point_of_sale/models/pos_order.py index 57a1e8f94ed..46bea35c1f3 100644 --- a/addons/point_of_sale/models/pos_order.py +++ b/addons/point_of_sale/models/pos_order.py @@ -1018,7 +1018,10 @@ class ReportSaleDetails(models.AbstractModel): for tax in line_taxes['taxes']: taxes.setdefault(tax['id'], {'name': tax['name'], 'tax_amount':0.0, 'base_amount':0.0}) taxes[tax['id']]['tax_amount'] += tax['amount'] - taxes[tax['id']]['base_amount'] += line.price_subtotal + taxes[tax['id']]['base_amount'] += tax['base'] + else: + taxes.setdefault(0, {'name': _('No Taxes'), 'tax_amount':0.0, 'base_amount':0.0}) + taxes[0]['base_amount'] += line.price_subtotal_incl st_line_ids = self.env["account.bank.statement.line"].search([('pos_statement_id', 'in', orders.ids)]).ids if st_line_ids: diff --git a/addons/point_of_sale/static/src/js/models.js b/addons/point_of_sale/static/src/js/models.js index 14b9285f38d..99fdc1ec7db 100644 --- a/addons/point_of_sale/static/src/js/models.js +++ b/addons/point_of_sale/static/src/js/models.js @@ -331,7 +331,7 @@ exports.PosModel = Backbone.Model.extend({ ids: function(self){ return [self.config.currency_id[0]]; }, loaded: function(self, currencies){ self.currency = currencies[0]; - if (self.currency.rounding > 0) { + if (self.currency.rounding > 0 && self.currency.rounding < 1) { self.currency.decimals = Math.ceil(Math.log(1.0 / self.currency.rounding) / Math.log(10)); } else { self.currency.decimals = 0; @@ -528,7 +528,7 @@ exports.PosModel = Backbone.Model.extend({ var fields = typeof model.fields === 'function' ? model.fields(self,tmp) : model.fields; var domain = typeof model.domain === 'function' ? model.domain(self,tmp) : model.domain; - var context = typeof model.context === 'function' ? model.context(self,tmp) : model.context; + var context = typeof model.context === 'function' ? model.context(self,tmp) : model.context || {}; var ids = typeof model.ids === 'function' ? model.ids(self,tmp) : model.ids; var order = typeof model.order === 'function' ? model.order(self,tmp): model.order; progress += progress_step; @@ -536,7 +536,7 @@ exports.PosModel = Backbone.Model.extend({ if( model.model ){ var params = { model: model.model, - context: context, + context: _.extend(context, session.user_context || {}), }; if (model.ids) { diff --git a/addons/portal/i18n/zh_CN.po b/addons/portal/i18n/zh_CN.po index 15f8b956a8e..bdbd987e9f2 100644 --- a/addons/portal/i18n/zh_CN.po +++ b/addons/portal/i18n/zh_CN.po @@ -3,9 +3,9 @@ # * portal # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2016 -# Martin Trigaux <mat@odoo.com>, 2017 -# fausthuang <faust_huang@hotmail.com>, 2017 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 +# Martin Trigaux, 2017 +# fausthuang, 2017 # waveyeung <waveyeung@qq.com>, 2017 # Talway <9010446@qq.com>, 2017 # Siyuan Gu <siyuancn@hotmail.com>, 2017 @@ -117,6 +117,8 @@ msgid "" "Confirm\n" " <span class=\"fa fa-long-arrow-right\"/>" msgstr "" +"确认\n" +"<span class=\"fa fa-long-arrow-right\"/>" #. module: portal #: model:ir.model.fields,field_description:portal.field_portal_wizard_user_partner_id diff --git a/addons/portal/static/src/js/portal_chatter.js b/addons/portal/static/src/js/portal_chatter.js index a35a97ed09b..c91771174c1 100644 --- a/addons/portal/static/src/js/portal_chatter.js +++ b/addons/portal/static/src/js/portal_chatter.js @@ -52,21 +52,28 @@ var PortalChatter = Widget.extend({ params: this._messageFetchPrepareParams() }), this._loadTemplates() ).then(function(result){ - // bind events - self.on("change:messages", self, self._renderMessages); - self.on("change:message_count", self, function(){ - self._renderMessageCount(); - self.set('pager', self._pager(self._current_page)); - }); - self.on("change:pager", self, self._renderPager); - self.on("change:domain", self, self._onChangeDomain); - // set options and parameters - self.options = _.extend(self.options, result['options'] || {}); - self.set('message_count', self.options['message_count']); - self.set('messages', self.preprocessMessages(result['messages'])); + self.result = result return result; }); }, + /** + * @override + */ + start: function () { + // bind events + this.on("change:messages", this, this._renderMessages); + this.on("change:message_count", this, function(){ + this._renderMessageCount(); + this.set('pager', this._pager(this._current_page)); + }); + this.on("change:pager", this, this._renderPager); + this.on("change:domain", this, this._onChangeDomain); + // set options and parameters + this.options = _.extend(this.options, this.result['options'] || {}); + this.set('message_count', this.options['message_count']); + this.set('messages', this.preprocessMessages(this.result['messages'])); + return this._super.apply(this, arguments); + }, //-------------------------------------------------------------------------- // Public diff --git a/addons/pos_restaurant/i18n/zh_CN.po b/addons/pos_restaurant/i18n/zh_CN.po index 68bde60ad89..b08ecbfcdbc 100644 --- a/addons/pos_restaurant/i18n/zh_CN.po +++ b/addons/pos_restaurant/i18n/zh_CN.po @@ -3,17 +3,18 @@ # * pos_restaurant # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2016 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 # Joray <13637815@qq.com>, 2017 # Gary Wei <Gary.wei@elico-corp.com>, 2017 # liulixia <liu.lixia@elico-corp.com>, 2017 +# 老窦 北京 <2662059195@qq.com>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server 10.saas~18\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-09-20 09:52+0000\n" "PO-Revision-Date: 2017-09-20 09:52+0000\n" -"Last-Translator: liulixia <liu.lixia@elico-corp.com>, 2017\n" +"Last-Translator: 老窦 北京 <2662059195@qq.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" @@ -29,7 +30,7 @@ msgstr "<strong>楼层名称: </strong>" #. module: pos_restaurant #: model:ir.ui.view,arch_db:pos_restaurant.view_restaurant_floor_kanban msgid "<strong>Point of Sale: </strong>" -msgstr "" +msgstr "<strong>POS:</strong>" #. module: pos_restaurant #: model:ir.model.fields,help:pos_restaurant.field_restaurant_floor_background_image @@ -67,7 +68,7 @@ msgstr "增加备注" #. module: pos_restaurant #: model:ir.ui.view,arch_db:pos_restaurant.pos_config_view_form_inherit_restaurant msgid "Add notes to orderlines" -msgstr "" +msgstr "添加备注到订单行" #. module: pos_restaurant #: model:ir.model.fields,help:pos_restaurant.field_pos_config_iface_orderline_notes diff --git a/addons/project/i18n/zh_CN.po b/addons/project/i18n/zh_CN.po index 129818c94fe..569b1c3f790 100644 --- a/addons/project/i18n/zh_CN.po +++ b/addons/project/i18n/zh_CN.po @@ -3,19 +3,19 @@ # * project # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2016 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 # 苏州远鼎 <tiexinliu@126.com>, 2016 -# Bo Cao <cao.poobo@hotmail.com>, 2017 +# Bo Cao, 2017 # Ted Wang <feiyuwang2012@gmail.com>, 2017 # Talway <9010446@qq.com>, 2017 # liAnGjiA <liangjia@qq.com>, 2017 # liulixia <liu.lixia@elico-corp.com>, 2017 -# Martin Trigaux <mat@odoo.com>, 2017 +# Martin Trigaux, 2017 # Gary Wei <Gary.wei@elico-corp.com>, 2017 # 卓忆科技 <zhanghao@jointd.com>, 2017 # Maie <m@maie.name>, 2017 # 老窦 北京 <2662059195@qq.com>, 2017 -# fausthuang <faust_huang@hotmail.com>, 2017 +# fausthuang, 2017 # Luke <cialuo@qq.com>, 2017 msgid "" msgstr "" @@ -488,7 +488,7 @@ msgstr "已归档" #. module: project #: model:ir.ui.view,arch_db:project.view_task_form2 msgid "Assign to Me" -msgstr "" +msgstr "分配给我" #. module: project #: model:ir.model.fields,field_description:project.field_report_project_task_user_date_start @@ -750,7 +750,7 @@ msgstr "创建一个新的项目" #. module: project #: model:ir.model.fields,field_description:project.field_project_task_merge_wizard_create_new_task msgid "Create a new task" -msgstr "" +msgstr "创建一个新任务" #. module: project #: model:ir.model.fields,field_description:project.field_project_project_create_uid diff --git a/addons/purchase/i18n/nl.po b/addons/purchase/i18n/nl.po index 9ba019a647d..5550bf3682a 100644 --- a/addons/purchase/i18n/nl.po +++ b/addons/purchase/i18n/nl.po @@ -5,7 +5,7 @@ # Translators: # Yenthe Van Ginneken <yenthespam@gmail.com>, 2016 # Stephan Van Dyck <stephan.vandyck@vanroey.be>, 2016 -# Martin Trigaux <mat@odoo.com>, 2016 +# Martin Trigaux, 2016 # Erwin van der Ploeg <erwin@odooexperts.nl>, 2016 # Eric Geens <ericgeens@yahoo.com>, 2016 # Cas Vissers <casvissers@brahoo.nl>, 2016 @@ -2005,6 +2005,11 @@ msgid "" "on-demand flow. The requested delivery address will be the customer delivery" " address and not your warehouse." msgstr "" +"Dit voegt een dropshipping-route toe, welke toegepast kan worden op " +"producten om uw leveranciers te vragen om direct aan uw klanten te leveren. " +"Een dropship product genereert een inkoop offerte aanvraag zodra de " +"verkooporder is bevestigd. Het proces is compleet gebaseerd op vraag. Het " +"afleveradres is het afleveradres van de klant en niet van uw magazijn." #. module: purchase #: model:ir.ui.view,arch_db:purchase.purchase_order_form diff --git a/addons/purchase/models/account_invoice.py b/addons/purchase/models/account_invoice.py index 02d02844a82..ef23444c32c 100644 --- a/addons/purchase/models/account_invoice.py +++ b/addons/purchase/models/account_invoice.py @@ -94,13 +94,11 @@ class AccountInvoice(models.Model): self.purchase_id = False return {} - @api.onchange('currency_id', 'date_invoice') + @api.onchange('currency_id') def _onchange_currency_id(self): if self.currency_id: for line in self.invoice_line_ids.filtered(lambda r: r.purchase_line_id): - if line.purchase_id.currency_id != self.currency_id: - line.price_unit = line.purchase_id.currency_id.with_context(date=self.date_invoice)\ - .compute(line.purchase_line_id.price_unit, self.currency_id, round=False) + line.price_unit = line.purchase_id.currency_id.with_context(date=self.date_invoice).compute(line.purchase_line_id.price_unit, self.currency_id, round=False) @api.onchange('invoice_line_ids') def _onchange_origin(self): diff --git a/addons/rating/i18n/zh_CN.po b/addons/rating/i18n/zh_CN.po index 1a45a298433..b3cfbcede0c 100644 --- a/addons/rating/i18n/zh_CN.po +++ b/addons/rating/i18n/zh_CN.po @@ -6,14 +6,15 @@ # Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 # Shenglan Chen <dodolobox@gmail.com>, 2016 # Eddie Lim <bhweelim@yahoo.com>, 2017 -# Martin Trigaux <mat@odoo.com>, 2017 +# Martin Trigaux, 2017 +# 老窦 北京 <2662059195@qq.com>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server 10.saas~18\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: Martin Trigaux <mat@odoo.com>, 2017\n" +"Last-Translator: 老窦 北京 <2662059195@qq.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" @@ -31,7 +32,7 @@ msgstr "" #. module: rating #: model:ir.ui.view,arch_db:rating.rating_rating_view_form msgid "<span class=\"o_stat_text\">Resource</span>" -msgstr "" +msgstr "<span class=\"o_stat_text\">资源</span>" #. module: rating #: model:ir.model.fields,help:rating.field_rating_rating_access_token @@ -120,7 +121,7 @@ msgstr "分组" #: model:ir.ui.view,arch_db:rating.rating_rating_view_search #: selection:rating.rating,rating_text:0 msgid "Highly dissatisfied" -msgstr "" +msgstr "非常不满意" #. module: rating #: model:ir.model.fields,field_description:rating.field_rating_mixin_id diff --git a/addons/repair/i18n/zh_CN.po b/addons/repair/i18n/zh_CN.po index 231cf8baa1a..460d8758bbc 100644 --- a/addons/repair/i18n/zh_CN.po +++ b/addons/repair/i18n/zh_CN.po @@ -27,12 +27,12 @@ msgstr "" #. module: mrp_repair #: model:mail.template,report_name:mrp_repair.mail_template_mrp_repair_quotation msgid "${(object.name or '').replace('/','_')}" -msgstr "" +msgstr "${(object.name or ‘’).replace(‘/‘,’_’)}" #. module: mrp_repair #: model:mail.template,subject:mrp_repair.mail_template_mrp_repair_quotation msgid "${object.partner_id.name} Repair Orders (Ref ${object.name or 'n/a' })" -msgstr "" +msgstr "${object.partner_id.name} 维修单 (Ref ${object.name or ’n/a’ })" #. module: mrp_repair #: model:ir.ui.view,arch_db:mrp_repair.report_mrprepairorder @@ -54,6 +54,12 @@ msgid "" "* The 'Done' status is set when repairing is completed.\n" "* The 'Cancelled' status is used when user cancel repair order." msgstr "" +"*“草稿”状态用于用户正在编码新的和未经确认的维修订单。\n" +"*用户确认维修订单时使用“确认”状态。\n" +"*“准备维修”状态用于开始维修,用户只有在维修订单确认后才能开始维修。\n" +"*“待开票”状态用于在维修完成之前或之后生成发票。\n" +"*维修完成后,“完成”状态将被设置。\n" +"*用户取消维修订单时使用“取消”状态。" #. module: mrp_repair #: model:mail.template,body_html:mrp_repair.mail_template_mrp_repair_quotation @@ -73,6 +79,20 @@ msgid "" " <p>Thank you,</p>\n" " </data>" msgstr "" +"<?xml version=\"1.0\"?>\n" +"<data><p>Dear ${object.partner_id.name}</p>\n" +" <p>\n" +" Here is your repair order ${doc_name} <strong>${object.name}</strong>\n" +" % if object.origin:\n" +" (with reference: ${object.origin} )\n" +" % endif\n" +" % if object.invoice_method != ‘none’:\n" +" amounting in <strong>${object.amount_total} ${object.pricelist_id.currency_id.name}.</strong>\n" +" % endif\n" +" </p>\n" +" <p>You can reply to this email if you have any questions.</p>\n" +" <p>Thank you,</p>\n" +" </data>" #. module: mrp_repair #: model:ir.ui.view,arch_db:mrp_repair.report_mrprepairorder @@ -82,17 +102,17 @@ msgstr "<i>(添加)</i>" #. module: mrp_repair #: model:ir.ui.view,arch_db:mrp_repair.report_mrprepairorder msgid "<strong>Lot/Serial Number:</strong>" -msgstr "" +msgstr "<strong>批次/序列号</strong>" #. module: mrp_repair #: model:ir.ui.view,arch_db:mrp_repair.report_mrprepairorder msgid "<strong>Operations</strong>" -msgstr "" +msgstr "<strong>操作</strong>" #. module: mrp_repair #: model:ir.ui.view,arch_db:mrp_repair.report_mrprepairorder msgid "<strong>Parts</strong>" -msgstr "" +msgstr "<strong>零件</strong>" #. module: mrp_repair #: model:ir.ui.view,arch_db:mrp_repair.report_mrprepairorder @@ -122,7 +142,7 @@ msgstr "<strong>总计</strong>" #. module: mrp_repair #: model:ir.ui.view,arch_db:mrp_repair.report_mrprepairorder msgid "<strong>Warranty:</strong>" -msgstr "" +msgstr "<strong>保证:</strong>" #. module: mrp_repair #: selection:mrp.repair.line,type:0 @@ -153,7 +173,7 @@ msgstr "修理前" #: code:addons/mrp_repair/models/mrp_repair.py:237 #, python-format msgid "Can only confirm draft repairs." -msgstr "" +msgstr "只能确认草稿维修单。" #. module: mrp_repair #: model:ir.ui.view,arch_db:mrp_repair.view_cancel_repair @@ -567,7 +587,7 @@ msgstr "业务伙伴" #: model:ir.model.fields,field_description:mrp_repair.field_mrp_repair_operations #: model:ir.ui.view,arch_db:mrp_repair.view_repair_order_form msgid "Parts" -msgstr "" +msgstr "零件" #. module: mrp_repair #: model:ir.ui.view,arch_db:mrp_repair.report_mrprepairorder @@ -715,25 +735,25 @@ msgstr "修理参考" #: code:addons/mrp_repair/models/mrp_repair.py:203 #, python-format msgid "Repair must be canceled in order to reset it to draft." -msgstr "" +msgstr "必须取消维修单,以便将其重置为草稿。" #. module: mrp_repair #: code:addons/mrp_repair/models/mrp_repair.py:408 #, python-format msgid "Repair must be confirmed before starting reparation." -msgstr "" +msgstr "维修单必须确认后才能进行维修。" #. module: mrp_repair #: code:addons/mrp_repair/models/mrp_repair.py:436 #, python-format msgid "Repair must be repaired in order to make the product moves." -msgstr "" +msgstr "维修单必须维修后,才能移动" #. module: mrp_repair #: code:addons/mrp_repair/models/mrp_repair.py:419 #, python-format msgid "Repair must be under repair in order to end reparation." -msgstr "" +msgstr "维修单必须维修,以便结束赔偿。" #. module: mrp_repair #: code:addons/mrp_repair/models/mrp_repair.py:251 @@ -865,7 +885,7 @@ msgstr "修理单在序列号上用质保期,这样是为了标明是否要给 msgid "" "The status of a repair line is set automatically to the one of the linked " "repair order." -msgstr "" +msgstr "修复线的状态自动设置为链接修复顺序之一。" #. module: mrp_repair #: model:ir.ui.view,arch_db:mrp_repair.view_cancel_repair @@ -960,7 +980,7 @@ msgstr "你必须在修理单上选择业务伙伴的发票地址!" msgid "" "You have to select a pricelist in the Repair form !\n" " Please set one before choosing a product." -msgstr "" +msgstr "您必须在维修表单中选择一个价目表! 在选择产品之前请设置一个。" #. module: mrp_repair #: model:ir.model,name:mrp_repair.model_stock_traceability_report @@ -970,4 +990,4 @@ msgstr "stock.traceability.report" #. module: mrp_repair #: model:ir.model,name:mrp_repair.model_stock_warn_insufficient_qty_repair msgid "stock.warn.insufficient.qty.repair" -msgstr "" +msgstr "stock.warn.insufficient.qty.repair" diff --git a/addons/resource/models/resource.py b/addons/resource/models/resource.py index 5a34afa53a4..b7e2cb4ab62 100644 --- a/addons/resource/models/resource.py +++ b/addons/resource/models/resource.py @@ -142,6 +142,8 @@ class ResourceCalendar(models.Model): ) def _interval_and(self, interval, interval_dst): + if interval.start_datetime > interval_dst.end_datetime or interval.end_datetime < interval_dst.start_datetime: + return None return self._interval_obj( interval.start_datetime > interval_dst.start_datetime and interval.start_datetime or interval_dst.start_datetime, interval.end_datetime < interval_dst.end_datetime and interval.end_datetime or interval_dst.end_datetime, @@ -406,10 +408,10 @@ class ResourceCalendar(models.Model): start_datetime=datetime.datetime.combine(day_date, start_time), end_datetime=datetime.datetime.combine(day_date, end_time)) - final_intervals = [ - self._interval_and(leave_interval, work_interval) - for leave_interval in leaves_intervals - for work_interval in working_intervals] + final_intervals = [i for i in + [self._interval_and(leave_interval, work_interval) + for leave_interval in leaves_intervals + for work_interval in working_intervals] if i] # adapt tz return [self._interval_new( diff --git a/addons/resource/tests/test_resource.py b/addons/resource/tests/test_resource.py index 617d6f9b79e..f31a89399dd 100644 --- a/addons/resource/tests/test_resource.py +++ b/addons/resource/tests/test_resource.py @@ -55,6 +55,12 @@ class TestIntervals(TestResourceCommon): # Third interval: 04, 17-21, 18-19 being inside 17-21 self.assertEqual(cleaned_intervals[2][:2], (Datetime.from_string('2013-02-04 17:00:00'), Datetime.from_string('2013-02-04 21:00:00'))) + def test_interval_and(self): + self.assertEqual(self.env['resource.calendar']._interval_and(self.intervals[0], self.intervals[1]), + self.calendar._interval_new(Datetime.from_string('2013-02-04 09:00:00'), Datetime.from_string('2013-02-04 11:00:00'))) + self.assertEqual(self.env['resource.calendar']._interval_and(self.intervals[2], self.intervals[3]), + None) + def test_interval_remove(self): working_interval = self.calendar._interval_new(Datetime.from_string('2013-02-04 08:00:00'), Datetime.from_string('2013-02-04 18:00:00')) result = self.env['resource.calendar']._interval_remove_leaves(working_interval, self.intervals) diff --git a/addons/sale/models/sale.py b/addons/sale/models/sale.py index 21b664352f6..a646f5e0ed3 100644 --- a/addons/sale/models/sale.py +++ b/addons/sale/models/sale.py @@ -826,8 +826,9 @@ class SaleOrderLine(models.Model): # Prevent writing on a locked SO. protected_fields = self._get_protected_fields() if 'done' in self.mapped('order_id.state') and any(f in values.keys() for f in protected_fields): + protected_fields_modified = list(set(protected_fields) & set(values.keys())) fields = self.env['ir.model.fields'].search([ - ('name', 'in', protected_fields), ('model', '=', self._name) + ('name', 'in', protected_fields_modified), ('model', '=', self._name) ]) raise UserError( _('It is forbidden to modify the following fields in a locked order:\n%s') diff --git a/addons/sms/i18n/es.po b/addons/sms/i18n/es.po index ca92d2ad558..0c0f318e646 100644 --- a/addons/sms/i18n/es.po +++ b/addons/sms/i18n/es.po @@ -5,17 +5,18 @@ # Translators: # José Matias Zuazo <jose.zuazo@tpsistemas.com.ar>, 2017 # e2f_es_ t6 <e2f_es_t6@outlook.com>, 2017 -# Martin Trigaux <mat@odoo.com>, 2017 +# Martin Trigaux, 2017 # Pedro M. Baeza <pedro.baeza@gmail.com>, 2017 # Inigo Zuluaga <inigo_zuluaga@yahoo.es>, 2017 # Alejandro Santana <alejandrosantana@anubia.es>, 2017 +# Sarai Osorio <sarai.osorio@jarsa.com.mx>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-10-10 11:35+0000\n" "PO-Revision-Date: 2017-10-10 11:35+0000\n" -"Last-Translator: Alejandro Santana <alejandrosantana@anubia.es>, 2017\n" +"Last-Translator: Sarai Osorio <sarai.osorio@jarsa.com.mx>, 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" @@ -64,7 +65,7 @@ msgstr "ID (identificación)" #: code:addons/sms/models/mail_thread.py:53 #, python-format msgid "Insufficient credit, unable to send SMS message: %s" -msgstr "" +msgstr "Crédito insuficiente, no puede enviar mensajes SMS:%s" #. module: sms #: model:ir.model.fields,field_description:sms.field_sms_api___last_update @@ -91,13 +92,14 @@ msgstr "Mensaje" #: code:addons/sms/wizard/send_sms.py:48 #, python-format msgid "Missing mobile number for %s." -msgstr "" +msgstr "Falta el número de móvil para%s." #. module: sms #: code:addons/sms/models/mail_thread.py:55 #, python-format msgid "No mobile number defined, unable to send SMS message: %s" msgstr "" +"Sin número de teléfono definido, no se puede enviar mensaje de texto: %s" #. module: sms #: model:ir.model.fields,field_description:sms.field_sms_send_sms_recipients @@ -108,7 +110,7 @@ msgstr "Destinatarios" #: code:addons/sms/models/mail_thread.py:48 #, python-format msgid "SMS message sent: %s" -msgstr "" +msgstr "Mensaje SMS enviado: %s" #. module: sms #: model:ir.ui.view,arch_db:sms.send_sms_view_form @@ -119,19 +121,19 @@ msgstr "Enviar" #: model:ir.actions.act_window,name:sms.send_sms_action #: model:ir.actions.act_window,name:sms.send_sms_form_action msgid "Send SMS" -msgstr "" +msgstr "Enviar SMS" #. module: sms #: model:ir.ui.view,arch_db:sms.send_sms_view_form msgid "Send an SMS" -msgstr "" +msgstr "Enviar un SMS" #. module: sms #: model:ir.model,name:sms.model_sms_api msgid "sms.api" -msgstr "" +msgstr "sms.api" #. module: sms #: model:ir.model,name:sms.model_sms_send_sms msgid "sms.send_sms" -msgstr "" +msgstr "sms.send_sms" diff --git a/addons/sms/wizard/send_sms.py b/addons/sms/wizard/send_sms.py index 844933d092a..139f542e597 100644 --- a/addons/sms/wizard/send_sms.py +++ b/addons/sms/wizard/send_sms.py @@ -35,7 +35,7 @@ class SendSMS(models.TransientModel): def _sms_sanitization(self, partner, field_name): number = partner[field_name] - if _sms_phonenumbers_lib_imported: + if number and _sms_phonenumbers_lib_imported: country = self._phone_get_country(partner) country_code = country.code if country else None try: diff --git a/addons/stock/views/stock_picking_views.xml b/addons/stock/views/stock_picking_views.xml index 5d8aac0c355..f9c5d607995 100644 --- a/addons/stock/views/stock_picking_views.xml +++ b/addons/stock/views/stock_picking_views.xml @@ -244,7 +244,7 @@ <field name="backorder_id" readonly="1" attrs="{'invisible': [('backorder_id','=',False)]}"/> </group> <group> - <field name="scheduled_date" attrs="{'readonly': [('id', '=', False)]}"/> + <field name="scheduled_date" attrs="{'readonly': [('id', '=', False)], 'required': [('id', '!=', False)]}"/> <field name="origin" placeholder="e.g. PO0032"/> <field name="owner_id" groups="stock.group_tracking_owner"/> <div groups="stock.group_tracking_owner" colspan="2" col="2"> diff --git a/addons/stock_account/views/stock_account_views.xml b/addons/stock_account/views/stock_account_views.xml index e169a2b7a8d..bd9f7f523f8 100644 --- a/addons/stock_account/views/stock_account_views.xml +++ b/addons/stock_account/views/stock_account_views.xml @@ -43,9 +43,9 @@ <field name="inherit_id" ref="stock.view_stock_return_picking_form"/> <field name="model">stock.return.picking</field> <field name="arch" type="xml"> - <field name="uom_id" position="after"> + <xpath expr="//field[@name='product_return_moves']/tree" position="inside"> <field name="to_refund"/> - </field> + </xpath> </field> </record> diff --git a/addons/web/i18n/zh_CN.po b/addons/web/i18n/zh_CN.po index b9f131801ae..4a4ac82e4ff 100644 --- a/addons/web/i18n/zh_CN.po +++ b/addons/web/i18n/zh_CN.po @@ -4,8 +4,8 @@ # # Translators: # Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 -# Martin Trigaux <mat@odoo.com>, 2016 -# fausthuang <faust_huang@hotmail.com>, 2016 +# Martin Trigaux, 2016 +# fausthuang, 2016 # Gary Wei <Gary.wei@elico-corp.com>, 2016 # Talway <9010446@qq.com>, 2016 # xiaobin wu <bd5dml@gmail.com>, 2016 @@ -18,13 +18,14 @@ # 菜小蛇 <lttlsnk@gmail.com>, 2016 # 苏州远鼎 <tiexinliu@126.com>, 2017 # 卓忆科技 <zhanghao@jointd.com>, 2017 +# 山西清水欧度(QQ:54773801) <54773801@qq.com>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server saas~11.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-13 14:37+0000\n" "PO-Revision-Date: 2017-12-13 14:37+0000\n" -"Last-Translator: 卓忆科技 <zhanghao@jointd.com>, 2017\n" +"Last-Translator: 山西清水欧度(QQ:54773801) <54773801@qq.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" @@ -51,7 +52,7 @@ msgstr " [我]" #: code:addons/web/static/src/js/chrome/search_filters.js:226 #, python-format msgid " and " -msgstr "" +msgstr " 与" #. module: web #. openerp-web @@ -154,6 +155,9 @@ msgid "" " <body class=\"ie9\">\n" " <![endif]-->" msgstr "" +"<!—[if lt IE 10]>\n" +" <body class=“ie9”>\n" +" <![endif]—>" #. module: web #: model:ir.ui.view,arch_db:web.minimal_layout @@ -200,7 +204,7 @@ msgstr "'%s' 不是正确的整数" #: code:addons/web/static/src/js/fields/field_utils.js:483 #, python-format msgid "'%s' is not a correct monetary field" -msgstr "" +msgstr "‘%s’ 不是正确的货币字段" #. module: web #. openerp-web @@ -228,7 +232,7 @@ msgstr "(无标签)" #: code:addons/web/static/src/js/fields/field_utils.js:239 #, python-format msgid "1 record" -msgstr "" +msgstr "1条记录" #. module: web #: model:ir.ui.view,arch_db:web.menu_secondary @@ -247,21 +251,21 @@ msgstr "<span>Odoo</span>" msgid "" "A popup window with your report was blocked. You may need to change your " "browser settings to allow popup windows for this page." -msgstr "" +msgstr "你的报告弹出窗口被封锁了。您可能需要更改浏览器设置,以允许此页的弹出窗口。" #. module: web #. openerp-web #: code:addons/web/static/src/xml/base.xml:589 #, python-format msgid "ALL" -msgstr "" +msgstr "所有" #. module: web #. openerp-web #: code:addons/web/static/src/xml/base.xml:590 #, python-format msgid "ANY" -msgstr "" +msgstr "任何" #. module: web #. openerp-web @@ -452,7 +456,7 @@ msgstr "发生了错误" msgid "" "An unknown CORS error occured. The error probably originates from a " "JavaScript file served from a different origin." -msgstr "" +msgstr "发生未知的CORS错误。 该错误可能来自不同来源的JavaScript文件。" #. module: web #. openerp-web @@ -548,7 +552,7 @@ msgstr "柱状图" msgid "" "Binary fields can not be exported to Excel unless their content is " "base64-encoded. That does not seem to be the case for %s." -msgstr "" +msgstr "二进制字段不能导出到Excel,除非他们的内容是Base64编码。这似乎不适用于 %s。" #. module: web #. openerp-web @@ -1229,6 +1233,9 @@ msgid "" "\n" "Tip: try to flip axis, filter further or reduce the number of measures." msgstr "" +"为了兼容Excel,如果列数超过256,则不能导出数据。\n" +"\n" +"提示:尝试翻转轴,进一步过滤或减少测量次数。" #. module: web #. openerp-web @@ -1290,7 +1297,7 @@ msgstr "" #: code:addons/web/static/src/js/core/dialog.js:250 #, python-format msgid "I am sure about this." -msgstr "" +msgstr "我确信这一点。" #. module: web #. openerp-web @@ -1335,7 +1342,7 @@ msgstr "无效的数据" msgid "" "Invalid database name. Only alphanumerical characters, underscore, hyphen " "and dot are allowed." -msgstr "" +msgstr "数据库名称无效。只允许字母数字字符,下划线,连字符和点。" #. module: web #. openerp-web @@ -1364,7 +1371,7 @@ msgstr "非法的模式" #: code:addons/web/static/src/js/widgets/debug_manager.js:208 #, python-format msgid "JS Mobile Tests" -msgstr "" +msgstr "JS移动端测试" #. module: web #. openerp-web @@ -1471,7 +1478,7 @@ msgstr "M2O搜索字段目前不支持多个默认值" #. module: web #: model:ir.ui.view,arch_db:web.external_layout_boxed msgid "Mail:" -msgstr "" +msgstr "Mail:" #. module: web #: model:ir.ui.view,arch_db:web.login_layout @@ -1498,14 +1505,14 @@ msgstr "匹配" #: code:addons/web/static/src/xml/base.xml:603 #, python-format msgid "Match records with" -msgstr "" +msgstr "配记录" #. module: web #. openerp-web #: code:addons/web/static/src/xml/base.xml:601 #, python-format msgid "Match records with the following rule:" -msgstr "" +msgstr "根据以下规则匹配记录:" #. module: web #. openerp-web @@ -1612,7 +1619,7 @@ msgstr "我的Odoo.com帐号" #: code:addons/web/static/src/xml/base.xml:591 #, python-format msgid "NONE" -msgstr "" +msgstr "无" #. module: web #. openerp-web @@ -1835,7 +1842,7 @@ msgstr "仅整型数值是合法的。" #, python-format msgid "" "Only employee can access this database. Please contact the administrator." -msgstr "" +msgstr "只有员工才能访问这个数据库。请与管理员联系。" #. module: web #. openerp-web @@ -1941,7 +1948,7 @@ msgstr "透视表" #: code:addons/web/static/src/js/views/list/list_renderer.js:327 #, python-format msgid "Please click on the \"save\" button first" -msgstr "" +msgstr "请先点击“保存”按钮" #. module: web #. openerp-web @@ -1993,7 +2000,7 @@ msgstr "" #, python-format msgid "" "Please use the copy button to report the error to your support service." -msgstr "" +msgstr "请使用复制按钮将错误报告给您的支持服务。" #. module: web #: model:ir.ui.view,arch_db:web.menu_secondary @@ -2112,7 +2119,7 @@ msgstr "恢复记录" #: code:addons/web/static/src/xml/base.xml:223 #, python-format msgid "Run JS Mobile Tests" -msgstr "" +msgstr "运行JS 移动端测试" #. module: web #. openerp-web @@ -2380,7 +2387,7 @@ msgstr "" #: code:addons/web/static/src/js/widgets/switch_company_menu.js:44 #, python-format msgid "Tap on the list to change company" -msgstr "" +msgstr "点击列表更改公司" #. module: web #. openerp-web @@ -2401,7 +2408,7 @@ msgstr "电话:" #: code:addons/web/static/src/js/widgets/domain_selector.js:567 #, python-format msgid "The domain you entered is not properly formed" -msgstr "" +msgstr "您输入的域格式不正确。" #. module: web #. openerp-web @@ -2410,7 +2417,7 @@ msgstr "" msgid "" "The field chain is not valid. Did you maybe use a non-existing field name or" " followed a non-relational field?" -msgstr "" +msgstr "字段链无效。 你可能使用了一个不存在的字段名称,或者跟着一个非关系的字段?" #. module: web #. openerp-web @@ -2446,7 +2453,7 @@ msgstr "你提供的原密码是错误的,密码没有改变" msgid "" "The record has been modified, your changes will be discarded. Do you want to" " proceed?" -msgstr "" +msgstr "记录已被修改,您的更改将被丢弃。你想继续吗?" #. module: web #. openerp-web @@ -2470,7 +2477,7 @@ msgstr "字段类型 '%s' 必须是一个关联到 'ir.attachment'模型的 man msgid "" "There are too many rows (%s rows, limit: 65535) to export as Excel 97-2003 " "(.xls) format. Consider splitting the export." -msgstr "" +msgstr "有太多行 (%s行, 限制: 65535) 导出为 Excel 97-2003 (. xls) 格式。考虑拆分导出。" #. module: web #. openerp-web @@ -2484,7 +2491,7 @@ msgstr "上传文件时发生了问题" #: code:addons/web/static/src/js/widgets/domain_selector.js:459 #, python-format msgid "This domain is not supported." -msgstr "" +msgstr "此域不受支持" #. module: web #. openerp-web @@ -2725,17 +2732,17 @@ msgstr "警告" #. module: web #: model:ir.ui.view,arch_db:web.benchmark_suite msgid "Web Benchmarks" -msgstr "" +msgstr "Web 基准" #. module: web #: model:ir.ui.view,arch_db:web.qunit_mobile_suite msgid "Web Mobile Tests" -msgstr "" +msgstr "Web 移动端测试" #. module: web #: model:ir.ui.view,arch_db:web.qunit_suite msgid "Web Tests" -msgstr "" +msgstr "Web 测试" #. module: web #: model:ir.ui.view,arch_db:web.external_layout_boxed @@ -2826,7 +2833,7 @@ msgstr "正要创建新的 %s,确认它真的不存在吗?" #: code:addons/web/static/src/js/widgets/model_field_selector.js:455 #, python-format msgid "You cannot follow relations for this field chain construction" -msgstr "" +msgstr "无法跟踪此字段链结构的关系。" #. module: web #: code:addons/web/controllers/main.py:787 @@ -2885,13 +2892,15 @@ msgid "" "shown in html.<br><br><a href=\"http://wkhtmltopdf.org/\" " "target=\"_blank\">wkhtmltopdf.org</a>" msgstr "" +"你安装的 Wkhtmltopdf 似乎坏了。该报告将以 html 格式显示。<br> <br> <a " +"href=“http://wkhtmltopdf.org/“ target=“_blank”> wkhtmltopdf.org </a>" #. module: web #. openerp-web #: code:addons/web/static/src/js/views/kanban/kanban_record.js:199 #, python-format msgid "[No widget %s]" -msgstr "" +msgstr "[没有小部件 %s]" #. module: web #. openerp-web @@ -2945,7 +2954,7 @@ msgstr "base" #: code:addons/web/static/src/js/widgets/domain_selector.js:28 #, python-format msgid "child of" -msgstr "" +msgstr "子类" #. module: web #. openerp-web @@ -3005,14 +3014,14 @@ msgstr "是" #: code:addons/web/static/src/js/chrome/search_filters.js:183 #, python-format msgid "is after" -msgstr "" +msgstr "在之后" #. module: web #. openerp-web #: code:addons/web/static/src/js/chrome/search_filters.js:184 #, python-format msgid "is before" -msgstr "" +msgstr "在之前" #. module: web #. openerp-web @@ -3092,7 +3101,7 @@ msgstr "为真" #: code:addons/web/static/src/js/core/utils.js:111 #, python-format msgid "kMGTPE" -msgstr "" +msgstr "kMGTPE" #. module: web #. openerp-web @@ -3123,7 +3132,7 @@ msgstr "少于及等于" #: code:addons/web/static/src/xml/base.xml:686 #, python-format msgid "not" -msgstr "" +msgstr "不是" #. module: web #. openerp-web @@ -3144,35 +3153,35 @@ msgstr "不是一个有效的数字" #: code:addons/web/static/src/js/widgets/domain_selector.js:24 #, python-format msgid "not contains" -msgstr "" +msgstr "不包含" #. module: web #. openerp-web #: code:addons/web/static/src/js/widgets/domain_selector.js:26 #, python-format msgid "not in" -msgstr "" +msgstr "不在" #. module: web #. openerp-web #: code:addons/web/static/src/js/widgets/domain_selector.js:658 #, python-format msgid "not set (false)" -msgstr "" +msgstr "未设置 (否)" #. module: web #. openerp-web #: code:addons/web/static/src/xml/base.xml:605 #, python-format msgid "of the following rules:" -msgstr "" +msgstr "以下规则:" #. module: web #. openerp-web #: code:addons/web/static/src/xml/base.xml:620 #, python-format msgid "of:" -msgstr "" +msgstr "的:" #. module: web #. openerp-web @@ -3187,7 +3196,7 @@ msgstr "或" #: code:addons/web/static/src/js/widgets/domain_selector.js:29 #, python-format msgid "parent of" -msgstr "" +msgstr "父类" #. module: web #. openerp-web @@ -3208,11 +3217,11 @@ msgstr "剩余)" #: code:addons/web/static/src/xml/base.xml:686 #, python-format msgid "set" -msgstr "" +msgstr "设置" #. module: web #. openerp-web #: code:addons/web/static/src/js/widgets/domain_selector.js:658 #, python-format msgid "set (true)" -msgstr "" +msgstr "设置(真)" diff --git a/addons/web/static/src/js/fields/basic_fields.js b/addons/web/static/src/js/fields/basic_fields.js index c9375c2d4b9..75aa1acd164 100644 --- a/addons/web/static/src/js/fields/basic_fields.js +++ b/addons/web/static/src/js/fields/basic_fields.js @@ -1082,6 +1082,7 @@ var UrlWidget = InputField.extend({ _renderReadonly: function () { this.$el.text(this.attrs.text || this.value) .addClass('o_form_uri o_text_overflow') + .attr('target', '_blank') .attr('href', this.value); } }); diff --git a/addons/web/static/src/js/fields/relational_fields.js b/addons/web/static/src/js/fields/relational_fields.js index 1ee40bfccdb..eba8dc90704 100644 --- a/addons/web/static/src/js/fields/relational_fields.js +++ b/addons/web/static/src/js/fields/relational_fields.js @@ -1105,6 +1105,7 @@ var FieldX2Many = AbstractField.extend({ * @param {OdooEvent} event */ _onResequence: function (event) { + event.stopPropagation(); var self = this; this.trigger_up('freeze_order', {id: this.value.id}); var rowIDs = event.data.rowIDs.slice(); diff --git a/addons/web/static/src/js/fields/special_fields.js b/addons/web/static/src/js/fields/special_fields.js index 19db97fe985..6bd5d03ac69 100644 --- a/addons/web/static/src/js/fields/special_fields.js +++ b/addons/web/static/src/js/fields/special_fields.js @@ -20,7 +20,8 @@ var FieldTimezoneMismatch = FieldSelection.extend({ * @override */ start: function () { - this._datetime = setInterval(this._renderDateTimeTimezone.bind(this), 1000); + var interval = navigator.platform.toUpperCase().indexOf('MAC') >= 0 ? 60000 : 1000; + this._datetime = setInterval(this._renderDateTimeTimezone.bind(this), interval); return this._super.apply(this, arguments); }, /** diff --git a/addons/web/static/src/js/views/kanban/kanban_column.js b/addons/web/static/src/js/views/kanban/kanban_column.js index 038e7f53d30..e66601816c2 100644 --- a/addons/web/static/src/js/views/kanban/kanban_column.js +++ b/addons/web/static/src/js/views/kanban/kanban_column.js @@ -102,7 +102,7 @@ var KanbanColumn = Widget.extend({ // should find a way to use the touch events to make sortable work. this.$el.sortable({ connectWith: '.o_kanban_group', - containment: this.draggable ? '.o_kanban_view' : 'parent', + containment: this.draggable ? false : 'parent', revert: 0, delay: 0, items: '> .o_kanban_record:not(.o_updating)', diff --git a/addons/web/static/src/less/webclient.less b/addons/web/static/src/less/webclient.less index 1ad894de3de..af76b82faba 100644 --- a/addons/web/static/src/less/webclient.less +++ b/addons/web/static/src/less/webclient.less @@ -80,39 +80,37 @@ div.o_boolean_toggle { width: 32px !important; height: 18px; - & > label { - & > input { + > input { display: none; } - & > .slider { + .slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #a0a0a0; + border-radius: 24px; + + &:before { position: absolute; - cursor: pointer; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: #a0a0a0; - border-radius: 24px; - - &:before { - position: absolute; - content: ""; - height: 12px; - width: 12px; - left: 3px; - bottom: 3px; - background-color: white; - border-radius: 50%; - } + content: ""; + height: 12px; + width: 12px; + left: 3px; + bottom: 3px; + background-color: white; + border-radius: 50%; } + } - & > input:checked + .slider { - background-color: @odoo-brand-optional; + > input:checked + .slider { + background-color: @odoo-brand-optional; - &:before { - .translate(14px; 0px); - } + &:before { + .translate(14px; 0px); } } } diff --git a/addons/web/static/tests/fields/basic_fields_tests.js b/addons/web/static/tests/fields/basic_fields_tests.js index 44f00d1d7f9..8488076b3f0 100644 --- a/addons/web/static/tests/fields/basic_fields_tests.js +++ b/addons/web/static/tests/fields/basic_fields_tests.js @@ -1111,7 +1111,7 @@ QUnit.module('basic_fields', { QUnit.module('UrlWidget'); QUnit.test('url widget in form view', function (assert) { - assert.expect(8); + assert.expect(9); var form = createView({ View: FormView, @@ -1131,6 +1131,8 @@ QUnit.module('basic_fields', { "should have a anchor with correct classes"); assert.strictEqual(form.$('a.o_form_uri.o_field_widget.o_text_overflow').attr('href'), 'yop', "should have proper href link"); + assert.strictEqual(form.$('a.o_form_uri.o_field_widget.o_text_overflow').attr('target'), '_blank', + "should have target attribute set to _blank"); assert.strictEqual(form.$('a.o_form_uri.o_field_widget.o_text_overflow').text(), 'yop', "the value should be displayed properly"); diff --git a/addons/web/static/tests/fields/relational_fields_tests.js b/addons/web/static/tests/fields/relational_fields_tests.js index b30f70757e0..beb47c2a22d 100644 --- a/addons/web/static/tests/fields/relational_fields_tests.js +++ b/addons/web/static/tests/fields/relational_fields_tests.js @@ -1321,6 +1321,93 @@ QUnit.module('relational_fields', { form.destroy(); }); + QUnit.test('X2Many sequence list in modal', function (assert) { + assert.expect(5); + + this.data.partner.fields.sequence = {string: 'Sequence', type: 'integer'}; + this.data.partner.records[0].sequence = 1; + this.data.partner.records[1].sequence = 2; + this.data.partner.onchanges = { + sequence: function (obj) { + if (obj.id === 2) { + obj.sequence = 1; + assert.step('onchange sequence'); + } + }, + }; + + this.data.product.fields.turtle_ids = {string: 'Turtles', type: 'one2many', relation: 'turtle'}; + this.data.product.records[0].turtle_ids = [1]; + + this.data.turtle.fields.partner_types_ids = {string: "Partner", type: "one2many", relation: 'partner'}; + this.data.turtle.fields.type_id = {string: "Partner Type", type: "many2one", relation: 'partner_type'}; + + this.data.partner_type.fields.partner_ids = {string: "Partner", type: "one2many", relation: 'partner'}; + this.data.partner_type.records[0].partner_ids = [1,2]; + + testUtils.createAsyncView({ + View: FormView, + model: 'product', + data: this.data, + arch: '<form>' + + '<field name="name"/>' + + '<field name="turtle_ids" widget="one2many_list">' + + '<tree string="Turtles" editable="bottom">' + + '<field name="type_id"/>' + + '</tree>' + + '</field>' + + '</form>', + archs: { + 'partner_type,false,form': '<form><field name="partner_ids"/></form>', + 'partner,false,list': '<tree string="Vendors">' + + '<field name="display_name"/>' + + '<field name="sequence" widget="handle"/>' + + '</tree>', + }, + res_id: 37, + mockRPC: function (route, args) { + if (route === '/web/dataset/call_kw/product/read') { + return $.when([{id: 37, name: 'xphone', display_name: 'leonardo', turtle_ids: [1]}]); + } + if (route === '/web/dataset/call_kw/turtle/read') { + return $.when([{id: 1, type_id: [12, 'gold']}]); + } + if (route === '/web/dataset/call_kw/partner_type/get_formview_id') { + return $.when(false) + } + if (route === '/web/dataset/call_kw/partner_type/read') { + return $.when([{id: 12, partner_ids: [1,2], display_name: 'gold'}]) + } + if (route === '/web/dataset/call_kw/partner_type/write') { + assert.step('partner_type write'); + } + return this._super.apply(this, arguments); + }, + }).then(function(form) { + form.$buttons.find('.o_form_button_edit').click(); + form.$('.o_data_cell').click(); + form.$('.o_external_button').click(); + + var $modal = $('.modal-dialog'); + assert.equal($modal.length, 1, + 'There should be 1 modal opened'); + + var $handles = $modal.find('.ui-sortable-handle'); + assert.equal($handles.length, 2, + 'There should be 2 sequence handlers'); + + testUtils.dragAndDrop($handles.eq(1), $modal.find('tbody tr').first()); + + // Saving the modal and then the original model + $modal.find('.modal-footer .btn-primary').click(); + form.$buttons.find('.o_form_button_save').click(); + + assert.verifySteps(['onchange sequence', 'partner_type write']); + + form.destroy(); + }); + }); + QUnit.test('autocompletion in a many2one, in form view with a domain', function (assert) { assert.expect(1); diff --git a/addons/web_diagram/i18n/zh_CN.po b/addons/web_diagram/i18n/zh_CN.po index b2597d443c0..ad0af717861 100644 --- a/addons/web_diagram/i18n/zh_CN.po +++ b/addons/web_diagram/i18n/zh_CN.po @@ -3,15 +3,16 @@ # * web_diagram # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2017 -# Martin Trigaux <mat@odoo.com>, 2017 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 +# Martin Trigaux, 2016 +# 山西清水欧度(QQ:54773801) <54773801@qq.com>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server 10.saas~18\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-09-20 09:54+0000\n" "PO-Revision-Date: 2017-09-20 09:54+0000\n" -"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n" +"Last-Translator: 山西清水欧度(QQ:54773801) <54773801@qq.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" @@ -34,14 +35,14 @@ msgstr "活动" msgid "" "Are you sure you want to remove this node ? This will remove its connected " "transitions as well." -msgstr "" +msgstr "你确定要删除这个节点? 这也将删除其连接的转换。" #. module: web_diagram #. openerp-web #: code:addons/web_diagram/static/src/js/diagram_controller.js:172 #, python-format msgid "Are you sure you want to remove this transition?" -msgstr "" +msgstr "你确定要删除这个转换吗?" #. module: web_diagram #. openerp-web @@ -71,7 +72,7 @@ msgstr "新建节点" #: code:addons/web_diagram/static/src/js/diagram_controller.js:160 #, python-format msgid "Open:" -msgstr "" +msgstr "打开" #. module: web_diagram #. openerp-web diff --git a/addons/web_editor/i18n/zh_CN.po b/addons/web_editor/i18n/zh_CN.po index fd2945a38c5..900425d9274 100644 --- a/addons/web_editor/i18n/zh_CN.po +++ b/addons/web_editor/i18n/zh_CN.po @@ -3,25 +3,26 @@ # * web_editor # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2016 -# fausthuang <faust_huang@hotmail.com>, 2016 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 +# fausthuang, 2016 # Xia Fajin <xia.fajin@elico-corp.com>, 2016 # Xu Lei <xulei8@qq.com>, 2016 # Talway <9010446@qq.com>, 2016 -# Martin Trigaux <mat@odoo.com>, 2016 +# Martin Trigaux, 2016 # liAnGjiA <liangjia@qq.com>, 2016 # SHOM <shanmuxin@yeah.net>, 2016 # mrshelly <mrshelly@hotmail.com>, 2016 # Gary Wei <Gary.wei@elico-corp.com>, 2016 # THL <wt39181819@gmail.com>, 2016 # waveyeung <waveyeung@qq.com>, 2016 +# 山西清水欧度(QQ:54773801) <54773801@qq.com>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server 10.saas~18\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-09-20 09:54+0000\n" "PO-Revision-Date: 2017-09-20 09:54+0000\n" -"Last-Translator: waveyeung <waveyeung@qq.com>, 2016\n" +"Last-Translator: 山西清水欧度(QQ:54773801) <54773801@qq.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" @@ -51,7 +52,7 @@ msgstr "25% 黑" #. module: web_editor #: model:ir.ui.view,arch_db:web_editor.colorpicker msgid "25% White" -msgstr "" +msgstr "25% 白" #. module: web_editor #: model:ir.ui.view,arch_db:web_editor.colorpicker @@ -85,14 +86,14 @@ msgstr "<i class=\"fa fa-th-large\"/> 首个面板" msgid "" "A server error occured. Please check you correctly signed in and that the " "file you are saving is well-formed." -msgstr "" +msgstr "服务器发生错误。 请检查您是否正确登录,并且保存的文件格式正确。" #. module: web_editor #. openerp-web #: code:addons/web_editor/static/src/xml/editor.xml:198 #, python-format msgid "Accepts" -msgstr "" +msgstr " 接受" #. module: web_editor #. openerp-web @@ -144,7 +145,7 @@ msgstr "居右" #. module: web_editor #: model:ir.ui.view,arch_db:web_editor.colorpicker msgid "Alpha" -msgstr "" +msgstr "Alpha" #. module: web_editor #. openerp-web @@ -158,7 +159,7 @@ msgstr "替代上传" #: code:addons/web_editor/static/src/xml/editor.xml:315 #, python-format msgid "Assign a focal point that will always be visible" -msgstr "" +msgstr "指定一个总是可见的焦点" #. module: web_editor #: model:ir.model.fields,field_description:web_editor.field_ir_attachment_local_url @@ -232,7 +233,7 @@ msgstr "背景宽度" #. module: web_editor #: model:ir.ui.view,arch_db:web_editor.colorpicker msgid "Beta" -msgstr "" +msgstr "Beta" #. module: web_editor #: model:ir.ui.view,arch_db:web_editor.colorpicker @@ -258,7 +259,7 @@ msgstr "加粗" #: code:addons/web_editor/static/src/js/widgets/ace.js:827 #, python-format msgid "Careful !" -msgstr "" +msgstr "小心!" #. module: web_editor #. openerp-web @@ -337,7 +338,7 @@ msgstr "待翻译的内容" #: code:addons/web_editor/static/src/xml/editor.xml:194 #, python-format msgid "Copy-paste your URL or embed code here" -msgstr "" +msgstr "复制粘贴您的URL或在这里嵌入代码" #. module: web_editor #. openerp-web @@ -375,7 +376,7 @@ msgstr "定制" #: code:addons/web_editor/static/src/xml/editor.xml:198 #, python-format msgid "Dailymotion" -msgstr "" +msgstr "Dailymotion" #. module: web_editor #: model:ir.ui.view,arch_db:web_editor.colorpicker @@ -394,7 +395,7 @@ msgstr "默认" #: code:addons/web_editor/static/src/xml/editor.xml:387 #, python-format msgid "Define if/how the background image will be repeated" -msgstr "" +msgstr "定义背景图像是否重复" #. module: web_editor #: model:ir.ui.view,arch_db:web_editor.colorpicker @@ -413,7 +414,7 @@ msgstr "说明" #: code:addons/web_editor/static/src/xml/editor.xml:34 #, python-format msgid "Description (alt tag)" -msgstr "" +msgstr "描述(ALT标签)" #. module: web_editor #. openerp-web @@ -483,14 +484,14 @@ msgstr "编辑" #. module: web_editor #: model:ir.ui.view,arch_db:web_editor.colorpicker msgid "Epsilon" -msgstr "" +msgstr "Epsilon" #. module: web_editor #. openerp-web #: code:addons/web_editor/static/src/js/widgets/ace.js:93 #, python-format msgid "Expected " -msgstr "" +msgstr "预期" #. module: web_editor #. openerp-web @@ -572,7 +573,7 @@ msgstr "全屏" #. module: web_editor #: model:ir.ui.view,arch_db:web_editor.colorpicker msgid "Gamma" -msgstr "" +msgstr "Gamma" #. module: web_editor #: model:ir.ui.view,arch_db:web_editor.colorpicker @@ -587,7 +588,7 @@ msgstr "深灰" #. module: web_editor #: model:ir.ui.view,arch_db:web_editor.colorpicker msgid "Gray Darker" -msgstr "" +msgstr "暗灰色" #. module: web_editor #: model:ir.ui.view,arch_db:web_editor.colorpicker @@ -597,7 +598,7 @@ msgstr "浅灰" #. module: web_editor #: model:ir.ui.view,arch_db:web_editor.colorpicker msgid "Gray Lighter" -msgstr "" +msgstr "亮灰色" #. module: web_editor #: model:ir.model,name:web_editor.model_ir_http @@ -665,35 +666,35 @@ msgstr "这是用来帮助你提高翻译效率的可视化工具:" #: code:addons/web_editor/static/src/xml/editor.xml:219 #, python-format msgid "Hide Dailymotion logo" -msgstr "" +msgstr "隐藏Dailymotion标志" #. module: web_editor #. openerp-web #: code:addons/web_editor/static/src/xml/editor.xml:216 #, python-format msgid "Hide Youtube logo" -msgstr "" +msgstr "隐藏Youtube标志" #. module: web_editor #. openerp-web #: code:addons/web_editor/static/src/xml/editor.xml:213 #, python-format msgid "Hide fullscreen button" -msgstr "" +msgstr "隐藏全屏按钮" #. module: web_editor #. openerp-web #: code:addons/web_editor/static/src/xml/editor.xml:210 #, python-format msgid "Hide player controls" -msgstr "" +msgstr "隐藏播放器控件" #. module: web_editor #. openerp-web #: code:addons/web_editor/static/src/xml/editor.xml:222 #, python-format msgid "Hide sharing button" -msgstr "" +msgstr "隐藏分享按钮" #. module: web_editor #. openerp-web @@ -714,7 +715,7 @@ msgstr "ID" msgid "" "If you discard the current edition, all unsaved changes will be lost. You " "can cancel to return to the edition mode." -msgstr "" +msgstr "如果放弃当前版本,则所有未保存的更改都将丢失。 您可以取消返回到编辑模式。" #. module: web_editor #. openerp-web @@ -723,7 +724,7 @@ msgstr "" msgid "" "If you reset this file, all your customizations will be lost as it will be " "reverted to the default file." -msgstr "" +msgstr "如果您重置此文件,所有您的自定义将丢失,因为它将被还原为默认文件。" #. module: web_editor #. openerp-web @@ -746,14 +747,14 @@ msgstr "图像网址" msgid "" "In this mode, you can only translate texts. To change the structure of the page, you must edit the master page.\n" " Each modification on the master page is automatically applied to all translated versions." -msgstr "" +msgstr "在这种模式下,您只能翻译文本。若要更改页的结构,必须编辑母版页。 母版页上的每一项修改都会自动应用于所有已翻译的版本。" #. module: web_editor #. openerp-web #: code:addons/web_editor/static/src/xml/ace.xml:23 #, python-format msgid "Include All LESS Files" -msgstr "" +msgstr "包括所有LESS文件" #. module: web_editor #. openerp-web @@ -807,7 +808,7 @@ msgstr "插入视频" #: code:addons/web_editor/static/src/xml/editor.xml:198 #, python-format msgid "Instagram" -msgstr "" +msgstr "Instagram" #. module: web_editor #. openerp-web @@ -842,7 +843,7 @@ msgstr "键盘快捷键" #: code:addons/web_editor/static/src/xml/ace.xml:11 #, python-format msgid "LESS (CSS)" -msgstr "" +msgstr "LESS (CSS)" #. module: web_editor #. openerp-web @@ -872,7 +873,7 @@ msgstr "最后更新时间" #: code:addons/web_editor/static/src/js/widgets/ace.js:360 #, python-format msgid "Less file: %s" -msgstr "" +msgstr "Less 文件: %s" #. module: web_editor #. openerp-web @@ -907,7 +908,7 @@ msgstr "链接到" #: code:addons/web_editor/static/src/xml/editor.xml:207 #, python-format msgid "Loop" -msgstr "" +msgstr "循环" #. module: web_editor #. openerp-web @@ -971,7 +972,7 @@ msgstr "确定" #: code:addons/web_editor/static/src/js/editor/translator.js:93 #, python-format msgid "Ok, never show me this again" -msgstr "" +msgstr "好了, 别再给我看这个" #. module: web_editor #. openerp-web @@ -1043,7 +1044,7 @@ msgstr "预览" #: code:addons/web_editor/static/src/xml/editor.xml:57 #, python-format msgid "Previous" -msgstr "" +msgstr "以前" #. module: web_editor #: model:ir.ui.view,arch_db:web_editor.colorpicker @@ -1154,7 +1155,7 @@ msgstr "设置为默认" #: code:addons/web_editor/static/src/js/widgets/ace.js:485 #, python-format msgid "Reseting views is not supported yet" -msgstr "" +msgstr "不支持重置视图" #. module: web_editor #. openerp-web @@ -1212,7 +1213,7 @@ msgstr "搜索联系人" #: code:addons/web_editor/static/src/xml/snippets.xml:17 #, python-format msgid "Select Parent Container" -msgstr "" +msgstr "选择父容器" #. module: web_editor #. openerp-web @@ -1240,14 +1241,14 @@ msgstr "从文件中选择" #: code:addons/web_editor/static/src/js/widgets/ace.js:567 #, python-format msgid "Server error" -msgstr "" +msgstr "服务器错误" #. module: web_editor #. openerp-web #: code:addons/web_editor/static/src/xml/editor.xml:365 #, python-format msgid "Set the starting position of the background image." -msgstr "" +msgstr "设置背景图像的起始位置。" #. module: web_editor #. openerp-web @@ -1263,7 +1264,7 @@ msgstr "设置透明" msgid "" "Sets the width and height of the background image in percent of the parent " "element." -msgstr "" +msgstr "设置背景图像的宽度和高度,以父元素的百分比表示。" #. module: web_editor #. openerp-web @@ -1371,21 +1372,21 @@ msgstr "" #: code:addons/web_editor/static/src/js/widgets/widgets.js:871 #, python-format msgid "The provided url does not reference any supported video" -msgstr "" +msgstr "提供的网址不存在任何支持的视频" #. module: web_editor #. openerp-web #: code:addons/web_editor/static/src/js/widgets/widgets.js:865 #, python-format msgid "The provided url is not valid" -msgstr "" +msgstr "提供的网址无效" #. module: web_editor #. openerp-web #: code:addons/web_editor/static/src/js/editor/rte.summernote.js:53 #, python-format msgid "Theme colors" -msgstr "" +msgstr "主题颜色" #. module: web_editor #. openerp-web @@ -1428,7 +1429,7 @@ msgstr "已翻译的内容" #: code:addons/web_editor/static/src/js/editor/translator.js:91 #, python-format msgid "Translation Info" -msgstr "" +msgstr "翻译信息" #. module: web_editor #. openerp-web @@ -1443,7 +1444,7 @@ msgstr "透明" #: code:addons/web_editor/static/src/xml/editor.xml:248 #, python-format msgid "URL or Email" -msgstr "" +msgstr "网址或电子邮件" #. module: web_editor #. openerp-web @@ -1464,7 +1465,7 @@ msgstr "取消" #: code:addons/web_editor/static/src/js/widgets/ace.js:86 #, python-format msgid "Unexpected " -msgstr "" +msgstr "意外" #. module: web_editor #. openerp-web @@ -1535,21 +1536,21 @@ msgstr "视频网址?" #: code:addons/web_editor/static/src/xml/editor.xml:193 #, python-format msgid "Video code" -msgstr "" +msgstr "视频代码" #. module: web_editor #. openerp-web #: code:addons/web_editor/static/src/xml/editor.xml:198 #, python-format msgid "Vimeo" -msgstr "" +msgstr "Vimeo" #. module: web_editor #. openerp-web #: code:addons/web_editor/static/src/xml/editor.xml:198 #, python-format msgid "Vine.co" -msgstr "" +msgstr "Vine.co" #. module: web_editor #: model:ir.ui.view,arch_db:web_editor.colorpicker @@ -1567,7 +1568,7 @@ msgstr "白" #: code:addons/web_editor/static/src/xml/ace.xml:10 #, python-format msgid "XML (HTML)" -msgstr "" +msgstr "XML (HTML)" #. module: web_editor #. openerp-web @@ -1588,14 +1589,14 @@ msgstr "你将进入翻译模式。" #: code:addons/web_editor/static/src/xml/editor.xml:198 #, python-format msgid "Youku" -msgstr "" +msgstr "Youku" #. module: web_editor #. openerp-web #: code:addons/web_editor/static/src/xml/editor.xml:198 #, python-format msgid "Youtube" -msgstr "" +msgstr "Youtube" #. module: web_editor #. openerp-web @@ -1619,7 +1620,7 @@ msgstr "自动" #: code:addons/web_editor/static/src/xml/editor.xml:113 #, python-format msgid "https://www.odoo.com/logo.png" -msgstr "" +msgstr "https://www.odoo.com/logo.png" #. module: web_editor #: model:ir.model,name:web_editor.model_ir_attachment @@ -1721,7 +1722,7 @@ msgstr "ir.ui.view" #: code:addons/web_editor/static/src/xml/editor.xml:198 #, python-format msgid "videos" -msgstr "" +msgstr "视频" #. module: web_editor #: model:ir.model,name:web_editor.model_web_editor_converter_test diff --git a/addons/web_editor/static/src/js/backend/fields.js b/addons/web_editor/static/src/js/backend/fields.js index cbdb6cbb88b..b84fcd21c91 100644 --- a/addons/web_editor/static/src/js/backend/fields.js +++ b/addons/web_editor/static/src/js/backend/fields.js @@ -409,7 +409,19 @@ var FieldTextHtml = AbstractField.extend({ var layoutInfo = self.editor.rte.editable().data('layoutInfo'); $.summernote.pluginEvents.codeview(undefined, undefined, layoutInfo, false); } + var $ancestors = self.$iframe.filter(':not(:visible)').parentsUntil(':visible').addBack(); + var ancestorsStyle = []; + // temporarily force displaying iframe (needed for firefox) + _.each($ancestors, function (el) { + var $el = $(el); + ancestorsStyle.unshift($el.attr('style') || null); + $el.css({display: 'initial', visibility: 'hidden', height: 1}); + }); self.editor.snippetsMenu && self.editor.snippetsMenu.cleanForSave(); + _.each($ancestors, function (el) { + var $el = $(el); + $el.attr('style', ancestorsStyle.pop()); + }); self._setValue(self.$content.html()); }); }, diff --git a/addons/web_editor/static/src/js/editor/rte.js b/addons/web_editor/static/src/js/editor/rte.js index b23975f002f..7ad20c0e614 100644 --- a/addons/web_editor/static/src/js/editor/rte.js +++ b/addons/web_editor/static/src/js/editor/rte.js @@ -281,8 +281,10 @@ var RTEWidget = Widget.extend({ .each(function () { var $node = $(this); + // fallback for firefox iframe display:none see https://github.com/odoo/odoo/pull/22610 + var computedStyles = window.getComputedStyle(this) || window.parent.getComputedStyle(this); // add class to display inline-block for empty t-field - if (window.getComputedStyle(this).display === 'inline' && $node.data('oe-type') !== 'image') { + if (computedStyles.display === 'inline' && $node.data('oe-type') !== 'image') { $node.addClass('o_is_inline_editable'); } }); @@ -651,26 +653,16 @@ var RTEWidget = Widget.extend({ self.historyRecordUndo($target, 'activate', true); }); - // To Fix Google Chrome Tripleclick Issue, which selects the ending - // whitespace characters (so Tripleclicking then typing text will remove - // the whole paragraph instead of its content). - // http://stackoverflow.com/questions/38467334/why-does-google-chrome-always-add-space-after-selected-text - if ($.browser.chrome === true && ev.originalEvent.detail === 3) { - var currentSelection = range.create(); - if (currentSelection.sc.parentNode === currentSelection.ec) { - _selectSC(currentSelection); - } else if (currentSelection.eo === 0) { - var $hasNext = $(currentSelection.sc).parent(); - while (!$hasNext.next().length && !$hasNext.is('body')) { - $hasNext = $hasNext.parent(); - } - if ($hasNext.next()[0] === currentSelection.ec) { - _selectSC(currentSelection); - } - } - } - function _selectSC(selection) { - range.create(selection.sc, selection.so, selection.sc, selection.sc.length).select(); + // Browsers select different content from one to another after a + // triple click (especially: if triple-clicking on a paragraph on + // Chrome, blank characters of the element following the paragraph are + // selected too) + // + // The triple click behavior is reimplemented for all browsers here + if (ev.originalEvent.detail === 3) { + // Select the whole content inside the deepest DOM element that was + // triple-clicked + range.create(ev.target, 0, ev.target, ev.target.childNodes.length).select(); } }, }); diff --git a/addons/web_editor/static/src/js/editor/rte.summernote.js b/addons/web_editor/static/src/js/editor/rte.summernote.js index 60431b86e57..d2613f42635 100644 --- a/addons/web_editor/static/src/js/editor/rte.summernote.js +++ b/addons/web_editor/static/src/js/editor/rte.summernote.js @@ -421,6 +421,9 @@ dom.isImg = function (node) { }; var fn_is_forbidden_node = dom.isForbiddenNode || function () {}; dom.isForbiddenNode = function (node) { + if (node.tagName === "BR") { + return false; + } return fn_is_forbidden_node(node) || $(node).is(".media_iframe_video"); }; var fn_is_img_font = dom.isImgFont || function () {}; diff --git a/addons/web_editor/static/src/js/editor/summernote.js b/addons/web_editor/static/src/js/editor/summernote.js index 8ce2ed692da..59609eab8a5 100644 --- a/addons/web_editor/static/src/js/editor/summernote.js +++ b/addons/web_editor/static/src/js/editor/summernote.js @@ -694,10 +694,16 @@ dom.isRemovableEmptyNode = function (node) { dom.isForbiddenNode = function (node) { return node.tagName === "BR" || $(node).is(".fa, img"); }; -dom.listBetween = function (sc, ec) { +/** + * @todo 'so' and 'eo' were added as a bugfix and are not given everytime. They + * however should be as the function may be wrong without them (for example, + * when asking the list between an element and its parent, as there is no path + * from the beginning of the former to the beginning of the later). + */ +dom.listBetween = function (sc, ec, so, eo) { var nodes = []; var ancestor = dom.commonAncestor(sc, ec); - dom.walkPoint({'node': sc, 'offset': 0}, {'node': ec, 'offset': 0}, function (point) { + dom.walkPoint({'node': sc, 'offset': so || 0}, {'node': ec, 'offset': eo || 0}, function (point) { if (ancestor !== point.node || ancestor === sc || ancestor === ec) { nodes.push(point.node); } @@ -1869,7 +1875,7 @@ $.summernote.pluginEvents.formatBlock = function (event, editor, layoutInfo, sTa } // fix by odoo because if you select a style in a li with no p tag all the ul is wrapped by the style tag - var nodes = dom.listBetween(r.sc, r.ec); + var nodes = dom.listBetween(r.sc, r.ec, r.so, r.eo); for (var i=0; i<nodes.length; i++) { if (dom.isBR(nodes[i]) || (dom.isText(nodes[i]) && dom.isVisibleText(nodes[i])) || dom.isB(nodes[i]) || dom.isU(nodes[i]) || dom.isS(nodes[i]) || dom.isI(nodes[i]) || dom.isFont(nodes[i])) { var ancestor = dom.ancestor(nodes[i], isFormatNode); @@ -1984,6 +1990,14 @@ eventHandler.modules.editor.currentStyle = function (target) { if (r) styleInfo.image = r.isOnImg(); } + // Fix when the target is a link: the text-align buttons state should + // indicate the alignment of the link in the parent, not the text inside + // the link (which is not possible to customize with summernote). Summernote fixed + // this in their newest version... by just not showing the active button + // for alignments. + if (styleInfo.anchor) { + styleInfo['text-align'] = $(styleInfo.anchor).parent().css('text-align'); + } return styleInfo; }; diff --git a/addons/web_editor/static/src/js/widgets/ace.js b/addons/web_editor/static/src/js/widgets/ace.js index 80bb28a4c01..6c28c1e2332 100644 --- a/addons/web_editor/static/src/js/widgets/ace.js +++ b/addons/web_editor/static/src/js/widgets/ace.js @@ -742,7 +742,7 @@ var ViewEditor = Widget.extend({ var text = data.text || ''; if (!isSelected) { - text = Array($elem.data('level')).join('-') + ' ' + text; + text = Array($elem.data('level') + 1).join('-') + ' ' + text; } var $div = $('<div/>', { text: text, diff --git a/addons/web_editor/static/tests/web_editor_tests.js b/addons/web_editor/static/tests/web_editor_tests.js index 3f46edde64c..2ea6078c44b 100644 --- a/addons/web_editor/static/tests/web_editor_tests.js +++ b/addons/web_editor/static/tests/web_editor_tests.js @@ -136,12 +136,12 @@ QUnit.test('field html_frame widget', function (assert) { model: 'mass.mailing', data: this.data, arch: '<form string="Partners">' + - '<field name="body" widget="html_frame" options="{\'editor_url\': \'/test\'}"/>' + + '<field name="body" widget="html_frame" options="{\'editor_url\': \'/logo\'}"/>' + '</form>', res_id: 1, session: {user_context: {lang: "en_us"}}, mockRPC: function (route) { - if (_.str.startsWith(route, '/test')) { + if (_.str.startsWith(route, '/logo')) { // those tests will be executed twice, once in readonly and once in edit assert.ok(route.search('model=mass.mailing') > 0, "the route should specify the correct model"); @@ -200,7 +200,7 @@ QUnit.test('html_frame does not crash when saving in readonly', function (assert data: this.data, arch: '<form string="Partners">' + '<sheet>' + - '<field name="body" widget="html_frame" options="{\'editor_url\': \'/test\'}"/>' + + '<field name="body" widget="html_frame" options="{\'editor_url\': \'/logo\'}"/>' + '</sheet>' + '</form>', res_id: 1, @@ -208,7 +208,7 @@ QUnit.test('html_frame does not crash when saving in readonly', function (assert if (args.method) { assert.step(args.method); } - if (_.str.startsWith(route, '/test')) { + if (_.str.startsWith(route, '/logo')) { // manually call the callback to simulate that the iframe has // been loaded (note: just the content, not the editor) window.odoo[$.deparam(route).callback + '_content'].call(); @@ -237,7 +237,7 @@ QUnit.test('html_frame does not crash when saving in edit mode (editor not loade arch: '<form string="Partners">' + '<sheet>' + '<field name="display_name"/>' + - '<field name="body" widget="html_frame" options="{\'editor_url\': \'/test\'}"/>' + + '<field name="body" widget="html_frame" options="{\'editor_url\': \'/logo\'}"/>' + '</sheet>' + '</form>', res_id: 1, @@ -245,7 +245,7 @@ QUnit.test('html_frame does not crash when saving in edit mode (editor not loade if (args.method) { assert.step(args.method); } - if (_.str.startsWith(route, '/test')) { + if (_.str.startsWith(route, '/logo')) { // manually call the callback to simulate that the iframe has // been partially loaded (just the content, not the editor) window.odoo[$.deparam(route).callback + '_content'](); @@ -279,7 +279,7 @@ QUnit.test('html_frame saving in edit mode (editor and content fully loaded)', f arch: '<form string="Partners">' + '<sheet>' + '<field name="display_name"/>' + - '<field name="body" widget="html_frame" options="{\'editor_url\': \'/test\'}"/>' + + '<field name="body" widget="html_frame" options="{\'editor_url\': \'/logo\'}"/>' + '</sheet>' + '</form>', res_id: 1, @@ -290,7 +290,7 @@ QUnit.test('html_frame saving in edit mode (editor and content fully loaded)', f writeDeferred.resolve(); } } - if (_.str.startsWith(route, '/test')) { + if (_.str.startsWith(route, '/logo')) { // manually call the callback to simulate that the iframe has // been fully loaded (content + editor) var callback = $.deparam(route).callback; diff --git a/addons/website/i18n/zh_CN.po b/addons/website/i18n/zh_CN.po index fdc5be757f0..ccc60056af5 100644 --- a/addons/website/i18n/zh_CN.po +++ b/addons/website/i18n/zh_CN.po @@ -6,9 +6,9 @@ # Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 # Talway <9010446@qq.com>, 2016 # niulin lnc. <admin@niulin.net>, 2016 -# fausthuang <faust_huang@hotmail.com>, 2016 +# fausthuang, 2016 # waveyeung <waveyeung@qq.com>, 2016 -# Martin Trigaux <mat@odoo.com>, 2016 +# Martin Trigaux, 2016 # Maie <m@maie.name>, 2016 # 菜小蛇 <lttlsnk@gmail.com>, 2016 # xiaobin wu <bd5dml@gmail.com>, 2016 @@ -21,7 +21,7 @@ # Wei "oldrev" Li <liwei@sandwych.com>, 2016 # SHOM <shanmuxin@yeah.net>, 2016 # 苏州远鼎 <tiexinliu@126.com>, 2016 -# Bo Cao <cao.poobo@hotmail.com>, 2017 +# Bo Cao, 2017 # Liping Wang <lynn.config@gmail.com>, 2017 # Jeff Yu - Elico Corp <jeff.yu@elico-corp.com>, 2017 # 老窦 北京 <2662059195@qq.com>, 2017 @@ -111,6 +111,8 @@ msgid "" ",\n" " the #1" msgstr "" +",\n" +"此 #1" #. module: website #: model:ir.ui.view,arch_db:website.show_website_info @@ -143,7 +145,7 @@ msgstr "" #. module: website #: model:ir.ui.view,arch_db:website.default_csv msgid "1,2,3" -msgstr "" +msgstr "1,2,3" #. module: website #: model:ir.ui.view,arch_db:website.snippet_options @@ -286,7 +288,7 @@ msgstr "<i class=\"fa fa-clock-o\"/>幻灯片播放速度" #. module: website #: model:ir.ui.view,arch_db:website.snippets msgid "<i class=\"fa fa-diamond\"/> Feature" -msgstr "" +msgstr "特征" #. module: website #: model:ir.ui.view,arch_db:website.snippet_options diff --git a/addons/website/models/ir_http.py b/addons/website/models/ir_http.py index 84813d7eca5..c87d7226893 100644 --- a/addons/website/models/ir_http.py +++ b/addons/website/models/ir_http.py @@ -124,12 +124,6 @@ class Http(models.AbstractModel): return False @classmethod - def _serve_404(cls): - req_page = request.httprequest.path - page404 = 'website.%s' % (request.website.is_publisher() and 'page_404' or '404') - return request.render(page404, {'path': req_page[1:]}) - - @classmethod def _serve_redirect(cls): req_page = request.httprequest.path domain = [ @@ -153,7 +147,7 @@ class Http(models.AbstractModel): if redirect: return request.redirect(redirect.url_to, code=redirect.type) - return cls._serve_404() + return False @classmethod def _handle_exception(cls, exception): @@ -212,11 +206,16 @@ class Http(models.AbstractModel): status_code=code, ) + view_id = code + if request.website.is_publisher() and isinstance(exception, werkzeug.exceptions.NotFound): + view_id = 'page_404' + values['path'] = request.httprequest.path[1:] + if not request.uid: cls._auth_method_public() try: - html = request.env['ir.ui.view'].render_template('website.%s' % code, values) + html = request.env['ir.ui.view'].render_template('website.%s' % view_id, values) except Exception: html = request.env['ir.ui.view'].render_template('website.http_error', values) return werkzeug.wrappers.Response(html, status=code, content_type='text/html;charset=utf-8') diff --git a/addons/website_blog/i18n/zh_CN.po b/addons/website_blog/i18n/zh_CN.po index cce05abcd7c..9bb211d3142 100644 --- a/addons/website_blog/i18n/zh_CN.po +++ b/addons/website_blog/i18n/zh_CN.po @@ -3,10 +3,10 @@ # * website_blog # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2016 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 # liAnGjiA <liangjia@qq.com>, 2016 -# Martin Trigaux <mat@odoo.com>, 2016 -# fausthuang <faust_huang@hotmail.com>, 2016 +# Martin Trigaux, 2016 +# fausthuang, 2016 # Talway <9010446@qq.com>, 2016 # Eddie Lim <bhweelim@yahoo.com>, 2016 # waveyeung <waveyeung@qq.com>, 2016 @@ -16,13 +16,14 @@ # n37r06u3 <n37r06u3@gmail.com>, 2016 # 苏州远鼎 <tiexinliu@126.com>, 2016 # THL <wt39181819@gmail.com>, 2017 +# 老窦 北京 <2662059195@qq.com>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-10-24 09:00+0000\n" "PO-Revision-Date: 2017-10-24 09:00+0000\n" -"Last-Translator: THL <wt39181819@gmail.com>, 2017\n" +"Last-Translator: 老窦 北京 <2662059195@qq.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" @@ -725,7 +726,7 @@ msgstr "发布选项" #. module: website_blog #: model:ir.model.fields,field_description:website_blog.field_blog_post_post_date msgid "Publishing date" -msgstr "" +msgstr "发布日期" #. module: website_blog #: model:ir.ui.view,arch_db:website_blog.website_blog diff --git a/addons/website_blog/models/website_blog.py b/addons/website_blog/models/website_blog.py index 25d7d363ef8..ade0212e0da 100644 --- a/addons/website_blog/models/website_blog.py +++ b/addons/website_blog/models/website_blog.py @@ -209,7 +209,7 @@ class BlogPost(models.Model): def write(self, vals): result = True for post in self: - copy_vals = vals + copy_vals = dict(vals) if 'website_published' in vals and 'published_date' not in vals and (post.published_date or '') <= fields.Datetime.now(): copy_vals['published_date'] = vals['website_published'] and fields.Datetime.now() or False result &= super(BlogPost, self).write(copy_vals) diff --git a/addons/website_sale/i18n/zh_CN.po b/addons/website_sale/i18n/zh_CN.po index b8f9801021b..469c140b95b 100644 --- a/addons/website_sale/i18n/zh_CN.po +++ b/addons/website_sale/i18n/zh_CN.po @@ -5,8 +5,8 @@ # Translators: # Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 # Talway <9010446@qq.com>, 2016 -# fausthuang <faust_huang@hotmail.com>, 2016 -# Martin Trigaux <mat@odoo.com>, 2016 +# fausthuang, 2016 +# Martin Trigaux, 2016 # waveyeung <waveyeung@qq.com>, 2016 # Luke <cialuo@qq.com>, 2016 # glovebx <ruinning@163.com>, 2016 @@ -49,12 +49,12 @@ msgstr "&nbsp;" #. module: website_sale #: model:ir.ui.view,arch_db:website_sale.cart_lines msgid "/shop/cart" -msgstr "" +msgstr "/shop/cart" #. module: website_sale #: model:ir.ui.view,arch_db:website_sale.payment msgid "/shop/payment" -msgstr "" +msgstr "/shop/payment" #. module: website_sale #: model:ir.ui.view,arch_db:website_sale.product @@ -595,7 +595,7 @@ msgstr "" #. module: website_sale #: model:ir.ui.view,arch_db:website_sale.cart msgid "Click here" -msgstr "" +msgstr "点击这里" #. module: website_sale #. openerp-web diff --git a/addons/website_sale/views/templates.xml b/addons/website_sale/views/templates.xml index 1a13577b0bb..ab59f8ffed9 100644 --- a/addons/website_sale/views/templates.xml +++ b/addons/website_sale/views/templates.xml @@ -420,8 +420,8 @@ <div id="o-carousel-product" class="carousel slide" data-ride="carousel" data-interval="0"> <div class="carousel-outer"> <div class="carousel-inner"> - <div class="item active" itemprop="image" t-field="product.image" t-options="{'widget': 'image', 'class': 'product_detail_img js_variant_img', 'alt-field': 'name', 'zoom': 'image', 'unique': product['__last_update']}"/> - <div t-if="variant_img" class="item" itemprop="image" t-field="product.product_variant_id.image" t-options="{'widget': 'image', 'class': 'product_detail_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.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" }'/> </t> @@ -440,11 +440,11 @@ </div> <ol class="carousel-indicators" t-if="len(image_ids) or variant_img"> - <li data-target="#o-carousel-product" data-slide-to="0" class="active"> - <img class="img img-responsive js_variant_img_small" t-attf-src="/website/image/product.template/{{product.id}}/image/90x90" t-att-alt="product.name"/> + <li t-if="variant_img" data-target="#o-carousel-product" data-slide-to="0" class="active"> + <img class="img img-responsive js_variant_img_small" t-attf-src="/website/image/product.product/{{product.product_variant_id.id}}/image/90x90" t-att-alt="product.name"/> </li> - <li t-if="variant_img" data-target="#o-carousel-product" data-slide-to="1" class=""> - <img class="img img-responsive" t-attf-src="/website/image/product.product/{{product.product_variant_id.id}}/image/90x90" t-att-alt="product.name"/> + <li data-target="#o-carousel-product" t-att-data-slide-to="1 if variant_img else 0" t-att-class="'' if variant_img else 'active'"> + <img class="img img-responsive" t-attf-src="/website/image/product.template/{{product.id}}/image/90x90" t-att-alt="product.name"/> </li> <t t-if="len(image_ids)" t-foreach="image_ids" t-as="pimg"> <li data-target="#o-carousel-product" t-att-data-slide-to="pimg_index + (variant_img and 2 or 1)"> @@ -521,7 +521,7 @@ <div t-field="alt_product.image_small" t-options="{'widget': 'image', 'class': 'img-rounded shadow o_alternative_product' }" /> <h5> <a t-attf-href="/shop/product/#{ slug(alt_product) }" style="display: block"> - <span t-att-title="alt_product.name" t-field="alt_product.name" style="display: block;" /> + <span t-att-title="alt_product.name" t-field="alt_product.name" class="o_text_overflow" style="display: block;" /> </a> </h5> </div> diff --git a/addons/website_sale_stock/i18n/zh_CN.po b/addons/website_sale_stock/i18n/zh_CN.po index 7866a70e980..ddcf0f2728b 100644 --- a/addons/website_sale_stock/i18n/zh_CN.po +++ b/addons/website_sale_stock/i18n/zh_CN.po @@ -3,7 +3,7 @@ # * website_sale_stock # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2016 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 # Gary Wei <Gary.wei@elico-corp.com>, 2016 # waveyeung <waveyeung@qq.com>, 2017 # liAnGjiA <liangjia@qq.com>, 2017 @@ -67,7 +67,7 @@ msgstr "<strong>交货单</strong>" #: model:ir.ui.view,arch_db:website_sale_stock.website_sale_stock_cart_lines #: model:ir.ui.view,arch_db:website_sale_stock.website_sale_stock_payment msgid "<strong>Warning!</strong>" -msgstr "" +msgstr "<strong>警告!</strong>" #. module: website_sale_stock #: model:ir.model.fields,help:website_sale_stock.field_product_product_inventory_availability diff --git a/addons/website_slides/i18n/zh_CN.po b/addons/website_slides/i18n/zh_CN.po index a824833b794..326c2dab723 100644 --- a/addons/website_slides/i18n/zh_CN.po +++ b/addons/website_slides/i18n/zh_CN.po @@ -3,12 +3,12 @@ # * website_slides # # Translators: -# Jeffery CHEN <jeffery9@gmail.com>, 2016 -# fausthuang <faust_huang@hotmail.com>, 2016 +# Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 +# fausthuang, 2016 # Siyuan Gu <siyuancn@hotmail.com>, 2016 # liAnGjiA <liangjia@qq.com>, 2016 # waveyeung <waveyeung@qq.com>, 2016 -# Martin Trigaux <mat@odoo.com>, 2016 +# Martin Trigaux, 2016 # Talway <9010446@qq.com>, 2016 # 菜小蛇 <lttlsnk@gmail.com>, 2016 # Wei "oldrev" Li <liwei@sandwych.com>, 2016 @@ -336,7 +336,7 @@ msgstr "" #. module: website_slides #: model:slide.tag,name:website_slides.tag1 msgid "CMS" -msgstr "" +msgstr "CMS" #. module: website_slides #: model:ir.model.fields,field_description:website_slides.field_slide_channel_can_see @@ -416,7 +416,7 @@ msgstr "频道" #. module: website_slides #: model:slide.slide,name:website_slides.slide_10 msgid "Company Culture" -msgstr "" +msgstr "企业文化" #. module: website_slides #: model:ir.model.fields,field_description:website_slides.field_slide_slide_datas diff --git a/doc/cla/corporate/vauxoo.md b/doc/cla/corporate/vauxoo.md index f250546a6ef..0d8c8b623e9 100644 --- a/doc/cla/corporate/vauxoo.md +++ b/doc/cla/corporate/vauxoo.md @@ -42,3 +42,4 @@ Edgar Rivero edgar@vauxoo.com https://github.com/egrivero Alexander Olivares alexander@vauxoo.com https://github.com/alxolivares Jose Manuel Robles josemanuel@vauxoo.com https://github.com/keylor2906 Erick Birbe erick@vauxoo.com https://github.com/ebirbe +Tomas Alvarez tomas@vauxoo.com https://github.com/tomeyro diff --git a/doc/cla/individual/kaberer.md b/doc/cla/individual/kaberer.md new file mode 100644 index 00000000000..e17852fe338 --- /dev/null +++ b/doc/cla/individual/kaberer.md @@ -0,0 +1,11 @@ +Switzerland, 2018-01-30 + +I hereby agree to the terms of the Odoo Individual Contributor License +Agreement v1.0. + +I declare that I am authorized and able to make this agreement and sign this +declaration. + +Signed, + +Kumar Aberer office@aberer-solutions.ch https://github.com/kaberer diff --git a/doc/cla/individual/moutio.md b/doc/cla/individual/moutio.md new file mode 100644 index 00000000000..4a1b5b4b955 --- /dev/null +++ b/doc/cla/individual/moutio.md @@ -0,0 +1,9 @@ +Spain, 2018-01-29 + +I hereby agree to the terms of the Odoo Individual Contributor License Agreement v1.0. + +I declare that I am authorized and able to make this agreement and sign this declaration. + +Signed, + +Nacho Muñoz nacmuro@gmail.com https://github.com/moutio diff --git a/doc/cla/individual/phucngta.md b/doc/cla/individual/phucngta.md new file mode 100644 index 00000000000..c53fe2b7136 --- /dev/null +++ b/doc/cla/individual/phucngta.md @@ -0,0 +1,11 @@ +Vietnam, 2018.01.17 + +I hereby agree to the terms of the Odoo Individual Contributor License +Agreement v1.0. + +I declare that I am authorized and able to make this agreement and sign this +declaration. + +Signed, + +Nguyen Phuc <phucngta@gmail.com> https://github.com/phucngta
\ No newline at end of file diff --git a/doc/reference/module.rst b/doc/reference/module.rst index aecb8de8a8f..9ec0ef39c93 100644 --- a/doc/reference/module.rst +++ b/doc/reference/module.rst @@ -1,5 +1,3 @@ -:banner: banners/module.jpg - ======= Modules ======= @@ -84,6 +82,49 @@ Available manifest fields are: to ``auto_install``. When both ``sale`` and ``crm`` are installed, it automatically adds CRM campaigns tracking to sale orders without either ``sale`` or ``crm`` being aware of one another +``external_dependencies`` (``dict(key=list(str))``) + A dictionary containing python and/or binary dependencies. + + For python dependencies, the ``python`` key must be defined for this + dictionary and a list of python modules to be imported should be assigned + to it. + + For binary dependencies, the ``bin`` key must be defined for this + dictionary and a list of binary executable names should be assigned to it. + + The module won't be installed if either the python module is not installed + in the host machine or the binary executable is not found within the + host machine's PATH environment variable. +``application`` (``bool``, default: ``False``) + Whether the module should be considered as a fully-fledged application + (``True``) or is just a technical module (``False``) that provides some + extra functionality to an existing application module. +``css`` (``list(str)``) + Specify css files with custom rules to be imported, these files should be + located in ``static/src/css`` inside the module. +``images`` (``list(str)``) + Specify image files to be used by the module. +``installable`` (``bool`` default: ``False``) + Whether a user should be able to install the module from the Web UI or not. +``maintainer`` (``str``) + Person or entity in charge of the maintenance of this module, by default + it is assumed that the author is the maintainer. +``{pre_init, post_init, uninstall}_hook`` (``str``) + Hooks for module installation/uninstallation, their value should be a + string representing the name of a function defined inside the module's + ``__init__.py``. + + ``pre_init_hook`` takes a cursor as its only argument, this function is + executed prior to the module's installation. + + ``post_init_hook`` takes a cursor and a registry as its arguments, this + function is executed right after the module's installation. + + ``uninstall_hook`` takes a cursor and a registry as its arguments, this + function is executed after the module's uninstallation. + + These hooks should only be used when setup/cleanup required for this module + is either extremely difficult or impossible through the api. .. _semantic versioning: http://semver.org .. _existing categories: diff --git a/doc/setup/deploy.rst b/doc/setup/deploy.rst index 0d7303a795a..b0a5cf3224e 100644 --- a/doc/setup/deploy.rst +++ b/doc/setup/deploy.rst @@ -44,7 +44,7 @@ correctly. Configuration samples --------------------- -* show only databases with names beginning with 'mycompany' +* Show only databases with names beginning with 'mycompany' in ``/etc/odoo.conf`` set: @@ -87,18 +87,18 @@ machine, and is the default when no host is provided, but if you want Odoo and PostgreSQL to execute on different machines [#different-machines]_ it will need to `listen to network interfaces`_ [#remote-socket]_, either: -* only accept loopback connections and `use an SSH tunnel`_ between the +* Only accept loopback connections and `use an SSH tunnel`_ between the machine on which Odoo runs and the one on which PostgreSQL runs, then configure Odoo to connect to its end of the tunnel -* accept connections to the machine on which Odoo is installed, possibly +* Accept connections to the machine on which Odoo is installed, possibly over ssl (see `PostgreSQL connection settings`_ for details), then configure Odoo to connect over the network Configuration sample -------------------- -* allow tcp connection on localhost -* allow tcp connection from 192.168.1.x network +* Allow tcp connection on localhost +* Allow tcp connection from 192.168.1.x network in ``/etc/postgresql/9.5/main/pg_hba.conf`` set: @@ -134,11 +134,11 @@ create a new user (``odoo``) and set it as the database user. simply checked before performing database alterations. It should be set to a randomly generated value to ensure third parties can not use this interface. -* all database operations use the :ref:`database options +* All database operations use the :ref:`database options <reference/cmdline/server/database>`, including the database management screen. For the database management screen to work requires that the PostgreSQL user have ``createdb`` right. -* users can always drop databases they own. For the database management screen +* Users can always drop databases they own. For the database management screen to be completely non-functional, the PostgreSQL user needs to be created with ``no-createdb`` and the database must be owned by a different PostgreSQL user. @@ -248,10 +248,10 @@ authentication information in cleartext. This means a secure deployment of Odoo must use HTTPS\ [#switching]_. SSL termination can be implemented via just about any SSL termination proxy, but requires the following setup: -* enable Odoo's :option:`proxy mode <odoo-bin --proxy-mode>`. This should only be enabled when Odoo is behind a reverse proxy -* set up the SSL termination proxy (`Nginx termination example`_) -* set up the proxying itself (`Nginx proxying example`_) -* your SSL termination proxy should also automatically redirect non-secure +* Enable Odoo's :option:`proxy mode <odoo-bin --proxy-mode>`. This should only be enabled when Odoo is behind a reverse proxy +* Set up the SSL termination proxy (`Nginx termination example`_) +* Set up the proxying itself (`Nginx proxying example`_) +* Your SSL termination proxy should also automatically redirect non-secure connections to the secure port .. warning:: @@ -263,8 +263,8 @@ just about any SSL termination proxy, but requires the following setup: Configuration sample -------------------- -* redirect http requests to https -* proxy requests to odoo +* Redirect http requests to https +* Proxy requests to odoo in ``/etc/odoo.conf`` set: @@ -349,10 +349,10 @@ Cron Workers To run cron jobs for an Odoo deployment as a WSGI application requires -* a classical Odoo (run via ``odoo-bin``) -* connected to the database in which cron jobs have to be run (via +* A classical Odoo (run via ``odoo-bin``) +* Connected to the database in which cron jobs have to be run (via :option:`odoo-bin -d`) -* which should not be exposed to the network. To ensure cron runners are not +* Which should not be exposed to the network. To ensure cron runners are not network-accessible, it is possible to disable the built-in HTTP server entirely with :option:`odoo-bin --no-http` or setting ``http_enable = False`` in the configuration file @@ -372,11 +372,11 @@ notifications. The solutions to support livechat/motifications in a WSGI application are: -* deploy a threaded version of Odoo (instread of a process-based preforking +* Deploy a threaded version of Odoo (instread of a process-based preforking one) and redirect only requests to URLs starting with ``/longpolling/`` to that Odoo, this is the simplest and the longpolling URL can double up as the cron instance. -* deploy an evented Odoo via ``odoo-gevent`` and proxy requests starting +* Deploy an evented Odoo via ``odoo-gevent`` and proxy requests starting with ``/longpolling/`` to :option:`the longpolling port <odoo-bin --longpolling-port>`. diff --git a/doc/webservices/localization.rst b/doc/webservices/localization.rst index 17559b2a01a..39e1c98181c 100644 --- a/doc/webservices/localization.rst +++ b/doc/webservices/localization.rst @@ -1,12 +1,13 @@ :banner: banners/localization.jpg -========================== -Making my Own Localization -========================== +======================= +Creating a Localization +======================= .. warning:: - This tutorial requires knowledges about how to build a module in Odoo. + This tutorial requires knowledges about how to build a module in Odoo (see + :doc:`../../howtos/backend`). Building a localization module ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/odoo/addons/base/i18n/nl.po b/odoo/addons/base/i18n/nl.po index 3aa03d4dd50..a1c5c87721e 100644 --- a/odoo/addons/base/i18n/nl.po +++ b/odoo/addons/base/i18n/nl.po @@ -7,7 +7,7 @@ # Erwin van der Ploeg <erwin@odooexperts.nl>, 2016 # Stephan Van Dyck <stephan.vandyck@vanroey.be>, 2016 # Eric Geens <ericgeens@yahoo.com>, 2016 -# Martin Trigaux <mat@odoo.com>, 2016 +# Martin Trigaux, 2016 # Cas Vissers <casvissers@brahoo.nl>, 2016 # Eric Geens <eric.geens@vitabiz.be>, 2016 # Pol Van Dingenen <pol.vandingenen@vanroey.be>, 2017 @@ -3173,6 +3173,23 @@ msgid "" " - Exception (Received and invoiced quantities differ)\n" " " msgstr "" +"\n" +"Beheer 3-way matching op leveranciersfacturen\n" +"=====================================\n" +"\n" +"In de maakindustrie ontvangen bedrijven vaak eerder de leveranciers factuur\n" +"voor het ontvangen van hun aankoop, maar willen de rekening niet betalen tot de goederen zijn bezorgd.\n" +"\n" +"De oplossing voor deze situatie is om de leveranciers factuur te maken wanneer u deze ontvangt (op basis van bestelde hoeveelheden), maar alleen te betalen als de ontvangen hoeveelheden (op de PO-regels) overeen komen met de hoeveelheden in de leveranciers factuur.\n" +"\n" +"Deze module introduceert een \"stel vrij voor betaling\" -mechanisme dat elke leverancier factuur markeert of het kan worden betaald of niet.\n" +"\n" +"Elke leveranciers factuur ontvangt een van de volgende drie statussen:\n" +"\n" +" - Ja (de factuur kan worden betaald)\n" +" - Nee (de factuur kan nog niet worden betaald, er is niets geleverd)\n" +" - Uitzondering (verschil tussen ontvangen en besteld)\n" +" " #. module: base #: model:ir.module.module,description:base.module_stock_dropshipping @@ -4721,6 +4738,12 @@ msgid "" "Categorize the lines per subscription template when an online quote contains subscription products.\n" " " msgstr "" +"\n" +"Abonnement integratie voor de online offertes\n" +"-------------------------------------------\n" +"\n" +"Categoriseer de regels per abonnementsjabloon wanneer een online offerte abonnementsproducten bevat.\n" +" " #. module: base #: model:ir.module.module,description:base.module_survey_crm @@ -5495,6 +5518,13 @@ msgid "" "of this module is to allow the display of a customer portal without having\n" "a dependency towards website edition and customization capabilities." msgstr "" +"\n" +"Deze module voegt de vereiste basiscode toe voor een volledig geïntegreerd klantenportaal. Het bevat de basiscontrollerklasse en basissjablonen. Zakelijke add-ons\n" +"zullen hun specifieke sjablonen en controllers toevoegen om de klantportaal uit te breiden.\n" +"\n" +"Deze module bevat voornamelijke code afkomstig van Odoo v10 website_portal. Doel\n" +"van deze module is om de weergave van een klantportaal zonder \n" +"afhankelijkheid van de mogelijkheden van de website editie en aanpas mogelijkheden." #. module: base #: model:ir.module.module,description:base.module_barcodes @@ -6220,6 +6250,17 @@ msgid "" "project.\n" " " msgstr "" +"\n" +"Transifex integratie\n" +"=====================\n" +"Deze module voegt een link toe aan het Transifex-project in de vertaalweergave.\n" +"Het doel van deze module is om vertalingen van de hoofdmodules te versnellen.\n" +"\n" +"Om te laten werken gebruikt Odoo Transifex-configuratiebestanden `.txt / config` om de\n" +"projectbron te detecteren. Aangepaste modules worden niet vertaald (sinds deze niet gepubliceerd zijn op het belangrijkste Transifex-project).\n" +"\n" +"De taal die de gebruiker probeert te vertalen moet op de Transifex geactiveerd zijn.\n" +" " #. module: base #: model:ir.module.module,description:base.module_l10n_tr @@ -11969,6 +12010,7 @@ msgstr "Functie" #: model:res.partner.industry,full_name:base.res_partner_industry_G msgid "G WHOLESALE AND RETAIL TRADE;REPAIR OF MOTOR VEHICLES AND MOTORCYCLES" msgstr "" +"G GROOT- EN DETAILHANDEL; REPARATIE VAN MOTORVOERTUIGEN EN MOTORFIETSEN" #. module: base #: selection:ir.module.module,license:0 @@ -14274,6 +14316,12 @@ msgid "" "\n" " * UPDATE ME\n" msgstr "" +"Account en betaling koppelen en portaalbetaling toevoegen\n" +"\n" +"Bieden hulpmiddelen voor account-gerelateerde betalingen evenals portaal-opties voor\n" +"betalingen.\n" +"\n" +" * WERK BIJ\n" #. module: base #: model:ir.module.module,summary:base.module_sale_payment @@ -14292,6 +14340,14 @@ msgid "" " * JS code to handle a payment form (eCommerce\n" " * add payment-related fields on SO\n" msgstr "" +"Verkoop en betaling koppelen\n" +"\n" +"Biedt hulpmiddelen voor verkoopgerelateerde betalingen\n" +"\n" +" * specifiek beheer van transacties zoals orderbevestiging\n" +" * tools methode om transacties af te handelen bij het toestaan om te betalen / verkopen\n" +" * JS-code om een betalingsformulier af te handelen (eCommerce\n" +" * voeg betalingsgerelateerde velden toe aan verkooporder\n" #. module: base #: model:ir.module.module,shortdesc:base.module_link_tracker @@ -22442,6 +22498,19 @@ msgid "" "them to marketing campaigns.\n" "\n" msgstr "" +"Uw contactformulier\n" +"-----------------\n" +"\n" +"### Integreer contactformulieren met uw leads\n" +"\n" +"Deze eenvoudige applicatie integreert een contactformulier op uw \"Contact\" -pagina.\n" +"Formulieren maken automatisch leads in Odoo CRM.\n" +"\n" +"Gemakkelijke contactpagina\n" +"-----------------\n" +"\n" +"Zorg dat uw leads automatisch worden ingevuld met de integratie van uw contactformulier. Deze toepassing biedt een betere kwalificatie van de lead die perfect is om te koppelen\n" +"aan marketingcampagnes.\n" #. module: base #: code:addons/base/models/ir_mail_server.py:224 diff --git a/odoo/addons/base/i18n/ru.po b/odoo/addons/base/i18n/ru.po index 60b36581b71..ab2abd6fbda 100644 --- a/odoo/addons/base/i18n/ru.po +++ b/odoo/addons/base/i18n/ru.po @@ -3,12 +3,12 @@ # * base # # Translators: -# Martin Trigaux <mat@odoo.com>, 2017 +# Martin Trigaux, 2017 # Sergey Vilizhanin <sv@grimmette.ru>, 2017 # Viktor Pogrebniak <vp@aifil.ru>, 2017 # Gennady Marchenko <gennadym@gmail.com>, 2017 # Максим Дронь <dronmax@gmail.com>, 2017 -# Эдуард Манятовский <manyatovskiy@gmail.com>, 2017 +# Collex100, 2017 # Denis Trepalin <zekarious@gmail.com>, 2017 # Alex Puchkov <ap@alteco.co>, 2017 # Mekan Bash <tmbashimov@gmail.com>, 2017 @@ -18,7 +18,7 @@ # KingOPl Slav <87slava13@gmail.com>, 2017 # Владимир Куряев <istercul@gmail.com>, 2017 # Evgeny Kemerov <sintezz777@gmail.com>, 2017 -# Andrey Skabelin <inactive+a.skabelin@transifex.com>, 2017 +# Andrey Skabelin, 2017 # Evgeny <transingularity@gmail.com>, 2017 # OstapYakovenko <Ostap.Yakovenko@gmail.com>, 2017 # Артур Чеботарь <artcha.chebotar@gmail.com>, 2017 @@ -27,13 +27,14 @@ # Андрей Гусев <gaussgss@gmail.com>, 2017 # Андрей Ландау <zaebokkunwow@gmail.com>, 2017 # Dmitry sky <d.v.selitsky@gmail.com>, 2017 +# Yuriy Ney <k_wizard@mail.ru>, 2018 msgid "" msgstr "" "Project-Id-Version: Odoo Server saas~11.1+e\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-13 14:47+0000\n" "PO-Revision-Date: 2017-12-13 14:47+0000\n" -"Last-Translator: Dmitry sky <d.v.selitsky@gmail.com>, 2017\n" +"Last-Translator: Yuriy Ney <k_wizard@mail.ru>, 2018\n" "Language-Team: Russian (https://www.transifex.com/odoo/teams/41243/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -6741,7 +6742,7 @@ msgstr "Добавить стоимость доставки к онлайн пÑ #. module: base #: model:ir.module.module,summary:base.module_transifex msgid "Add a link to edit a translation in Transifex" -msgstr "" +msgstr "Добавить ссылку для редактирования локализации в Transifex" #. module: base #: model:ir.module.module,summary:base.module_base_address_city @@ -6941,7 +6942,7 @@ msgstr "Администрирование" #. module: base #: model:res.partner.industry,name:base.res_partner_industry_N msgid "Administrative" -msgstr "" +msgstr "Административный" #. module: base #: model:ir.model.fields,help:base.field_res_country_state_name @@ -6990,12 +6991,12 @@ msgstr "Affero GPL-3" #. module: base #: model:res.country,name:base.af msgid "Afghanistan" -msgstr "" +msgstr "Афганистан" #. module: base #: selection:res.country,name_position:0 msgid "After Address" -msgstr "" +msgstr "После адреса" #. module: base #: selection:res.currency,position:0 @@ -7005,7 +7006,7 @@ msgstr "После суммы" #. module: base #: model:res.partner.industry,name:base.res_partner_industry_A msgid "Agriculture" -msgstr "" +msgstr "Сельское хозяйство" #. module: base #: model:res.country,name:base.al @@ -7062,12 +7063,12 @@ msgstr "Позволяет удаленно модернизировать прÐ #. module: base #: model:ir.module.module,summary:base.module_website_sale_coupon msgid "Allows to use discount coupons in ecommerce orders" -msgstr "" +msgstr "Разрешить использование купонов в коммерческих заказах" #. module: base #: model:ir.module.module,summary:base.module_sale_coupon msgid "Allows to use discount coupons in sales orders" -msgstr "" +msgstr "Разрешить использование купонов на скидку в заказах покупателя" #. module: base #: model:ir.module.category,description:base.module_category_account_voucher @@ -7084,6 +7085,8 @@ msgid "" "Also you will find here all the related documents and download it by " "clicking on any individual document." msgstr "" +"Так же вы найдёте здесь связанные документы и сможете скачать кликнув на " +"необходимый документ. " #. module: base #: code:addons/base/models/ir_fields.py:378 @@ -7128,12 +7131,12 @@ msgstr "Аналитический учёт" #. module: base #: model:ir.module.module,summary:base.module_mrp_account msgid "Analytic accounting in Manufacturing" -msgstr "" +msgstr "Аналитический учёт в Производстве" #. module: base #: model:res.country,name:base.ad msgid "Andorra" -msgstr "" +msgstr "Андора" #. module: base #: model:res.country,name:base.ao @@ -7294,7 +7297,7 @@ msgstr "Аргентина - Бухгалтерский учет" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_ar_reports msgid "Argentina - Accounting Reports" -msgstr "" +msgstr "Аргентина- Бухгалтерские Отчёты" #. module: base #: model:ir.model.fields,help:base.field_ir_act_client_params @@ -7394,7 +7397,7 @@ msgstr "Австралийский - Бухгалтерский учет" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_au_reports msgid "Australian - Accounting Reports" -msgstr "" +msgstr "Австралийские - Бухгалтерские Отчёты" #. module: base #: model:res.country,name:base.at @@ -7437,7 +7440,7 @@ msgstr "Авто поиск" #. module: base #: model:ir.module.module,summary:base.module_marketing_automation msgid "Automate Marketing Campaigns" -msgstr "" +msgstr "Автоматизируйте Маркетинговые кампании" #. module: base #: model:ir.module.module,shortdesc:base.module_base_automation @@ -7447,7 +7450,7 @@ msgstr "Автоматические правила действий" #. module: base #: model:ir.module.module,shortdesc:base.module_base_automation_hr_contract msgid "Automated Action based on Employee Contracts" -msgstr "" +msgstr "Автоматизация действий на основе контактов работников" #. module: base #: model:ir.module.module,shortdesc:base.module_base_gengo @@ -7837,7 +7840,7 @@ msgstr "Двоичный" #: model:ir.model.fields,field_description:base.field_ir_actions_binding_model_id_275 #: model:ir.model.fields,field_description:base.field_ir_cron_binding_model_id msgid "Binding Model" -msgstr "" +msgstr "Связанная модель" #. module: base #: model:ir.model.fields,field_description:base.field_ir_act_client_binding_type @@ -7849,7 +7852,7 @@ msgstr "" #: model:ir.model.fields,field_description:base.field_ir_actions_binding_type_276 #: model:ir.model.fields,field_description:base.field_ir_cron_binding_type msgid "Binding Type" -msgstr "" +msgstr "Связанный Тип" #. module: base #: model:ir.module.module,shortdesc:base.module_hw_blackbox_be @@ -7894,7 +7897,7 @@ msgstr "Тема Bootswatch" #. module: base #: model:res.country,name:base.ba msgid "Bosnia and Herzegovina" -msgstr "" +msgstr "Босния и Герцеговина" #. module: base #: model:res.country,name:base.bw @@ -8047,7 +8050,7 @@ msgstr "SMS-оповещения" #. module: base #: model:res.country,name:base.kh msgid "Cambodia" -msgstr "" +msgstr "Камбоджа" #. module: base #: model:res.country,name:base.cm @@ -8349,7 +8352,7 @@ msgstr "Чили - Бухгалтерский учет" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_cl_reports msgid "Chile - Accounting Reports" -msgstr "" +msgstr "Чили - Бухгалтерские Отчеты" #. module: base #: model:res.country,name:base.cn @@ -8851,7 +8854,7 @@ msgstr "Форма контактов" #. module: base #: model:ir.module.module,shortdesc:base.module_website_crm_phone_validation msgid "Contact Form Number Validation" -msgstr "" +msgstr "Контактная Форма для проверки номеров." #. module: base #: model:ir.ui.view,arch_db:base.view_partner_form @@ -9045,7 +9048,7 @@ msgstr "Создать меню" #. module: base #: model:ir.module.module,summary:base.module_website_form_project msgid "Create Tasks From Contact Form" -msgstr "" +msgstr "Создание задач из контактной формы." #. module: base #: model:ir.module.module,summary:base.module_crm_project @@ -9290,7 +9293,7 @@ msgstr "Поддержка кредитных карт для точки проÐ #. module: base #: model:ir.module.module,shortdesc:base.module_crm_phone_validation msgid "Crm Phone Numbers Validation" -msgstr "" +msgstr "Проверка телефонных номеров для CRM." #. module: base #: model:res.country,name:base.hr @@ -9305,7 +9308,7 @@ msgstr "Хорватия - Бухгалтерский учет (RRIF 2012)" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_hr_reports msgid "Croatia - RRIF 2012 COA - Accounting Reports" -msgstr "" +msgstr "Хорватия- RRIF 2012 COA - Бухгалтерские Отчеты" #. module: base #: model:res.country,name:base.cu @@ -9373,7 +9376,7 @@ msgstr "Валютная единица" #. module: base #: model:ir.model.fields,help:base.field_res_currency_currency_unit_label msgid "Currency Unit Name" -msgstr "" +msgstr "Наименование единицы валюты." #. module: base #: model:ir.model.fields,help:base.field_res_currency_symbol @@ -9443,7 +9446,7 @@ msgstr "" #: model:ir.module.module,shortdesc:base.module_portal #: model:ir.module.module,summary:base.module_portal msgid "Customer Portal" -msgstr "" +msgstr "Пользовательский Портал" #. module: base #: model:ir.module.module,shortdesc:base.module_rating @@ -9664,7 +9667,7 @@ msgstr "Тема по умолчанию" #. module: base #: model:ir.model.fields,field_description:base.field_ir_default_json_value msgid "Default Value (JSON format)" -msgstr "" +msgstr "Значение по умолчанию (в формате JSON)" #. module: base #: model:ir.model.fields,help:base.field_ir_act_window_limit @@ -9734,7 +9737,7 @@ msgstr "Демонстрационные данные" #. module: base #: model:res.country,name:base.cd msgid "Democratic Republic of the Congo" -msgstr "" +msgstr "Демократическая Республика Конго" #. module: base #: model:res.country,name:base.dk @@ -9812,7 +9815,7 @@ msgstr "Показывает, куда вставлять символ: посл msgid "" "Determines where the customer/company name should be placed, i.e. after or " "before the address." -msgstr "" +msgstr "Укажите расположение имени покупателя/компании, до или после адреса." #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_de @@ -9822,7 +9825,7 @@ msgstr "Германия - Учет" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_de_reports msgid "Deutschland - Accounting Reports" -msgstr "" +msgstr "Германия - Бухгалтерские Отчеты" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_de_skr03 diff --git a/odoo/addons/base/i18n/zh_CN.po b/odoo/addons/base/i18n/zh_CN.po index 6ff892bf955..d6f35e09c1a 100644 --- a/odoo/addons/base/i18n/zh_CN.po +++ b/odoo/addons/base/i18n/zh_CN.po @@ -4,9 +4,9 @@ # # Translators: # Jeffery CHEN Fan <jeffery9@gmail.com>, 2016 -# fausthuang <faust_huang@hotmail.com>, 2016 +# fausthuang, 2016 # waveyeung <waveyeung@qq.com>, 2016 -# Martin Trigaux <mat@odoo.com>, 2016 +# Martin Trigaux, 2016 # Talway <9010446@qq.com>, 2016 # 菜小蛇 <lttlsnk@gmail.com>, 2016 # xiaobin wu <bd5dml@gmail.com>, 2016 @@ -31,7 +31,7 @@ # glovebx <ruinning@163.com>, 2016 # 苏州远鼎 <tiexinliu@126.com>, 2016 # Noah McDermott <Noah_mcdermott@northwestschools.net>, 2016 -# Bo Cao <cao.poobo@hotmail.com>, 2017 +# Bo Cao, 2017 # 仁东 郑 <msntop@outlook.com>, 2017 # 北京路远通 <sales@luyuantong.com>, 2017 # 厦门-许舟 <windedge99@gmail.com>, 2017 @@ -7869,12 +7869,12 @@ msgstr "城市" #. module: base #: model:ir.module.module,shortdesc:base.module_base_address_city msgid "City Addresses" -msgstr "" +msgstr "城市地址" #. module: base #: selection:res.company,external_report_layout:0 msgid "Clean" -msgstr "" +msgstr "清理" #. module: base #: model:ir.actions.act_window,help:base.action_ui_view_custom @@ -8515,7 +8515,7 @@ msgstr "创建菜单" #. module: base #: selection:ir.actions.server,state:0 msgid "Create a new Record" -msgstr "" +msgstr "创建一条新记录" #. module: base #: model:ir.actions.act_window,help:base.action_res_company_form @@ -8734,7 +8734,7 @@ msgstr "POS信用卡支持" #. module: base #: model:ir.module.module,shortdesc:base.module_crm_phone_validation msgid "Crm Phone Numbers Validation" -msgstr "" +msgstr "CRM电话号码验证" #. module: base #: model:res.country,name:base.hr @@ -8887,7 +8887,7 @@ msgstr "" #: model:ir.module.module,shortdesc:base.module_portal #: model:ir.module.module,summary:base.module_portal msgid "Customer Portal" -msgstr "" +msgstr "客户门户" #. module: base #: model:ir.module.module,shortdesc:base.module_rating @@ -10700,7 +10700,7 @@ msgstr "常规设置" #: 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 "生成缺少的术语" #. module: base #: model:ir.ui.view,arch_db:base.ir_property_view_search @@ -18674,7 +18674,7 @@ msgstr "" #. module: base #: model:ir.model.fields,help:base.field_ir_attachment_res_model msgid "The database object this attachment will be attached to." -msgstr "" +msgstr "该附件将附加到的数据库对象。" #. module: base #: code:addons/base/models/ir_model.py:557 @@ -18878,7 +18878,7 @@ msgstr "币别到其他币别的汇率为 1" #. module: base #: model:ir.model.fields,help:base.field_ir_attachment_res_id msgid "The record id this is attached to." -msgstr "" +msgstr "这是附加到记录ID。" #. module: base #: code:addons/models.py:2675 diff --git a/odoo/addons/base/models/ir_actions.py b/odoo/addons/base/models/ir_actions.py index 95fd6eff322..f9ec9413e2f 100644 --- a/odoo/addons/base/models/ir_actions.py +++ b/odoo/addons/base/models/ir_actions.py @@ -8,6 +8,7 @@ from odoo.tools.safe_eval import safe_eval, test_python_expr from odoo.tools import pycompat from odoo.http import request +import base64 from collections import defaultdict import datetime import dateutil @@ -76,6 +77,8 @@ class IrActions(models.Model): 'datetime': datetime, 'dateutil': dateutil, 'timezone': timezone, + 'b64encode': base64.b64encode, + 'b64decode': base64.b64decode, } @api.model @@ -258,7 +261,7 @@ class IrActionsActWindowView(models.Model): _name = 'ir.actions.act_window.view' _table = 'ir_act_window_view' _rec_name = 'view_id' - _order = 'sequence' + _order = 'sequence,id' sequence = fields.Integer() view_id = fields.Many2one('ir.ui.view', string='View') diff --git a/odoo/addons/base/models/res_users.py b/odoo/addons/base/models/res_users.py index 832a2b4f48b..b0dd4a8ff78 100644 --- a/odoo/addons/base/models/res_users.py +++ b/odoo/addons/base/models/res_users.py @@ -15,7 +15,6 @@ from odoo.exceptions import AccessDenied, AccessError, UserError, ValidationErro from odoo.osv import expression from odoo.service.db import check_super from odoo.tools import partition, pycompat -from odoo.http import root _logger = logging.getLogger(__name__) @@ -372,8 +371,6 @@ class Users(models.Model): if any(key.startswith('context_') or key in ('lang', 'tz') for key in values): self.context_get.clear_cache(self) if any(key in values for key in ['active'] + USER_PRIVATE_FIELDS): - # force deletion of all sessions for these users - root.session_store.delete_sessions_for_uids(self.ids) db = self._cr.dbname for id in self.ids: self.__uid_cache[db].pop(id, None) @@ -387,10 +384,7 @@ class Users(models.Model): db = self._cr.dbname for id in self.ids: self.__uid_cache[db].pop(id, None) - res = super(Users, self).unlink() - # force deletion of all sessions for these users - root.session_store.delete_sessions_for_uids(self.ids) - return res + return super(Users, self).unlink() @api.model def name_search(self, name='', args=None, operator='ilike', limit=100): diff --git a/odoo/addons/base/tests/test_float.py b/odoo/addons/base/tests/test_float.py index 1c2fcc3e91f..6e42f8adf1d 100644 --- a/odoo/addons/base/tests/test_float.py +++ b/odoo/addons/base/tests/test_float.py @@ -92,6 +92,18 @@ class TestFloatPrecision(TransactionCase): try_round(1.8, '2', 0, method='UP') try_round(-1.8, '-2', 0, method='UP') + # Try some rounding value with rounding method DOWN instead of HALF-UP + # We use 2.425 because when normalizing 2.425 with precision_digits=3 it gives + # us 2424.9999999999995 as value, and if not handle correctly the rounding DOWN + # value will be incorrect (should be 2.425 and not 2.424) + try_round(2.425, '2.425', method='DOWN') + try_round(2.4249, '2.424', method='DOWN') + try_round(-2.425, '-2.425', method='DOWN') + try_round(-2.4249, '-2.424', method='DOWN') + try_round(-2.500, '-2.500', method='DOWN') + try_round(1.8, '1', 0, method='DOWN') + try_round(-1.8, '-1', 0, method='DOWN') + # Extended float range test, inspired by Cloves Almeida's test on bug #882036. fractions = [.0, .015, .01499, .675, .67499, .4555, .4555, .45555] expecteds = ['.00', '.02', '.01', '.68', '.67', '.46', '.456', '.4556'] @@ -135,8 +147,8 @@ class TestFloatPrecision(TransactionCase): try_compare(-657.4444, -657.445, 1) # Rounding to unusual rounding units (e.g. coin values) - def try_round(amount, expected, precision_rounding=None): - value = float_round(amount, precision_rounding=precision_rounding) + def try_round(amount, expected, precision_rounding=None, method='HALF-UP'): + value = float_round(amount, precision_rounding=precision_rounding, rounding_method=method) result = float_repr(value, precision_digits=2) self.assertEqual(result, expected, 'Rounding error: got %s, expected %s' % (result, expected)) @@ -145,6 +157,8 @@ class TestFloatPrecision(TransactionCase): try_round(457.3, '455.00', precision_rounding=5) try_round(457.5, '460.00', precision_rounding=5) try_round(457.1, '456.00', precision_rounding=3) + try_round(2.5, '2.50', precision_rounding=0.05, method='DOWN') + try_round(-2.5, '-2.50', precision_rounding=0.05, method='DOWN') def test_rounding_04(self): """ check that proper rounding is performed for float persistence """ diff --git a/odoo/http.py b/odoo/http.py index 63d7ece05d5..4cfe76a76a7 100644 --- a/odoo/http.py +++ b/odoo/http.py @@ -635,8 +635,9 @@ class JsonRequest(WebRequest): body = json.dumps(response, default=ustr) return Response( - body, headers=[('Content-Type', mime), - ('Content-Length', len(body))]) + body, status=error and error.pop('http_status', 200) or 200, + headers=[('Content-Type', mime), ('Content-Length', len(body))] + ) def _handle_exception(self, exception): """Called within an except block to allow converting exceptions @@ -645,13 +646,18 @@ class JsonRequest(WebRequest): try: return super(JsonRequest, self)._handle_exception(exception) except Exception: - if not isinstance(exception, (odoo.exceptions.Warning, SessionExpiredException, odoo.exceptions.except_orm)): + if not isinstance(exception, (odoo.exceptions.Warning, SessionExpiredException, + odoo.exceptions.except_orm, werkzeug.exceptions.NotFound)): _logger.exception("Exception during JSON request handling.") error = { 'code': 200, 'message': "Odoo Server Error", 'data': serialize_exception(exception) } + if isinstance(exception, werkzeug.exceptions.NotFound): + error['http_status'] = 404 + error['code'] = 404 + error['message'] = "404: Not Found" if isinstance(exception, AuthenticationError): error['code'] = 100 error['message'] = "Odoo Session Invalid" @@ -1029,6 +1035,7 @@ class OpenERPSession(werkzeug.contrib.sessions.Session): self.db = db self.uid = uid self.login = login + self.password = password request.uid = uid request.disable_db = False @@ -1043,6 +1050,7 @@ class OpenERPSession(werkzeug.contrib.sessions.Session): """ if not self.db or not self.uid: raise SessionExpiredException("Session expired") + security.check(self.db, self.uid, self.password) def logout(self, keep_db=False): for k in list(self): @@ -1055,6 +1063,7 @@ class OpenERPSession(werkzeug.contrib.sessions.Session): self.setdefault("db", None) self.setdefault("uid", None) self.setdefault("login", None) + self.setdefault("password", None) self.setdefault("context", {}) def get_context(self): @@ -1268,17 +1277,6 @@ class DisableCacheMiddleware(object): start_response(status, new_headers) return self.app(environ, start_wrapped) -class OdooSessionStore(werkzeug.contrib.sessions.FilesystemSessionStore): - def delete_sessions_for_uids(self, uids): - # pretty expensive on large session stores, especially non-local! - uids = set(uids) - _logger.info('Deleting all HTTP sessions for UIDs %s', uids) - for sid in self.list(): - s = self.get(sid) - if s.uid and s.uid in uids: - _logger.debug('Deleting session %s', sid) - self.delete(s) - class Root(object): """Root WSGI application for the OpenERP Web Client. """ @@ -1290,7 +1288,7 @@ class Root(object): # Setup http sessions path = odoo.tools.config.session_dir _logger.debug('HTTP sessions stored in: %s', path) - return OdooSessionStore(path, session_class=OpenERPSession) + return werkzeug.contrib.sessions.FilesystemSessionStore(path, session_class=OpenERPSession) @lazy_property def nodb_routing_map(self): diff --git a/odoo/tools/float_utils.py b/odoo/tools/float_utils.py index 33044d21f93..041a87cabbe 100644 --- a/odoo/tools/float_utils.py +++ b/odoo/tools/float_utils.py @@ -61,9 +61,6 @@ def float_round(value, precision_digits=None, precision_rounding=None, rounding_ # In order to easily support rounding to arbitrary 'steps' (e.g. coin values), # we normalize the value before rounding it as an integer, and de-normalize # after rounding: e.g. float_round(1.3, precision_rounding=.5) == 1.5 - - # TIE-BREAKING: HALF-UP (for normal rounding) - # We want to apply HALF-UP tie-breaking rules, i.e. 0.5 rounds away from 0. # Due to IEE754 float/double representation limits, the approximation of the # real value may be slightly below the tie limit, resulting in an error of # 1 unit in the last place (ulp) after rounding. @@ -74,25 +71,31 @@ def float_round(value, precision_digits=None, precision_rounding=None, rounding_ # Credit: discussion with OpenERP community members on bug 882036 normalized_value = value / rounding_factor # normalize + sign = math.copysign(1.0, normalized_value) epsilon_magnitude = math.log(abs(normalized_value), 2) epsilon = 2**(epsilon_magnitude-53) - if rounding_method == 'HALF-UP': - normalized_value += math.copysign(epsilon, normalized_value) - rounded_value = round(normalized_value) # round to integer - # TIE-BREAKING: UP (for ceiling[resp. flooring] operations) - # When rounding the value up[resp. down], we instead subtract the epsilon value + # TIE-BREAKING: UP/DOWN (for ceiling[resp. flooring] operations) + # When rounding the value up[resp. down], we instead subtract[resp. add] the epsilon value # as the the approximation of the real value may be slightly *above* the # tie limit, this would result in incorrectly rounding up[resp. down] to the next number # The math.ceil[resp. math.floor] operation is applied on the absolute value in order to # round "away from zero" and not "towards infinity", then the sign is # restored. - else: - func = math.floor if rounding_method == 'DOWN' else math.ceil - sign = math.copysign(1.0, normalized_value) + if rounding_method == 'UP': normalized_value -= sign*epsilon - rounded_value = func(abs(normalized_value)) * sign + rounded_value = math.ceil(abs(normalized_value)) * sign + + elif rounding_method == 'DOWN': + normalized_value += sign*epsilon + rounded_value = math.floor(abs(normalized_value)) * sign + + # TIE-BREAKING: HALF-UP (for normal rounding) + # We want to apply HALF-UP tie-breaking rules, i.e. 0.5 rounds away from 0. + else: + normalized_value += math.copysign(epsilon, normalized_value) + rounded_value = round(normalized_value) # round to integer result = rounded_value * rounding_factor # de-normalize return result |
