summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorOlivier Dony <odo@openerp.com>2016-01-13 17:13:05 +0100
committerOlivier Dony <odo@openerp.com>2016-01-13 17:13:05 +0100
commit39bd21fc479a85532e1f6368d3fc9d04c8fb2c68 (patch)
treea7dcb9a067e9ba07de11bd5db8c0801019ef96fc /addons
parent9ad5c66a44d9a0bf67089e3f5e530d8d9fb57491 (diff)
parent3be9d911c0d50cbe6e4e5768d40011849cc43972 (diff)
[MERGE] Forward-port 9.0 up to rev. 3be9d911c0d50cbe6e4e5768d40011849cc43972
Diffstat (limited to 'addons')
-rw-r--r--addons/account/models/account_move.py2
-rw-r--r--addons/account/models/account_payment.py2
-rw-r--r--addons/account_check_printing/account_journal.py2
-rw-r--r--addons/account_test/report/account_test_report.py2
-rw-r--r--addons/anonymization/anonymization.py8
-rw-r--r--addons/auth_signup/controllers/main.py2
-rw-r--r--addons/barcodes/barcodes.py2
-rw-r--r--addons/barcodes/i18n/barcodes.pot6
-rw-r--r--addons/base_iban/base_iban.py2
-rw-r--r--addons/base_import_module/controllers/main.py6
-rw-r--r--addons/base_vat/base_vat.py2
-rw-r--r--addons/calendar/calendar.py4
-rw-r--r--addons/gamification/models/challenge.py4
-rw-r--r--addons/gamification/models/goal.py2
-rw-r--r--addons/google_account/google_account.py12
-rw-r--r--addons/google_account/i18n/google_account.pot24
-rw-r--r--addons/google_calendar/google_calendar.py8
-rw-r--r--addons/hr_expense/models/account_move_line.py4
-rw-r--r--addons/hr_timesheet_sheet/i18n/hr_timesheet_sheet.pot30
-rw-r--r--addons/mail/i18n/mail.pot223
-rw-r--r--addons/mail/static/src/less/thread.less4
-rw-r--r--addons/mail/static/src/xml/client_action.xml18
-rw-r--r--addons/mail/static/src/xml/systray.xml2
-rw-r--r--addons/mail/static/src/xml/thread.xml6
-rw-r--r--addons/mail/wizard/mail_compose_message.py8
-rw-r--r--addons/mass_mailing/i18n/mass_mailing.pot12
-rw-r--r--addons/mass_mailing/models/mass_mailing.py2
-rw-r--r--addons/pos_mercury/static/src/js/pos_mercury.js5
-rw-r--r--addons/product/i18n/product.pot12
-rw-r--r--addons/product/pricelist.py4
-rw-r--r--addons/product/pricelist_view.xml1
-rw-r--r--addons/product/product.py2
-rw-r--r--addons/product_email_template/i18n/product_email_template.pot11
-rw-r--r--addons/product_email_template/views/product_view.xml2
-rw-r--r--addons/sale/sale_analytic.py2
-rw-r--r--addons/stock/i18n/stock.pot378
-rw-r--r--addons/stock/product.py2
-rw-r--r--addons/stock/stock.py4
-rw-r--r--addons/survey/wizard/survey_email_compose_message.py2
-rw-r--r--addons/web/i18n/web.pot257
-rw-r--r--addons/web/static/src/js/views/form_widgets.js3
-rw-r--r--addons/web/static/src/xml/base.xml2
-rw-r--r--addons/web_editor/static/src/js/rte.js14
-rw-r--r--addons/web_editor/static/src/js/rte.summernote.js2
-rw-r--r--addons/website/models/website.py6
-rw-r--r--addons/website/static/src/js/website.snippets.editor.js6
-rw-r--r--addons/website_blog/models/website_blog.py2
-rw-r--r--addons/website_forum/models/forum.py28
-rw-r--r--addons/website_sale_digital/i18n/website_sale_digital.pot6
-rw-r--r--addons/website_sale_digital/product.py2
-rw-r--r--addons/website_slides/controllers/main.py6
-rw-r--r--addons/website_theme_install/models/ir_module_module.py5
-rw-r--r--addons/website_theme_install/views/views.xml13
53 files changed, 755 insertions, 421 deletions
diff --git a/addons/account/models/account_move.py b/addons/account/models/account_move.py
index f9d0c2a6ca6..ca2f18011a3 100644
--- a/addons/account/models/account_move.py
+++ b/addons/account/models/account_move.py
@@ -172,7 +172,7 @@ class AccountMove(models.Model):
if self.user_has_groups('account.group_account_manager'):
lock_date = move.company_id.fiscalyear_lock_date
if move.date <= lock_date:
- raise UserError(_("You cannot add/modify entries prior to and inclusive of the lock date %s. Check the company settings or ask someone with the 'Adviser' role" % (lock_date)))
+ raise UserError(_("You cannot add/modify entries prior to and inclusive of the lock date %s. Check the company settings or ask someone with the 'Adviser' role") % (lock_date))
return True
@api.multi
diff --git a/addons/account/models/account_payment.py b/addons/account/models/account_payment.py
index 7195170a86a..5ea2b0bfd23 100644
--- a/addons/account/models/account_payment.py
+++ b/addons/account/models/account_payment.py
@@ -118,7 +118,7 @@ class account_register_payments(models.TransientModel):
if not active_model or not active_ids:
raise UserError(_("Programmation error: wizard action executed without active_model or active_ids in context."))
if active_model != 'account.invoice':
- raise UserError(_("Programmation error: the expected model for this action is 'account.invoice'. The provided one is '%d'." % active_model))
+ raise UserError(_("Programmation error: the expected model for this action is 'account.invoice'. The provided one is '%d'.") % active_model)
# Checks on received invoice records
invoices = self.env[active_model].browse(active_ids)
diff --git a/addons/account_check_printing/account_journal.py b/addons/account_check_printing/account_journal.py
index 03ad48bd8cf..7470787d322 100644
--- a/addons/account_check_printing/account_journal.py
+++ b/addons/account_check_printing/account_journal.py
@@ -23,7 +23,7 @@ class AccountJournal(models.Model):
def _set_check_next_number(self):
if self.check_next_number < self.check_sequence_id.number_next_actual:
raise ValidationError(_("The last check number was %s. In order to avoid a check being rejected "
- "by the bank, you can only use a greater number." % self.check_sequence_id.number_next_actual))
+ "by the bank, you can only use a greater number.") % self.check_sequence_id.number_next_actual)
if self.check_sequence_id:
self.check_sequence_id.sudo().number_next_actual = self.check_next_number
diff --git a/addons/account_test/report/account_test_report.py b/addons/account_test/report/account_test_report.py
index 208fec8152a..16a06622c09 100644
--- a/addons/account_test/report/account_test_report.py
+++ b/addons/account_test/report/account_test_report.py
@@ -53,7 +53,7 @@ class ReportAssertAccount(models.AbstractModel):
return ', '.join(["%s: %s" % (tup[0], tup[1]) for tup in order_columns(item, column_order)])
else:
return item
- result = [_(_format(rec)) for rec in result]
+ result = [_format(rec) for rec in result]
return result
diff --git a/addons/anonymization/anonymization.py b/addons/anonymization/anonymization.py
index 581a5d8f586..5ad6f8eea42 100644
--- a/addons/anonymization/anonymization.py
+++ b/addons/anonymization/anonymization.py
@@ -72,7 +72,7 @@ class ir_model_fields_anonymization(osv.osv):
if global_state == 'anonymized':
raise UserError(_("The database is currently anonymized, you cannot create, modify or delete fields."))
elif global_state == 'unstable':
- msg = _("The database anonymization is currently in an unstable state. Some fields are anonymized," + \
+ msg = _("The database anonymization is currently in an unstable state. Some fields are anonymized,"
" while some fields are not anonymized. You should try to solve this problem before trying to create, write or delete fields.")
raise UserError(msg)
@@ -339,7 +339,7 @@ class ir_model_fields_anonymize_wizard(osv.osv_memory):
# remove the placeholer:
eview.remove(placeholder)
else:
- msg = _("The database anonymization is currently in an unstable state. Some fields are anonymized," + \
+ msg = _("The database anonymization is currently in an unstable state. Some fields are anonymized,"
" while some fields are not anonymized. You should try to solve this problem before trying to do anything else.")
raise UserError(msg)
@@ -372,7 +372,7 @@ class ir_model_fields_anonymize_wizard(osv.osv_memory):
if state == 'anonymized':
self._raise_after_history_update(cr, uid, history_id, _('Error !'), _("The database is currently anonymized, you cannot anonymize it again."))
elif state == 'unstable':
- msg = _("The database anonymization is currently in an unstable state. Some fields are anonymized," + \
+ msg = _("The database anonymization is currently in an unstable state. Some fields are anonymized,"
" while some fields are not anonymized. You should try to solve this problem before trying to do anything.")
self._raise_after_history_update(cr, uid, history_id, 'Error !', msg)
@@ -509,7 +509,7 @@ class ir_model_fields_anonymize_wizard(osv.osv_memory):
if state == 'clear':
raise UserError(_("The database is not currently anonymized, you cannot reverse the anonymization."))
elif state == 'unstable':
- msg = _("The database anonymization is currently in an unstable state. Some fields are anonymized," + \
+ msg = _("The database anonymization is currently in an unstable state. Some fields are anonymized,"
" while some fields are not anonymized. You should try to solve this problem before trying to do anything.")
raise UserError(msg)
diff --git a/addons/auth_signup/controllers/main.py b/addons/auth_signup/controllers/main.py
index b508514617f..0092754e627 100644
--- a/addons/auth_signup/controllers/main.py
+++ b/addons/auth_signup/controllers/main.py
@@ -66,7 +66,7 @@ class AuthSignupHome(openerp.addons.web.controllers.main.Home):
qcontext['error'] = _("Could not reset your password")
_logger.exception('error when resetting password')
except Exception, e:
- qcontext['error'] = _(e.message)
+ qcontext['error'] = e.message
return request.render('auth_signup.reset_password', qcontext)
diff --git a/addons/barcodes/barcodes.py b/addons/barcodes/barcodes.py
index 9c17a1d5967..c2c8f910949 100644
--- a/addons/barcodes/barcodes.py
+++ b/addons/barcodes/barcodes.py
@@ -180,7 +180,7 @@ class barcode_rule(models.Model):
@api.model
def _encoding_selection_list(self):
return [
- ('any', 'Any'),
+ ('any', _('Any')),
('ean13', 'EAN-13'),
('ean8', 'EAN-8'),
('upca', 'UPC-A'),
diff --git a/addons/barcodes/i18n/barcodes.pot b/addons/barcodes/i18n/barcodes.pot
index 4d07aa7df22..5018c7b5270 100644
--- a/addons/barcodes/i18n/barcodes.pot
+++ b/addons/barcodes/i18n/barcodes.pot
@@ -73,6 +73,12 @@ msgid "An internal identification of the barcode nomenclature"
msgstr ""
#. module: barcodes
+#: code:addons/barcodes/barcodes.py:183
+#, python-format
+msgid "Any"
+msgstr ""
+
+#. module: barcodes
#: model:ir.model.fields,field_description:barcodes.field_barcode_rule_barcode_nomenclature_id
#: model:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form
msgid "Barcode Nomenclature"
diff --git a/addons/base_iban/base_iban.py b/addons/base_iban/base_iban.py
index 8468fa12f67..0877c264333 100644
--- a/addons/base_iban/base_iban.py
+++ b/addons/base_iban/base_iban.py
@@ -32,7 +32,7 @@ def validate_iban(iban):
iban_template = _map_iban_template[country_code]
if len(iban) != len(iban_template.replace(' ', '')):
raise ValidationError(_("The IBAN does not seem to be correct. You should have entered something like this %s\n"\
- "Where B = National bank code, S = Branch code, C = Account No, k = Check digit" % iban_template))
+ "Where B = National bank code, S = Branch code, C = Account No, k = Check digit") % iban_template)
check_chars = iban[4:] + iban[:4]
digits = int(''.join(str(int(char, 36)) for char in check_chars)) # BASE 36: 0..9,A..Z -> 0..35
diff --git a/addons/base_import_module/controllers/main.py b/addons/base_import_module/controllers/main.py
index 0d2cdc1ab5b..4b51e69f096 100644
--- a/addons/base_import_module/controllers/main.py
+++ b/addons/base_import_module/controllers/main.py
@@ -21,7 +21,7 @@ class ImportModule(Controller):
if not is_admin:
raise openerp.exceptions.AccessError("Only administrators can upload a module")
- @route('/base_import_module/login', type='http', auth='none', methods=['POST'])
+ @route('/base_import_module/login', type='http', auth='none', methods=['POST'], csrf=False)
@webservice
def login(self, login, password, db=None):
if db and db != request.db:
@@ -30,7 +30,9 @@ class ImportModule(Controller):
if not uid:
return Response(response="Wrong login/password", status=401)
self.check_user(uid)
- return "ok"
+ return Response(headers={
+ 'X-CSRF-TOKEN': request.csrf_token(),
+ })
@route('/base_import_module/upload', type='http', auth='user', methods=['POST'])
@webservice
diff --git a/addons/base_vat/base_vat.py b/addons/base_vat/base_vat.py
index 887c6560618..9e1dcba46e4 100644
--- a/addons/base_vat/base_vat.py
+++ b/addons/base_vat/base_vat.py
@@ -108,7 +108,7 @@ class res_partner(osv.osv):
continue
vat_country, vat_number = self._split_vat(partner.vat)
if not check_func(cr, uid, vat_country, vat_number, context=context):
- _logger.info(_("Importing VAT Number [%s] is not valid !" % vat_number))
+ _logger.info("Importing VAT Number [%s] is not valid !", vat_number)
return False
return True
diff --git a/addons/calendar/calendar.py b/addons/calendar/calendar.py
index 63e0032b006..43d82efb40e 100644
--- a/addons/calendar/calendar.py
+++ b/addons/calendar/calendar.py
@@ -260,7 +260,7 @@ class calendar_attendee(osv.Model):
meeting_obj = self.pool['calendar.event']
res = self.write(cr, uid, ids, {'state': 'accepted'}, context)
for attendee in self.browse(cr, uid, ids, context=context):
- meeting_obj.message_post(cr, uid, attendee.event_id.id, body=_(("%s has accepted invitation") % (attendee.cn)),
+ meeting_obj.message_post(cr, uid, attendee.event_id.id, body=_("%s has accepted invitation") % (attendee.cn),
subtype="calendar.subtype_invitation", context=context)
return res
@@ -275,7 +275,7 @@ class calendar_attendee(osv.Model):
meeting_obj = self.pool['calendar.event']
res = self.write(cr, uid, ids, {'state': 'declined'}, context)
for attendee in self.browse(cr, uid, ids, context=context):
- meeting_obj.message_post(cr, uid, attendee.event_id.id, body=_(("%s has declined invitation") % (attendee.cn)), subtype="calendar.subtype_invitation", context=context)
+ meeting_obj.message_post(cr, uid, attendee.event_id.id, body=_("%s has declined invitation") % (attendee.cn), subtype="calendar.subtype_invitation", context=context)
return res
def create(self, cr, uid, vals, context=None):
diff --git a/addons/gamification/models/challenge.py b/addons/gamification/models/challenge.py
index 2f2772b06c1..9662cccfe5e 100644
--- a/addons/gamification/models/challenge.py
+++ b/addons/gamification/models/challenge.py
@@ -737,11 +737,11 @@ class gamification_challenge(osv.Model):
if challenge_ended:
# open chatter message
- message_body = _("The challenge %s is finished." % challenge.name)
+ message_body = _("The challenge %s is finished.") % challenge.name
if rewarded_users:
user_names = self.pool['res.users'].name_get(cr, uid, rewarded_users, context=context)
- message_body += _("<br/>Reward (badge %s) for every succeeding user was sent to %s." % (challenge.reward_id.name, ", ".join([name for (user_id, name) in user_names])))
+ message_body += _("<br/>Reward (badge %s) for every succeeding user was sent to %s.") % (challenge.reward_id.name, ", ".join([name for (user_id, name) in user_names]))
else:
message_body += _("<br/>Nobody has succeeded to reach every goal, no badge is rewarded for this challenge.")
diff --git a/addons/gamification/models/goal.py b/addons/gamification/models/goal.py
index af4208809ac..fc912b5f872 100644
--- a/addons/gamification/models/goal.py
+++ b/addons/gamification/models/goal.py
@@ -130,7 +130,7 @@ class gamification_goal_definition(osv.Model):
obj.search(cr, uid, domain, context=context, count=True)
except (ValueError, SyntaxError), e:
msg = e.message or (e.msg + '\n' + e.text)
- raise UserError(_("The domain for the definition %s seems incorrect, please check it.\n\n%s" % (definition.name, msg)))
+ raise UserError(_("The domain for the definition %s seems incorrect, please check it.\n\n%s") % (definition.name, msg))
return True
def create(self, cr, uid, vals, context=None):
diff --git a/addons/google_account/google_account.py b/addons/google_account/google_account.py
index 53c02e08ad3..9142dc67638 100644
--- a/addons/google_account/google_account.py
+++ b/addons/google_account/google_account.py
@@ -34,8 +34,8 @@ class google_service(osv.osv_memory):
req = urllib2.Request("https://accounts.google.com/o/oauth2/token", data, headers)
content = urllib2.urlopen(req, timeout=TIMEOUT).read()
except urllib2.HTTPError:
- error_msg = "Something went wrong during your token generation. Maybe your Authorization Code is invalid or already expired"
- raise self.pool.get('res.config.settings').get_config_warning(cr, _(error_msg), context=context)
+ error_msg = _("Something went wrong during your token generation. Maybe your Authorization Code is invalid or already expired")
+ raise self.pool.get('res.config.settings').get_config_warning(cr, error_msg, context=context)
content = json.loads(content)
return content.get('refresh_token')
@@ -95,8 +95,8 @@ class google_service(osv.osv_memory):
st, res, ask_time = self._do_request(cr, uid, uri, params=data, headers=headers, type='POST', preuri='', context=context)
except urllib2.HTTPError:
- error_msg = "Something went wrong during your token generation. Maybe your Authorization Code is invalid"
- raise self.pool.get('res.config.settings').get_config_warning(cr, _(error_msg), context=context)
+ error_msg = _("Something went wrong during your token generation. Maybe your Authorization Code is invalid")
+ raise self.pool.get('res.config.settings').get_config_warning(cr, error_msg, context=context)
return res
def _refresh_google_token_json(self, cr, uid, refresh_token, service, context=None): # exchange_AUTHORIZATION vs Token (service = calendar)
@@ -125,8 +125,8 @@ class google_service(osv.osv_memory):
self.pool['res.users'].write(cur, uid, [uid], {'google_%s_rtoken' % service: False}, context=context)
error_key = json.loads(e.read()).get("error", "nc")
_logger.exception("Bad google request : %s !" % error_key)
- error_msg = "Something went wrong during your token generation. Maybe your Authorization Code is invalid or already expired [%s]" % error_key
- raise self.pool.get('res.config.settings').get_config_warning(cr, _(error_msg), context=context)
+ error_msg = _("Something went wrong during your token generation. Maybe your Authorization Code is invalid or already expired [%s]") % error_key
+ raise self.pool.get('res.config.settings').get_config_warning(cr, error_msg, context=context)
return res
def _do_request(self, cr, uid, uri, params={}, headers={}, type='POST', preuri="https://www.googleapis.com", context=None):
diff --git a/addons/google_account/i18n/google_account.pot b/addons/google_account/i18n/google_account.pot
index ed9115b97e1..459efa8553a 100644
--- a/addons/google_account/i18n/google_account.pot
+++ b/addons/google_account/i18n/google_account.pot
@@ -4,10 +4,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 9.0\n"
+"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-07 14:40+0000\n"
-"PO-Revision-Date: 2015-09-07 14:40+0000\n"
+"POT-Creation-Date: 2016-01-13 13:41+0000\n"
+"PO-Revision-Date: 2016-01-13 13:41+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -51,6 +51,24 @@ msgid "Last Updated on"
msgstr ""
#. module: google_account
+#: code:addons/google_account/google_account.py:98
+#, python-format
+msgid "Something went wrong during your token generation. Maybe your Authorization Code is invalid"
+msgstr ""
+
+#. module: google_account
+#: code:addons/google_account/google_account.py:37
+#, python-format
+msgid "Something went wrong during your token generation. Maybe your Authorization Code is invalid or already expired"
+msgstr ""
+
+#. module: google_account
+#: code:addons/google_account/google_account.py:128
+#, python-format
+msgid "Something went wrong during your token generation. Maybe your Authorization Code is invalid or already expired [%s]"
+msgstr ""
+
+#. module: google_account
#: code:addons/google_account/google_account.py:173
#, python-format
msgid "Something went wrong with your request to google"
diff --git a/addons/google_calendar/google_calendar.py b/addons/google_calendar/google_calendar.py
index 33acda6b82d..2d444c41b10 100644
--- a/addons/google_calendar/google_calendar.py
+++ b/addons/google_calendar/google_calendar.py
@@ -295,13 +295,13 @@ class google_calendar(osv.AbstractModel):
st, content, ask_time = self.pool['google.service']._do_request(cr, uid, url, params, headers, type='GET', context=context)
except urllib2.HTTPError, e:
if e.code == 401: # Token invalid / Acces unauthorized
- error_msg = "Your token is invalid or has been revoked !"
+ error_msg = _("Your token is invalid or has been revoked !")
registry = openerp.modules.registry.RegistryManager.get(request.session.db)
with registry.cursor() as cur:
self.pool['res.users'].write(cur, SUPERUSER_ID, [uid], {'google_calendar_token': False, 'google_calendar_token_validity': False}, context=context)
- raise self.pool.get('res.config.settings').get_config_warning(cr, _(error_msg), context=context)
+ raise self.pool.get('res.config.settings').get_config_warning(cr, error_msg, context=context)
raise
return (status_response(st), content['id'] or False, ask_time)
@@ -699,8 +699,8 @@ class google_calendar(osv.AbstractModel):
self.pool['res.users'].write(cur, SUPERUSER_ID, [uid], {'google_calendar_last_sync_date': False}, context=context)
error_key = json.loads(str(e))
error_key = error_key.get('error', {}).get('message', 'nc')
- error_msg = "Google is lost... the next synchro will be a full synchro. \n\n %s" % error_key
- raise self.pool.get('res.config.settings').get_config_warning(cr, _(error_msg), context=context)
+ error_msg = _("Google is lost... the next synchro will be a full synchro. \n\n %s") % error_key
+ raise self.pool.get('res.config.settings').get_config_warning(cr, error_msg, context=context)
my_google_att_ids = att_obj.search(cr, uid, [
('partner_id', '=', myPartnerID),
diff --git a/addons/hr_expense/models/account_move_line.py b/addons/hr_expense/models/account_move_line.py
index bf408105b5a..f7e24f65277 100644
--- a/addons/hr_expense/models/account_move_line.py
+++ b/addons/hr_expense/models/account_move_line.py
@@ -2,7 +2,7 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from openerp import api, models
-
+from openerp.tools import float_compare
class AccountMoveLine(models.Model):
_inherit = "account.move.line"
@@ -10,7 +10,7 @@ class AccountMoveLine(models.Model):
@api.multi
def reconcile(self, writeoff_acc_id=False, writeoff_journal_id=False):
res = super(AccountMoveLine, self).reconcile(writeoff_acc_id=writeoff_acc_id, writeoff_journal_id=writeoff_journal_id)
- account_move_ids = [l.move_id.id for l in self if l.move_id.matched_percentage == 1]
+ account_move_ids = [l.move_id.id for l in self if float_compare(l.move_id.matched_percentage, 1, precision_digits=5) == 0]
if account_move_ids:
expenses = self.env['hr.expense'].search([('account_move_id', 'in', account_move_ids)])
expenses.paid_expenses()
diff --git a/addons/hr_timesheet_sheet/i18n/hr_timesheet_sheet.pot b/addons/hr_timesheet_sheet/i18n/hr_timesheet_sheet.pot
index 99621c03b3e..8d00b412eae 100644
--- a/addons/hr_timesheet_sheet/i18n/hr_timesheet_sheet.pot
+++ b/addons/hr_timesheet_sheet/i18n/hr_timesheet_sheet.pot
@@ -4,10 +4,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 9.0\n"
+"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-18 08:11+0000\n"
-"PO-Revision-Date: 2015-09-18 08:11+0000\n"
+"POT-Creation-Date: 2016-01-13 10:41+0000\n"
+"PO-Revision-Date: 2016-01-13 10:41+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -369,11 +369,6 @@ msgid "Messages"
msgstr ""
#. module: hr_timesheet_sheet
-#: model:ir.model.fields,help:hr_timesheet_sheet.field_hr_timesheet_sheet_sheet_message_ids
-msgid "Messages and communication history"
-msgstr ""
-
-#. module: hr_timesheet_sheet
#: selection:res.company,timesheet_range:0
msgid "Month"
msgstr ""
@@ -391,6 +386,12 @@ msgid "My Timesheet opens your timesheet so that you can book your activities in
msgstr ""
#. module: hr_timesheet_sheet
+#: model:ir.actions.act_window,name:hr_timesheet_sheet.act_hr_timesheet_sheet_my_timesheets
+#: model:ir.ui.menu,name:hr_timesheet_sheet.menu_act_hr_timesheet_sheet_my_timesheets
+msgid "My Timesheets"
+msgstr ""
+
+#. module: hr_timesheet_sheet
#: selection:hr.timesheet.report,state:0
#: selection:hr_timesheet_sheet.sheet,state:0
msgid "New"
@@ -610,6 +611,7 @@ msgstr ""
#. module: hr_timesheet_sheet
#: model:ir.actions.act_window,help:hr_timesheet_sheet.act_hr_timesheet_sheet_form
+#: model:ir.actions.act_window,help:hr_timesheet_sheet.act_hr_timesheet_sheet_my_timesheets
msgid "Timesheets can also be invoiced to customers, depending on the\n"
" configuration of each project's related contract."
msgstr ""
@@ -759,26 +761,27 @@ msgid "You cannot have 2 timesheets that overlap!\n"
msgstr ""
#. module: hr_timesheet_sheet
-#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:66
+#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:72
#, python-format
msgid "You cannot have 2 timesheets that overlap!\n"
"You should use the menu 'My Timesheet' to avoid this problem."
msgstr ""
#. module: hr_timesheet_sheet
-#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:480
+#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:494
#, python-format
msgid "You cannot modify an entry in a confirmed timesheet"
msgstr ""
#. module: hr_timesheet_sheet
-#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:343
+#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:353
#, python-format
msgid "You cannot modify an entry in a confirmed timesheet."
msgstr ""
#. module: hr_timesheet_sheet
#: model:ir.actions.act_window,help:hr_timesheet_sheet.act_hr_timesheet_sheet_form
+#: model:ir.actions.act_window,help:hr_timesheet_sheet.act_hr_timesheet_sheet_my_timesheets
msgid "You must record timesheets every day and confirm at the end\n"
" of the week. Once the timesheet is confirmed, it should be\n"
" validated by a manager."
@@ -797,6 +800,11 @@ msgid "hr.timesheet.current.open"
msgstr ""
#. module: hr_timesheet_sheet
+#: model:ir.actions.act_window,help:hr_timesheet_sheet.act_hr_timesheet_sheet_my_timesheets
+msgid "new timesheet."
+msgstr ""
+
+#. module: hr_timesheet_sheet
#: model:ir.ui.view,arch_db:hr_timesheet_sheet.hr_timesheet_sheet_form
msgid "to"
msgstr ""
diff --git a/addons/mail/i18n/mail.pot b/addons/mail/i18n/mail.pot
index fae4c77ded0..69aaafebfb2 100644
--- a/addons/mail/i18n/mail.pot
+++ b/addons/mail/i18n/mail.pot
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-10 13:38+0000\n"
-"PO-Revision-Date: 2015-12-10 13:38+0000\n"
+"POT-Creation-Date: 2016-01-13 14:27+0000\n"
+"PO-Revision-Date: 2016-01-13 14:27+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -41,7 +41,7 @@ msgid "\n"
" % endif\n"
"\n"
" % if not ctx.get('button_access') and not ctx.get('button_follow') and not ctx.get('button_unfollow') and ctx.get('model_name'):\n"
-" <p style=\"padding: 5px 10px; font-size: 12px;\"\">\n"
+" <p style=\"padding: 5px 10px; font-size: 12px;\">\n"
" About <strong>${ctx['model_name']}\n"
" % if ctx.get('record_name'):\n"
" : ${ctx['record_name']}\n"
@@ -55,7 +55,7 @@ msgid "\n"
" % if ctx.get('actions'):\n"
" % for action in ctx['actions']:\n"
" <a href=\"${action['url']}\" style=\"text-decoration:none; color: #a24689;\"><strong>${action['title']}</strong></a>\n"
-" %if len(ctx['actions']) > 1 and loop.index < len(ctx['actions']):\n"
+" %if cmp(len(ctx['actions']), 1) == 1 and cmp(len(ctx['actions']), loop.index) == 1:\n"
" |\n"
" % endif\n"
" % endfor\n"
@@ -69,8 +69,9 @@ msgid "\n"
" </a>\n"
" % endif\n"
" <strong>using</strong>\n"
-" <a href=\"www.odoo.com\" style=\"text-decoration:none; color: #a24689;\"><strong>Odoo</strong></a>\n"
+" <a href=\"https://www.odoo.com\" style=\"text-decoration:none; color: #a24689;\"><strong>Odoo</strong></a>\n"
" % endif\n"
+" </p>\n"
" </td>\n"
" </tr>\n"
" </tbody></table>\n"
@@ -94,7 +95,7 @@ msgid "\n"
" % if ctx.get('tracking'):\n"
" <ul>\n"
" % for tracking in ctx['tracking']\n"
-" <li>${tracking[0]} : ${tracking[1]} -> ${tracking[2]}</li>\n"
+" <li>${tracking[0]} : ${tracking[1]} -&gt; ${tracking[2]}</li>\n"
" % endfor\n"
" </ul>\n"
" % endif\n"
@@ -112,12 +113,13 @@ msgid "\n"
" </tr></tbody>\n"
" </table>\n"
"</div>\n"
-"% endif"
+"% endif\n"
+""
msgstr ""
#. module: mail
#. openerp-web
-#: code:addons/mail/static/src/js/chat_manager.js:50
+#: code:addons/mail/static/src/js/chat_manager.js:53
#, python-format
msgid " from "
msgstr ""
@@ -199,7 +201,7 @@ msgstr ""
#. module: mail
#: code:addons/mail/wizard/invite.py:22
#, python-format
-msgid "<div><p>Hello,</p><p>%s invited you to follow %s document: %s.<p></div>"
+msgid "<div><p>Hello,</p><p>%s invited you to follow %s document: %s.</p></div>"
msgstr ""
#. module: mail
@@ -305,6 +307,13 @@ msgstr ""
#. module: mail
#. openerp-web
+#: code:addons/mail/static/src/xml/client_action.xml:78
+#, python-format
+msgid "Add"
+msgstr ""
+
+#. module: mail
+#. openerp-web
#: code:addons/mail/static/src/xml/chatter.xml:144
#, python-format
msgid "Add Channels"
@@ -536,6 +545,13 @@ msgid "Available for mass mailing"
msgstr ""
#. module: mail
+#. openerp-web
+#: code:addons/mail/static/src/xml/chatter.xml:162
+#, python-format
+msgid "Be careful with channels following internal notifications"
+msgstr ""
+
+#. module: mail
#: model:ir.model.fields,field_description:mail.field_email_template_preview_body_html
#: model:ir.model.fields,field_description:mail.field_ir_act_server_body_html
#: model:ir.model.fields,field_description:mail.field_mail_template_body_html
@@ -792,17 +808,12 @@ msgstr ""
#. module: mail
#. openerp-web
-#: code:addons/mail/static/src/js/client_action.js:217
+#: code:addons/mail/static/src/js/client_action.js:250
#, python-format
msgid "Create %s"
msgstr ""
#. module: mail
-#: model:ir.model.fields,field_description:mail.field_mail_channel_create_date
-msgid "Create Date"
-msgstr ""
-
-#. module: mail
#: model:ir.model.fields,field_description:mail.field_email_template_preview_create_uid
#: model:ir.model.fields,field_description:mail.field_mail_alias_create_uid
#: model:ir.model.fields,field_description:mail.field_mail_channel_create_uid
@@ -821,6 +832,7 @@ msgstr ""
#. module: mail
#: model:ir.model.fields,field_description:mail.field_email_template_preview_create_date
#: model:ir.model.fields,field_description:mail.field_mail_alias_create_date
+#: model:ir.model.fields,field_description:mail.field_mail_channel_create_date
#: model:ir.model.fields,field_description:mail.field_mail_channel_partner_create_date
#: model:ir.model.fields,field_description:mail.field_mail_compose_message_create_date
#: model:ir.model.fields,field_description:mail.field_mail_mail_create_date
@@ -925,14 +937,21 @@ msgstr ""
#. module: mail
#. openerp-web
-#: code:addons/mail/static/src/xml/client_action.xml:107
+#: code:addons/mail/static/src/xml/client_action.xml:124
#, python-format
msgid "Detach"
msgstr ""
#. module: mail
#. openerp-web
-#: code:addons/mail/static/src/xml/client_action.xml:35
+#: code:addons/mail/static/src/xml/client_action.xml:124
+#, python-format
+msgid "Detach the conversation"
+msgstr ""
+
+#. module: mail
+#. openerp-web
+#: code:addons/mail/static/src/xml/client_action.xml:42
#, python-format
msgid "Direct Messages"
msgstr ""
@@ -1040,11 +1059,6 @@ msgid "Email Search"
msgstr ""
#. module: mail
-#: model:ir.model.fields,field_description:mail.field_mail_channel_email_send
-msgid "Email Sent"
-msgstr ""
-
-#. module: mail
#: model:ir.model.fields,field_description:mail.field_ir_act_server_template_id
msgid "Email Template"
msgstr ""
@@ -1346,6 +1360,13 @@ msgid "Id of the followed resource"
msgstr ""
#. module: mail
+#. openerp-web
+#: code:addons/mail/static/src/xml/client_action.xml:108
+#, python-format
+msgid "Idle"
+msgstr ""
+
+#. module: mail
#: model:ir.model.fields,help:mail.field_mail_channel_message_unread
#: model:ir.model.fields,help:mail.field_mail_thread_message_unread
#: model:ir.model.fields,help:mail.field_res_partner_message_unread
@@ -1592,6 +1613,13 @@ msgid "Last Updated on"
msgstr ""
#. module: mail
+#. openerp-web
+#: code:addons/mail/static/src/xml/client_action.xml:97
+#, python-format
+msgid "Leave this channel"
+msgstr ""
+
+#. module: mail
#: model:ir.model.fields,help:mail.field_mail_wizard_invite_channel_ids
msgid "List of channels that will be added as listeners of the current document."
msgstr ""
@@ -1671,12 +1699,34 @@ msgstr ""
#. module: mail
#. openerp-web
-#: code:addons/mail/static/src/xml/client_action.xml:108
+#: code:addons/mail/static/src/xml/client_action.xml:125
+#, python-format
+msgid "Mark all as read"
+msgstr ""
+
+#. module: mail
+#. openerp-web
+#: code:addons/mail/static/src/xml/client_action.xml:125
#, python-format
msgid "Mark all read"
msgstr ""
#. module: mail
+#. openerp-web
+#: code:addons/mail/static/src/xml/thread.xml:105
+#, python-format
+msgid "Mark as Read"
+msgstr ""
+
+#. module: mail
+#. openerp-web
+#: code:addons/mail/static/src/xml/thread.xml:68
+#: code:addons/mail/static/src/xml/thread.xml:102
+#, python-format
+msgid "Mark as Todo"
+msgstr ""
+
+#. module: mail
#: model:ir.model.fields,field_description:mail.field_mail_channel_image_medium
msgid "Medium-sized photo"
msgstr ""
@@ -1784,14 +1834,6 @@ msgid "Messages Search"
msgstr ""
#. module: mail
-#: model:ir.model.fields,help:mail.field_mail_channel_message_ids
-#: model:ir.model.fields,help:mail.field_mail_thread_message_ids
-#: model:ir.model.fields,help:mail.field_res_partner_message_ids
-#: model:ir.model.fields,help:mail.field_res_users_message_ids
-msgid "Messages and communication history"
-msgstr ""
-
-#. module: mail
#: model:ir.model.fields,help:mail.field_mail_message_subtype_internal
msgid "Messages with internal subtypes will be visible only by employees, aka members of base_user group"
msgstr ""
@@ -1974,6 +2016,13 @@ msgid "Notification"
msgstr ""
#. module: mail
+#. openerp-web
+#: code:addons/mail/static/src/xml/systray.xml:12
+#, python-format
+msgid "Notifications"
+msgstr ""
+
+#. module: mail
#: model:ir.model.fields,field_description:mail.field_mail_compose_message_notify
msgid "Notify followers"
msgstr ""
@@ -2015,6 +2064,20 @@ msgid "Odoo helps you easily track all activities related to\n"
msgstr ""
#. module: mail
+#. openerp-web
+#: code:addons/mail/static/src/xml/client_action.xml:11
+#, python-format
+msgid "Odoo needs your permission to"
+msgstr ""
+
+#. module: mail
+#. openerp-web
+#: code:addons/mail/static/src/xml/client_action.xml:109
+#, python-format
+msgid "Offline"
+msgstr ""
+
+#. module: mail
#: model:ir.model.fields,field_description:mail.field_mail_tracking_value_old_value_char
msgid "Old Value Char"
msgstr ""
@@ -2046,12 +2109,19 @@ msgstr ""
#. module: mail
#. openerp-web
-#: code:addons/mail/static/src/js/chatter.js:230
+#: code:addons/mail/static/src/js/chatter.js:218
#, python-format
msgid "One follower"
msgstr ""
#. module: mail
+#. openerp-web
+#: code:addons/mail/static/src/xml/client_action.xml:107
+#, python-format
+msgid "Online"
+msgstr ""
+
+#. module: mail
#: selection:mail.channel.partner,fold_state:0
msgid "Open"
msgstr ""
@@ -2068,7 +2138,14 @@ msgstr ""
#. module: mail
#. openerp-web
-#: code:addons/mail/static/src/xml/client_action.xml:36
+#: code:addons/mail/static/src/xml/client_action.xml:128
+#, python-format
+msgid "Open channel settings"
+msgstr ""
+
+#. module: mail
+#. openerp-web
+#: code:addons/mail/static/src/xml/client_action.xml:46
#, python-format
msgid "Open chat"
msgstr ""
@@ -2516,12 +2593,17 @@ msgstr ""
#. module: mail
#. openerp-web
-#: code:addons/mail/static/src/xml/chatter.xml:72
+#: code:addons/mail/static/src/xml/chatter.xml:67
#, python-format
msgid "Send a message"
msgstr ""
#. module: mail
+#: model:ir.model.fields,field_description:mail.field_mail_channel_email_send
+msgid "Send messages by email"
+msgstr ""
+
+#. module: mail
#: model:ir.model.fields,help:mail.field_email_template_preview_email_from
#: model:ir.model.fields,help:mail.field_ir_act_server_email_from
#: model:ir.model.fields,help:mail.field_mail_template_email_from
@@ -2529,6 +2611,13 @@ msgid "Sender address (placeholders may be used here). If not set, the default v
msgstr ""
#. module: mail
+#. openerp-web
+#: code:addons/mail/static/src/xml/client_action.xml:94
+#, python-format
+msgid "Sends messages by email"
+msgstr ""
+
+#. module: mail
#: model:ir.ui.view,arch_db:mail.view_mail_search
#: selection:mail.mail,state:0
msgid "Sent"
@@ -2541,7 +2630,7 @@ msgstr ""
#. module: mail
#. openerp-web
-#: code:addons/mail/static/src/js/client_action.js:159
+#: code:addons/mail/static/src/xml/client_action.xml:128
#, python-format
msgid "Settings"
msgstr ""
@@ -2639,12 +2728,15 @@ msgid "Sub-model"
msgstr ""
#. module: mail
+#. openerp-web
+#: code:addons/mail/static/src/xml/composer.xml:8
#: model:ir.model.fields,field_description:mail.field_email_template_preview_subject
#: model:ir.model.fields,field_description:mail.field_ir_act_server_subject
#: model:ir.model.fields,field_description:mail.field_mail_compose_message_subject
#: model:ir.model.fields,field_description:mail.field_mail_mail_subject
#: model:ir.model.fields,field_description:mail.field_mail_message_subject
#: model:ir.model.fields,field_description:mail.field_mail_template_subject
+#, python-format
msgid "Subject"
msgstr ""
@@ -2809,12 +2901,19 @@ msgstr ""
#. module: mail
#. openerp-web
-#: code:addons/mail/static/src/js/thread.js:119
+#: code:addons/mail/static/src/js/thread.js:117
#, python-format
msgid "Today"
msgstr ""
#. module: mail
+#. openerp-web
+#: code:addons/mail/static/src/xml/client_action.xml:122
+#, python-format
+msgid "Toggle Channels"
+msgstr ""
+
+#. module: mail
#: model:ir.ui.view,arch_db:mail.mail_channel_view_form
msgid "Topics discussed in this group..."
msgstr ""
@@ -2907,21 +3006,35 @@ msgstr ""
#. module: mail
#. openerp-web
-#: code:addons/mail/static/src/xml/client_action.xml:109
+#: code:addons/mail/static/src/xml/client_action.xml:126
#, python-format
msgid "Unstar all"
msgstr ""
#. module: mail
#. openerp-web
-#: code:addons/mail/static/src/xml/client_action.xml:110
+#: code:addons/mail/static/src/xml/client_action.xml:126
+#, python-format
+msgid "Unstar all messages"
+msgstr ""
+
+#. module: mail
+#. openerp-web
+#: code:addons/mail/static/src/xml/client_action.xml:127
#, python-format
msgid "Unsubscribe"
msgstr ""
#. module: mail
#. openerp-web
-#: code:addons/mail/static/src/js/client_action.js:402
+#: code:addons/mail/static/src/xml/client_action.xml:127
+#, python-format
+msgid "Unsubscribe from channel"
+msgstr ""
+
+#. module: mail
+#. openerp-web
+#: code:addons/mail/static/src/js/client_action.js:425
#, python-format
msgid "Unsubscribed"
msgstr ""
@@ -3098,16 +3211,16 @@ msgid "by"
msgstr ""
#. module: mail
-#. openerp-web
-#: code:addons/mail/static/src/xml/client_action.xml:33
+#: code:addons/mail/models/mail_thread.py:312
#, python-format
-msgid "dm"
+msgid "document"
msgstr ""
#. module: mail
-#: code:addons/mail/models/mail_thread.py:313
+#. openerp-web
+#: code:addons/mail/static/src/xml/client_action.xml:11
#, python-format
-msgid "document"
+msgid "enable desktop notifications"
msgstr ""
#. module: mail
@@ -3158,20 +3271,6 @@ msgid "on"
msgstr ""
#. module: mail
-#. openerp-web
-#: code:addons/mail/static/src/xml/client_action.xml:39
-#, python-format
-msgid "private"
-msgstr ""
-
-#. module: mail
-#. openerp-web
-#: code:addons/mail/static/src/xml/client_action.xml:21
-#, python-format
-msgid "public"
-msgstr ""
-
-#. module: mail
#: model:ir.model,name:mail.model_publisher_warranty_contract
msgid "publisher_warranty.contract"
msgstr ""
@@ -3198,11 +3297,3 @@ msgstr ""
msgid "this document"
msgstr ""
-#. module: mail
-#. openerp-web
-#: code:addons/mail/static/src/xml/client_action.xml:34
-#: code:addons/mail/static/src/xml/client_action.xml:35
-#, python-format
-msgid "true"
-msgstr ""
-
diff --git a/addons/mail/static/src/less/thread.less b/addons/mail/static/src/less/thread.less
index f2971dcf17e..e523e6ffe2d 100644
--- a/addons/mail/static/src/less/thread.less
+++ b/addons/mail/static/src/less/thread.less
@@ -111,6 +111,10 @@
color: gray;
}
+ [summary~=o_mail_notification] { // name conflicts with channel notifications, but is odoo notification buttons to hide in chatter if present
+ display: none;
+ }
+
> p {
margin: 0 0 9px; // Required by the old design to override a general rule on p's
&:last-child {
diff --git a/addons/mail/static/src/xml/client_action.xml b/addons/mail/static/src/xml/client_action.xml
index da2e29057e0..ac60afc3e58 100644
--- a/addons/mail/static/src/xml/client_action.xml
+++ b/addons/mail/static/src/xml/client_action.xml
@@ -75,7 +75,7 @@
<t t-if="!disable_add_channel || !empty">
<div class="o_mail_sidebar_title">
<h4><t t-esc="channel_title"/></h4>
- <span t-if="!disable_add_channel" class="fa fa-plus o_add" t-att-title="_t('Add')" t-attf-data-type="#{channel_type}"/>
+ <span t-if="!disable_add_channel" class="fa fa-plus o_add" title="Add" t-attf-data-type="#{channel_type}"/>
</div>
</t>
</t>
@@ -94,7 +94,7 @@
<i t-if="channel.mass_mailing" class="fa fa-envelope-o" title="Sends messages by email"/>
<t t-call="mail.chat.SidebarNeedaction"/>
<span t-attf-class="fa fa-times pull-right o_mail_partner_unpin #{counter ? 'hide' : ''}"
- t-att-title="_t('Leave this channel')" t-att-data-channel-id="channel.id"/>
+ title="Leave this channel" t-att-data-channel-id="channel.id"/>
</div>
</t>
<div t-if="!disable_add_channel" class="o_mail_add_channel" t-attf-data-type="#{channel_type}">
@@ -119,13 +119,13 @@
<!-- Buttons of the Control Panel -->
<t t-name="mail.chat.ControlButtons">
<div>
- <button type="button" class="btn btn-primary btn-sm o_mail_toggle_channels visible-xs-inline" t-att-title='_t("Toggle Channels")'>Channels</button>
- <button type="button" class="btn btn-primary btn-sm o_mail_chat_button_invite" t-att-title='_t("Invite people")'>Invite</button>
- <button type="button" class="btn btn-primary btn-sm o_mail_chat_button_detach hidden-xs" t-att-title='_t("Detach the conversation")'>Detach</button>
- <button type="button" class="btn btn-primary btn-sm o_mail_chat_button_mark_read" t-att-title='_t("Mark all as read")'>Mark all read</button>
- <button type="button" class="btn btn-primary btn-sm o_mail_chat_button_unstar_all" t-att-title='_t("Unstar all messages")'>Unstar all</button>
- <button type="button" class="btn btn-default btn-sm o_mail_chat_button_unsubscribe" t-att-title='_t("Unsubscribe from channel")'>Unsubscribe</button>
- <button type="button" class="btn btn-default btn-sm o_mail_chat_button_settings" t-att-title='_t("Open channel settings")'>Settings</button>
+ <button type="button" class="btn btn-primary btn-sm o_mail_toggle_channels visible-xs-inline" title="Toggle Channels">Channels</button>
+ <button type="button" class="btn btn-primary btn-sm o_mail_chat_button_invite" title="Invite people">Invite</button>
+ <button type="button" class="btn btn-primary btn-sm o_mail_chat_button_detach hidden-xs" title="Detach the conversation">Detach</button>
+ <button type="button" class="btn btn-primary btn-sm o_mail_chat_button_mark_read" title="Mark all as read">Mark all read</button>
+ <button type="button" class="btn btn-primary btn-sm o_mail_chat_button_unstar_all" title="Unstar all messages">Unstar all</button>
+ <button type="button" class="btn btn-default btn-sm o_mail_chat_button_unsubscribe" title="Unsubscribe from channel">Unsubscribe</button>
+ <button type="button" class="btn btn-default btn-sm o_mail_chat_button_settings" title="Open channel settings">Settings</button>
</div>
</t>
diff --git a/addons/mail/static/src/xml/systray.xml b/addons/mail/static/src/xml/systray.xml
index 58a735e80c5..5318f30b3dd 100644
--- a/addons/mail/static/src/xml/systray.xml
+++ b/addons/mail/static/src/xml/systray.xml
@@ -9,7 +9,7 @@
</t>
<t t-name="mail.chat.NotificationTopButton">
- <li t-att-title='_t("Notifications")'>
+ <li title="Notifications">
<a href="#">
<i class="fa fa-comment"/> <span class="o_notification_counter"/>
</a>
diff --git a/addons/mail/static/src/xml/thread.xml b/addons/mail/static/src/xml/thread.xml
index 0952fcf0e7f..fb7c5fa35e8 100644
--- a/addons/mail/static/src/xml/thread.xml
+++ b/addons/mail/static/src/xml/thread.xml
@@ -65,7 +65,7 @@
</span>
<i t-if="!message.display_author &amp;&amp; options.display_stars &amp;&amp; message.message_type != 'notification'"
t-att-class="'fa o_thread_message_star ' + (message.is_starred ? 'fa-star' : 'fa-star-o')"
- t-att-data-message-id="message.id" t-att-title="_t('Mark as Todo')"/>
+ t-att-data-message-id="message.id" title="Mark as Todo"/>
</div>
<div t-att-class="'o_thread_message_core' + (message.is_note ? ' o_mail_note' : '')">
<p t-if="message.display_author" class="o_mail_info">
@@ -99,10 +99,10 @@
<span>
<i t-if="options.display_stars &amp;&amp; message.message_type != 'notification'"
t-att-class="'fa fa-lg o_thread_message_star ' + (message.is_starred ? 'fa-star' : 'fa-star-o')"
- t-att-data-message-id="message.id" t-att-title="_t('Mark as Todo')"/>
+ t-att-data-message-id="message.id" title="Mark as Todo"/>
<i t-if="message.is_needaction &amp;&amp; options.display_needactions"
class="fa fa-check o_thread_message_needaction"
- t-att-data-message-id="message.id" t-att-title="_t('Mark as Read')"/>
+ t-att-data-message-id="message.id" title="Mark as Read"/>
</span>
</p>
<t t-if="message.tracking_value_ids &amp;&amp; message.tracking_value_ids.length &gt; 0">
diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py
index 6ea72c16ed5..59a1f6cac08 100644
--- a/addons/mail/wizard/mail_compose_message.py
+++ b/addons/mail/wizard/mail_compose_message.py
@@ -216,8 +216,8 @@ class MailComposer(models.TransientModel):
if wizard.template_id:
# template user_signature is added when generating body_html
# mass mailing: use template auto_delete value -> note, for emails mass mailing only
- Mail = Mail.with_context(mail_notify_user_signature=False, mail_auto_delete=wizard.template_id.auto_delete, mail_server_id=wizard.template_id.mail_server_id.id)
- ActiveModel = ActiveModel.with_context(mail_notify_user_signature=False)
+ Mail = Mail.with_context(mail_notify_user_signature=False, mail_server_id=wizard.template_id.mail_server_id.id)
+ ActiveModel = ActiveModel.with_context(mail_notify_user_signature=False, mail_auto_delete=wizard.template_id.auto_delete)
if not hasattr(ActiveModel, 'message_post'):
ActiveModel = self.env['mail.thread'].with_context(thread_model=wizard.model)
if wizard.composition_mode == 'mass_post':
@@ -288,8 +288,8 @@ class MailComposer(models.TransientModel):
# always keep a copy, reset record name (avoid browsing records)
mail_values.update(notification=True, model=self.model, res_id=res_id, record_name=False)
# auto deletion of mail_mail
- if 'mail_auto_delete' in self._context:
- mail_values['auto_delete'] = self._context.get('mail_auto_delete')
+ if self.template_id and self.template_id.auto_delete:
+ mail_values['auto_delete'] = True
# rendered values using template
email_dict = rendered_values[res_id]
mail_values['partner_ids'] += email_dict.pop('partner_ids', [])
diff --git a/addons/mass_mailing/i18n/mass_mailing.pot b/addons/mass_mailing/i18n/mass_mailing.pot
index 40e25c0bfa8..fee9a173eb7 100644
--- a/addons/mass_mailing/i18n/mass_mailing.pot
+++ b/addons/mass_mailing/i18n/mass_mailing.pot
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-01-06 07:17+0000\n"
-"PO-Revision-Date: 2016-01-06 07:17+0000\n"
+"POT-Creation-Date: 2016-01-13 15:46+0000\n"
+"PO-Revision-Date: 2016-01-13 15:46+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -523,8 +523,10 @@ msgid "Domain"
msgstr ""
#. module: mass_mailing
+#: code:addons/mass_mailing/models/mass_mailing.py:638
#: selection:mail.mass_mailing,state:0
#: selection:mail.statistics.report,state:0
+#, python-format
msgid "Draft"
msgstr ""
@@ -702,7 +704,9 @@ msgid "If checked, recipients will be mailed only once, allowing to sendvarious
msgstr ""
#. module: mass_mailing
+#: code:addons/mass_mailing/models/mass_mailing.py:638
#: selection:mail.mass_mailing,state:0
+#, python-format
msgid "In Queue"
msgstr ""
@@ -1356,11 +1360,14 @@ msgid "Send to All"
msgstr ""
#. module: mass_mailing
+#: code:addons/mass_mailing/models/mass_mailing.py:638
#: selection:mail.mass_mailing,state:0
+#, python-format
msgid "Sending"
msgstr ""
#. module: mass_mailing
+#: code:addons/mass_mailing/models/mass_mailing.py:638
#: model:ir.model.fields,field_description:mass_mailing.field_mail_mail_statistics_sent
#: model:ir.model.fields,field_description:mass_mailing.field_mail_mass_mailing_sent
#: model:ir.model.fields,field_description:mass_mailing.field_mail_statistics_report_sent
@@ -1368,6 +1375,7 @@ msgstr ""
#: selection:mail.mass_mailing,state:0
#: model:mail.mass_mailing.stage,name:mass_mailing.campaign_stage_3
#: selection:mail.statistics.report,state:0
+#, python-format
msgid "Sent"
msgstr ""
diff --git a/addons/mass_mailing/models/mass_mailing.py b/addons/mass_mailing/models/mass_mailing.py
index 89f410d9bf4..1ca86e3dd47 100644
--- a/addons/mass_mailing/models/mass_mailing.py
+++ b/addons/mass_mailing/models/mass_mailing.py
@@ -635,7 +635,7 @@ class MassMailing(osv.Model):
if groupby and groupby[0] == "state":
# Default result structure
# states = self._get_state_list(cr, uid, context=context)
- states = [('draft', 'Draft'), ('in_queue', 'In Queue'), ('sending', 'Sending'), ('done', 'Sent')]
+ states = [('draft', _('Draft')), ('in_queue', _('In Queue')), ('sending', _('Sending')), ('done', _('Sent'))]
read_group_all_states = [{
'__context': {'group_by': groupby[1:]},
'__domain': domain + [('state', '=', state_value)],
diff --git a/addons/pos_mercury/static/src/js/pos_mercury.js b/addons/pos_mercury/static/src/js/pos_mercury.js
index f9e213da5e5..20e602c7aa2 100644
--- a/addons/pos_mercury/static/src/js/pos_mercury.js
+++ b/addons/pos_mercury/static/src/js/pos_mercury.js
@@ -18,14 +18,17 @@ var ScreenWidget = screens.ScreenWidget;
var PaymentScreenWidget = screens.PaymentScreenWidget;
var round_pr = utils.round_precision;
+pos_model.load_fields("account.journal", "pos_mercury_config_id");
+
var _modelproto = pos_model.PosModel.prototype;
pos_model.PosModel = pos_model.PosModel.extend({
getOnlinePaymentJournals: function () {
+ var self = this;
var online_payment_journals = [];
$.each(this.journals, function (i, val) {
if (val.pos_mercury_config_id) {
- online_payment_journals.push({label:val.display_name, item:val.id});
+ online_payment_journals.push({label:self.getCashRegisterByJournalID(val.id).journal_id[1], item:val.id});
}
});
diff --git a/addons/product/i18n/product.pot b/addons/product/i18n/product.pot
index 85a37b94f1e..493de6613d3 100644
--- a/addons/product/i18n/product.pot
+++ b/addons/product/i18n/product.pot
@@ -649,6 +649,12 @@ msgid "Computers"
msgstr ""
#. module: product
+#: code:addons/product/product.py:460
+#, python-format
+msgid "Consumable"
+msgstr ""
+
+#. module: product
#: model:ir.model.fields,help:product.field_product_uom_category_id
msgid "Conversion between Units of Measure can only occur if they belong to the same category. The conversion will be made based on the ratios."
msgstr ""
@@ -2395,6 +2401,12 @@ msgid "Server"
msgstr ""
#. module: product
+#: code:addons/product/product.py:460
+#, python-format
+msgid "Service"
+msgstr ""
+
+#. module: product
#: model:ir.ui.view,arch_db:product.product_template_search_view
#: model:product.category,name:product.product_category_3
#: model:product.public.category,name:product.services
diff --git a/addons/product/pricelist.py b/addons/product/pricelist.py
index bcd81241621..ab8c84f6433 100644
--- a/addons/product/pricelist.py
+++ b/addons/product/pricelist.py
@@ -148,7 +148,7 @@ class product_pricelist(osv.osv):
'AND (categ_id IS NULL OR categ_id = any(%s)) '
'AND (pricelist_id = %s) '
'AND ((i.date_start IS NULL OR i.date_start<=%s) AND (i.date_end IS NULL OR i.date_end>=%s))'
- 'ORDER BY sequence, applied_on, min_quantity desc',
+ 'ORDER BY applied_on, min_quantity desc',
(prod_tmpl_ids, prod_ids, categ_ids, pricelist.id, date, date))
item_ids = [x[0] for x in cr.fetchall()]
@@ -251,7 +251,7 @@ class product_pricelist(osv.osv):
class product_pricelist_item(osv.osv):
_name = "product.pricelist.item"
_description = "Pricelist item"
- _order = "sequence, applied_on, min_quantity desc"
+ _order = "applied_on, min_quantity desc"
def _check_recursion(self, cr, uid, ids, context=None):
for obj_list in self.browse(cr, uid, ids, context=context):
diff --git a/addons/product/pricelist_view.xml b/addons/product/pricelist_view.xml
index 64f2a6d751e..db191649c61 100644
--- a/addons/product/pricelist_view.xml
+++ b/addons/product/pricelist_view.xml
@@ -134,7 +134,6 @@
<separator string="Pricelist Items"/>
<field name="item_ids" nolabel="1" context="{'default_base':'list_price'}">
<tree string="Pricelist Items">
- <field name="sequence" widget="handle"/>
<field name="name" string="Applicable On"/>
<field name="min_quantity"/>
<field name="date_start"/>
diff --git a/addons/product/product.py b/addons/product/product.py
index c8fa9b8a8b1..0bc1ec3de85 100644
--- a/addons/product/product.py
+++ b/addons/product/product.py
@@ -457,7 +457,7 @@ class product_template(osv.osv):
return [x['product_tmpl_id'][0] for x in r]
def _get_product_template_type(self, cr, uid, context=None):
- return [('consu', 'Consumable'), ('service', 'Service')]
+ return [('consu', _('Consumable')), ('service', _('Service'))]
_get_product_template_type_wrapper = lambda self, *args, **kwargs: self._get_product_template_type(*args, **kwargs)
_columns = {
diff --git a/addons/product_email_template/i18n/product_email_template.pot b/addons/product_email_template/i18n/product_email_template.pot
index 8789e6c6893..85d43a1cd35 100644
--- a/addons/product_email_template/i18n/product_email_template.pot
+++ b/addons/product_email_template/i18n/product_email_template.pot
@@ -4,10 +4,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 9.0\n"
+"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-07 14:41+0000\n"
-"PO-Revision-Date: 2015-09-07 14:41+0000\n"
+"POT-Creation-Date: 2016-01-13 08:24+0000\n"
+"PO-Revision-Date: 2016-01-13 08:24+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -659,6 +659,11 @@ msgstr ""
#. module: product_email_template
#: model:ir.ui.view,arch_db:product_email_template.product_template_form_view
+msgid "Invoice Confirmation Email"
+msgstr ""
+
+#. module: product_email_template
+#: model:ir.ui.view,arch_db:product_email_template.product_template_form_view
msgid "Miscellaneous"
msgstr ""
diff --git a/addons/product_email_template/views/product_view.xml b/addons/product_email_template/views/product_view.xml
index 5d7f17ab6ff..f2699e90f97 100644
--- a/addons/product_email_template/views/product_view.xml
+++ b/addons/product_email_template/views/product_view.xml
@@ -11,7 +11,7 @@
<attribute name="attrs"></attribute>
</group>
<group name="email_template_and_project" position="inside">
- <field name="email_template_id" String="Invoice Confirmation Email"
+ <field name="email_template_id" string="Invoice Confirmation Email"
domain="[('model','=','product.template')]"
context="{
'form_view_ref':'product_email_template.email_template_form_simplified',
diff --git a/addons/sale/sale_analytic.py b/addons/sale/sale_analytic.py
index cc7de3a1a98..9261c5c4208 100644
--- a/addons/sale/sale_analytic.py
+++ b/addons/sale/sale_analytic.py
@@ -52,7 +52,7 @@ class AccountAnalyticLine(models.Model):
if not order:
return False
if order.state != 'sale':
- raise UserError(_('The Sale Order %s linked to the Analytic Account must be validated before registering expenses.' % order.name))
+ raise UserError(_('The Sale Order %s linked to the Analytic Account must be validated before registering expenses.') % order.name)
last_so_line = self.env['sale.order.line'].search([('order_id', '=', order.id)], order='sequence desc', limit=1)
last_sequence = last_so_line.sequence + 1 if last_so_line else 100
diff --git a/addons/stock/i18n/stock.pot b/addons/stock/i18n/stock.pot
index d4dd35f1193..4cfb78af2f2 100644
--- a/addons/stock/i18n/stock.pot
+++ b/addons/stock/i18n/stock.pot
@@ -4,10 +4,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 9.0\n"
+"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-10-09 09:17+0000\n"
-"PO-Revision-Date: 2015-10-09 09:17+0000\n"
+"POT-Creation-Date: 2016-01-13 09:40+0000\n"
+"PO-Revision-Date: 2016-01-13 09:40+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -52,7 +52,7 @@ msgid " (reserved)"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3479
+#: code:addons/stock/stock.py:3482
#, python-format
msgid " MTO"
msgstr ""
@@ -65,36 +65,36 @@ msgid " On Hand"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3616
-#: code:addons/stock/stock.py:3909
+#: code:addons/stock/stock.py:3619
+#: code:addons/stock/stock.py:3912
#, python-format
msgid " Sequence in"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3620
-#: code:addons/stock/stock.py:3917
+#: code:addons/stock/stock.py:3623
+#: code:addons/stock/stock.py:3920
#, python-format
msgid " Sequence internal"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3617
-#: code:addons/stock/stock.py:3911
+#: code:addons/stock/stock.py:3620
+#: code:addons/stock/stock.py:3914
#, python-format
msgid " Sequence out"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3618
-#: code:addons/stock/stock.py:3913
+#: code:addons/stock/stock.py:3621
+#: code:addons/stock/stock.py:3916
#, python-format
msgid " Sequence packing"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3619
-#: code:addons/stock/stock.py:3915
+#: code:addons/stock/stock.py:3622
+#: code:addons/stock/stock.py:3918
#, python-format
msgid " Sequence picking"
msgstr ""
@@ -111,7 +111,7 @@ msgid "%s %s %s has been <b>moved to</b> scrap."
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3296
+#: code:addons/stock/stock.py:3299
#, python-format
msgid "%s: Supply Product from %s"
msgstr ""
@@ -163,7 +163,7 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "<span class=\"label label-default text-center odoo_purple\">'Ready to Transfer'</span>"
+msgid "<span class=\"label label-default text-center odoo_purple\">'Available'</span>"
msgstr ""
#. module: stock
@@ -173,6 +173,11 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
+msgid "<span class=\"label label-default text-center odoo_purple\">Click on <span class=\"fa fa-truck\"/> Shipment</span>"
+msgstr ""
+
+#. module: stock
+#: model:ir.ui.view,arch_db:stock.inventory_planner
msgid "<span class=\"label label-default text-center odoo_purple\">Confirm Order</span>"
msgstr ""
@@ -265,7 +270,7 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
msgid "<span class=\"panel-title\">\n"
-" <strong>From the Purchases application</strong>\n"
+" <strong>From the Purchase application</strong>\n"
" </span>"
msgstr ""
@@ -354,7 +359,7 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "<strong>Buy:</strong> the product is bought from a vendor, through a Purchase Order"
+msgid "<strong>Buy:</strong> the product is bought from a vendor through a Purchase Order"
msgstr ""
#. module: stock
@@ -400,12 +405,12 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "<strong>Make to Order:</strong> the product is acquired only as demand requires (meaning each time a Sales Order is confirmed). This will not modify stock in the medium term because you restock with the exact amount that was ordered"
+msgid "<strong>Make to Order:</strong> the product is acquired only as demand requires, each time a Sales Order is confirmed. This does not modify stock in the medium term because you restock with the exact amount that was ordered"
msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "<strong>Make to Stock:</strong> your customers are supplied from available stock. If the quantities in stock are too low to fulfill the order, a Purchase Order (according the minimum stock rules) will be generated in order to get the products required"
+msgid "<strong>Make to Stock:</strong> your customers are supplied from available stock. If the quantities in stock are too low to fulfill the order, a Purchase Order is generated according the minimum stock rules in order to get the products required"
msgstr ""
#. module: stock
@@ -480,6 +485,11 @@ msgid "<strong>Serial Number</strong>"
msgstr ""
#. module: stock
+#: model:ir.ui.view,arch_db:stock.inventory_planner
+msgid "<strong>Service products</strong> are non-material products provided by a company or an individual"
+msgstr ""
+
+#. module: stock
#: model:ir.ui.view,arch_db:stock.report_picking
msgid "<strong>Source</strong>"
msgstr ""
@@ -515,7 +525,7 @@ msgid "<strong>When you process an incoming shipment, internal transfer or deliv
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:2878
+#: code:addons/stock/stock.py:2881
#, python-format
msgid "A Pack"
msgstr ""
@@ -527,6 +537,16 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
+msgid "A classic purchase flow looks like the following:"
+msgstr ""
+
+#. module: stock
+#: model:ir.ui.view,arch_db:stock.inventory_planner
+msgid "A classic sales flow looks like the following:"
+msgstr ""
+
+#. module: stock
+#: model:ir.ui.view,arch_db:stock.inventory_planner
msgid "A good inventory management aims to optimize stock levels: not too low (or\n"
" you may find yourself out of stock) and not too high (your products occupy\n"
" space and may loose value)."
@@ -592,13 +612,13 @@ msgid "Adds a Claim link to the delivery order.\n"
msgstr ""
#. module: stock
-#: selection:stock.config.settings,group_stock_adv_location:0
-msgid "Advanced routing of products using rules"
+#: model:ir.ui.view,arch_db:stock.inventory_planner
+msgid "Advanced"
msgstr ""
#. module: stock
-#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "Advanced'"
+#: selection:stock.config.settings,group_stock_adv_location:0
+msgid "Advanced routing of products using rules"
msgstr ""
#. module: stock
@@ -628,7 +648,7 @@ msgid "All at once"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:2864
+#: code:addons/stock/stock.py:2867
#, python-format
msgid "All products"
msgstr ""
@@ -788,11 +808,6 @@ msgid "Back order <em>%s</em> <b>created</b>."
msgstr ""
#. module: stock
-#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "Back to the Purchases application, find the <strong>original Purchase Order</strong>"
-msgstr ""
-
-#. module: stock
#: model:ir.model,name:stock.model_stock_backorder_confirmation
msgid "Backorder Confirmation"
msgstr ""
@@ -803,7 +818,7 @@ msgid "Backorder creation"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:4729
+#: code:addons/stock/stock.py:4732
#, python-format
msgid "Backorder exists"
msgstr ""
@@ -878,7 +893,7 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "By default, Odoo measures products by 'units', which are a generic and can represent just about anything"
+msgid "By default, Odoo measures products by 'units', which are generic and represent just about anything"
msgstr ""
#. module: stock
@@ -902,13 +917,13 @@ msgid "Calendar View"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3355
+#: code:addons/stock/stock.py:3358
#, python-format
msgid "Can't find any customer or supplier location."
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3463
+#: code:addons/stock/stock.py:3466
#, python-format
msgid "Can't find any generic Make To Order route."
msgstr ""
@@ -1342,7 +1357,7 @@ msgid "Creation Date, usually the time of the order"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3803
+#: code:addons/stock/stock.py:3806
#, python-format
msgid "Cross-Dock"
msgstr ""
@@ -1373,7 +1388,7 @@ msgid "Current quantity of products.\n"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:4825
+#: code:addons/stock/stock.py:4828
#: model:ir.ui.view,arch_db:stock.view_location_search
#, python-format
msgid "Customer"
@@ -1606,7 +1621,7 @@ msgid "Delivery Method"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3664
+#: code:addons/stock/stock.py:3667
#: model:stock.picking.type,name:stock.chi_picking_type_out
#: model:stock.picking.type,name:stock.picking_type_out
#, python-format
@@ -1757,6 +1772,11 @@ msgid "Display the latest Inventories and Moves done on your products and easily
msgstr ""
#. module: stock
+#: model:ir.ui.view,arch_db:stock.inventory_planner
+msgid "Do not hesitate to send us an email to describe your experience or to suggest improvements!"
+msgstr ""
+
+#. module: stock
#: selection:stock.config.settings,module_claim_from_delivery:0
msgid "Do not manage claims"
msgstr ""
@@ -1783,11 +1803,6 @@ msgid "Do not use Expiration Date"
msgstr ""
#. module: stock
-#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "Don't hesitate to send us an email to describe your experience or to suggest improvements!"
-msgstr ""
-
-#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_pack_operation_lot_qty
#: model:ir.model.fields,field_description:stock.field_stock_pack_operation_processed_boolean
#: model:ir.model.fields,field_description:stock.field_stock_pack_operation_qty_done
@@ -1857,7 +1872,7 @@ msgid "Every stock operation in Odoo moves the products from one\n"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:4183
+#: code:addons/stock/stock.py:4186
#, python-format
msgid "Everything inside a package should be in the same location"
msgstr ""
@@ -1939,13 +1954,6 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "For developers, <strong>you can use our\n"
-" API</strong> to load data automatically through\n"
-" scripts: take a look at our"
-msgstr ""
-
-#. module: stock
-#: model:ir.ui.view,arch_db:stock.inventory_planner
msgid "For the Odoo Team,<br/>\n"
" Fabien Pinckaers, Founder"
msgstr ""
@@ -2152,6 +2160,11 @@ msgid "History"
msgstr ""
#. module: stock
+#: model:ir.ui.view,arch_db:stock.inventory_planner
+msgid "How to use Lot Tracking:"
+msgstr ""
+
+#. module: stock
#: model:ir.model.fields,field_description:stock.field_make_procurement_id
#: model:ir.model.fields,field_description:stock.field_procurement_orderpoint_compute_id
#: model:ir.model.fields,field_description:stock.field_product_putaway_id
@@ -2178,7 +2191,7 @@ msgstr ""
#: model:ir.model.fields,field_description:stock.field_stock_picking_type_id
#: model:ir.model.fields,field_description:stock.field_stock_production_lot_id
#: model:ir.model.fields,field_description:stock.field_stock_quant_id
-#: model:ir.model.fields,field_description:stock.field_stock_quant_package_id_8184
+#: model:ir.model.fields,field_description:stock.field_stock_quant_package_id_8488
#: model:ir.model.fields,field_description:stock.field_stock_return_picking_id
#: model:ir.model.fields,field_description:stock.field_stock_return_picking_line_id
#: model:ir.model.fields,field_description:stock.field_stock_warehouse_id
@@ -2187,7 +2200,7 @@ msgid "ID"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3174
+#: code:addons/stock/stock.py:3177
#, python-format
msgid "INV:"
msgstr ""
@@ -2304,9 +2317,16 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "If you configured automatic procurement, Odoo will automatically generate\n"
+msgid "If you are a developer <strong>you can use our\n"
+" API</strong> to load data automatically through\n"
+" scripts: take a look at our"
+msgstr ""
+
+#. module: stock
+#: model:ir.ui.view,arch_db:stock.inventory_planner
+msgid "If you configured automatic procurement, Odoo automatically generates\n"
" Procurements Orders. You usually don't need to worry about them, but\n"
-" sometimes, the system can remain blocked without generating a\n"
+" sometimes the system can remain blocked without generating a\n"
" corresponding document, usually due to a configuration problem."
msgstr ""
@@ -2317,7 +2337,7 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "If you have less than 50 vendors, we recommand you\n"
+msgid "If you have less than 50 vendors, we recommend you\n"
" to create them manually."
msgstr ""
@@ -2356,14 +2376,9 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "In Odoo, <strong>Reordering Rules</strong> can be used to replenish your products: Odoo will automatically propose a procurement to buy new products if you are running out of stock."
-msgstr ""
-
-#. module: stock
-#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "In Odoo, inventory management is fully integrated with the sales and\n"
-" invoicing process. That means you can automate everything from the initial\n"
-" quotation, to the goods delivery and final invoice."
+msgid "In Odoo, <strong>Reordering Rules</strong> are used to replenish your products.\n"
+" Odoo will automatically propose a procurement to buy new products if you are\n"
+" running out of stock."
msgstr ""
#. module: stock
@@ -2383,14 +2398,14 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "In case of unique serial numbers, each serial number will correspond\n"
+msgid "In case of unique serial numbers, each serial number corresponds\n"
" to exactly one piece. In case of lots, you need to supply the quantity\n"
" for each lot when you move that product."
msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "In short, you will get a more efficient warehouse management that will lead\n"
+msgid "In short, you will get a more efficient warehouse management that leads\n"
" to inventory reduction and better efficiencies in your daily operations."
msgstr ""
@@ -2451,7 +2466,7 @@ msgid "Initial Inventory"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3752
+#: code:addons/stock/stock.py:3755
#: model:stock.location,name:stock.stock_location_company
#, python-format
msgid "Input"
@@ -2496,7 +2511,7 @@ msgid "Internal Reference"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3677
+#: code:addons/stock/stock.py:3680
#: model:stock.picking.type,name:stock.picking_type_internal
#, python-format
msgid "Internal Transfers"
@@ -2698,11 +2713,16 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
msgid "It is therefore a good idea to check and try to resolve those procurement\n"
-" exceptions, accessible from the Schedulers menu (you need the Stock\n"
+" exceptions. These are accessible from the Schedulers menu (you need the Stock\n"
" Manager role to see it)."
msgstr ""
#. module: stock
+#: model:ir.ui.view,arch_db:stock.inventory_planner
+msgid "It is time to make your initial Inventory. In order to do so:"
+msgstr ""
+
+#. module: stock
#: model:ir.model.fields,help:stock.field_stock_move_product_packaging
msgid "It specifies attributes of packaging like type, quantity of packaging,etc."
msgstr ""
@@ -2713,11 +2733,6 @@ msgid "It specifies goods to be deliver partially or all at once"
msgstr ""
#. module: stock
-#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "It's time to make your initial Inventory. To do so:"
-msgstr ""
-
-#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_picking_type_last_done_picking
msgid "Last 10 Done Pickings"
msgstr ""
@@ -2830,7 +2845,7 @@ msgid "Last Updated on"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:4727
+#: code:addons/stock/stock.py:4730
#: model:ir.ui.view,arch_db:stock.stock_picking_type_kanban
#: model:ir.ui.view,arch_db:stock.view_picking_internal_search
#, python-format
@@ -2880,6 +2895,12 @@ msgid "Let this field empty if this location is shared between companies"
msgstr ""
#. module: stock
+#: model:ir.ui.view,arch_db:stock.inventory_planner
+msgid "Like with the sales flow, Odoo inventory management is\n"
+" fully integrated with the purchase app."
+msgstr ""
+
+#. module: stock
#: model:ir.model,name:stock.model_stock_move_operation_link
msgid "Link between stock moves and pack operations"
msgstr ""
@@ -2993,7 +3014,7 @@ msgid "Lot BarCode"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:4470
+#: code:addons/stock/stock.py:4473
#, python-format
msgid "Lot Details"
msgstr ""
@@ -3047,8 +3068,8 @@ msgstr ""
#: model:ir.ui.view,arch_db:stock.inventory_planner
msgid "Lots can be encoded on incoming shipments, internal transfers and\n"
" outgoing deliveries according to the settings in the picking type.\n"
-" For every product, you can define if it does not do any lot tracking at all,\n"
-" if it tracks by lot, or by unique serial number."
+" The tracking can be configured on every product: not any tracing at\n"
+" all, tracking by lot, or tracking by unique serial number."
msgstr ""
#. module: stock
@@ -3062,7 +3083,7 @@ msgid "Make Procurements"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3460
+#: code:addons/stock/stock.py:3463
#: model:stock.location.route,name:stock.route_warehouse0_mto
#, python-format
msgid "Make To Order"
@@ -3165,12 +3186,6 @@ msgid "Messages"
msgstr ""
#. module: stock
-#: model:ir.model.fields,help:stock.field_stock_picking_message_ids
-#: model:ir.model.fields,help:stock.field_stock_production_lot_message_ids
-msgid "Messages and communication history"
-msgstr ""
-
-#. module: stock
#: model:ir.model.fields,field_description:stock.field_product_putaway_method
#: model:ir.model.fields,field_description:stock.field_product_removal_method
msgid "Method"
@@ -3444,12 +3459,7 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "Now a similar exercise but for a purchase flow."
-msgstr ""
-
-#. module: stock
-#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "Now, all your products have their quantity set correctly."
+msgid "Now, all your product quantities are correctly set."
msgstr ""
#. module: stock
@@ -3486,30 +3496,37 @@ msgid "Number of unread messages"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:4731
+#: code:addons/stock/stock.py:4734
#, python-format
msgid "OK"
msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "Odoo can manage <strong>advanced push/pull routes configuration</strong>, for example:"
+msgid "Odoo handles <strong>advanced push/pull routes configuration</strong>, for example:"
msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "Odoo can run advanced traceability by using Product Lots and Serial\n"
-" Numbers, usually identified by bar codes stuck on the products."
+msgid "Odoo has preconfigured <strong>one Warehouse</strong> for you."
msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "Odoo has preconfigured <strong>one Warehouse</strong> for you."
+msgid "Odoo inventory management is fully integrated with sales and\n"
+" invoicing process. Everything is automated from the initial\n"
+" quotation to the delivery and the final invoice."
+msgstr ""
+
+#. module: stock
+#: model:ir.ui.view,arch_db:stock.inventory_planner
+msgid "Odoo is able to run advanced traceability by using Product Lots and Serial\n"
+" Numbers, usually identified by bar codes stuck on the products."
msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "Of course, feel free to add your own; just remember that Odoo can convert units within the same category (for example, liters to gallons in the volume category)"
+msgid "Of course, feel free to add your own. Please note that Odoo is able to convert units within the same category, for example, liters to gallons in the volume category"
msgstr ""
#. module: stock
@@ -3530,29 +3547,29 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "Once it's fully working, give us some feedback: we love to hear from our customer. It would be great if you can send a photo of your warehouse to"
+msgid "Once it's fully working, give us some feedback: we love to hear from our customer. It would be great if you could send us a photo of your warehouse to"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:2876
+#: code:addons/stock/stock.py:2879
#, python-format
msgid "One Lot/Serial Number"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:2873
+#: code:addons/stock/stock.py:2876
#, python-format
msgid "One owner only"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:2874
+#: code:addons/stock/stock.py:2877
#, python-format
msgid "One product for a specific owner"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:2864
+#: code:addons/stock/stock.py:2867
#, python-format
msgid "One product only"
msgstr ""
@@ -3568,7 +3585,7 @@ msgid "Operation"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:4487
+#: code:addons/stock/stock.py:4490
#, python-format
msgid "Operation Details"
msgstr ""
@@ -3669,7 +3686,7 @@ msgid "Outgoing Shippings"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3754
+#: code:addons/stock/stock.py:3757
#: model:stock.location,name:stock.stock_location_output
#, python-format
msgid "Output"
@@ -3713,7 +3730,7 @@ msgid "P&L Qty"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3689
+#: code:addons/stock/stock.py:3692
#: model:ir.model.fields,field_description:stock.field_stock_inventory_line_package_id
#: model:ir.model.fields,field_description:stock.field_stock_picking_pack_operation_pack_ids
#, python-format
@@ -3811,7 +3828,7 @@ msgid "Packing Operation"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3755
+#: code:addons/stock/stock.py:3758
#: model:stock.location,name:stock.location_pack_zone
#, python-format
msgid "Packing Zone"
@@ -3897,19 +3914,19 @@ msgid "Physical Packages"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3701
+#: code:addons/stock/stock.py:3704
#, python-format
msgid "Pick"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3806
+#: code:addons/stock/stock.py:3809
#, python-format
msgid "Pick + Pack + Ship"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3805
+#: code:addons/stock/stock.py:3808
#, python-format
msgid "Pick + Ship"
msgstr ""
@@ -4353,7 +4370,7 @@ msgid "Qty Multiple must be greater than or equal to zero."
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3753
+#: code:addons/stock/stock.py:3756
#, python-format
msgid "Quality Control"
msgstr ""
@@ -4486,25 +4503,25 @@ msgid "Receipt Route"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3800
+#: code:addons/stock/stock.py:3803
#, python-format
msgid "Receipt in 1 step"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3801
+#: code:addons/stock/stock.py:3804
#, python-format
msgid "Receipt in 2 steps"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3802
+#: code:addons/stock/stock.py:3805
#, python-format
msgid "Receipt in 3 steps"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3653
+#: code:addons/stock/stock.py:3656
#: model:ir.actions.act_window,name:stock.action_receive_move
#: model:ir.ui.view,arch_db:stock.product_kanban_stock_view
#: model:stock.picking.type,name:stock.chi_picking_type_in
@@ -4886,7 +4903,7 @@ msgid "Search Stock Location Paths"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:2864
+#: code:addons/stock/stock.py:2867
#, python-format
msgid "Select products manually"
msgstr ""
@@ -4987,7 +5004,7 @@ msgid "Shelves (Y)"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3804
+#: code:addons/stock/stock.py:3807
#, python-format
msgid "Ship Only"
msgstr ""
@@ -5115,7 +5132,7 @@ msgid "Status"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3751
+#: code:addons/stock/stock.py:3754
#: model:stock.location,name:stock.stock_location_shop0
#: model:stock.location,name:stock.stock_location_stock
#, python-format
@@ -5217,6 +5234,12 @@ msgid "Stockable"
msgstr ""
#. module: stock
+#: code:addons/stock/product.py:400
+#, python-format
+msgid "Stockable Product"
+msgstr ""
+
+#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_location_route_supplied_wh_id
msgid "Supplied Warehouse"
msgstr ""
@@ -5314,6 +5337,11 @@ msgid "The 'Automatic Move' / 'Manual Operation' value will create a stock move
msgstr ""
#. module: stock
+#: model:ir.ui.view,arch_db:stock.inventory_planner
+msgid "The RFQ becomes a Purchase Order and a Transfer Order is created"
+msgstr ""
+
+#. module: stock
#: model:ir.model.fields,help:stock.field_product_product_sale_delay
#: model:ir.model.fields,help:stock.field_product_template_sale_delay
msgid "The average delay in days between the confirmation of the customer order and the delivery of the finished products. It's the time you promise to your customers."
@@ -5325,7 +5353,7 @@ msgid "The barcode for a location must be unique per company !"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:4313
+#: code:addons/stock/stock.py:4316
#, python-format
msgid "The chosen quantity for product %s is not compatible with the UoM rounding. It will be automatically converted at confirmation"
msgstr ""
@@ -5351,7 +5379,7 @@ msgid "The date that will be used for the stock level check of the products and
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3937
+#: code:addons/stock/stock.py:3940
#, python-format
msgid "The default resupply warehouse should be different than the warehouse itself!"
msgstr ""
@@ -5426,12 +5454,17 @@ msgid "The push rule that created this stock move"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:4418
+#: code:addons/stock/stock.py:4421
#, python-format
msgid "The quantity to split should be smaller than the quantity To Do. "
msgstr ""
#. module: stock
+#: model:ir.ui.view,arch_db:stock.inventory_planner
+msgid "The quotation becomes a Sale Order and a Transfer Order is created"
+msgstr ""
+
+#. module: stock
#: code:addons/stock/stock.py:1884
#, python-format
msgid "The requested operation cannot be processed because of a programming error setting the `product_qty` field instead of the `product_uom_qty`."
@@ -5444,7 +5477,7 @@ msgid "The roundings of your Unit of Measures %s on the move vs. %s on the produ
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:4306
+#: code:addons/stock/stock.py:4309
#, python-format
msgid "The selected UoM for product %s is not compatible with the UoM set on the product form. \n"
"Please choose an UoM within the same UoM category."
@@ -5515,13 +5548,13 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "This guide will help you get started with Odoo Inventory.\n"
+msgid "This guide helps getting started with Odoo Inventory.\n"
" Once you are done, you will benefit from:"
msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "This is quite complex to set up, so <strong>contact your Projet Manager</strong> and he will take care of this for you"
+msgid "This is quite complex to set up, so <strong>contact your Project Manager</strong> to address this."
msgstr ""
#. module: stock
@@ -5649,13 +5682,9 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "To better understand a complete sales flow, follow these steps:"
-msgstr ""
-
-#. module: stock
-#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "To check the trajectory of a lot, you can find it back in <strong><i>Inventory Control &gt; Serial Numbers</i></strong>\n"
-" and then Traceability or you can filter the Quantitative Valuation of a product with a certain lot."
+msgid "To check the trajectory of a lot, find it back in <strong><i>Inventory Control &gt; Serial Numbers / lots</i></strong>.\n"
+" Choose a Lo t in the list and click on <i>Traceability</i>i&gt;. You may also\n"
+" filter the Quantitative Valuation of a product with a certain lot."
msgstr ""
#. module: stock
@@ -5665,11 +5694,6 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "To use Lot Tracking:"
-msgstr ""
-
-#. module: stock
-#: model:ir.ui.view,arch_db:stock.inventory_planner
msgid "To use more precise units like pounds or kilograms, activate<i> Some products may be sold/purchased in different unit of measures (advanced)</i> in the"
msgstr ""
@@ -5717,7 +5741,7 @@ msgid "Tracking"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:2832
+#: code:addons/stock/stock.py:2835
#: model:ir.model,name:stock.model_stock_picking
#: model:ir.ui.view,arch_db:stock.stock_picking_type_kanban
#: model:ir.ui.view,arch_db:stock.view_picking_form
@@ -5726,6 +5750,11 @@ msgid "Transfer"
msgstr ""
#. module: stock
+#: model:ir.model.fields,field_description:stock.field_stock_move_picking_partner_id
+msgid "Transfer Destination Address"
+msgstr ""
+
+#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_move_picking_id
msgid "Transfer Reference"
msgstr ""
@@ -5828,14 +5857,14 @@ msgid "Units of Measures"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:4166
+#: code:addons/stock/stock.py:4169
#, python-format
msgid "Unknown Pack"
msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "Unless you are starting a new business, you probably have a list of vendors you'd like to import."
+msgid "Unless you are starting a new business, you probably have a list of vendors you would like to import."
msgstr ""
#. module: stock
@@ -6084,7 +6113,7 @@ msgid "Warehouse to consider for the route selection"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:3974
+#: code:addons/stock/stock.py:3977
#, python-format
msgid "Warehouse's Routes"
msgstr ""
@@ -6105,20 +6134,20 @@ msgid "Warning!"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:4305
+#: code:addons/stock/stock.py:4308
#, python-format
msgid "Warning: wrong UoM!"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:4312
+#: code:addons/stock/stock.py:4315
#, python-format
msgid "Warning: wrong quantity!"
msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "We can handle the whole import process\n"
+msgid "We handle the whole import process\n"
" for you: simply send your Odoo project\n"
" manager a CSV file containing all your\n"
" data."
@@ -6126,7 +6155,7 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "We can handle the whole import process\n"
+msgid "We handle the whole import process\n"
" for you: simply send your Odoo project\n"
" manager a CSV file containing all your\n"
" products."
@@ -6171,7 +6200,7 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "When everyting is set, click on <i>Start Inventory</i>"
+msgid "When everything is set, click on <i>Start Inventory</i>"
msgstr ""
#. module: stock
@@ -6253,7 +6282,7 @@ msgid "You can not change the unit of measure of a product that has already been
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:4429
+#: code:addons/stock/stock.py:4432
#, python-format
msgid "You can not delete pack operations of a done picking"
msgstr ""
@@ -6271,6 +6300,11 @@ msgid "You can only delete draft moves."
msgstr ""
#. module: stock
+#: model:ir.ui.view,arch_db:stock.inventory_planner
+msgid "You can review and edit the predefined units via the"
+msgstr ""
+
+#. module: stock
#: code:addons/stock/stock.py:2435
#, python-format
msgid "You cannot cancel a stock move that has been set to 'Done'."
@@ -6283,7 +6317,7 @@ msgid "You cannot move to a location of type view %s."
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:2943
+#: code:addons/stock/stock.py:2946
#, python-format
msgid "You cannot set a negative product quantity in an inventory line:\n"
" %s - qty: %s"
@@ -6365,7 +6399,7 @@ msgstr ""
#. module: stock
#: code:addons/stock/stock.py:2320
-#: code:addons/stock/stock.py:4440
+#: code:addons/stock/stock.py:4443
#, python-format
msgid "You need to provide a Lot/Serial Number for product %s"
msgstr ""
@@ -6377,7 +6411,7 @@ msgid "You should only receive by the piece with the same serial number"
msgstr ""
#. module: stock
-#: code:addons/stock/stock.py:4444
+#: code:addons/stock/stock.py:4447
#, python-format
msgid "You should provide a different serial number for each piece"
msgstr ""
@@ -6408,11 +6442,6 @@ msgid "Your Warehouse"
msgstr ""
#. module: stock
-#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "Your can review and edit the pre-defined units via the"
-msgstr ""
-
-#. module: stock
#: model:ir.ui.view,arch_db:stock.view_change_product_quantity
#: model:ir.ui.view,arch_db:stock.view_immediate_transfer
msgid "_Apply"
@@ -6427,26 +6456,11 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "a Purchase Order and a Transfer Order have been created"
-msgstr ""
-
-#. module: stock
-#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "a Sale Order and a Transfer Order have been created"
-msgstr ""
-
-#. module: stock
-#: model:ir.ui.view,arch_db:stock.inventory_planner
msgid "a stockable Product"
msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "and print the invoice."
-msgstr ""
-
-#. module: stock
-#: model:ir.ui.view,arch_db:stock.inventory_planner
msgid "and simply enter a minimum and maximum quantity."
msgstr ""
@@ -6484,12 +6498,12 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "either by processing it one line at a time by clicking on the <span class=\"fa fa-gears\"/> button, or as a whole with the <i>Validate</i> button"
+msgid "either by manually updating the Done quantity on the product lines, or let Odoo do it automatically while validating"
msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "either manually by clicking on the <span class=\"fa fa-gears\"/> button on the product lines, or scan them with the Odoo Barcode app"
+msgid "either by manually updating the Done quantity on the product lines, or scan them with the Odoo Barcode app, or let Odoo do it automatically while validating"
msgstr ""
#. module: stock
@@ -6499,7 +6513,7 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "for a customer and add some products"
+msgid "for a customer and add products"
msgstr ""
#. module: stock
@@ -6510,7 +6524,12 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "in the list"
+msgid "from your vendor with the products and the requested quantities"
+msgstr ""
+
+#. module: stock
+#: model:ir.ui.view,arch_db:stock.inventory_planner
+msgid "is displayed on the transfer if your products supply chain is properly configured. Otherwise, <strong>Check the availability</strong> manually"
msgstr ""
#. module: stock
@@ -6530,7 +6549,12 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "on the form to get the Transfer Order"
+msgid "on the purchase order form or click on <i>Receive Products</i> to see the Transfer Order"
+msgstr ""
+
+#. module: stock
+#: model:ir.ui.view,arch_db:stock.inventory_planner
+msgid "on the sale order form to see Transfer Order"
msgstr ""
#. module: stock
@@ -6544,11 +6568,6 @@ msgid "report.stock.forecast"
msgstr ""
#. module: stock
-#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "shoud be displayed on the transfer if your products supply chain is properly configured. Otherwise, <strong>Check the availability</strong> manually"
-msgstr ""
-
-#. module: stock
#: model:ir.model,name:stock.model_stock_config_settings
msgid "stock.config.settings"
msgstr ""
@@ -6617,7 +6636,7 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.inventory_planner
-msgid "with the products and their desired quantities to your vendor"
+msgid "with the <i>Validate</i> button"
msgstr ""
#. module: stock
@@ -6629,4 +6648,3 @@ msgstr ""
#: model:ir.ui.view,arch_db:stock.view_inventory_form
msgid "⇒ Set quantities to 0"
msgstr ""
-
diff --git a/addons/stock/product.py b/addons/stock/product.py
index edf63baa840..6d348e54d68 100644
--- a/addons/stock/product.py
+++ b/addons/stock/product.py
@@ -397,7 +397,7 @@ class product_template(osv.osv):
def _get_product_template_type(self, cr, uid, context=None):
res = super(product_template, self)._get_product_template_type(cr, uid, context=context)
if 'product' not in [item[0] for item in res]:
- res.append(('product', 'Stockable Product'))
+ res.append(('product', _('Stockable Product')))
return res
_columns = {
diff --git a/addons/stock/stock.py b/addons/stock/stock.py
index 7acb847d79d..6abe11460b5 100644
--- a/addons/stock/stock.py
+++ b/addons/stock/stock.py
@@ -529,7 +529,7 @@ class stock_quant(osv.osv):
elif removal_strategy == 'lifo':
order = 'in_date desc, id desc'
return self._quants_get_order(cr, uid, quantity, move, ops=ops, domain=domain, orderby=order, context=context)
- raise UserError(_('Removal strategy %s not implemented.' % (removal_strategy,)))
+ raise UserError(_('Removal strategy %s not implemented.') % (removal_strategy,))
def _quant_create(self, cr, uid, qty, move, lot_id=False, owner_id=False, src_package_id=False, dest_package_id=False,
force_location_from=False, force_location_to=False, context=None):
@@ -2952,7 +2952,7 @@ class stock_inventory(osv.osv):
for inv in self.browse(cr, uid, ids, context=context):
for inventory_line in inv.line_ids:
if inventory_line.product_qty < 0 and inventory_line.product_qty != inventory_line.theoretical_qty:
- raise UserError(_('You cannot set a negative product quantity in an inventory line:\n\t%s - qty: %s' % (inventory_line.product_id.name, inventory_line.product_qty)))
+ raise UserError(_('You cannot set a negative product quantity in an inventory line:\n\t%s - qty: %s') % (inventory_line.product_id.name, inventory_line.product_qty))
self.action_check(cr, uid, [inv.id], context=context)
self.write(cr, uid, [inv.id], {'state': 'done'}, context=context)
self.post_inventory(cr, uid, inv, context=context)
diff --git a/addons/survey/wizard/survey_email_compose_message.py b/addons/survey/wizard/survey_email_compose_message.py
index 0272ad0444c..55e326b3750 100644
--- a/addons/survey/wizard/survey_email_compose_message.py
+++ b/addons/survey/wizard/survey_email_compose_message.py
@@ -75,7 +75,7 @@ class survey_mail_compose_message(osv.TransientModel):
else:
emails_checked.append(email)
if error_message:
- raise UserError(_("One email at least is incorrect: %s" % error_message))
+ raise UserError(_("One email at least is incorrect: %s") % error_message)
emails_checked.sort()
values = {'multi_email': '\n'.join(emails_checked)}
diff --git a/addons/web/i18n/web.pot b/addons/web/i18n/web.pot
index b2bb27eface..0414d335633 100644
--- a/addons/web/i18n/web.pot
+++ b/addons/web/i18n/web.pot
@@ -4,10 +4,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 9.0\n"
+"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-10-12 14:29+0000\n"
-"PO-Revision-Date: 2015-10-12 14:29+0000\n"
+"POT-Creation-Date: 2016-01-13 14:43+0000\n"
+"PO-Revision-Date: 2016-01-13 14:43+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -181,6 +181,13 @@ msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:106
+#, python-format
+msgid "(Community Edition)"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/xml/base_common.xml:100
#, python-format
msgid "(no string)"
@@ -219,6 +226,14 @@ msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/widgets/user_menu.js:81
+#: code:addons/web/static/src/xml/base.xml:84
+#, python-format
+msgid "About"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/framework/crash_manager.js:25
#, python-format
msgid "Access Denied"
@@ -233,6 +248,13 @@ msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:1503
+#, python-format
+msgid "Access to all Enterprise Apps"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/widgets/sidebar.js:24
#, python-format
msgid "Action"
@@ -254,72 +276,79 @@ msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/js/views/form_widgets.js:666
+#: code:addons/web/static/src/js/views/form_widgets.js:660
#, python-format
msgid "Activate"
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/js/views/form_widgets.js:663
+#: code:addons/web/static/src/xml/base.xml:96
+#, python-format
+msgid "Activate the developer mode"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/form_widgets.js:657
#, python-format
msgid "Active"
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/js/views/form_relational_widgets.js:1357
-#: code:addons/web/static/src/xml/base.xml:1059
-#: code:addons/web/static/src/xml/base.xml:1299
+#: code:addons/web/static/src/js/views/form_relational_widgets.js:1367
+#: code:addons/web/static/src/xml/base.xml:1110
+#: code:addons/web/static/src/xml/base.xml:1343
#, python-format
msgid "Add"
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/xml/base.xml:1172
+#: code:addons/web/static/src/xml/base.xml:1216
#, python-format
msgid "Add Custom Filter"
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/xml/base.xml:1173
+#: code:addons/web/static/src/xml/base.xml:1217
#, python-format
msgid "Add a condition"
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/js/views/form_relational_widgets.js:1006
+#: code:addons/web/static/src/js/views/form_relational_widgets.js:1016
#, python-format
msgid "Add an item"
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/xml/base.xml:1183
+#: code:addons/web/static/src/xml/base.xml:1227
#, python-format
msgid "Add custom group"
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/xml/base.xml:272
+#: code:addons/web/static/src/xml/base.xml:323
#, python-format
msgid "Add..."
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/js/views/form_relational_widgets.js:1298
+#: code:addons/web/static/src/js/views/form_relational_widgets.js:1308
#, python-format
msgid "Add: "
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/xml/base.xml:1079
+#: code:addons/web/static/src/xml/base.xml:1123
#, python-format
msgid "Advanced Search..."
msgstr ""
@@ -333,22 +362,29 @@ msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/xml/base.xml:513
+#: code:addons/web/static/src/xml/base.xml:564
#, python-format
msgid "All users"
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/xml/base.xml:1173
-#: code:addons/web/static/src/xml/base.xml:1193
+#: code:addons/web/static/src/xml/base.xml:1508
+#, python-format
+msgid "And more"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:1217
+#: code:addons/web/static/src/xml/base.xml:1237
#, python-format
msgid "Apply"
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/js/views/form_widgets.js:670
+#: code:addons/web/static/src/js/views/form_widgets.js:664
#: code:addons/web/static/src/js/views/list_view.js:308
#, python-format
msgid "Archive"
@@ -370,34 +406,41 @@ msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/xml/base.xml:244
+#: code:addons/web/static/src/xml/base.xml:295
#, python-format
msgid "Attachment :"
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/xml/base.xml:1283
+#: code:addons/web/static/src/xml/base.xml:1327
#, python-format
msgid "Available fields"
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/xml/base.xml:565
+#: code:addons/web/static/src/xml/base.xml:616
#, python-format
msgid "Bar Chart"
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/js/views/list_view.js:1946
+#: code:addons/web/static/src/js/views/list_view.js:1955
#, python-format
msgid "Binary file"
msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:1507
+#, python-format
+msgid "Bugfixes guarantee"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/xml/base_common.xml:97
#, python-format
msgid "Button"
@@ -516,22 +559,23 @@ msgstr ""
msgid "Context:"
msgstr ""
-#: code:addons/web/static/src/xml/base.xml:80
-#: code:addons/web/static/src/xml/base_common.xml:159
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:116
#, python-format
msgid "Copyright © 2004-2015 Odoo S.A."
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/js/views/form_widgets.js:1351
+#: code:addons/web/static/src/js/views/form_widgets.js:1347
#, python-format
msgid "Could not display the selected image."
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/js/views/list_view.js:1101
+#: code:addons/web/static/src/js/views/list_view.js:1110
#, python-format
msgid "Could not find id in dataset"
msgstr ""
@@ -626,21 +670,28 @@ msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/xml/base.xml:624
+#: code:addons/web/static/src/xml/base.xml:110
+#, python-format
+msgid "Database expiration:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:675
#, python-format
msgid "Day"
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/js/views/form_widgets.js:664
+#: code:addons/web/static/src/js/views/form_widgets.js:658
#, python-format
msgid "Deactivate"
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/xml/base.xml:470
+#: code:addons/web/static/src/xml/base.xml:521
#, python-format
msgid "Default:"
msgstr ""
@@ -700,6 +751,13 @@ msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:82
+#, python-format
+msgid "Documentation"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/xml/base_common.xml:63
#, python-format
msgid "Domain:"
@@ -949,20 +1007,27 @@ msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/xml/base.xml:1169
+#: code:addons/web/static/src/xml/base.xml:1213
#, python-format
msgid "Filters"
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/xml/base.xml:598
+#: code:addons/web/static/src/xml/base.xml:649
#, python-format
msgid "Flip axis"
msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:119
+#, python-format
+msgid "For more information visit"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/views/form_view.js:34
#: code:addons/web/static/src/js/views/form_view.js:357
#, python-format
@@ -971,6 +1036,20 @@ msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:118
+#, python-format
+msgid "GNU Lesser General Public License"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:1500
+#, python-format
+msgid "Get this feature and much more with Odoo Enterprise!"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/framework/crash_manager.js:24
#, python-format
msgid "Global Business Error"
@@ -1051,41 +1130,48 @@ msgstr ""
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/widgets/debug_manager.js:106
-#: code:addons/web/static/src/xml/base.xml:165
+#: code:addons/web/static/src/xml/base.xml:211
#, python-format
msgid "JS Tests"
msgstr ""
#. module: web
-#: code:addons/web/controllers/main.py:845
+#: code:addons/web/controllers/main.py:769
#, python-format
msgid "Languages"
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/xml/base.xml:208
+#: code:addons/web/static/src/xml/base.xml:254
#, python-format
msgid "Latest Modification Date:"
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/xml/base.xml:204
+#: code:addons/web/static/src/xml/base.xml:250
#, python-format
msgid "Latest Modification by:"
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/xml/base.xml:177
+#: code:addons/web/static/src/xml/base.xml:223
#, python-format
msgid "Leave Debug Mode"
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/xml/base.xml:566
+#: code:addons/web/static/src/xml/base.xml:118
+#, python-format
+msgid "Licenced under the terms of"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:617
#, python-format
msgid "Line Chart"
msgstr ""
@@ -1213,6 +1299,13 @@ msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:1505
+#, python-format
+msgid "Mobile support"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/widgets/debug_manager.js:129
#, python-format
msgid "Model %s fields"
@@ -1316,6 +1409,13 @@ msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:1504
+#, python-format
+msgid "New design"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/views/search_inputs.js:330
#, python-format
msgid "No"
@@ -1430,6 +1530,13 @@ msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:101
+#, python-format
+msgid "Odoo (Formerly OpenERP)"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/apps.js:189
#, python-format
msgid "Odoo Apps will be available soon"
@@ -1437,19 +1544,40 @@ msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/js/views/form_widgets.js:1678
+#: code:addons/web/static/src/js/views/form_widgets.js:1675
#, python-format
msgid "Odoo Enterprise"
msgstr ""
#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:117
+#, python-format
+msgid "Odoo S.A."
+msgstr ""
+
+#. module: web
#: model:ir.ui.view,arch_db:web.qunit_suite
msgid "Odoo Web Tests"
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/js/views/form_widgets.js:677
+#: code:addons/web/static/src/xml/base.xml:117
+#, python-format
+msgid "Odoo is a trademark of"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:119
+#, python-format
+msgid "Odoo.com"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/form_widgets.js:671
#, python-format
msgid "Off"
msgstr ""
@@ -1487,24 +1615,31 @@ msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/js/widgets/progress_bar.js:76
+#: code:addons/web/static/src/js/widgets/progress_bar.js:79
#, python-format
msgid "Only Integer Value should be valid."
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/xml/base.xml:506
+#: code:addons/web/static/src/xml/base.xml:557
#, python-format
msgid "Only you"
msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:198
+#, python-format
+msgid "Open Debug Menu"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/views/form_relational_widgets.js:153
-#: code:addons/web/static/src/js/views/form_relational_widgets.js:924
-#: code:addons/web/static/src/js/views/form_relational_widgets.js:1088
-#: code:addons/web/static/src/js/views/form_relational_widgets.js:1314
+#: code:addons/web/static/src/js/views/form_relational_widgets.js:928
+#: code:addons/web/static/src/js/views/form_relational_widgets.js:1098
+#: code:addons/web/static/src/js/views/form_relational_widgets.js:1324
#, python-format
msgid "Open: "
msgstr ""
@@ -1856,14 +1991,21 @@ msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/js/views/form_widgets.js:676
+#: code:addons/web/static/src/xml/base.xml:83
+#, python-format
+msgid "Support"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/form_widgets.js:670
#, python-format
msgid "Switch Off"
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/js/views/form_widgets.js:678
+#: code:addons/web/static/src/js/views/form_widgets.js:672
#, python-format
msgid "Switch On"
msgstr ""
@@ -2105,36 +2247,36 @@ msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/js/framework/data.js:1113
+#: code:addons/web/static/src/js/framework/data.js:1120
#, python-format
msgid "Unsupported operator %s in domain %s"
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/js/views/form_widgets.js:1661
+#: code:addons/web/static/src/js/views/form_widgets.js:1658
#, python-format
msgid "Upgrade now"
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/js/views/form_widgets.js:1658
+#: code:addons/web/static/src/xml/base.xml:1506
#, python-format
-msgid "Upgrade to <a href=\"https://www.odoo.com/editions\">Odoo Enterprise</a> to activate this feature."
+msgid "Upgrade to future versions"
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/xml/base.xml:919
-#: code:addons/web/static/src/xml/base.xml:980
+#: code:addons/web/static/src/xml/base.xml:970
+#: code:addons/web/static/src/xml/base.xml:1031
#, python-format
msgid "Uploading ..."
msgstr ""
#. module: web
#. openerp-web
-#: code:addons/web/static/src/js/views/form_relational_widgets.js:1620
+#: code:addons/web/static/src/js/views/form_relational_widgets.js:1633
#: code:addons/web/static/src/js/widgets/sidebar.js:168
#, python-format
msgid "Uploading Error"
@@ -2163,6 +2305,13 @@ msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:105
+#, python-format
+msgid "Version"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/widgets/priority.js:51
#, python-format
msgid "Very High"
diff --git a/addons/web/static/src/js/views/form_widgets.js b/addons/web/static/src/js/views/form_widgets.js
index 96107503a5f..4d39d8df806 100644
--- a/addons/web/static/src/js/views/form_widgets.js
+++ b/addons/web/static/src/js/views/form_widgets.js
@@ -81,7 +81,6 @@ var WidgetButton = common.FormWidget.extend({
},
on_confirmed: function() {
var self = this;
-
var context = this.build_context();
return this.view.do_execute_action(
_.extend({}, this.node.attrs, {context: context}),
@@ -89,6 +88,8 @@ var WidgetButton = common.FormWidget.extend({
if (!_.isObject(reason)) {
self.view.recursive_reload();
}
+ }).fail(function () {
+ self.view.recursive_reload();
});
},
check_disable: function() {
diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml
index ce4b04a5a87..713a1cf18de 100644
--- a/addons/web/static/src/xml/base.xml
+++ b/addons/web/static/src/xml/base.xml
@@ -195,7 +195,7 @@
<t t-name="WebClient.DebugManager">
<li class="oe_debug_manager">
- <a href="#" t-att-title='_t("Open Debug Menu")' class="dropdown-toggle oe_debug_button" data-toggle="dropdown">
+ <a href="#" title="Open Debug Menu" class="dropdown-toggle oe_debug_button" data-toggle="dropdown">
<span class="fa fa-bug"/>
<b class="caret"/>
</a>
diff --git a/addons/web_editor/static/src/js/rte.js b/addons/web_editor/static/src/js/rte.js
index 85721ba0387..becaf978d17 100644
--- a/addons/web_editor/static/src/js/rte.js
+++ b/addons/web_editor/static/src/js/rte.js
@@ -513,13 +513,21 @@ var RTE = Widget.extend({
}
if ($target.is('a')) {
+ // add contenteditable on link to improve its editing behaviour
$target.attr('contenteditable', true);
setTimeout(function () {
$editable.attr('contenteditable', false);
});
- } else if ($editable.attr('contenteditable') === 'false') {
- $target.removeAttr('contenteditable');
- $editable.attr('contenteditable', true);
+ // once clicked outside, remove contenteditable on link
+ var reactive_editable = function(e){
+ if($target.is(e.target)) {
+ return;
+ }
+ $target.removeAttr('contenteditable');
+ $editable.attr('contenteditable', true);
+ $(document).off('mousedown', reactive_editable);
+ }
+ $(document).on('mousedown', reactive_editable);
}
if (this && this.$last && (!$editable.size() || this.$last[0] != $editable[0])) {
diff --git a/addons/web_editor/static/src/js/rte.summernote.js b/addons/web_editor/static/src/js/rte.summernote.js
index 01020a84c22..094d13340dc 100644
--- a/addons/web_editor/static/src/js/rte.summernote.js
+++ b/addons/web_editor/static/src/js/rte.summernote.js
@@ -764,7 +764,7 @@ eventHandler.attach = function (oLayoutInfo, options) {
.add(oLayoutInfo.handle())
.add(oLayoutInfo.popover())
.add(custom_toolbar)
- .on('click keyup', function () {
+ .on('click content_changed', function () {
$('button[data-event="undo"]', $toolbar).attr('disabled', !oLayoutInfo.editable().data('NoteHistory').hasUndo());
$('button[data-event="redo"]', $toolbar).attr('disabled', !oLayoutInfo.editable().data('NoteHistory').hasRedo());
});
diff --git a/addons/website/models/website.py b/addons/website/models/website.py
index 194fa73f9be..1e598b9a937 100644
--- a/addons/website/models/website.py
+++ b/addons/website/models/website.py
@@ -300,12 +300,12 @@ class website(osv.osv):
for page in View.browse(cr, uid, pages, context=context):
if page.page:
dep[page_key].append({
- 'text': _('Page <b>%s</b> seems to have a link to this page !' % page.key),
+ 'text': _('Page <b>%s</b> seems to have a link to this page !') % page.key,
'link': '/page/%s' % page.key
})
else:
dep[page_key].append({
- 'text': _('Template <b>%s (id:%s)</b> seems to have a link to this page !' % (page.key, page.id)),
+ 'text': _('Template <b>%s (id:%s)</b> seems to have a link to this page !') % (page.key, page.id),
'link': '#'
})
@@ -321,7 +321,7 @@ class website(osv.osv):
dep[menu_key] = []
for menu in Menu.browse(cr, uid, menus, context=context):
dep[menu_key].append({
- 'text': _('Menu <b>%s</b> seems to have a link to this page !' % menu.name),
+ 'text': _('Menu <b>%s</b> seems to have a link to this page !') % menu.name,
'link': False
})
diff --git a/addons/website/static/src/js/website.snippets.editor.js b/addons/website/static/src/js/website.snippets.editor.js
index 6015f740301..0da262f145e 100644
--- a/addons/website/static/src/js/website.snippets.editor.js
+++ b/addons/website/static/src/js/website.snippets.editor.js
@@ -326,7 +326,9 @@ options.registry.marginAndResize = options.Class.extend({
$body.removeClass(cursor);
setTimeout(function () {
self.buildingBlock.editor_busy = false;
- self.$target.closest(".o_editable").trigger("content_changed");
+ if (begin !== current) {
+ self.buildingBlock.parent.rte.historyRecordUndo(self.$target, 'resize_' + XY);
+ }
},0);
self.$target.removeClass("resize_editor_busy");
};
@@ -336,8 +338,8 @@ options.registry.marginAndResize = options.Class.extend({
this.$overlay.find(".oe_handle.size .auto_size").on('click', function (event){
self.$target.css("height", "");
self.$target.css("overflow", "");
+ self.buildingBlock.parent.rte.historyRecordUndo(self.$target, 'resize_Y');
self.buildingBlock.cover_target(self.$overlay, self.$target);
- self.$target.closest(".o_editable").trigger("content_changed");
return false;
});
},
diff --git a/addons/website_blog/models/website_blog.py b/addons/website_blog/models/website_blog.py
index cb2743b9652..d3d8569a3b1 100644
--- a/addons/website_blog/models/website_blog.py
+++ b/addons/website_blog/models/website_blog.py
@@ -289,7 +289,7 @@ class Website(osv.Model):
dep[page_key] = []
for p in post_obj.browse(cr, uid, posts, context=context):
dep[page_key].append({
- 'text': _('Blog Post <b>%s</b> seems to have a link to this page !' % p.name),
+ 'text': _('Blog Post <b>%s</b> seems to have a link to this page !') % p.name,
'link': p.website_url
})
diff --git a/addons/website_forum/models/forum.py b/addons/website_forum/models/forum.py
index 629cf0e125f..91569312d10 100644
--- a/addons/website_forum/models/forum.py
+++ b/addons/website_forum/models/forum.py
@@ -137,13 +137,7 @@ class Forum(models.Model):
if (self.default_post_type == 'question' and not self.allow_question) \
or (self.default_post_type == 'discussion' and not self.allow_discussion) \
or (self.default_post_type == 'link' and not self.allow_link):
- raise UserError(_('You cannot choose %s as default post since the forum does not allow it.' % self.default_post_type))
-
- @api.one
- @api.constrains('allow_link', 'allow_question', 'allow_discussion', 'default_post_type')
- def _check_default_post_type(self):
- if self.default_post_type == 'link' and not self.allow_link or self.default_post_type == 'question' and not self.allow_question or self.default_post_type == 'discussion' and not self.allow_discussion:
- raise Warning(_('Post type in "Default post" must be activated'))
+ raise UserError(_('You cannot choose %s as default post since the forum does not allow it.') % self.default_post_type)
@api.one
def _compute_count_posts_waiting_validation(self):
@@ -380,7 +374,7 @@ class Post(models.Model):
if (self.post_type == 'question' and not self.forum_id.allow_question) \
or (self.post_type == 'discussion' and not self.forum_id.allow_discussion) \
or (self.post_type == 'link' and not self.forum_id.allow_link):
- raise UserError(_('This forum does not allow %s' % self.post_type))
+ raise UserError(_('This forum does not allow %s') % self.post_type)
def _update_content(self, content, forum_id):
forum = self.env['forum.forum'].browse(forum_id)
@@ -479,26 +473,20 @@ class Post(models.Model):
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
for post in self:
if post.state == 'active' and post.parent_id:
- body = _(
- '<p>A new answer for <i>%s</i> has been posted. <a href="%s/forum/%s/question/%s">Click here to access the post.</a></p>' %
- (post.parent_id.name, base_url, slug(post.parent_id.forum_id), slug(post.parent_id))
- )
+ body = _('<p>A new answer for <i>%s</i> has been posted. <a href="%s/forum/%s/question/%s">Click here to access the post.</a></p>') % \
+ (post.parent_id.name, base_url, slug(post.parent_id.forum_id), slug(post.parent_id))
post.parent_id.message_post(subject=_('Re: %s') % post.parent_id.name, body=body, subtype='website_forum.mt_answer_new')
elif post.state == 'active' and not post.parent_id:
- body = _(
- '<p>A new question <i>%s</i> has been asked on %s. <a href="%s/forum/%s/question/%s">Click here to access the question.</a></p>' %
- (post.name, post.forum_id.name, base_url, slug(post.forum_id), slug(post))
- )
+ body = _('<p>A new question <i>%s</i> has been asked on %s. <a href="%s/forum/%s/question/%s">Click here to access the question.</a></p>') % \
+ (post.name, post.forum_id.name, base_url, slug(post.forum_id), slug(post))
post.message_post(subject=post.name, body=body, subtype='website_forum.mt_question_new')
elif post.state == 'pending' and not post.parent_id:
# TDE FIXME: in master, you should probably use a subtype;
# however here we remove subtype but set partner_ids
partners = post.sudo().message_partner_ids.filtered(lambda partner: partner.user_ids and partner.user_ids.karma >= post.forum_id.karma_moderate)
note_subtype = self.sudo().env.ref('mail.mt_note')
- body = _(
- '<p>A new question <i>%s</i> has been asked on %s and require your validation. <a href="%s/forum/%s/question/%s">Click here to access the question.</a></p>' %
- (post.name, post.forum_id.name, base_url, slug(post.forum_id), slug(post))
- )
+ body = _('<p>A new question <i>%s</i> has been asked on %s and require your validation. <a href="%s/forum/%s/question/%s">Click here to access the question.</a></p>') % \
+ (post.name, post.forum_id.name, base_url, slug(post.forum_id), slug(post))
post.message_post(subject=post.name, body=body, subtype_id=note_subtype.id, partner_ids=partners.ids)
return True
diff --git a/addons/website_sale_digital/i18n/website_sale_digital.pot b/addons/website_sale_digital/i18n/website_sale_digital.pot
index e3e2d31a410..8e2683e9f98 100644
--- a/addons/website_sale_digital/i18n/website_sale_digital.pot
+++ b/addons/website_sale_digital/i18n/website_sale_digital.pot
@@ -33,6 +33,12 @@ msgid "Digital Attachments"
msgstr ""
#. module: website_sale_digital
+#: code:addons/website_sale_digital/product.py:22
+#, python-format
+msgid "Digital Content"
+msgstr ""
+
+#. module: website_sale_digital
#: model:ir.ui.view,arch_db:website_sale_digital.orders_followup_downloads
msgid "Downloads <span class=\"caret\"/>"
msgstr ""
diff --git a/addons/website_sale_digital/product.py b/addons/website_sale_digital/product.py
index 8262d31d94e..54852cd9c74 100644
--- a/addons/website_sale_digital/product.py
+++ b/addons/website_sale_digital/product.py
@@ -19,7 +19,7 @@ class product_template(models.Model):
def _get_product_template_type(self):
res = super(product_template, self)._get_product_template_type()
if 'digital' not in [item[0] for item in res]:
- res.append(('digital', 'Digital Content'))
+ res.append(('digital', _('Digital Content')))
return res
@api.multi
diff --git a/addons/website_slides/controllers/main.py b/addons/website_slides/controllers/main.py
index 6190bbc675b..ecb6520b4d7 100644
--- a/addons/website_slides/controllers/main.py
+++ b/addons/website_slides/controllers/main.py
@@ -282,11 +282,11 @@ class website_slides(http.Controller):
return preview
existing_slide = Slide.search([('channel_id', '=', int(data['channel_id'])), ('document_id', '=', document_id)], limit=1)
if existing_slide:
- preview['error'] = _('This video already exists in this channel <a target="_blank" href="/slides/slide/%s">click here to view it </a>' % existing_slide.id)
+ preview['error'] = _('This video already exists in this channel <a target="_blank" href="/slides/slide/%s">click here to view it </a>') % existing_slide.id
return preview
values = Slide._parse_document_url(data['url'], only_preview_fields=True)
if values.get('error'):
- preview['error'] = _('Could not fetch data from url. Document or access right not available.\nHere is the received response: %s' % values['error'])
+ preview['error'] = _('Could not fetch data from url. Document or access right not available.\nHere is the received response: %s') % values['error']
return preview
return values
@@ -318,7 +318,7 @@ class website_slides(http.Controller):
return {'error': e.name}
except Exception as e:
_logger.error(e)
- return {'error': _('Internal server error, please try again later or contact administrator.\nHere is the error message: %s' % e.message)}
+ return {'error': _('Internal server error, please try again later or contact administrator.\nHere is the error message: %s') % e.message}
return {'url': "/slides/slide/%s" % (slide_id.id)}
# --------------------------------------------------
diff --git a/addons/website_theme_install/models/ir_module_module.py b/addons/website_theme_install/models/ir_module_module.py
index 93c62acee0f..09258d3385e 100644
--- a/addons/website_theme_install/models/ir_module_module.py
+++ b/addons/website_theme_install/models/ir_module_module.py
@@ -37,10 +37,11 @@ class IrModuleModule(models.Model):
@api.multi
def button_choose_theme(self, context):
+ theme_category_id = self.env.ref('base.module_category_theme').id
self.search([ # Uninstall the theme(s) which is (are) installed
('state', '=', 'installed'),
- '|', ('category_id', '!=', 'Hidden'), ('name', '=', 'theme_default'),
- '|', ('category_id', '=', 'Theme'), ('category_id.parent_id', '=', 'Theme')
+ '|', ('category_id', 'not in', [self.env.ref('base.module_category_hidden').id, self.env.ref('base.module_category_theme_hidden').id]), ('name', '=', 'theme_default'),
+ '|', ('category_id', '=', theme_category_id), ('category_id.parent_id', '=', theme_category_id)
]).button_immediate_uninstall(context=context)
next_action = self.button_immediate_install(context=context) # Then install the new chosen one
diff --git a/addons/website_theme_install/views/views.xml b/addons/website_theme_install/views/views.xml
index 6e89a39d7be..dc08870c9a8 100644
--- a/addons/website_theme_install/views/views.xml
+++ b/addons/website_theme_install/views/views.xml
@@ -40,6 +40,11 @@
</field>
</record>
+ <!-- Make sure the category Theme/Hidden is created -->
+ <record model="ir.module.category" id="base.module_category_theme_hidden">
+ <field name="name">Hidden</field>
+ </record>
+
<!-- Actions to list themes with custom kanban (launched on module installation) -->
<record id="theme_install_kanban_action" model="ir.actions.act_window">
<field name="name">Choose Your Theme</field>
@@ -47,10 +52,10 @@
<field name="view_mode">kanban</field>
<field name="view_id" ref="theme_view_kanban"/>
<field name="search_view_id" ref="theme_view_search"/>
- <field name="domain">[
- '|', ('category_id', '!=', 'Hidden'), ('name', '=', 'theme_default'),
- '|', ('category_id', '=', 'Theme'), ('category_id.parent_id', '=', 'Theme')
- ]</field>
+ <field name="domain" eval="[
+ '|', ('category_id', 'not in', [ref('base.module_category_hidden'), ref('base.module_category_theme_hidden')]), ('name', '=', 'theme_default'),
+ '|', ('category_id', '=', ref('base.module_category_theme')), ('category_id.parent_id', '=', ref('base.module_category_theme'))
+ ]"/>
</record>
<record id="theme_install_todo_action" model="ir.actions.server">
<field name="name">Choose Your Theme Todo Action</field>