summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorqdp-odoo <qdp@odoo.com>2016-12-30 17:20:36 +0100
committerqdp-odoo <qdp@odoo.com>2016-12-30 17:21:25 +0100
commit4f29b77e3d1677ffc88336cc99fb7f09d49d7dd1 (patch)
tree0642a57228cc2e0e3ab04d5afbfb5adf882b689c
parent33a413eb2944db4a35d035f42161159ae53dd830 (diff)
[MERGE] foward port of 10.0 up to revision 84a650e33aadb29661121410813e3de37a5ad3e9
-rw-r--r--CONTRIBUTING.md2
-rw-r--r--addons/account/i18n/account.pot6
-rw-r--r--addons/account/models/account.py2
-rw-r--r--addons/account/models/account_invoice.py2
-rw-r--r--addons/account/models/account_move.py6
-rw-r--r--addons/account/models/account_payment.py10
-rw-r--r--addons/account/models/partner.py2
-rw-r--r--addons/account/report/account_overdue_report.py8
-rw-r--r--addons/account/views/report_invoice.xml27
-rw-r--r--addons/account/wizard/account_invoice_refund.py2
-rw-r--r--addons/account_analytic_default/models/account_analytic_default.py9
-rw-r--r--addons/account_asset/report/account_asset_report.py4
-rw-r--r--addons/account_test/report/report_account_test.py1
-rw-r--r--addons/anonymization/wizard/anonymize_wizard.py54
-rw-r--r--addons/calendar/models/calendar.py2
-rw-r--r--addons/crm/i18n/crm.pot4120
-rw-r--r--addons/crm/static/src/js/web_planner_crm.js36
-rw-r--r--addons/event/views/event_views.xml2
-rw-r--r--addons/event_sale/models/sale_order.py2
-rw-r--r--addons/gamification/models/challenge.py5
-rw-r--r--addons/hr/models/hr.py5
-rw-r--r--addons/hr_expense/models/hr_expense.py1
-rw-r--r--addons/hr_holidays/models/hr_holidays.py20
-rw-r--r--addons/hr_holidays/report/holidays_summary_report.py8
-rw-r--r--addons/l10n_hn/__manifest__.py16
-rw-r--r--addons/l10n_mx/__manifest__.py1
-rw-r--r--addons/l10n_mx/data/account_data.xml29
-rw-r--r--addons/l10n_mx/data/account_tax_data.xml14
-rw-r--r--addons/l10n_mx/data/l10n_mx_chart_data.xml11
-rw-r--r--addons/l10n_mx/models/chart_template.py18
-rw-r--r--addons/l10n_vn/data/l10n_vn_chart_data.xml8
-rw-r--r--addons/mail/models/mail_shortcode.py27
-rw-r--r--addons/mail/models/mail_thread.py7
-rw-r--r--addons/mail/static/src/js/chat_manager.js2
-rw-r--r--addons/mail/wizard/mail_compose_message.py13
-rw-r--r--addons/mrp/models/mrp_unbuild.py2
-rw-r--r--addons/mrp/models/mrp_workcenter.py13
-rw-r--r--addons/mrp/models/stock_warehouse.py4
-rw-r--r--addons/mrp/security/ir.model.access.csv1
-rw-r--r--addons/mrp/views/mrp_workcenter_views.xml2
-rw-r--r--addons/mrp/views/product_views.xml4
-rw-r--r--addons/payment_transfer/i18n/payment_transfer.pot105
-rw-r--r--addons/payment_transfer/models/payment.py4
-rw-r--r--addons/point_of_sale/i18n/point_of_sale.pot54
-rw-r--r--addons/point_of_sale/models/pos_order.py43
-rw-r--r--addons/point_of_sale/models/pos_session.py32
-rw-r--r--addons/point_of_sale/static/src/js/gui.js2
-rw-r--r--addons/point_of_sale/static/src/js/models.js3
-rw-r--r--addons/point_of_sale/static/src/js/screens.js11
-rw-r--r--addons/point_of_sale/views/pos_session_view.xml8
-rw-r--r--addons/point_of_sale/wizard/pos_details.py24
-rw-r--r--addons/pos_restaurant/static/src/js/multiprint.js9
-rw-r--r--addons/product/models/product.py2
-rw-r--r--addons/product/models/product_pricelist.py2
-rw-r--r--addons/product_margin/models/product_product.py6
-rw-r--r--addons/project_issue/models/project_issue.py2
-rw-r--r--addons/purchase/models/__init__.py1
-rw-r--r--addons/purchase/models/mail_mail.py18
-rw-r--r--addons/purchase/models/purchase.py7
-rw-r--r--addons/purchase/models/stock.py2
-rw-r--r--addons/purchase/views/purchase_views.xml1
-rw-r--r--addons/report/models/report.py2
-rw-r--r--addons/resource/models/resource.py15
-rw-r--r--addons/resource/tests/test_resource.py32
-rw-r--r--addons/sale/models/sale.py2
-rw-r--r--addons/sale/report/sale_report_templates.xml3
-rw-r--r--addons/sale/views/sale_views.xml2
-rw-r--r--addons/sale_order_dates/models/sale_order.py3
-rw-r--r--addons/sale_stock/tests/test_sale_stock.py34
-rw-r--r--addons/stock/i18n/stock.pot6
-rw-r--r--addons/stock/models/stock_inventory.py11
-rw-r--r--addons/stock/models/stock_move.py8
-rw-r--r--addons/stock/models/stock_picking.py2
-rw-r--r--addons/stock/views/procurement_views.xml4
-rw-r--r--addons/stock/views/product_views.xml2
-rw-r--r--addons/stock/wizard/procurement_orderpoint_compute.py15
-rw-r--r--addons/stock_account/models/product.py2
-rw-r--r--addons/web/static/src/js/views/form_widgets.js4
-rw-r--r--addons/web/static/src/js/views/graph_widget.js25
-rw-r--r--addons/web/static/src/less/list_view.less5
-rw-r--r--addons/website_blog/models/website_blog.py5
-rw-r--r--addons/website_customer/controllers/main.py9
-rw-r--r--addons/website_links/static/src/js/website_links_charts.js4
-rw-r--r--addons/website_mail/views/website_mail_templates.xml2
-rw-r--r--addons/website_quote/models/product_template.py3
-rw-r--r--addons/website_quote/models/sale_order.py19
-rw-r--r--addons/website_sale/static/src/js/website_sale_rating.js4
-rw-r--r--doc/_extensions/odoo_ext/sub-menu_list.html8
-rw-r--r--doc/cla/corporate/x8bit.md15
-rw-r--r--doc/cla/individual/hhgabelgaard.md11
-rw-r--r--doc/cla/individual/iluque.md9
-rw-r--r--doc/cla/individual/jlzhou.md9
-rw-r--r--doc/cla/individual/liujianyun.md9
-rw-r--r--doc/cla/individual/salvatoretrimarchi.md9
-rw-r--r--doc/cla/individual/smartupdo.md11
-rw-r--r--odoo/addons/base/ir/ir_actions.py2
-rw-r--r--odoo/addons/base/ir/ir_attachment.py13
-rw-r--r--odoo/addons/base/ir/ir_model.py12
-rw-r--r--odoo/fields.py12
-rw-r--r--odoo/models.py11
-rw-r--r--odoo/tests/addons/test_translation_import/tests.yml4
-rw-r--r--odoo/tests/addons/test_translation_import/tests/test_term_count.py2
-rw-r--r--odoo/tests/addons/test_translation_import/view.xml2
103 files changed, 640 insertions, 4566 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 002a48bda3f..dc5c856f649 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -8,7 +8,7 @@ TL;DR
* If you [make a pull request](https://github.com/odoo/odoo/wiki/Contributing#making-pull-requests),
do not create an issue! Use the PR description for that
* Issues are handled with a much lower priority than pull requests
-* Use this [template](https://github.com/odoo/odoo/tree/9.0/.github/ISSUE_TEMPLATE.md)
+* Use this [template](https://github.com/odoo/odoo/tree/10.0/.github/ISSUE_TEMPLATE.md)
when reporting issues. Please search for duplicates first!
* Pull requests must be made against the [correct version](https://github.com/odoo/odoo/wiki/Contributing#against-which-version-should-i-submit-a-patch)
* There are restrictions on the kind of [changes allowed in stable series](https://github.com/odoo/odoo/wiki/Contributing#what-does-stable-mean)
diff --git a/addons/account/i18n/account.pot b/addons/account/i18n/account.pot
index a42f96c0616..5d140a27cab 100644
--- a/addons/account/i18n/account.pot
+++ b/addons/account/i18n/account.pot
@@ -6729,6 +6729,12 @@ msgid "Please create some invoice lines."
msgstr ""
#. module: account
+#: code:addons/account/models/account_move.py:140
+#, python-format
+msgid "Please define a sequence for the refunds"
+msgstr ""
+
+#. module: account
#: code:addons/account/models/account_move.py:141
#, python-format
msgid "Please define a sequence on the journal."
diff --git a/addons/account/models/account.py b/addons/account/models/account.py
index 6b71f587147..9d04db1b840 100644
--- a/addons/account/models/account.py
+++ b/addons/account/models/account.py
@@ -125,7 +125,7 @@ class AccountAccount(models.Model):
@api.returns('self', lambda value: value.id)
def copy(self, default=None):
default = dict(default or {})
- default.update(code=_("%s (copy)") % (self.code or ''))
+ default.setdefault('code', _("%s (copy)") % (self.code or ''))
return super(AccountAccount, self).copy(default)
@api.multi
diff --git a/addons/account/models/account_invoice.py b/addons/account/models/account_invoice.py
index 39f0cc14009..06bbd0db44a 100644
--- a/addons/account/models/account_invoice.py
+++ b/addons/account/models/account_invoice.py
@@ -1124,7 +1124,7 @@ class AccountInvoice(models.Model):
res.setdefault(line.tax_id.tax_group_id, 0.0)
res[line.tax_id.tax_group_id] += line.amount
res = sorted(res.items(), key=lambda l: l[0].sequence)
- res = map(lambda l: (l[0].name, formatLang(self.env, l[1], currency_obj=currency)), res)
+ res = map(lambda l: (l[0].name, l[1]), res)
return res
diff --git a/addons/account/models/account_move.py b/addons/account/models/account_move.py
index 729dca58dab..c73ff5fa82b 100644
--- a/addons/account/models/account_move.py
+++ b/addons/account/models/account_move.py
@@ -133,7 +133,6 @@ class AccountMove(models.Model):
def post(self):
invoice = self._context.get('invoice', False)
self._post_validate()
-
for move in self:
move.line_ids.create_analytic_lines()
if move.name == '/':
@@ -147,7 +146,10 @@ class AccountMove(models.Model):
# If invoice is actually refund and journal has a refund_sequence then use that one or use the regular one
sequence = journal.sequence_id
if invoice and invoice.type in ['out_refund', 'in_refund'] and journal.refund_sequence:
+ if not journal.refund_sequence_id:
+ raise UserError(_('Please define a sequence for the refunds'))
sequence = journal.refund_sequence_id
+
new_name = sequence.with_context(ir_sequence_date=move.date).next_by_id()
else:
raise UserError(_('Please define a sequence on the journal.'))
@@ -1100,6 +1102,7 @@ class AccountMoveLine(models.Model):
# Create tax lines
for tax_vals in res['taxes']:
if tax_vals['amount']:
+ tax = self.env['account.tax'].browse([tax_vals['id']])
account_id = (amount > 0 and tax_vals['account_id'] or tax_vals['refund_account_id'])
if not account_id: account_id = vals['account_id']
temp = {
@@ -1111,6 +1114,7 @@ class AccountMoveLine(models.Model):
'statement_id': vals.get('statement_id'),
'debit': tax_vals['amount'] > 0 and tax_vals['amount'] or 0.0,
'credit': tax_vals['amount'] < 0 and -tax_vals['amount'] or 0.0,
+ 'analytic_account_id': vals.get('analytic_account_id') if tax.analytic else False,
}
bank = self.env["account.bank.statement"].browse(vals.get('statement_id'))
if bank.currency_id != bank.company_id.currency_id:
diff --git a/addons/account/models/account_payment.py b/addons/account/models/account_payment.py
index 1bc39562f77..bfeb6f727f6 100644
--- a/addons/account/models/account_payment.py
+++ b/addons/account/models/account_payment.py
@@ -396,7 +396,15 @@ class account_payment(models.Model):
#Reconcile with the invoices
if self.payment_difference_handling == 'reconcile' and self.payment_difference:
writeoff_line = self._get_shared_move_line_vals(0, 0, 0, move.id, False)
- debit_wo, credit_wo, amount_currency_wo, currency_id = aml_obj.with_context(date=self.payment_date).compute_amount_fields(self.payment_difference, self.currency_id, self.company_id.currency_id, invoice_currency)
+ amount_currency_wo, currency_id = aml_obj.with_context(date=self.payment_date).compute_amount_fields(self.payment_difference, self.currency_id, self.company_id.currency_id, invoice_currency)[2:]
+ # the writeoff debit and credit must be computed from the invoice residual in company currency
+ # minus the payment amount in company currency, and not from the payment difference in the payment currency
+ # to avoid loss of precision during the currency rate computations. See revision 20935462a0cabeb45480ce70114ff2f4e91eaf79 for a detailed example.
+ total_residual_company_signed = sum(invoice.residual_company_signed for invoice in self.invoice_ids)
+ total_payment_company_signed = self.currency_id.with_context(date=self.payment_date).compute(self.amount, self.company_id.currency_id)
+ amount_wo = total_residual_company_signed - total_payment_company_signed
+ debit_wo = amount_wo > 0 and amount_wo or 0.0
+ credit_wo = amount_wo < 0 and -amount_wo or 0.0
writeoff_line['name'] = _('Counterpart')
writeoff_line['account_id'] = self.writeoff_account_id.id
writeoff_line['debit'] = debit_wo
diff --git a/addons/account/models/partner.py b/addons/account/models/partner.py
index 1b839611505..23732a18c21 100644
--- a/addons/account/models/partner.py
+++ b/addons/account/models/partner.py
@@ -20,7 +20,7 @@ class AccountFiscalPosition(models.Model):
company_id = fields.Many2one('res.company', string='Company')
account_ids = fields.One2many('account.fiscal.position.account', 'position_id', string='Account Mapping', copy=True)
tax_ids = fields.One2many('account.fiscal.position.tax', 'position_id', string='Tax Mapping', copy=True)
- note = fields.Text('Notes', help="Legal mentions that have to be printed on the invoices.")
+ note = fields.Text('Notes', translate=True, help="Legal mentions that have to be printed on the invoices.")
auto_apply = fields.Boolean(string='Detect Automatically', help="Apply automatically this fiscal position.")
vat_required = fields.Boolean(string='VAT required', help="Apply only if partner has a VAT number.")
country_id = fields.Many2one('res.country', string='Country',
diff --git a/addons/account/report/account_overdue_report.py b/addons/account/report/account_overdue_report.py
index f48b64e179b..0fb7529e20b 100644
--- a/addons/account/report/account_overdue_report.py
+++ b/addons/account/report/account_overdue_report.py
@@ -33,10 +33,10 @@ class ReportOverdue(models.AbstractModel):
@api.model
def render_html(self, docids, data=None):
totals = {}
- lines = self._get_account_move_lines(self.ids)
+ lines = self._get_account_move_lines(docids)
lines_to_display = {}
company_currency = self.env.user.company_id.currency_id
- for partner_id in self.ids:
+ for partner_id in docids:
lines_to_display[partner_id] = {}
totals[partner_id] = {}
for line_tmp in lines[partner_id]:
@@ -58,9 +58,9 @@ class ReportOverdue(models.AbstractModel):
totals[partner_id][currency]['mat'] += line['mat']
totals[partner_id][currency]['total'] += line['debit'] - line['credit']
docargs = {
- 'doc_ids': self.ids,
+ 'doc_ids': docids,
'doc_model': 'res.partner',
- 'docs': self.env['res.partner'].browse(self.ids),
+ 'docs': self.env['res.partner'].browse(docids),
'time': time,
'Lines': lines_to_display,
'Totals': totals,
diff --git a/addons/account/views/report_invoice.xml b/addons/account/views/report_invoice.xml
index dfe2fcf62e3..41ae226499c 100644
--- a/addons/account/views/report_invoice.xml
+++ b/addons/account/views/report_invoice.xml
@@ -102,9 +102,9 @@
</tr>
<t t-foreach="o._get_tax_amount_by_group()" t-as="amount_by_group">
<tr>
- <td><span t-esc="amount_by_group[0]"/></td>
+ <td><span t-esc="amount_by_group[0] if len(o.tax_line_ids) > 1 else (o.tax_line_ids.tax_id.description or o.tax_line_ids.tax_id.name)"/></td>
<td class="text-right">
- <span t-esc="amount_by_group[1]"/>
+ <span t-esc="amount_by_group[1]" t-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
</td>
</tr>
</t>
@@ -117,7 +117,28 @@
</table>
</div>
</div>
-
+
+ <div class="row" t-if="len(o.tax_line_ids) > 1">
+ <div class="col-xs-6">
+ <table class="table table-condensed">
+ <thead>
+ <tr>
+ <th>Tax</th>
+ <th class="text-right">Amount</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr t-foreach="o.tax_line_ids" t-as="t">
+ <td><span t-field="t.tax_id.description"/></td>
+ <td class="text-right">
+ <span t-field="t.amount" t-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+
<p t-if="o.comment">
<strong>Comment:</strong>
<span t-field="o.comment"/>
diff --git a/addons/account/wizard/account_invoice_refund.py b/addons/account/wizard/account_invoice_refund.py
index afc3c0609ef..c0c2a0a14f5 100644
--- a/addons/account/wizard/account_invoice_refund.py
+++ b/addons/account/wizard/account_invoice_refund.py
@@ -75,7 +75,7 @@ class AccountInvoiceRefund(models.TransientModel):
for tmpline in refund.move_id.line_ids:
if tmpline.account_id.id == inv.account_id.id:
to_reconcile_lines += tmpline
- to_reconcile_lines.reconcile()
+ to_reconcile_lines.filtered(lambda l: l.reconciled == False).reconcile()
if mode == 'modify':
invoice = inv.read(
['name', 'type', 'number', 'reference',
diff --git a/addons/account_analytic_default/models/account_analytic_default.py b/addons/account_analytic_default/models/account_analytic_default.py
index 85ec2199f0f..9ef2add29bc 100644
--- a/addons/account_analytic_default/models/account_analytic_default.py
+++ b/addons/account_analytic_default/models/account_analytic_default.py
@@ -65,7 +65,10 @@ class AccountInvoiceLine(models.Model):
return res
def _set_additional_fields(self, invoice):
- rec = self.env['account.analytic.default'].account_get(self.product_id.id, self.invoice_id.partner_id.id, self.env.uid,
- fields.Date.today(), company_id=self.company_id.id)
- self.account_analytic_id = rec.analytic_id.id
+ if not self.account_analytic_id:
+ rec = self.env['account.analytic.default'].account_get(
+ self.product_id.id, self.invoice_id.partner_id.id, self.env.uid,
+ fields.Date.today(), company_id=self.company_id.id)
+ if rec:
+ self.account_analytic_id = rec.analytic_id.id
super(AccountInvoiceLine, self)._set_additional_fields(invoice)
diff --git a/addons/account_asset/report/account_asset_report.py b/addons/account_asset/report/account_asset_report.py
index d743f64c6fb..540d7880f3f 100644
--- a/addons/account_asset/report/account_asset_report.py
+++ b/addons/account_asset/report/account_asset_report.py
@@ -1,8 +1,7 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo import api, fields, models
-
+from odoo import api, fields, models, tools
class AssetAssetReport(models.Model):
_name = "asset.asset.report"
@@ -28,6 +27,7 @@ class AssetAssetReport(models.Model):
@api.model_cr
def init(self):
+ tools.drop_view_if_exists(self._cr, 'asset_asset_report')
self._cr.execute("""
create or replace view asset_asset_report as (
select
diff --git a/addons/account_test/report/report_account_test.py b/addons/account_test/report/report_account_test.py
index 9b1154dd45a..26a67112045 100644
--- a/addons/account_test/report/report_account_test.py
+++ b/addons/account_test/report/report_account_test.py
@@ -40,6 +40,7 @@ class ReportAssertAccount(models.AbstractModel):
'reconciled_inv': reconciled_inv, # specific function used in different tests
'result': None, # used to store the result of the test
'column_order': None, # used to choose the display order of columns (in case you are returning a list of dict)
+ '_': _,
}
safe_eval(code_exec, localdict, mode="exec", nocopy=True)
result = localdict['result']
diff --git a/addons/anonymization/wizard/anonymize_wizard.py b/addons/anonymization/wizard/anonymize_wizard.py
index b387aa07109..15db541a794 100644
--- a/addons/anonymization/wizard/anonymize_wizard.py
+++ b/addons/anonymization/wizard/anonymize_wizard.py
@@ -301,30 +301,30 @@ class IrModelFieldsAnonymizeWizard(models.TransientModel):
else:
raise Exception("Unknown query type '%s'. Valid types are: sql, python." % (query['query_type'], ))
- # update the anonymization fields:
- ano_fields = IrModelFieldsAnonymization.search([('state', '!=', 'not_existing')])
- ano_fields.write({'state': 'clear'})
-
- # add a result message in the wizard:
- self.msg = '\n'.join(["Successfully reversed the anonymization.", ""])
-
- # create a new history record:
- history = self.env['ir.model.fields.anonymization.history'].create({
- 'date': fields.Datetime.now(),
- 'field_ids': [[6, 0, ano_fields.ids]],
- 'msg': self.msg,
- 'filepath': False,
- 'direction': 'anonymized -> clear',
- 'state': 'done'
- })
-
- return {
- 'res_id': self.id,
- 'view_id': self.env.ref('anonymization.view_ir_model_fields_anonymize_wizard_form').ids,
- 'view_type': 'form',
- "view_mode": 'form',
- 'res_model': 'ir.model.fields.anonymize.wizard',
- 'type': 'ir.actions.act_window',
- 'context': {'step': 'just_desanonymized'},
- 'target': 'new'
- }
+ # update the anonymization fields:
+ ano_fields = IrModelFieldsAnonymization.search([('state', '!=', 'not_existing')])
+ ano_fields.write({'state': 'clear'})
+
+ # add a result message in the wizard:
+ self.msg = '\n'.join(["Successfully reversed the anonymization.", ""])
+
+ # create a new history record:
+ history = self.env['ir.model.fields.anonymization.history'].create({
+ 'date': fields.Datetime.now(),
+ 'field_ids': [[6, 0, ano_fields.ids]],
+ 'msg': self.msg,
+ 'filepath': False,
+ 'direction': 'anonymized -> clear',
+ 'state': 'done'
+ })
+
+ return {
+ 'res_id': self.id,
+ 'view_id': self.env.ref('anonymization.view_ir_model_fields_anonymize_wizard_form').ids,
+ 'view_type': 'form',
+ "view_mode": 'form',
+ 'res_model': 'ir.model.fields.anonymize.wizard',
+ 'type': 'ir.actions.act_window',
+ 'context': {'step': 'just_desanonymized'},
+ 'target': 'new'
+ }
diff --git a/addons/calendar/models/calendar.py b/addons/calendar/models/calendar.py
index ccbcebefaa7..9017c8c6ecd 100644
--- a/addons/calendar/models/calendar.py
+++ b/addons/calendar/models/calendar.py
@@ -1079,7 +1079,7 @@ class Meeting(models.Model):
if self.month_by == 'date' and (self.day < 1 or self.day > 31):
raise UserError(_("Please select a proper day of the month."))
- if self.month_by == 'day': # Eg : Second Monday of the month
+ if self.month_by == 'day' and self.byday and self.week_list: # Eg : Second Monday of the month
return ';BYDAY=' + self.byday + self.week_list
elif self.month_by == 'date': # Eg : 16th of the month
return ';BYMONTHDAY=' + str(self.day)
diff --git a/addons/crm/i18n/crm.pot b/addons/crm/i18n/crm.pot
deleted file mode 100644
index 3230fd3497f..00000000000
--- a/addons/crm/i18n/crm.pot
+++ /dev/null
@@ -1,4120 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * crm
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 10.0alpha1c\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-09-05 14:09+0000\n"
-"PO-Revision-Date: 2016-09-05 14:09+0000\n"
-"Last-Translator: <>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
-
-#. module: crm
-#: model:mail.template,body_html:crm.mail_template_data_module_install_crm
-msgid "\n"
-"\n"
-" <div style=\"margin: 10px auto;\">\n"
-" % set last_created_team = user.env['crm.team'].search([], order=\"create_date desc\")[0]\n"
-" <table cellspacing=\"0\" cellpadding=\"0\" style=\"width:100%;\">\n"
-" <tbody>\n"
-" <tr>\n"
-" <td style=\"padding:2px;width:30%;\">\n"
-" <img src=\"web/static/src/img/logo.png\"/>\n"
-" </td>\n"
-" <td style=\"vertical-align: top; padding: 8px 10px;text-align: left;font-size: 14px;\">\n"
-" <a href=\"web/login\" style=\"float:right ;margin:15px auto;background: #a24689;border-radius: 5px;color: #ffffff;font-size: 16px;padding: 10px 20px 10px 20px;text-decoration: none;\">Auto Login</a>\n"
-" </td>\n"
-" </tr>\n"
-" </tbody>\n"
-" </table>\n"
-" <table style=\"width:100%;text-align:justify;margin:0 auto;border-collapse:collapse;border-top:1px solid lightgray\"\">\n"
-" <tbody>\n"
-" <tr>\n"
-" <td style=\"padding:15px 10px;font-size:20px\">\n"
-" <p style=\"color:#a24689;margin:0\" >Hooray!</p><br>\n"
-" <p dir=\"ltr\" style=\"font-size:15px;margin-top:0pt;margin-bottom:0pt;\">\n"
-" <span>Your Odoo CRM application is up and running.</span></p><br>\n"
-" <p dir=\"ltr\" style=\"margin-top:0pt;margin-bottom:8pt;\">\n"
-" <span style=\"font-size:13px;font-weight:bold; \">What’s next?</span></p>\n"
-" <ul style=\"margin-top:0pt;margin-bottom:0pt;font-size:13px;list-style-type:disc;\">\n"
-" <li dir=\"ltr\">\n"
-" <p dir=\"ltr\" style=\"margin-top:0pt;margin-bottom:0pt;\">\n"
-" <span>Try creating a lead by sending an email to </span>\n"
-" <a href=\"mailto:${last_created_team.alias_id.name_get()[0][1] if last_created_team.alias_id.alias_domain else user.company_id.email}\">\n"
-" <span style=\"font-weight:bold; text-decoration:underline;\">${last_created_team.alias_id.name_get()[0][1] if last_created_team.alias_id.alias_domain else user.company_id.email}</span>\n"
-" </a>\n"
-" </p>\n"
-" </li>\n"
-" <li dir=\"ltr\">\n"
-" <p dir=\"ltr\" style=\"margin-top:0pt;margin-bottom:8pt;\">\n"
-" <span>Track your opportunities in your sale funnel by simply dragging and dropping the cards from one column to another</span>\n"
-" </p>\n"
-" </li>\n"
-" </ul> <br>\n"
-" <p dir=\"ltr\" style=\"font-size:13px;margin-top:0pt;margin-bottom:8pt;\">\n"
-" <span style=\"font-weight:bold;\">Discover the </span>\n"
-" <span><a href=\"/web#view_type=list&model=crm.lead&action=crm.crm_lead_all_leads\">\n"
-" <span style=\"font-weight:bold; text-decoration:underline;\">CRM planner</span></a></span>\n"
-" <span> to activate extra features</span>\n"
-" <span style=\"color:#a24689;margin:0;font-weight:bold\">(${user.env['web.planner'].get_planner_progress('planner_crm')}% done)</span>\n"
-" </p>\n"
-" <ul style=\"margin-top:0pt;margin-bottom:0pt;font-size:13px;list-style-type:disc;\">\n"
-" <li dir=\"ltr\">\n"
-" <p dir=\"ltr\" style=\"margin-top:0pt;margin-bottom:0pt;\">\n"
-" <span>Automatically assign your leads to your salesmen with the lead scoring, </span>\n"
-" </p>\n"
-" </li>\n"
-" <li dir=\"ltr\">\n"
-" <p dir=\"ltr\" style=\"margin-top:0pt;margin-bottom:0pt;\">\n"
-" <span>Keep in touch with your potential client with efficient email campaigns,</span>\n"
-" </p>\n"
-" </li>\n"
-" <li dir=\"ltr\">\n"
-" <p dir=\"ltr\" style=\"margin-top:0pt;margin-bottom:0pt;\">\n"
-" <span>Gain high quality insight from surveys,</span>\n"
-" </p>\n"
-" </li>\n"
-" <li dir=\"ltr\">\n"
-" <p dir=\"ltr\" style=\"margin-top:0pt;margin-bottom:0pt;\">\n"
-" <span>Get smart reporting and accurate dashboards,</span>\n"
-" </p>\n"
-" </li>\n"
-" <li dir=\"ltr\">\n"
-" <p dir=\"ltr\" style=\"margin-top:0pt;margin-bottom:8pt;\">\n"
-" <span>And much more...</span>\n"
-" </p>\n"
-" </li>\n"
-" </ul>\n"
-" <br>\n"
-" <p dir=\"ltr\" style=\"font-size:13px;line-height:1.3;margin-top:0pt;margin-bottom:8pt;\">\n"
-" <span style=\"font-weight:bold;\">Need Help?</span>\n"
-" <span style=\"font-style:italic;\">You’re not alone</span>\n"
-" </p>\n"
-" <p dir=\"ltr\" style=\"font-size:13px;margin-top:0pt;margin-bottom:8pt;\">\n"
-" <span>We would be delighted to assist you along the way. Contact us at\n"
-" <a href=\"mailto:help@odoo.com\"><span style=\"text-decoration:underline;\">\n"
-" help@odoo.com</span></a> if you have any question. You can also discover\n"
-" how to get the best out of Odoo CRM with our </span>\n"
-" <a href=\"https://www.odoo.com/documentation/user/9.0/crm.html\">\n"
-" <span style=\"text-decoration:underline;\">User Documentation</span></a>\n"
-" </span><span> or with our </span>\n"
-" <a href=\"https://www.odoo.com/documentation\">\n"
-" <span style=\"text-decoration:underline;\">API Documentation</span></a>\n"
-" </p>\n"
-" <br>\n"
-" <p dir=\"ltr\" style=\"font-size:13px;margin-top:0pt;margin-bottom:8pt;\"><span>Enjoy your Odoo experience,</span></p>\n"
-" </td>\n"
-" </tr>\n"
-" </tbody>\n"
-" </table>\n"
-" <div dir=\"ltr\" style=\"font-size:13px;margin-top:0pt;margin-bottom:8pt;color:grey\">\n"
-" <span><br/>-- <br/>The Odoo Team<br/>PS: People love Odoo, check </span><a href=\"https://twitter.com/odoo/favorites\"><span style=\"text-decoration:underline;\">what they say about it.</span></a></span>\n"
-" </div>\n"
-" </div>"
-msgstr ""
-
-#. module: crm
-#: model:mail.template,body_html:crm.email_template_opportunity_reminder_mail
-msgid "\n"
-"<p>Hello ${object.user_id and object.user_id.name or ''},</p>\n"
-"<p>The opportunity <strong>${object.name}</strong> did not have any activity since at least 5 days.</p>\n"
-"%if object.description:\n"
-"<p>Here is the description about the opportunity : </p><p><i>${object.description}</i>\n"
-"%endif\n"
-"</p><p>Thank you!</p>\n"
-""
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_meeting_count
-#: model:ir.model.fields,field_description:crm.field_res_partner_meeting_count
-#: model:ir.model.fields,field_description:crm.field_res_users_meeting_count
-msgid "# Meetings"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_nbr_activities
-msgid "# of Activities"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "(if leads are activated)"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "(you can change it here)"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid ", if accounting or purchase is installed"
-msgstr ""
-
-#. module: crm
-#. openerp-web
-#: code:addons/crm/static/src/js/tour.js:34
-#, python-format
-msgid "<b>Drag &amp; drop opportunities</b> between columns as you progress in your sales cycle."
-msgstr ""
-
-#. module: crm
-#. openerp-web
-#: code:addons/crm/static/src/js/tour.js:75
-#, python-format
-msgid "<b>Invite coworkers</b> via email.<br/><i>Enter one email per line.</i>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_team_salesteams_view_kanban
-msgid "<i class=\"fa fa-envelope-o\"/>&amp;nbsp;"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<i class=\"fa fa-question-circle\"> view examples</i>"
-msgstr ""
-
-#. module: crm
-#. openerp-web
-#: code:addons/crm/static/src/js/tour.js:61
-#, python-format
-msgid "<p><b>Send messages</b> to your prospect and get replies automatically attached to this opportunity.</p><p class=\"mb0\">Type <i>'@'</i> to mention people - it's like cc-ing on emails.</p>"
-msgstr ""
-
-#. module: crm
-#. openerp-web
-#: code:addons/crm/static/src/js/tour.js:45
-#, python-format
-msgid "<p>You will be able to customize your followup activities. Examples:</p><ol><li>introductory email</li><li>call 10 days after</li><li>second call 3 days after, ...</li></ol><p class='mb0'><i>Select a standard activity for now on.</i></p>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"fa fa-arrow-circle-o-down\"/> Install Events"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"fa fa-arrow-circle-o-down\"/> Install Mailing"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"fa fa-arrow-circle-o-down\"/> Install Slides"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"fa fa-arrow-circle-o-down\"/> Install Surveys"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"fa fa-arrow-circle-o-down\"/> Install Website Live Chat"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"fa fa-arrow-circle-o-down\"/> Install e-Commerce"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"fa fa-lightbulb-o fa-2x\"/>\n"
-" <strong>Tips:</strong>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"fa fa-lightbulb-o fa-lg\"/>\n"
-" <strong>Note:</strong>\n"
-" Using templates can boost the quality of your\n"
-" quotations and their success rate. However,\n"
-" creating such templates can be a huge effort.\n"
-" We recommend to start with standard quotations\n"
-" and upgrade later."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"fa fa-lightbulb-o fa-lg\"/>\n"
-" <strong>Tip:</strong>\n"
-" You can also use our API to load data automatically through scripts: read this"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"fa fa-lightbulb-o fa-lg\"/>\n"
-" <strong>Tip:</strong> For developers, you can\n"
-" use our API to load data through scripts: read\n"
-" the"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"label label-default text-center odoo_purple\">Incoming email</span>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"label label-default text-center odoo_purple\">Lead</span>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"label label-default text-center odoo_purple\">Opportunity</span>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"label label-default text-center odoo_purple\">Quotation</span>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
-msgid "<span class=\"o_stat_text\" attrs=\"{'invisible': [('meeting_count', '&lt;', 2)]}\"> Meetings</span>\n"
-" <span class=\"o_stat_text\" attrs=\"{'invisible': [('meeting_count', '&gt;', 1)]}\"> Meeting</span>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
-msgid "<span class=\"oe_form_field\" attrs=\"{'invisible': ['|', ('next_activity_id', '=', False), ('date_action', '=', False)]}\"> on </span>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
-msgid "<span class=\"oe_grey\"> at </span>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"panel-title\">\n"
-" <span class=\"fa fa-laptop\"/>\n"
-" <strong> Screen Customization</strong>\n"
-" </span>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"panel-title\">\n"
-" <span class=\"fa fa-pencil-square-o\"/>\n"
-" <strong> Create Custom Reports</strong>\n"
-" </span>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"panel-title\">\n"
-" <span class=\"fa fa-sitemap\"/>\n"
-" <strong> Workflow Customization</strong>\n"
-" </span>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"panel-title\">\n"
-" <span class=\"fa\" data-icon=\"&#57408;\"/>\n"
-" <strong>Import a file</strong><br/>\n"
-" <span class=\"small\">Recommended if &gt;100 products</span>\n"
-" </span>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"panel-title\">\n"
-" <span class=\"fa\" data-icon=\"&#57408;\"/>\n"
-" <strong>Import</strong><br/>\n"
-" <span class=\"small\">&gt; 200 contacts</span>\n"
-" </span>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"panel-title\">\n"
-" <span class=\"fa\" data-icon=\"&#57408;\"/>\n"
-" <strong>Subscriptions</strong><br/>\n"
-" <span class=\"small\"/>\n"
-" </span>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"panel-title\">\n"
-" <span class=\"fa\" data-icon=\"&#57440;\"/>\n"
-" <strong> Create manually</strong><br/>\n"
-" <span class=\"small\">&lt; 200 contacts</span>\n"
-" </span>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"panel-title\">\n"
-" <span class=\"fa\" data-icon=\"&#57440;\"/>\n"
-" <strong> Create manually</strong><br/>\n"
-" <span class=\"small\">Recommended if &lt;100 products</span>\n"
-" </span>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"panel-title\">\n"
-" <span class=\"fa\" data-icon=\"&#57440;\"/>\n"
-" <strong>One-time sale</strong><br/>\n"
-" <span class=\"small\"/>\n"
-" </span>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"panel-title\">\n"
-" <strong> Price per Customer</strong>\n"
-" </span>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"panel-title\">\n"
-" <strong> Rules &amp; Formulas</strong>\n"
-" </span>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"panel-title\">\n"
-" <strong>Unique price</strong>\n"
-" </span>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"panel-title\"><span data-icon=\"&#57366;\"/><strong> Exercise 1</strong></span>\n"
-" <span>(Lead Manager)</span>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"panel-title\"><span data-icon=\"&#57438;\"/><strong> Exercise 3</strong></span>\n"
-" <span>(Salesperson)</span>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span class=\"panel-title\"><span data-icon=\"&#57463;\"/><strong> Exercise 2</strong></span>\n"
-" <span>(Sales Manager)</span>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<span><strong>Contact us to customize your application:</strong><br/>\n"
-" We have special options for unlimited number of customizations!\n"
-" </span>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Click on 'Reporting' in the main menu </strong>and browse statistics:"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Events</strong>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Every business is different.</strong> Odoo allows to\n"
-" customize every application and it's usually a good\n"
-" advice to customize screens to fit your sales process.\n"
-" <strong>Customizations are done by Odoo experts.</strong>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Example: Negotiation stage</strong>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Example: Qualified stage</strong>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Exercise: </strong>Try to analyse the average time to close a deal.\n"
-" Group X Axis: Creation Date\n"
-" Group Y Axis: Expected Closing Date\n"
-" Filter: Won Opportunities"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Exercise: </strong>Try to switch the kanban to graph view"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Exercise:</strong> Try to get the number of leads per salesperson and by creation date"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Forecast future revenues</strong><br/>\n"
-" You can assess the maturity of a sales team by its ability to forecasts future revenues\n"
-" for the coming months or quarters. Train the team to forecast efficiently by having\n"
-" an up-to-date pipeline of opportunities.\n"
-" After a few month, set the real success rate according to the stages, to have\n"
-" accurate expected revenues by closing date."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Mass mailing</strong>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Negotiation:</strong>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>New:</strong>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Organize weekly sales meetings</strong><br/>\n"
-" It's a great way to see where you can improve and keep track of the progress of your sales team. Start the pipeline review by looking at the big picture; revenues and number of opportunities by stage, by expected closing date and by salespeople."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Propositions:</strong>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Qualified:</strong>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Quote template</strong> <span class=\"small\">(packaged services)</span>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Recommended actions:</strong>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_activity_log_view_form_schedule
-msgid "<strong>Recommended activities:</strong>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Review the top 5 opportunities</strong><br/>\n"
-" Once the big picture is clear, focus on the best opportunities. Start from stages on the right (negotiation, proposal, etc) and review the biggest opportunities one by one with the team."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Sales Stages</strong>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Sales objectives</strong>:"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Sales tools</strong><br/>\n"
-" Efficiently following up the pipeline will lead to great improvements. But to achieve excellence in your sales organization, you need to provide your team with sales tools. For every stage of the opportunities pipeline, identify the blocking points and create documents to train the team."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Slides</strong>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Standard quotation</strong> <span class=\"small\">(products or services)</span>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Subscriptions</strong>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Survey</strong>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>The customer</strong> understood his pain points and proposed the next step in the buying process"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>The prospect</strong> started to discuss your offer"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>To boost your leads acquisition,</strong> you should have a look at our marketing apps:"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Trainings</strong><br/>\n"
-" To build a strong sales training program, you can use the following\n"
-" apps of Odoo:"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Website Live Chat</strong>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>You</strong> called the prospect for a follow up on your offer"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>You</strong> understand the customer's needs and pain points, and you have a fairly good idea of his budget to spend"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>Your Main KPIs:</strong>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "<strong>e-Commerce</strong>"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_team_alias_defaults
-msgid "A Python dictionary that will be evaluated to provide default values when creating new records for this alias."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "A good pipeline should have between 5 and 7 stages"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "A product in Odoo is something you sell or buy. It could\n"
-" be a goods, consumable or services. Choose how you want to\n"
-" create your products:"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "A sales manager will mostly use these two reports:"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_automatic_wizard_exclude_contact
-msgid "A user associated to the contact"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "API documentation"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.sales_team_form_view_in_crm
-msgid "Accept Emails From"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_activity_view_search
-msgid "Action Search"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Activate the 'Online Quotations' option in"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_activity_default
-msgid "Activated by default when subscribing."
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_report_active
-#: model:ir.model.fields,field_description:crm.field_crm_lead_active
-#: model:ir.model.fields,field_description:crm.field_crm_lost_reason_active
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_active
-msgid "Active"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,name:crm.crm_activity_action
-#: model:ir.actions.act_window,name:crm.crm_activity_report_action_tree
-#: model:ir.model.fields,field_description:crm.field_res_partner_activities_count
-#: model:ir.model.fields,field_description:crm.field_res_users_activities_count
-#: model:ir.ui.menu,name:crm.crm_activity_menu
-#: model:ir.ui.menu,name:crm.crm_activity_report_menu
-#: model:ir.ui.view,arch_db:crm.crm_activity_view_form
-#: model:ir.ui.view,arch_db:crm.crm_activity_view_tree
-#: model:ir.ui.view,arch_db:crm.view_partners_form_crm1
-msgid "Activities"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,name:crm.crm_activity_report_action
-#: model:ir.actions.act_window,name:crm.crm_activity_report_action_team
-#: model:ir.ui.view,arch_db:crm.crm_activity_report_view_graph
-#: model:ir.ui.view,arch_db:crm.crm_activity_report_view_pivot
-#: model:ir.ui.view,arch_db:crm.crm_activity_report_view_search
-#: model:ir.ui.view,arch_db:crm.crm_team_salesteams_view_kanban
-msgid "Activities Analysis"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_res_users_target_sales_done
-msgid "Activities Done Target"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_log_next_activity_id
-#: model:ir.model.fields,field_description:crm.field_crm_activity_report_subtype_id
-msgid "Activity"
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/wizard/crm_activity_log.py:80
-#, python-format
-msgid "Activity Done"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_kanban_state
-msgid "Activity State"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Add Features"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_leads
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
-msgid "Address"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_team_alias_id
-msgid "Alias"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_team_alias_contact
-msgid "Alias Contact Security"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_sale_config_settings_alias_domain
-msgid "Alias Domain"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_team_alias_name
-msgid "Alias Name"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_team_alias_domain
-msgid "Alias domain"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_team_alias_model_id
-msgid "Aliased Model"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Aligning your sales organization on a systematic\n"
-" process will allow you to continuously improve your\n"
-" sales performance."
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/wizard/base_partner_merge.py:310
-#, python-format
-msgid "All contacts must have the same email. Only the Administrator can merge contacts with different emails."
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/models/crm_lead.py:880
-#, python-format
-msgid "All email incoming to %s will automatically\n"
-" create new opportunity. Update your business card, phone book, social media,...\n"
-" Send an email right now and see it here."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_leads
-msgid "Analysis"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Analyzing the pipeline by expected closing date will help your team efficiently forecast its future revenues. The pipeline review will allow you to identify sales inefficiencies or pick up on the best practices."
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_mass_deduplicate
-msgid "Apply deduplication"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_kanban_view_leads
-msgid "Archive"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search
-#: model:ir.ui.view,arch_db:crm.view_crm_case_leads_filter
-msgid "Archived"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.base_partner_merge_automatic_wizard_form
-msgid "Are you sure to execute the automatic merge of your contacts ?"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.base_partner_merge_automatic_wizard_form
-msgid "Are you sure to execute the list of automatic merges of your contacts ?"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.merge_opportunity_form
-msgid "Assign opportunities to"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_crm_lead2opportunity_partner_mass
-msgid "Assign these opportunities to"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_crm_lead2opportunity_partner
-msgid "Assign this opportunity to"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_opening_date
-msgid "Assignation Date"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_date_open
-msgid "Assigned"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "At the end of the deployment process, your expectations should be reached.\n"
-" <br/>\n"
-" If not, our CRM experts are available to help you achieve your KPIs."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Attach a qualification form to every house opportunity"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.base_partner_merge_automatic_wizard_form
-msgid "Automatic Merge Wizard"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_sale_config_settings_generate_sales_team_alias
-msgid "Automatically generate an email alias at the sales team creation"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_tree_view_oppor
-msgid "Avg. of Probability"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "B2B"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "B2C"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Better structure the sales process"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Better visibility on team activities"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Boost your online sales with sleek product pages."
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_message_bounce
-msgid "Bounce"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_sale_config_settings
-msgid "CRM"
-msgstr ""
-
-#. module: crm
-#: model:ir.model,name:crm.model_crm_activity
-msgid "CRM Activity"
-msgstr ""
-
-#. module: crm
-#: model:ir.model,name:crm.model_crm_activity_report
-msgid "CRM Activity Analysis"
-msgstr ""
-
-#. module: crm
-#: model:ir.model,name:crm.model_crm_opportunity_report
-msgid "CRM Opportunity Analysis"
-msgstr ""
-
-#. module: crm
-#: model:crm.activity,name:crm.crm_activity_data_call
-#: model:mail.message.subtype,name:crm.crm_activity_data_call_mail_message_subtype
-msgid "Call"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_campaign_id
-#: model:ir.ui.view,arch_db:crm.view_crm_case_leads_filter
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-msgid "Campaign"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.base_partner_merge_automatic_wizard_form
-#: model:ir.ui.view,arch_db:crm.crm_activity_log_view_form
-#: model:ir.ui.view,arch_db:crm.crm_lead_lost_view_form
-#: model:ir.ui.view,arch_db:crm.merge_opportunity_form
-#: model:ir.ui.view,arch_db:crm.view_crm_lead2opportunity_partner
-#: model:ir.ui.view,arch_db:crm.view_crm_lead2opportunity_partner_mass
-msgid "Cancel"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,name:crm.crm_team_act_tree
-msgid "Cases by Sales Team"
-msgstr ""
-
-#. module: crm
-#: model:ir.model,name:crm.model_crm_lead_tag
-msgid "Category of lead"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_stage_on_change
-msgid "Change Probability Automatically"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Change the <i>Sale Price</i> option in"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Change the layout of a quotation"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_lost_reason_view_form
-msgid "Channel"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_team_use_opportunities
-msgid "Check this box to manage opportunities in this sales team."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
-msgid "Choose a date..."
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_city
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_city
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_leads
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search
-msgid "City"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_lead_tag_ids
-msgid "Classify and analyze your lead/opportunity categories like: Training, Service"
-msgstr ""
-
-#. module: crm
-#. openerp-web
-#: code:addons/crm/static/src/js/tour.js:23
-#, python-format
-msgid "Click here to <b>create your first opportunity</b> and add it to your pipeline."
-msgstr ""
-
-#. module: crm
-#. openerp-web
-#: code:addons/crm/static/src/js/tour.js:54
-#, python-format
-msgid "Click on an opportunity to zoom to it."
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/models/crm_lead.py:883
-#, python-format
-msgid "Click to add a new opportunity"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,help:crm.crm_activity_action
-msgid "Click to create a new activity."
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,help:crm.relate_partner_opportunities
-msgid "Click to create an opportunity related to this customer."
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,help:crm.crm_lost_reason_action
-msgid "Click to define a new lost reason."
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,help:crm.crm_lead_tag_action
-msgid "Click to define a new sales tag."
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,help:crm.crm_stage_action
-msgid "Click to set a new stage in your opportunity pipeline."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.base_partner_merge_automatic_wizard_form
-msgid "Close"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_date_closed
-msgid "Close Date"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_date_closed
-msgid "Closed Date"
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/wizard/crm_lead_to_opportunity.py:87
-#, python-format
-msgid "Closed/Dead leads cannot be converted into opportunities."
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_color
-#: model:ir.model.fields,field_description:crm.field_crm_lead_tag_color
-msgid "Color Index"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_report_company_id
-#: model:ir.model.fields,field_description:crm.field_crm_lead_company_id
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_company_id
-#: model:ir.ui.view,arch_db:crm.crm_activity_report_view_search
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-msgid "Company"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_leads
-msgid "Company Name"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Company XYZ"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Competition Matrix comparing prices"
-msgstr ""
-
-#. module: crm
-#. openerp-web
-#: code:addons/crm/static/src/js/tour.js:71
-#, python-format
-msgid "Configuration options are available in the Settings app."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Configure the stages of your sales pipeline"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Congratulations, you're done!"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Consumers"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
-msgid "Contact Information"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_contact_name
-msgid "Contact Name"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Contact Us"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_automatic_wizard_partner_ids
-msgid "Contacts"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_mass_name
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_name
-msgid "Conversion Action"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_date_conversion
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_date_conversion
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search
-msgid "Conversion Date"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search
-msgid "Conversion Date from Lead to Opportunity"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_crm_lead2opportunity_partner_mass
-msgid "Conversion Options"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_crm_lead2opportunity_partner_mass
-msgid "Convert to Opportunities"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_leads
-#: model:ir.ui.view,arch_db:crm.view_crm_lead2opportunity_partner
-#: model:ir.ui.view,arch_db:crm.view_crm_lead2opportunity_partner_mass
-msgid "Convert to Opportunity"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,name:crm.action_crm_send_mass_convert
-msgid "Convert to opportunities"
-msgstr ""
-
-#. module: crm
-#: selection:crm.lead2opportunity.partner,name:0
-#: selection:crm.lead2opportunity.partner.mass,name:0
-#: model:ir.actions.act_window,name:crm.action_crm_lead2opportunity_partner
-msgid "Convert to opportunity"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_lead_message_bounce
-msgid "Counter of the number of bounced emails for this contact"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_report_country_id
-#: model:ir.model.fields,field_description:crm.field_crm_lead_country_id
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_country_id
-#: model:ir.ui.view,arch_db:crm.crm_activity_report_view_search
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_leads
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-msgid "Country"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_create_opportunity_simplified
-msgid "Create"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Create Customers"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_create_date
-msgid "Create Date"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_crm_lead2opportunity_partner
-msgid "Create Opportunity"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Create Vendors"
-msgstr ""
-
-#. module: crm
-#: selection:crm.lead2opportunity.partner,action:0
-#: selection:crm.lead2projectissue.wizard,action:0
-#: selection:crm.partner.binding,action:0
-msgid "Create a new customer"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,name:crm.create_opportunity_simplified
-#: model:ir.ui.view,arch_db:crm.view_create_opportunity_simplified
-msgid "Create an Opportunity"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Create sleek and attractive event pages. Sell online and organize on site."
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,help:crm.crm_lead_tag_action
-msgid "Create specific tags that fit your company's activities\n"
-" to better classify and analyse your leads and opportunities.\n"
-" Such categories could for instance reflect your product\n"
-" structure or the different types of sales you do."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Create the three firsts opportunities"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Create your products"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Create your templates of offers"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_report_author_id
-#: model:ir.ui.view,arch_db:crm.crm_activity_report_view_search
-msgid "Created By"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_automatic_wizard_create_uid
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_line_create_uid
-#: model:ir.model.fields,field_description:crm.field_crm_activity_create_uid
-#: model:ir.model.fields,field_description:crm.field_crm_activity_log_create_uid
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_create_uid
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_mass_create_uid
-#: model:ir.model.fields,field_description:crm.field_crm_lead_create_uid
-#: model:ir.model.fields,field_description:crm.field_crm_lead_lost_create_uid
-#: model:ir.model.fields,field_description:crm.field_crm_lead_tag_create_uid
-#: model:ir.model.fields,field_description:crm.field_crm_lost_reason_create_uid
-#: model:ir.model.fields,field_description:crm.field_crm_merge_opportunity_create_uid
-#: model:ir.model.fields,field_description:crm.field_crm_partner_binding_create_uid
-#: model:ir.model.fields,field_description:crm.field_crm_stage_create_uid
-msgid "Created by"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_automatic_wizard_create_date
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_line_create_date
-#: model:ir.model.fields,field_description:crm.field_crm_activity_create_date
-#: model:ir.model.fields,field_description:crm.field_crm_activity_log_create_date
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_create_date
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_mass_create_date
-#: model:ir.model.fields,field_description:crm.field_crm_lead_lost_create_date
-#: model:ir.model.fields,field_description:crm.field_crm_lead_tag_create_date
-#: model:ir.model.fields,field_description:crm.field_crm_lost_reason_create_date
-#: model:ir.model.fields,field_description:crm.field_crm_merge_opportunity_create_date
-#: model:ir.model.fields,field_description:crm.field_crm_partner_binding_create_date
-#: model:ir.model.fields,field_description:crm.field_crm_stage_create_date
-msgid "Created on"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_create_date
-msgid "Creation Date"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search
-#: model:ir.ui.view,arch_db:crm.view_crm_case_leads_filter
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-msgid "Creation Month"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_company_currency
-msgid "Currency"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search
-msgid "Current"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_automatic_wizard_current_line_id
-msgid "Current Line"
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/models/crm_lead.py:1101
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_mass_partner_id
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_partner_id
-#: model:ir.model.fields,field_description:crm.field_crm_lead2projectissue_wizard_partner_id
-#: model:ir.model.fields,field_description:crm.field_crm_lead_partner_id
-#: model:ir.model.fields,field_description:crm.field_crm_partner_binding_partner_id
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_leads
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
-#: model:ir.ui.view,arch_db:crm.crm_case_tree_view_oppor
-#: model:ir.ui.view,arch_db:crm.view_crm_case_leads_filter
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-#, python-format
-msgid "Customer"
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/models/crm_lead.py:1103
-#, python-format
-msgid "Customer Email"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_partner_name
-msgid "Customer Name"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-#: model:ir.ui.view,arch_db:crm.view_crm_lead2opportunity_partner
-#: model:ir.ui.view,arch_db:crm.view_crm_lead2opportunity_partner_mass
-msgid "Customers"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Customizations"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_report_date
-msgid "Date"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_day_open
-msgid "Days to Assign"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_day_close
-msgid "Days to Close"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,name:crm.action_partner_deduplicate
-msgid "Deduplicate Contacts"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.base_partner_merge_automatic_wizard_form
-msgid "Deduplicate the other Contacts"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_default
-msgid "Default"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_sale_config_settings_alias_prefix
-msgid "Default Alias Name for Leads"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_team_alias_defaults
-msgid "Default Values"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_delay_open
-msgid "Delay to Assign"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_delay_close
-msgid "Delay to Close"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_kanban_view_leads
-msgid "Delete"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Depending on how complex your business is, it may take between 6 months and 18 months for a new\n"
-" sales team to efficiently forecasts future revenues."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Deployment"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_leads
-msgid "Describe the lead..."
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_description
-msgid "Description"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_activity_description
-msgid "Description that will be added in the message posted for this subtype. If void, the name will be added instead."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Design efficient email campaigns. Send, convert and track performance."
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_automatic_wizard_dst_partner_id
-msgid "Destination Contact"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_create_opportunity_simplified
-msgid "Discard"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_automatic_wizard_display_name
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_line_display_name
-#: model:ir.model.fields,field_description:crm.field_crm_activity_display_name
-#: model:ir.model.fields,field_description:crm.field_crm_activity_log_display_name
-#: model:ir.model.fields,field_description:crm.field_crm_activity_report_display_name
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_display_name
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_mass_display_name
-#: model:ir.model.fields,field_description:crm.field_crm_lead_display_name
-#: model:ir.model.fields,field_description:crm.field_crm_lead_lost_display_name
-#: model:ir.model.fields,field_description:crm.field_crm_lead_tag_display_name
-#: model:ir.model.fields,field_description:crm.field_crm_lost_reason_display_name
-#: model:ir.model.fields,field_description:crm.field_crm_merge_opportunity_display_name
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_display_name
-#: model:ir.model.fields,field_description:crm.field_crm_partner_binding_display_name
-#: model:ir.model.fields,field_description:crm.field_crm_stage_display_name
-msgid "Display Name"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Display your brochures, product sheets, showcases etc."
-msgstr ""
-
-#. module: crm
-#: selection:crm.lead2opportunity.partner,action:0
-#: selection:crm.lead2opportunity.partner.mass,action:0
-#: selection:crm.lead2projectissue.wizard,action:0
-#: selection:crm.partner.binding,action:0
-msgid "Do not link to a customer"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Don't forget to change this address on:"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Don't hesitate to"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Don't use stages to qualify opportunities, use tags instead"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Download the"
-msgstr ""
-
-#. module: crm
-#: selection:sale.config.settings,group_use_lead:0
-msgid "Each mail sent to the alias creates a new opportunity"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Each product can only have one price. (but you can change it when doing a quotation)\n"
-" <br/>\n"
-" Note: your product needs to be marked as 'Can be Sold' to have a Sale Price."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_sale_config_settings
-msgid "Each sales team has an email alias that\n"
-" could be setup on the sales team form. You\n"
-" can setup a generic email alias to create\n"
-" incoming leads."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_kanban_view_leads
-msgid "Edit"
-msgstr ""
-
-#. module: crm
-#: model:crm.activity,name:crm.crm_activity_data_email
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_automatic_wizard_group_by_email
-#: model:ir.model.fields,field_description:crm.field_crm_lead_email_from
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_leads
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
-#: model:mail.message.subtype,name:crm.crm_activity_data_email_mail_message_subtype
-msgid "Email"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.sales_team_form_view_in_crm
-msgid "Email Alias"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_lead_email_from
-msgid "Email address of the contact"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "End"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Engage directly with your website visitors to convert them into leads."
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_stage_requirements
-msgid "Enter here the internal requirements for this stage (ex: Offer sent to customer). It will appear as a tooltip over the stage's name."
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_lead_date_deadline
-msgid "Estimate of the date on which the opportunity will be won."
-msgstr ""
-
-#. module: crm
-#: model:ir.model,name:crm.model_calendar_event
-msgid "Event"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Every salesperson can analyze their own pipe by clicking on the 'switch view to graph' icon."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Every stage should be a step forward in the buyer's decision-making, not a task to carry out"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Examples"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Examples:"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Excel template"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_crm_case_leads_filter
-msgid "Exclude Opt Out"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.base_partner_merge_automatic_wizard_form
-msgid "Exclude contacts having"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Existing Tools"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_log_date_deadline
-#: model:ir.model.fields,field_description:crm.field_crm_lead_date_deadline
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_date_deadline
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search
-msgid "Expected Closing"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-msgid "Expected Closing Date"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_log_planned_revenue
-#: model:ir.model.fields,field_description:crm.field_crm_lead_planned_revenue
-msgid "Expected Revenue"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_tree_view_oppor
-msgid "Expected Revenues"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search
-msgid "Expiration Closing Month"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_stage_legend_priority
-msgid "Explanation text to help users using the star and priority mechanism on stages or issues that are in this stage."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search
-msgid "Extended Filters"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_leads
-msgid "Extra Info"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_fax
-msgid "Fax"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_activity_relation_field
-msgid "Field used to link the related model to the subtype model when using automatic subscription on a related document. The field is used to compute getattr(related_document.relation_field)."
-msgstr ""
-
-#. module: crm
-#: selection:base.partner.merge.automatic.wizard,state:0
-msgid "Finished"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_stage_fold
-msgid "Folded in Pipeline"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "For every deal, review the next action, the expected closing, the pain points, the expected revenues, the buying process, etc."
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/wizard/base_partner_merge.py:299
-#, python-format
-msgid "For safety reasons, you cannot merge more than 3 contacts together. You can re-open the wizard several times if needed."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "For the Odoo Team,<br/>\n"
-" Fabien Pinckaers, Founder"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_mass_force_assignation
-msgid "Force assignation"
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/models/crm_lead.py:554
-#, python-format
-msgid "From %s : %s"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Gain high quality insight from surveys, a great way to engage with prospects"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Gamification"
-msgstr ""
-
-#. module: crm
-#: model:ir.model,name:crm.model_crm_lead_lost
-msgid "Get Lost Reason"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_email_cc
-msgid "Global CC"
-msgstr ""
-
-#. module: crm
-#. openerp-web
-#: code:addons/crm/static/src/js/tour.js:80
-#, python-format
-msgid "Good job! Your completed the tour of the CRM. You can continue with the <b>implementation guide</b> to help you setup the CRM in your company."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Great pipelines have stages <strong>aligned with the buyer's buying process</strong>, not your selling process:"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_activity_report_view_search
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search
-#: model:ir.ui.view,arch_db:crm.view_crm_case_leads_filter
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-msgid "Group By"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_automatic_wizard_number_group
-msgid "Group of Contacts"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Grow leads acquisition"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Grow revenues"
-msgstr ""
-
-#. module: crm
-#: model:ir.model,name:crm.model_crm_partner_binding
-msgid "Handle partner binding or generation in CRM wizards."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Happy Selling!<br/>- The Odoo Team"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Have clear forecasts on sales"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Have fun deploying your sales strategy,"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Here are a few examples of documents you should provide to your sales team based on the sales stage:"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Here are some of the <strong>customizations available</strong>:"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,help:crm.crm_lead_action_activities
-msgid "Here is the list of your next activities. Those are linked to your opportunities.\n"
-" To set a next activity, go on an opportunity and add one. It will then appear in this list."
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_hidden
-msgid "Hidden"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_activity_hidden
-msgid "Hide the subtype in the follower options"
-msgstr ""
-
-#. module: crm
-#: selection:crm.lead,priority:0
-#: selection:crm.opportunity.report,priority:0
-msgid "High"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_automatic_wizard_id
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_line_id
-#: model:ir.model.fields,field_description:crm.field_crm_activity_id
-#: model:ir.model.fields,field_description:crm.field_crm_activity_log_id
-#: model:ir.model.fields,field_description:crm.field_crm_activity_report_id
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_id
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_mass_id
-#: model:ir.model.fields,field_description:crm.field_crm_lead_id
-#: model:ir.model.fields,field_description:crm.field_crm_lead_lost_id
-#: model:ir.model.fields,field_description:crm.field_crm_lead_tag_id
-#: model:ir.model.fields,field_description:crm.field_crm_lost_reason_id
-#: model:ir.model.fields,field_description:crm.field_crm_merge_opportunity_id
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_id
-#: model:ir.model.fields,field_description:crm.field_crm_partner_binding_id
-#: model:ir.model.fields,field_description:crm.field_crm_stage_id
-msgid "ID"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_team_alias_parent_thread_id
-msgid "ID of the parent record holding the alias (example: project holding the task creation alias)"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_line_aggr_ids
-msgid "Ids"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_lead_opt_out
-msgid "If opt-out is checked, this contact has refused to receive emails for mass mailing and marketing campaign. Filter 'Available for Mass Mailing' allows users to filter the leads when performing mass mailing."
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_lead2opportunity_partner_mass_force_assignation
-msgid "If unchecked, this will leave the salesman of duplicated opportunities"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "If you followed the preceding steps, you already setup\n"
-" the foundations to a strong process leading to\n"
-" continuous improvements of your sales teams."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "If you have less than 200 contacts, we recommend you\n"
-" to create them manually."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "If you sell subscriptions (whether it's invoiced annually or monthly), activate the"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "If you want to do it yourself:"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.menu,name:crm.menu_import_crm
-msgid "Import & Synchronize"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Import using the top left button in"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Improve average revenue per salesperson"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "In Odoo, there are 3 different ways to manage your products prices.<br/>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_lost_reason_view_search
-msgid "Include archived"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Incoming Emails"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_sale_config_settings_module_crm_voip
-msgid "Integration with Asterisk"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_leads
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
-msgid "Internal Notes"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_internal
-msgid "Internal Only"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Invoice Analysis"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_automatic_wizard_group_by_is_company
-msgid "Is Company"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_function
-msgid "Job Position"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_automatic_wizard_exclude_journal_item
-msgid "Journal Items associated to the contact"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "KPIs"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_date_action_last
-msgid "Last Action"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_automatic_wizard___last_update
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_line___last_update
-#: model:ir.model.fields,field_description:crm.field_crm_activity___last_update
-#: model:ir.model.fields,field_description:crm.field_crm_activity_log___last_update
-#: model:ir.model.fields,field_description:crm.field_crm_activity_report___last_update
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner___last_update
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_mass___last_update
-#: model:ir.model.fields,field_description:crm.field_crm_lead___last_update
-#: model:ir.model.fields,field_description:crm.field_crm_lead_lost___last_update
-#: model:ir.model.fields,field_description:crm.field_crm_lead_tag___last_update
-#: model:ir.model.fields,field_description:crm.field_crm_lost_reason___last_update
-#: model:ir.model.fields,field_description:crm.field_crm_merge_opportunity___last_update
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report___last_update
-#: model:ir.model.fields,field_description:crm.field_crm_partner_binding___last_update
-#: model:ir.model.fields,field_description:crm.field_crm_stage___last_update
-msgid "Last Modified on"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_date_last_stage_update
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_date_last_stage_update
-msgid "Last Stage Update"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_automatic_wizard_write_uid
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_line_write_uid
-#: model:ir.model.fields,field_description:crm.field_crm_activity_log_write_uid
-#: model:ir.model.fields,field_description:crm.field_crm_activity_write_uid
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_mass_write_uid
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_write_uid
-#: model:ir.model.fields,field_description:crm.field_crm_lead_lost_write_uid
-#: model:ir.model.fields,field_description:crm.field_crm_lead_tag_write_uid
-#: model:ir.model.fields,field_description:crm.field_crm_lead_write_uid
-#: model:ir.model.fields,field_description:crm.field_crm_lost_reason_write_uid
-#: model:ir.model.fields,field_description:crm.field_crm_merge_opportunity_write_uid
-#: model:ir.model.fields,field_description:crm.field_crm_partner_binding_write_uid
-#: model:ir.model.fields,field_description:crm.field_crm_stage_write_uid
-msgid "Last Updated by"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_automatic_wizard_write_date
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_line_write_date
-#: model:ir.model.fields,field_description:crm.field_crm_activity_log_write_date
-#: model:ir.model.fields,field_description:crm.field_crm_activity_write_date
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_mass_write_date
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_write_date
-#: model:ir.model.fields,field_description:crm.field_crm_lead_lost_write_date
-#: model:ir.model.fields,field_description:crm.field_crm_lead_tag_write_date
-#: model:ir.model.fields,field_description:crm.field_crm_lost_reason_write_date
-#: model:ir.model.fields,field_description:crm.field_crm_merge_opportunity_write_date
-#: model:ir.model.fields,field_description:crm.field_crm_partner_binding_write_date
-#: model:ir.model.fields,field_description:crm.field_crm_stage_write_date
-msgid "Last Updated on"
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/models/crm_lead.py:857
-#: selection:crm.activity.report,lead_type:0
-#: selection:crm.lead,type:0
-#: selection:crm.opportunity.report,type:0
-#: model:ir.model.fields,field_description:crm.field_crm_activity_log_lead_id
-#: model:ir.model.fields,field_description:crm.field_crm_activity_report_lead_id
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_leads
-#: model:ir.ui.view,arch_db:crm.crm_case_tree_view_leads
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search
-#, python-format
-msgid "Lead"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_crm_case_leads_filter
-msgid "Lead / Customer"
-msgstr ""
-
-#. module: crm
-#: model:mail.message.subtype,name:crm.mt_lead_create
-#: model:mail.message.subtype,name:crm.mt_salesteam_lead
-msgid "Lead Created"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,name:crm.crm_lead_tag_action
-#: model:ir.ui.menu,name:crm.menu_crm_lead_categ
-#: model:ir.ui.view,arch_db:crm.crm_lead_tag_form
-#: model:ir.ui.view,arch_db:crm.crm_lead_tag_tree
-msgid "Lead Tags"
-msgstr ""
-
-#. module: crm
-#: model:ir.model,name:crm.model_crm_lead2opportunity_partner
-msgid "Lead To Opportunity Partner"
-msgstr ""
-
-#. module: crm
-#: model:mail.message.subtype,description:crm.mt_lead_create
-msgid "Lead created"
-msgstr ""
-
-#. module: crm
-#: model:ir.model,name:crm.model_crm_lead
-msgid "Lead/Opportunity"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,name:crm.action_lead_mass_mail
-msgid "Lead/Opportunity Mass Mail"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,name:crm.crm_case_form_view_salesteams_lead
-#: model:ir.actions.act_window,name:crm.crm_lead_all_leads
-#: model:ir.model.fields,field_description:crm.field_crm_team_use_leads
-#: model:ir.model.fields,field_description:crm.field_sale_config_settings_group_use_lead
-#: model:ir.ui.menu,name:crm.crm_opportunity_report_menu_lead
-#: model:ir.ui.menu,name:crm.menu_crm_leads
-#: model:ir.ui.view,arch_db:crm.crm_activity_report_view_search
-#: model:ir.ui.view,arch_db:crm.crm_case_tree_view_leads
-#: model:ir.ui.view,arch_db:crm.crm_team_salesteams_view_kanban
-#: model:ir.ui.view,arch_db:crm.sales_team_form_view_in_crm
-msgid "Leads"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.menu,name:crm.menu_crm_config_lead
-msgid "Leads & Opportunities"
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/models/crm_lead.py:59
-#, python-format
-msgid "Leads / Opportunities"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,name:crm.action_report_crm_lead_salesteam
-#: model:ir.actions.act_window,name:crm.crm_opportunity_report_action_lead
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_graph_lead
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_pivot_lead
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Leads Analysis"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,help:crm.action_report_crm_lead_salesteam
-msgid "Leads Analysis allows you to check different CRM related information like the treatment delays or number of leads per state. You can sort out your leads analysis by different groups to get accurate grained analysis."
-msgstr ""
-
-#. module: crm
-#: model:ir.filters,name:crm.filter_opportunity_salesperson
-msgid "Leads By Salespersons"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_sale_config_settings
-msgid "Leads Email Alias"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_leads
-msgid "Leads Form"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_calendar_view_leads
-msgid "Leads Generation"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Leads by Source"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_crm_case_leads_filter
-msgid "Leads that are assigned to me"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_crm_case_leads_filter
-msgid "Leads that did not ask not to be included in mass mailing campaigns"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_crm_lead2opportunity_partner_mass
-msgid "Leads that you selected that have duplicates. If the list is empty, it means that no duplicates were found"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_crm_lead2opportunity_partner_mass
-msgid "Leads with existing duplicates (for information)"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_merge_opportunity_opportunity_ids
-msgid "Leads/Opportunities"
-msgstr ""
-
-#. module: crm
-#. openerp-web
-#: code:addons/crm/static/src/js/tour.js:18
-#, python-format
-msgid "Let's have a look at your opportunities pipeline."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Licences"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_automatic_wizard_line_ids
-msgid "Lines"
-msgstr ""
-
-#. module: crm
-#: selection:crm.lead2opportunity.partner,action:0
-#: selection:crm.lead2projectissue.wizard,action:0
-#: selection:crm.partner.binding,action:0
-msgid "Link to an existing customer"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_lead_partner_id
-msgid "Linked partner (optional). Usually created when converting the lead."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "List of possible pain points by segment/profile"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_activity_log_view_form
-msgid "Log & Schedule Next"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
-msgid "Log Activity"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_activity_log_view_form
-msgid "Log Only"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_activity_log_view_form
-msgid "Log a note..."
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,name:crm.crm_activity_log_action
-#: model:ir.model,name:crm.model_crm_activity_log
-#: model:ir.ui.view,arch_db:crm.crm_activity_log_view_form
-msgid "Log an Activity"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-msgid "Lost"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,name:crm.crm_lead_lost_action
-#: model:ir.model.fields,field_description:crm.field_crm_lead_lost_lost_reason_id
-#: model:ir.model.fields,field_description:crm.field_crm_lead_lost_reason
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_lost_reason
-#: model:ir.ui.view,arch_db:crm.crm_lead_lost_view_form
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-msgid "Lost Reason"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,name:crm.crm_lost_reason_action
-#: model:ir.ui.menu,name:crm.menu_crm_lost_reason
-msgid "Lost Reasons"
-msgstr ""
-
-#. module: crm
-#: selection:crm.lead,priority:0
-#: selection:crm.opportunity.report,priority:0
-msgid "Low"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
-msgid "Mark Lost"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
-msgid "Mark Won"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.server,name:crm.action_mark_as_lost
-msgid "Mark as lost"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
-msgid "Marketing"
-msgstr ""
-
-#. module: crm
-#: model:ir.model,name:crm.model_crm_lead2opportunity_partner_mass
-msgid "Mass Lead To Opportunity Partner"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_automatic_wizard_maximum_group
-msgid "Maximum of Group of Contacts"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_medium_id
-#: model:ir.ui.view,arch_db:crm.view_crm_case_leads_filter
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-msgid "Medium"
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/models/crm_lead.py:899
-#, python-format
-msgid "Meeting scheduled at '%s'<br> Subject: %s <br> Duration: %s hour(s)"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,name:crm.act_crm_opportunity_calendar_event_new
-#: model:ir.actions.act_window,name:crm.calendar_event_partner
-#: model:ir.model.fields,field_description:crm.field_res_partner_meeting_ids
-#: model:ir.model.fields,field_description:crm.field_res_users_meeting_ids
-#: model:ir.ui.view,arch_db:crm.view_partners_form_crm1
-msgid "Meetings"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.merge_opportunity_form
-msgid "Merge"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.base_partner_merge_automatic_wizard_form
-msgid "Merge Automatically"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.base_partner_merge_automatic_wizard_form
-msgid "Merge Automatically all process"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.base_partner_merge_automatic_wizard_form
-msgid "Merge Contacts"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.merge_opportunity_form
-msgid "Merge Leads/Opportunities"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,name:crm.action_partner_merge
-msgid "Merge Selected Contacts"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,name:crm.action_merge_opportunities
-#: model:ir.actions.act_window,name:crm.merge_opportunity_act
-msgid "Merge leads/opportunities"
-msgstr ""
-
-#. module: crm
-#: model:ir.model,name:crm.model_crm_merge_opportunity
-msgid "Merge opportunities"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.base_partner_merge_automatic_wizard_form
-msgid "Merge the following contacts"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.base_partner_merge_automatic_wizard_form
-msgid "Merge with Manual Check"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_lead2opportunity_partner_mass_deduplicate
-msgid "Merge with existing leads/opportunities of each partner"
-msgstr ""
-
-#. module: crm
-#: selection:crm.lead2opportunity.partner,name:0
-#: selection:crm.lead2opportunity.partner.mass,name:0
-msgid "Merge with existing opportunities"
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/models/crm_lead.py:502
-#, python-format
-msgid "Merged lead"
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/models/crm_lead.py:536
-#, python-format
-msgid "Merged leads"
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/models/crm_lead.py:536
-#, python-format
-msgid "Merged opportunities"
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/models/crm_lead.py:502
-#, python-format
-msgid "Merged opportunity"
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/wizard/base_partner_merge.py:331
-#, python-format
-msgid "Merged with the following partners:"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_subtype_id
-msgid "Message Subtype"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_name
-msgid "Message Type"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_activity_name
-msgid "Message subtype gives a more precise type on the message, especially for system notifications. For example, it can be a notification related to a new record (New), or to a stage change in a process (Stage change). Message subtypes allow to precisely tune the notifications the user want to receive on its wall."
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_activity_internal
-msgid "Messages with internal subtypes will be visible only by employees, aka members of base_user group"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_line_min_id
-msgid "MinID"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
-msgid "Misc"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_mobile
-msgid "Mobile"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_res_model
-msgid "Model"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_activity_res_model
-msgid "Model the subtype applies to. If False, this subtype applies to all models."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_activity_report_view_search
-msgid "Month"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_sale_config_settings
-msgid "More Info"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Motivation letter from the management"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_crm_case_leads_filter
-msgid "My Leads"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-msgid "My Opportunities"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.server,name:crm.action_your_pipeline
-#: model:ir.ui.menu,name:crm.menu_crm_opportunities
-msgid "My Pipeline"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_automatic_wizard_group_by_name
-#: model:ir.model.fields,field_description:crm.field_crm_lead_tag_name
-#: model:ir.model.fields,field_description:crm.field_crm_lost_reason_name
-msgid "Name"
-msgstr ""
-
-#. module: crm
-#: model:crm.stage,name:crm.stage_lead1
-msgid "New"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,name:crm.action_opportunity_form
-msgid "New Opportunity"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_date_action_next
-msgid "Next Action"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,name:crm.crm_lead_action_activities
-#: model:ir.ui.menu,name:crm.crm_lead_menu_activities
-msgid "Next Activities"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_next_activity_id
-#: model:ir.ui.view,arch_db:crm.crm_lead_view_tree_activity
-msgid "Next Activity"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_log_date_action
-#: model:ir.model.fields,field_description:crm.field_crm_lead_date_action
-msgid "Next Activity Date"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_title_action
-msgid "Next Activity Summary"
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/wizard/crm_activity_log.py:61
-#, python-format
-msgid "Next activity"
-msgstr ""
-
-#. module: crm
-#: selection:crm.lead,kanban_state:0
-msgid "Next activity is planned"
-msgstr ""
-
-#. module: crm
-#: selection:crm.lead,kanban_state:0
-msgid "Next activity late"
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/models/crm_lead.py:1123
-#, python-format
-msgid "No Subject"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_activity_log_view_form_schedule
-msgid "No activity"
-msgstr ""
-
-#. module: crm
-#: selection:crm.lead,kanban_state:0
-msgid "No next activity planned"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_crm_case_leads_filter
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-msgid "No salesperson"
-msgstr ""
-
-#. module: crm
-#: selection:crm.lead,priority:0
-#: selection:crm.opportunity.report,priority:0
-msgid "Normal"
-msgstr ""
-
-#. module: crm
-#: model:crm.lost.reason,name:crm.lost_reason_3
-msgid "Not enough stock"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_log_note
-msgid "Note"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Note: To use those features, you need to install the"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_description
-msgid "Notes"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_opportunity_report_delay_close
-msgid "Number of Days to close the case"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_opportunity_report_delay_open
-msgid "Number of Days to open the case"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Number of Rooms"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_days
-msgid "Number of days"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_activity_days
-msgid "Number of days before executing the action, allowing you to plan the date of the action."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Odoo Default"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_sale_config_settings_module_website_sign
-#: model:ir.ui.view,arch_db:crm.view_sale_config_settings
-msgid "Odoo Sign"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,help:crm.crm_case_form_view_salesteams_opportunity
-#: model:ir.actions.act_window,help:crm.crm_lead_opportunities
-#: model:ir.actions.act_window,help:crm.crm_lead_opportunities_tree_view
-msgid "Odoo helps you keep track of your sales pipeline to follow\n"
-" up potential sales and better forecast your future revenues."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Odoo is the world's only software to have a full integration of Marketing Apps for your sales channel: insight sales, point of sale, ecommerce."
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_sale_config_settings_generate_sales_team_alias
-msgid "Odoo will generate an email alias based on the sales team name"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Odoo will help you create polished, professional quotations and contracts in minutes.\n"
-" Tell us how you sell and we will tell you what\n"
-" configuration will best fit your quotation process."
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,help:crm.crm_case_form_view_salesteams_lead
-#: model:ir.actions.act_window,help:crm.crm_lead_all_leads
-msgid "Once qualified, the lead can be converted into a business\n"
-" opportunity and/or a new customer in your address book."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Once you’ve deployed your CRM, it’s time to grow your revenues. Start by setting up a continuous improvement approach.We recommend you to organize weekly sales meeting with the team during which you will do a pipeline review."
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/wizard/base_partner_merge.py:323
-#, python-format
-msgid "Only the destination contact may be linked to existing Journal Items. Please ask the Administrator if you need to merge several contacts linked to existing Journal Items."
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,name:crm.crm_case_form_view_salesteams_opportunity
-#: model:ir.actions.act_window,name:crm.crm_lead_opportunities
-#: model:ir.actions.act_window,name:crm.relate_partner_opportunities
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_mass_opportunity_ids
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_opportunity_ids
-#: model:ir.model.fields,field_description:crm.field_crm_team_use_opportunities
-#: model:ir.model.fields,field_description:crm.field_res_partner_opportunity_ids
-#: model:ir.model.fields,field_description:crm.field_res_users_opportunity_ids
-#: model:ir.ui.menu,name:crm.menu_crm_config_opportunity
-#: model:ir.ui.view,arch_db:crm.crm_activity_report_view_search
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
-#: model:ir.ui.view,arch_db:crm.crm_case_graph_view_leads
-#: model:ir.ui.view,arch_db:crm.crm_case_pivot_view_leads
-#: model:ir.ui.view,arch_db:crm.crm_case_tree_view_oppor
-#: model:ir.ui.view,arch_db:crm.crm_team_salesteams_view_kanban
-#: model:ir.ui.view,arch_db:crm.view_crm_lead2opportunity_partner
-#: model:ir.ui.view,arch_db:crm.view_partners_form_crm1
-msgid "Opportunities"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Opportunities Analysis"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,help:crm.action_report_crm_opportunity_salesteam
-msgid "Opportunities Analysis gives you an instant access to your opportunities with information such as the expected revenue, planned cost, missed deadlines or the number of interactions per opportunity. This report is mainly used by the sales manager in order to do the periodic review with the teams of the sales pipeline."
-msgstr ""
-
-#. module: crm
-#: model:ir.filters,name:crm.filter_opportunity_opportunities_cohort
-msgid "Opportunities Cohort"
-msgstr ""
-
-#. module: crm
-#: model:ir.filters,name:crm.filter_opportunity_opportunities_won_per_team
-msgid "Opportunities Won Per Team"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Opportunities pipeline"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-msgid "Opportunities that are assigned to me"
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/models/crm_lead.py:832
-#: selection:crm.activity.report,lead_type:0
-#: selection:crm.lead,type:0
-#: selection:crm.opportunity.report,type:0
-#: model:ir.model.fields,field_description:crm.field_calendar_event_opportunity_id
-#: model:ir.model.fields,field_description:crm.field_crm_lead_name
-#: model:ir.model.fields,field_description:crm.field_res_partner_opportunity_count
-#: model:ir.model.fields,field_description:crm.field_res_users_opportunity_count
-#: model:ir.ui.view,arch_db:crm.crm_case_tree_view_oppor
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search
-#: model:ir.ui.view,arch_db:crm.crm_team_salesteams_view_kanban
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-#, python-format
-msgid "Opportunity"
-msgstr ""
-
-#. module: crm
-#: model:mail.message.subtype,name:crm.mt_lead_lost
-#: model:mail.message.subtype,name:crm.mt_salesteam_lead_lost
-msgid "Opportunity Lost"
-msgstr ""
-
-#. module: crm
-#: model:mail.message.subtype,name:crm.mt_salesteam_lead_stage
-msgid "Opportunity Stage Changed"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_create_opportunity_simplified
-msgid "Opportunity Title"
-msgstr ""
-
-#. module: crm
-#: model:mail.message.subtype,name:crm.mt_lead_won
-#: model:mail.message.subtype,name:crm.mt_salesteam_lead_won
-msgid "Opportunity Won"
-msgstr ""
-
-#. module: crm
-#: model:mail.message.subtype,description:crm.mt_lead_lost
-msgid "Opportunity lost"
-msgstr ""
-
-#. module: crm
-#: model:mail.message.subtype,description:crm.mt_lead_won
-msgid "Opportunity won"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_opt_out
-msgid "Opt-Out"
-msgstr ""
-
-#. module: crm
-#: selection:base.partner.merge.automatic.wizard,state:0
-msgid "Option"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_team_alias_force_thread_id
-msgid "Optional ID of a thread (record) to which all incoming messages will be attached, even if they did not reply to it. If set, this will disable the creation of new records completely."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.base_partner_merge_automatic_wizard_form
-msgid "Options"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-msgid "Overdue Activities"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_delay_expected
-msgid "Overpassed Deadline"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_team_alias_user_id
-msgid "Owner"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_parent_id
-msgid "Parent"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_automatic_wizard_group_by_parent_id
-msgid "Parent Company"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_team_alias_parent_model_id
-msgid "Parent Model"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_team_alias_parent_thread_id
-msgid "Parent Record Thread ID"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_team_alias_parent_model_id
-msgid "Parent model holding the alias. The model holding the alias reference is not necessarily the model given by alias_model_id (example: project (parent_model) and task (model))"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_activity_parent_id
-msgid "Parent subtype, used for automatic subscription. This field is not correctly named. For example on a project, the parent_id of project subtypes refers to task-related subtypes."
-msgstr ""
-
-#. module: crm
-#: model:ir.model,name:crm.model_res_partner
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_partner_id
-#: model:ir.ui.view,arch_db:crm.view_crm_case_leads_filter
-msgid "Partner"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_partner_address_email
-msgid "Partner Contact Email"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_partner_address_name
-msgid "Partner Contact Name"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_report_partner_id
-msgid "Partner/Customer"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.base_partner_merge_automatic_wizard_form
-msgid "Partners"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_phone
-msgid "Phone"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Phone scripts"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.menu,name:crm.crm_opportunity_report_menu
-#: model:ir.ui.view,arch_db:crm.crm_planner
-#: model:ir.ui.view,arch_db:crm.crm_team_salesteams_view_kanban
-msgid "Pipeline"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,name:crm.action_report_crm_opportunity_salesteam
-#: model:ir.actions.act_window,name:crm.crm_opportunity_report_action
-#: model:ir.actions.act_window,name:crm.crm_opportunity_report_action_graph
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_graph
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_pivot
-#: model:ir.ui.view,arch_db:crm.crm_team_salesteams_view_kanban
-msgid "Pipeline Analysis"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,help:crm.crm_opportunity_report_action
-msgid "Pipeline Analysis gives you an instant access to\n"
-"your opportunities with information such as the expected revenue, planned cost,\n"
-"missed deadlines or the number of interactions per opportunity. This report is\n"
-"mainly used by the sales manager in order to do the periodic review with the\n"
-"teams of the sales pipeline."
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,help:crm.crm_opportunity_report_action_graph
-msgid "Pipeline Analysis gives you an instant access to\n"
-"your opportunities with information such as the expected revenue, planned cost,\n"
-"missed deadlines or the number of interactions per opportunity. This report is\n"
-"mainly used by the sales manager in order to periodically review the pipeline\n"
-"with the the sales teams."
-msgstr ""
-
-#. module: crm
-#: model:web.planner,tooltip_planner:crm.planner_crm
-msgid "Plan your sales strategy: objectives, leads, KPIs, and much more!"
-msgstr ""
-
-#. module: crm
-#: model:ir.model,name:crm.model_web_planner
-msgid "Planner"
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/models/crm_lead.py:608
-#, python-format
-msgid "Please select more than one element (lead or opportunity) from the list view."
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_team_alias_contact
-msgid "Policy to post a message on the document using the mailgateway.\n"
-"- everyone: everyone can post\n"
-"- partners: only authenticated partners\n"
-"- followers: only followers of the related document or members of following channels\n"
-""
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_preceding_activity_ids
-msgid "Preceding Activities"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_log_last_activity_id
-msgid "Previous Activity"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Prices"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Prices can be computed using advanced formulas.<br/>\n"
-" Example: 15% discount when buying more than 3 t-shirts."
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_priority
-msgid "Priority"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_stage_legend_priority
-msgid "Priority Management Explanation"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_report_probability
-#: model:ir.model.fields,field_description:crm.field_crm_lead_probability
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_probability
-msgid "Probability"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_stage_probability
-msgid "Probability (%)"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_expected_revenue
-msgid "Probable Turnover"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Products"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Proposal"
-msgstr ""
-
-#. module: crm
-#: model:crm.stage,name:crm.stage_lead3
-msgid "Proposition"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Qualification form (you can use the survey app for this)"
-msgstr ""
-
-#. module: crm
-#: model:crm.stage,name:crm.stage_lead2
-msgid "Qualified"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_priority
-msgid "Rating"
-msgstr ""
-
-#. module: crm
-#. openerp-web
-#: code:addons/crm/static/src/js/tour.js:13
-#, python-format
-msgid "Ready to boost you sales? Your <b>sales pipeline</b> can be found here, under this app."
-msgstr ""
-
-#. module: crm
-#: model:ir.model,name:crm.model_crm_lost_reason
-msgid "Reason for loosing leads"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_log_recommended_activity_id
-msgid "Recommended Activities"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_recommended_activity_ids
-msgid "Recommended Next Activities"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_team_alias_force_thread_id
-msgid "Record Thread ID"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_referred
-msgid "Referred By"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_action
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_mass_action
-#: model:ir.model.fields,field_description:crm.field_crm_lead2projectissue_wizard_action
-#: model:ir.model.fields,field_description:crm.field_crm_partner_binding_action
-msgid "Related Customer"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_relation_field
-msgid "Relation field"
-msgstr ""
-
-#. module: crm
-#: model:mail.template,subject:crm.email_template_opportunity_reminder_mail
-msgid "Reminder: Lead ${object.name} from ${object.partner_id != False and object.partner_id.name or object.contact_name}"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Reporting"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_stage_requirements
-#: model:ir.ui.view,arch_db:crm.crm_stage_form
-msgid "Requirements"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Retailers"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Revenue by Salesperson"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Sale Flow"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Sales Forecasts (month+1)"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Sales Management module."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Sales Settings"
-msgstr ""
-
-#. module: crm
-#: model:ir.model,name:crm.model_crm_team
-#: model:ir.model.fields,field_description:crm.field_crm_activity_log_team_id
-#: model:ir.model.fields,field_description:crm.field_crm_activity_report_team_id
-#: model:ir.model.fields,field_description:crm.field_crm_activity_team_id
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_mass_team_id
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_team_id
-#: model:ir.model.fields,field_description:crm.field_crm_lead_team_id
-#: model:ir.model.fields,field_description:crm.field_crm_merge_opportunity_team_id
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_team_id
-#: model:ir.ui.view,arch_db:crm.crm_activity_report_view_search
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search
-#: model:ir.ui.view,arch_db:crm.view_crm_case_leads_filter
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-msgid "Sales Team"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Sales Tools"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_mass_user_ids
-msgid "Salesmen"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_report_user_id
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_mass_user_id
-#: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_user_id
-#: model:ir.model.fields,field_description:crm.field_crm_lead_user_id
-#: model:ir.model.fields,field_description:crm.field_crm_merge_opportunity_user_id
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search
-#: model:ir.ui.view,arch_db:crm.view_crm_case_leads_filter
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-msgid "Salesperson"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Save filters or add any report to your dashboard with the Favorites menu."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_activity_log_view_form_schedule
-msgid "Schedule Activity"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_activity_log_view_form_schedule
-msgid "Schedule Next Activity"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,name:crm.crm_activity_schedule_action
-msgid "Schedule an Activity"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_crm_case_leads_filter
-msgid "Search Leads"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_lost_reason_view_search
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-msgid "Search Opportunities"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.base_partner_merge_automatic_wizard_form
-msgid "Search duplicates based on duplicated data in"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.merge_opportunity_form
-msgid "Select Leads/Opportunities"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.base_partner_merge_automatic_wizard_form
-msgid "Select the list of fields used to search for\n"
-" duplicated records. If you select several fields,\n"
-" Odoo will propose you to merge only those having\n"
-" all these fields in common. (not one of the fields)."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.base_partner_merge_automatic_wizard_form
-msgid "Selected contacts will be merged together.\n"
-" All documents linked to one of these contacts\n"
-" will be redirected to the destination contact.\n"
-" You can remove contacts from this list to avoid merging them."
-msgstr ""
-
-#. module: crm
-#: selection:base.partner.merge.automatic.wizard,state:0
-msgid "Selection"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Send an email to all opportunities in the \"Qualified\" stage for more than 20 days"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_sequence
-#: model:ir.model.fields,field_description:crm.field_crm_stage_sequence
-msgid "Sequence"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Set the sales manager as a follower of every opportunity above $20k"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_stage_on_change
-msgid "Setting this stage will change the probability automatically on the opportunity."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Setting up your sales funnel is just the first step. To achieve a\n"
-" significant boost, we will help you get the most out of\n"
-" Odoo CRM to transform how your salespeople work.\n"
-" That's the purpose of this guide."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_sale_config_settings
-msgid "Setup your domain alias"
-msgstr ""
-
-#. module: crm
-#: model:res.groups,name:crm.group_use_lead
-msgid "Show Lead Menu"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Show advanced filters and options by clicking on the magnifying glass icon next to the search bar."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-msgid "Show all opportunities for which the next action date is before today"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_activity_report_view_search
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search
-msgid "Show only lead"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_activity_report_view_search
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search
-msgid "Show only opportunity"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.base_partner_merge_automatic_wizard_form
-msgid "Skip these contacts"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Slides"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Solution Selling"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,help:crm.crm_lost_reason_action
-msgid "Some examples of lost reasons: \"We don't have people/skill\", \"Price too high\""
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_source_id
-#: model:ir.ui.view,arch_db:crm.view_crm_case_leads_filter
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-msgid "Source"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_stage_team_id
-msgid "Specific team that uses this stage. Other teams will not ne able to see or use this stage."
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_report_stage_id
-#: model:ir.model.fields,field_description:crm.field_crm_lead_stage_id
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_stage_id
-#: model:ir.ui.view,arch_db:crm.crm_activity_report_view_search
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search
-#: model:ir.ui.view,arch_db:crm.crm_stage_form
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-msgid "Stage"
-msgstr ""
-
-#. module: crm
-#: model:mail.message.subtype,name:crm.mt_lead_stage
-msgid "Stage Changed"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_stage_name
-#: model:ir.model.fields,field_description:crm.field_crm_stage_name
-msgid "Stage Name"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_lead_stage_search
-msgid "Stage Search"
-msgstr ""
-
-#. module: crm
-#: model:mail.message.subtype,description:crm.mt_lead_stage
-msgid "Stage changed"
-msgstr ""
-
-#. module: crm
-#: model:ir.model,name:crm.model_crm_stage
-msgid "Stage of case"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,name:crm.crm_stage_action
-#: model:ir.ui.menu,name:crm.menu_crm_lead_stage_act
-#: model:ir.ui.view,arch_db:crm.crm_stage_tree
-msgid "Stages"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,help:crm.crm_stage_action
-msgid "Stages allow salespersons to easily track how a specific opportunity\n"
-" is positioned in the sales cycle."
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_automatic_wizard_state
-#: model:ir.model.fields,field_description:crm.field_crm_lead_state_id
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_leads
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
-msgid "State"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_street
-msgid "Street"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_leads
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
-msgid "Street 2..."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_leads
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
-msgid "Street..."
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_street2
-msgid "Street2"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_lead_lost_view_form
-msgid "Submit"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Subscription Management"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_log_title_action
-#: model:ir.model.fields,field_description:crm.field_crm_activity_report_subject
-msgid "Summary"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Systematic organization is what makes the difference\n"
-" between good and great salespeople! Setup a pipeline\n"
-" that is in line with your sales cycle."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_crm_case_leads_filter
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-msgid "Tag"
-msgstr ""
-
-#. module: crm
-#: sql_constraint:crm.lead.tag:0
-msgid "Tag name already exists !"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_tag_ids
-msgid "Tags"
-msgstr ""
-
-#. module: crm
-#: model:crm.activity,name:crm.crm_activity_data_meeting
-#: model:mail.message.subtype,name:crm.crm_activity_data_meeting_mail_message_subtype
-msgid "Task"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_stage_team_id
-msgid "Team"
-msgstr ""
-
-#. module: crm
-#: model:ir.filters,name:crm.ir_filters_crm_opportunity_report_next_action
-msgid "Team Activities"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Templates of emails"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Templates of quotations (use Odoo Online Proposals for this)"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_team_alias_id
-msgid "The email address associated with this team. New emails received will automatically create new leads assigned to the team."
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_team_use_leads
-msgid "The first contact you get with a potential customer is a lead you qualify before converting it into a real business opportunity. Check this box to manage leads in this sales team."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "The first stage is usually \"New\" and the last one is \"Won\""
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_team_alias_model_id
-msgid "The model (Odoo Document Kind) to which this alias corresponds. Any incoming email that does not reply to an existing record will cause the creation of a new record of this model (e.g. a Project Task)"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_team_alias_name
-msgid "The name of the email alias, e.g. 'jobs' if you want to catch emails for <jobs@example.odoo.com>"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_lead_partner_name
-msgid "The name of the future partner company that will be created while converting the lead into opportunity"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_team_alias_user_id
-msgid "The owner of records created upon receiving emails on this alias. If this field is not set the system will attempt to find the right owner based on the sender (From) address, or will use the Administrator account if no system user is found for that address."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "The point of contact <strong>for all your prospects</strong>"
-msgstr ""
-
-#. module: crm
-#: sql_constraint:crm.lead:0
-msgid "The probability of closing the deal should be between 0% and 100%!"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "The three main practices to develop a sales force are\n"
-" <strong>methodical organization</strong>, <strong>trainings</strong> and\n"
-" <strong>good sales tools</strong>."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "The whole process may take a few hours. But it's worth doing\n"
-" it."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "There are several ways for your company to generate leads with Odoo CRM.\n"
-" One of them is using your company's generic email address as a trigger\n"
-" to create a new lead in the system. In Odoo, each one of your sales teams\n"
-" is linked to its own email address from which prospects can reach them.\n"
-" For example, if the personal email address of your Direct team is\n"
-" direct@mycompany.example.com, every email sent when a new prospect\n"
-" contacts you will automatically create a new opportunity into the sales team.\n"
-"\n"
-" That's the easiest way to integrate Odoo with third party apps."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.base_partner_merge_automatic_wizard_form
-msgid "There is no more contacts to merge for this request..."
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_lead_email_cc
-msgid "These email addresses will be added to the CC field of all inbound and outbound emails for this record before being sent. Separate multiple email addresses with a comma"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-msgid "This Week Activities"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "This email address has been preconfigured as the default\n"
-" for your sales department.<br/>"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "This is the default configuration, there is nothing to setup."
-msgstr ""
-
-#. module: crm
-#. openerp-web
-#: code:addons/crm/static/src/js/tour.js:40
-#, python-format
-msgid "This opportunity has <b>no next activity scheduled</b>. <i>Click to set one.</i>"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_stage_probability
-msgid "This percentage depicts the default/average probability of the Case for this stage to be a success"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,help:crm.crm_opportunity_report_action_lead
-msgid "This report analyses the source of your leads\n"
-"(including those converted into opportunities)."
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_stage_fold
-msgid "This stage is folded in the kanban view when there are no records in that stage to display."
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/models/crm_lead.py:1026
-#, python-format
-msgid "This target does not exist."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Time to Close a Deal"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Time to Qualify a Lead"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_title
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_leads
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
-msgid "Title"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-msgid "Today Activities"
-msgstr ""
-
-#. module: crm
-#: model:crm.lost.reason,name:crm.lost_reason_1
-msgid "Too expensive"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_total_revenue
-msgid "Total Revenue"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_leads
-msgid "Tracking"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_activity_report_lead_type
-#: model:ir.model.fields,field_description:crm.field_crm_lead_type
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_type
-msgid "Type"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_activity_report_lead_type
-#: model:ir.model.fields,help:crm.field_crm_lead_type
-#: model:ir.model.fields,help:crm.field_crm_opportunity_report_type
-msgid "Type is used to separate Leads and Opportunities"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_kanban_view_leads
-msgid "Unarchive"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_crm_case_leads_filter
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-msgid "Unassigned"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Unless you are starting a new business, you probably have a list of customers and vendors you'd like to import."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_kanban_view_leads
-#: model:ir.ui.view,arch_db:crm.view_crm_case_leads_filter
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-msgid "Unread Messages"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_write_date
-msgid "Update Date"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Upsell more to existing customers"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Use"
-msgstr ""
-
-#. module: crm
-#: selection:crm.lead2opportunity.partner.mass,action:0
-msgid "Use existing partner or create"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,help:crm.crm_case_form_view_salesteams_lead
-#: model:ir.actions.act_window,help:crm.crm_lead_all_leads
-msgid "Use leads if you need a qualification step before creating an\n"
-" opportunity or a customer. It can be a business card you received,\n"
-" a contact form filled in your website, or a file of unqualified\n"
-" prospects you import, etc."
-msgstr ""
-
-#. module: crm
-#: selection:sale.config.settings,group_use_lead:0
-msgid "Use leads if you need a qualification step before creating an opportunity or a customer"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,help:crm.crm_lost_reason_action
-msgid "Use lost reasons to explain why an opportunity is lost."
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,help:crm.relate_partner_opportunities
-msgid "Use opportunities to keep track of your sales pipeline, follow\n"
-" up potential sales and better forecast your future revenues."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Use subscription for recurring billing.\n"
-" Examples of subscription may include:\n"
-" annual support contract, monthly\n"
-" subscription to a service, etc."
-msgstr ""
-
-#. module: crm
-#. openerp-web
-#: code:addons/crm/static/src/js/tour.js:84
-#, python-format
-msgid "Use the <b>implementation guide</b> to setup the CRM in your company."
-msgstr ""
-
-#. module: crm
-#. openerp-web
-#: code:addons/crm/static/src/js/tour.js:66
-#, python-format
-msgid "Use the breadcrumbs to <b>go back to your sales pipeline</b>."
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_team_resource_calendar_id
-msgid "Used to compute open days"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_lead_user_login
-msgid "Used to log into the system"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_stage_sequence
-msgid "Used to order stages. Lower is better."
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report_user_id
-msgid "User"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_user_email
-msgid "User Email"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_user_login
-msgid "User Login"
-msgstr ""
-
-#. module: crm
-#: model:ir.model,name:crm.model_res_users
-msgid "Users"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_automatic_wizard_group_by_vat
-msgid "VAT"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "VIP letter to potential sponsors"
-msgstr ""
-
-#. module: crm
-#: selection:crm.lead,priority:0
-#: selection:crm.opportunity.report,priority:0
-msgid "Very High"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_sale_config_settings_module_crm_voip
-msgid "VoIP integration"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_sale_config_settings
-msgid "Voip integration"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "We are here to help you. If you get stuck, do not hesitate to\n"
-" reach our"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "We can add fields related to your business on any screen, for example"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "We can automate steps in your workflow, for example:"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "We can handle the whole import process\n"
-" for you: simply send your Odoo project\n"
-" manager a CSV file containing all your\n"
-" data."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "We can handle the whole import process\n"
-" for you: simply send your Odoo project\n"
-" manager a CSV file containing all your\n"
-" products."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "We can implement custom reports for you based on your Word templates, for example:"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "We designed Odoo to help you grow your business. Odoo CRM\n"
-" is not just a tool, we want it to have a major impact on your\n"
-" sales performance. That's our mission, and we are serious about it."
-msgstr ""
-
-#. module: crm
-#: model:crm.lost.reason,name:crm.lost_reason_2
-msgid "We don't have people/skills"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "We hope this process helped you bring your sales vision to life."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Weekly Meetings"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Welcome"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "What <strong>kind of proposals</strong> do you usually send to your customers ?"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "What are the main KPIs you need to track for your the sales activities?"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "What are your sales objectives? What challenges are you\n"
-" dealing with? Being clear on your expectations is the first step\n"
-" of a successful implementation."
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,help:crm.field_crm_lead_team_id
-msgid "When sending mails, the default email address is taken from the sales team."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Win / Loss Ratio"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_base_partner_merge_line_wizard_id
-msgid "Wizard"
-msgstr ""
-
-#. module: crm
-#: model:crm.stage,name:crm.stage_lead4
-#: model:ir.ui.view,arch_db:crm.crm_activity_report_view_search
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_leads
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
-#: model:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search
-#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
-msgid "Won"
-msgstr ""
-
-#. module: crm
-#: model:ir.filters,name:crm.filter_opportunity_country
-msgid "Won By Country"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_res_users_target_sales_won
-msgid "Won in Opportunities Target"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_team_resource_calendar_id
-msgid "Working Time"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "You can also combine several rules into a sequence.<br/>\n"
-" Example: additional 10% discount during summer sales"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "You can change the pricing method at anytime. We\n"
-" recommend you to select the easiest option that\n"
-" suits your needs for now on."
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/wizard/base_partner_merge.py:306
-#, python-format
-msgid "You cannot merge a contact with one of his parent."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "You don't need to review lost opportunities at every sales meeting, but it's good\n"
-" practice to do it at least once a month. Ask your team to set tags on opportunities to\n"
-" identify why they were lost and use this information to generate statistics. Here are\n"
-" some examples of tags to create: no budget, competition, no pain found, etc."
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/wizard/base_partner_merge.py:398
-#, python-format
-msgid "You have to specify a filter for your selection"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "You may have a different sale price for different\n"
-" groups of customers:"
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,help:crm.crm_case_form_view_salesteams_opportunity
-msgid "You will be able to plan meetings and log activities from\n"
-" opportunities, convert them into quotations, attach related\n"
-" documents, track all discussions, and much more."
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,help:crm.relate_partner_opportunities
-msgid "You will be able to plan meetings and log activities from\n"
-" opportunities, convert them into quotations, attach related\n"
-" documents, track all discussions, and much more."
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,help:crm.crm_lead_opportunities
-#: model:ir.actions.act_window,help:crm.crm_lead_opportunities_tree_view
-msgid "You will be able to plan meetings and phone calls from\n"
-" opportunities, convert them into quotations, attach related\n"
-" documents, track all discussions, and much more."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Your Expectations"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Your KPIs"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Your LinkedIn or social media pages"
-msgstr ""
-
-#. module: crm
-#: model:mail.template,subject:crm.mail_template_data_module_install_crm
-msgid "Your Odoo CRM application is running smoothly."
-msgstr ""
-
-#. module: crm
-#: model:ir.actions.act_window,name:crm.crm_lead_opportunities_tree_view
-msgid "Your Pipeline"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Your business cards"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Your document templates"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "Your website"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_leads
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
-msgid "ZIP"
-msgstr ""
-
-#. module: crm
-#: model:ir.model.fields,field_description:crm.field_crm_lead_zip
-msgid "Zip"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "app."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "as an exercise"
-msgstr ""
-
-#. module: crm
-#: model:ir.model,name:crm.model_base_partner_merge_automatic_wizard
-msgid "base.partner.merge.automatic.wizard"
-msgstr ""
-
-#. module: crm
-#: model:ir.model,name:crm.model_base_partner_merge_line
-msgid "base.partner.merge.line"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "browse the documentation"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.view_create_opportunity_simplified
-msgid "e.g. Customer Deal"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_activity_log_view_form
-#: model:ir.ui.view,arch_db:crm.crm_activity_log_view_form_schedule
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
-msgid "e.g. Discuss proposal"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
-msgid "e.g. Product Pricing"
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/models/crm_lead.py:887
-#, python-format
-msgid "opportunities"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.base_partner_merge_automatic_wizard_form
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "or"
-msgstr ""
-
-#. module: crm
-#: model:ir.model,name:crm.model_sale_config_settings
-msgid "sale.config.settings"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "send us an email"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "support team"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "survey"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "technical documentation"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "the list of customers"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "the list of products"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "to create internal challenge for your salesmen"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "to create tests and certifications."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "to describe<br/> your experience or to suggest improvements!"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "to organize all your documents like: customer presentations, product sheets, comparisons with competitors, pain points sheets, training materials, etc."
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "to setup your own domain\n"
-" name (e.g. sales@yourcompany.com)"
-msgstr ""
-
-#. module: crm
-#: code:addons/crm/models/crm_lead.py:893
-#, python-format
-msgid "unknown"
-msgstr ""
-
-#. module: crm
-#: model:ir.ui.view,arch_db:crm.crm_planner
-msgid "with your work above"
-msgstr ""
-
diff --git a/addons/crm/static/src/js/web_planner_crm.js b/addons/crm/static/src/js/web_planner_crm.js
index a3800873a08..c444886c94e 100644
--- a/addons/crm/static/src/js/web_planner_crm.js
+++ b/addons/crm/static/src/js/web_planner_crm.js
@@ -2,6 +2,8 @@ odoo.define('planner_crm.planner', function (require) {
"use strict";
var planner = require('web.planner.common');
+var core = require('web.core');
+var _t = core._t;
planner.PlannerDialog.include({
prepare_planner_event: function () {
@@ -9,26 +11,26 @@ planner.PlannerDialog.include({
if (this.planner['planner_application'] === 'planner_crm') {
var stages = {
'solution_selling': [
- 'Territory', 'Qualified', 'Qualified Sponsor',
- 'Proposal', 'Negotiation', 'Won', '',
- 'New propspect assigned to the right salesperson',
- 'Set fields: Expected Revenue, Expected Closing Date, Next Action',
- 'You are in discussion with the decision maker and HE agreed on his pain points',
- 'Quotation sent to customer', 'The customer came back to you to discuss your quotation',
- 'Quotation signed by the customer', ''],
+ _t('Territory'), _t('Qualified'), _t('Qualified Sponsor'),
+ _t('Proposal'), _t('Negotiation'), _t('Won'), '',
+ _t('New propspect assigned to the right salesperson'),
+ _t('Set fields: Expected Revenue, Expected Closing Date, Next Action'),
+ _t('You are in discussion with the decision maker and HE agreed on his pain points'),
+ _t('Quotation sent to customer'), _t('The customer came back to you to discuss your quotation'),
+ _t('Quotation signed by the customer'), ''],
'b2c': [
- 'New', 'Initial Contact', 'Product Demonstration', 'Proposal', 'Won', '', '',
- '', 'Phone call with following questions: ...',
- 'Meeting with a demo. Set Fields: expected revenue, closing date',
- 'Quotation sent', '', '', ''],
+ _t('New'), _t('Initial Contact'), _t('Product Demonstration'), _t('Proposal'), _t('Won'), '', '',
+ '', _t('Phone call with following questions: ...'),
+ _t('Meeting with a demo. Set Fields: expected revenue, closing date'),
+ _t('Quotation sent'), '', '', ''],
'b2b': [
- 'New', 'Qualified', 'Needs assessment', 'POC Sold', 'Demonstration', 'Proposal', 'Won',
- 'Set fields: Expected Revenue, Expected Closing Date, Next Action',
- 'Close opportunity if: "pre-sales days * $500" < "expected revenue" * probability',
- 'GAP analysis with customer', 'Create a Proof of Concept with consultants',
- 'POC demonstration to the customer', 'Final Proposal sent', ''],
+ _t('New'), _t('Qualified'), _t('Needs assessment'), _t('POC Sold'), _t('Demonstration'), _t('Proposal'), _t('Won'),
+ _t('Set fields: Expected Revenue, Expected Closing Date, Next Action'),
+ _t('Close opportunity if: "pre-sales days * $500" < "expected revenue" * probability'),
+ _t('GAP analysis with customer'), _t('Create a Proof of Concept with consultants'),
+ _t('POC demonstration to the customer'), _t('Final Proposal sent'), ''],
'odoo_default': [
- 'New', 'Qualified', 'Proposition', 'Negotiation', 'Won', 'Lost', '',
+ _t('New'), _t('Qualified'), _t('Proposition'), _t('Negotiation'), _t('Won'), _t('Lost'), '',
'', '', '', '', '', '', '']
};
this.$el.on('change', '#input_element_pipeline', function(ev) {
diff --git a/addons/event/views/event_views.xml b/addons/event/views/event_views.xml
index edf39e9757c..70a9f8049e6 100644
--- a/addons/event/views/event_views.xml
+++ b/addons/event/views/event_views.xml
@@ -244,7 +244,7 @@
<filter string="Unread Messages" name="message_needaction" domain="[('message_needaction','=',True)]"/>
<separator/>
<filter string="Unconfirmed" name="draft" domain="[('state','=','draft')]" help="Events in New state"/>
- <filter string="Confirmed" domain="[('state','=','confirm')]" help="Confirmed events"/>
+ <filter name="confirm" string="Confirmed" domain="[('state','=','confirm')]" help="Confirmed events"/>
<separator/>
<filter string="My Events" help="My Events" domain="[('user_id','=',uid)]"/>
<separator/>
diff --git a/addons/event_sale/models/sale_order.py b/addons/event_sale/models/sale_order.py
index ee4a14d509f..d917254fb34 100644
--- a/addons/event_sale/models/sale_order.py
+++ b/addons/event_sale/models/sale_order.py
@@ -61,4 +61,4 @@ class SaleOrderLine(models.Model):
@api.onchange('event_ticket_id')
def _onchange_event_ticket_id(self):
- self.price_unit = self.event_ticket_id.price
+ self.price_unit = (self.event_id.company_id or self.env.user.company_id).currency_id.compute(self.event_ticket_id.price, self.order_id.currency_id)
diff --git a/addons/gamification/models/challenge.py b/addons/gamification/models/challenge.py
index 028e58e2173..d3b0b0d5983 100644
--- a/addons/gamification/models/challenge.py
+++ b/addons/gamification/models/challenge.py
@@ -505,11 +505,6 @@ class Challenge(models.Model):
goals = Goals.search(domain, order="completeness desc, current desc")
for ranking, goal in enumerate(goals):
- # bail immediately if any goal of the challenge hasn't been
- # reached
- if goal.state != 'reached':
- return []
-
if user and goal.user_id == user:
line_data['own_goal_id'] = goal.id
elif restrict_top and ranking > restrict_top:
diff --git a/addons/hr/models/hr.py b/addons/hr/models/hr.py
index 2c1af5c3981..787287fe289 100644
--- a/addons/hr/models/hr.py
+++ b/addons/hr/models/hr.py
@@ -229,6 +229,11 @@ class Employee(models.Model):
user_field_lst.append(name)
return user_field_lst
+ @api.multi
+ def _message_auto_subscribe_notify(self, partner_ids):
+ # Do not notify user it has been marked as follower of its employee.
+ return
+
class Department(models.Model):
diff --git a/addons/hr_expense/models/hr_expense.py b/addons/hr_expense/models/hr_expense.py
index e2441b7debc..6c830977301 100644
--- a/addons/hr_expense/models/hr_expense.py
+++ b/addons/hr_expense/models/hr_expense.py
@@ -132,6 +132,7 @@ class HrExpense(models.Model):
'amount_currency': line['price'] > 0 and abs(line.get('amount_currency')) or - abs(line.get('amount_currency')),
'currency_id': line.get('currency_id'),
'tax_line_id': line.get('tax_line_id'),
+ 'tax_ids': line.get('tax_ids'),
'quantity': line.get('quantity', 1.00),
'product_id': line.get('product_id'),
'product_uom_id': line.get('uom_id'),
diff --git a/addons/hr_holidays/models/hr_holidays.py b/addons/hr_holidays/models/hr_holidays.py
index ec751bff0bf..cfe1e5f3665 100644
--- a/addons/hr_holidays/models/hr_holidays.py
+++ b/addons/hr_holidays/models/hr_holidays.py
@@ -348,9 +348,9 @@ class Holidays(models.Model):
employee_id = values.get('employee_id', False)
if not self._check_state_access_right(values):
raise AccessError(_('You cannot set a leave request as \'%s\'. Contact a human resource manager.') % values.get('state'))
+ if not values.get('department_id'):
+ values.update({'department_id': self.env['hr.employee'].browse(employee_id).department_id.id})
holiday = super(Holidays, self.with_context(mail_create_nolog=True, mail_create_nosubscribe=True)).create(values)
- if values.get('state') == 'confirm':
- self.subscribe_followers()
holiday.add_follower(employee_id)
return holiday
@@ -360,8 +360,6 @@ class Holidays(models.Model):
if not self._check_state_access_right(values):
raise AccessError(_('You cannot set a leave request as \'%s\'. Contact a human resource manager.') % values.get('state'))
result = super(Holidays, self).write(values)
- if values.get('state') == 'confirm':
- self.subscribe_followers()
self.add_follower(employee_id)
return result
@@ -376,20 +374,6 @@ class Holidays(models.Model):
####################################################
@api.multi
- def subscribe_followers(self):
- for holiday in self:
- if holiday.department_id:
- # Subscribe the followers of the department following the `confirmed` subtype
- # It's done manually because `message_auto_subscribe` only works on fields for which
- # the value is passed to the `create` or `write` methods,
- # it doesn't work for related/computed fields
- # This can be removed as soon as `department_id` on `hr.holidays` becomes a regular
- # fields or as soon as `message_auto_subscribe` works with related/computed fields.
- confirmed_subtype = self.env.ref('hr_holidays.mt_department_holidays_confirmed')
- partner_ids = [follower.partner_id.id for follower in holiday.department_id.message_follower_ids if confirmed_subtype in follower.subtype_ids]
- holiday.message_subscribe(partner_ids)
-
- @api.multi
def _create_resource_leave(self):
""" This method will create entry in resource calendar leave object at the time of holidays validated """
for leave in self:
diff --git a/addons/hr_holidays/report/holidays_summary_report.py b/addons/hr_holidays/report/holidays_summary_report.py
index adc6bd6e762..7d58e6bfbca 100644
--- a/addons/hr_holidays/report/holidays_summary_report.py
+++ b/addons/hr_holidays/report/holidays_summary_report.py
@@ -58,8 +58,12 @@ class HrHolidaySummaryReport(models.AbstractModel):
('date_to', '>=', str(start_date))
])
for holiday in holidays:
- date_from = fields.Date.from_string(holiday.date_from)
- date_to = fields.Date.from_string(holiday.date_to)
+ # Convert date to user timezone, otherwise the report will not be consistent with the
+ # value displayed in the interface.
+ date_from = fields.Datetime.from_string(holiday.date_from)
+ date_from = fields.Datetime.context_timestamp(holiday, date_from).date()
+ date_to = fields.Datetime.from_string(holiday.date_to)
+ date_to = fields.Datetime.context_timestamp(holiday, date_to).date()
for index in range(0, ((date_to - date_from).days + 1)):
if date_from >= start_date and date_from <= end_date:
res[(date_from-start_date).days]['color'] = holiday.holiday_status_id.color_name
diff --git a/addons/l10n_hn/__manifest__.py b/addons/l10n_hn/__manifest__.py
index bf2e8ca6973..46fab26814e 100644
--- a/addons/l10n_hn/__manifest__.py
+++ b/addons/l10n_hn/__manifest__.py
@@ -1,25 +1,15 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-# Copyright (c) 2009-2010 Salvatore Josué Trimarchi Pinto <salvatore@trigluu.com>
-# (http://trigluu.com)
+# Copyright (c) 2009-2016 Salvatore Josué Trimarchi Pinto <trimarchi@bacgroup.net>
-#
# This module provides a minimal Honduran chart of accounts that can be use
# to build upon a more complex one. It also includes a chart of taxes and
# the Lempira currency.
-#
-# This module is based on the Guatemalan chart of accounts:
-# Copyright (c) 2009-2010 Soluciones Tecnologócias Prisma S.A. All Rights Reserved.
-# José Rodrigo Fernández Menegazzo, Soluciones Tecnologócias Prisma S.A.
-# (http://www.solucionesprisma.com)
-#
-# This module works with OpenERP 6.0 to 8.0
-#
{
'name': 'Honduras - Accounting',
- 'version': '0.1',
+ 'version': '0.2',
'category': 'Localization',
'description': """
This is the base module to manage the accounting chart for Honduras.
@@ -29,7 +19,7 @@ Agrega una nomenclatura contable para Honduras. También incluye impuestos y la
moneda Lempira. -- Adds accounting chart for Honduras. It also includes taxes
and the Lempira currency.""",
'author': 'Salvatore Josue Trimarchi Pinto',
- 'website': 'http://trigluu.com',
+ 'website': 'http://bacgroup.net',
'depends': ['base', 'account'],
'data': [
'data/l10n_hn_chart_data.xml',
diff --git a/addons/l10n_mx/__manifest__.py b/addons/l10n_mx/__manifest__.py
index 61fc992cec1..4d804ad96a6 100644
--- a/addons/l10n_mx/__manifest__.py
+++ b/addons/l10n_mx/__manifest__.py
@@ -37,6 +37,7 @@ With this module you will have:
"data": [
"data/account_tag_data.xml",
"data/l10n_mx_chart_data.xml",
+ "data/account_data.xml",
"data/account_tax_data.xml",
"data/account_chart_template_data.yml",
],
diff --git a/addons/l10n_mx/data/account_data.xml b/addons/l10n_mx/data/account_data.xml
new file mode 100644
index 00000000000..68f4a53a17c
--- /dev/null
+++ b/addons/l10n_mx/data/account_data.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+ <data noupdate="1">
+
+ <!-- Account Tax Group -->
+ <record id="tax_group_iva_ret" model="account.tax.group">
+ <field name="name">IVA-RET</field>
+ </record>
+ <record id="tax_group_iva" model="account.tax.group">
+ <field name="name">IVA</field>
+ </record>
+ <record id="tax_group_iva_exent" model="account.tax.group">
+ <field name="name">IVA-EXENTO</field>
+ </record>
+ <record id="tax_group_isr" model="account.tax.group">
+ <field name="name">ISR</field>
+ </record>
+ <record id="tax_group_isr_ret" model="account.tax.group">
+ <field name="name">ISR-RET</field>
+ </record>
+ <record id="tax_group_ieps" model="account.tax.group">
+ <field name="name">IEPS</field>
+ </record>
+ <record id="tax_group_ietu" model="account.tax.group">
+ <field name="name">IETU</field>
+ </record>
+
+ </data>
+</odoo>
diff --git a/addons/l10n_mx/data/account_tax_data.xml b/addons/l10n_mx/data/account_tax_data.xml
index 47382e1912e..c5e300e1275 100644
--- a/addons/l10n_mx/data/account_tax_data.xml
+++ b/addons/l10n_mx/data/account_tax_data.xml
@@ -46,25 +46,27 @@
<record id="tax9" model="account.tax.template">
<field name="chart_template_id" ref="mx_coa"/>
<field name="name">IVA(0%) VENTAS</field>
- <field name="description">ITAX_010-IN</field>
+ <field name="description">IVA</field>
<field name="amount">0</field>
<field name="amount_type">percent</field>
<field name="type_tax_use">sale</field>
<field name="account_id" ref="cuenta209_01"/>
<field name="refund_account_id" ref="cuenta209_01"/>
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_01')])]"/>
+ <field name="tax_group_id" ref="tax_group_iva"/>
</record>
<record id="tax12" model="account.tax.template">
<field name="chart_template_id" ref="mx_coa"/>
<field name="name">IVA(16%) VENTAS</field>
- <field name="description">ITAX_160-IN</field>
+ <field name="description">IVA</field>
<field name="amount">16</field>
<field name="amount_type">percent</field>
<field name="type_tax_use">sale</field>
<field name="account_id" ref="cuenta209_01"/>
<field name="refund_account_id" ref="cuenta209_01"/>
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_03')])]"/>
+ <field name="tax_group_id" ref="tax_group_iva"/>
</record>
<record id="tax1" model="account.tax.template">
@@ -77,6 +79,7 @@
<field name="account_id" ref="cuenta216_10"/>
<field name="refund_account_id" ref="cuenta216_10"/>
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_04')])]"/>
+ <field name="tax_group_id" ref="tax_group_iva_ret"/>
</record>
<record id="tax2" model="account.tax.template">
@@ -89,6 +92,7 @@
<field name="account_id" ref="cuenta216_10"/>
<field name="refund_account_id" ref="cuenta216_10"/>
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_05')])]"/>
+ <field name="tax_group_id" ref="tax_group_iva_ret"/>
</record>
<record id="tax3" model="account.tax.template">
@@ -101,6 +105,7 @@
<field name="account_id" ref="cuenta216_03"/>
<field name="refund_account_id" ref="cuenta216_03"/>
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_06')])]"/>
+ <field name="tax_group_id" ref="tax_group_isr_ret"/>
</record>
<record id="tax5" model="account.tax.template">
@@ -113,6 +118,7 @@
<field name="account_id" ref="cuenta216_04"/>
<field name="refund_account_id" ref="cuenta216_04"/>
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_07')])]"/>
+ <field name="tax_group_id" ref="tax_group_isr_ret"/>
</record>
<record id="tax7" model="account.tax.template">
@@ -125,6 +131,7 @@
<field name="account_id" ref="cuenta216_10"/>
<field name="refund_account_id" ref="cuenta216_10"/>
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_08')])]"/>
+ <field name="tax_group_id" ref="tax_group_iva_ret"/>
</record>
<record id="tax8" model="account.tax.template">
@@ -137,6 +144,7 @@
<field name="account_id" ref="cuenta216_10"/>
<field name="refund_account_id" ref="cuenta216_10"/>
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_09')])]"/>
+ <field name="tax_group_id" ref="tax_group_iva_ret"/>
</record>
<record id="tax13" model="account.tax.template">
@@ -149,6 +157,7 @@
<field name="account_id" ref="cuenta119_01"/>
<field name="refund_account_id" ref="cuenta119_01"/>
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_10')])]"/>
+ <field name="tax_group_id" ref="tax_group_iva"/>
</record>
<record id="tax14" model="account.tax.template">
@@ -161,6 +170,7 @@
<field name="account_id" ref="cuenta119_01"/>
<field name="refund_account_id" ref="cuenta119_01"/>
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_12')])]"/>
+ <field name="tax_group_id" ref="tax_group_iva"/>
</record>
</data>
</odoo>
diff --git a/addons/l10n_mx/data/l10n_mx_chart_data.xml b/addons/l10n_mx/data/l10n_mx_chart_data.xml
index 1b78dcbe238..5465175a2cc 100644
--- a/addons/l10n_mx/data/l10n_mx_chart_data.xml
+++ b/addons/l10n_mx/data/l10n_mx_chart_data.xml
@@ -154,6 +154,13 @@
<field name="reconcile" eval="True"/>
<field name="tag_ids" eval="[(6,0,[ref('account_tag_206_02')])]"/>
</record>
+ <record id='cuenta208_01' model='account.account.template'>
+ <field name='name'>IVA trasladado cobrado</field>
+ <field name='code'>208.01.01</field>
+ <field name="chart_template_id" ref="mx_coa"/>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="tag_ids" eval="[(6,0,[ref('account_tag_208_01')])]"/>
+ </record>
<record id='cuenta209_01' model='account.account.template'>
<field name='name'>IVA trasladado no cobrado</field>
<field name='code'>209.01.01</field>
@@ -177,12 +184,12 @@
</record>
<record id='cuenta216_10' model='account.account.template'>
<field name='name'>Impuestos retenidos de IVA</field>
- <field name='code'>216.10.01</field>
+ <field name='code'>216.10.10</field>
<field name="chart_template_id" ref="mx_coa"/>
<field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
<field name="tag_ids" eval="[(6,0,[ref('account_tag_216_10')])]"/>
</record>
- <record id='cuenta216_13' model='account.account.template'>
+ <record id='cuenta216_10_20' model='account.account.template'>
<field name='name'>Impuestos retenidos de iva efectivamente pagados</field>
<field name='code'>216.10.20</field>
<field name="chart_template_id" ref="mx_coa"/>
diff --git a/addons/l10n_mx/models/chart_template.py b/addons/l10n_mx/models/chart_template.py
index c4dec8e3f7e..b02eafdaa69 100644
--- a/addons/l10n_mx/models/chart_template.py
+++ b/addons/l10n_mx/models/chart_template.py
@@ -29,12 +29,11 @@ class AccountChartTemplate(models.Model):
account_tax_obj = self.env['account.tax']
account_obj = self.env['account.account']
taxes_acc = {
- 'ITAX_010-IN': account_obj.search([('code', '=', '208.01.01')]),
- 'ITAX_160-IN': account_obj.search([('code', '=', '208.01.01')]),
- 'ITAXR_04-OUT': account_obj.search([('code', '=', '216.13.01')]),
- 'ITAXR_10-OUT': account_obj.search([('code', '=', '216.13.01')]),
- 'ITAX_1067-OUT': account_obj.search([('code', '=', '216.13.01')]),
- 'ITAX_167-OUT': account_obj.search([('code', '=', '216.13.01')]),
+ 'IVA': account_obj.search([('code', '=', '208.01.01')]),
+ 'ITAXR_04-OUT': account_obj.search([('code', '=', '216.10.20')]),
+ 'ITAXR_10-OUT': account_obj.search([('code', '=', '216.10.20')]),
+ 'ITAX_1067-OUT': account_obj.search([('code', '=', '216.10.20')]),
+ 'ITAX_167-OUT': account_obj.search([('code', '=', '216.10.20')]),
'ITAX_010-OUT': account_obj.search([('code', '=', '208.01.01')]),
'ITAX_160-OUT': account_obj.search([('code', '=', '208.01.01')])}
@@ -67,15 +66,14 @@ class AccountChartTemplate(models.Model):
acc_template_ref, company, journals_dict=journals_dict)
if not self == self.env.ref('l10n_mx.mx_coa'):
return res
+ account = self.env.ref('l10n_mx.1_cuenta118_01')
res.append({
'type': 'general',
'name': _('Effectively Paid'),
'code': 'CBMX',
'company_id': company.id,
- 'default_credit_account_id': acc_template_ref.get(
- self.income_currency_exchange_account_id.id),
- 'default_debit_account_id': acc_template_ref.get(
- self.expense_currency_exchange_account_id.id),
+ 'default_credit_account_id': account.id,
+ 'default_debit_account_id': account.id,
'show_on_dashboard': True,
})
return res
diff --git a/addons/l10n_vn/data/l10n_vn_chart_data.xml b/addons/l10n_vn/data/l10n_vn_chart_data.xml
index 928ee508cdf..13daae26bd3 100644
--- a/addons/l10n_vn/data/l10n_vn_chart_data.xml
+++ b/addons/l10n_vn/data/l10n_vn_chart_data.xml
@@ -811,15 +811,15 @@
<field name="chart_template_id" ref="vn_template"/>
<field name="name">Mệnh giá trái phiếu</field>
</record>
- <record id="chart343112" model="account.account.template">
- <field name="code">343112</field>
+ <record id="chart34312" model="account.account.template">
+ <field name="code">34312</field>
<field name="reconcile" eval="False"/>
<field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
<field name="chart_template_id" ref="vn_template"/>
<field name="name">Chiết khấu trái phiếu</field>
</record>
- <record id="chart343113" model="account.account.template">
- <field name="code">343113</field>
+ <record id="chart34313" model="account.account.template">
+ <field name="code">34313</field>
<field name="reconcile" eval="False"/>
<field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
<field name="chart_template_id" ref="vn_template"/>
diff --git a/addons/mail/models/mail_shortcode.py b/addons/mail/models/mail_shortcode.py
index 36624bc0b2b..780a5a746c8 100644
--- a/addons/mail/models/mail_shortcode.py
+++ b/addons/mail/models/mail_shortcode.py
@@ -1,10 +1,7 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-import cgi
-import re
-
-from odoo import api, fields, models
+from odoo import fields, models
class MailShortcode(models.Model):
@@ -23,25 +20,3 @@ class MailShortcode(models.Model):
shortcode_type = fields.Selection([('image', 'Smiley'), ('text', 'Canned Response')], required=True, default='text',
help="* Smiley are only used for HTML code to display an image "\
"* Text (default value) is used to substitute text with another text")
-
- @api.model
- def create(self, values):
- if values.get('substitution'):
- values['substitution'] = self._sanitize_shorcode(values['substitution'])
- return super(MailShortcode, self).create(values)
-
- @api.multi
- def write(self, values):
- if values.get('substitution'):
- values['substitution'] = self._sanitize_shorcode(values['substitution'])
- return super(MailShortcode, self).write(values)
-
- def _sanitize_shorcode(self, substitution):
- """ Sanitize the shortcode substitution :
- - HTML substitution : only allow the img tag (emoji)
- - escape other substitutions to avoid XSS
- """
- is_img_tag = re.match(r'''^<img\s+src=('|")([^'"]*)\1\s*/?>$''', substitution, re.M | re.I)
- if is_img_tag:
- return substitution
- return cgi.escape(substitution)
diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py
index f0e6970bcce..ef27ab2d7c2 100644
--- a/addons/mail/models/mail_thread.py
+++ b/addons/mail/models/mail_thread.py
@@ -2049,6 +2049,13 @@ class MailThread(models.AbstractModel):
if self.env.context.get('mail_auto_subscribe_no_notify'):
return
+ # send the email only to the current record and not all the ids matching active_domain !
+ # by default, send_mail for mass_mail use the active_domain instead of active_ids.
+ if 'active_domain' in self.env.context:
+ ctx = dict(self.env.context)
+ ctx.pop('active_domain')
+ self = self.with_context(ctx)
+
for record in self:
record.message_post_with_view(
'mail.message_user_assigned',
diff --git a/addons/mail/static/src/js/chat_manager.js b/addons/mail/static/src/js/chat_manager.js
index c002b53e3f1..146196af6c9 100644
--- a/addons/mail/static/src/js/chat_manager.js
+++ b/addons/mail/static/src/js/chat_manager.js
@@ -668,7 +668,7 @@ var chat_manager = {
// to linkify the urls we end up with double linkification a bit everywhere.
// Ideally we want to keep the content as text internally and only make html
// enrichment at display time but the current design makes this quite hard to do.
- var body = utils.linkify(_.str.trim(data.content));
+ var body = utils.parse_and_transform(_.str.trim(data.content), utils.add_link);
var msg = {
partner_ids: data.partner_ids,
diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py
index c58d86668d1..bc27da14e7c 100644
--- a/addons/mail/wizard/mail_compose_message.py
+++ b/addons/mail/wizard/mail_compose_message.py
@@ -12,18 +12,17 @@ from odoo.tools.safe_eval import safe_eval
EXPRESSION_PATTERN = re.compile('(\$\{.+?\})')
-def _reopen(self, res_id, model):
+def _reopen(self, res_id, model, context=None):
+ # save original model in context, because selecting the list of available
+ # templates requires a model in context
+ context = dict(context or {}, default_model=model)
return {'type': 'ir.actions.act_window',
'view_mode': 'form',
'view_type': 'form',
'res_id': res_id,
'res_model': self._name,
'target': 'new',
- # save original model in context, because selecting the list of available
- # templates requires a model in context
- 'context': {
- 'default_model': model,
- },
+ 'context': context,
}
@@ -409,7 +408,7 @@ class MailComposer(models.TransientModel):
# generate the saved template
record.write({'template_id': template.id})
record.onchange_template_id_wrapper()
- return _reopen(self, record.id, record.model)
+ return _reopen(self, record.id, record.model, context=self._context)
#------------------------------------------------------
# Template rendering
diff --git a/addons/mrp/models/mrp_unbuild.py b/addons/mrp/models/mrp_unbuild.py
index f9773f4947b..86dde92fbfa 100644
--- a/addons/mrp/models/mrp_unbuild.py
+++ b/addons/mrp/models/mrp_unbuild.py
@@ -129,7 +129,7 @@ class MrpUnbuild(models.Model):
produce_move.quantity_done = produce_move.product_uom_qty
produce_moves.move_validate()
produced_quant_ids = produce_moves.mapped('quant_ids').filtered(lambda quant: quant.qty > 0)
- consume_move.quant_ids.write({'produced_quant_ids': [(6, 0, produced_quant_ids.ids)]})
+ consume_move.quant_ids.sudo().write({'produced_quant_ids': [(6, 0, produced_quant_ids.ids)]})
self.write({'state': 'done'})
diff --git a/addons/mrp/models/mrp_workcenter.py b/addons/mrp/models/mrp_workcenter.py
index b47294465ce..5ef8b09ecea 100644
--- a/addons/mrp/models/mrp_workcenter.py
+++ b/addons/mrp/models/mrp_workcenter.py
@@ -80,12 +80,21 @@ class MrpWorkcenter(models.Model):
@api.depends('time_ids', 'time_ids.date_end', 'time_ids.loss_type')
def _compute_working_state(self):
for workcenter in self:
- time_log = self.env['mrp.workcenter.productivity'].search([('workcenter_id', '=', workcenter.id)], limit=1)
- if not time_log or time_log.date_end:
+ # We search for a productivity line associated to this workcenter having no `date_end`.
+ # If we do not find one, the workcenter is not currently being used. If we find one, according
+ # to its `type_loss`, the workcenter is either being used or blocked.
+ time_log = self.env['mrp.workcenter.productivity'].search([
+ ('workcenter_id', '=', workcenter.id),
+ ('date_end', '=', False)
+ ], limit=1)
+ if not time_log:
+ # the workcenter is not being used
workcenter.working_state = 'normal'
elif time_log.loss_type in ('productive', 'performance'):
+ # the productivity line has a `loss_type` that means the workcenter is being used
workcenter.working_state = 'done'
else:
+ # the workcenter is blocked
workcenter.working_state = 'blocked'
@api.multi
diff --git a/addons/mrp/models/stock_warehouse.py b/addons/mrp/models/stock_warehouse.py
index e5df59e5130..1036f19c5b1 100644
--- a/addons/mrp/models/stock_warehouse.py
+++ b/addons/mrp/models/stock_warehouse.py
@@ -118,10 +118,10 @@ class StockWarehouse(models.Model):
return routes
@api.multi
- def _update_name_and_code(self, name, code):
+ def _update_name_and_code(self, name=False, code=False):
res = super(StockWarehouse, self)._update_name_and_code(name, code)
# change the manufacture procurement rule name
for warehouse in self:
- if warehouse.manufacture_pull_id:
+ if warehouse.manufacture_pull_id and name:
warehouse.manufacture_pull_id.write({'name': warehouse.manufacture_pull_id.name.replace(warehouse.name, name, 1)})
return res
diff --git a/addons/mrp/security/ir.model.access.csv b/addons/mrp/security/ir.model.access.csv
index d8604858dfc..7a384a01b2e 100644
--- a/addons/mrp/security/ir.model.access.csv
+++ b/addons/mrp/security/ir.model.access.csv
@@ -55,6 +55,7 @@ access_product_group_res_partner_mrp_manager,res_partner group_mrp_manager,base.
access_product_pricelist_item_mrp_manager,product.pricelist.item mrp_manager,product.model_product_pricelist_item,mrp.group_mrp_manager,1,1,1,1
access_resource_calendar_manufacturinguser,resource.calendar manufacturing.user,resource.model_resource_calendar,mrp.group_mrp_user,1,0,0,0
access_mrp_unbuild,mrp.unbuild,model_mrp_unbuild,group_mrp_user,1,0,0,0
+access_mrp_unbuild_manager,mrp.unbuild manager,model_mrp_unbuild,group_mrp_manager,1,1,1,1
access_mrp_message_mrp_user,mrp.message,model_mrp_message,group_mrp_user,1,0,0,0
access_stock_move_lots,stock.move.lots,model_stock_move_lots,group_mrp_user,1,1,1,0
access_stock_move_lots_manager,stock.move.lots,model_stock_move_lots,group_mrp_manager,1,1,1,1
diff --git a/addons/mrp/views/mrp_workcenter_views.xml b/addons/mrp/views/mrp_workcenter_views.xml
index 1ed6fd13b9b..3f6d50138a2 100644
--- a/addons/mrp/views/mrp_workcenter_views.xml
+++ b/addons/mrp/views/mrp_workcenter_views.xml
@@ -39,7 +39,7 @@
<field name="sequence" widget="handle"/>
<field name="code"/>
<field name="name"/>
- <field name="resource_type"/>
+ <field name="resource_type" invisible="1"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="active" invisible="1"/>
</tree>
diff --git a/addons/mrp/views/product_views.xml b/addons/mrp/views/product_views.xml
index 67789170716..8893e5a54f9 100644
--- a/addons/mrp/views/product_views.xml
+++ b/addons/mrp/views/product_views.xml
@@ -31,7 +31,7 @@
<field name="res_model">product.template</field>
<field name="view_type">form</field>
<field name="view_mode">kanban,tree,form</field>
- <field name="context">{"search_default_products": 1, 'default_type': 'product'}</field>
+ <field name="context">{"search_default_consumable": 1, 'default_type': 'product'}</field>
</record>
<menuitem id="menu_mrp_product_form"
name="Products"
@@ -76,4 +76,4 @@
</field>
</record>
</data>
-</odoo> \ No newline at end of file
+</odoo>
diff --git a/addons/payment_transfer/i18n/payment_transfer.pot b/addons/payment_transfer/i18n/payment_transfer.pot
deleted file mode 100644
index 8d148467a56..00000000000
--- a/addons/payment_transfer/i18n/payment_transfer.pot
+++ /dev/null
@@ -1,105 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * payment_transfer
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 9.saas~10c\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-18 14:07+0000\n"
-"PO-Revision-Date: 2016-08-18 14:07+0000\n"
-"Last-Translator: <>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
-
-#. module: payment_transfer
-#: code:addons/payment_transfer/models/payment_acquirer.py:68
-#, python-format
-msgid "; multiple order found"
-msgstr ""
-
-#. module: payment_transfer
-#: code:addons/payment_transfer/models/payment_acquirer.py:66
-#, python-format
-msgid "; no order found"
-msgstr ""
-
-#. module: payment_transfer
-#: model:payment.acquirer,cancel_msg:payment_transfer.payment_acquirer_transfer
-msgid "<span><i>Cancel,</i> Your payment has been cancelled.</span>"
-msgstr ""
-
-#. module: payment_transfer
-#: model:payment.acquirer,done_msg:payment_transfer.payment_acquirer_transfer
-msgid "<span><i>Done,</i> Your online payment has been successfully processed. Thank you for your order.</span>"
-msgstr ""
-
-#. module: payment_transfer
-#: model:payment.acquirer,error_msg:payment_transfer.payment_acquirer_transfer
-msgid "<span><i>Error,</i> Please be aware that an error occurred during the transaction. The order has been confirmed but won't be paid. Don't hesitate to contact us if you have any questions on the status of your order.</span>"
-msgstr ""
-
-#. module: payment_transfer
-#: model:payment.acquirer,pending_msg:payment_transfer.payment_acquirer_transfer
-msgid "<span><i>Pending,</i> Your online payment has been successfully processed. But your order is not validated yet.</span>"
-msgstr ""
-
-#. module: payment_transfer
-#: code:addons/payment_transfer/models/payment_acquirer.py:30
-#: model:payment.acquirer,post_msg:payment_transfer.payment_acquirer_transfer
-#, python-format
-msgid "Bank Account"
-msgstr ""
-
-#. module: payment_transfer
-#: code:addons/payment_transfer/models/payment_acquirer.py:30
-#, python-format
-msgid "Bank Accounts"
-msgstr ""
-
-#. module: payment_transfer
-#: model:payment.acquirer,post_msg:payment_transfer.payment_acquirer_transfer
-msgid "Communication"
-msgstr ""
-
-#. module: payment_transfer
-#: model:ir.model,name:payment_transfer.model_payment_acquirer
-msgid "Payment Acquirer"
-msgstr ""
-
-#. module: payment_transfer
-#: model:ir.model,name:payment_transfer.model_payment_transaction
-msgid "Payment Transaction"
-msgstr ""
-
-#. module: payment_transfer
-#: model:payment.acquirer,post_msg:payment_transfer.payment_acquirer_transfer
-msgid "Please use the following transfer details"
-msgstr ""
-
-#. module: payment_transfer
-#: model:payment.acquirer,post_msg:payment_transfer.payment_acquirer_transfer
-msgid "Please use the order name as communication reference."
-msgstr ""
-
-#. module: payment_transfer
-#: model:payment.acquirer,pre_msg:payment_transfer.payment_acquirer_transfer
-msgid "Transfer information will be provided after choosing the payment mode."
-msgstr ""
-
-#. module: payment_transfer
-#: code:addons/payment_transfer/models/payment_acquirer.py:19
-#: model:payment.acquirer,name:payment_transfer.payment_acquirer_transfer
-#, python-format
-msgid "Wire Transfer"
-msgstr ""
-
-#. module: payment_transfer
-#: code:addons/payment_transfer/models/payment_acquirer.py:64
-#, python-format
-msgid "received data for reference %s"
-msgstr ""
-
diff --git a/addons/payment_transfer/models/payment.py b/addons/payment_transfer/models/payment.py
index c61b12b1ceb..4a19e336f3f 100644
--- a/addons/payment_transfer/models/payment.py
+++ b/addons/payment_transfer/models/payment.py
@@ -25,13 +25,13 @@ class TransferPaymentAcquirer(models.Model):
accounts = journals.mapped('bank_account_id').name_get()
bank_title = _('Bank Accounts') if len(accounts) > 1 else _('Bank Account')
bank_accounts = ''.join(['<ul>'] + ['<li>%s</li>' % name for id, name in accounts] + ['</ul>'])
- post_msg = '''<div>
+ post_msg = _('''<div>
<h3>Please use the following transfer details</h3>
<h4>%(bank_title)s</h4>
%(bank_accounts)s
<h4>Communication</h4>
<p>Please use the order name as communication reference.</p>
-</div>''' % {
+</div>''') % {
'bank_title': bank_title,
'bank_accounts': bank_accounts,
}
diff --git a/addons/point_of_sale/i18n/point_of_sale.pot b/addons/point_of_sale/i18n/point_of_sale.pot
index 6c8b95e8738..0056ac5aec9 100644
--- a/addons/point_of_sale/i18n/point_of_sale.pot
+++ b/addons/point_of_sale/i18n/point_of_sale.pot
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0c\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-09-29 13:59+0000\n"
-"PO-Revision-Date: 2016-09-29 13:59+0000\n"
+"POT-Creation-Date: 2016-12-22 13:48+0000\n"
+"PO-Revision-Date: 2016-12-22 13:48+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -42,6 +42,12 @@ msgid "&nbsp;"
msgstr ""
#. module: point_of_sale
+#: code:addons/point_of_sale/models/pos_order.py:72
+#, python-format
+msgid "(RESCUE FOR %(session)s)"
+msgstr ""
+
+#. module: point_of_sale
#: model:ir.ui.view,arch_db:point_of_sale.view_pos_pos_form
msgid "(update)"
msgstr ""
@@ -254,11 +260,6 @@ msgid "Acsone.eu"
msgstr ""
#. module: point_of_sale
-#: model:ir.model.fields,field_description:point_of_sale.field_res_users_activation
-msgid "Activation"
-msgstr ""
-
-#. module: point_of_sale
#: model:ir.model.fields,field_description:point_of_sale.field_pos_config_active
msgid "Active"
msgstr ""
@@ -513,8 +514,10 @@ msgid "Carrots"
msgstr ""
#. module: point_of_sale
+#: code:addons/point_of_sale/models/pos_session.py:285
#: model:ir.model.fields,field_description:point_of_sale.field_pos_config_cash_control
#: model:ir.ui.view,arch_db:point_of_sale.view_pos_config_form
+#, python-format
msgid "Cash Control"
msgstr ""
@@ -1219,11 +1222,6 @@ msgid "General Information"
msgstr ""
#. module: point_of_sale
-#: model:ir.model.fields,help:point_of_sale.field_res_users_partner_weight
-msgid "Gives the probability to assign a lead to this partner. (0 means no assignation.)"
-msgstr ""
-
-#. module: point_of_sale
#: model:ir.model.fields,help:point_of_sale.field_pos_category_sequence
msgid "Gives the sequence order when displaying a list of product categories."
msgstr ""
@@ -1330,16 +1328,6 @@ msgid "Image"
msgstr ""
#. module: point_of_sale
-#: model:ir.model.fields,field_description:point_of_sale.field_res_users_implemented_partner_ids
-msgid "Implementation References"
-msgstr ""
-
-#. module: point_of_sale
-#: model:ir.model.fields,field_description:point_of_sale.field_res_users_assigned_partner_id
-msgid "Implemented by"
-msgstr ""
-
-#. module: point_of_sale
#. openerp-web
#: code:addons/point_of_sale/static/src/xml/pos.xml:1312
#, python-format
@@ -1532,16 +1520,6 @@ msgid "Lemon"
msgstr ""
#. module: point_of_sale
-#: model:ir.model.fields,field_description:point_of_sale.field_res_users_grade_id
-msgid "Level"
-msgstr ""
-
-#. module: point_of_sale
-#: model:ir.model.fields,field_description:point_of_sale.field_res_users_partner_weight
-msgid "Level Weight"
-msgstr ""
-
-#. module: point_of_sale
#: model:ir.model.fields,field_description:point_of_sale.field_pos_order_line_name
msgid "Line No"
msgstr ""
@@ -1712,12 +1690,7 @@ msgid "Next Order"
msgstr ""
#. module: point_of_sale
-#: model:ir.model.fields,field_description:point_of_sale.field_res_users_date_review_next
-msgid "Next Partner Review"
-msgstr ""
-
-#. module: point_of_sale
-#: code:addons/point_of_sale/models/pos_order.py:136
+#: code:addons/point_of_sale/models/pos_order.py:129
#, python-format
msgid "No cash statement found for this session. Unable to record returned cash."
msgstr ""
@@ -2042,11 +2015,6 @@ msgid "Partner Services"
msgstr ""
#. module: point_of_sale
-#: model:ir.model.fields,field_description:point_of_sale.field_res_users_date_partnership
-msgid "Partnership Date"
-msgstr ""
-
-#. module: point_of_sale
#. openerp-web
#: code:addons/point_of_sale/static/src/js/gui.js:263
#, python-format
diff --git a/addons/point_of_sale/models/pos_order.py b/addons/point_of_sale/models/pos_order.py
index 0e27106d96e..a0c1170ee38 100644
--- a/addons/point_of_sale/models/pos_order.py
+++ b/addons/point_of_sale/models/pos_order.py
@@ -53,36 +53,29 @@ class PosOrder(models.Model):
}
# This deals with orders that belong to a closed session. In order
- # to recover from this we:
- # - assign the order to another compatible open session
- # - if that doesn't exist, create a new one
+ # to recover from this situation we create a new rescue session,
+ # making it obvious that something went wrong.
+ # A new, separate, rescue session is preferred for every such recovery,
+ # to avoid adding unrelated orders to live sessions.
def _get_valid_session(self, order):
PosSession = self.env['pos.session']
closed_session = PosSession.browse(order['pos_session_id'])
- open_session = PosSession.search(
- [('state', '=', 'opened'),
- ('config_id', '=', closed_session.config_id.id),
- ('user_id', '=', closed_session.user_id.id)],
- limit=1, order="start_at DESC")
_logger.warning('session %s (ID: %s) was closed but received order %s (total: %s) belonging to it',
closed_session.name,
closed_session.id,
order['name'],
order['amount_total'])
+ _logger.warning('attempting to create recovery session for saving order %s', order['name'])
+ new_session = PosSession.create({
+ 'config_id': closed_session.config_id.id,
+ 'name': _('(RESCUE FOR %(session)s)') % {'session': closed_session.name},
+ 'rescue': True, # avoid conflict with live sessions
+ })
+ # bypass opening_control (necessary when using cash control)
+ new_session.action_pos_session_open()
- if open_session:
- _logger.warning('using session %s (ID: %s) for order %s instead',
- open_session.name,
- open_session.id,
- order['name'])
- return open_session
- else:
- _logger.warning('attempting to create new session for order %s', order['name'])
- new_session = PosSession.create({'config_id': closed_session.config_id.id})
- # bypass opening_control (necessary when using cash control)
- new_session.action_pos_session_open()
- return new_session
+ return new_session
def _match_payment_to_invoice(self, order):
account_precision = self.env['decimal.precision'].precision_get('Account')
@@ -408,7 +401,7 @@ class PosOrder(models.Model):
# set name based on the sequence specified on the config
session = self.env['pos.session'].browse(values['session_id'])
values['name'] = session.config_id.sequence_id._next()
- values.setdefault('session_id', session.config_id.pricelist_id.id)
+ values.setdefault('pricelist_id', session.config_id.pricelist_id.id)
else:
# fallback on any pos.order sequence
values['name'] = self.env['ir.sequence'].next_by_code('pos.order')
@@ -911,9 +904,7 @@ class ReportSaleDetails(models.AbstractModel):
@api.multi
def render_html(self, docids, data=None):
- company = request.env.user.company_id
- date_start = self.env.context.get('date_start', False)
- date_stop = self.env.context.get('date_stop', False)
- data = dict(data or {}, date_start=date_start, date_stop=date_stop)
- data.update(self.get_sale_details(date_start, date_stop, company))
+ data = dict(data or {})
+ configs = self.env['pos.config'].browse(data['config_ids'])
+ data.update(self.get_sale_details(data['date_start'], data['date_stop'], configs))
return self.env['report'].render('point_of_sale.report_saledetails', data)
diff --git a/addons/point_of_sale/models/pos_session.py b/addons/point_of_sale/models/pos_session.py
index fe8d61efb85..ee00e112ba6 100644
--- a/addons/point_of_sale/models/pos_session.py
+++ b/addons/point_of_sale/models/pos_session.py
@@ -165,6 +165,8 @@ class PosSession(models.Model):
pos_config.sudo().write({'journal_ids': [(6, 0, journals.ids)]})
pos_name = self.env['ir.sequence'].with_context(ctx).next_by_code('pos.session')
+ if values.get('name'):
+ pos_name += ' ' + values['name']
statements = []
ABS = self.env['account.bank.statement']
@@ -273,3 +275,33 @@ class PosSession(models.Model):
'target': 'self',
'url': '/pos/web/',
}
+
+ @api.multi
+ def open_cashbox(self):
+ self.ensure_one()
+ context = dict(self._context)
+ balance_type = context.get('balance') or 'start'
+ context['bank_statement_id'] = self.cash_register_id.id
+ context['balance'] = balance_type
+ context['default_pos_id'] = self.config_id.id
+
+ action = {
+ 'name': _('Cash Control'),
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'account.bank.statement.cashbox',
+ 'view_id': self.env.ref('account.view_account_bnk_stmt_cashbox').id,
+ 'type': 'ir.actions.act_window',
+ 'context': context,
+ 'target': 'new'
+ }
+
+ cashbox_id = None
+ if balance_type == 'start':
+ cashbox_id = self.cash_register_id.cashbox_start_id.id
+ else:
+ cashbox_id = self.cash_register_id.cashbox_end_id.id
+ if cashbox_id:
+ action['res_id'] = cashbox_id
+
+ return action
diff --git a/addons/point_of_sale/static/src/js/gui.js b/addons/point_of_sale/static/src/js/gui.js
index 15cf0fdef6b..f0755fa7573 100644
--- a/addons/point_of_sale/static/src/js/gui.js
+++ b/addons/point_of_sale/static/src/js/gui.js
@@ -114,7 +114,7 @@ var Gui = core.Class.extend({
this.current_screen.hide();
}
this.current_screen = screen;
- this.current_screen.show();
+ this.current_screen.show(refresh);
}
},
diff --git a/addons/point_of_sale/static/src/js/models.js b/addons/point_of_sale/static/src/js/models.js
index b34e9c32290..bc4f2a2fd2e 100644
--- a/addons/point_of_sale/static/src/js/models.js
+++ b/addons/point_of_sale/static/src/js/models.js
@@ -1075,7 +1075,8 @@ exports.Orderline = Backbone.Model.extend({
init_from_JSON: function(json) {
this.product = this.pos.db.get_product_by_id(json.product_id);
if (!this.product) {
- console.error('ERROR: attempting to recover product not available in the point of sale');
+ console.error('ERROR: attempting to recover product ID', json.product_id,
+ 'not available in the point of sale. Correct the product or clean the browser cache.');
}
this.set_product_lot(this.product)
this.price = json.price_unit;
diff --git a/addons/point_of_sale/static/src/js/screens.js b/addons/point_of_sale/static/src/js/screens.js
index bb30e7b7943..5f61deb5e0c 100644
--- a/addons/point_of_sale/static/src/js/screens.js
+++ b/addons/point_of_sale/static/src/js/screens.js
@@ -272,8 +272,9 @@ var ScaleScreenWidget = ScreenWidget.extend({
});
this.$('.next,.buy-product').click(function(){
- self.order_product();
self.gui.show_screen(self.next_screen);
+ // add product *after* switching screen to scroll properly
+ self.order_product();
});
queue.schedule(function(){
@@ -964,10 +965,12 @@ var ProductScreenWidget = ScreenWidget.extend({
}
},
- show: function(){
+ show: function(reset){
this._super();
- this.product_categories_widget.reset_category();
- this.numpad.state.reset();
+ if (reset) {
+ this.product_categories_widget.reset_category();
+ this.numpad.state.reset();
+ }
},
close: function(){
diff --git a/addons/point_of_sale/views/pos_session_view.xml b/addons/point_of_sale/views/pos_session_view.xml
index 92cb91ba808..77ef88829a1 100644
--- a/addons/point_of_sale/views/pos_session_view.xml
+++ b/addons/point_of_sale/views/pos_session_view.xml
@@ -48,18 +48,18 @@
<span class="o_stat_text">Money Out</span>
</div>
</button>
- <button name="%(account.action_view_account_bnk_stmt_cashbox)d"
+ <button name="open_cashbox"
class="oe_stat_button"
attrs="{'invisible':['|', ('cash_control', '=', False), ('state', '!=', 'opening_control')]}"
icon="fa-money"
- type="action" context="{'balance': 'start', 'bank_statement_id': cash_register_id, 'default_pos_id': config_id}">
+ type="object" context="{'balance': 'start'}">
<span class="o_stat_text">Set Opening Balance</span>
</button>
- <button name="%(account.action_view_account_bnk_stmt_cashbox)d"
+ <button name="open_cashbox"
class="oe_stat_button"
attrs="{'invisible':['|', '|', ('cash_control', '=', False), ('state', '=', 'opening_control'), ('state', '=', 'closed')]}"
icon="fa-money"
- type="action" context="{'balance': 'end', 'bank_statement_id': cash_register_id, 'default_pos_id': config_id}">
+ type="object" context="{'balance': 'end'}">
<span class="o_stat_text">Set Closing Balance</span>
</button>
<button class="oe_stat_button" name="action_stock_picking" type="object" icon="fa-arrows-v" attrs="{'invisible':[('picking_count', '=', 0)]}">
diff --git a/addons/point_of_sale/wizard/pos_details.py b/addons/point_of_sale/wizard/pos_details.py
index f62a9a20d43..0a599aefd86 100644
--- a/addons/point_of_sale/wizard/pos_details.py
+++ b/addons/point_of_sale/wizard/pos_details.py
@@ -9,7 +9,25 @@ class PosDetails(models.TransientModel):
_name = 'pos.details.wizard'
_description = 'Open Sales Details Report'
- start_date = fields.Datetime(required=True, default=fields.Datetime.now)
+ def _default_start_date(self):
+ """ Find the earliest start_date of the latests sessions """
+ # restrict to configs available to the user
+ config_ids = self.env['pos.config'].search([]).ids
+ # exclude configs has not been opened for 2 days
+ self.env.cr.execute("""
+ SELECT
+ max(start_at) as start,
+ config_id
+ FROM pos_session
+ WHERE config_id = ANY(%s)
+ AND start_at > (NOW() - INTERVAL '2 DAYS')
+ GROUP BY config_id
+ """, (config_ids,))
+ latest_start_dates = [res['start'] for res in self.env.cr.dictfetchall()]
+ # earliest of the latest sessions
+ return latest_start_dates and min(latest_start_dates) or fields.Datetime.now()
+
+ start_date = fields.Datetime(required=True, default=_default_start_date)
end_date = fields.Datetime(required=True, default=fields.Datetime.now)
pos_config_ids = fields.Many2many('pos.config', 'pos_detail_configs',
default=lambda s: s.env['pos.config'].search([]))
@@ -26,8 +44,6 @@ class PosDetails(models.TransientModel):
@api.multi
def generate_report(self):
- data = {'date_start': self.start_date, 'date_stop': self.end_date}
- data.update(self.env['report.point_of_sale.report_saledetails'].get_sale_details(
- self.start_date, self.end_date, self.pos_config_ids))
+ data = {'date_start': self.start_date, 'date_stop': self.end_date, 'config_ids': self.pos_config_ids.ids}
return self.env['report'].get_action(
[], 'point_of_sale.report_saledetails', data=data)
diff --git a/addons/pos_restaurant/static/src/js/multiprint.js b/addons/pos_restaurant/static/src/js/multiprint.js
index 6ee225dc0c6..8dc63ea07fc 100644
--- a/addons/pos_restaurant/static/src/js/multiprint.js
+++ b/addons/pos_restaurant/static/src/js/multiprint.js
@@ -54,7 +54,14 @@ models.load_models({
for(var i = 0; i < printers.length; i++){
if(active_printers[printers[i].id]){
- var printer = new Printer(self,{url:'http://'+printers[i].proxy_ip+':8069'});
+ var url = printers[i].proxy_ip;
+ if(url.indexOf('//') < 0){
+ url = 'http://'+url;
+ }
+ if(url.indexOf(':',url.indexOf('//')+2) < 0){
+ url = url+':8069';
+ }
+ var printer = new Printer(self,{url:url});
printer.config = printers[i];
self.printers.push(printer);
diff --git a/addons/product/models/product.py b/addons/product/models/product.py
index e13747f6ca1..fd75d899983 100644
--- a/addons/product/models/product.py
+++ b/addons/product/models/product.py
@@ -105,7 +105,7 @@ class ProductProduct(models.Model):
_description = "Product"
_inherits = {'product.template': 'product_tmpl_id'}
_inherit = ['mail.thread']
- _order = 'default_code'
+ _order = 'default_code, id'
price = fields.Float(
'Price', compute='_compute_product_price',
diff --git a/addons/product/models/product_pricelist.py b/addons/product/models/product_pricelist.py
index d1922e347c9..45cc87d17ae 100644
--- a/addons/product/models/product_pricelist.py
+++ b/addons/product/models/product_pricelist.py
@@ -301,6 +301,8 @@ class Pricelist(models.Model):
p = Partner.browse(partner_id)
pl = Property.get('property_product_pricelist', Partner._name, '%s,%s' % (Partner._name, p.id))
+ if pl:
+ pl = pl[0].id
if not pl:
if p.country_id.code:
diff --git a/addons/product_margin/models/product_product.py b/addons/product_margin/models/product_product.py
index 59127738157..6b9d71287d7 100644
--- a/addons/product_margin/models/product_product.py
+++ b/addons/product_margin/models/product_product.py
@@ -50,7 +50,7 @@ class ProductProduct(models.Model):
"""
Inherit read_group to calculate the sum of the non-stored fields, as it is not automatically done anymore through the XML.
"""
- res = super(ProductProduct, self).read_group(fields, groupby, offset=offset, limit=limit, orderby=orderby, lazy=lazy)
+ res = super(ProductProduct, self).read_group(domain, fields, groupby, offset=offset, limit=limit, orderby=orderby, lazy=lazy)
fields_list = ['turnover', 'sale_avg_price', 'sale_purchase_price', 'sale_num_invoiced', 'purchase_num_invoiced',
'sales_gap', 'purchase_gap', 'total_cost', 'sale_expected', 'normal_cost', 'total_margin',
'expected_margin', 'total_margin_rate', 'expected_margin_rate']
@@ -66,7 +66,7 @@ class ProductProduct(models.Model):
for prod in products:
prod_re[prod] = re_ind
re_ind += 1
- res_val = tot_products._compute_product_margin_fields_values([x for x in fields if fields in fields_list], '')
+ res_val = tot_products._compute_product_margin_fields_values(field_names=[x for x in fields if fields in fields_list])
for key in res_val.keys():
for l in res_val[key].keys():
re = res[prod_re[key]]
@@ -144,4 +144,6 @@ class ProductProduct(models.Model):
res[val.id]['total_margin_rate'] = res[val.id]['turnover'] and res[val.id]['total_margin'] * 100 / res[val.id]['turnover'] or 0.0
if 'expected_margin_rate' in field_names:
res[val.id]['expected_margin_rate'] = res[val.id]['sale_expected'] and res[val.id]['expected_margin'] * 100 / res[val.id]['sale_expected'] or 0.0
+ for k, v in res[val.id].items():
+ setattr(val, k, v)
return res
diff --git a/addons/project_issue/models/project_issue.py b/addons/project_issue/models/project_issue.py
index 23855487f93..d4f5e94209f 100644
--- a/addons/project_issue/models/project_issue.py
+++ b/addons/project_issue/models/project_issue.py
@@ -105,7 +105,7 @@ class ProjectIssue(models.Model):
def _compute_inactivity_days(self):
current_datetime = fields.Datetime.from_string(fields.Datetime.now())
for issue in self:
- dt_create_date = fields.Datetime.from_string(issue.create_date)
+ dt_create_date = fields.Datetime.from_string(issue.create_date) or current_datetime
issue.days_since_creation = (current_datetime - dt_create_date).days
if issue.date_action_last:
diff --git a/addons/purchase/models/__init__.py b/addons/purchase/models/__init__.py
index e90a45dff29..dead81bb8fb 100644
--- a/addons/purchase/models/__init__.py
+++ b/addons/purchase/models/__init__.py
@@ -2,7 +2,6 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import account_invoice
-import mail_mail
import purchase
import res_company
import res_config
diff --git a/addons/purchase/models/mail_mail.py b/addons/purchase/models/mail_mail.py
deleted file mode 100644
index 4764a7595d9..00000000000
--- a/addons/purchase/models/mail_mail.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-from odoo import api, models
-
-
-class MailMail(models.Model):
- _name = 'mail.mail'
- _inherit = 'mail.mail'
-
- @api.multi
- def _postprocess_sent_message(self, mail_sent=True):
- for mail in self:
- if mail_sent and mail.model == 'purchase.order':
- purchase_order = self.env['purchase.order'].browse(mail.res_id)
- if purchase_order.state == 'draft':
- purchase_order.state = 'sent'
- return super(MailMail, self)._postprocess_sent_message(mail_sent=mail_sent)
diff --git a/addons/purchase/models/purchase.py b/addons/purchase/models/purchase.py
index bb3064ab53b..0b13e4e144e 100644
--- a/addons/purchase/models/purchase.py
+++ b/addons/purchase/models/purchase.py
@@ -1065,12 +1065,9 @@ class ProductProduct(models.Model):
('state', 'in', ['purchase', 'done']),
('product_id', 'in', self.mapped('id')),
]
- r = {}
- for group in self.env['purchase.report'].read_group(domain, ['product_id', 'unit_quantity'], ['product_id']):
- r[group['product_id'][0]] = group['unit_quantity']
+ PurchaseOrderLines = self.env['purchase.order.line'].search(domain)
for product in self:
- product.purchase_count = r.get(product.id, 0)
- return True
+ product.purchase_count = len(PurchaseOrderLines.filtered(lambda r: r.product_id == product).mapped('order_id'))
purchase_count = fields.Integer(compute='_purchase_count', string='# Purchases')
diff --git a/addons/purchase/models/stock.py b/addons/purchase/models/stock.py
index 0b56586ccb7..e3e66104591 100644
--- a/addons/purchase/models/stock.py
+++ b/addons/purchase/models/stock.py
@@ -124,7 +124,7 @@ class StockWarehouse(models.Model):
return routes
@api.multi
- def _update_name_and_code(self, name, code):
+ def _update_name_and_code(self, name=False, code=False):
res = super(StockWarehouse, self)._update_name_and_code(name, code)
warehouse = self[0]
#change the buy procurement rule name
diff --git a/addons/purchase/views/purchase_views.xml b/addons/purchase/views/purchase_views.xml
index 11c78a13430..b5e0c9e1552 100644
--- a/addons/purchase/views/purchase_views.xml
+++ b/addons/purchase/views/purchase_views.xml
@@ -397,6 +397,7 @@
<field name="origin"/>
<field name="amount_untaxed" sum="Total Untaxed amount" string="Untaxed" widget="monetary"/>
<field name="amount_total" sum="Total amount" widget="monetary"/>
+ <field name="currency_id" invisible="1"/>
<field name="state"/>
<field name="invoice_status" invisible="not context.get('show_purchase', False)"/>
</tree>
diff --git a/addons/report/models/report.py b/addons/report/models/report.py
index 6f01e3d26f2..cf43c8b1203 100644
--- a/addons/report/models/report.py
+++ b/addons/report/models/report.py
@@ -262,7 +262,7 @@ class Report(models.Model):
return self._run_wkhtmltopdf(
headerhtml, footerhtml, contenthtml, context.get('landscape'),
paperformat, specific_paperformat_args, save_in_attachment,
- context.get('set_viewport_size')
+ context.get('set_viewport_size'),
)
@api.noguess
diff --git a/addons/resource/models/resource.py b/addons/resource/models/resource.py
index dd39c73e1e0..582716e4801 100644
--- a/addons/resource/models/resource.py
+++ b/addons/resource/models/resource.py
@@ -151,14 +151,17 @@ class ResourceCalendar(models.Model):
# --------------------------------------------------
@api.multi
- def get_attendances_for_weekday(self, date):
- """ Given a list of weekdays, return matching resource.calendar.attendance"""
+ def get_attendances_for_weekday(self, day_dt):
+ """ Given a day datetime, return matching attendances """
self.ensure_one()
- weekday = date.weekday()
- date = fields.Date.today()
+ weekday = day_dt.weekday()
attendances = self.env['resource.calendar.attendance']
- for attendance in self.attendance_ids.filtered(lambda att: int(att.dayofweek) == weekday and
- not ((att.date_from and date < att.date_from) or (att.date_to and date > att.date_to))):
+
+ for attendance in self.attendance_ids.filtered(
+ lambda att:
+ int(att.dayofweek) == weekday and
+ not (att.date_from and fields.Date.from_string(att.date_from) > day_dt.date()) and
+ not (att.date_to and fields.Date.from_string(att.date_to) < day_dt.date())):
attendances |= attendance
return attendances
diff --git a/addons/resource/tests/test_resource.py b/addons/resource/tests/test_resource.py
index eff3fdd6a49..a01bc7ec63f 100644
--- a/addons/resource/tests/test_resource.py
+++ b/addons/resource/tests/test_resource.py
@@ -162,6 +162,38 @@ class TestResource(TestResourceCommon):
self.assertEqual(intervals[1][0], Datetime.from_string('2013-02-19 12:00:00'), 'resource_calendar: wrong working intervals')
self.assertEqual(intervals[1][1], Datetime.from_string('2013-02-19 15:45:30'), 'resource_calendar: wrong working intervals')
+ def test_21_calendar_working_intervals_limited_attendances(self):
+ """ Test attendances limited in time. """
+ self.env['resource.calendar.attendance'].browse(self.att3_id).write({
+ 'date_from': self.date2 + relativedelta(days=7),
+ 'date_to': False,
+ })
+ intervals = self.calendar.get_working_intervals_of_day(start_dt=self.date2)
+ self.assertEqual(intervals, [(Datetime.from_string('2013-02-15 10:11:12'), Datetime.from_string('2013-02-15 13:00:00'))])
+
+ self.env['resource.calendar.attendance'].browse(self.att3_id).write({
+ 'date_from': False,
+ 'date_to': self.date2 - relativedelta(days=7),
+ })
+ intervals = self.calendar.get_working_intervals_of_day(start_dt=self.date2)
+ self.assertEqual(intervals, [(Datetime.from_string('2013-02-15 10:11:12'), Datetime.from_string('2013-02-15 13:00:00'))])
+
+ self.env['resource.calendar.attendance'].browse(self.att3_id).write({
+ 'date_from': self.date2 + relativedelta(days=7),
+ 'date_to': self.date2 - relativedelta(days=7),
+ })
+ intervals = self.calendar.get_working_intervals_of_day(start_dt=self.date2)
+ self.assertEqual(intervals, [(Datetime.from_string('2013-02-15 10:11:12'), Datetime.from_string('2013-02-15 13:00:00'))])
+
+ self.env['resource.calendar.attendance'].browse(self.att3_id).write({
+ 'date_from': self.date2,
+ 'date_to': self.date2,
+ })
+ intervals = self.calendar.get_working_intervals_of_day(start_dt=self.date2)
+ self.assertEqual(len(intervals), 2)
+ self.assertEqual(intervals[0], (Datetime.from_string('2013-02-15 10:11:12'), Datetime.from_string('2013-02-15 13:00:00')))
+ self.assertEqual(intervals[1], (Datetime.from_string('2013-02-15 16:00:00'), Datetime.from_string('2013-02-15 23:00:00')))
+
def test_30_calendar_working_days(self):
""" Testing calendar hours computation on a working day """
diff --git a/addons/sale/models/sale.py b/addons/sale/models/sale.py
index 7ebbd0c56c2..8c6d6a67999 100644
--- a/addons/sale/models/sale.py
+++ b/addons/sale/models/sale.py
@@ -507,7 +507,7 @@ class SaleOrder(models.Model):
res.setdefault(group, 0.0)
res[group] += tax.compute_all(line.price_reduce, quantity=line.product_uom_qty)['taxes'][0]['amount']
res = sorted(res.items(), key=lambda l: l[0].sequence)
- res = map(lambda l: (l[0].name, formatLang(self.env, l[1], currency_obj=currency)), res)
+ res = map(lambda l: (l[0].name, l[1]), res)
return res
diff --git a/addons/sale/report/sale_report_templates.xml b/addons/sale/report/sale_report_templates.xml
index 05bd9b16d13..ee934c32619 100644
--- a/addons/sale/report/sale_report_templates.xml
+++ b/addons/sale/report/sale_report_templates.xml
@@ -146,7 +146,8 @@
<tr>
<td><span t-esc="amount_by_group[0] or 'Taxes'"/></td>
<td class="text-right">
- <span t-esc="amount_by_group[1]"/>
+ <span t-esc="amount_by_group[1]"
+ t-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/>
</td>
</tr>
</t>
diff --git a/addons/sale/views/sale_views.xml b/addons/sale/views/sale_views.xml
index 3bd5a6437b7..72ccd054386 100644
--- a/addons/sale/views/sale_views.xml
+++ b/addons/sale/views/sale_views.xml
@@ -116,6 +116,7 @@
<field name="partner_id"/>
<field name="user_id"/>
<field name="amount_total" sum="Total Tax Included" widget="monetary"/>
+ <field name="currency_id" invisible="1"/>
<field name="invoice_status"/>
<field name="state" invisible="1"/>
</tree>
@@ -134,6 +135,7 @@
<field name="partner_id"/>
<field name="user_id"/>
<field name="amount_total" sum="Total Tax Included" widget="monetary"/>
+ <field name="currency_id" invisible="1"/>
<field name="state"/>
<field name="currency_id" invisible="True"/>
</tree>
diff --git a/addons/sale_order_dates/models/sale_order.py b/addons/sale_order_dates/models/sale_order.py
index 6ffb67796b7..7fdabc76590 100644
--- a/addons/sale_order_dates/models/sale_order.py
+++ b/addons/sale_order_dates/models/sale_order.py
@@ -37,7 +37,8 @@ class SaleOrder(models.Model):
dt = order_datetime + timedelta(days=line.customer_lead or 0.0)
dates_list.append(dt)
if dates_list:
- order.commitment_date = fields.Datetime.to_string(min(dates_list))
+ commit_date = min(dates_list) if order.picking_policy == 'direct' else max(dates_list)
+ order.commitment_date = fields.Datetime.to_string(commit_date)
def _compute_picking_ids(self):
super(SaleOrder, self)._compute_picking_ids()
diff --git a/addons/sale_stock/tests/test_sale_stock.py b/addons/sale_stock/tests/test_sale_stock.py
index 8f9c887d78e..ab39a0d2129 100644
--- a/addons/sale_stock/tests/test_sale_stock.py
+++ b/addons/sale_stock/tests/test_sale_stock.py
@@ -233,3 +233,37 @@ class TestSaleStock(TestSale):
self.so.action_done()
self.assertEqual(self.so.invoice_status, 'invoiced', 'Sale Stock: so invoice_status should be "invoiced" when set to done')
+
+ def test_04_create_picking_update_saleorderline(self):
+ """
+ Test that updating multiple sale order lines after a succesful delivery creates a single picking containing
+ the new move lines.
+ """
+ # sell two products
+ item1 = self.products['prod_order']
+ item2 = self.products['prod_del']
+
+ self.so = self.env['sale.order'].create({
+ 'partner_id': self.partner.id,
+ 'order_line': [
+ (0, 0, {'name': item1.name, 'product_id': item1.id, 'product_uom_qty': 1, 'product_uom': item1.uom_id.id, 'price_unit': item1.list_price}),
+ (0, 0, {'name': item2.name, 'product_id': item2.id, 'product_uom_qty': 1, 'product_uom': item2.uom_id.id, 'price_unit': item2.list_price}),
+ ],
+ })
+ self.so.action_confirm()
+
+ # deliver them
+ self.assertEquals(len(self.so.picking_ids), 1)
+ self.so.picking_ids[0].action_done()
+ self.assertEquals(self.so.picking_ids[0].state, "done")
+
+ # update the two original sale order lines
+ self.so.write({
+ 'order_line': [
+ (1, self.so.order_line[0].id, {'product_uom_qty': 2}),
+ (1, self.so.order_line[1].id, {'product_uom_qty': 2}),
+ ]
+ })
+
+ # a single picking should be created for the new delivery
+ self.assertEquals(len(self.so.picking_ids), 2)
diff --git a/addons/stock/i18n/stock.pot b/addons/stock/i18n/stock.pot
index 6b1c23dfd72..24201a881c5 100644
--- a/addons/stock/i18n/stock.pot
+++ b/addons/stock/i18n/stock.pot
@@ -6427,6 +6427,12 @@ msgid "You may only return Done pickings"
msgstr ""
#. module: stock
+#: code:addons/stock/models/stock_inventory.py:21
+#, python-format
+msgid "You must define a warehouse for the company: %s."
+msgstr ""
+
+#. module: stock
#: code:addons/stock/models/stock_move.py:553
#: code:addons/stock/models/stock_pack_operation.py:234
#, python-format
diff --git a/addons/stock/models/stock_inventory.py b/addons/stock/models/stock_inventory.py
index 47f080a1109..689bfed426b 100644
--- a/addons/stock/models/stock_inventory.py
+++ b/addons/stock/models/stock_inventory.py
@@ -11,6 +11,15 @@ class Inventory(models.Model):
_name = "stock.inventory"
_description = "Inventory"
+ @api.model
+ def _default_location_id(self):
+ company_user = self.env.user.company_id
+ warehouse = self.env['stock.warehouse'].search([('company_id', '=', company_user.id)], limit=1)
+ if warehouse:
+ return warehouse.lot_stock_id.id
+ else:
+ raise UserError(_('You must define a warehouse for the company: %s.') % (company_user.name,))
+
name = fields.Char(
'Inventory Reference',
readonly=True, required=True,
@@ -43,7 +52,7 @@ class Inventory(models.Model):
'stock.location', 'Inventoried Location',
readonly=True, required=True,
states={'draft': [('readonly', False)]},
- default=lambda self: getattr(self.env.ref('stock.warehouse0', raise_if_not_found=False) or self.env['stock.warehouse'], 'lot_stock_id').id)
+ default=_default_location_id)
product_id = fields.Many2one(
'product.product', 'Inventoried Product',
readonly=True,
diff --git a/addons/stock/models/stock_move.py b/addons/stock/models/stock_move.py
index 42c4e3b80bb..744aa1ff6df 100644
--- a/addons/stock/models/stock_move.py
+++ b/addons/stock/models/stock_move.py
@@ -411,6 +411,14 @@ class StockMove(models.Model):
type (moves should already have them identical). Otherwise, create a new
picking to assign them to. """
Picking = self.env['stock.picking']
+
+ # If this method is called in batch by a write on a one2many and
+ # at some point had to create a picking, some next iterations could
+ # try to find back the created picking. As we look for it by searching
+ # on some computed fields, we have to force a recompute, else the
+ # record won't be found.
+ self.recompute()
+
for move in self:
picking = Picking.search([
('group_id', '=', move.group_id.id),
diff --git a/addons/stock/models/stock_picking.py b/addons/stock/models/stock_picking.py
index 9a97b552cd5..e5c03979b36 100644
--- a/addons/stock/models/stock_picking.py
+++ b/addons/stock/models/stock_picking.py
@@ -381,7 +381,7 @@ class Picking(models.Model):
elif self.partner_id:
location_dest_id = self.partner_id.property_stock_customer.id
else:
- customerloc, location_dest_id = self.env['stock.warehouse']._get_partner_locations()
+ location_dest_id, supplierloc = self.env['stock.warehouse']._get_partner_locations()
self.location_id = location_id
self.location_dest_id = location_dest_id
diff --git a/addons/stock/views/procurement_views.xml b/addons/stock/views/procurement_views.xml
index 3d5de1a7d37..f5ffe635bbf 100644
--- a/addons/stock/views/procurement_views.xml
+++ b/addons/stock/views/procurement_views.xml
@@ -93,9 +93,9 @@
<!-- Procurements are located in Warehouse menu hierarchy, MRP users should come to Stock application to use it. -->
<menuitem id="menu_stock_sched" name="Schedulers" parent="stock.menu_stock_root" groups="group_stock_manager" sequence="50"/>
- <menuitem action="action_procurement_compute" id="menu_procurement_compute" parent="menu_stock_sched" sequence="2"/>
+ <menuitem action="action_procurement_compute" id="menu_procurement_compute" parent="menu_stock_sched" sequence="2" groups="base.group_no_one"/>
<menuitem action="procurement.action_compute_schedulers" id="menu_stock_proc_schedulers" parent="menu_stock_sched" sequence="1" groups="stock.group_stock_manager"/>
<menuitem id="menu_stock_procurement" name="Automatic Procurements" parent="stock.menu_stock_config_settings" sequence="5"/>
<menuitem action="procurement.procurement_order_action_exceptions" id="menu_stock_procurement_action" parent="stock.menu_warehouse_report" sequence="150" groups="stock.group_stock_manager"/>
<menuitem id="menu_procurement_rules" name="Global Procurement Rules" parent="stock.menu_routes_config" action="procrules" groups="base.group_no_one" sequence="3"/>
-</odoo> \ No newline at end of file
+</odoo>
diff --git a/addons/stock/views/product_views.xml b/addons/stock/views/product_views.xml
index 9134a7d2373..670915b97dc 100644
--- a/addons/stock/views/product_views.xml
+++ b/addons/stock/views/product_views.xml
@@ -389,7 +389,7 @@
<field name="res_model">product.template</field>
<field name="view_mode">kanban,tree,form</field>
<field name="view_type">form</field>
- <field name="context">{"search_default_products": 1, 'default_type': 'product'}</field>
+ <field name="context">{"search_default_consumable": 1, 'default_type': 'product'}</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to define a new product.
diff --git a/addons/stock/wizard/procurement_orderpoint_compute.py b/addons/stock/wizard/procurement_orderpoint_compute.py
index d62d94ab054..da4f6969d89 100644
--- a/addons/stock/wizard/procurement_orderpoint_compute.py
+++ b/addons/stock/wizard/procurement_orderpoint_compute.py
@@ -6,10 +6,12 @@
# - Order if the virtual stock of today is bellow the min of the defined order point
#
-from odoo import api, models
+from odoo import api, models, tools
+import logging
import threading
+_logger = logging.getLogger(__name__)
class ProcurementOrderpointConfirm(models.TransientModel):
_name = 'procurement.orderpoint.compute'
@@ -20,6 +22,17 @@ class ProcurementOrderpointConfirm(models.TransientModel):
# As this function is in a new thread, I need to open a new cursor, because the old one may be closed
new_cr = self.pool.cursor()
self = self.with_env(self.env(cr=new_cr))
+ scheduler_cron = self.sudo().env.ref('procurement.ir_cron_scheduler_action')
+ # Avoid to run the scheduler multiple times in the same time
+ try:
+ with tools.mute_logger('odoo.sql_db'):
+ self._cr.execute("SELECT id FROM ir_cron WHERE id = %s FOR UPDATE NOWAIT", (scheduler_cron.id,))
+ except Exception:
+ _logger.info('Attempt to run procurement scheduler aborted, as already running')
+ self._cr.rollback()
+ self._cr.close()
+ return {}
+
self.env['procurement.order']._procure_orderpoint_confirm(
use_new_cursor=new_cr.dbname,
company_id=self.env.user.company_id.id)
diff --git a/addons/stock_account/models/product.py b/addons/stock_account/models/product.py
index 6f0c4e7a351..1e4ac7ffbe1 100644
--- a/addons/stock_account/models/product.py
+++ b/addons/stock_account/models/product.py
@@ -102,7 +102,7 @@ class ProductProduct(models.Model):
product_accounts = {product.id: product.product_tmpl_id.get_product_accounts() for product in self}
for location in locations:
- for product in self.with_context(location=location.id, compute_child=False):
+ for product in self.with_context(location=location.id, compute_child=False).filtered(lambda r: r.valuation == 'real_time'):
diff = product.standard_price - new_price
if float_is_zero(diff, precision_rounding=product.currency_id.rounding):
raise UserError(_("No difference between standard price and new price!"))
diff --git a/addons/web/static/src/js/views/form_widgets.js b/addons/web/static/src/js/views/form_widgets.js
index 0b0bee43d8d..c628763ae80 100644
--- a/addons/web/static/src/js/views/form_widgets.js
+++ b/addons/web/static/src/js/views/form_widgets.js
@@ -955,7 +955,8 @@ var FieldRadio = common.AbstractField.extend(common.ReinitializeFieldMixin, {
},
get_value: function () {
var value = this.get('value');
- return ((value instanceof Array)? value[0] : value) || false;
+ value = ((value instanceof Array)? value[0] : value);
+ return _.isUndefined(value) ? false : value;
},
render_value: function () {
var self = this;
@@ -1006,6 +1007,7 @@ var FieldReference = common.AbstractField.extend(common.ReinitializeFieldMixin,
this.m2o = new FieldMany2One(this.fm, { attrs: {
name: 'Referenced Document',
modifiers: JSON.stringify({readonly: this.get('effective_readonly')}),
+ context: this.build_context().eval(),
}});
this.m2o.on("change:value", this, this.data_changed);
this.m2o.appendTo(this.$el);
diff --git a/addons/web/static/src/js/views/graph_widget.js b/addons/web/static/src/js/views/graph_widget.js
index 6b9e8459b78..64ba42b1928 100644
--- a/addons/web/static/src/js/views/graph_widget.js
+++ b/addons/web/static/src/js/views/graph_widget.js
@@ -107,7 +107,8 @@ return Widget.extend({
display_bar: function () {
// prepare data for bar chart
var data, values,
- measure = this.fields[this.measure].string;
+ measure = this.fields[this.measure].string,
+ self = this;
// zero groupbys
if (this.groupbys.length === 0) {
@@ -166,9 +167,8 @@ return Widget.extend({
svg.transition().duration(0);
var chart = nv.models.multiBarChart();
- var maxVal = _.max(values, function(v) {return v.y})
chart.options({
- margin: {left: 12 * String(maxVal && maxVal.y || 10000000).length},
+ margin: {left: 120, bottom: 60},
delay: 250,
transition: 10,
showLegend: _.size(data) <= MAX_LEGEND_LENGTH,
@@ -177,10 +177,15 @@ return Widget.extend({
rightAlignYAxis: false,
stacked: this.stacked,
reduceXTicks: false,
- // rotateLabels: 40,
+ rotateLabels: -20,
showControls: (this.groupbys.length > 1)
});
- chart.yAxis.tickFormat(function(d) { return formats.format_value(d, { type : 'float' });});
+ chart.yAxis.tickFormat(function(d) {
+ return formats.format_value(d, {
+ type : 'float',
+ digits : self.fields[self.measure] && self.fields[self.measure].digits || [69, 2],
+ });
+ });
chart(svg);
this.to_remove = chart.update;
@@ -302,9 +307,8 @@ return Widget.extend({
svg.transition().duration(0);
var chart = nv.models.lineChart();
- var maxVal = _.max(values, function(v) {return v.y})
chart.options({
- margin: {left: 12 * String(maxVal && maxVal.y || 10000000).length, right: 50},
+ margin: {left: 120, bottom: 60},
useInteractiveGuideline: true,
showLegend: _.size(data) <= MAX_LEGEND_LENGTH,
showXAxis: true,
@@ -312,7 +316,12 @@ return Widget.extend({
});
chart.xAxis.tickValues(tickValues)
.tickFormat(tickFormat);
- chart.yAxis.tickFormat(function(d) { return formats.format_value(d, { type : 'float' });});
+ chart.yAxis.tickFormat(function(d) {
+ return formats.format_value(d, {
+ type : 'float',
+ digits : self.fields[self.measure] && self.fields[self.measure].digits || [69, 2],
+ });
+ });
chart(svg);
this.to_remove = chart.update;
diff --git a/addons/web/static/src/less/list_view.less b/addons/web/static/src/less/list_view.less
index 7097f51eba8..fd8a51d96be 100644
--- a/addons/web/static/src/less/list_view.less
+++ b/addons/web/static/src/less/list_view.less
@@ -127,6 +127,11 @@
visibility: visible;
}
+ &.o_list_record_delete {
+ opacity: 0.5;
+ pointer-events: none;
+ }
+
&.o_readonly {
visibility: visible;
color: transparent;
diff --git a/addons/website_blog/models/website_blog.py b/addons/website_blog/models/website_blog.py
index 027083ff4bb..4473ede211b 100644
--- a/addons/website_blog/models/website_blog.py
+++ b/addons/website_blog/models/website_blog.py
@@ -26,9 +26,10 @@ class Blog(models.Model):
if 'active' in vals:
# archiving/unarchiving a blog does it on its posts, too
post_ids = self.env['blog.post'].with_context(active_test=False).search([
- ('blog_id', 'in', self)
+ ('blog_id', 'in', self.ids)
])
- post_ids.write({'active': vals['active']})
+ for blog_post in post_ids:
+ blog_post.active = vals['active']
return res
@api.multi
diff --git a/addons/website_customer/controllers/main.py b/addons/website_customer/controllers/main.py
index cba2b1cfbc6..c05fb904f55 100644
--- a/addons/website_customer/controllers/main.py
+++ b/addons/website_customer/controllers/main.py
@@ -50,15 +50,14 @@ class WebsiteCustomer(http.Controller):
if country_id:
domain += [('country_id', '=', country_id)]
- if not any(x['country_id'][0] == country_id for x in countries if x['country_id']):
- country = Country.browse(country_id).read(['name'])
- if country:
+ curr_country = Country.browse(country_id)
+ if country_id not in (x['country_id'][0] for x in countries if x['country_id']):
+ if curr_country.exists():
countries.append({
'country_id_count': 0,
- 'country_id': (country_id, country['name'])
+ 'country_id': (curr_country.id, curr_country.name)
})
countries.sort(key=lambda d: d['country_id'] and d['country_id'][1])
- curr_country = Country.browse(country_id)
countries.insert(0, {
'country_id_count': country_count,
diff --git a/addons/website_links/static/src/js/website_links_charts.js b/addons/website_links/static/src/js/website_links_charts.js
index 8c9848406eb..bd8d2e89064 100644
--- a/addons/website_links/static/src/js/website_links_charts.js
+++ b/addons/website_links/static/src/js/website_links_charts.js
@@ -194,6 +194,10 @@ if(!$('.o_website_links_chart').length) {
charts.last_month_pie = new PieChart('#last_month_countries_charts', last_month_clicks_by_country);
charts.last_week_pie = new PieChart('#last_week_countries_charts', last_week_clicks_by_country);
+ var row_width = $('#all_time_countries_charts').parent().width();
+ var charts_svg = $('#all_time_countries_charts,last_month_countries_charts,last_week_countries_charts').find('svg');
+ charts_svg.css('height', Math.max(clicks_by_country.length * (row_width > 750 ? 1 : 2), 20) + 'em');
+
_.invoke(charts, 'start');
nv.utils.windowResize(function () {
diff --git a/addons/website_mail/views/website_mail_templates.xml b/addons/website_mail/views/website_mail_templates.xml
index a0f117ce538..00abfb7bece 100644
--- a/addons/website_mail/views/website_mail_templates.xml
+++ b/addons/website_mail/views/website_mail_templates.xml
@@ -84,14 +84,12 @@
<t t-set="object" t-value="message"/>
<t t-call="website.publish_short"/>
<div t-field="message.body"/>
- <div class="o_mg_link_content">
<div class="col-md-2 col-sm-3 text-center" t-foreach='message.attachment_ids' t-as='attachment'>
<a t-attf-href="/web/content/#{attachment.id}?download=true" target="_blank">
<div class='oe_attachment_embedded o_image' t-att-title="attachment.name" t-att-data-mimetype="attachment.mimetype" t-attf-data-src="/web/image/#{attachment.id}/100x80"/>
<div class='oe_attachment_name'><t t-raw='attachment.name' /></div>
</a>
</div>
- </div>
</div>
</div>
</li>
diff --git a/addons/website_quote/models/product_template.py b/addons/website_quote/models/product_template.py
index 55f3fbc1dec..4c6c16e98a0 100644
--- a/addons/website_quote/models/product_template.py
+++ b/addons/website_quote/models/product_template.py
@@ -2,10 +2,11 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import fields, models
+from odoo.tools.translate import html_translate
class ProductTemplate(models.Model):
_inherit = "product.template"
website_description = fields.Html('Description for the website', sanitize_attributes=False) # hack, if website_sale is not installed
- quote_description = fields.Html('Description for the quote', sanitize_attributes=False)
+ quote_description = fields.Html('Description for the quote', sanitize_attributes=False, translate=html_translate)
diff --git a/addons/website_quote/models/sale_order.py b/addons/website_quote/models/sale_order.py
index 64281a00d2f..3a8f8977597 100644
--- a/addons/website_quote/models/sale_order.py
+++ b/addons/website_quote/models/sale_order.py
@@ -81,11 +81,10 @@ class SaleOrder(models.Model):
def onchange_template_id(self):
if not self.template_id:
return
- if self.partner_id:
- self = self.with_context(lang=self.partner_id.lang)
+ template = self.template_id.with_context(lang=self.partner_id.lang)
order_lines = [(5, 0, 0)]
- for line in self.template_id.quote_line:
+ for line in template.quote_line:
if self.pricelist_id:
price = self.pricelist_id.with_context(uom=line.product_uom_id.id).get_product_price(line.product_id, 1, False)
else:
@@ -111,7 +110,7 @@ class SaleOrder(models.Model):
self.order_line._compute_tax_id()
option_lines = []
- for option in self.template_id.options:
+ for option in template.options:
if self.pricelist_id:
price = self.pricelist_id.with_context(uom=option.uom_id.id).get_product_price(option.product_id, 1, False)
else:
@@ -129,14 +128,14 @@ class SaleOrder(models.Model):
option_lines.append((0, 0, data))
self.options = option_lines
- if self.template_id.number_of_days > 0:
- self.validity_date = fields.Date.to_string(datetime.now() + timedelta(self.template_id.number_of_days))
+ if template.number_of_days > 0:
+ self.validity_date = fields.Date.to_string(datetime.now() + timedelta(template.number_of_days))
- self.website_description = self.template_id.website_description
- self.require_payment = self.template_id.require_payment
+ self.website_description = template.website_description
+ self.require_payment = template.require_payment
- if self.template_id.note:
- self.note = self.template_id.note
+ if template.note:
+ self.note = template.note
@api.multi
def open_quotation(self):
diff --git a/addons/website_sale/static/src/js/website_sale_rating.js b/addons/website_sale/static/src/js/website_sale_rating.js
index 278d6bc7b1d..562b161fb83 100644
--- a/addons/website_sale/static/src/js/website_sale_rating.js
+++ b/addons/website_sale/static/src/js/website_sale_rating.js
@@ -12,10 +12,8 @@ odoo.define('website_sale.rating', function (require) {
website_mail_thread.WebsiteMailThread.include({
prepend_message: function(message_data){
- var rating_enabled = this.$el.data('rating-enabled');
- message_data['rating_enabled'] = rating_enabled;
var $elem = this._super.call(this, message_data);
- if(message_data['rating_enabled']){
+ if(message_data['rating_default_value']){
var rating_star = new rating.RatingStarWidget(this, {
'rating_default_value': message_data['rating_default_value'],
'rating_disabled': message_data['rating_disabled'],
diff --git a/doc/_extensions/odoo_ext/sub-menu_list.html b/doc/_extensions/odoo_ext/sub-menu_list.html
index 16677c10e39..3b4d21620f3 100644
--- a/doc/_extensions/odoo_ext/sub-menu_list.html
+++ b/doc/_extensions/odoo_ext/sub-menu_list.html
@@ -1,8 +1,8 @@
{# note: if odoo.com/page/docs sub-menu's structure change, these links have to change as well #}
-<li><a href="http://www.odoo.com/documentation/user/9.0/index.html">User</a></li>
-<li><a href="http://www.odoo.com/documentation/9.0/index.html">Developer</a></li>
-<li><a href="http://www.odoo.com/documentation/9.0/api_integration.html">API</a></li>
-<li><a href="http://www.odoo.com/documentation/9.0/setup/install.html">Installation</a></li>
+<li><a href="http://www.odoo.com/documentation/user/10.0/index.html">User</a></li>
+<li><a href="http://www.odoo.com/documentation/10.0/index.html">Developer</a></li>
+<li><a href="http://www.odoo.com/documentation/10.0/api_integration.html">API</a></li>
+<li><a href="http://www.odoo.com/documentation/10.0/setup/install.html">Installation</a></li>
<li><a href="http://www.odoo.com/page/odoo-white-paper">White Papers</a></li>
<li><a href="http://www.odoo.com/page/legal">Legal</a></li>
diff --git a/doc/cla/corporate/x8bit.md b/doc/cla/corporate/x8bit.md
new file mode 100644
index 00000000000..acf69f5ffdd
--- /dev/null
+++ b/doc/cla/corporate/x8bit.md
@@ -0,0 +1,15 @@
+México, 2016-07-19
+
+X8BIT agrees to the terms of the Odoo Corporate Contributor License
+Agreement v1.0.
+
+I declare that I am authorized and able to make this agreement and sign this
+declaration.
+
+Signed,
+
+Juan Carlos del Valle juan@x8bit.com https://github.com/imekinox
+
+List of contributors:
+
+Juan Carlos del Valle juan@x8bit.com https://github.com/imekinox \ No newline at end of file
diff --git a/doc/cla/individual/hhgabelgaard.md b/doc/cla/individual/hhgabelgaard.md
new file mode 100644
index 00000000000..e873ef3f5e4
--- /dev/null
+++ b/doc/cla/individual/hhgabelgaard.md
@@ -0,0 +1,11 @@
+Denmark, 2016-05-06
+
+I hereby agree to the terms of the Odoo Individual Contributor License
+Agreement v1.0.
+
+I declare that I am authorized and able to make this agreement and sign this
+declaration.
+
+Signed,
+
+Hans Henrik Gabelgaard hhg@gabelgaard.org https://github.com/hhgabelgaard \ No newline at end of file
diff --git a/doc/cla/individual/iluque.md b/doc/cla/individual/iluque.md
new file mode 100644
index 00000000000..3395caeb182
--- /dev/null
+++ b/doc/cla/individual/iluque.md
@@ -0,0 +1,9 @@
+Spain, 25/10/2016
+
+I hereby agree to the terms of the Odoo Individual Contributor License Agreement v1.0.
+
+I declare that I am authorized and able to make this agreement and sign this declaration.
+
+Signed,
+
+Iker LuqueMichel luquemichel@gmail.com https://github.com/iluque
diff --git a/doc/cla/individual/jlzhou.md b/doc/cla/individual/jlzhou.md
new file mode 100644
index 00000000000..121bbe225ff
--- /dev/null
+++ b/doc/cla/individual/jlzhou.md
@@ -0,0 +1,9 @@
+China, 2016-10-19
+
+I hereby agree to the terms of the Odoo Individual Contributor License Agreement v1.0.
+
+I declare that I am authorized and able to make this agreement and sign this declaration.
+
+Signed,
+
+Henry Zhou zhouhenry@live.com https://github.com/jlzhou
diff --git a/doc/cla/individual/liujianyun.md b/doc/cla/individual/liujianyun.md
new file mode 100644
index 00000000000..16dc33cf91d
--- /dev/null
+++ b/doc/cla/individual/liujianyun.md
@@ -0,0 +1,9 @@
+China, 2016-10-12
+
+I hereby agree to the terms of the Odoo Individual Contributor License Agreement v1.0.
+
+I declare that I am authorized and able to make this agreement and sign this declaration.
+
+Signed,
+
+Liu Jianyun lnkdel@gmail.com https://github.com/lnkdel
diff --git a/doc/cla/individual/salvatoretrimarchi.md b/doc/cla/individual/salvatoretrimarchi.md
new file mode 100644
index 00000000000..51758066b69
--- /dev/null
+++ b/doc/cla/individual/salvatoretrimarchi.md
@@ -0,0 +1,9 @@
+Honduras, 2016-12-08
+
+I hereby agree to the terms of the Odoo Individual Contributor License Agreement v1.0.
+
+I declare that I am authorized and able to make this agreement and sign this declaration.
+
+Signed,
+
+Salvatore Josué Trimarchi Pinto salvatore.trimarchi@gmail.com https://github.com/salvatoretrimarchi
diff --git a/doc/cla/individual/smartupdo.md b/doc/cla/individual/smartupdo.md
new file mode 100644
index 00000000000..92a0d943313
--- /dev/null
+++ b/doc/cla/individual/smartupdo.md
@@ -0,0 +1,11 @@
+Dominican Republic, October 26, 2016
+
+I hereby agree to the terms of the Odoo Individual Contributor License
+Agreement v1.0.
+
+I declare that I am authorized and able to make this agreement and sign this
+declaration.
+
+Signed,
+
+Richard Aquino richard@smartup.do https://github.com/smartupdo
diff --git a/odoo/addons/base/ir/ir_actions.py b/odoo/addons/base/ir/ir_actions.py
index 55da335d7e2..e164c5fdb13 100644
--- a/odoo/addons/base/ir/ir_actions.py
+++ b/odoo/addons/base/ir/ir_actions.py
@@ -211,7 +211,7 @@ class IrActionsReportXml(models.Model):
for report in self:
if report.ir_values_id:
try:
- self.report.ir_values_id.sudo().unlink()
+ report.ir_values_id.sudo().unlink()
except Exception:
raise UserError(_('Deletion of the action record failed.'))
return True
diff --git a/odoo/addons/base/ir/ir_attachment.py b/odoo/addons/base/ir/ir_attachment.py
index d84a18d7f69..528df926e5d 100644
--- a/odoo/addons/base/ir/ir_attachment.py
+++ b/odoo/addons/base/ir/ir_attachment.py
@@ -138,8 +138,17 @@ class IrAttachment(models.Model):
if self._storage() != 'file':
return
- # prevent all concurrent updates on ir_attachment while collecting!
+ # Continue in a new transaction. The LOCK statement below must be the
+ # first one in the current transaction, otherwise the database snapshot
+ # used by it may not contain the most recent changes made to the table
+ # ir_attachment! Indeed, if concurrent transactions create attachments,
+ # the LOCK statement will wait until those concurrent transactions end.
+ # But this transaction will not see the new attachements if it has done
+ # other requests before the LOCK (like the method _storage() above).
cr = self._cr
+ cr.commit()
+
+ # prevent all concurrent updates on ir_attachment while collecting!
cr.execute("LOCK ir_attachment IN SHARE MODE")
# retrieve the file names from the checklist
@@ -168,6 +177,8 @@ class IrAttachment(models.Model):
with tools.ignore(OSError):
os.unlink(filepath)
+ # commit to release the lock
+ cr.commit()
_logger.info("filestore gc %d checked, %d removed", len(checklist), removed)
@api.depends('store_fname', 'db_datas')
diff --git a/odoo/addons/base/ir/ir_model.py b/odoo/addons/base/ir/ir_model.py
index 7259c0bbc1d..868eba9b8bb 100644
--- a/odoo/addons/base/ir/ir_model.py
+++ b/odoo/addons/base/ir/ir_model.py
@@ -435,6 +435,12 @@ class IrModelFields(models.Model):
model = self.env[record.model]
field = model._fields[record.name]
if field.type == 'many2one' and model._field_inverses.get(field):
+ if self._context.get(MODULE_UNINSTALL_FLAG):
+ # automatically unlink the corresponding one2many field(s)
+ inverses = self.search([('relation', '=', field.model_name),
+ ('relation_field', '=', field.name)])
+ inverses.unlink()
+ continue
msg = _("The field '%s' cannot be removed because the field '%s' depends on it.")
raise UserError(msg % (field, model._field_inverses[field][0]))
@@ -714,6 +720,12 @@ class IrModelConstraint(models.Model):
self.unlink()
+ @api.multi
+ def copy(self, default=None):
+ default = dict(default or {})
+ default['name'] = self.name + '_copy'
+ return super(IrModelConstraint, self).copy(default)
+
class IrModelRelation(models.Model):
"""
diff --git a/odoo/fields.py b/odoo/fields.py
index 90f4b2f943c..3240b83d801 100644
--- a/odoo/fields.py
+++ b/odoo/fields.py
@@ -1578,6 +1578,7 @@ class Datetime(Field):
class Binary(Field):
type = 'binary'
_slots = {
+ 'prefetch': False, # not prefetched by default
'attachment': False, # whether value is stored in attachment
}
@@ -1747,6 +1748,14 @@ class Selection(Field):
return item[1]
return False
+ def convert_to_column(self, value, record):
+ """ Convert ``value`` from the ``write`` format to the SQL format. """
+ if value is None or value is False:
+ return None
+ if isinstance(value, unicode):
+ return value.encode('utf8')
+ return str(value)
+
class Reference(Selection):
type = 'reference'
@@ -2398,6 +2407,9 @@ class Many2many(_RelationalMulti):
class Serialized(Field):
""" Serialized fields provide the storage for sparse fields. """
type = 'serialized'
+ _slots = {
+ 'prefetch': False, # not prefetched by default
+ }
column_type = ('text', 'text')
def convert_to_column(self, value, record):
diff --git a/odoo/models.py b/odoo/models.py
index 29aca32a50f..06aab521071 100644
--- a/odoo/models.py
+++ b/odoo/models.py
@@ -665,10 +665,11 @@ class BaseModel(object):
methods = []
for attr, func in getmembers(cls, is_constraint):
for name in func._constrains:
- if name not in cls._fields:
+ field = cls._fields.get(name)
+ if not field:
_logger.warning("method %s.%s: @constrains parameter %r is not a field name", cls._name, attr, name)
- if not cls._fields[name].store:
- _logger.warning("method %s.%s: @constrains parameter %r is not stored", cls._name, attr, name)
+ if not (field.store or field.inverse):
+ _logger.warning("method %s.%s: @constrains parameter %r is not writeable", cls._name, attr, name)
methods.append(func)
# optimization: memoize result on cls, it will not be recomputed
@@ -3514,6 +3515,8 @@ class BaseModel(object):
record._cache.update(record._convert_to_cache(new_vals, update=True))
for key in new_vals:
self._fields[key].determine_inverse(self)
+ # check Python constraints for inversed fields
+ self._validate_fields(set(new_vals) - set(old_vals))
return True
@@ -3772,6 +3775,8 @@ class BaseModel(object):
with self.env.protecting(protected_fields, record):
for key in new_vals:
self._fields[key].determine_inverse(record)
+ # check Python constraints for inversed fields
+ record._validate_fields(set(new_vals) - set(old_vals))
return record
diff --git a/odoo/tests/addons/test_translation_import/tests.yml b/odoo/tests/addons/test_translation_import/tests.yml
index 9138fb7cd27..e129baec516 100644
--- a/odoo/tests/addons/test_translation_import/tests.yml
+++ b/odoo/tests/addons/test_translation_import/tests.yml
@@ -8,6 +8,6 @@
Assert we have loaded the correct number of entries for the given source string.
-
!python {model: ir.translation }: |
- ids = self.search(cr, uid,
+ translations = self.search(
[('src', '=', '1XBUO5PUYH2RYZSA1FTLRYS8SPCNU1UYXMEYMM25ASV7JC2KTJZQESZYRV9L8CGB')])
- assert len(ids) == 2, "2 entries are expected, got %s instead." % len(ids)
+ assert len(translations) == 2, "2 entries are expected, got %s instead." % len(translations)
diff --git a/odoo/tests/addons/test_translation_import/tests/test_term_count.py b/odoo/tests/addons/test_translation_import/tests/test_term_count.py
index 9d2be3ba82c..d63f2b01baa 100644
--- a/odoo/tests/addons/test_translation_import/tests/test_term_count.py
+++ b/odoo/tests/addons/test_translation_import/tests/test_term_count.py
@@ -10,6 +10,6 @@ class TestTermCount(common.TransactionCase):
Just make sure we have as many translation entries as we wanted.
"""
odoo.tools.trans_load(self.cr, 'test_translation_import/i18n/fr.po', 'fr_FR', verbose=False)
- ids = self.registry('ir.translation').search(self.cr, self.uid,
+ ids = self.env['ir.translation'].search(
[('src', '=', '1XBUO5PUYH2RYZSA1FTLRYS8SPCNU1UYXMEYMM25ASV7JC2KTJZQESZYRV9L8CGB')])
self.assertEqual(len(ids), 2)
diff --git a/odoo/tests/addons/test_translation_import/view.xml b/odoo/tests/addons/test_translation_import/view.xml
index 52847b74eac..7dd417707e3 100644
--- a/odoo/tests/addons/test_translation_import/view.xml
+++ b/odoo/tests/addons/test_translation_import/view.xml
@@ -11,7 +11,7 @@
<field name="target">current</field>
</record>
- <menuitem id="menu_test_translation" parent="menu_tests" name="Test translation"/>
+ <menuitem id="menu_test_translation" name="Test translation"/>
<menuitem id="menu_test_translation_import"
name="Test translation import"