diff options
| author | Christophe Simonis <chs@odoo.com> | 2019-03-25 10:05:27 +0000 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2019-03-25 11:13:41 +0000 |
| commit | 5df4746c9aa144e6e3fce44fea43dac1089a5c51 (patch) | |
| tree | f4ce932a76563e26b8d131805d49b405fcf9ad8f /addons | |
| parent | 39e71353c5d58f7af6b3270911a24d98b73cad4e (diff) | |
| parent | 230ad8c381e927025efabff0f5f8c2debc432249 (diff) | |
[MERGE] forward port branch saas-12.2 up to 230ad8c381e
closes odoo/odoo#32088
Signed-off-by: Christophe Simonis <chs@odoo.com>
Diffstat (limited to 'addons')
362 files changed, 25518 insertions, 9446 deletions
diff --git a/addons/account/i18n/account.pot b/addons/account/i18n/account.pot index 24525364a01..036c6a62735 100644 --- a/addons/account/i18n/account.pot +++ b/addons/account/i18n/account.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:59+0000\n" -"PO-Revision-Date: 2019-01-16 07:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -45,23 +45,23 @@ msgid "${object.company_id.name} Payment Receipt (Ref ${object.name or 'n/a' })" msgstr "" #. module: account -#: code:addons/account/models/account.py:944 +#: code:addons/account/models/account.py:949 #, python-format msgid "%s (Copy)" msgstr "" #. module: account -#: code:addons/account/models/account.py:247 +#: code:addons/account/models/account.py:245 +#: code:addons/account/models/account.py:249 #: code:addons/account/models/account.py:251 -#: code:addons/account/models/account.py:253 -#: code:addons/account/models/account.py:604 -#: code:addons/account/models/account.py:605 +#: code:addons/account/models/account.py:607 +#: code:addons/account/models/account.py:608 #, python-format msgid "%s (copy)" msgstr "" #. module: account -#: code:addons/account/models/account.py:695 +#: code:addons/account/models/account.py:698 #, python-format msgid "%s Sequence" msgstr "" @@ -112,7 +112,7 @@ msgid "45 Days" msgstr "" #. module: account -#: code:addons/account/models/account.py:693 +#: code:addons/account/models/account.py:696 #, python-format msgid ": Refund" msgstr "" @@ -212,7 +212,7 @@ msgid "<i class=\"fa fa-print\"/> Print" msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:714 +#: code:addons/account/models/account_invoice.py:764 #, python-format msgid "<p>You can control the invoice from your vendor based on what you purchased or received.</p>" msgstr "" @@ -282,6 +282,11 @@ msgstr "" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form +msgid "<span class=\"o_form_label\">Default Sending Options</span>" +msgstr "" + +#. module: account +#: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "<span class=\"o_form_label\">Default Taxes</span>\n" " <span class=\"fa fa-lg fa-building-o\" title=\"Values set here are company-specific.\" aria-label=\"Values set here are company-specific.\" groups=\"base.group_multi_company\" role=\"img\"/>" msgstr "" @@ -595,13 +600,13 @@ msgid "A Cash Register allows you to manage cash entries in your cash\n" msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:1938 +#: code:addons/account/models/account_invoice.py:2018 #, python-format msgid "A Payment Term should have only one line of type Balance." msgstr "" #. module: account -#: code:addons/account/models/account.py:861 +#: code:addons/account/models/account.py:866 #, python-format msgid "A bank account can belong to only one journal." msgstr "" @@ -631,13 +636,13 @@ msgid "A journal is used to record transactions of all accounting data\n" msgstr "" #. module: account -#: code:addons/account/models/account_move.py:315 +#: code:addons/account/models/account_move.py:335 #, python-format msgid "A payment journal entry generated in a journal configured to post entries only when payments are reconciled with a bank statement cannot be manually posted. Those will be posted automatically after performing the bank reconciliation." msgstr "" #. module: account -#: code:addons/account/models/reconciliation_widget.py:692 +#: code:addons/account/models/reconciliation_widget.py:736 #, python-format msgid "A reconciliation must involve at least 2 move lines." msgstr "" @@ -648,14 +653,14 @@ msgid "A rounding per line is advised if your prices are tax-included. That way, msgstr "" #. module: account -#: code:addons/account/models/account_bank_statement.py:537 -#: code:addons/account/models/account_bank_statement.py:540 +#: code:addons/account/models/account_bank_statement.py:582 +#: code:addons/account/models/account_bank_statement.py:585 #, python-format msgid "A selected move line was already reconciled." msgstr "" #. module: account -#: code:addons/account/models/account_bank_statement.py:548 +#: code:addons/account/models/account_bank_statement.py:603 #, python-format msgid "A selected statement line was already reconciled with an account move." msgstr "" @@ -677,11 +682,11 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/js/reconciliation/reconciliation_renderer.js:546 -#: code:addons/account/static/src/js/reconciliation/reconciliation_renderer.js:548 -#: code:addons/account/static/src/xml/account_reconciliation.xml:181 -#: code:addons/account/static/src/xml/account_reconciliation.xml:284 -#: code:addons/account/static/src/xml/account_reconciliation.xml:309 +#: code:addons/account/static/src/js/reconciliation/reconciliation_renderer.js:556 +#: code:addons/account/static/src/js/reconciliation/reconciliation_renderer.js:558 +#: code:addons/account/static/src/xml/account_reconciliation.xml:187 +#: code:addons/account/static/src/xml/account_reconciliation.xml:298 +#: code:addons/account/static/src/xml/account_reconciliation.xml:323 #: model:ir.model,name:account.model_account_account #: model:ir.model.fields,field_description:account.field_account_cash_rounding__account_id #: model:ir.model.fields,field_description:account.field_account_invoice__account_id @@ -700,7 +705,7 @@ msgid "Account" msgstr "" #. module: account -#: code:addons/account/models/account_move.py:905 +#: code:addons/account/models/account_move.py:944 #, python-format msgid "Account %s (%s) does not allow reconciliation. First change the configuration of this account to allow it." msgstr "" @@ -1060,6 +1065,8 @@ msgstr "" #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement__message_needaction #: model:ir.model.fields,field_description:account.field_account_invoice__message_needaction +#: model:ir.model.fields,field_description:account.field_account_journal__message_needaction +#: model:ir.model.fields,field_description:account.field_account_move__message_needaction #: model:ir.model.fields,field_description:account.field_account_payment__message_needaction msgid "Action Needed" msgstr "" @@ -1093,12 +1100,16 @@ msgstr "" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice__activity_ids +#: model:ir.model.fields,field_description:account.field_account_journal__activity_ids +#: model:ir.model.fields,field_description:account.field_account_move__activity_ids #: model:ir.model.fields,field_description:account.field_account_payment__activity_ids msgid "Activities" msgstr "" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice__activity_state +#: model:ir.model.fields,field_description:account.field_account_journal__activity_state +#: model:ir.model.fields,field_description:account.field_account_move__activity_state #: model:ir.model.fields,field_description:account.field_account_payment__activity_state msgid "Activity State" msgstr "" @@ -1289,7 +1300,7 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:49 +#: code:addons/account/static/src/xml/account_reconciliation.xml:54 #, python-format msgid "All invoices and payments have been matched, your accounts' balances are clean." msgstr "" @@ -1357,9 +1368,9 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:208 -#: code:addons/account/static/src/xml/account_reconciliation.xml:291 -#: code:addons/account/static/src/xml/account_reconciliation.xml:308 +#: code:addons/account/static/src/xml/account_reconciliation.xml:214 +#: code:addons/account/static/src/xml/account_reconciliation.xml:305 +#: code:addons/account/static/src/xml/account_reconciliation.xml:322 #: model:ir.model.fields,field_description:account.field_account_bank_statement_line__amount #: model:ir.model.fields,field_description:account.field_account_move__amount #: model:ir.model.fields,field_description:account.field_account_partial_reconcile__amount @@ -1536,7 +1547,7 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:189 +#: code:addons/account/static/src/xml/account_reconciliation.xml:195 #, python-format msgid "Analytic Acc." msgstr "" @@ -1604,7 +1615,7 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:193 +#: code:addons/account/static/src/xml/account_reconciliation.xml:199 #, python-format msgid "Analytic Tags." msgstr "" @@ -1740,6 +1751,8 @@ msgstr "" #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement__message_attachment_count #: model:ir.model.fields,field_description:account.field_account_invoice__message_attachment_count +#: model:ir.model.fields,field_description:account.field_account_journal__message_attachment_count +#: model:ir.model.fields,field_description:account.field_account_move__message_attachment_count #: model:ir.model.fields,field_description:account.field_account_payment__message_attachment_count msgid "Attachment Count" msgstr "" @@ -1797,16 +1810,6 @@ msgstr "" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form -msgid "Autocomplete Vendor Bills (OCR + AI)" -msgstr "" - -#. module: account -#: model:ir.model.fields,field_description:account.field_res_config_settings__module_account_invoice_extract -msgid "Automate Bill Processing" -msgstr "" - -#. module: account -#: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Automate deferred revenues entries for multi-year contracts" msgstr "" @@ -1816,7 +1819,7 @@ msgid "Automated Entries" msgstr "" #. module: account -#: code:addons/account/models/company.py:430 +#: code:addons/account/models/company.py:452 #, python-format msgid "Automatic Balancing Line" msgstr "" @@ -1832,7 +1835,7 @@ msgid "Automatic Import" msgstr "" #. module: account -#: code:addons/account/models/account_move.py:390 +#: code:addons/account/models/account_move.py:417 #, python-format msgid "Automatic reversal of: %s" msgstr "" @@ -1848,7 +1851,7 @@ msgid "Average Price in Currency" msgstr "" #. module: account -#: code:addons/account/models/chart_template.py:419 +#: code:addons/account/models/chart_template.py:421 #, python-format msgid "BILL" msgstr "" @@ -1981,7 +1984,7 @@ msgid "Bank Statement" msgstr "" #. module: account -#: code:addons/account/models/account_bank_statement.py:602 +#: code:addons/account/models/account_bank_statement.py:533 #, python-format msgid "Bank Statement %s" msgstr "" @@ -2066,7 +2069,7 @@ msgid "Base Tax Received Account" msgstr "" #. module: account -#: code:addons/account/models/company.py:19 +#: code:addons/account/models/company.py:35 #, python-format msgid "Based on Customer" msgstr "" @@ -2078,7 +2081,7 @@ msgid "Based on Invoice" msgstr "" #. module: account -#: code:addons/account/models/company.py:19 +#: code:addons/account/models/company.py:35 #, python-format msgid "Based on Invoice Number" msgstr "" @@ -2119,6 +2122,12 @@ msgid "Bill Date" msgstr "" #. module: account +#: model:ir.model.fields,field_description:account.field_res_config_settings__module_account_invoice_extract +#: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form +msgid "Bill Digitalization" +msgstr "" + +#. module: account #: model_terms:ir.ui.view,arch_db:account.invoice_supplier_form msgid "Bill lines" msgstr "" @@ -2156,7 +2165,7 @@ msgid "Bills to Validate" msgstr "" #. module: account -#: code:addons/account/models/account_journal_dashboard.py:178 +#: code:addons/account/models/account_journal_dashboard.py:181 #, python-format msgid "Bills to pay" msgstr "" @@ -2223,8 +2232,8 @@ msgid "By unchecking the active field, you may hide an INCOTERM you will not use msgstr "" #. module: account -#: code:addons/account/models/chart_template.py:398 -#: code:addons/account/models/chart_template.py:422 +#: code:addons/account/models/chart_template.py:400 +#: code:addons/account/models/chart_template.py:424 #, python-format msgid "CABA" msgstr "" @@ -2304,52 +2313,46 @@ msgid "Cancelled Invoice" msgstr "" #. module: account -#: code:addons/account/wizard/account_invoice_refund.py:56 -#, python-format -msgid "Cannot create a credit note for the invoice which is already reconciled, invoice should be unreconciled first, then only you can add credit note for this invoice." -msgstr "" - -#. module: account #: code:addons/account/wizard/account_invoice_refund.py:54 #, python-format msgid "Cannot create credit note for the draft/cancelled invoice." msgstr "" #. module: account -#: code:addons/account/models/account_move.py:349 +#: code:addons/account/models/account_move.py:375 #, python-format msgid "Cannot create moves for different companies." msgstr "" #. module: account -#: code:addons/account/models/account_move.py:381 +#: code:addons/account/models/account_move.py:407 #, python-format msgid "Cannot create unbalanced journal entry." msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:772 +#: code:addons/account/models/account_invoice.py:822 #, python-format msgid "Cannot find a chart of accounts for this company, You should configure it. \n" "Please go to Account Configuration." msgstr "" #. module: account -#: code:addons/account/models/account.py:116 +#: code:addons/account/models/account.py:115 #: code:addons/account/models/chart_template.py:151 #, python-format msgid "Cannot generate an unused account code." msgstr "" #. module: account -#: code:addons/account/models/account.py:763 +#: code:addons/account/models/account.py:766 #, python-format msgid "Cannot generate an unused journal code. Please fill the 'Shortcode' field." msgstr "" #. module: account #: selection:account.journal,type:0 -#: code:addons/account/models/chart_template.py:349 +#: code:addons/account/models/chart_template.py:351 #, python-format msgid "Cash" msgstr "" @@ -2365,9 +2368,9 @@ msgid "Cash Basis Journal" msgstr "" #. module: account -#: code:addons/account/models/chart_template.py:422 +#: code:addons/account/models/chart_template.py:424 #, python-format -msgid "Cash Basis Tax Journal" +msgid "Cash Basis Taxes" msgstr "" #. module: account @@ -2496,7 +2499,7 @@ msgid "Chart Templates" msgstr "" #. module: account -#: code:addons/account/models/company.py:337 +#: code:addons/account/models/company.py:354 #: model:ir.actions.act_window,name:account.action_account_form #: model:ir.ui.menu,name:account.menu_action_account_form #: model_terms:ir.ui.view,arch_db:account.onboarding_chart_of_account_step @@ -2536,6 +2539,12 @@ msgid "Check if difference is zero." msgstr "" #. module: account +#: model_terms:ir.ui.view,arch_db:account.invoice_form +#: model_terms:ir.ui.view,arch_db:account.invoice_supplier_form +msgid "Check them" +msgstr "" + +#. module: account #: model:ir.model.fields,help:account.field_account_account__reconcile msgid "Check this box if this account allows invoices & payments matching of journal items." msgstr "" @@ -2580,7 +2589,7 @@ msgid "Children Taxes" msgstr "" #. module: account -#: code:addons/account/models/chart_template.py:358 +#: code:addons/account/models/chart_template.py:360 #, python-format msgid "Choose Accounting Template" msgstr "" @@ -2593,7 +2602,7 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:137 +#: code:addons/account/static/src/xml/account_reconciliation.xml:142 #, python-format msgid "Choose counterpart or Create Write-off" msgstr "" @@ -2638,14 +2647,14 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:343 +#: code:addons/account/static/src/xml/account_reconciliation.xml:357 #, python-format msgid "Close" msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:66 +#: code:addons/account/static/src/xml/account_reconciliation.xml:71 #, python-format msgid "Close statement" msgstr "" @@ -2707,7 +2716,7 @@ msgid "Commercial Entity" msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:534 +#: code:addons/account/models/account_invoice.py:568 #, python-format msgid "Commercial partner and vendor account owners must be identical." msgstr "" @@ -2872,11 +2881,6 @@ msgid "Confirm Invoices" msgstr "" #. module: account -#: model:ir.actions.server,name:account.action_account_confirm_payments -msgid "Confirm Payments" -msgstr "" - -#. module: account #: model:ir.model,name:account.model_account_invoice_confirm msgid "Confirm the selected invoices" msgstr "" @@ -2893,7 +2897,7 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:54 +#: code:addons/account/static/src/xml/account_reconciliation.xml:59 #, python-format msgid "Congrats, you're all done!" msgstr "" @@ -2948,7 +2952,7 @@ msgid "Cost of Revenue" msgstr "" #. module: account -#: code:addons/account/models/chart_template.py:204 +#: code:addons/account/models/chart_template.py:206 #, python-format msgid "Could not install new chart of account as there are already accounting entries existing." msgstr "" @@ -2992,7 +2996,7 @@ msgid "Create Or Link Option" msgstr "" #. module: account -#: code:addons/account/models/company.py:292 +#: code:addons/account/models/company.py:309 #, python-format msgid "Create a Bank Account" msgstr "" @@ -3074,13 +3078,13 @@ msgid "Create and post move" msgstr "" #. module: account -#: code:addons/account/models/account_journal_dashboard.py:281 +#: code:addons/account/models/account_journal_dashboard.py:309 #, python-format msgid "Create cash statement" msgstr "" #. module: account -#: code:addons/account/models/account_journal_dashboard.py:267 +#: code:addons/account/models/account_journal_dashboard.py:295 #, python-format msgid "Create invoice/bill" msgstr "" @@ -3092,7 +3096,7 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:174 +#: code:addons/account/static/src/xml/account_reconciliation.xml:180 #, python-format msgid "Create model" msgstr "" @@ -3248,8 +3252,8 @@ msgid "Credit Move" msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:498 -#: code:addons/account/models/account_invoice.py:1358 +#: code:addons/account/models/account_invoice.py:532 +#: code:addons/account/models/account_invoice.py:1412 #: model:ir.actions.act_window,name:account.action_account_invoice_refund #: model:ir.model,name:account.model_account_invoice_refund #: model_terms:ir.ui.view,arch_db:account.account_journal_dashboard_kanban_view @@ -3260,7 +3264,7 @@ msgid "Credit Note" msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:499 +#: code:addons/account/models/account_invoice.py:533 #, python-format msgid "Credit Note - %s" msgstr "" @@ -3340,8 +3344,8 @@ msgid "Currency Rate" msgstr "" #. module: account -#: code:addons/account/models/account_move.py:1419 -#: code:addons/account/models/account_move.py:1431 +#: code:addons/account/models/account_move.py:1529 +#: code:addons/account/models/account_move.py:1541 #, python-format msgid "Currency exchange rate difference" msgstr "" @@ -3379,7 +3383,7 @@ msgstr "" #. module: account #: selection:account.invoice,type:0 #: selection:account.invoice.report,type:0 -#: code:addons/account/models/account_payment.py:769 +#: code:addons/account/models/account_payment.py:791 #, python-format msgid "Customer Credit Note" msgstr "" @@ -3391,13 +3395,13 @@ msgid "Customer Invoice" msgstr "" #. module: account -#: code:addons/account/models/chart_template.py:418 +#: code:addons/account/models/chart_template.py:420 #, python-format msgid "Customer Invoices" msgstr "" #. module: account -#: code:addons/account/models/account_payment.py:767 +#: code:addons/account/models/account_payment.py:789 #: model_terms:ir.ui.view,arch_db:account.account_journal_dashboard_kanban_view #, python-format msgid "Customer Payment" @@ -3487,8 +3491,8 @@ msgstr "" #. module: account #. openerp-web #: selection:account.print.journal,sort_selection:0 -#: code:addons/account/static/src/xml/account_reconciliation.xml:289 -#: code:addons/account/static/src/xml/account_reconciliation.xml:304 +#: code:addons/account/static/src/xml/account_reconciliation.xml:303 +#: code:addons/account/static/src/xml/account_reconciliation.xml:318 #: model:ir.model.fields,field_description:account.field_account_bank_statement__date #: model:ir.model.fields,field_description:account.field_account_bank_statement_line__date #: model:ir.model.fields,field_description:account.field_account_invoice_send__date @@ -3543,7 +3547,7 @@ msgid "Day of the month on which the invoice must come to its term. If zero or n msgstr "" #. module: account -#: code:addons/account/models/company.py:51 +#: code:addons/account/models/company.py:67 #, python-format msgid "Dear Sir/Madam,\n" "\n" @@ -3629,11 +3633,6 @@ msgid "Default Sale Tax" msgstr "" #. module: account -#: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form -msgid "Default Sending Options" -msgstr "" - -#. module: account #: model:ir.model.fields,field_description:account.field_account_account__tax_ids #: model:ir.model.fields,field_description:account.field_account_account_template__tax_ids #: model_terms:ir.ui.view,arch_db:account.view_account_chart_template_form @@ -3642,6 +3641,16 @@ msgid "Default Taxes" msgstr "" #. module: account +#: model:ir.model.fields,field_description:account.field_res_config_settings__use_invoice_terms +msgid "Default Terms & Conditions" +msgstr "" + +#. module: account +#: model:ir.model.fields,field_description:account.field_res_company__invoice_terms +msgid "Default Terms and Conditions" +msgstr "" + +#. module: account #: model:ir.model.fields,field_description:account.field_res_company__incoterm_id #: model:ir.model.fields,field_description:account.field_res_config_settings__incoterm_id msgid "Default incoterm" @@ -3743,7 +3752,7 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:307 +#: code:addons/account/static/src/xml/account_reconciliation.xml:321 #: model:ir.model.fields,field_description:account.field_account_account_type__note #: model:ir.model.fields,field_description:account.field_account_invoice_line__name #: model_terms:ir.ui.view,arch_db:account.view_account_payment_search @@ -3798,6 +3807,11 @@ msgid "Digest" msgstr "" #. module: account +#: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form +msgid "Digitalize your scanned or PDF vendor bills with OCR and Artificial Intelligence" +msgstr "" + +#. module: account #: model:ir.model.fields,help:account.field_res_config_settings__group_products_in_bills msgid "Disable this option to use a simplified versions of vendor bills, where products are hidden." msgstr "" @@ -3940,7 +3954,7 @@ msgid "Draft Credit Note" msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:496 +#: code:addons/account/models/account_invoice.py:530 #: model_terms:ir.ui.view,arch_db:account.invoice_form #: model_terms:ir.ui.view,arch_db:account.portal_my_invoices #: model_terms:ir.ui.view,arch_db:account.report_invoice_document @@ -3954,6 +3968,12 @@ msgid "Draft Invoices" msgstr "" #. module: account +#: code:addons/account/models/account_payment.py:403 +#, python-format +msgid "Draft Payment" +msgstr "" + +#. module: account #: model:ir.actions.act_window,name:account.action_bank_statement_draft_tree msgid "Draft statements" msgstr "" @@ -3971,7 +3991,7 @@ msgstr "" #. module: account #. openerp-web #: code:addons/account/controllers/portal.py:39 -#: code:addons/account/static/src/xml/account_reconciliation.xml:290 +#: code:addons/account/static/src/xml/account_reconciliation.xml:304 #: model:ir.model.fields,field_description:account.field_account_invoice__date_due #: model:ir.model.fields,field_description:account.field_account_invoice_report__date_due #: model_terms:ir.ui.view,arch_db:account.portal_my_invoices @@ -4002,7 +4022,12 @@ msgid "Due the" msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:1285 +#: model_terms:ir.ui.view,arch_db:account.view_move_form +msgid "Duplicate" +msgstr "" + +#. module: account +#: code:addons/account/models/account_invoice.py:1339 #, python-format msgid "Duplicated vendor reference detected. You probably encoded twice the same vendor bill/credit note." msgstr "" @@ -4023,15 +4048,20 @@ msgid "EX WORKS" msgstr "" #. module: account -#: code:addons/account/models/chart_template.py:396 -#: code:addons/account/models/chart_template.py:411 -#: code:addons/account/models/chart_template.py:421 +#: code:addons/account/models/chart_template.py:398 +#: code:addons/account/models/chart_template.py:413 +#: code:addons/account/models/chart_template.py:423 #, python-format msgid "EXCH" msgstr "" #. module: account -#: code:addons/account/models/account_move.py:965 +#: model:ir.model.fields,field_description:account.field_account_invoice__edition_mode_available +msgid "Edition Mode Available" +msgstr "" + +#. module: account +#: code:addons/account/models/account_move.py:1012 #, python-format msgid "Either pass both debit and credit or none." msgstr "" @@ -4100,7 +4130,7 @@ msgid "Entries Sorted by" msgstr "" #. module: account -#: code:addons/account/models/account_move.py:903 +#: code:addons/account/models/account_move.py:942 #, python-format msgid "Entries are not from the same account." msgstr "" @@ -4134,13 +4164,13 @@ msgid "Equity" msgstr "" #. module: account -#: code:addons/account/models/res_config_settings.py:146 +#: code:addons/account/models/res_config_settings.py:152 #, python-format msgid "Error!" msgstr "" #. module: account -#: code:addons/account/models/chart_template.py:421 +#: code:addons/account/models/chart_template.py:423 #, python-format msgid "Exchange Difference" msgstr "" @@ -4192,8 +4222,8 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:320 -#: code:addons/account/static/src/xml/account_reconciliation.xml:335 +#: code:addons/account/static/src/xml/account_reconciliation.xml:334 +#: code:addons/account/static/src/xml/account_reconciliation.xml:349 #, python-format msgid "External link" msgstr "" @@ -4246,7 +4276,7 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:147 +#: code:addons/account/static/src/xml/account_reconciliation.xml:152 #, python-format msgid "Filter..." msgstr "" @@ -4309,7 +4339,7 @@ msgid "Fiscal Positions" msgstr "" #. module: account -#: code:addons/account/models/company.py:310 +#: code:addons/account/models/company.py:327 #: model:ir.model,name:account.model_account_fiscal_year #: model_terms:ir.ui.view,arch_db:account.onboarding_fiscal_year_step #, python-format @@ -4385,6 +4415,8 @@ msgstr "" #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement__message_follower_ids #: model:ir.model.fields,field_description:account.field_account_invoice__message_follower_ids +#: model:ir.model.fields,field_description:account.field_account_journal__message_follower_ids +#: model:ir.model.fields,field_description:account.field_account_move__message_follower_ids #: model:ir.model.fields,field_description:account.field_account_payment__message_follower_ids msgid "Followers" msgstr "" @@ -4392,6 +4424,8 @@ msgstr "" #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement__message_channel_ids #: model:ir.model.fields,field_description:account.field_account_invoice__message_channel_ids +#: model:ir.model.fields,field_description:account.field_account_journal__message_channel_ids +#: model:ir.model.fields,field_description:account.field_account_move__message_channel_ids #: model:ir.model.fields,field_description:account.field_account_payment__message_channel_ids msgid "Followers (Channels)" msgstr "" @@ -4399,6 +4433,8 @@ msgstr "" #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement__message_partner_ids #: model:ir.model.fields,field_description:account.field_account_invoice__message_partner_ids +#: model:ir.model.fields,field_description:account.field_account_journal__message_partner_ids +#: model:ir.model.fields,field_description:account.field_account_move__message_partner_ids #: model:ir.model.fields,field_description:account.field_account_payment__message_partner_ids msgid "Followers (Partners)" msgstr "" @@ -4446,7 +4482,7 @@ msgid "Forces all moves for this account to have this secondary currency." msgstr "" #. module: account -#: code:addons/account/report/account_aged_partner_balance.py:231 +#: code:addons/account/report/account_aged_partner_balance.py:233 #: code:addons/account/report/account_journal.py:101 #, python-format msgid "Form content is missing, this report cannot be printed." @@ -4478,7 +4514,7 @@ msgid "From this report, you can have an overview of the amount invoiced to your msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:387 +#: code:addons/account/models/account_invoice.py:421 #, python-format msgid "From: " msgstr "" @@ -4549,20 +4585,20 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:63 +#: code:addons/account/static/src/xml/account_reconciliation.xml:68 #, python-format msgid "Go to bank statement(s)" msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:773 -#: code:addons/account/models/company.py:544 +#: code:addons/account/models/account_invoice.py:823 +#: code:addons/account/models/company.py:566 #, python-format msgid "Go to the configuration panel" msgstr "" #. module: account -#: code:addons/account/models/company.py:482 +#: code:addons/account/models/company.py:504 #, python-format msgid "Go to the journal configuration" msgstr "" @@ -4574,7 +4610,7 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:48 +#: code:addons/account/static/src/xml/account_reconciliation.xml:53 #, python-format msgid "Good Job!" msgstr "" @@ -4742,13 +4778,13 @@ msgid "ID" msgstr "" #. module: account -#: code:addons/account/models/chart_template.py:418 +#: code:addons/account/models/chart_template.py:420 #, python-format msgid "INV" msgstr "" #. module: account -#: code:addons/account/models/account_bank_statement.py:325 +#: code:addons/account/models/account_bank_statement.py:336 #, python-format msgid "If \"Amount Currency\" is specified, then \"Amount\" must be as well." msgstr "" @@ -4756,6 +4792,8 @@ msgstr "" #. module: account #: model:ir.model.fields,help:account.field_account_bank_statement__message_unread #: model:ir.model.fields,help:account.field_account_invoice__message_unread +#: model:ir.model.fields,help:account.field_account_journal__message_unread +#: model:ir.model.fields,help:account.field_account_move__message_unread #: model:ir.model.fields,help:account.field_account_payment__message_unread msgid "If checked new messages require your attention." msgstr "" @@ -4763,6 +4801,8 @@ msgstr "" #. module: account #: model:ir.model.fields,help:account.field_account_bank_statement__message_needaction #: model:ir.model.fields,help:account.field_account_invoice__message_needaction +#: model:ir.model.fields,help:account.field_account_journal__message_needaction +#: model:ir.model.fields,help:account.field_account_move__message_needaction #: model:ir.model.fields,help:account.field_account_payment__message_needaction msgid "If checked, new messages require your attention." msgstr "" @@ -4770,6 +4810,8 @@ msgstr "" #. module: account #: model:ir.model.fields,help:account.field_account_bank_statement__message_has_error #: model:ir.model.fields,help:account.field_account_invoice__message_has_error +#: model:ir.model.fields,help:account.field_account_journal__message_has_error +#: model:ir.model.fields,help:account.field_account_move__message_has_error #: model:ir.model.fields,help:account.field_account_payment__message_has_error msgid "If checked, some messages have a delivery error." msgstr "" @@ -4820,6 +4862,11 @@ msgid "If this box is checked, the system will try to group the accounting lines msgstr "" #. module: account +#: model:ir.model.fields,help:account.field_account_move__to_check +msgid "If this checkbox is ticked, it means that the user was not sure of all the related informations at the time of the creation of the move and that the move needs to be checked again." +msgstr "" + +#. module: account #: model:ir.model.fields,help:account.field_account_move__auto_reverse msgid "If this checkbox is ticked, this entry will be automatically reversed at the reversal date you defined." msgstr "" @@ -4860,11 +4907,6 @@ msgid "If you're selling digital goods to customers in the EU, you must charge V msgstr "" #. module: account -#: model:ir.model.fields,help:account.field_account_invoice_line__product_image -msgid "Image of the product variant (Big-sized image of product template if false). It is automatically resized as a 1024x1024px image, with aspect ratio preserved." -msgstr "" - -#. module: account #: model:account.payment.term,name:account.account_payment_term_immediate msgid "Immediate Payment" msgstr "" @@ -4936,7 +4978,7 @@ msgid "In Payment" msgstr "" #. module: account -#: code:addons/account/models/account_bank_statement.py:355 +#: code:addons/account/models/account_bank_statement.py:366 #, python-format msgid "In order to delete a bank statement line, you must first cancel it to delete related journal items." msgstr "" @@ -4996,13 +5038,14 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/js/reconciliation/reconciliation_model.js:759 +#: code:addons/account/static/src/js/reconciliation/reconciliation_model.js:498 +#: code:addons/account/static/src/js/reconciliation/reconciliation_model.js:629 #, python-format msgid "Incorrect Operation" msgstr "" #. module: account -#: code:addons/account/wizard/setup_wizards.py:39 +#: code:addons/account/wizard/setup_wizards.py:38 #, python-format msgid "Incorrect fiscal year date: day is out of range for month. Month: %s; Day: %s" msgstr "" @@ -5062,6 +5105,11 @@ msgstr "" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form +msgid "Insert your terms & conditions here..." +msgstr "" + +#. module: account +#: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Install More Packages" msgstr "" @@ -5132,13 +5180,13 @@ msgid "Invalid \"Zip Range\", please configure it properly." msgstr "" #. module: account -#: code:addons/account/models/company.py:106 +#: code:addons/account/models/company.py:123 #, python-format msgid "Invalid fiscal year last day" msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:1358 +#: code:addons/account/models/account_invoice.py:1410 #: model:ir.model,name:account.model_account_invoice #: model:ir.model.fields,field_description:account.field_account_invoice_report__invoice_id #: model:ir.model.fields,field_description:account.field_account_invoice_tax__invoice_id @@ -5161,7 +5209,7 @@ msgid "Invoice #" msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:497 +#: code:addons/account/models/account_invoice.py:531 #, python-format msgid "Invoice - %s" msgstr "" @@ -5240,25 +5288,25 @@ msgid "Invoice for which this invoice is the credit note" msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:884 +#: code:addons/account/models/account_invoice.py:934 #, python-format msgid "Invoice must be cancelled in order to reset it to draft." msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:908 +#: code:addons/account/models/account_invoice.py:958 #, python-format msgid "Invoice must be in draft state in order to validate it." msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:935 +#: code:addons/account/models/account_invoice.py:985 #, python-format msgid "Invoice must be paid in order to set it to register payment." msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:922 +#: code:addons/account/models/account_invoice.py:972 #, python-format msgid "Invoice must be validated in order to set it to register payment." msgstr "" @@ -5333,7 +5381,7 @@ msgid "Invoices Statistics" msgstr "" #. module: account -#: code:addons/account/models/account_journal_dashboard.py:178 +#: code:addons/account/models/account_journal_dashboard.py:181 #, python-format msgid "Invoices owed to you" msgstr "" @@ -5370,6 +5418,8 @@ msgstr "" #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement__message_is_follower #: model:ir.model.fields,field_description:account.field_account_invoice__message_is_follower +#: model:ir.model.fields,field_description:account.field_account_journal__message_is_follower +#: model:ir.model.fields,field_description:account.field_account_move__message_is_follower #: model:ir.model.fields,field_description:account.field_account_payment__message_is_follower msgid "Is Follower" msgstr "" @@ -5439,13 +5489,13 @@ msgid "It indicates that the invoice has been sent." msgstr "" #. module: account -#: code:addons/account/models/account_move.py:963 +#: code:addons/account/models/account_move.py:1010 #, python-format msgid "It is mandatory to specify an account and a journal to create a write-off." msgstr "" #. module: account -#: code:addons/account/models/account_payment.py:585 +#: code:addons/account/models/account_payment.py:602 #, python-format msgid "It is not allowed to delete a payment that already created a journal entry since it would create a gap in the numbering. You should create the journal entry again and cancel it thanks to a regular revert." msgstr "" @@ -5462,8 +5512,8 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:200 -#: code:addons/account/static/src/xml/account_reconciliation.xml:285 +#: code:addons/account/static/src/xml/account_reconciliation.xml:206 +#: code:addons/account/static/src/xml/account_reconciliation.xml:299 #: model:ir.model,name:account.model_account_journal #: model:ir.model.fields,field_description:account.field_account_bank_statement__journal_id #: model:ir.model.fields,field_description:account.field_account_bank_statement_line__journal_id @@ -5496,6 +5546,7 @@ msgstr "" #: model:ir.ui.menu,name:account.menu_action_move_journal_line_form #: model_terms:ir.ui.view,arch_db:account.account_journal_dashboard_kanban_view #: model_terms:ir.ui.view,arch_db:account.view_account_journal_form +#: model_terms:ir.ui.view,arch_db:account.view_account_reconcile_model_form #: model_terms:ir.ui.view,arch_db:account.view_bank_statement_form #: model_terms:ir.ui.view,arch_db:account.view_move_tree #, python-format @@ -5545,8 +5596,8 @@ msgid "Journal Item Label" msgstr "" #. module: account -#: code:addons/account/models/account_payment.py:529 -#: code:addons/account/models/reconciliation_widget.py:196 +#: code:addons/account/models/account_payment.py:546 +#: code:addons/account/models/reconciliation_widget.py:221 #: model:ir.actions.act_window,name:account.act_account_journal_2_account_move_line #: model:ir.actions.act_window,name:account.act_account_move_to_account_move_line_open #: model:ir.actions.act_window,name:account.action_account_moves_all_a @@ -5579,7 +5630,7 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/js/reconciliation/reconciliation_action.js:351 +#: code:addons/account/static/src/js/reconciliation/reconciliation_action.js:364 #: model:ir.actions.client,name:account.action_manual_reconcile #, python-format msgid "Journal Items to Reconcile" @@ -5704,9 +5755,9 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/js/reconciliation/reconciliation_renderer.js:547 -#: code:addons/account/static/src/xml/account_reconciliation.xml:204 -#: code:addons/account/static/src/xml/account_reconciliation.xml:286 +#: code:addons/account/static/src/js/reconciliation/reconciliation_renderer.js:557 +#: code:addons/account/static/src/xml/account_reconciliation.xml:210 +#: code:addons/account/static/src/xml/account_reconciliation.xml:300 #: model:ir.model.fields,field_description:account.field_account_bank_statement_line__name #: model:ir.model.fields,field_description:account.field_account_move_line__name #: model:ir.model.fields,field_description:account.field_account_reconcile_model__match_label @@ -5794,7 +5845,7 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:125 +#: code:addons/account/static/src/xml/account_reconciliation.xml:130 #, python-format msgid "Last Reconciliation:" msgstr "" @@ -5953,7 +6004,7 @@ msgid "Legal mentions that have to be printed on the invoices." msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:219 +#: code:addons/account/models/account_invoice.py:252 #, python-format msgid "Less Payment" msgstr "" @@ -5964,6 +6015,11 @@ msgid "Let your customers pay their invoices online" msgstr "" #. module: account +#: model:ir.model.fields,field_description:account.field_account_invoice_send__letter_ids +msgid "Letter" +msgstr "" + +#. module: account #: selection:account.account.type,internal_group:0 #: model_terms:ir.ui.view,arch_db:account.view_account_search msgid "Liability" @@ -6013,14 +6069,14 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:33 +#: code:addons/account/static/src/xml/account_reconciliation.xml:37 #, python-format msgid "Load more" msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:154 +#: code:addons/account/static/src/xml/account_reconciliation.xml:160 #, python-format msgid "Load more... (" msgstr "" @@ -6063,7 +6119,7 @@ msgid "Loss Exchange Rate Account" msgstr "" #. module: account -#: code:addons/account/models/chart_template.py:420 +#: code:addons/account/models/chart_template.py:422 #, python-format msgid "MISC" msgstr "" @@ -6081,6 +6137,8 @@ msgstr "" #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement__message_main_attachment_id #: model:ir.model.fields,field_description:account.field_account_invoice__message_main_attachment_id +#: model:ir.model.fields,field_description:account.field_account_journal__message_main_attachment_id +#: model:ir.model.fields,field_description:account.field_account_move__message_main_attachment_id #: model:ir.model.fields,field_description:account.field_account_payment__message_main_attachment_id msgid "Main Attachment" msgstr "" @@ -6144,7 +6202,7 @@ msgstr "" #: selection:account.reconcile.model,rule_type:0 #: selection:account.reconcile.model.template,rule_type:0 #: code:addons/account/models/account_reconcile_model.py:19 -#: code:addons/account/models/chart_template.py:981 +#: code:addons/account/models/chart_template.py:983 #, python-format msgid "Manually create a write-off on clicked button." msgstr "" @@ -6191,7 +6249,7 @@ msgstr "" #: selection:account.reconcile.model,rule_type:0 #: selection:account.reconcile.model.template,rule_type:0 #: code:addons/account/models/account_reconcile_model.py:21 -#: code:addons/account/models/chart_template.py:983 +#: code:addons/account/models/chart_template.py:985 #, python-format msgid "Match existing invoices/bills." msgstr "" @@ -6255,6 +6313,8 @@ msgstr "" #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement__message_has_error #: model:ir.model.fields,field_description:account.field_account_invoice__message_has_error +#: model:ir.model.fields,field_description:account.field_account_journal__message_has_error +#: model:ir.model.fields,field_description:account.field_account_move__message_has_error #: model:ir.model.fields,field_description:account.field_account_payment__message_has_error msgid "Message Delivery error" msgstr "" @@ -6288,6 +6348,8 @@ msgstr "" #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement__message_ids #: model:ir.model.fields,field_description:account.field_account_invoice__message_ids +#: model:ir.model.fields,field_description:account.field_account_journal__message_ids +#: model:ir.model.fields,field_description:account.field_account_move__message_ids #: model:ir.model.fields,field_description:account.field_account_payment__message_ids msgid "Messages" msgstr "" @@ -6299,7 +6361,7 @@ msgid "Miscellaneous" msgstr "" #. module: account -#: code:addons/account/models/chart_template.py:420 +#: code:addons/account/models/chart_template.py:422 #: model_terms:ir.ui.view,arch_db:account.view_account_move_filter #, python-format msgid "Miscellaneous Operations" @@ -6322,7 +6384,7 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:175 +#: code:addons/account/static/src/xml/account_reconciliation.xml:181 #, python-format msgid "Modify models" msgstr "" @@ -6365,7 +6427,7 @@ msgid "Move Reconciled" msgstr "" #. module: account -#: code:addons/account/models/account_move.py:1134 +#: code:addons/account/models/account_move.py:1236 #, python-format msgid "Move name (id): %s (%s)" msgstr "" @@ -6447,7 +6509,7 @@ msgstr "" #. module: account #. openerp-web #: selection:account.bank.statement,state:0 -#: code:addons/account/static/src/xml/account_reconciliation.xml:253 +#: code:addons/account/static/src/xml/account_reconciliation.xml:267 #, python-format msgid "New" msgstr "" @@ -6463,25 +6525,31 @@ msgid "New Transactions" msgstr "" #. module: account -#: code:addons/account/models/account_move.py:1111 +#: code:addons/account/models/account_move.py:1213 #, python-format msgid "New expected payment date: " msgstr "" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice__activity_date_deadline +#: model:ir.model.fields,field_description:account.field_account_journal__activity_date_deadline +#: model:ir.model.fields,field_description:account.field_account_move__activity_date_deadline #: model:ir.model.fields,field_description:account.field_account_payment__activity_date_deadline msgid "Next Activity Deadline" msgstr "" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice__activity_summary +#: model:ir.model.fields,field_description:account.field_account_journal__activity_summary +#: model:ir.model.fields,field_description:account.field_account_move__activity_summary #: model:ir.model.fields,field_description:account.field_account_payment__activity_summary msgid "Next Activity Summary" msgstr "" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice__activity_type_id +#: model:ir.model.fields,field_description:account.field_account_journal__activity_type_id +#: model:ir.model.fields,field_description:account.field_account_move__activity_type_id #: model:ir.model.fields,field_description:account.field_account_payment__activity_type_id msgid "Next Activity Type" msgstr "" @@ -6510,18 +6578,24 @@ msgstr "" #. module: account #. openerp-web #: code:addons/account/static/src/js/reconciliation/reconciliation_renderer.js:68 -#: code:addons/account/static/src/js/reconciliation/reconciliation_renderer.js:143 +#: code:addons/account/static/src/js/reconciliation/reconciliation_renderer.js:145 #, python-format msgid "No Title" msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:912 +#: code:addons/account/models/account_invoice.py:962 #, python-format msgid "No account was found to create the invoice, be sure you have installed a chart of account." msgstr "" #. module: account +#: code:addons/account/models/account_reconcile_model.py:119 +#, python-format +msgid "No move from this reconciliation model" +msgstr "" + +#. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_send__no_auto_thread msgid "No threading for answers" msgstr "" @@ -6578,7 +6652,7 @@ msgstr "" #. module: account #. openerp-web #: selection:account.invoice.line,display_type:0 -#: code:addons/account/static/src/xml/account_reconciliation.xml:310 +#: code:addons/account/static/src/xml/account_reconciliation.xml:324 #: model:ir.model.fields,field_description:account.field_account_account_template__note #: model_terms:ir.ui.view,arch_db:account.view_invoice_line_form #, python-format @@ -6606,7 +6680,7 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:37 +#: code:addons/account/static/src/xml/account_reconciliation.xml:41 #, python-format msgid "Nothing to do!" msgstr "" @@ -6646,6 +6720,8 @@ msgstr "" #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement__message_needaction_counter #: model:ir.model.fields,field_description:account.field_account_invoice__message_needaction_counter +#: model:ir.model.fields,field_description:account.field_account_journal__message_needaction_counter +#: model:ir.model.fields,field_description:account.field_account_move__message_needaction_counter #: model:ir.model.fields,field_description:account.field_account_payment__message_needaction_counter msgid "Number of Actions" msgstr "" @@ -6661,8 +6737,16 @@ msgid "Number of Days" msgstr "" #. module: account +#: model:ir.model.fields,field_description:account.field_account_reconcile_model__number_entries +#: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__number_entries +msgid "Number of entries related to this model" +msgstr "" + +#. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement__message_has_error_counter #: model:ir.model.fields,field_description:account.field_account_invoice__message_has_error_counter +#: model:ir.model.fields,field_description:account.field_account_journal__message_has_error_counter +#: model:ir.model.fields,field_description:account.field_account_move__message_has_error_counter #: model:ir.model.fields,field_description:account.field_account_payment__message_has_error_counter msgid "Number of error" msgstr "" @@ -6670,6 +6754,8 @@ msgstr "" #. module: account #: model:ir.model.fields,help:account.field_account_bank_statement__message_needaction_counter #: model:ir.model.fields,help:account.field_account_invoice__message_needaction_counter +#: model:ir.model.fields,help:account.field_account_journal__message_needaction_counter +#: model:ir.model.fields,help:account.field_account_move__message_needaction_counter #: model:ir.model.fields,help:account.field_account_payment__message_needaction_counter msgid "Number of messages which requires an action" msgstr "" @@ -6677,6 +6763,8 @@ msgstr "" #. module: account #: model:ir.model.fields,help:account.field_account_bank_statement__message_has_error_counter #: model:ir.model.fields,help:account.field_account_invoice__message_has_error_counter +#: model:ir.model.fields,help:account.field_account_journal__message_has_error_counter +#: model:ir.model.fields,help:account.field_account_move__message_has_error_counter #: model:ir.model.fields,help:account.field_account_payment__message_has_error_counter msgid "Number of messages with delivery error" msgstr "" @@ -6684,6 +6772,8 @@ msgstr "" #. module: account #: model:ir.model.fields,help:account.field_account_bank_statement__message_unread_counter #: model:ir.model.fields,help:account.field_account_invoice__message_unread_counter +#: model:ir.model.fields,help:account.field_account_journal__message_unread_counter +#: model:ir.model.fields,help:account.field_account_move__message_unread_counter #: model:ir.model.fields,help:account.field_account_payment__message_unread_counter msgid "Number of unread messages" msgstr "" @@ -6734,13 +6824,13 @@ msgid "Once installed, set 'Bank Feeds' to 'File Import' in bank account setting msgstr "" #. module: account -#: code:addons/account/models/account_payment.py:599 +#: code:addons/account/models/account_payment.py:616 #, python-format msgid "Only a draft payment can be posted." msgstr "" #. module: account -#: code:addons/account/models/chart_template.py:197 +#: code:addons/account/models/chart_template.py:199 #, python-format msgid "Only administrators can load a charf of accounts" msgstr "" @@ -6758,15 +6848,15 @@ msgid "Open" msgstr "" #. module: account -#: code:addons/account/models/account_reconcile_model.py:276 +#: code:addons/account/models/account_reconcile_model.py:296 #, python-format msgid "Open Balance" msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/js/reconciliation/reconciliation_model.js:723 -#: code:addons/account/static/src/xml/account_reconciliation.xml:137 +#: code:addons/account/static/src/js/reconciliation/reconciliation_model.js:749 +#: code:addons/account/static/src/xml/account_reconciliation.xml:142 #, python-format msgid "Open balance" msgstr "" @@ -6788,7 +6878,7 @@ msgid "Opening Journal" msgstr "" #. module: account -#: code:addons/account/models/company.py:365 +#: code:addons/account/models/company.py:382 #: model:ir.model.fields,field_description:account.field_res_company__account_opening_move_id #, python-format msgid "Opening Journal Entry" @@ -6805,7 +6895,7 @@ msgid "Opening Unit Numbers" msgstr "" #. module: account -#: code:addons/account/models/account.py:169 +#: code:addons/account/models/account.py:168 #, python-format msgid "Opening balance" msgstr "" @@ -6836,7 +6926,7 @@ msgid "Operation Templates" msgstr "" #. module: account -#: code:addons/account/models/account_bank_statement.py:666 +#: code:addons/account/models/account_bank_statement.py:710 #, python-format msgid "Operation not allowed. Since your statement line already received a number (%s), you cannot reconcile it entirely with existing journal entries otherwise it would make a gap in the numbering. You should book an entry and make a regular revert of it in case you want to cancel it." msgstr "" @@ -6866,19 +6956,19 @@ msgid "Options" msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:711 +#: code:addons/account/models/account_invoice.py:761 #, python-format msgid "Or set an <a data-oe-id=%s data-oe-model=\"account.journal\" href=#id=%s&model=account.journal>email alias</a> to allow draft vendor bills to be created upon reception of an email." msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:707 +#: code:addons/account/models/account_invoice.py:757 #, python-format msgid "Or share the email %s to your vendors: bills will be created automatically upon mail reception." msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:709 +#: code:addons/account/models/account_invoice.py:759 #, python-format msgid "Or share the emails %s to your vendors: bills will be created automatically upon mail reception." msgstr "" @@ -6927,19 +7017,21 @@ msgid "Outstanding Credits Debits Widget" msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:133 +#: code:addons/account/models/account_invoice.py:161 #, python-format msgid "Outstanding credits" msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:136 +#: code:addons/account/models/account_invoice.py:164 #, python-format msgid "Outstanding debits" msgstr "" #. module: account #: selection:account.invoice,activity_state:0 +#: selection:account.journal,activity_state:0 +#: selection:account.move,activity_state:0 #: selection:account.payment,activity_state:0 #: model_terms:ir.ui.view,arch_db:account.view_account_invoice_filter msgid "Overdue" @@ -6974,7 +7066,7 @@ msgid "Paid" msgstr "" #. module: account -#: code:addons/account/models/account_payment.py:545 +#: code:addons/account/models/account_payment.py:562 #, python-format msgid "Paid Invoices" msgstr "" @@ -7024,8 +7116,8 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:288 -#: code:addons/account/static/src/xml/account_reconciliation.xml:305 +#: code:addons/account/static/src/xml/account_reconciliation.xml:302 +#: code:addons/account/static/src/xml/account_reconciliation.xml:319 #: model:ir.model.fields,field_description:account.field_account_abstract_payment__partner_id #: model:ir.model.fields,field_description:account.field_account_bank_statement_line__partner_id #: model:ir.model.fields,field_description:account.field_account_invoice__partner_id @@ -7301,7 +7393,7 @@ msgid "Payment that created this entry" msgstr "" #. module: account -#: code:addons/account/models/account_payment.py:370 +#: code:addons/account/models/account_payment.py:381 #: model:ir.actions.act_window,name:account.action_account_payments #: model:ir.actions.act_window,name:account.action_account_payments_payable #: model:ir.model,name:account.model_account_payment @@ -7331,6 +7423,12 @@ msgid "Payments are used to register liquidity movements. You can process those msgstr "" #. module: account +#: code:addons/account/models/account_payment.py:448 +#, python-format +msgid "Payments without a customer can't be matched" +msgstr "" + +#. module: account #: model:ir.actions.act_window,name:account.action_invoice_tree_pending_invoice msgid "Pending Invoice" msgstr "" @@ -7370,7 +7468,7 @@ msgid "Percentage of balance" msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:2018 +#: code:addons/account/models/account_invoice.py:2094 #, python-format msgid "Percentages on the Payment Terms lines must be between 0 and 100." msgstr "" @@ -7387,12 +7485,14 @@ msgstr "" #. module: account #: selection:account.invoice,activity_state:0 +#: selection:account.journal,activity_state:0 +#: selection:account.move,activity_state:0 #: selection:account.payment,activity_state:0 msgid "Planned" msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:1187 +#: code:addons/account/models/account_invoice.py:1241 #, python-format msgid "Please add at least one invoice line." msgstr "" @@ -7410,26 +7510,26 @@ msgid "Please check that the field 'Transfer Account' is set on the company." msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:1309 +#: code:addons/account/models/account_invoice.py:1363 #, python-format msgid "Please define a sequence for the credit notes" msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:1314 -#: code:addons/account/models/account_move.py:297 +#: code:addons/account/models/account_invoice.py:1368 +#: code:addons/account/models/account_move.py:317 #, python-format msgid "Please define a sequence on the journal." msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:1185 +#: code:addons/account/models/account_invoice.py:1239 #, python-format msgid "Please define sequence on the journal related to this invoice." msgstr "" #. module: account -#: code:addons/account/models/company.py:357 +#: code:addons/account/models/company.py:374 #, python-format msgid "Please install a chart of accounts or create a miscellaneous journal before proceeding." msgstr "" @@ -7472,6 +7572,11 @@ msgid "Post Journal Entries" msgstr "" #. module: account +#: model:ir.actions.server,name:account.action_account_confirm_payments +msgid "Post Payments" +msgstr "" + +#. module: account #: selection:account.move,state:0 #: selection:account.payment,state:0 #: model_terms:ir.ui.view,arch_db:account.view_account_move_filter @@ -7584,11 +7689,6 @@ msgid "Product Category" msgstr "" #. module: account -#: model:ir.model.fields,field_description:account.field_account_invoice_line__product_image -msgid "Product Image" -msgstr "" - -#. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_report__product_qty msgid "Product Quantity" msgstr "" @@ -7620,19 +7720,19 @@ msgid "Profit Account" msgstr "" #. module: account -#: code:addons/account/models/account_reconcile_model.py:380 +#: code:addons/account/models/account_reconcile_model.py:400 #, python-format msgid "Programmation Error: Can't call _get_invoice_matching_query() for different rules than 'invoice_matching'" msgstr "" #. module: account -#: code:addons/account/models/account_reconcile_model.py:505 +#: code:addons/account/models/account_reconcile_model.py:525 #, python-format msgid "Programmation Error: Can't call _get_wo_suggestion_query() for different rules than 'writeoff_suggestion'" msgstr "" #. module: account -#: code:addons/account/models/account_payment.py:282 +#: code:addons/account/models/account_payment.py:288 #, python-format msgid "Programming error: wizard action executed without active_ids in context." msgstr "" @@ -7766,9 +7866,9 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:79 -#: code:addons/account/static/src/xml/account_reconciliation.xml:111 -#: code:addons/account/static/src/xml/account_reconciliation.xml:112 +#: code:addons/account/static/src/xml/account_reconciliation.xml:84 +#: code:addons/account/static/src/xml/account_reconciliation.xml:116 +#: code:addons/account/static/src/xml/account_reconciliation.xml:117 #: model_terms:ir.ui.view,arch_db:account.account_journal_dashboard_kanban_view #: model_terms:ir.ui.view,arch_db:account.view_bank_statement_form #, python-format @@ -7809,6 +7909,12 @@ msgid "Reconciliation" msgstr "" #. module: account +#: model:ir.model.fields,field_description:account.field_account_move__reconcile_model_id +#: model:ir.model.fields,field_description:account.field_account_move_line__reconcile_model_id +msgid "Reconciliation Model" +msgstr "" + +#. module: account #: model:ir.actions.act_window,name:account.action_account_reconcile_model #: model:ir.ui.menu,name:account.action_account_reconcile_model_menu #: model_terms:ir.ui.view,arch_db:account.account_journal_dashboard_kanban_view @@ -7822,7 +7928,6 @@ msgstr "" #. module: account #: model:ir.actions.client,name:account.action_bank_reconcile -#: model:ir.actions.client,name:account.action_bank_reconcile_bank_statements msgid "Reconciliation on Bank Statements" msgstr "" @@ -7837,14 +7942,14 @@ msgid "Record transactions in foreign currencies" msgstr "" #. module: account -#: code:addons/account/models/account.py:937 +#: code:addons/account/models/account.py:942 #, python-format msgid "Recursion found for tax '%s'." msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:287 +#: code:addons/account/static/src/xml/account_reconciliation.xml:301 #, python-format msgid "Ref" msgstr "" @@ -8003,7 +8108,7 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:292 +#: code:addons/account/static/src/xml/account_reconciliation.xml:306 #, python-format msgid "Residual" msgstr "" @@ -8031,6 +8136,8 @@ msgstr "" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice__activity_user_id +#: model:ir.model.fields,field_description:account.field_account_journal__activity_user_id +#: model:ir.model.fields,field_description:account.field_account_move__activity_user_id #: model:ir.model.fields,field_description:account.field_account_payment__activity_user_id msgid "Responsible User" msgstr "" @@ -8079,7 +8186,7 @@ msgid "Reversal date" msgstr "" #. module: account -#: code:addons/account/models/account_move.py:390 +#: code:addons/account/models/account_move.py:417 #, python-format msgid "Reversal of: %s" msgstr "" @@ -8155,7 +8262,7 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:134 +#: code:addons/account/static/src/xml/account_reconciliation.xml:139 #, python-format msgid "Run" msgstr "" @@ -8176,13 +8283,13 @@ msgid "SEPA QR Code" msgstr "" #. module: account -#: selection:account.journal,type:0 #: model_terms:ir.ui.view,arch_db:account.view_account_tax_search #: model_terms:ir.ui.view,arch_db:account.view_account_tax_template_search msgid "Sale" msgstr "" #. module: account +#: selection:account.journal,type:0 #: selection:account.tax,type_tax_use:0 #: selection:account.tax.template,type_tax_use:0 #: model_terms:ir.ui.view,arch_db:account.view_account_journal_search @@ -8221,19 +8328,19 @@ msgid "Sample Invoice" msgstr "" #. module: account -#: code:addons/account/models/company.py:485 +#: code:addons/account/models/company.py:507 #, python-format msgid "Sample invoice" msgstr "" #. module: account -#: code:addons/account/models/company.py:491 +#: code:addons/account/models/company.py:513 #, python-format msgid "Sample invoice line name" msgstr "" #. module: account -#: code:addons/account/models/company.py:498 +#: code:addons/account/models/company.py:520 #, python-format msgid "Sample invoice line name 2" msgstr "" @@ -8250,7 +8357,7 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:218 +#: code:addons/account/static/src/xml/account_reconciliation.xml:232 #, python-format msgid "Save and New" msgstr "" @@ -8271,6 +8378,13 @@ msgid "Save this page and come back here to set up the feature." msgstr "" #. module: account +#. openerp-web +#: code:addons/account/static/src/xml/account_reconciliation.xml:23 +#, python-format +msgid "Search" +msgstr "" + +#. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_journal_search msgid "Search Account Journal" msgstr "" @@ -8327,6 +8441,13 @@ msgid "Search Taxes" msgstr "" #. module: account +#. openerp-web +#: code:addons/account/static/src/xml/account_reconciliation.xml:24 +#, python-format +msgid "Search..." +msgstr "" + +#. module: account #: model:ir.model.fields,field_description:account.field_account_reconcile_model__second_account_id #: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__second_account_id msgid "Second Account" @@ -8403,7 +8524,7 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:80 +#: code:addons/account/static/src/xml/account_reconciliation.xml:85 #, python-format msgid "Select a partner or choose a counterpart" msgstr "" @@ -8448,12 +8569,18 @@ msgid "Send & Print" msgstr "" #. module: account +#: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form +msgid "Send & Print" +msgstr "" + +#. module: account #: model:ir.model.fields,field_description:account.field_res_config_settings__invoice_is_email msgid "Send Email" msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:622 +#: code:addons/account/models/account_invoice.py:672 +#: code:addons/account/wizard/account_invoice_send.py:76 #, python-format msgid "Send Invoice" msgstr "" @@ -8481,6 +8608,11 @@ msgid "Send an invoice to test the customer portal." msgstr "" #. module: account +#: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form +msgid "Send invoices and payment follow-ups by post" +msgstr "" + +#. module: account #: model_terms:ir.ui.view,arch_db:account.onboarding_sample_invoice_step msgid "Send sample" msgstr "" @@ -8517,7 +8649,7 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:249 +#: code:addons/account/static/src/xml/account_reconciliation.xml:263 #, python-format msgid "Set" msgstr "" @@ -8560,8 +8692,8 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:85 -#: code:addons/account/static/src/xml/account_reconciliation.xml:124 +#: code:addons/account/static/src/xml/account_reconciliation.xml:90 +#: code:addons/account/static/src/xml/account_reconciliation.xml:129 #: model:ir.actions.act_window,name:account.action_account_config #: model:ir.actions.act_window,name:account.action_open_settings #: model:ir.ui.menu,name:account.menu_account_config @@ -8655,8 +8787,13 @@ msgid "Show line subtotals without taxes (B2B)" msgstr "" #. module: account +#: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form +msgid "Show standard terms & conditions on invoices/orders" +msgstr "" + +#. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:113 +#: code:addons/account/static/src/xml/account_reconciliation.xml:118 #, python-format msgid "Skip" msgstr "" @@ -8667,13 +8804,34 @@ msgid "Small-sized image of this contact. It is automatically resized as a 64x64 msgstr "" #. module: account +#: model:ir.model.fields,field_description:account.field_res_config_settings__module_snailmail_account +msgid "Snailmail" +msgstr "" + +#. module: account +#: model:ir.model.fields,field_description:account.field_account_invoice_send__snailmail_status +msgid "Snailmail Status" +msgstr "" + +#. module: account +#: model:ir.model.fields,field_description:account.field_account_invoice_send__snailmail_error +msgid "Snailmail message in error" +msgstr "" + +#. module: account #. openerp-web -#: code:addons/account/static/src/js/reconciliation/reconciliation_renderer.js:780 +#: code:addons/account/static/src/js/reconciliation/reconciliation_renderer.js:798 #, python-format msgid "Some fields are undefined" msgstr "" #. module: account +#: code:addons/account/models/account_bank_statement.py:600 +#, python-format +msgid "Some selected statement line were not already reconciled with an account move." +msgstr "" + +#. module: account #: model:ir.model.fields,help:account.field_account_setup_bank_manual_config__bank_bic msgid "Sometimes called BIC or Swift." msgstr "" @@ -8830,6 +8988,8 @@ msgstr "" #. module: account #: model:ir.model.fields,help:account.field_account_invoice__activity_state +#: model:ir.model.fields,help:account.field_account_journal__activity_state +#: model:ir.model.fields,help:account.field_account_move__activity_state #: model:ir.model.fields,help:account.field_account_payment__activity_state msgid "Status based on activities\n" "Overdue: Due date is already passed\n" @@ -8867,7 +9027,7 @@ msgstr "" #. module: account #: selection:account.reconcile.model.template,rule_type:0 -#: code:addons/account/models/chart_template.py:982 +#: code:addons/account/models/chart_template.py:984 #, python-format msgid "Suggest a write-off." msgstr "" @@ -8906,7 +9066,7 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:185 +#: code:addons/account/static/src/xml/account_reconciliation.xml:191 #: model:ir.model,name:account.model_account_tax #: model:ir.model.fields,field_description:account.field_account_invoice__amount_tax #: model:ir.model.fields,field_description:account.field_account_invoice_tax__tax_id @@ -8920,8 +9080,8 @@ msgid "Tax" msgstr "" #. module: account -#: code:addons/account/models/chart_template.py:291 #: code:addons/account/models/chart_template.py:293 +#: code:addons/account/models/chart_template.py:295 #, python-format msgid "Tax %.2f%%" msgstr "" @@ -9023,7 +9183,7 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:212 +#: code:addons/account/static/src/xml/account_reconciliation.xml:218 #: model:ir.model.fields,field_description:account.field_account_reconcile_model__force_tax_included #: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__force_tax_included #, python-format @@ -9350,13 +9510,18 @@ msgid "Terms" msgstr "" #. module: account +#: model:ir.model.fields,field_description:account.field_res_config_settings__invoice_terms +msgid "Terms & Conditions" +msgstr "" + +#. module: account #: model_terms:ir.ui.view,arch_db:account.invoice_form msgid "Terms and conditions..." msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:57 +#: code:addons/account/static/src/xml/account_reconciliation.xml:62 #, python-format msgid "That's on average" msgstr "" @@ -9374,13 +9539,13 @@ msgid "The 'Internal Type' is used for features available on different types of msgstr "" #. module: account -#: code:addons/account/models/account_move.py:1051 +#: code:addons/account/models/account_move.py:1150 #, python-format msgid "The account %s (%s) is deprecated." msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:536 +#: code:addons/account/models/account_invoice.py:570 #, python-format msgid "The account selected for payment does not belong to the same company as this invoice." msgstr "" @@ -9398,7 +9563,7 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/js/reconciliation/reconciliation_model.js:585 +#: code:addons/account/static/src/js/reconciliation/reconciliation_model.js:594 #, python-format msgid "The amount %s is not a valid partial amount" msgstr "" @@ -9410,25 +9575,25 @@ msgid "The amount expressed in an optional other currency if it is a multi-curre msgstr "" #. module: account -#: code:addons/account/models/account_move.py:687 +#: code:addons/account/models/account_move.py:725 #, python-format msgid "The amount expressed in the secondary currency must be positive when account is debited and negative when account is credited." msgstr "" #. module: account -#: code:addons/account/models/account_bank_statement.py:319 +#: code:addons/account/models/account_bank_statement.py:330 #, python-format msgid "The amount of a cash transaction cannot be 0." msgstr "" #. module: account -#: code:addons/account/models/account.py:939 +#: code:addons/account/models/account.py:944 #, python-format msgid "The application scope of taxes in a group must be either the same as the group or left empty." msgstr "" #. module: account -#: code:addons/account/models/account.py:558 +#: code:addons/account/models/account.py:561 #, python-format msgid "The bank account of a bank journal must belong to the same company (%s)." msgstr "" @@ -9453,7 +9618,7 @@ msgid "The bank statement used for bank reconciliation" msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:1274 +#: code:addons/account/models/account_invoice.py:1328 #, python-format msgid "The cash rounding cannot be computed because the difference must be added on the biggest tax found and no tax are specified.\n" "Please set up a tax or change the cash rounding method." @@ -9485,19 +9650,19 @@ msgid "The commercial entity that will be used on Journal Entries for this invoi msgstr "" #. module: account -#: code:addons/account/models/account_bank_statement.py:335 +#: code:addons/account/models/account_bank_statement.py:346 #, python-format msgid "The currency of the bank statement line must be different than the statement currency." msgstr "" #. module: account -#: code:addons/account/models/account.py:549 +#: code:addons/account/models/account.py:552 #, python-format msgid "The currency of the journal should be the same than the default credit account." msgstr "" #. module: account -#: code:addons/account/models/account.py:551 +#: code:addons/account/models/account.py:554 #, python-format msgid "The currency of the journal should be the same than the default debit account." msgstr "" @@ -9508,7 +9673,7 @@ msgid "The currency used to enter statement" msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:2024 +#: code:addons/account/models/account_invoice.py:2100 #, python-format msgid "The day of the month used for this term must be stricly positive." msgstr "" @@ -9532,7 +9697,7 @@ msgid "The expense is accounted for when a vendor bill is validated, except in a msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:906 +#: code:addons/account/models/account_invoice.py:956 #, python-format msgid "The field Vendor is required, please complete it to validate the Vendor Bill." msgstr "" @@ -9544,7 +9709,7 @@ msgid "The fiscal position determines the taxes/accounts used for this contact." msgstr "" #. module: account -#: code:addons/account/models/account.py:564 +#: code:addons/account/models/account.py:565 #, python-format msgid "The holder of a journal's bank account must be the company (%s)." msgstr "" @@ -9555,6 +9720,12 @@ msgid "The income or expense account related to the selected product." msgstr "" #. module: account +#: code:addons/account/wizard/account_invoice_refund.py:56 +#, python-format +msgid "The invoice is already paid or reconciled with a credit note so you cannot reconcile it with a new credit note. You should rather unreconcile the current invoice or create a draft credit note." +msgstr "" + +#. module: account #: model:ir.model.fields,help:account.field_account_journal__code msgid "The journal entries of this journal will be named using this prefix." msgstr "" @@ -9565,7 +9736,7 @@ msgid "The journal entry containing the initial balance of all this company's ac msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:1935 +#: code:addons/account/models/account_invoice.py:2015 #, python-format msgid "The last line of a Payment Term should have the Balance type." msgstr "" @@ -9576,7 +9747,7 @@ msgid "The last line's computation type should be \"Balance\" to ensure that the msgstr "" #. module: account -#: code:addons/account/models/company.py:161 +#: code:addons/account/models/company.py:178 #, python-format msgid "The lock date for advisors is irreversible and can't be removed." msgstr "" @@ -9592,7 +9763,7 @@ msgid "The name that will be used on account move lines" msgstr "" #. module: account -#: code:addons/account/models/company.py:165 +#: code:addons/account/models/company.py:182 #, python-format msgid "The new lock date for advisors must be set after the previous lock date." msgstr "" @@ -9608,7 +9779,7 @@ msgid "The next sequence number will be used for the next invoice." msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:2026 +#: code:addons/account/models/account_invoice.py:2102 #, python-format msgid "The number of days used for a payment term cannot be negative." msgstr "" @@ -9636,7 +9807,7 @@ msgid "The partner has at least one unreconciled debit and credit since last tim msgstr "" #. module: account -#: code:addons/account/models/account.py:657 +#: code:addons/account/models/account.py:658 #, python-format msgid "The partners of the journal's company and the related bank account mismatch." msgstr "" @@ -9648,7 +9819,7 @@ msgid "The payment amount cannot be negative." msgstr "" #. module: account -#: code:addons/account/models/account_payment.py:602 +#: code:addons/account/models/account_payment.py:619 #, python-format msgid "The payment cannot be processed because the invoice is not open!" msgstr "" @@ -9722,13 +9893,13 @@ msgid "The residual amount on a journal item expressed in the company currency." msgstr "" #. module: account -#: code:addons/account/models/account_move.py:672 +#: code:addons/account/models/account_move.py:710 #, python-format msgid "The selected account of your Journal Entry forces to provide a secondary currency. You should remove the secondary currency on the account." msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:1806 +#: code:addons/account/models/account_invoice.py:1883 #, python-format msgid "The selected unit of measure has to be in the same category as the product unit of measure." msgstr "" @@ -9762,13 +9933,13 @@ msgid "There are currently no invoices and payments for your account." msgstr "" #. module: account -#: code:addons/account/models/company.py:264 +#: code:addons/account/models/company.py:281 #, python-format msgid "There are still unposted entries in the period you want to lock. You should either post or delete them." msgstr "" #. module: account -#: code:addons/account/models/account_payment.py:452 +#: code:addons/account/models/account_payment.py:469 #, python-format msgid "There is no Transfer Account defined in the accounting settings. Please define one to be able to confirm this transfer." msgstr "" @@ -9786,7 +9957,7 @@ msgid "There is no journal items in draft state to post." msgstr "" #. module: account -#: code:addons/account/models/account_move.py:1559 +#: code:addons/account/models/account_move.py:1675 #, python-format msgid "There is no tax cash basis journal defined for this company: \"%s\" \n" "Configure it in Accounting/Configuration/Settings" @@ -9794,7 +9965,7 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:48 +#: code:addons/account/static/src/xml/account_reconciliation.xml:53 #, python-format msgid "There is nothing to reconcile." msgstr "" @@ -9864,7 +10035,7 @@ msgid "This boolean helps you to choose if you want to propose to the user to en msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:1482 +#: code:addons/account/models/account_invoice.py:1553 #, python-format msgid "This customer invoice credit note has been created from: <a href=# data-oe-model=account.invoice data-oe-id=%d>%s</a><br>Reason: %s" msgstr "" @@ -9906,19 +10077,25 @@ msgid "This is the accounting dashboard" msgstr "" #. module: account -#: code:addons/account/models/account.py:627 +#: code:addons/account/models/account.py:630 #, python-format msgid "This journal already contains items, therefore you cannot modify its company." msgstr "" #. module: account -#: code:addons/account/models/account.py:636 +#: code:addons/account/models/account.py:639 #, python-format msgid "This journal already contains items, therefore you cannot modify its short name." msgstr "" #. module: account -#: code:addons/account/models/account_payment.py:650 +#: model:ir.model.fields,help:account.field_account_reconcile_model__to_check +#: model:ir.model.fields,help:account.field_account_reconcile_model_template__to_check +msgid "This matching rule is used when the user is not certain of all the informations of the counterpart." +msgstr "" + +#. module: account +#: code:addons/account/models/account_payment.py:667 #, python-format msgid "This method should only be called to process a single invoice's payment." msgstr "" @@ -9930,7 +10107,7 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:38 +#: code:addons/account/static/src/xml/account_reconciliation.xml:42 #, python-format msgid "This page displays all the bank transactions that are to be reconciled and provides with a neat interface to do so." msgstr "" @@ -9942,7 +10119,7 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:296 +#: code:addons/account/static/src/xml/account_reconciliation.xml:310 #, python-format msgid "This payment is registered but not reconciled." msgstr "" @@ -9965,7 +10142,7 @@ msgid "This technical field can be used at the statement line creation/import ti msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:1484 +#: code:addons/account/models/account_invoice.py:1555 #, python-format msgid "This vendor bill credit note has been created from: <a href=# data-oe-model=account.invoice data-oe-id=%d>%s</a><br>Reason: %s" msgstr "" @@ -9982,6 +10159,22 @@ msgid "Those can be used to quickly create a journal items when reconciling\n" msgstr "" #. module: account +#: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form +msgid "Those options will be checked by default" +msgstr "" + +#. module: account +#. openerp-web +#: code:addons/account/static/src/xml/account_reconciliation.xml:226 +#: model:ir.model.fields,field_description:account.field_account_move__to_check +#: model:ir.model.fields,field_description:account.field_account_reconcile_model__to_check +#: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__to_check +#: model_terms:ir.ui.view,arch_db:account.view_account_move_filter +#, python-format +msgid "To Check" +msgstr "" + +#. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_invoice_report_search msgid "To Invoice" msgstr "" @@ -9997,20 +10190,22 @@ msgid "To pay" msgstr "" #. module: account -#: code:addons/account/models/account_move.py:901 +#: code:addons/account/models/account_move.py:940 #, python-format msgid "To reconcile the entries company should be the same for all entries." msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:169 +#: code:addons/account/static/src/xml/account_reconciliation.xml:175 #, python-format msgid "To speed up reconciliation, define" msgstr "" #. module: account #: selection:account.invoice,activity_state:0 +#: selection:account.journal,activity_state:0 +#: selection:account.move,activity_state:0 #: selection:account.payment,activity_state:0 msgid "Today" msgstr "" @@ -10150,7 +10345,7 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:306 +#: code:addons/account/static/src/xml/account_reconciliation.xml:320 #, python-format msgid "Transaction" msgstr "" @@ -10171,13 +10366,13 @@ msgid "Transfer To" msgstr "" #. module: account -#: code:addons/account/models/account_payment.py:714 +#: code:addons/account/models/account_payment.py:733 #, python-format msgid "Transfer from %s" msgstr "" #. module: account -#: code:addons/account/models/account_payment.py:790 +#: code:addons/account/models/account_payment.py:812 #, python-format msgid "Transfer to %s" msgstr "" @@ -10211,13 +10406,13 @@ msgid "UP" msgstr "" #. module: account -#: code:addons/account/models/account.py:405 +#: code:addons/account/models/account.py:408 #, python-format msgid "Undefined Yet" msgstr "" #. module: account -#: code:addons/account/models/company.py:386 +#: code:addons/account/models/company.py:408 #, python-format msgid "Undistributed Profits/Losses" msgstr "" @@ -10239,7 +10434,7 @@ msgid "Unit of Measure" msgstr "" #. module: account -#: code:addons/account/report/account_aged_partner_balance.py:220 +#: code:addons/account/report/account_aged_partner_balance.py:222 #, python-format msgid "Unknown Partner" msgstr "" @@ -10270,6 +10465,8 @@ msgstr "" #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement__message_unread #: model:ir.model.fields,field_description:account.field_account_invoice__message_unread +#: model:ir.model.fields,field_description:account.field_account_journal__message_unread +#: model:ir.model.fields,field_description:account.field_account_move__message_unread #: model:ir.model.fields,field_description:account.field_account_payment__message_unread msgid "Unread Messages" msgstr "" @@ -10277,6 +10474,8 @@ msgstr "" #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement__message_unread_counter #: model:ir.model.fields,field_description:account.field_account_invoice__message_unread_counter +#: model:ir.model.fields,field_description:account.field_account_journal__message_unread_counter +#: model:ir.model.fields,field_description:account.field_account_move__message_unread_counter #: model:ir.model.fields,field_description:account.field_account_payment__message_unread_counter msgid "Unread Messages Counter" msgstr "" @@ -10463,7 +10662,7 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:78 +#: code:addons/account/static/src/xml/account_reconciliation.xml:83 #: model_terms:ir.ui.view,arch_db:account.invoice_form #: model_terms:ir.ui.view,arch_db:account.invoice_supplier_form #: model_terms:ir.ui.view,arch_db:account.view_account_payment_from_invoices @@ -10508,8 +10707,8 @@ msgstr "" #. module: account #: selection:account.invoice,type:0 #: selection:account.invoice.report,type:0 -#: code:addons/account/models/account_invoice.py:500 -#: code:addons/account/models/account_invoice.py:1357 +#: code:addons/account/models/account_invoice.py:534 +#: code:addons/account/models/account_invoice.py:1411 #: model:ir.model.fields,field_description:account.field_account_invoice__vendor_bill_id #: model_terms:ir.ui.view,arch_db:account.invoice_supplier_form #: model_terms:ir.ui.view,arch_db:account.invoice_supplier_tree @@ -10519,13 +10718,13 @@ msgid "Vendor Bill" msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:501 +#: code:addons/account/models/account_invoice.py:535 #, python-format msgid "Vendor Bill - %s" msgstr "" #. module: account -#: code:addons/account/models/chart_template.py:419 +#: code:addons/account/models/chart_template.py:421 #: model:ir.actions.act_window,name:account.action_vendor_bill_template #, python-format msgid "Vendor Bills" @@ -10534,21 +10733,21 @@ msgstr "" #. module: account #: selection:account.invoice,type:0 #: selection:account.invoice.report,type:0 -#: code:addons/account/models/account_invoice.py:502 -#: code:addons/account/models/account_payment.py:772 +#: code:addons/account/models/account_invoice.py:536 +#: code:addons/account/models/account_payment.py:794 #: model_terms:ir.ui.view,arch_db:account.report_invoice_document #, python-format msgid "Vendor Credit Note" msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:503 +#: code:addons/account/models/account_invoice.py:537 #, python-format msgid "Vendor Credit Note - %s" msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:1359 +#: code:addons/account/models/account_invoice.py:1413 #, python-format msgid "Vendor Credit note" msgstr "" @@ -10559,7 +10758,7 @@ msgid "Vendor Display Name" msgstr "" #. module: account -#: code:addons/account/models/account_payment.py:774 +#: code:addons/account/models/account_payment.py:796 #: model_terms:ir.ui.view,arch_db:account.account_journal_dashboard_kanban_view #, python-format msgid "Vendor Payment" @@ -10608,7 +10807,7 @@ msgid "Warning" msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:793 +#: code:addons/account/models/account_invoice.py:843 #, python-format msgid "Warning for %s" msgstr "" @@ -10619,8 +10818,8 @@ msgid "Warning on the Invoice" msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:1725 -#: code:addons/account/models/account_invoice.py:1805 +#: code:addons/account/models/account_invoice.py:1801 +#: code:addons/account/models/account_invoice.py:1882 #, python-format msgid "Warning!" msgstr "" @@ -10636,14 +10835,14 @@ msgid "Warnings in Invoices" msgstr "" #. module: account -#: code:addons/account/models/company.py:541 +#: code:addons/account/models/company.py:563 #, python-format msgid "We cannot find a chart of accounts for this company, you should configure it. \n" "Please go to Account Configuration and select or install a fiscal localization." msgstr "" #. module: account -#: code:addons/account/models/company.py:480 +#: code:addons/account/models/company.py:502 #, python-format msgid "We cannot find any journal for this company. You should create one.\n" "Please go to Configuration > Journals." @@ -10652,6 +10851,8 @@ msgstr "" #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement__website_message_ids #: model:ir.model.fields,field_description:account.field_account_invoice__website_message_ids +#: model:ir.model.fields,field_description:account.field_account_journal__website_message_ids +#: model:ir.model.fields,field_description:account.field_account_move__website_message_ids #: model:ir.model.fields,field_description:account.field_account_payment__website_message_ids msgid "Website Messages" msgstr "" @@ -10659,16 +10860,13 @@ msgstr "" #. module: account #: model:ir.model.fields,help:account.field_account_bank_statement__website_message_ids #: model:ir.model.fields,help:account.field_account_invoice__website_message_ids +#: model:ir.model.fields,help:account.field_account_journal__website_message_ids +#: model:ir.model.fields,help:account.field_account_move__website_message_ids #: model:ir.model.fields,help:account.field_account_payment__website_message_ids msgid "Website communication history" msgstr "" #. module: account -#: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form -msgid "When receiving an email with a bill, or uploading scanned bills, Odoo will parse them (OCR) and auto-complete (AI) Draft Bills to validate." -msgstr "" - -#. module: account #: model:ir.model.fields,help:account.field_account_journal__post_at_bank_rec msgid "Whether or not the payments made in this journal should be generated in draft state, so that the related journal entries are only posted when performing bank reconciliation." msgstr "" @@ -10700,8 +10898,8 @@ msgid "With tax" msgstr "" #. module: account -#: code:addons/account/models/account_move.py:971 -#: code:addons/account/models/account_move.py:991 +#: code:addons/account/models/account_move.py:1019 +#: code:addons/account/models/account_move.py:1039 #, python-format msgid "Write-Off" msgstr "" @@ -10713,12 +10911,19 @@ msgid "Write-off Amount" msgstr "" #. module: account +#. openerp-web +#: code:addons/account/static/src/xml/account_reconciliation.xml:222 +#, python-format +msgid "Writeoff Date" +msgstr "" + +#. module: account #: sql_constraint:account.move.line:0 msgid "Wrong credit or debit value in accounting entry !" msgstr "" #. module: account -#: code:addons/account/models/account_move.py:899 +#: code:addons/account/models/account_move.py:938 #, python-format msgid "You are trying to reconcile some entries that are already reconciled." msgstr "" @@ -10735,7 +10940,7 @@ msgid "You can find a contact by its Name, TIN, Email or Internal Reference." msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:1983 +#: code:addons/account/models/account_invoice.py:2060 #, python-format msgid "You can not delete payment terms as other records still reference it. However, you can archive it." msgstr "" @@ -10747,7 +10952,7 @@ msgid "You can not have an overlap between two fiscal years, please correct the msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:1827 +#: code:addons/account/models/account_invoice.py:1904 #, python-format msgid "You can only delete an invoice line if the invoice is in draft state." msgstr "" @@ -10764,19 +10969,19 @@ msgid "You can set here the default communication that will appear on customer i msgstr "" #. module: account -#: code:addons/account/models/account_move.py:361 +#: code:addons/account/models/account_move.py:387 #, python-format msgid "You cannot add/modify entries prior to and inclusive of the lock date %s" msgstr "" #. module: account -#: code:addons/account/models/account_move.py:363 +#: code:addons/account/models/account_move.py:389 #, python-format msgid "You cannot add/modify entries prior to and inclusive of the lock date %s. Check the company settings or ask someone with the 'Adviser' role" msgstr "" #. module: account -#: code:addons/account/models/company.py:283 +#: code:addons/account/models/company.py:300 #, python-format msgid "You cannot change the currency of the company since some journal items already exist" msgstr "" @@ -10788,50 +10993,50 @@ msgid "You cannot change the owner company of an account that already contains j msgstr "" #. module: account -#: code:addons/account/models/account_move.py:679 +#: code:addons/account/models/account_move.py:717 #, python-format msgid "You cannot create journal items with a secondary currency without filling both 'currency' and 'amount currency' fields." msgstr "" #. module: account -#: code:addons/account/models/company.py:187 +#: code:addons/account/models/company.py:204 #, python-format msgid "You cannot define stricter conditions on advisors than on users. Please make sure that the lock date on advisor is set before the lock date for users." msgstr "" #. module: account -#: code:addons/account/models/account_payment.py:583 +#: code:addons/account/models/account_payment.py:600 #, python-format msgid "You cannot delete a payment that is already posted." msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:744 +#: code:addons/account/models/account_invoice.py:794 #, python-format msgid "You cannot delete an invoice after it has been validated (and received a number). You can set it back to \"Draft\" state and modify its content, then re-confirm it." msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:742 +#: code:addons/account/models/account_invoice.py:792 #, python-format msgid "You cannot delete an invoice which is not draft or cancelled. You should create a credit note instead." msgstr "" #. module: account -#: code:addons/account/models/res_config_settings.py:147 +#: code:addons/account/models/res_config_settings.py:153 #, python-format msgid "You cannot disable this setting because some of your taxes are cash basis. Modify your taxes first before disabling this setting." msgstr "" #. module: account -#: code:addons/account/models/account_move.py:1136 +#: code:addons/account/models/account_move.py:1238 #, python-format msgid "You cannot do this modification on a posted journal entry, you can just change some non legal fields. You must revert the journal entry to cancel it.\n" "%s." msgstr "" #. module: account -#: code:addons/account/models/account_move.py:1138 +#: code:addons/account/models/account_move.py:1240 #, python-format msgid "You cannot do this modification on a reconciled entry. You can just change some non legal fields or you must unreconcile first.\n" "%s." @@ -10844,39 +11049,40 @@ msgid "You cannot have a receivable/payable account that is not reconcilable. (a msgstr "" #. module: account -#: code:addons/account/models/account.py:76 +#: code:addons/account/models/account.py:75 #, python-format msgid "You cannot have more than one account with \"Current Year Earnings\" as type. (accounts: %s)" msgstr "" #. module: account -#: code:addons/account/models/company.py:176 +#: code:addons/account/models/company.py:193 #, python-format msgid "You cannot lock a period that is not finished yet. Please make sure that the lock date for advisors is not set after the last day of the previous month." msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/js/reconciliation/reconciliation_model.js:760 +#: code:addons/account/static/src/js/reconciliation/reconciliation_model.js:499 +#: code:addons/account/static/src/js/reconciliation/reconciliation_model.js:630 #, python-format -msgid "You cannot mix items from receivable and payable accounts." +msgid "You cannot mix items with and without the 'To Check' checkbox ticked." msgstr "" #. module: account -#: code:addons/account/models/account_move.py:124 +#: code:addons/account/models/account_move.py:144 #, python-format msgid "You cannot modify a journal entry linked to a posted payment." msgstr "" #. module: account -#: code:addons/account/models/account_move.py:322 +#: code:addons/account/models/account_move.py:348 #, python-format msgid "You cannot modify a posted entry of this journal.\n" "First you should set the journal to allow cancelling entries." msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:924 +#: code:addons/account/models/account_invoice.py:974 #, python-format msgid "You cannot pay an invoice which is partially paid. You need to reconcile payment entries first." msgstr "" @@ -10894,7 +11100,7 @@ msgid "You cannot put/take money in/out for a bank statement which is closed." msgstr "" #. module: account -#: code:addons/account/models/account.py:651 +#: code:addons/account/models/account.py:654 #, python-format msgid "You cannot remove the bank account from the journal once set." msgstr "" @@ -10918,20 +11124,20 @@ msgid "You cannot switch an account to prevent the reconciliation if some partia msgstr "" #. module: account -#: code:addons/account/models/account_move.py:1102 +#: code:addons/account/models/account_move.py:1201 #, python-format msgid "You cannot use a deprecated account." msgstr "" #. module: account -#: code:addons/account/models/account_move.py:1061 +#: code:addons/account/models/account_move.py:1160 #, python-format msgid "You cannot use this general account in this journal, check the tab 'Entry Controls' on the related journal." msgstr "" #. module: account #: code:addons/account/models/account_invoice.py:76 -#: code:addons/account/models/account_invoice.py:910 +#: code:addons/account/models/account_invoice.py:960 #, python-format msgid "You cannot validate an invoice with a negative total amount. You should create a credit note instead." msgstr "" @@ -10943,7 +11149,13 @@ msgid "You have" msgstr "" #. module: account -#: code:addons/account/models/account_payment.py:622 +#: model_terms:ir.ui.view,arch_db:account.invoice_form +#: model_terms:ir.ui.view,arch_db:account.invoice_supplier_form +msgid "You have suspense account moves that match this invoice." +msgstr "" + +#. module: account +#: code:addons/account/models/account_payment.py:639 #, python-format msgid "You have to define a sequence for %s in your company." msgstr "" @@ -10956,38 +11168,38 @@ msgid "You have to define an 'Internal Transfer Account' in your cash register's msgstr "" #. module: account -#: code:addons/account/models/account.py:147 +#: code:addons/account/models/account.py:146 #, python-format msgid "You must first define an opening move." msgstr "" #. module: account -#: code:addons/account/models/account_invoice.py:1726 +#: code:addons/account/models/account_invoice.py:1802 #, python-format msgid "You must first select a partner." msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:55 +#: code:addons/account/static/src/xml/account_reconciliation.xml:60 #, python-format msgid "You reconciled" msgstr "" #. module: account -#: code:addons/account/models/account_move.py:1617 +#: code:addons/account/models/account_move.py:1733 #, python-format msgid "You should configure the 'Exchange Rate Journal' in the accounting settings, to manage automatically the booking of accounting entries related to differences between exchange rates." msgstr "" #. module: account -#: code:addons/account/models/account_move.py:1619 +#: code:addons/account/models/account_move.py:1735 #, python-format msgid "You should configure the 'Gain Exchange Rate Account' in the accounting settings, to manage automatically the booking of accounting entries related to differences between exchange rates." msgstr "" #. module: account -#: code:addons/account/models/account_move.py:1621 +#: code:addons/account/models/account_move.py:1737 #, python-format msgid "You should configure the 'Loss Exchange Rate Account' in the accounting settings, to manage automatically the booking of accounting entries related to differences between exchange rates." msgstr "" @@ -11037,11 +11249,6 @@ msgstr "" #. module: account #: selection:account.payment.term.line,option:0 -msgid "day(s) after the end of the invoice month" -msgstr "" - -#. module: account -#: selection:account.payment.term.line,option:0 msgid "day(s) after the invoice date" msgstr "" @@ -11077,12 +11284,17 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:320 +#: code:addons/account/static/src/xml/account_reconciliation.xml:334 #, python-format msgid "have been reconciled automatically." msgstr "" #. module: account +#: model_terms:ir.ui.view,arch_db:account.account_journal_dashboard_kanban_view +msgid "moves to check" +msgstr "" + +#. module: account #: selection:account.payment.term.line,option:0 msgid "of the current month" msgstr "" @@ -11104,28 +11316,28 @@ msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:169 +#: code:addons/account/static/src/xml/account_reconciliation.xml:175 #, python-format msgid "reconciliation models" msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:154 +#: code:addons/account/static/src/xml/account_reconciliation.xml:160 #, python-format msgid "remaining)" msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:57 +#: code:addons/account/static/src/xml/account_reconciliation.xml:62 #, python-format msgid "seconds per transaction." msgstr "" #. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:321 +#: code:addons/account/static/src/xml/account_reconciliation.xml:335 #, python-format msgid "statement lines" msgstr "" @@ -11136,8 +11348,14 @@ msgid "the parent company" msgstr "" #. module: account +#: model_terms:ir.ui.view,arch_db:account.invoice_form +#: model_terms:ir.ui.view,arch_db:account.invoice_supplier_form +msgid "to mark this invoice as paid." +msgstr "" + +#. module: account #. openerp-web -#: code:addons/account/static/src/xml/account_reconciliation.xml:55 +#: code:addons/account/static/src/xml/account_reconciliation.xml:60 #, python-format msgid "transactions in" msgstr "" diff --git a/addons/account/i18n/es.po b/addons/account/i18n/es.po index 91bec89e08e..3d981a5b183 100644 --- a/addons/account/i18n/es.po +++ b/addons/account/i18n/es.po @@ -30,7 +30,7 @@ # Ana Juaristi <ajuaristio@gmail.com>, 2018 # Manuel Vázquez Acosta <mva.led@gmail.com>, 2018 # Javier Ramirez <elbomba887@gmail.com>, 2018 -# e2f_EPV Translator <e2f_EPV@outlook.com>, 2018 +# 966ff43e6966712895a590e7320ca288, 2018 # Christopher Ormaza <chris.ormaza@gmail.com>, 2018 # Alejandro Die Sanchis <marketing@domatix.com>, 2018 # Angel Moya - PESOL <angel.moya@pesol.es>, 2018 @@ -40,7 +40,7 @@ # Cris Martin <cristina.marrod@gmail.com>, 2018 # Mateo Tibaquirá Palacios <nestormateo@gmail.com>, 2019 # Carlos Lopez <celm1990@hotmail.com>, 2019 -# e2f_es_ t7 <e2f_es_t7@outlook.com>, 2019 +# 36700cd705c35e1852bdffcd0b296648, 2019 # Pilar Marín <pilar@odooperu.pe>, 2019 # Cristian Salamea <ovnicraft@gmail.com>, 2019 # Pedro M. Baeza <pedro.baeza@gmail.com>, 2019 @@ -73,6 +73,7 @@ # Luis Marin <marin.guadarrama@gmail.com>, 2019 # Edilianny Sánchez <esanchez@vauxoo.com>, 2019 # Gabriel Umana <gabriel.umana@delfixcr.com>, 2019 +# Jesse Garza <jga@odoo.com>, 2019 # msgid "" msgstr "" @@ -2305,7 +2306,7 @@ msgstr "Preconfiguración del asiento de conciliación bancaria" #: model:ir.model.fields,field_description:account.field_res_company__account_bank_reconciliation_start #: model:ir.model.fields,field_description:account.field_res_config_settings__account_bank_reconciliation_start msgid "Bank Reconciliation Threshold" -msgstr "" +msgstr "Fecha de corte para conciliaciones" #. module: account #: model:ir.model,name:account.model_account_bank_statement @@ -2328,7 +2329,7 @@ msgstr "Caja Bancaria" #. module: account #: model:ir.model,name:account.model_account_bank_statement_closebalance msgid "Bank Statement Closing Balance" -msgstr "" +msgstr "Saldo final del extracto bancario" #. module: account #: model:ir.model,name:account.model_account_bank_statement_line @@ -2356,6 +2357,7 @@ msgstr "Cuenta bancaria usada en esta transacción" msgid "" "Bank account type: Normal or IBAN. Inferred from the bank account number." msgstr "" +"Tipo de cuenta bancaria: Normal o IBAN. Se infiere del número de cuenta." #. module: account #: model:account.account.type,name:account.data_account_type_liquidity @@ -2365,7 +2367,7 @@ msgstr "Banco y caja" #. module: account #: model:ir.model,name:account.model_account_setup_bank_manual_config msgid "Bank setup manual config" -msgstr "" +msgstr "Configuración manual de datos bancarios" #. module: account #: model:ir.model.fields,field_description:account.field_account_move_line__statement_line_id @@ -2832,6 +2834,9 @@ msgid "" "Changing your company name is not allowed once invoices have been issued for" " your account. Please contact us directly for this operation." msgstr "" +"Cambiar el nombre de la compañía no está permitido una vez que se han " +"emitido facturas para su cuenta. Por favor contáctenos para realizar esta " +"operación." #. module: account #: code:addons/account/controllers/portal.py:106 @@ -2989,6 +2994,8 @@ msgid "" "Choose how you want to credit this invoice. You cannot Modify and Cancel if " "the invoice is already reconciled" msgstr "" +"Elija cómo quiere acreditar esta factura. No puede modificarla o cancelarla " +"si la factura ya fue conciliada" #. module: account #: model_terms:ir.actions.act_window,help:account.actions_account_fiscal_year diff --git a/addons/account/i18n/mn.po b/addons/account/i18n/mn.po index 617e63fbdca..ffec592db1d 100644 --- a/addons/account/i18n/mn.po +++ b/addons/account/i18n/mn.po @@ -42,6 +42,11 @@ msgid "" " * The 'Paid' status is set automatically when the invoice is paid. Its related journal entries may or may not be reconciled.\n" " * The 'Cancelled' status is used when user cancel invoice." msgstr "" +" * 'Ноорог' - Хэрэглэгчийн үүсгэсэн шинэ нэхэмжлэл нь батлагдахаасаа өмнө ийм төлөвтэй байна.\n" +" * 'Нээлттэй' - Хэрэглэгч нэхэмжлэл үүсгээд батласны дараа буюу тухайн нэхэмжлэл нь дугаартай болсон үед ийм төлөвтэй байна. Нэхэмжлэл бүрэн төлөгдтөл Нээлттэй төлөвтэй хэвээр байх юм.\n" +" * 'Төлөгдөж буй' - Банкны ижилсүүлэлт шаардахаар тохируулагдсан журналаар тус нэхэмжлэлийг бүрэн төлөлт хийсэн бөгөөд банкны гүйлгээний бүртгэлд хараахан бүртгэгдээгүй байх үед нэхэмжлэл ийм төлөвтэй байх юм.\n" +" * 'Төлөгдсөн' - Нэхэмжлэлийн төлбөр бүрэн барагдсан үед ийм төлөвт шилжинэ. Нэхэмжлэл төлөгдсөн эсэх нь журналын бичилтийг холболт хийхтэй шууд холбоотой юм.\n" +" * 'Цуцлагдсан' - Хэрэглэгч нэхэмжлэлийг цуцлавал ийм төлөвт шилжинэ." #. module: account #: model:ir.model.fields,field_description:account.field_account_chart_template__code_digits @@ -86,7 +91,7 @@ msgstr "%s (хуулбар)" #: code:addons/account/models/account.py:695 #, python-format msgid "%s Sequence" -msgstr "" +msgstr "%s дараалал" #. module: account #: model_terms:ir.ui.view,arch_db:account.report_invoice_document @@ -116,7 +121,7 @@ msgstr "15 хоног дотор" #. module: account #: model:account.payment.term,name:account.account_payment_term_2months msgid "2 Months" -msgstr "" +msgstr "2 сар" #. module: account #: model:account.payment.term,name:account.account_payment_term_net @@ -131,7 +136,7 @@ msgstr "30% Урьдчилгаа, Дараа сарын төгсгөл" #. module: account #: model:account.payment.term,name:account.account_payment_term_45days msgid "45 Days" -msgstr "" +msgstr "45 хоногт" #. module: account #: code:addons/account/models/account.py:693 @@ -159,6 +164,22 @@ msgid "" " </p>\n" "</div>\n" msgstr "" +"<?xml version=\"1.0\"?>\n" +"<div style=\"margin: 0px; padding: 0px;\">\n" +" <p style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n" +" Хүндэт ${object.partner_id.name}<br/><br/>\n" +" Төлбөр төлсөнд талархал илэрхийлье.\n" +" Энэ бол таны төлбөрийн баримт нь <strong>${(object.name or '').replace('/','-')}</strong> дугаартайгаар\n" +" <strong>${format_amount(object.amount, object.currency_id)}</strong> дүнгээр ${object.company_id.name} компанид бүртгэгдлээ.\n" +" <br/><br/>\n" +" Хэрэв танд ямар нэг асуулт байвал эргэлзэх зүйлгүйгээр бидэнтэй холбоо барина уу.\n" +" <br/><br/>\n" +" Хүндэтгэсэн,<br/>\n" +" % if user and user.signature:\n" +" ${user.signature | safe}\n" +" % endif\n" +" </p>\n" +"</div>\n" #. module: account #: model:mail.template,body_html:account.email_template_edi_invoice @@ -192,22 +213,50 @@ msgid "" "</div>\n" " " msgstr "" +"<div style=\"margin: 0px; padding: 0px;\">\n" +" <p style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n" +" Эрхэм ${object.partner_id.name}\n" +" % if object.partner_id.parent_id:\n" +" (${object.partner_id.parent_id.name})\n" +" % endif\n" +" <br/><br/>\n" +" Энэ бол танд ирж буй \n" +" % if object.number:\n" +" нэхэмжлэл <strong>${object.number}</strong>\n" +" % else:\n" +" нэхэмжлэл\n" +" %endif\n" +" % if object.origin:\n" +" (холбогдох эх баримт: ${object.origin})\n" +" % endif\n" +" бөгөөд үнийн дүн нь <strong>${format_amount(object.amount_total, object.currency_id)}</strong> болно.\n" +" Нэхэмжилж буй компани: ${object.company_id.name}.\n" +" % if object.state=='paid':\n" +" Нэхэмжлэлийн төлбөр бүрэн хийгдсэн байна.\n" +" % else:\n" +" Төлбөрөө хурдан шуурхай төлөх гэж байгаад тань баярлалаа.\n" +" % endif\n" +" <br/><br/>\n" +" Хэрэв танд ямар нэг асуулт байвал эргэлзэх зүйлгүйгээр бидэнтэй холбоо барина уу.\n" +" </p>\n" +"</div>\n" +" " #. module: account #: model_terms:ir.ui.view,arch_db:account.portal_my_home_menu_invoice msgid "<em>Draft Invoice</em>" -msgstr "" +msgstr "<em>Ноорог нэхэмжлэл</em>" #. module: account #: model_terms:ir.ui.view,arch_db:account.account_move_line_view_kanban #: model_terms:ir.ui.view,arch_db:account.view_account_move_kanban msgid "<i class=\"fa fa-clock-o\" aria-label=\"Date\" role=\"img\" title=\"Date\"/>" -msgstr "" +msgstr "<i class=\"fa fa-clock-o\" aria-label=\"Огноо\" role=\"img\" title=\"Огноо\"/>" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_payment_kanban msgid "<i class=\"fa fa-clock-o\" role=\"img\" aria-label=\"Date\" title=\"Date\"/>" -msgstr "" +msgstr "<i class=\"fa fa-clock-o\" role=\"img\" aria-label=\"Огноо\" title=\"Огноо\"/>" #. module: account #: model_terms:ir.ui.view,arch_db:account.portal_invoice_page @@ -219,18 +268,19 @@ msgstr "" msgid "" "<i class=\"fa fa-ellipsis-v\" aria-label=\"Selection\" role=\"img\" " "title=\"Selection\"/>" -msgstr "" +msgstr "<i class=\"fa fa-ellipsis-v\" aria-label=\"Сонголт\" role=\"img\" title=\"Сонголт\"/>" #. module: account #: model_terms:ir.ui.view,arch_db:account.portal_invoice_page msgid "<i class=\"fa fa-fw fa-comments\"/><b>Send message</b>" -msgstr "" +msgstr "<i class=\"fa fa-fw fa-comments\"/><b>Зурвас илгээх</b>" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_journal_form msgid "" "<i class=\"fa fa-fw o_button_icon fa-arrow-right\"/> Configure Email Servers" msgstr "" +"<i class=\"fa fa-fw o_button_icon fa-arrow-right\"/> Имэйл сервер тохируулах" #. module: account #: model_terms:ir.ui.view,arch_db:account.portal_invoice_page @@ -244,6 +294,8 @@ msgid "" "<p>You can control the invoice from your vendor based on what you purchased " "or received.</p>" msgstr "" +"<p>Та нийлүүлэгчийн нэхэмжлэлийг бүртгэхдээ захиалсан тоонд тулгуурлах эсвэл" +" хүлээн авсан тоонд туулгуурлах эсэхээ тохируулах боломжтой.</p>" #. module: account #: model_terms:ir.ui.view,arch_db:account.account_invoice_send_wizard_form @@ -254,6 +306,11 @@ msgid "" " </span>\n" " <span>Followers of the document and</span>" msgstr "" +"<span attrs=\"{'invisible': [('composition_mode', '!=', 'mass_mail')]}\">\n" +" <span>Сонгосон өгөгдлүүд бүхий</span>\n" +" <span>баримтуудын дагагч нарт</span>\n" +" <strong>Масс имэйл илгээнэ</strong>\n" +" </span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.portal_my_invoices @@ -262,6 +319,9 @@ msgid "" " aria-label=\"Opened\" title=\"Opened\" role=\"img\"/><span class=\"d-none d" "-md-inline\"> Waiting for Payment</span></span>" msgstr "" +"<span class=\"badge badge-pill badge-info\"><i class=\"fa fa-fw fa-clock-o\"" +" aria-label=\"Нээлттэй\" title=\"Opened\" role=\"img\"/><span class=\"d-none" +" d-md-inline\"> Төлбөрийг хүлээж буй</span></span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.portal_my_invoices @@ -270,6 +330,9 @@ msgid "" "check\" aria-label=\"Paid\" title=\"Paid\" role=\"img\"/><span " "class=\"d-none d-md-inline\"> Paid</span></span>" msgstr "" +"<span class=\"badge badge-pill badge-success\"><i class=\"fa fa-fw fa-" +"check\" aria-label=\"Төлөгдсөн\" title=\"Төлөгдсөн\" role=\"img\"/><span " +"class=\"d-none d-md-inline\"> Төлөгдсөн</span></span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.portal_my_invoices @@ -278,6 +341,9 @@ msgid "" "remove\" aria-label=\"Cancelled\" title=\"Cancelled\" role=\"img\"/><span " "class=\"d-none d-md-inline\"> Cancelled</span></span>" msgstr "" +"<span class=\"badge badge-pill badge-warning\"><i class=\"fa fa-fw fa-" +"remove\" aria-label=\"Цуцлагдсан\" title=\"Цуцлагдсан\" role=\"img\"/><span " +"class=\"d-none d-md-inline\"> Цуцлагдсан</span></span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form @@ -293,6 +359,8 @@ msgid "" "<span class=\"fa fa-lg fa-building-o\" title=\"Values set here are company-" "specific.\"/>" msgstr "" +"<span class=\"fa fa-lg fa-building-o\" title=\"Эдгээр утгууд нь зөвхөн " +"тухайн компаны хувьд хадгалагдана.\"/>" #. module: account #: model_terms:ir.ui.view,arch_db:account.invoice_supplier_form @@ -303,6 +371,11 @@ msgid "" " <span class=\"o_form_label\" attrs=\"{'invisible': ['|',('state', '=', 'draft'), ('type','!=','in_invoice')]}\">Bill </span>\n" " <span class=\"o_form_label\" attrs=\"{'invisible': ['|',('state', '=', 'draft'), ('type','!=','in_refund')]}\">Credit Note </span>" msgstr "" +"<span class=\"o_form_label\" attrs=\"{'invisible': ['|',('state','!=','draft'), ('type','!=','in_invoice')]}\">Ноорог нэхэмжлэл</span>\n" +" <span class=\"o_form_label\" attrs=\"{'invisible': [('sequence_number_next_prefix','=',False)]}\">- Анхны дугаар:</span>\n" +" <span class=\"o_form_label\" attrs=\"{'invisible': ['|',('state','!=','draft'), ('type','!=','in_refund')]}\">Ноорог буцаалтын нэхэмжлэл</span>\n" +" <span class=\"o_form_label\" attrs=\"{'invisible': ['|',('state', '=', 'draft'), ('type','!=','in_invoice')]}\">Нэхэмжлэл </span>\n" +" <span class=\"o_form_label\" attrs=\"{'invisible': ['|',('state', '=', 'draft'), ('type','!=','in_refund')]}\">Буцаалтын нэхэмжлэл </span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.invoice_form @@ -311,6 +384,9 @@ msgid "" "['|',('state','=','draft'), ('type','!=','out_refund')]}\">Credit " "Note</span>" msgstr "" +"<span class=\"o_form_label\" attrs=\"{'invisible': " +"['|',('state','=','draft'), ('type','!=','out_refund')]}\">Буцаалтын " +"нэхэмжлэл</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_reconcile_model_form @@ -318,6 +394,8 @@ msgid "" "<span class=\"o_form_label\" attrs=\"{'invisible': [('match_amount', '!=', " "'between')]}\">and</span>" msgstr "" +"<span class=\"o_form_label\" attrs=\"{'invisible': [('match_amount', '!=', " +"'between')]}\">бөгөөд</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.validate_account_move_view @@ -325,6 +403,8 @@ msgid "" "<span class=\"o_form_label\">All selected journal entries will be validated " "and posted. You won't be able to modify them afterwards.</span>" msgstr "" +"<span class=\"o_form_label\">Сонгосон бүх ажил гүйлгээнүүд батлагдсан байх " +"болно. Ингэсний дараа та тэдгээрийг засаж өөрчлөх боломжгүйд хүрнэ.</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form @@ -337,6 +417,8 @@ msgid "" "<span class=\"o_form_label\">Default Taxes</span>\n" " <span class=\"fa fa-lg fa-building-o\" title=\"Values set here are company-specific.\" aria-label=\"Values set here are company-specific.\" groups=\"base.group_multi_company\" role=\"img\"/>" msgstr "" +"<span class=\"o_form_label\">Үндсэн татвар</span>\n" +" <span class=\"fa fa-lg fa-building-o\" title=\"Эдгээр утгууд нь зөвхөн тухайн компаны хувьд хадгалагдана.\" aria-label=\"Эдгээр утгууд нь зөвхөн тухайн компаны хувьд хадгалагдана.\" groups=\"base.group_multi_company\" role=\"img\"/>" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form @@ -344,6 +426,8 @@ msgid "" "<span class=\"o_form_label\">Fiscal Localization</span>\n" " <span class=\"fa fa-lg fa-building-o\" title=\"Values set here are company-specific.\" aria-label=\"Values set here are company-specific.\" groups=\"base.group_multi_company\" role=\"img\"/>" msgstr "" +"<span class=\"o_form_label\">Татварын тайлан тохируулалт</span>\n" +" <span class=\"fa fa-lg fa-building-o\" title=\"Эдгээр утгууд нь зөвхөн тухайн компаны хувьд хадгалагдана.\" aria-label=\"Эдгээр утгууд нь зөвхөн тухайн компаны хувьд хадгалагдана.\" groups=\"base.group_multi_company\" role=\"img\"/>" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form @@ -351,16 +435,18 @@ msgid "" "<span class=\"o_form_label\">Main Currency</span>\n" " <span class=\"fa fa-lg fa-building-o\" title=\"Values set here are company-specific.\" aria-label=\"Values set here are company-specific.\" groups=\"base.group_multi_company\" role=\"img\"/>" msgstr "" +"<span class=\"o_form_label\">Үндсэн валют</span>\n" +" <span class=\"fa fa-lg fa-building-o\" title=\"Эдгээр утгууд нь зөвхөн тухайн компаны хувьд хадгалагдана.\" aria-label=\"Эдгээр утгууд нь зөвхөн тухайн компаны хувьд хадгалагдана.\" groups=\"base.group_multi_company\" role=\"img\"/>" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "<span class=\"o_form_label\">Rounding Method</span>" -msgstr "" +msgstr "<span class=\"o_form_label\">Бүхэлчлэх арга</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_payment_term_line_form msgid "<span class=\"o_form_label\">of the month</span>" -msgstr "" +msgstr "<span class=\"o_form_label\">нэхэмжилсэн сарын</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.partner_view_buttons @@ -373,6 +459,8 @@ msgid "" "<span class=\"text-muted\">Only journals not yet linked to a bank account " "are proposed</span>" msgstr "" +"<span class=\"text-muted\">Банкны данстай хараахан холбогдоогүй байгаа " +"журналуудыг ялган цуглуулсан байна</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.report_invoice_document @@ -380,31 +468,33 @@ msgid "" "<span groups=\"account.group_show_line_subtotals_tax_excluded\">Amount</span>\n" " <span groups=\"account.group_show_line_subtotals_tax_included\">Total Price</span>" msgstr "" +"<span groups=\"account.group_show_line_subtotals_tax_excluded\">Дүн</span>\n" +" <span groups=\"account.group_show_line_subtotals_tax_included\">Нийт үнэ</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.account_journal_dashboard_kanban_view msgid "<span name=\"button_import_placeholder\"/> Statements" -msgstr "" +msgstr "<span name=\"button_import_placeholder\"/> Банкны хуулга" #. module: account #: model_terms:ir.ui.view,arch_db:account.account_journal_dashboard_kanban_view msgid "<span role=\"separator\">New</span>" -msgstr "" +msgstr "<span role=\"separator\">Шинэ</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.account_journal_dashboard_kanban_view msgid "<span role=\"separator\">Reconciliation</span>" -msgstr "" +msgstr "<span role=\"separator\">Тулгалт</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.account_journal_dashboard_kanban_view msgid "<span role=\"separator\">View</span>" -msgstr "" +msgstr "<span role=\"separator\">Харах</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.account_journal_dashboard_kanban_view msgid "<span title=\"Balance in Odoo\">Balance in General Ledger</span>" -msgstr "" +msgstr "<span title=\"Odoo дахь баланс\">Ерөнхий журнал дахь Баланс</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.account_journal_dashboard_kanban_view @@ -424,17 +514,17 @@ msgstr "<span> Хэн рүү </span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.report_payment_receipt_document msgid "<span>Amount Paid</span>" -msgstr "" +msgstr "<span>Төлсөн дүн</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.report_payment_receipt_document msgid "<span>Balance</span>" -msgstr "" +msgstr "<span>Үлдэгдэл</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.report_invoice_document msgid "<span>Description</span>" -msgstr "" +msgstr "<span>Тодорхойлолт</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.report_invoice_document @@ -444,17 +534,17 @@ msgstr "" #. module: account #: model_terms:ir.ui.view,arch_db:account.account_journal_dashboard_kanban_view msgid "<span>Import Bills</span>" -msgstr "" +msgstr "<span>Нэхэмжлэл импорт</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.report_payment_receipt_document msgid "<span>Invoice Date</span>" -msgstr "" +msgstr "<span>Нэхэмжилсэн огноо</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.report_payment_receipt_document msgid "<span>Invoice Number</span>" -msgstr "" +msgstr "<span>Нэхэмжлэлийн дугаар</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.account_journal_dashboard_kanban_view @@ -484,12 +574,12 @@ msgstr "<span>Ажилбар</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.report_payment_receipt_document msgid "<span>Original Amount</span>" -msgstr "" +msgstr "<span>Анхны дүн</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.report_invoice_document msgid "<span>Quantity</span>" -msgstr "" +msgstr "<span>Тоо хэмжээ</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.account_journal_dashboard_kanban_view @@ -499,17 +589,17 @@ msgstr "<span>Тайлангууд</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.report_invoice_document msgid "<span>Source Document</span>" -msgstr "" +msgstr "<span>Эх баримт</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.report_invoice_document msgid "<span>Taxes</span>" -msgstr "" +msgstr "<span>Татвар</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.report_invoice_document msgid "<span>Unit Price</span>" -msgstr "" +msgstr "<span>Нэгж үнэ</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.account_journal_dashboard_kanban_view @@ -527,6 +617,8 @@ msgid "" "<strong class=\"text-center\">Scan me with your banking " "app.</strong><br/><br/>" msgstr "" +"<strong class=\"text-center\">Банкны апп-аараа энэ кодыг уншуулна " +"уу.</strong><br/><br/>" #. module: account #: model_terms:ir.ui.view,arch_db:account.report_invoice_document @@ -534,6 +626,8 @@ msgid "" "<strong class=\"text-center\">The SEPA QR Code informations are not set " "correctly.</strong><br/>" msgstr "" +"<strong class=\"text-center\">SEPA QR Code-ын мэдээлэл зөв тохируулагдаагүй " +"байна.</strong><br/>" #. module: account #: model_terms:ir.ui.view,arch_db:account.portal_invoice_page @@ -671,7 +765,7 @@ msgstr "Төлбөрийн нөхцөл нь зөвхөн нэг Баланс т #: code:addons/account/models/account.py:861 #, python-format msgid "A bank account can belong to only one journal." -msgstr "" +msgstr "Банкны журнал зөвхөн нэг л журналд холбогдсон байх ёстой." #. module: account #: model_terms:ir.actions.act_window,help:account.action_bank_statement_tree @@ -688,6 +782,8 @@ msgstr "" #: model_terms:ir.actions.act_window,help:account.action_bank_statement_line msgid "A bank statement line is a financial transaction on a bank account" msgstr "" +"Банкны хуулганы мөр бүр нь банкны дансанд хийгдэж буй санхүүгийн гүйлгээг " +"илэрхийлнэ" #. module: account #: model_terms:ir.actions.act_window,help:account.action_move_journal_line @@ -716,6 +812,9 @@ msgid "" "posted. Those will be posted automatically after performing the bank " "reconciliation." msgstr "" +"Төлбөрийн журнал дээр журналын бичилтүүдийг банкны хуулга талаас холбож " +"баталгаажуулах тохиргоо хийгдсэн үед тэгдээгийг гараар баталгаажуулах " +"боломжгүй байна. Банкны хуулга тулгалт хийх үед автоматаар батлагдана." #. module: account #: code:addons/account/models/reconciliation_widget.py:692 @@ -750,7 +849,7 @@ msgstr "" #. module: account #: sql_constraint:account.fiscal.position.tax:0 msgid "A tax fiscal position could be defined only one time on same taxes." -msgstr "" +msgstr "Татварын тайлангийн тохируулганд нэг татвар нэг л удаа ашиглагдана." #. module: account #: model:res.groups,name:account.group_warning_account @@ -793,11 +892,13 @@ msgid "" "Account %s (%s) does not allow reconciliation. First change the " "configuration of this account to allow it." msgstr "" +"%s (%s) данс тулгалт хийхийг зөвшөөрөөгүй байна. Эхлээд дансны тохиргоо дээр" +" энэ үйлдлийг зөвшөөрч тохируулах хэрэгтэй." #. module: account #: model:ir.model,name:account.model_account_cash_rounding msgid "Account Cash Rounding" -msgstr "" +msgstr "Бэлэн мөнгө тоймчлол" #. module: account #: model:ir.model,name:account.model_account_chart_template @@ -846,12 +947,12 @@ msgstr "Данс Эзэмшигч" #. module: account #: model:ir.model.fields,field_description:account.field_account_setup_bank_manual_config__acc_holder_name msgid "Account Holder Name" -msgstr "" +msgstr "Данс эзэмшигчийн нэр" #. module: account #: model:ir.model,name:account.model_account_invoice_send msgid "Account Invoice Send" -msgstr "" +msgstr "Нэхэмжлэл илгээгдсэн" #. module: account #: model:ir.model.fields,field_description:account.field_account_setup_bank_manual_config__journal_id @@ -865,7 +966,7 @@ msgstr "Санхүүгийн журнал" #. module: account #: model:ir.model,name:account.model_report_account_report_journal msgid "Account Journal Report" -msgstr "" +msgstr "Санхүүгийн журналын тайлан" #. module: account #: model:ir.model.fields,field_description:account.field_account_fiscal_position__account_ids @@ -911,7 +1012,7 @@ msgstr "Авлагын данс" #. module: account #: model:ir.model,name:account.model_account_reconciliation_widget msgid "Account Reconciliation widget" -msgstr "" +msgstr "Дансны тулгалтын модел" #. module: account #: model:ir.model.fields,field_description:account.field_account_fiscal_position_account_template__account_src_id @@ -952,7 +1053,7 @@ msgstr "Санхүүгийн татварын үлгэр" #. module: account #: model:ir.model.fields,field_description:account.field_res_config_settings__module_account_taxcloud msgid "Account TaxCloud" -msgstr "" +msgstr "TaxCloud" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_chart_template_seacrh @@ -1015,12 +1116,12 @@ msgstr "Дансны тулгалтыг салгах" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_group_search msgid "Account group" -msgstr "" +msgstr "Дансны бүлэг" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_group_search msgid "Account groups" -msgstr "" +msgstr "Дансны бүлэг" #. module: account #: model:ir.model.fields,help:account.field_account_setup_bank_manual_config__acc_holder_name @@ -1028,6 +1129,8 @@ msgid "" "Account holder name, in case it is different than the name of the Account " "Holder" msgstr "" +"Данс эзэмшигчийн нэр, Данс эзэмшигчийн бүртгэлтэй нэр нь Odoo дээрх нэрээс " +"өөр байх тохиолдолд энэ талбарыг ашиглана" #. module: account #: model:ir.model.fields,field_description:account.field_account_fiscal_position_account__account_src_id @@ -1037,7 +1140,7 @@ msgstr "Бараан дээрх Данс" #. module: account #: model:ir.model,name:account.model_report_account_report_invoice_with_payments msgid "Account report with payment lines" -msgstr "" +msgstr "Төлбөр төлөлттэй холбоотой тайлан" #. module: account #: model:ir.model.fields,field_description:account.field_account_account_template__tag_ids @@ -1081,6 +1184,8 @@ msgid "" "Account that will be set on lines created in cash basis journal entry and " "used to keep track of the tax base amount." msgstr "" +"Мөнгөн суурьт ажил гүйлгээ бүртгэх үед ашиглагдах данс бөгөөд энэхүү дансаар" +" татвар ногдох дүнг мөшгиж болно." #. module: account #: model:ir.model.fields,field_description:account.field_account_fiscal_position_account__account_dest_id @@ -1102,7 +1207,7 @@ msgstr "" #: model:ir.cron,cron_name:account.ir_cron_reverse_entry #: model:ir.cron,name:account.ir_cron_reverse_entry msgid "Account; Reverse entries" -msgstr "" +msgstr "Санхүү -> Урвуу гүйлгээ" #. module: account #: model:ir.model.fields,field_description:account.field_res_config_settings__module_account_accountant @@ -1166,12 +1271,12 @@ msgstr "Дансны харгалзаа" #. module: account #: model:ir.model,name:account.model_account_fiscal_position_account_template msgid "Accounts Mapping Template of Fiscal Position" -msgstr "" +msgstr "Татварын тайлан тохируулга дахь дансны загварын харгалзаа" #. module: account #: model:ir.model,name:account.model_account_fiscal_position_account msgid "Accounts Mapping of Fiscal Position" -msgstr "" +msgstr "Татварын тайлан тохируулга дахь дансны харгалзаа" #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement__message_needaction @@ -1235,32 +1340,32 @@ msgstr "Буцаалт нэмэх" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_send__add_sign msgid "Add Sign" -msgstr "" +msgstr "Гарын үсэг нэмэх" #. module: account #: model_terms:ir.ui.view,arch_db:account.onboarding_bank_account_step msgid "Add a bank" -msgstr "" +msgstr "Банк нэмэх" #. module: account #: model_terms:ir.actions.act_window,help:account.action_account_journal_form msgid "Add a journal" -msgstr "" +msgstr "Журнал нэмэх" #. module: account #: model_terms:ir.ui.view,arch_db:account.invoice_form msgid "Add a line" -msgstr "" +msgstr "Мөр нэмэх" #. module: account #: model_terms:ir.actions.act_window,help:account.action_account_form msgid "Add a new account" -msgstr "" +msgstr "Шинэ данс нэмэх" #. module: account #: model_terms:ir.actions.act_window,help:account.account_tag_action msgid "Add a new tag" -msgstr "" +msgstr "Шинэ пайз нэмэх" #. module: account #: model_terms:ir.ui.view,arch_db:account.invoice_form @@ -1270,12 +1375,12 @@ msgstr "" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Add a payment QR code to your invoices" -msgstr "" +msgstr "Өөрийн нэхэмжлэлдээ төлбөрийн QR код нэмэх" #. module: account #: selection:account.cash.rounding,strategy:0 msgid "Add a rounding line" -msgstr "" +msgstr "Мөнгөний нарийвчлалын мөр нэмэх" #. module: account #: model:ir.model.fields,field_description:account.field_account_reconcile_model__has_second_line @@ -1296,6 +1401,9 @@ msgid "" " with their mobile banking application. EPC QR codes are used by many " "European banks to process SEPA payments." msgstr "" +"Та нэхэмжлэлдээ EPC QR код нэмсэнээр танай харилцагч банкны мобайт апп " +"ашиглан төлбөрөө хялбарханаар төлөх боломжтой юм. EPC QR код нь европын " +"банкуудад түгээмэл ашиглагддаг SEPA төлбөрийн технологи юм." #. module: account #: model_terms:ir.ui.view,arch_db:account.view_move_form @@ -1327,7 +1435,7 @@ msgstr "Нэмэлт тэмдэглэлүүд..." #: selection:account.tax,type_tax_use:0 #: selection:account.tax.template,type_tax_use:0 msgid "Adjustment" -msgstr "" +msgstr "Тохируулга" #. module: account #: model:ir.model.fields,field_description:account.field_tax_adjustments_wizard__tax_id @@ -1368,7 +1476,7 @@ msgstr "Харилцагчийн балансын насжилт" #. module: account #: model:ir.model,name:account.model_report_account_report_agedpartnerbalance msgid "Aged Partner Balance Report" -msgstr "" +msgstr "Харилцагчийн үлдэгдэл насжилтын тайлан" #. module: account #: model:ir.model.fields,field_description:account.field_account_journal__alias_id @@ -1378,7 +1486,7 @@ msgstr "Хуурмаг нэр" #. module: account #: model:ir.model.fields,field_description:account.field_account_journal__alias_name msgid "Alias Name for Vendor Bills" -msgstr "" +msgstr "Нийлүүлэгчийн нэхэмжлэлийн имэйл нэр" #. module: account #: model:ir.model.fields,field_description:account.field_account_journal__alias_domain @@ -1454,7 +1562,7 @@ msgstr "Бүх нэхэмжлэл болон төлбөрийг тулгахыг #. module: account #: model:ir.model.fields,field_description:account.field_res_config_settings__module_product_margin msgid "Allow Product Margin" -msgstr "" +msgstr "Барааны ашиг хянах" #. module: account #: model:ir.model.fields,field_description:account.field_account_account__reconcile @@ -1469,22 +1577,26 @@ msgstr "Чек хэвлэх болон урьдчилгаа хадгаламжи #. module: account #: model:res.groups,name:account.group_cash_rounding msgid "Allow the cash rounding management" -msgstr "" +msgstr "Мөнгөний нарийвчлал удирдлагыг идэвхижүүлэх" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Allow to configure taxes using cash basis" -msgstr "" +msgstr "Мөнгөн суурьтай татвар тооцоолол тохируулгыг идэвхижүүлэх" #. module: account #: model:res.groups,name:account.group_fiscal_year msgid "Allow to define fiscal years of more or less than a year" msgstr "" +"Санхүүгийн жилийглендарын жилээс их эсвэл багаар тогтоох боломжыг " +"идэвхижүүлэх" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Allows to tag analytic entries and to manage analytic distributions" msgstr "" +"Шинжилгээний дансны пайз ашиглан бүлгийн шинжилгээ хийх боломжыг " +"идэвхижүүлэх" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form @@ -1520,12 +1632,12 @@ msgstr "Дүн" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_line__price_total msgid "Amount (with Taxes)" -msgstr "" +msgstr "Дүн (татвартай)" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_line__price_subtotal msgid "Amount (without Taxes)" -msgstr "" +msgstr "Дүн (татваргүй)" #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement_line__amount_currency @@ -1536,7 +1648,7 @@ msgstr "Валютаарх дүн" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_tax__amount_rounding msgid "Amount Delta" -msgstr "" +msgstr "Тоймчлох утга" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice__residual @@ -1559,31 +1671,31 @@ msgstr "Төлөх дүн нэхэмжлэлийн валютаар" #: model:ir.model.fields,field_description:account.field_account_reconcile_model__match_total_amount #: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__match_total_amount msgid "Amount Matching" -msgstr "" +msgstr "Тулгалт хийх дүн" #. module: account #: model:ir.model.fields,field_description:account.field_account_reconcile_model__match_total_amount_param #: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__match_total_amount_param msgid "Amount Matching %" -msgstr "" +msgstr "Тулгалт хийх дүн %" #. module: account #: model:ir.model.fields,field_description:account.field_account_reconcile_model__match_amount_max #: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__match_amount_max msgid "Amount Max Parameter" -msgstr "" +msgstr "Тулгах дүнгийн дээд хязгаар" #. module: account #: model:ir.model.fields,field_description:account.field_account_reconcile_model__match_amount_min #: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__match_amount_min msgid "Amount Min Parameter" -msgstr "" +msgstr "Тулгах дүнгийн доод хязгаар" #. module: account #: model:ir.model.fields,field_description:account.field_account_reconcile_model__match_nature #: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__match_nature msgid "Amount Nature" -msgstr "" +msgstr "Тулгалтын хамрах хүрээ" #. module: account #: selection:account.reconcile.model,match_nature:0 @@ -1595,13 +1707,13 @@ msgstr "Төлсөн дүн" #: selection:account.reconcile.model,match_nature:0 #: selection:account.reconcile.model.template,match_nature:0 msgid "Amount Paid/Received" -msgstr "" +msgstr "Гаргасан төлбөр/Хүлээн авсан төлбөрийн дүн" #. module: account #: selection:account.reconcile.model,match_nature:0 #: selection:account.reconcile.model.template,match_nature:0 msgid "Amount Received" -msgstr "" +msgstr "Хүлээн авсан төлбөрийн дүн" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_line__price_subtotal_signed @@ -1611,7 +1723,7 @@ msgstr "Дүн тэмдэгтэй" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_tax__amount_total msgid "Amount Total" -msgstr "" +msgstr "Нийт дүн" #. module: account #: model:ir.model.fields,field_description:account.field_account_reconcile_model__amount_type @@ -1646,7 +1758,7 @@ msgstr "Дүн:" #: sql_constraint:account.fiscal.position.account:0 msgid "" "An account fiscal position could be defined only one time on same accounts." -msgstr "" +msgstr "Татварын тайлан тохируулганд нэг данс нэг л удаа ашиглагдана." #. module: account #: model_terms:ir.actions.act_window,help:account.action_account_form @@ -1702,7 +1814,7 @@ msgstr "Шинжилгээний данс" #: model:ir.ui.menu,name:account.account_analytic_group_menu #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Analytic Account Groups" -msgstr "" +msgstr "Шинжилгээний дансны бүлэг" #. module: account #: model:ir.model.fields,field_description:account.field_res_config_settings__group_analytic_accounting @@ -1754,7 +1866,7 @@ msgstr "Шинжилгээний Пайзууд" #: code:addons/account/static/src/xml/account_reconciliation.xml:193 #, python-format msgid "Analytic Tags." -msgstr "" +msgstr "Шинжилгээний пайз" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_tax__account_analytic_id @@ -1798,7 +1910,7 @@ msgstr "Журналын кредит гүйлгээний мөрөнд хэрэ #. module: account #: selection:tax.adjustments.wizard,adjustment_type:0 msgid "Applied on debit journal item" -msgstr "" +msgstr "Дебет журналын бичилтэнд хэрэгжинэ" #. module: account #: model_terms:ir.ui.view,arch_db:account.account_invoice_onboarding_invoice_layout_form @@ -1818,6 +1930,8 @@ msgstr "Энэ санхүүгийн харгалзааг автоматаар х #: model:ir.model.fields,help:account.field_account_fiscal_position_template__country_group_id msgid "Apply only if delivery or invoicing country match the group." msgstr "" +"Энэхүү бүлэгт хамрагдах улс орны харилцагчидад хүргэлт хийх эсвэл нэхэмжлэл " +"бүртгэх үед энэ татварын тохируулга ашиглагдана." #. module: account #: model:ir.model.fields,help:account.field_account_fiscal_position__country_id @@ -1834,7 +1948,7 @@ msgstr "Харилцагч нь зөвхөн НӨАТ дугаартай байÐ #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Apply right VAT rates for digital products sold in EU" -msgstr "" +msgstr "Европд дижитал бараа зарахад тохирох зөв татварын хувь ашиглах" #. module: account #: selection:res.company,fiscalyear_last_month:0 @@ -1851,7 +1965,7 @@ msgstr "Архивласан" #. module: account #: model_terms:ir.ui.view,arch_db:account.invoice_supplier_form msgid "Ask for a Credit Note" -msgstr "" +msgstr "Буцаалтын нэхэмжлэл үүсгэх" #. module: account #: selection:account.account.type,internal_group:0 @@ -1876,12 +1990,12 @@ msgstr "Холбогдох Дансны Үлгэр" #. module: account #: model:ir.model.fields,field_description:account.field_account_journal__at_least_one_inbound msgid "At Least One Inbound" -msgstr "" +msgstr "Төлбөр хүлээн авах сувагтай" #. module: account #: model:ir.model.fields,field_description:account.field_account_journal__at_least_one_outbound msgid "At Least One Outbound" -msgstr "" +msgstr "Төлбөр илгээх сувагтай" #. module: account #: model_terms:ir.ui.view,arch_db:account.account_invoice_send_wizard_form @@ -1941,7 +2055,7 @@ msgstr "" #. module: account #: model:ir.model.fields,help:account.field_account_invoice__vendor_bill_id msgid "Auto-complete from a past bill." -msgstr "" +msgstr "Өнгөрсөн нэхэмжлэлээс автоматаар бөглөгдөх." #. module: account #: model_terms:ir.ui.view,arch_db:account.invoice_supplier_form @@ -1952,49 +2066,50 @@ msgstr "Автомат-таних" #: model:ir.model.fields,field_description:account.field_account_reconcile_model__auto_reconcile #: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__auto_reconcile msgid "Auto-validate" -msgstr "" +msgstr "Автомат-батлах" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Autocomplete Vendor Bills (OCR + AI)" -msgstr "" +msgstr "Нийлүүлэгчийн нэхэмжлэл автоматаар бөглөх (OCR + AI)" #. module: account #: model:ir.model.fields,field_description:account.field_res_config_settings__module_account_invoice_extract msgid "Automate Bill Processing" -msgstr "" +msgstr "Автомат нэхэмжлэл боловсруулалт" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Automate deferred revenues entries for multi-year contracts" msgstr "" +"Урт хугацааны гэрээний дагуу урьдчилж тооцсон орлогыг автоматаар бүртгэх" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Automated Entries" -msgstr "" +msgstr "Автомат гүйлгээ" #. module: account #: code:addons/account/models/company.py:430 #, python-format msgid "Automatic Balancing Line" -msgstr "" +msgstr "Автомат нээлтийн үлдэгдлийн бичилт" #. module: account #: model:ir.model.fields,field_description:account.field_res_config_settings__module_currency_rate_live msgid "Automatic Currency Rates" -msgstr "" +msgstr "Автомат ханш бүртгэл" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Automatic Import" -msgstr "" +msgstr "Автомат импорт" #. module: account #: code:addons/account/models/account_move.py:390 #, python-format msgid "Automatic reversal of: %s" -msgstr "" +msgstr "%s-ын автомат урвуу гүйлгээ" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_report__price_average @@ -2004,7 +2119,7 @@ msgstr "Дундаж Үнэ" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_report__user_currency_price_average msgid "Average Price in Currency" -msgstr "" +msgstr "Валютаарх дундаж үнэ" #. module: account #: code:addons/account/models/chart_template.py:419 @@ -2026,7 +2141,7 @@ msgstr "Баланс" #. module: account #: model:ir.model.fields,field_description:account.field_account_move_line__balance_cash_basis msgid "Balance Cash Basis" -msgstr "" +msgstr "Мөнгөн суурьт баланс" #. module: account #: model:ir.model.fields,help:account.field_account_bank_statement__balance_end @@ -2048,7 +2163,7 @@ msgstr "Банк" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Bank & Cash" -msgstr "" +msgstr "Банк & Касс" #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement_line__bank_account_id @@ -2065,7 +2180,7 @@ msgstr "Банкны данс" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_bank_journal_form msgid "Bank Account Name" -msgstr "" +msgstr "Банкны дансны нэр" #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement_line__account_number @@ -2079,6 +2194,9 @@ msgid "" "account if this is a Customer Invoice or Vendor Credit Note, otherwise a " "Partner bank account number." msgstr "" +"Нэхэмжлэлийн төлбөр шилжүүлэх банкны дансны дугаар. Хэрэв захиалагчийн " +"нэхэмжлэл эсвэл нийлүүлэгчийн буцаалтын нэхэмжлэл бол энд компаны өөрийн " +"банкны данс байх ба бусад тохиолдолд харилцагчийн банкны данс сонгогдоно." #. module: account #: model:ir.actions.act_window,name:account.action_account_bank_journal_form @@ -2134,7 +2252,7 @@ msgstr "Хөдөлгөөний Урьдчилсан тохируулгаарх Ð #: model:ir.model.fields,field_description:account.field_res_company__account_bank_reconciliation_start #: model:ir.model.fields,field_description:account.field_res_config_settings__account_bank_reconciliation_start msgid "Bank Reconciliation Threshold" -msgstr "" +msgstr "Банкны тулгалтын эхлэх цэг" #. module: account #: model:ir.model,name:account.model_account_bank_statement @@ -2147,17 +2265,17 @@ msgstr "Банкны хуулга" #: code:addons/account/models/account_bank_statement.py:602 #, python-format msgid "Bank Statement %s" -msgstr "" +msgstr "Банкны хуулга %s" #. module: account #: model:ir.model,name:account.model_account_bank_statement_cashbox msgid "Bank Statement Cashbox" -msgstr "" +msgstr "Банкны хуулгын мөнгөний сав" #. module: account #: model:ir.model,name:account.model_account_bank_statement_closebalance msgid "Bank Statement Closing Balance" -msgstr "" +msgstr "Банкны хуулгын хаалтын үлдэгдэл" #. module: account #: model:ir.model,name:account.model_account_bank_statement_line @@ -2178,13 +2296,14 @@ msgstr "Банкны хуулгууд" #. module: account #: model:ir.model.fields,help:account.field_account_bank_statement_line__bank_account_id msgid "Bank account that was used in this transaction." -msgstr "" +msgstr "Энэ гүйлгээнд ашиглагдсан банкны данс." #. module: account #: model:ir.model.fields,help:account.field_account_setup_bank_manual_config__acc_type msgid "" "Bank account type: Normal or IBAN. Inferred from the bank account number." msgstr "" +"Банкны дансны төрөл: Энгийн эсвэл IBAN. Банкны дансны дугаараар ялгагддаг." #. module: account #: model:account.account.type,name:account.data_account_type_liquidity @@ -2194,7 +2313,7 @@ msgstr "Касс болон харилцах" #. module: account #: model:ir.model,name:account.model_account_setup_bank_manual_config msgid "Bank setup manual config" -msgstr "" +msgstr "Банкны данс тохируулга" #. module: account #: model:ir.model.fields,field_description:account.field_account_move_line__statement_line_id @@ -2210,7 +2329,7 @@ msgstr "Банкны хуулгууд" #: code:addons/account/models/account_journal_dashboard.py:36 #, python-format msgid "Bank: Balance" -msgstr "" +msgstr "Банк: Үлдэгдэл" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_tax__base @@ -2227,25 +2346,25 @@ msgstr "Суурь Дүн" #: model:ir.model.fields,field_description:account.field_account_tax__cash_basis_base_account_id #: model:ir.model.fields,field_description:account.field_account_tax_template__cash_basis_base_account_id msgid "Base Tax Received Account" -msgstr "" +msgstr "Мөнгөн суурьт татварын данс" #. module: account #: code:addons/account/models/company.py:19 #, python-format msgid "Based on Customer" -msgstr "" +msgstr "Захиалагч дээр суурилсан" #. module: account #: selection:account.tax,tax_exigibility:0 #: selection:account.tax.template,tax_exigibility:0 msgid "Based on Invoice" -msgstr "" +msgstr "Нэхэмжлэл дээр суурилсан" #. module: account #: code:addons/account/models/company.py:19 #, python-format msgid "Based on Invoice Number" -msgstr "" +msgstr "Нэхэмжлэлийн дугаар дээр суурилсан" #. module: account #: model:ir.model.fields,help:account.field_account_tax__tax_exigibility @@ -2254,17 +2373,19 @@ msgid "" "Based on Invoice: the tax is due as soon as the invoice is validated.\n" "Based on Payment: the tax is due as soon as the payment of the invoice is received." msgstr "" +"Нэхэмжлэл дээр суурилсан: нэхэмжэл батлагдахад татвар хүлээн зөвшөөрөгдөнө.\n" +"Төлөлт дээр суурилсан: нэхэмжлэлийн төлбөр бүртгэгдэх үед татвар хүлээн зөвшөөрөгдөнө." #. module: account #: selection:account.tax,tax_exigibility:0 #: selection:account.tax.template,tax_exigibility:0 msgid "Based on Payment" -msgstr "" +msgstr "Төлөлт дээр суурилсан" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Batch Payments" -msgstr "" +msgstr "Багц төлөлт" #. module: account #: model:ir.model.fields,field_description:account.field_account_journal__belongs_to_company @@ -2296,7 +2417,7 @@ msgstr "Тооцоо" #. module: account #: model:res.groups,name:account.group_account_manager msgid "Billing Manager" -msgstr "" +msgstr "Нэхэмжлэлийн менежер" #. module: account #: model:ir.actions.server,name:account.action_invoice_tree2 @@ -2399,12 +2520,12 @@ msgstr "" #: code:addons/account/models/chart_template.py:422 #, python-format msgid "CABA" -msgstr "" +msgstr "CABA" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "CAMT Import" -msgstr "" +msgstr "CAMT импорт" #. module: account #: model:account.incoterms,name:account.incoterm_CIP @@ -2429,7 +2550,7 @@ msgstr "ӨРТӨГ, ДААТГАЛ БА ТЭЭВЭРЛЭЛТ" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "CSV Import" -msgstr "" +msgstr "CSV импорт" #. module: account #: model:ir.model.fields,field_description:account.field_account_chart_template__visible @@ -2461,7 +2582,7 @@ msgstr "Цуцлах" #. module: account #: selection:account.invoice.refund,filter_refund:0 msgid "Cancel: create credit note and reconcile" -msgstr "" +msgstr "Цуцлах: буцаалтын нэхэмжлэл үүсгэж тулгалт хийх" #. module: account #: selection:account.invoice,state:0 selection:account.invoice.report,state:0 @@ -2482,12 +2603,15 @@ msgid "" "invoice should be unreconciled first, then only you can add credit note for " "this invoice." msgstr "" +"Ямар нэг төлөлттэй холболт хийсэн нэхэмжлэлд буцаалт хийх боломжгүй. Та " +"зөвхөн эхлээд нэхэмжлэл холболтыг салгасан цагт л буцаалтын нэхэмжлэл " +"бүртгэх боломжтой." #. module: account #: code:addons/account/wizard/account_invoice_refund.py:54 #, python-format msgid "Cannot create credit note for the draft/cancelled invoice." -msgstr "" +msgstr "Ноорог эсвэл цуцлагдсан нэхэмжлэлд буцаалт бүртгэх боломжгүй." #. module: account #: code:addons/account/models/account_move.py:349 @@ -2542,23 +2666,23 @@ msgstr "Мөнгөн суурь" #. module: account #: model:ir.model.fields,field_description:account.field_res_company__tax_cash_basis_journal_id msgid "Cash Basis Journal" -msgstr "" +msgstr "Мөнгөн суурьт журнал" #. module: account #: code:addons/account/models/chart_template.py:422 #, python-format msgid "Cash Basis Tax Journal" -msgstr "" +msgstr "Мөнгөн суурьт татварын журнал" #. module: account #: model:ir.model,name:account.model_cash_box_in msgid "Cash Box In" -msgstr "" +msgstr "Мөнгө нэмэгдүүлэх" #. module: account #: model:ir.model,name:account.model_cash_box_out msgid "Cash Box Out" -msgstr "" +msgstr "Мөнгө хорогдуулах" #. module: account #: code:addons/account/models/account_bank_statement.py:212 @@ -2580,19 +2704,19 @@ msgstr "Кассын бүртгэлүүд" #. module: account #: model:ir.model.fields,field_description:account.field_res_config_settings__group_cash_rounding msgid "Cash Rounding" -msgstr "" +msgstr "Кассын бүхэлчлэл" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice__cash_rounding_id msgid "Cash Rounding Method" -msgstr "" +msgstr "Кассын бүхэлчлэх арга" #. module: account #: model:ir.actions.act_window,name:account.rounding_list_action #: model:ir.ui.menu,name:account.menu_action_rounding_form_view #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Cash Roundings" -msgstr "" +msgstr "Кассын бүхэлчлэл" #. module: account #: code:addons/account/models/account_bank_statement.py:187 @@ -2604,7 +2728,7 @@ msgstr "Тоолж үзэхэд кассын зөрүү илэрлээ (%s)" #: code:addons/account/models/account_journal_dashboard.py:34 #, python-format msgid "Cash: Balance" -msgstr "" +msgstr "Касс: Үлдэгдэл" #. module: account #: model:ir.model,name:account.model_account_cashbox_line @@ -2636,7 +2760,7 @@ msgstr "Орлогын дансны ангилал" #: model:ir.model.fields,help:account.field_account_payment__writeoff_label #: model:ir.model.fields,help:account.field_account_register_payments__writeoff_label msgid "Change label of the counterpart that will hold the payment difference" -msgstr "" +msgstr "Төлбөрийн зөрүүг хаахтай холбоотой товч тайлбар" #. module: account #: code:addons/account/controllers/portal.py:103 @@ -2655,6 +2779,8 @@ msgid "" "Changing your company name is not allowed once invoices have been issued for" " your account. Please contact us directly for this operation." msgstr "" +"Нэхэмжлэл танай санхүү бүртгэлд тусгагдсанаас хойш та өөрийн компаны нэрийг " +"өөрчлөх боломжгүй. Үүний тулд бидэнтэй шууд холбогдоно уу." #. module: account #: code:addons/account/controllers/portal.py:106 @@ -2708,7 +2834,7 @@ msgstr "Дансны төлөвлөгөөний үлгэр" #. module: account #: model_terms:ir.ui.view,arch_db:account.onboarding_chart_of_account_step msgid "Chart of account set." -msgstr "" +msgstr "Дансны мод суулгах." #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_list @@ -2740,6 +2866,8 @@ msgid "" "Check this box if you don't want to share the same sequence for invoices and" " credit notes made from this journal" msgstr "" +"Үүнийг сонгосноор энэхүү журналд бүртгэгдэх нэхэмжлэл болон буцаалтууд нь " +"дахин давтагдашгүй дугаарлалттай байх болно" #. module: account #: model:ir.model.fields,help:account.field_account_journal__update_posted @@ -2797,14 +2925,14 @@ msgstr "Дансны үлгэрийг сонгоно уу" #: model_terms:ir.ui.view,arch_db:account.account_invoice_onboarding_sale_tax_form #: model_terms:ir.ui.view,arch_db:account.onboarding_sale_tax_step msgid "Choose a default sales tax for your products." -msgstr "" +msgstr "Бараандаа байнга ашиглагдах борлуулалтын татвар тохируулна уу." #. module: account #. openerp-web #: code:addons/account/static/src/xml/account_reconciliation.xml:137 #, python-format msgid "Choose counterpart or Create Write-off" -msgstr "" +msgstr "Холбох гүйлгээг сонго эсвэл зөрүүг хаах бичилт үүсгэнэ үү" #. module: account #: model:ir.model.fields,help:account.field_account_invoice_refund__filter_refund @@ -2812,25 +2940,27 @@ msgid "" "Choose how you want to credit this invoice. You cannot Modify and Cancel if " "the invoice is already reconciled" msgstr "" +"Энэ нэхэмжлэлийг хэрхэн буцаахаа сонгоно уу. Хэрэв уг нэхэмжлэлд төлөлт " +"хийгдсэн байвал Засах болон Цуцлах аргууд ажиллахгүй" #. module: account #: model_terms:ir.actions.act_window,help:account.actions_account_fiscal_year msgid "Click here to create a new fiscal year." -msgstr "" +msgstr "Энд дарж шинэ санхүүгийн жил үүсгэнэ." #. module: account #. openerp-web #: code:addons/account/static/src/js/tour.js:19 #, python-format msgid "Click to <b>send the invoice by email.</b>" -msgstr "" +msgstr "Энд дарж <b>нэхэмжлэлийг имэйлээр илгээнэ.</b>" #. module: account #. openerp-web #: code:addons/account/static/src/js/tour.js:23 #, python-format msgid "Click to <b>send the invoice.</b>" -msgstr "" +msgstr "Энд дарж <b>нэхэмжлэлийг илгээнэ.</b>" #. module: account #. openerp-web @@ -2840,13 +2970,15 @@ msgid "" "Click to <b>validate your invoice.</b> A reference will be assigned to this " "invoice and you will not be able to modify it anymore." msgstr "" +"Энд дарж <b>нэхэмжлэлээ баталгаажуулна.</b> Ингэснээр нэхэмжлэлд дугаар " +"оноогдох бөгөөд та нэхэмжлэлээ засаж өөрчлөх боломжгүй болно." #. module: account #. openerp-web #: code:addons/account/static/src/xml/account_reconciliation.xml:17 #, python-format msgid "Click to Rename" -msgstr "" +msgstr "Энд дарж нэр өөрчилнө" #. module: account #. openerp-web @@ -2860,7 +2992,7 @@ msgstr "Хаах" #: code:addons/account/static/src/xml/account_reconciliation.xml:66 #, python-format msgid "Close statement" -msgstr "" +msgstr "Хуулга хаах" #. module: account #: selection:res.company,account_dashboard_onboarding_state:0 @@ -2889,7 +3021,7 @@ msgstr "Код" #. module: account #: model:ir.model.fields,field_description:account.field_account_group__code_prefix msgid "Code Prefix" -msgstr "" +msgstr "Кодын угтвар" #. module: account #: model:ir.model.fields,field_description:account.field_account_cashbox_line__coin_value @@ -2909,6 +3041,8 @@ msgid "" "Collect information and produce statistics on the trade in goods in Europe " "with intrastat." msgstr "" +"Europe intrastat систем ашиглан барааны зах зээлийн мэдээлэл цуглуулж дүн " +"шинжилгээ хийх." #. module: account #: model:ir.model.fields,field_description:account.field_account_account_tag__color @@ -2927,11 +3061,12 @@ msgstr "Худалдааны Этгээд" #, python-format msgid "Commercial partner and vendor account owners must be identical." msgstr "" +"Албан ёсны харилцагч ба нийлүүлэгчийн дансны эзэмшигч хоёр ижил байх ёстой." #. module: account #: model:ir.model,name:account.model_account_common_journal_report msgid "Common Journal Report" -msgstr "" +msgstr "Ерөнхий журналын тайлан" #. module: account #: model:ir.actions.act_window,name:account.action_account_common_menu @@ -3014,7 +3149,7 @@ msgstr "Татваруудын Олонлогийг Гүйцээнэ үү" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_send__composer_id msgid "Composer" -msgstr "" +msgstr "Илгээгч" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_send__composition_mode @@ -3024,7 +3159,7 @@ msgstr "Үүсгэх горим" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Compute tax rates based on U.S. ZIP codes" -msgstr "" +msgstr "U.S. зип кодноос хамааруулж татварын дүнг тооцох" #. module: account #: model:ir.model.fields,help:account.field_account_move_line__counterpart @@ -3043,7 +3178,7 @@ msgstr "Тооцоолсон Баланс" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_reconcile_model_form msgid "Conditions on Bank Statement Line" -msgstr "" +msgstr "Банкны хуулганы мөрийн шалгуур" #. module: account #: model:ir.model,name:account.model_res_config_settings @@ -3094,7 +3229,7 @@ msgstr "Нэхэмжлэл батлах" #. module: account #: model:ir.actions.server,name:account.action_account_confirm_payments msgid "Confirm Payments" -msgstr "" +msgstr "Төлбөр батлах" #. module: account #: model:ir.model,name:account.model_account_invoice_confirm @@ -3120,12 +3255,12 @@ msgstr "" #: code:addons/account/static/src/xml/account_reconciliation.xml:54 #, python-format msgid "Congrats, you're all done!" -msgstr "" +msgstr "Баяр хүргэе, та ажлаа дуусгалаа!" #. module: account #: model_terms:ir.ui.view,arch_db:account.account_invoice_onboarding_panel msgid "Congratulations! You are all set." -msgstr "" +msgstr "Баяр хүргэе! Та бүхнийг тохирууллаа." #. module: account #: model:ir.model,name:account.model_res_partner @@ -3156,7 +3291,7 @@ msgstr "Агуулга" #: model:ir.model.fields,field_description:account.field_res_partner__contracts_count #: model:ir.model.fields,field_description:account.field_res_users__contracts_count msgid "Contracts Count" -msgstr "" +msgstr "Гэрээний тоо" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_journal_form @@ -3170,6 +3305,8 @@ msgid "" "Correction of <a href=# data-oe-model=account.invoice data-oe-" "id=%d>%s</a><br>Reason: %s" msgstr "" +"Буцаалтын <a href=# data-oe-model=account.invoice data-oe-" +"id=%d>%s</a><br>Шалтгаан: %s" #. module: account #: model:account.account.type,name:account.data_account_type_direct_costs @@ -3183,6 +3320,8 @@ msgid "" "Could not install new chart of account as there are already accounting " "entries existing." msgstr "" +"Ямар нэг ажил гүйлгээ бүртгэгдсэний дараа дансны мод шинээр суулгах " +"боломжгүй." #. module: account #: model:ir.model.fields,field_description:account.field_account_move_line__counterpart @@ -3197,7 +3336,7 @@ msgstr "Харьцсан Данс" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_reconcile_model_form msgid "Counterpart Values" -msgstr "" +msgstr "Харьцсан дүн" #. module: account #: model:ir.model.fields,field_description:account.field_account_fiscal_position__country_id @@ -3220,84 +3359,84 @@ msgstr "Үүсгэх" #. module: account #: model:ir.model.fields,field_description:account.field_account_setup_bank_manual_config__create_or_link_option msgid "Create Or Link Option" -msgstr "" +msgstr "Үүсгэх эсвэл утга холбох" #. module: account #: code:addons/account/models/company.py:292 #, python-format msgid "Create a Bank Account" -msgstr "" +msgstr "Банкны данс үүсгэх" #. module: account #: model_terms:ir.actions.act_window,help:account.action_account_bank_journal_form msgid "Create a bank account" -msgstr "" +msgstr "Банкны данс үүсгэх" #. module: account #: model_terms:ir.actions.act_window,help:account.action_invoice_out_refund msgid "Create a credit note" -msgstr "" +msgstr "Буцаалтын нэхэмжлэл үүсгэх" #. module: account #: model_terms:ir.actions.act_window,help:account.action_invoice_tree1 msgid "Create a customer invoice" -msgstr "" +msgstr "Захиалагчийн нэхэмжлэл үүсгэх" #. module: account #: selection:account.invoice.refund,filter_refund:0 msgid "Create a draft credit note" -msgstr "" +msgstr "Ноорог буцаалт үүсгэх" #. module: account #: model_terms:ir.actions.act_window,help:account.action_move_journal_line msgid "Create a journal entry" -msgstr "" +msgstr "Ажил гүйлгээ үүсгэх" #. module: account #: model_terms:ir.actions.act_window,help:account.action_account_group_tree msgid "Create a new account group" -msgstr "" +msgstr "Шинэ дансны бүлэг үүсгэх" #. module: account #: model_terms:ir.actions.act_window,help:account.action_view_bank_statement_tree msgid "Create a new cash log" -msgstr "" +msgstr "Шинэ кассын бүртгэл нээх" #. module: account #: model_terms:ir.actions.act_window,help:account.action_account_fiscal_position_form #: model_terms:ir.actions.act_window,help:account.action_account_fiscal_position_template_form msgid "Create a new fiscal position" -msgstr "" +msgstr "Татварын тайлангийн тохируулга үүсгэх" #. module: account #: model_terms:ir.actions.act_window,help:account.action_incoterms_tree msgid "Create a new incoterm" -msgstr "" +msgstr "Инкотерм шинээр бүртгэх" #. module: account #: model_terms:ir.actions.act_window,help:account.product_product_action_purchasable msgid "Create a new purchasable product" -msgstr "" +msgstr "Худалдан авдаг бараа шинээр бүртгэх" #. module: account #: model_terms:ir.actions.act_window,help:account.action_account_reconcile_model msgid "Create a new reconciliation model" -msgstr "" +msgstr "Тулгалтын загвар шинээр бүртгэх" #. module: account #: model_terms:ir.actions.act_window,help:account.product_product_action_sellable msgid "Create a new sellable product" -msgstr "" +msgstr "Борлуулах бараа шинээр бүртгэх" #. module: account #: model_terms:ir.actions.act_window,help:account.action_tax_form msgid "Create a new tax" -msgstr "" +msgstr "Татвар шинээр бүртгэх" #. module: account #: model_terms:ir.actions.act_window,help:account.action_invoice_in_refund msgid "Create a vendor credit note" -msgstr "" +msgstr "Нийлүүлэгчийн буцаалт бүртгэх" #. module: account #: model_terms:ir.ui.view,arch_db:account.tax_adjustments_wizard @@ -3322,6 +3461,8 @@ msgid "" "Create invoices, register payments and keep track of the discussions with " "your customers." msgstr "" +"Та захиалагчийн нэхэмжлэл үүсгэж, төлөлт бүртгэх болон тэдний санал " +"хүсэлтийг бүртгэж хянах боломжтой." #. module: account #. openerp-web @@ -3333,12 +3474,12 @@ msgstr "Модель үүсгэх" #. module: account #: selection:account.setup.bank.manual.config,create_or_link_option:0 msgid "Create new journal" -msgstr "" +msgstr "Журнал шинээр бүртгэх" #. module: account #: model_terms:ir.actions.act_window,help:account.rounding_list_action msgid "Create the first cash rounding" -msgstr "" +msgstr "мөнгөний бүхэлчлэлийг шинээр бүртгэх" #. module: account #: model:ir.model.fields,field_description:account.field_account_account__create_uid @@ -3473,7 +3614,7 @@ msgstr "Мөнгөн суурьт кредит" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_refund__filter_refund msgid "Credit Method" -msgstr "" +msgstr "Буцаалтын хэлбэр" #. module: account #: model:ir.model.fields,field_description:account.field_account_partial_reconcile__credit_move_id @@ -3616,7 +3757,7 @@ msgstr "Захиалагч" #: code:addons/account/models/account_payment.py:769 #, python-format msgid "Customer Credit Note" -msgstr "" +msgstr "Захиалагчийн буцаалт" #. module: account #: selection:account.invoice,type:0 selection:account.invoice.report,type:0 @@ -3675,7 +3816,7 @@ msgstr "Өөриймшүүлэх" #. module: account #: model_terms:ir.ui.view,arch_db:account.onboarding_invoice_layout_step msgid "Customize the look of your invoices." -msgstr "" +msgstr "Нэхэмжлэлийнхээ харагдах байдлыг өөриймшүүлэх" #. module: account #: model:account.incoterms,name:account.incoterm_DAF @@ -3715,7 +3856,7 @@ msgstr "ХӨЛӨГ ОНГОЦОН ДЭЭР НИЙЛҮҮЛСЭН" #. module: account #: selection:account.cash.rounding,rounding_method:0 msgid "DOWN" -msgstr "" +msgstr "ДОТОГШ" #. module: account #. openerp-web @@ -3742,7 +3883,7 @@ msgstr "Огноо" msgid "" "Date at which the opening entry of this company's accounting has been " "posted." -msgstr "" +msgstr "Энэ компаны нээлтийн ажил гүйлгээний батлагдсан огноо." #. module: account #: model:ir.model.fields,help:account.field_account_financial_year_op__opening_date @@ -3750,11 +3891,13 @@ msgid "" "Date from which the accounting is managed in Odoo. It is the date of the " "opening entry." msgstr "" +"Odoo-д санхүү бүртгэлээ хөтлөж эхэлсэн огноо. Энэ бол нээлтийн ажил " +"гүйлгээний огноо юм." #. module: account #: model:ir.model.fields,help:account.field_account_move__reverse_date msgid "Date of the reverse accounting entry." -msgstr "" +msgstr "Урвуу ажил гүйлгээний огноо." #. module: account #. openerp-web @@ -3772,7 +3915,7 @@ msgstr "Огноо" #: model:ir.model.fields,field_description:account.field_account_payment_term_line__day_of_the_month #: model_terms:ir.ui.view,arch_db:account.view_payment_term_line_tree msgid "Day of the month" -msgstr "" +msgstr "Сарын өдөр" #. module: account #: model:ir.model.fields,help:account.field_account_payment_term_line__day_of_the_month @@ -3782,6 +3925,9 @@ msgid "" "greater than the last day of a month, this number will instead select the " "last day of this month." msgstr "" +"Нэхэмжлэл төлөгдөх ёстой сарын өдөр. Хэрэв 0 эсвэл хасах утга оруулвал энэ " +"утга ашиглагдахгүй буюу ямар нэг өдрийг илэрхийлэхгүй. Хэрэв сарын сүүлийн " +"хоногоос их тоо өгөгдвөл сарын сүүлийн өдрөөр солигдож ашиглагдана." #. module: account #: code:addons/account/models/company.py:51 @@ -3812,12 +3958,12 @@ msgstr "Дебит" #. module: account #: model:ir.model.fields,field_description:account.field_account_move_line__debit_cash_basis msgid "Debit Cash Basis" -msgstr "" +msgstr "Мөнгөн суурьт дебет" #. module: account #: model:ir.model.fields,field_description:account.field_account_partial_reconcile__debit_move_id msgid "Debit Move" -msgstr "" +msgstr "Дебет бичилт" #. module: account #: model:ir.model.fields,field_description:account.field_tax_adjustments_wizard__debit_account_id @@ -3837,12 +3983,12 @@ msgstr "12-р сар" #. module: account #: model:ir.model.fields,field_description:account.field_account_journal__refund_sequence msgid "Dedicated Credit Note Sequence" -msgstr "" +msgstr "Буцаалтын тусдаа дугаарлалт" #. module: account #: model:ir.model.fields,field_description:account.field_res_company__invoice_reference_type msgid "Default Communication Type" -msgstr "" +msgstr "Байнга хэрэглэгдэх харилцааны төрөл" #. module: account #: model:ir.model.fields,field_description:account.field_account_journal__default_credit_account_id @@ -3868,7 +4014,7 @@ msgstr "Худалдан авалтын татварын анхны утга" #. module: account #: model:ir.model.fields,help:account.field_res_config_settings__invoice_reference_type msgid "Default Reference Type on Invoices." -msgstr "" +msgstr "Нэхэмжлэлийн байнгын лавлагааны төрөл" #. module: account #: model:ir.model.fields,field_description:account.field_res_company__account_sale_tax_id @@ -3879,7 +4025,7 @@ msgstr "Борлуулалтын Татварын Анхны Утга" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Default Sending Options" -msgstr "" +msgstr "Нэхэмжлэл илгээх тохиргоо" #. module: account #: model:ir.model.fields,field_description:account.field_account_account__tax_ids @@ -3893,54 +4039,55 @@ msgstr "Үндсэн татвар" #: model:ir.model.fields,field_description:account.field_res_company__incoterm_id #: model:ir.model.fields,field_description:account.field_res_config_settings__incoterm_id msgid "Default incoterm" -msgstr "" +msgstr "Байнга ашиглах инкотерм" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Default payment communication on customer invoices" -msgstr "" +msgstr "Захиалагчийн нэхэмжлэл дээр байнга хэрэглэгдэх төлбөрийн суваг" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Default taxes applied to local transactions" -msgstr "" +msgstr "Улс доторх гүйлгээнд байнга ашиглагдах татварууд" #. module: account #: model:ir.model.fields,help:account.field_product_product__supplier_taxes_id #: model:ir.model.fields,help:account.field_product_template__supplier_taxes_id msgid "Default taxes used when buying the product." -msgstr "" +msgstr "Бараа худалдан авахад байнга ашиглагдах татварууд." #. module: account #: model:ir.model.fields,help:account.field_product_product__taxes_id #: model:ir.model.fields,help:account.field_product_template__taxes_id msgid "Default taxes used when selling the product." -msgstr "" +msgstr "Бараа зарах үед байнга ашиглагдах татварууд." #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Deferred Revenues Management" -msgstr "" +msgstr "Урьдчилж тооцсон орлогын удирдлага" #. module: account #: model_terms:ir.actions.act_window,help:account.action_account_type_form msgid "Define a new account type" -msgstr "" +msgstr "Шинэ дансны төрөл зарлах" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Define the smallest coinage of the currency used to pay by cash." msgstr "" +"Бэлнээр төлөх үед ашиглагдах мөнгөний хамгийн бага нэгжийг тодорхойлох." #. module: account #: model_terms:ir.ui.view,arch_db:account.onboarding_fiscal_year_step msgid "Define your fiscal years opening & closing dates." -msgstr "" +msgstr "Санхүүгийн жилийнхээ эхлэх болон төгсөх огноог тохируулна уу." #. module: account #: model:ir.model.fields,help:account.field_account_journal__bank_statements_source msgid "Defines how the bank statements will be registered" -msgstr "" +msgstr "Банкны хуулга хэрхэн бүртгэгдэхийг тодорхойлно" #. module: account #: model:ir.model.fields,help:account.field_account_invoice__cash_rounding_id @@ -3948,6 +4095,7 @@ msgid "" "Defines the smallest coinage of the currency that can be used to pay by " "cash." msgstr "" +"Бэлнээр төлөх үед ашиглагдах мөнгөний хамгийн бага нэгжийг тодорхойлох." #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_tax_template_form @@ -4011,7 +4159,7 @@ msgstr "Нэхэмжлэл дээрх тодорхойлолт" #. module: account #: model:ir.model.fields,field_description:account.field_account_payment__destination_account_id msgid "Destination Account" -msgstr "" +msgstr "Очих данс" #. module: account #: model:ir.model.fields,field_description:account.field_account_fiscal_position__auto_apply @@ -4027,6 +4175,9 @@ msgid "" "used by itself, however it can still be used in a group. 'adjustment' is " "used to perform tax adjustment." msgstr "" +"Татварууд хаана хэрэглэгдэхийг тодорхойлно. Тухайлбал : 'Хоосон' гэдэг нь " +"тухайн татварыг шууд сонгож ашиглахгүй хэдий ч татварын бүлэгт багтсаар байх" +" болно. 'Тохируулга' гэдэг нь ашиглагдсан татваруудыг солих үед ашиглагдана." #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement__difference @@ -4050,7 +4201,7 @@ msgstr "Тооцоолсон эцсийн баланс болон тааруул #. module: account #: model:ir.model,name:account.model_digest_digest msgid "Digest" -msgstr "" +msgstr "Эзэмшилт" #. module: account #: model:ir.model.fields,help:account.field_res_config_settings__group_products_in_bills @@ -4058,17 +4209,21 @@ msgid "" "Disable this option to use a simplified versions of vendor bills, where " "products are hidden." msgstr "" +"Үүнийг идэвхигүй болгосноор барааны нэр төрөл агуулаагүй энгийн хувилбар " +"бүхий худалдан авалтын нэхэмжлэл ашиглах боломжтой болно." #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "" "Disable to have a simplified view of vendor bills, without the products." msgstr "" +"Үүнийг идэвхигүй болгосноор барааны мэдээлэл агуулаагүй энгийн харагдац " +"бүхий худалдан авалтын нэхэмжлэл ашиглах болно." #. module: account #: model_terms:ir.ui.view,arch_db:account.invoice_form msgid "Disc (%)" -msgstr "" +msgstr "Хөнг (%)" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_line__discount @@ -4142,7 +4297,7 @@ msgstr "Дэлгэцийн Нэр" #: model:ir.model.fields,field_description:account.field_res_company__qr_code #: model:ir.model.fields,field_description:account.field_res_config_settings__qr_code msgid "Display SEPA QR code" -msgstr "" +msgstr "SEPA QR код харуулах" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_line__display_type @@ -4159,6 +4314,7 @@ msgstr "Нэхэмжлэл дээр харуулах" #, python-format msgid "Do not have access, skip this data for user's digest email" msgstr "" +"Хандах эрх алга, энэ өгөгдлийг мэдээ илгээх имэйл жагсаалт руу хийхгүй" #. module: account #: model:ir.model.fields,help:account.field_account_invoice_send__auto_delete_message @@ -4197,7 +4353,7 @@ msgstr "Ноорог" #. module: account #: model_terms:ir.ui.view,arch_db:account.invoice_form msgid "Draft Credit Note" -msgstr "" +msgstr "Ноорог буцаалтын нэхэмжлэл" #. module: account #: code:addons/account/models/account_invoice.py:496 @@ -4226,7 +4382,7 @@ msgstr "Төлбөр" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_report__residual msgid "Due Amount" -msgstr "" +msgstr "Төлбөрийн үлдэгдэл" #. module: account #. openerp-web @@ -4259,7 +4415,7 @@ msgstr "Төлөх огноо" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_payment_term_line_form msgid "Due the" -msgstr "" +msgstr "Төлөх нь" #. module: account #: code:addons/account/models/account_invoice.py:1285 @@ -4268,16 +4424,19 @@ msgid "" "Duplicated vendor reference detected. You probably encoded twice the same " "vendor bill/credit note." msgstr "" +"Нийлүүлэгчийн лавлагааны давхцал үүслээ. Та магадгүй нийлүүлэгчийн нэхэмжлэл" +" эсвэл буцаалтын ижил лавлагааны дугаарыг хоёр удаа ашиглах гэж оролдож " +"байна." #. module: account #: model:ir.model.fields,field_description:account.field_res_config_settings__module_account_reports msgid "Dynamic Reports" -msgstr "" +msgstr "Динамик тайлан" #. module: account #: model:ir.model.fields,field_description:account.field_res_config_settings__module_l10n_eu_service msgid "EU Digital Goods VAT" -msgstr "" +msgstr "EU дижитал барааны НӨАТ" #. module: account #: model:account.incoterms,name:account.incoterm_EXW @@ -4320,12 +4479,12 @@ msgstr "" #. module: account #: model:ir.model.fields,field_description:account.field_res_company__invoice_is_email msgid "Email by default" -msgstr "" +msgstr "Байнга хэрэглэгдэх имэйл хаяг" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_journal_form msgid "Email your Vendor Bills" -msgstr "" +msgstr "Таны нийлүүлэгчийн нэхэмжлэлийн имэйл хаяг" #. module: account #: model:ir.model.fields,field_description:account.field_account_common_journal_report__date_to @@ -4353,7 +4512,7 @@ msgstr "Кассын хайрцагийг төгсгөх" #. module: account #: model:ir.model.fields,help:account.field_account_fiscal_year__date_to msgid "Ending Date, included in the fiscal year." -msgstr "" +msgstr "Санхүүгийн жилийн дуусах огноо." #. module: account #: model:ir.actions.act_window,name:account.action_move_line_form @@ -4369,7 +4528,7 @@ msgstr "Бичилтүүдийн эрэмбэлсэн талбар" #: code:addons/account/models/account_move.py:903 #, python-format msgid "Entries are not from the same account." -msgstr "" +msgstr "Гүйлгээнүүд ялгаатай данстай байна." #. module: account #: model_terms:ir.ui.view,arch_db:account.account_journal_dashboard_kanban_view @@ -4420,7 +4579,7 @@ msgstr "Солилцооны Олз, Алдагдлын Журнал" #. module: account #: model:ir.model.fields,field_description:account.field_account_full_reconcile__exchange_move_id msgid "Exchange Move" -msgstr "" +msgstr "Ханшийн зөрүүний гүйлгээ" #. module: account #: model:ir.model.fields,field_description:account.field_res_company__expects_chart_of_accounts @@ -4931,7 +5090,7 @@ msgstr "Нэхэмжлэлтэй" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice__has_outstanding msgid "Has Outstanding" -msgstr "" +msgstr "Бууруулах гүйлгээ байгаа эсэх" #. module: account #: model:ir.model.fields,field_description:account.field_res_partner__has_unreconciled_entries @@ -5157,18 +5316,23 @@ msgid "" "If you check this box, you will be able to collect payments using SEPA " "Direct Debit mandates." msgstr "" +"Хэрэв үүнийг сонговол та SEPA Direct Debit систем ашиглан төлбөр төлөлтийн " +"мэдээлэл цуглуулах боломжтой болно." #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "" "If you check this box, you will be able to register your payment using SEPA." msgstr "" +"Хэрэв үүнийг сонговол та SEPA ашиглаг төлбөр төлөлт бүртгэх боломжтой болно." #. module: account #: model_terms:ir.actions.act_window,help:account.open_account_journal_dashboard_kanban msgid "" "If you have not installed a chart of account, please install one first.<br>" msgstr "" +"Хэрэв та дансны мод хараахан суулгаагүй байгаа бол эхлээд нэгийг суулгана " +"уу.<br>" #. module: account #: model_terms:ir.ui.view,arch_db:account.account_unreconcile_view @@ -5187,6 +5351,11 @@ msgid "" " date empty, it means direct payment. The payment terms may compute several " "due dates, for example 50% now, 50% in one month." msgstr "" +"Хэрэв та төлбөрийн нөхцөл ашиглавал, ажил гүйлгээний төлбөр төлөх эцсийн " +"огноог систем автоматаар тооцоолж бүртгэнэ. Хэрэв та төлбөрийн нөхцөл болон " +"төлөх эцсийн огноог хоосон орхивол, төлбөр шууд төлөгдөх ёстой гэсэн үг юм. " +"Төлбөрийн нөхцөлөөс хамаарч хэд хэдэн төлбөрийн огноо үүсч болно, жишээ нь " +"50%-г одоо төлөөд 50%-г сарын дараа төлөх гэх мэт." #. module: account #: model:ir.model.fields,help:account.field_account_invoice__date_due @@ -5197,6 +5366,13 @@ msgid "" " due date, make sure that the payment term is not set on the invoice. If you" " keep the Payment terms and the due date empty, it means direct payment." msgstr "" +"Хэрэв та төлбөрийн нөхцөл ашиглавал, ажил гүйлгээний төлбөр төлөх эцсийн " +"огноог систем автоматаар тооцоолж бүртгэнэ. Төлбөрийн нөхцөлөөс хамаарч хэд " +"хэдэн төлбөрийн огноо үүсч болно, жишээ нь 50%-г одоо төлөөд 50%-г сарын " +"дараа төлөх гэх мэт. Гэхдээ та тодорхой нэг огноонд төлбөр төлөгдөх " +"ёстойгоор байлгахыг хүсвэл нэхэмжлэл дээр ямар нэг төлбөрийн нөхцөл " +"сонгоогүй байх ёстой. Хэрэв та төлбөрийн нөхцөл болон төлөх эцсийн огноог " +"хоосон орхивол, төлбөр шууд төлөгдөх ёстой гэсэн үг юм. " #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form @@ -5207,6 +5383,12 @@ msgid "" "telecommunications, and services that are electronically supplied instead of" " shipped. Gift cards sent online are not included in the definition." msgstr "" +"Хэрэв европын захиалагчдад ямар нэг дижитал бараа зарж байвал, та " +"захиалагчын байршилаас хамаарсан НӨАТ-г тооцох ёстой. Энэ дүрэм нь та өөрөө " +"хаана байрлалтайгаас үл хамаарах юм. Дижитал бараа гэдэг бол нэвтрүүлэг " +"цацах, утсан харилцаа холбоо, электрон хэлбэрээр хүргэгддэг үйлчилгээ " +"зэргээр тодорхойлогдоно. Харин бэлгийн карт онлайнаар илгээх нь энэ төрөл " +"зүйлд хамаарахгүй." #. module: account #: model:ir.model.fields,help:account.field_account_invoice_line__product_image @@ -5237,12 +5419,12 @@ msgstr ".qif файлыг импортлох" #. module: account #: model:ir.actions.act_window,name:account.account_invoice_import_wizard_action msgid "Import Vendor Bills" -msgstr "" +msgstr "Нийлүүлэгчийн нэхэмжлэл импорт" #. module: account #: model:ir.model,name:account.model_account_invoice_import_wizard msgid "Import Your Vendor Bills from Files." -msgstr "" +msgstr "Файлаас нийлүүлэгчийн нэхэмжлэл импорт хийх." #. module: account #: model:ir.model.fields,field_description:account.field_res_config_settings__module_account_bank_statement_import_csv @@ -5257,38 +5439,38 @@ msgstr ".ofx файл импортлох" #. module: account #: model:ir.model.fields,field_description:account.field_res_config_settings__module_account_bank_statement_import_camt msgid "Import in CAMT.053 format" -msgstr "" +msgstr "CAMT.053 файл импортлох" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Import your bank statements automatically" -msgstr "" +msgstr "Банкны хуулга автоматаар импортлох" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Import your bank statements in CAMT.053" -msgstr "" +msgstr "CAMT.053 форматаар банкны хуулга импортлох" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Import your bank statements in CSV" -msgstr "" +msgstr "CSV форматаар банкны хуулга импортлох" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Import your bank statements in OFX" -msgstr "" +msgstr "OFX форматаар банкны хуулга импортлох" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Import your bank statements in QIF" -msgstr "" +msgstr "QIF форматаар банкны хуулга импортлох" #. module: account #: selection:account.invoice,state:0 #: model_terms:ir.ui.view,arch_db:account.view_account_invoice_filter msgid "In Payment" -msgstr "" +msgstr "Төлбөгдөж буй" #. module: account #: code:addons/account/models/account_bank_statement.py:355 @@ -5413,6 +5595,8 @@ msgid "" "Incoterms are used to divide transaction costs and responsibilities between " "buyer and seller." msgstr "" +"Худалдааны нөхцөл нь тээврийн зардлыг худалдан авагч тал эсвэл нийлүүлэгч " +"тал даах эсвэл хувааж даах зэргийг тодорхойлдог нийтлэг ойлголтууд юм." #. module: account #. openerp-web @@ -5519,7 +5703,7 @@ msgstr "Буруу \"Zip Муж\", зөв тохируулна уу." #: code:addons/account/models/company.py:106 #, python-format msgid "Invalid fiscal year last day" -msgstr "" +msgstr "Санхүүгийн жилийн сүүлийн өдөр буруу байна" #. module: account #: code:addons/account/models/account_invoice.py:1358 @@ -5621,7 +5805,7 @@ msgstr "Татварын нэхэмжлэл" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice__refund_invoice_id msgid "Invoice for which this invoice is the credit note" -msgstr "" +msgstr "Уг буцаалтын нэхэмжлэлийн эх нэхэмжлэл" #. module: account #: code:addons/account/models/account_invoice.py:884 @@ -5633,7 +5817,7 @@ msgstr "Нэхэмжлэлийг ноороглохын тулд эхлээд ц #: code:addons/account/models/account_invoice.py:908 #, python-format msgid "Invoice must be in draft state in order to validate it." -msgstr "" +msgstr "Нэхэмжлэлийг батлахын тулд ноорог төлөвтэй байх ёстой." #. module: account #: code:addons/account/models/account_invoice.py:935 @@ -5668,6 +5852,8 @@ msgid "" "Invoice_${(object.number or '').replace('/','_')}${object.state == 'draft' " "and '_draft' or ''}" msgstr "" +"Нэхэмжлэл_${(object.number or '').replace('/','_')}${object.state == 'draft'" +" and '_draft' or ''}" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_invoice_report_search @@ -5790,7 +5976,7 @@ msgstr "Татвар үнийн дүнд шингэсэн эсэх" #. module: account #: model:ir.model.fields,help:account.field_account_invoice_line__is_rounding_line msgid "Is a rounding line in case of cash rounding." -msgstr "" +msgstr "Мөнгөн нарийвчлалын улмаас үүссэн нэхэмжлэлийн мөр эсэх." #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement__is_difference_zero @@ -5812,7 +5998,7 @@ msgstr "Энэ бол дебит гүйлгээний үндсэн данс" #. module: account #: model:ir.model.fields,help:account.field_account_journal__alias_name msgid "It creates draft vendor bill by sending an email." -msgstr "" +msgstr "Имэйл илгээснээр нийлүүлэгчийн ноорог нэхэмжлэл бүртгэгдэнэ." #. module: account #: model:ir.model.fields,help:account.field_account_invoice__reconciled @@ -5997,12 +6183,12 @@ msgstr "Таарах дугаар тохируулаагүй журналийн msgid "" "Journal where the opening entry of this company's accounting has been " "posted." -msgstr "" +msgstr "Компаны санхүүгийн нээлтийн ажил гүйлгээ бүртгэгдсэн журнал." #. module: account #: model:ir.model.fields,help:account.field_account_invoice_import_wizard__journal_id msgid "Journal where to generate the bills" -msgstr "" +msgstr "Нэхэмжлэл бүртгэх журнал" #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement_line__journal_currency_id @@ -6023,7 +6209,7 @@ msgstr "Журнал" #. module: account #: model:ir.actions.report,name:account.action_report_journal msgid "Journals Audit" -msgstr "" +msgstr "Журналын аудит" #. module: account #: selection:res.company,fiscalyear_last_month:0 @@ -6090,6 +6276,7 @@ msgstr "Нээлттэй үлдээ" msgid "" "Keep this field empty to use the default value from the product category." msgstr "" +"Барааны ангилал дээрх тохиргооноос авч ашиглах бол энэ талбарыг хоосон орхи." #. module: account #: model:ir.model.fields,help:account.field_product_product__property_account_expense_id @@ -6099,11 +6286,14 @@ msgid "" " anglo-saxon accounting with automated valuation method is configured, the " "expense account on the product category will be used." msgstr "" +"Барааны ангилал дээрх тохиргооноос авч ашиглах бол энэ талбарыг хоосон орхи." +" Хэрэв Anglo-Saxon-ыг автомат гүйлгээ бүртгэх тохиргоотойгоор ашиглаж байвал" +" барааны ангилал дээрх зардлын данс ашиглагдана." #. module: account #: model:ir.model.fields,field_description:account.field_digest_digest__kpi_account_total_revenue_value msgid "Kpi Account Total Revenue Value" -msgstr "" +msgstr "Нийт орлогыг тодорхойлох KPI данс" #. module: account #. openerp-web @@ -6125,7 +6315,7 @@ msgstr "Гүйлгээний утга" #: model:ir.model.fields,field_description:account.field_account_reconcile_model__match_label_param #: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__match_label_param msgid "Label Parameter" -msgstr "" +msgstr "Гүйлгээний утгын нөхцөл" #. module: account #: model:ir.model.fields,field_description:account.field_account_tax__description @@ -6200,7 +6390,7 @@ msgstr "Сүүлийн засвар хийсэн огноо" #: code:addons/account/static/src/xml/account_reconciliation.xml:125 #, python-format msgid "Last Reconciliation:" -msgstr "" +msgstr "Сүүлд тулгагдсан:" #. module: account #: model:ir.model.fields,field_description:account.field_account_account__write_uid @@ -6376,7 +6566,7 @@ msgstr "Бага Төлбөр" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Let your customers pay their invoices online" -msgstr "" +msgstr "Та өөрийн захиалагчдыг нэхэмжлэлээ онлайнаар төлөхийг зөвшөөрөх" #. module: account #: selection:account.account.type,internal_group:0 @@ -6387,22 +6577,22 @@ msgstr "Эх үүсвэр" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_report__nbr msgid "Line Count" -msgstr "" +msgstr "Мөрийн тоо" #. module: account #: model:ir.model.fields,field_description:account.field_res_config_settings__show_line_subtotals_tax_selection msgid "Line Subtotals Tax Display" -msgstr "" +msgstr "Нэхэмжлэлийн мөрийн татварын байдал" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Line subtotals tax display" -msgstr "" +msgstr "Нэхэмжлэлийн мөрийн татварын байдал" #. module: account #: selection:account.setup.bank.manual.config,create_or_link_option:0 msgid "Link to an existing journal" -msgstr "" +msgstr "Бэлэн байгаа журналтай холбох" #. module: account #: model:ir.model.fields,help:account.field_account_invoice__move_id @@ -6486,7 +6676,7 @@ msgstr "БУСАД" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_send__mail_activity_type_id msgid "Mail Activity Type" -msgstr "" +msgstr "Имэйл ажилбарын төрөл" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_send__mailing_list_ids @@ -6537,6 +6727,9 @@ msgid "" "Electronic: Get paid automatically through a payment acquirer by requesting a transaction on a card saved by the customer when buying or subscribing online (payment token).\n" "Batch Deposit: Encase several customer checks at once by generating a batch deposit to submit to your bank. When encoding the bank statement in Odoo,you are suggested to reconcile the transaction with the batch deposit. Enable this option from the settings." msgstr "" +"Гараар: Бэлэн мөнгөөр төлөгдөх эсвэл Odoo системээс гадуур ямар нэг төлбөрийн хэрэгслээр төлөгдөх.\n" +"Электрон: Ямар нэг онлайн төлбөрийн хэрэгсэлээр төлөлт хийх үед автоматаар захиалагчийн гүйлгээ бүртгэгдэх (төлбөрийн token).\n" +"Багц төлбөр: Захиалагч хэд хэдэн төлөлтийг нэгтгэн банкнаар нэг төлбөр шилжүүлэх тохиолдол. Odoo-д банкны гүйлгээ хөтлөгдөх үед танд холбогдох нэхэмжлэлүүдийг сонгож тулгах боломж олгогдоно. Энэ боломжыг тохиргооноос идэвхижүүлээрэй." #. module: account #: model:ir.model.fields,help:account.field_account_abstract_payment__payment_method_id @@ -6549,6 +6742,11 @@ msgid "" "Batch Deposit: Encase several customer checks at once by generating a batch deposit to submit to your bank. When encoding the bank statement in Odoo, you are suggested to reconcile the transaction with the batch deposit.To enable batch deposit, module account_batch_payment must be installed.\n" "SEPA Credit Transfer: Pay bill from a SEPA Credit Transfer file you submit to your bank. To enable sepa credit transfer, module account_sepa must be installed " msgstr "" +"Гараар: Бэлэн мөнгөөр төлөгдөх эсвэл Odoo системээс гадуур ямар нэг төлбөрийн хэрэгслээр төлөгдөх.\n" +"Электрон: Ямар нэг онлайн төлбөрийн хэрэгсэлээр төлөлт хийх үед автоматаар захиалагчийн гүйлгээ бүртгэгдэх (төлбөрийн token).\n" +"Чек: Нэхэмжлэлийг чекээр төлж төлбөрийн баримтыг Odoo-с хэвлэх.\n" +"Багц төлбөр: Захиалагч хэд хэдэн төлөлтийг нэгтгэн банкнаар нэг төлбөр шилжүүлэх тохиолдол. Odoo-д банкны гүйлгээ хөтлөгдөх үед танд холбогдох нэхэмжлэлүүдийг сонгож тулгах боломж олгогдоно. Багц төлөлт бүртгэх боломжыг идэвхижүүлэхийн тулд account_batch_payment модуль суулгах шаардлагатай.\n" +"SEPA Credit Transfer: SEPA Credit Transfer систем ашиглан нэхэмжлэлийн төлбөрийг банк руу дамжуулах. Үүний тулд account_sepa модуль суулгах шаардлагатай. " #. module: account #: model:ir.model.fields,help:account.field_account_journal__outbound_payment_method_ids @@ -6557,6 +6755,9 @@ msgid "" "Check:Pay bill by check and print it from Odoo.\n" "SEPA Credit Transfer: Pay bill from a SEPA Credit Transfer file you submit to your bank. Enable this option from the settings." msgstr "" +"Гараар: Бэлэн мөнгөөр төлөгдөх эсвэл Odoo системээс гадуур ямар нэг төлбөрийн хэрэгслээр төлөгдөх.\n" +"Чек: Нэхэмжлэлийг чекээр төлж төлбөрийн баримтыг Odoo-с хэвлэх.\n" +"SEPA Credit Transfer: SEPA Credit Transfer систем ашиглан нэхэмжлэлийн төлбөрийг банк руу дамжуулах. Үүний тулд account_sepa модуль суулгах шаардлагатай. " #. module: account #: selection:account.reconcile.model,rule_type:0 @@ -6565,7 +6766,7 @@ msgstr "" #: code:addons/account/models/chart_template.py:981 #, python-format msgid "Manually create a write-off on clicked button." -msgstr "" +msgstr "Товч дарж гараар зөрүү хаах бичилт үүсгэх." #. module: account #: selection:res.company,fiscalyear_last_month:0 @@ -6603,7 +6804,7 @@ msgstr "Масс мэйлийн нэр" #: selection:account.reconcile.model,match_label:0 #: selection:account.reconcile.model.template,match_label:0 msgid "Match Regex" -msgstr "" +msgstr "Regex нөхцөл" #. module: account #: selection:account.reconcile.model,rule_type:0 @@ -6731,16 +6932,17 @@ msgstr "Бусад Ажилбар" #: sql_constraint:account.invoice.line:0 msgid "Missing required account on accountable invoice line." msgstr "" +"Санхүүд холбогдох нэхэмжлэлийн мөр дээр шаардлагатай данс дутуу байна." #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_send__moderator_id msgid "Moderated By" -msgstr "" +msgstr "Зохицуулагч" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_send__moderation_status msgid "Moderation Status" -msgstr "" +msgstr "Зохицуулалтын төлөв" #. module: account #. openerp-web @@ -6752,17 +6954,17 @@ msgstr "Моделийг засварлах" #. module: account #: selection:account.cash.rounding,strategy:0 msgid "Modify tax amount" -msgstr "" +msgstr "Татварын дүнг засах" #. module: account #: selection:account.invoice.refund,filter_refund:0 msgid "Modify: create credit note, reconcile and create a new draft invoice" -msgstr "" +msgstr "Засварлах: буцаалт үүсгэж холбоод шинээр ноорог нэхэмжлэл үүсгэнэ" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Monitor your product margins from invoices" -msgstr "" +msgstr "Нэхэмжлэл дээр барааны ашгийг харах" #. module: account #: model_terms:ir.ui.view,arch_db:account.report_journal @@ -6779,12 +6981,12 @@ msgstr "Хөдөлгөөний мөрүүд" #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement__move_line_count msgid "Move Line Count" -msgstr "" +msgstr "Гүйлгээний мөрийн тоо" #. module: account #: model:ir.model.fields,field_description:account.field_account_payment__move_reconciled msgid "Move Reconciled" -msgstr "" +msgstr "Тулгагдсан гүйлгээ" #. module: account #: code:addons/account/models/account_move.py:1134 @@ -6797,7 +6999,7 @@ msgstr "Гүйлгээний нэр (id): %s (%s)" #: model:ir.model.fields,field_description:account.field_account_payment__multi #: model:ir.model.fields,field_description:account.field_account_register_payments__multi msgid "Multi" -msgstr "" +msgstr "Олон" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form @@ -6853,7 +7055,7 @@ msgstr "Гүйлгээний утга" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Navigate easily through reports and see what is behind the numbers" -msgstr "" +msgstr "Санхүү бүртгэлтэй холбоотой дэлгэрэнгүй тайлан ашиглах" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_send__needaction @@ -6864,7 +7066,7 @@ msgstr "Үйлдэл Шаардлагатай" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_send__need_moderation msgid "Need moderation" -msgstr "" +msgstr "Зохицуулалт шаардлагатай" #. module: account #. openerp-web @@ -6944,6 +7146,8 @@ msgid "" "No account was found to create the invoice, be sure you have installed a " "chart of account." msgstr "" +"Нэхэмжлэл үүсгэхэд шаардагдах данс олдсонгүй, дансны мод суулгасан эсэхээ " +"нягтална уу." #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_send__no_auto_thread @@ -7019,6 +7223,8 @@ msgid "" "Note that the easiest way to create a credit note is to do it directly\n" " from the customer invoice." msgstr "" +"Захиалагчийн нэхэмжлэлийн дэлгэцээс шууд буцаалтын нэхэмжлэлийг\n" +" хялбархан бүртгэх арга байдгыг анхаарна уу." #. module: account #: model_terms:ir.actions.act_window,help:account.action_invoice_in_refund @@ -7026,6 +7232,8 @@ msgid "" "Note that the easiest way to create a vendor credit note it to do it " "directly from the vendor bill." msgstr "" +"Нийлүүлэгчийн нэхэмжлэлийн дэлгэцээс шууд буцаалтын нэхэмжлэлийг хялбархан " +"бүртгэх арга байдгыг анхаарна уу." #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement_line__note @@ -7122,7 +7330,7 @@ msgstr "Уншаагүй зурвасын тоо" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "OFX Import" -msgstr "" +msgstr "OFX импорт" #. module: account #: selection:res.company,fiscalyear_last_month:0 @@ -7155,7 +7363,7 @@ msgstr "Хуучин татвар" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_payment_term_line_form msgid "On the" -msgstr "" +msgstr "Өдөр" #. module: account #: model_terms:ir.ui.view,arch_db:account.account_invoice_confirm_view @@ -7176,18 +7384,21 @@ msgid "" "Once installed, set 'Bank Feeds' to 'File Import' in bank account " "settings.This adds a button to import from the Accounting dashboard." msgstr "" +"Үүнийг суулгаснаар банкны журнал дээр Банкны гүйлгээг файлаас импортлох " +"тохиргоо хийгдэнэ. Мөн Санхүүгийн хянах самбар дээр импорт хийх товч " +"нэмэгдэнэ." #. module: account #: code:addons/account/models/account_payment.py:599 #, python-format msgid "Only a draft payment can be posted." -msgstr "" +msgstr "Зөвхөн ноорог гүйлгээнүүд батлагдана." #. module: account #: code:addons/account/models/chart_template.py:197 #, python-format msgid "Only administrators can load a charf of accounts" -msgstr "" +msgstr "Зөвхөн админ хэрэглэгч дансны мод ачааллах боломжтой" #. module: account #: model:ir.model.fields,help:account.field_res_company__period_lock_date @@ -7293,6 +7504,10 @@ msgid "" "otherwise it would make a gap in the numbering. You should book an entry and" " make a regular revert of it in case you want to cancel it." msgstr "" +"Зөвшөөрөгдөөгүй үйлдэл. Таны банкны хуулга дахь гүйлгээний мөр дээр дугаар " +"(%s) оногдсоноос хойш та үүнийг дахин ямар нэг журналын бичилттэй тулгалт " +"хийх боломжгүй. Эс бөгөөс дугаарлалтын цоорхой үүснэ. Хэрэв та энэ гүйлгээг " +"цуцлахыг хүсвэл ердөө эсрэг гүйлгээ гараар бүртгэхэд болно." #. module: account #: model_terms:ir.ui.view,arch_db:account.account_journal_dashboard_kanban_view @@ -7326,6 +7541,9 @@ msgid "" "href=#id=%s&model=account.journal>email alias</a> to allow draft vendor " "bills to be created upon reception of an email." msgstr "" +"Эсвэл <a data-oe-id=%s data-oe-model=\"account.journal\" " +"href=#id=%s&model=account.journal> имэйл alias</a> тохируулж ирсэн имэйлээр " +"нийлүүлэгчийн ноорог нэхэмжлэл бүртгэдэг байх боломжтой." #. module: account #: code:addons/account/models/account_invoice.py:707 @@ -7334,6 +7552,8 @@ msgid "" "Or share the email %s to your vendors: bills will be created automatically " "upon mail reception." msgstr "" +"Эсвэл %s имэйлийг өөрийн нийлүүлэгчиддээ түгээснээр, ирсэн имэйлийн дагуу " +"нийлүүлэгчийн нэхэмжлэл автоматаар бүртгэгдэнэ." #. module: account #: code:addons/account/models/account_invoice.py:709 @@ -7342,6 +7562,8 @@ msgid "" "Or share the emails %s to your vendors: bills will be created automatically " "upon mail reception." msgstr "" +"Эсвэл %s имэйлийг өөрийн нийлүүлэгчиддээ түгээснээр, ирсэн имэйлийн дагуу " +"нийлүүлэгчийн нэхэмжлэл автоматаар бүртгэгдэнэ." #. module: account #: model:ir.model.fields,field_description:account.field_account_move_line__payment_id @@ -7384,7 +7606,7 @@ msgstr "Нөөцийн Үнэлгээний Гарах Данс" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice__outstanding_credits_debits_widget msgid "Outstanding Credits Debits Widget" -msgstr "" +msgstr "Холбох боломжтой кредит, дебетүүд" #. module: account #: code:addons/account/models/account_invoice.py:133 @@ -7469,12 +7691,12 @@ msgstr "Эцэг зурвас" #. module: account #: model:ir.model.fields,field_description:account.field_account_group__parent_path msgid "Parent Path" -msgstr "" +msgstr "Эцэг зам" #. module: account #: model:ir.model.fields,field_description:account.field_account_move_line__parent_state msgid "Parent State" -msgstr "" +msgstr "Эцэг төлөв" #. module: account #: model:ir.model,name:account.model_account_partial_reconcile @@ -7513,24 +7735,24 @@ msgstr "Харилцагч Компани" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_report__country_id msgid "Partner Company's Country" -msgstr "" +msgstr "Харилцагч компаны улс" #. module: account #: model:ir.model.fields,field_description:account.field_res_partner__contract_ids #: model:ir.model.fields,field_description:account.field_res_users__contract_ids msgid "Partner Contracts" -msgstr "" +msgstr "Харилцагчийн холбогдох хаяг" #. module: account #: model:ir.model.fields,field_description:account.field_account_reconcile_model__match_partner #: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__match_partner msgid "Partner Is Set" -msgstr "" +msgstr "Тулгалт хийх харилцагч" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_reconcile_model_form msgid "Partner Is Set & Matches" -msgstr "" +msgstr "Тулгалт хийж харгалзуулах харилцагч" #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement_line__partner_name @@ -7542,7 +7764,7 @@ msgstr "Харилцагчийн нэр" #: model:ir.model.fields,field_description:account.field_account_payment__partner_type #: model:ir.model.fields,field_description:account.field_account_register_payments__partner_type msgid "Partner Type" -msgstr "" +msgstr "Харилцагчийн төрөл" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_send__needaction_partner_ids @@ -7558,7 +7780,7 @@ msgstr "Өнгөрсөн" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Pay your bills in one-click using Euro SEPA Service" -msgstr "" +msgstr "Euro SEPA үйлчилгээ ашиглан ганц товч даралтаар нэхэмжлэлээ төлөх" #. module: account #: model:account.account.type,name:account.data_account_type_payable @@ -7615,7 +7837,7 @@ msgstr "Төлбөргийн Зөрүү" #: model:ir.model.fields,field_description:account.field_account_payment__payment_difference_handling #: model:ir.model.fields,field_description:account.field_account_register_payments__payment_difference_handling msgid "Payment Difference Handling" -msgstr "" +msgstr "Төлбөрийн зөрүүг шийдвэрлэх" #. module: account #: model:ir.model.fields,field_description:account.field_account_abstract_payment__journal_id @@ -7627,7 +7849,7 @@ msgstr "Төлбөрийн Журнал" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_payment_form msgid "Payment Matching" -msgstr "" +msgstr "Төлбөр харгалзуулалт" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_payment_search @@ -7667,12 +7889,12 @@ msgstr "Төлбөрийн Гүйлгээний Мөрүүд" #. module: account #: model:ir.actions.report,name:account.action_report_payment_receipt msgid "Payment Receipt" -msgstr "" +msgstr "Төлбөрийн баримт" #. module: account #: model_terms:ir.ui.view,arch_db:account.report_payment_receipt_document msgid "Payment Receipt:" -msgstr "" +msgstr "Төлбөрийн баримт:" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice__reference @@ -7704,7 +7926,7 @@ msgstr "Төлбөрийн Нөхцөл" #. module: account #: model:ir.model,name:account.model_account_payment_term_line msgid "Payment Terms Line" -msgstr "" +msgstr "Төлбөрийн нөхцлийн мөр" #. module: account #: model:ir.model.fields,field_description:account.field_account_abstract_payment__payment_type @@ -7722,37 +7944,37 @@ msgstr "Захиалагчид зориулсан төлбөрийн нөхцлÐ #. module: account #: model:account.payment.term,note:account.account_payment_term_15days msgid "Payment terms: 15 Days" -msgstr "" +msgstr "Төлбөрийн нөхцөл: 15 хоног" #. module: account #: model:account.payment.term,note:account.account_payment_term_2months msgid "Payment terms: 2 Months" -msgstr "" +msgstr "Төлбөрийн нөхцөл: 2 сар" #. module: account #: model:account.payment.term,note:account.account_payment_term_net msgid "Payment terms: 30 Net Days" -msgstr "" +msgstr "Төлбөрийн нөхцөл: цэвэр 30 хоног" #. module: account #: model:account.payment.term,note:account.account_payment_term_advance msgid "Payment terms: 30% Advance End of Following Month" -msgstr "" +msgstr "Төлбөрийн нөхцөл: Дараа сарын төгсгөлд 30% урьдчилгаа" #. module: account #: model:account.payment.term,note:account.account_payment_term_45days msgid "Payment terms: 45 Days" -msgstr "" +msgstr "Төлбөрийн нөхцөл: 45 хоног" #. module: account #: model:account.payment.term,note:account.account_payment_term msgid "Payment terms: End of Following Month" -msgstr "" +msgstr "Төлбөрийн нөхцөл: Дараа сарын төгсгөл" #. module: account #: model:account.payment.term,note:account.account_payment_term_immediate msgid "Payment terms: Immediate Payment" -msgstr "" +msgstr "Төлбөрийн нөхцөл: Шууд төлбөр" #. module: account #: model:ir.model.fields,help:account.field_account_move_line__payment_id @@ -7780,7 +8002,7 @@ msgstr "Тохирох Төлбөрүүд" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice__payments_widget msgid "Payments Widget" -msgstr "" +msgstr "Төлбөрийн цонх" #. module: account #: model_terms:ir.actions.act_window,help:account.action_account_payments @@ -7789,7 +8011,7 @@ msgstr "" msgid "" "Payments are used to register liquidity movements. You can process those " "payments by your own means or by using installed facilities." -msgstr "" +msgstr "Эздийн өмчийн өөрчлөлт бүртгэхэд зориулсан төлбөр." #. module: account #: model:ir.actions.act_window,name:account.action_invoice_tree_pending_invoice @@ -7834,7 +8056,7 @@ msgstr "Балансын хувь" #: code:addons/account/models/account_invoice.py:2018 #, python-format msgid "Percentages on the Payment Terms lines must be between 0 and 100." -msgstr "" +msgstr "Төлбөрийн нөхцлийн мөр дээрх хувь нь 0 ээс 100 ын хооронд байна." #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_invoice_filter @@ -7856,7 +8078,7 @@ msgstr "Төлөвлөсөн" #: code:addons/account/models/account_invoice.py:1187 #, python-format msgid "Please add at least one invoice line." -msgstr "" +msgstr "Дор хаяж нэг нэхэмжлэлийн мөр нэмнэ үү." #. module: account #: code:addons/account/wizard/pos_box.py:27 @@ -7874,7 +8096,7 @@ msgstr "'Шилжүүлэх Данс' талбар компани дээр тоÑ #: code:addons/account/models/account_invoice.py:1309 #, python-format msgid "Please define a sequence for the credit notes" -msgstr "" +msgstr "Буцаалтын нэхэмжлэлд зориулж дугаарлалтын дүрэм тодорхойлно уу" #. module: account #: code:addons/account/models/account_invoice.py:1314 @@ -7896,11 +8118,13 @@ msgid "" "Please install a chart of accounts or create a miscellaneous journal before " "proceeding." msgstr "" +"Энэ үйлдлийг хийхээс өмнө дансны мод суулгах эсвэл ерөнхий зориулалттай ямар" +" нэг журнал үүссгэнэ үү." #. module: account #: model_terms:ir.ui.view,arch_db:account.report_invoice_document msgid "Please use the following communication for your payment :" -msgstr "" +msgstr "Та төлбөр төлөхдөө дараах хэрэгслүүдээс сонгоно уу:" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice__access_url @@ -7920,7 +8144,7 @@ msgstr "Бүх Бичилтийг Батлах" #. module: account #: model:ir.model.fields,field_description:account.field_account_journal__post_at_bank_rec msgid "Post At Bank Reconciliation" -msgstr "" +msgstr "Банкны тулгалтаар баталгаажуулах" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_payment_from_invoices @@ -7971,12 +8195,12 @@ msgstr "Төв кассын дансны угтвар" #. module: account #: model:ir.model.fields,field_description:account.field_account_chart_template__transfer_account_code_prefix msgid "Prefix of the main transfer accounts" -msgstr "" +msgstr "Мөнгөн шилжүүлгийн дансны угтвар" #. module: account #: model:ir.model.fields,field_description:account.field_res_company__transfer_account_code_prefix msgid "Prefix of the transfer accounts" -msgstr "" +msgstr "Шилжүүлгийн дансны угтвар" #. module: account #: model:account.account.type,name:account.data_account_type_prepayments @@ -7997,7 +8221,7 @@ msgstr "Урьдчилан харах" #. module: account #: model_terms:ir.ui.view,arch_db:account.account_invoice_send_wizard_form msgid "Preview as a PDF" -msgstr "" +msgstr "PDF-р урьдчилж харах" #. module: account #: model_terms:ir.ui.view,arch_db:account.invoice_form @@ -8026,12 +8250,12 @@ msgstr "" #. module: account #: model:ir.model.fields,field_description:account.field_res_company__invoice_is_print msgid "Print by default" -msgstr "" +msgstr "Байнга хэвлэгдэх" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Print checks to pay your vendors" -msgstr "" +msgstr "Нийлүүлэгчиддээ төлөх төлбөрийн чекийг хэвлэх" #. module: account #: model:ir.model,name:account.model_product_product @@ -8093,6 +8317,8 @@ msgid "" "Programmation Error: Can't call _get_invoice_matching_query() for different " "rules than 'invoice_matching'" msgstr "" +"Програмын алдаа: _get_invoice_matching_query() функцыг 'invoice_matching'-с " +"өөр дүрмээр дуудах боломжгүй." #. module: account #: code:addons/account/models/account_reconcile_model.py:505 @@ -8101,6 +8327,8 @@ msgid "" "Programmation Error: Can't call _get_wo_suggestion_query() for different " "rules than 'writeoff_suggestion'" msgstr "" +"Програмын алдаа: _get_wo_suggestion_query() функцыг 'writeoff_suggestion'-с " +"өөр дүрмээр дуудах боломжгүй." #. module: account #: code:addons/account/models/account_payment.py:282 @@ -8108,6 +8336,8 @@ msgstr "" msgid "" "Programming error: wizard action executed without active_ids in context." msgstr "" +"Програмын алдаа: active_ids утга context-д өгөгдөлгүйгээр wizard дуудагдсан " +"байна." #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_chart_template_form @@ -8154,7 +8384,7 @@ msgstr "Python код" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "QIF Import" -msgstr "" +msgstr "QIF импорт" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_line__quantity @@ -8170,7 +8400,7 @@ msgstr "Тоо хэмжээ:" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_send__rating_value msgid "Rating Value" -msgstr "" +msgstr "Үнэлсэн утга" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_refund__description @@ -8205,7 +8435,7 @@ msgstr "Авлагын данс" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_report__account_id msgid "Receivable/Payable Account" -msgstr "" +msgstr "Авлага/Өглөгийн данс" #. module: account #: model_terms:ir.ui.view,arch_db:account.product_template_form_view @@ -8224,7 +8454,7 @@ msgstr "Мөнгө Хүлээн авах" #: model:ir.model.fields,field_description:account.field_account_payment__partner_bank_account_id #: model:ir.model.fields,field_description:account.field_account_register_payments__partner_bank_account_id msgid "Recipient Bank Account" -msgstr "" +msgstr "Хүлээн авах банкны данс" #. module: account #: model_terms:ir.ui.view,arch_db:account.account_invoice_send_wizard_form @@ -8234,7 +8464,7 @@ msgstr "Хүлээн авагчид" #. module: account #: model:ir.model.fields,field_description:account.field_account_move_line__recompute_tax_line msgid "Recompute Tax Line" -msgstr "" +msgstr "Татварын мөрийг шинэчлэх" #. module: account #. openerp-web @@ -8255,7 +8485,7 @@ msgstr "Бичилтүүдийг тулгах" #. module: account #: model:ir.model,name:account.model_account_reconcile_model_template msgid "Reconcile Model Template" -msgstr "" +msgstr "Тулгалт хийх модел загвар" #. module: account #: selection:account.payment,state:0 @@ -8267,7 +8497,7 @@ msgstr "Тулгагдсан" #. module: account #: model:ir.model.fields,field_description:account.field_account_payment__reconciled_invoice_ids msgid "Reconciled Invoices" -msgstr "" +msgstr "Тулгагдсан нэхэмжлэл" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_move_form @@ -8306,13 +8536,13 @@ msgstr "" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Record transactions in foreign currencies" -msgstr "" +msgstr "Гадаад валютын гүйлгээ бүртгэх" #. module: account #: code:addons/account/models/account.py:937 #, python-format msgid "Recursion found for tax '%s'." -msgstr "" +msgstr "'%s' татварын хувьд рекурсив хамаарал илэрлээ." #. module: account #. openerp-web @@ -8370,7 +8600,7 @@ msgstr "Төлбөр Буцаалт" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice__refund_invoice_ids msgid "Refund Invoices" -msgstr "" +msgstr "Буцаалтын нэхэмжлэл" #. module: account #: model:ir.actions.act_window,name:account.action_account_invoice_payment @@ -8391,14 +8621,14 @@ msgstr "Төлбөр Бүртгэх" #. module: account #: model_terms:ir.actions.act_window,help:account.action_bank_statement_tree msgid "Register a bank statement" -msgstr "" +msgstr "Банкны хуулга бүртгэх" #. module: account #: model_terms:ir.actions.act_window,help:account.action_account_payments #: model_terms:ir.actions.act_window,help:account.action_account_payments_payable #: model_terms:ir.actions.act_window,help:account.action_account_payments_transfer msgid "Register a payment" -msgstr "" +msgstr "Төлбөр бүртгэх" #. module: account #: selection:account.account.type,type:0 @@ -8418,7 +8648,7 @@ msgstr "Холбогдох Баримтын Модель" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_send__rating_ids msgid "Related ratings" -msgstr "" +msgstr "Холбоотой үнэлгээ" #. module: account #: model:ir.model.fields,help:account.field_account_invoice__residual_company_signed @@ -8468,12 +8698,12 @@ msgstr "Тайлан" #. module: account #: model:ir.model.fields,help:account.field_account_cash_rounding__rounding msgid "Represent the non-zero value smallest coinage (for example, 0.05)." -msgstr "" +msgstr "Хамгийн бага 0-с их мөнгөний утга (жишээ нь 0.05)." #. module: account #: model:ir.model.fields,field_description:account.field_account_setup_bank_manual_config__res_partner_bank_id msgid "Res Partner Bank" -msgstr "" +msgstr "Харилцагчийн банкны данс" #. module: account #: model_terms:ir.ui.view,arch_db:account.invoice_form @@ -8501,7 +8731,7 @@ msgstr "Үлдэгдэл дүн валютаар" #: code:addons/account/models/account_journal_dashboard.py:32 #, python-format msgid "Residual amount" -msgstr "" +msgstr "Үлдэгдэл дүн" #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement__user_id @@ -8518,20 +8748,20 @@ msgstr "Хариуцагч хэрэглэгч" #: model:ir.model.fields,field_description:account.field_account_reconcile_model__match_partner_category_ids #: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__match_partner_category_ids msgid "Restrict Partner Categories to" -msgstr "" +msgstr "Харилцагчын ангилалаар хязгаарлах нь" #. module: account #: model:ir.model.fields,field_description:account.field_account_reconcile_model__match_partner_ids #: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__match_partner_ids msgid "Restrict Partners to" -msgstr "" +msgstr "Харилцагчаар хязгаарлах нь" #. module: account #: model:ir.model.fields,help:account.field_account_reconcile_model__match_same_currency #: model:ir.model.fields,help:account.field_account_reconcile_model_template__match_same_currency msgid "" "Restrict to propositions having the same currency as the statement line." -msgstr "" +msgstr "Зөвхөн ижил валюттай гүйлгээний мөрүүдийг тулгах эсэх" #. module: account #: model:ir.model.fields,field_description:account.field_digest_digest__kpi_account_total_revenue @@ -8546,12 +8776,12 @@ msgstr "Орлого Таних" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_report__account_line_id msgid "Revenue/Expense Account" -msgstr "" +msgstr "Орлого/Зардлын данс" #. module: account #: model:ir.model.fields,field_description:account.field_account_move__reverse_date msgid "Reversal Date" -msgstr "" +msgstr "Эсрэг бичилтийн огноо" #. module: account #: model:ir.model.fields,field_description:account.field_account_move_reversal__date @@ -8562,12 +8792,12 @@ msgstr "Буцаасан огноо" #: code:addons/account/models/account_move.py:390 #, python-format msgid "Reversal of: %s" -msgstr "" +msgstr "%s-н эсрэг бичилт" #. module: account #: model:ir.model.fields,field_description:account.field_account_move__auto_reverse msgid "Reverse Automatically" -msgstr "" +msgstr "Автоматаар эсрэг бичих" #. module: account #: model:ir.model.fields,field_description:account.field_account_move__reverse_entry_id @@ -8586,7 +8816,7 @@ msgstr "Буцаалтын Гүйлгээ" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_move_form msgid "Reversed entry" -msgstr "" +msgstr "Эсрэг гүйлгээ" #. module: account #: model_terms:ir.ui.view,arch_db:account.onboarding_chart_of_account_step @@ -8606,12 +8836,12 @@ msgstr "Мөрөөр тоймлох" #. module: account #: model_terms:ir.ui.view,arch_db:account.rounding_form_view msgid "Rounding Form" -msgstr "" +msgstr "Бүхэлчлэх хэлбэр" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_line__is_rounding_line msgid "Rounding Line" -msgstr "" +msgstr "Тоймчлолын мөр" #. module: account #: model:ir.model.fields,field_description:account.field_account_cash_rounding__rounding_method @@ -8626,12 +8856,12 @@ msgstr "Тоймлох Нарийвчлал" #. module: account #: model:ir.model.fields,field_description:account.field_account_cash_rounding__strategy msgid "Rounding Strategy" -msgstr "" +msgstr "Тоймлох стратеги" #. module: account #: model_terms:ir.ui.view,arch_db:account.rounding_tree_view msgid "Rounding Tree" -msgstr "" +msgstr "Тоймлолын жагсаалт" #. module: account #. openerp-web @@ -8643,17 +8873,17 @@ msgstr "Ажиллуулах" #. module: account #: model:ir.model.fields,field_description:account.field_res_config_settings__module_account_sepa msgid "SEPA Credit Transfer (SCT)" -msgstr "" +msgstr "SEPA кредит гүйлгээ (SCT)" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "SEPA Direct Debit (SDD)" -msgstr "" +msgstr "SEPA дебет гүйлгээ (SDD)" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "SEPA QR Code" -msgstr "" +msgstr "SEPA QR код" #. module: account #: selection:account.journal,type:0 @@ -8674,12 +8904,12 @@ msgstr "Борлуулалт" #: model_terms:ir.ui.view,arch_db:account.account_invoice_onboarding_sale_tax_form #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Sales Tax" -msgstr "" +msgstr "Борлуулалтын татвар" #. module: account #: model:ir.actions.act_window,name:account.action_open_account_onboarding_sale_tax msgid "Sales tax" -msgstr "" +msgstr "Борлуулалтын татвар" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice__user_id @@ -8693,35 +8923,35 @@ msgstr "Борлуулагч" #: model:ir.model.fields,field_description:account.field_account_reconcile_model__match_same_currency #: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__match_same_currency msgid "Same Currency Matching" -msgstr "" +msgstr "Ижил валютаар тулгах" #. module: account #: model_terms:ir.ui.view,arch_db:account.onboarding_sample_invoice_step msgid "Sample Invoice" -msgstr "" +msgstr "Жишээ нэхэмжлэл" #. module: account #: code:addons/account/models/company.py:485 #, python-format msgid "Sample invoice" -msgstr "" +msgstr "Жишээ нэхэмжлэл" #. module: account #: code:addons/account/models/company.py:491 #, python-format msgid "Sample invoice line name" -msgstr "" +msgstr "Жишээ нэхэмжлэлийн мөрийн нэр" #. module: account #: code:addons/account/models/company.py:498 #, python-format msgid "Sample invoice line name 2" -msgstr "" +msgstr "Жишээ нэхэмжлэлийн мөрийн нэр 2" #. module: account #: model_terms:ir.ui.view,arch_db:account.onboarding_sample_invoice_step msgid "Sample invoice sent!" -msgstr "" +msgstr "Жишээ нэхэмжлэл илгээгдсэн!" #. module: account #: model:ir.model.fields,field_description:account.field_account_setup_bank_manual_config__sanitized_acc_number @@ -8748,7 +8978,7 @@ msgstr "Шинэ үлгэр болгож хадгалах" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Save this page and come back here to set up the feature." -msgstr "" +msgstr "Энэ хуудсыг хадгалаад дахин ачаалласнаар шинэ боломжууд нэмэгдэнэ." #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_journal_search @@ -8778,7 +9008,7 @@ msgstr "Дансны Төлөвлөгөөний Үлгэр Хайх" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_position_filter msgid "Search Fiscal Positions" -msgstr "" +msgstr "Татварын тохируулга хайх" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_invoice_filter @@ -8826,7 +9056,7 @@ msgstr "Хоёрдох Шинжилгээний Данс" #. module: account #: model:ir.model.fields,field_description:account.field_account_reconcile_model__second_analytic_tag_ids msgid "Second Analytic Tags" -msgstr "" +msgstr "Хоёрдох шинжилгээний пайз" #. module: account #: model:ir.model.fields,field_description:account.field_account_reconcile_model__second_journal_id @@ -8848,19 +9078,19 @@ msgstr "Хоёрдох Татвар" #. module: account #: model:ir.model.fields,field_description:account.field_account_reconcile_model__second_tax_amount_type msgid "Second Tax Amount Type" -msgstr "" +msgstr "Хоёрдох татварын дүнгийн төрөл" #. module: account #: model:ir.model.fields,field_description:account.field_account_reconcile_model__force_second_tax_included #: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__force_second_tax_included msgid "Second Tax Included in Price" -msgstr "" +msgstr "Хоёрдох татвар үнэд шингэсэн" #. module: account #: model:ir.model.fields,field_description:account.field_account_reconcile_model__second_amount #: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__second_amount msgid "Second Write-off Amount" -msgstr "" +msgstr "Хоёрдох хааж бичих дүн" #. module: account #: selection:account.invoice.line,display_type:0 @@ -8896,12 +9126,14 @@ msgstr "Харилцагчийг эсвэл харьцсан талыг сонг #. module: account #: model_terms:ir.ui.view,arch_db:account.invoice_supplier_form msgid "Select an old vendor bill" -msgstr "" +msgstr "Хуучин нэхэмжлэлийг сонго" #. module: account #: model:ir.model.fields,help:account.field_account_payment_term_line__value msgid "Select here the kind of valuation related to this payment terms line." msgstr "" +"Тухайн төлбөрийн нөхцлийн мөрийн дүнг хэрхэн тооцоолох хэлбэрийг энд " +"сонгоно." #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form @@ -8909,6 +9141,8 @@ msgid "" "Select this if the taxes should use cash basis, which will create an entry " "for such taxes on a given account during reconciliation." msgstr "" +"Хэрэв татварууд мөнгөн суурьтай байх ёстой бол үүнийг сонго, ингэснээр " +"татварын санхүүгийн бичилт нь төлбөр тулгагдах үед үүснэ." #. module: account #: code:addons/account/wizard/account_invoice_state.py:21 @@ -8916,6 +9150,8 @@ msgstr "" msgid "" "Selected invoice(s) cannot be confirmed as they are not in 'Draft' state." msgstr "" +"Сонгогдсон нэхэмжлэл нь 'Ноорог'-с өөр төлөвтэй байгаа тал батлах боломжгүй " +"байна." #. module: account #: model:ir.model.fields,help:account.field_res_partner__invoice_warn @@ -8939,7 +9175,7 @@ msgstr "Илгээх" #: model_terms:ir.ui.view,arch_db:account.account_invoice_send_wizard_form #: model_terms:ir.ui.view,arch_db:account.invoice_form msgid "Send & Print" -msgstr "" +msgstr "Илгээх & Хэвлэх" #. module: account #: model:ir.model.fields,field_description:account.field_res_config_settings__invoice_is_email @@ -8950,7 +9186,7 @@ msgstr "Эмэйл илгээх" #: code:addons/account/models/account_invoice.py:622 #, python-format msgid "Send Invoice" -msgstr "" +msgstr "Нэхэмжлэл илгээх" #. module: account #: selection:account.abstract.payment,payment_type:0 @@ -8962,17 +9198,17 @@ msgstr "Мөнгө Илгээх" #. module: account #: model:ir.actions.act_window,name:account.account_send_payment_receipt_by_email_action msgid "Send Receipt By Email" -msgstr "" +msgstr "Төлбөрийн баримт имэйлээр илгээх" #. module: account #: model:ir.actions.act_window,name:account.action_open_account_onboarding_sample_invoice msgid "Send a sample invoice" -msgstr "" +msgstr "Жишээ нэхэмжлэл илгээх" #. module: account #: model_terms:ir.ui.view,arch_db:account.onboarding_sample_invoice_step msgid "Send an invoice to test the customer portal." -msgstr "" +msgstr "Харилцагчийн портал хандалтыг шалгах үүднээс нэхэмжлэл илгээх." #. module: account #: model_terms:ir.ui.view,arch_db:account.onboarding_sample_invoice_step @@ -9014,7 +9250,7 @@ msgstr "Дараалал" #: code:addons/account/static/src/xml/account_reconciliation.xml:249 #, python-format msgid "Set" -msgstr "" +msgstr "Тохируулах" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_payment_form @@ -9025,11 +9261,15 @@ msgstr "Ноороглох" #: model:ir.model.fields,help:account.field_account_account_tag__active msgid "Set active to false to hide the Account Tag without removing it." msgstr "" +"Идэвхитэй талбарыг үгүй утгаар тэмдэглэснээр Дансны пайзыг устгалгүйгээр " +"нуух боломжтой." #. module: account #: model:ir.model.fields,help:account.field_account_journal__active msgid "Set active to false to hide the Journal without removing it." msgstr "" +"Идэвхитэй талбарыг үгүй утгаар тэмдэглэснээр журналыг устгалгүйгээр нуух " +"боломжтой." #. module: account #: model:ir.model.fields,help:account.field_account_tax__active @@ -9040,7 +9280,7 @@ msgstr "Татварыг устгалгүйгээр нуухын тулд идэ #. module: account #: model_terms:ir.ui.view,arch_db:account.onboarding_sale_tax_step msgid "Set taxes" -msgstr "" +msgstr "Татвар тохируулах" #. module: account #: model:ir.model.fields,help:account.field_account_chart_template__visible @@ -9079,17 +9319,18 @@ msgstr "Тохируулах" #. module: account #: model_terms:ir.ui.view,arch_db:account.onboarding_bank_account_step msgid "Setup your bank account to sync bank feeds." -msgstr "" +msgstr "Банкны дансаа банкны гүйлгээтэй ижилсүүлэх байдлаар тохируулна уу." #. module: account #: model_terms:ir.ui.view,arch_db:account.onboarding_chart_of_account_step msgid "Setup your chart of accounts and record initial balances." -msgstr "" +msgstr "Дансны модоо тохируулаад эхний үлдэгдлээ бүртгэнэ үү." #. module: account #: model_terms:ir.ui.view,arch_db:account.dashboard_onboarding_company_step msgid "Setup your company's data for reports headers." msgstr "" +"Тайлан баримтыг толгойн загвар дээр компаныхаа мэдээллийг тохируулна уу." #. module: account #: model:ir.actions.server,name:account.model_account_invoice_action_share @@ -9104,24 +9345,24 @@ msgstr "Богино код" #. module: account #: model:ir.model.fields,field_description:account.field_account_register_payments__show_communication_field msgid "Show Communication Field" -msgstr "" +msgstr "Харилцаа холбооны талбар харуулах" #. module: account #: model:res.groups,name:account.group_account_user msgid "Show Full Accounting Features" -msgstr "" +msgstr "Санхүү бүртгэлийн бүрэн боломжуудыг нээх" #. module: account #: model:ir.model.fields,field_description:account.field_account_abstract_payment__show_partner_bank_account #: model:ir.model.fields,field_description:account.field_account_payment__show_partner_bank_account #: model:ir.model.fields,field_description:account.field_account_register_payments__show_partner_bank_account msgid "Show Partner Bank Account" -msgstr "" +msgstr "Харилцагчийн банкны данс харуулах" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_tax_search msgid "Show active taxes" -msgstr "" +msgstr "Идэвхитэй татвар харуулах" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_invoice_filter @@ -9132,7 +9373,7 @@ msgstr "Өнөөдрөөс өмнө дараагийн арга хэмжээг Ñ #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_tax_search msgid "Show inactive taxes" -msgstr "" +msgstr "Идэвхигүй татварыг харуулах" #. module: account #: model:ir.model.fields,field_description:account.field_account_journal__show_on_dashboard @@ -9142,7 +9383,7 @@ msgstr "Журналыг хянах самбарт харуулах" #. module: account #: model:ir.model.fields,field_description:account.field_res_config_settings__group_show_line_subtotals_tax_included msgid "Show line subtotals with taxes (B2C)" -msgstr "" +msgstr "Нэхэмжлэлийн мөрийн үнийн дүнд татвар шингэсэн байх (B2C)" #. module: account #: model:res.groups,comment:account.group_show_line_subtotals_tax_included @@ -9178,7 +9419,7 @@ msgstr "" #: code:addons/account/static/src/js/reconciliation/reconciliation_renderer.js:780 #, python-format msgid "Some fields are undefined" -msgstr "" +msgstr "Зарим талбарууд зарлагдаагүй байна" #. module: account #: model:ir.model.fields,help:account.field_account_setup_bank_manual_config__bank_bic @@ -9194,14 +9435,14 @@ msgstr "Эх Баримт" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice__source_email msgid "Source Email" -msgstr "" +msgstr "Эх имэйл" #. module: account #: model:ir.model.fields,help:account.field_account_cash_rounding__strategy msgid "" "Specify which way will be used to round the invoice amount to the rounding " "precision" -msgstr "" +msgstr "Нэхэмжлэлийн дүнд оронгийн нарийвчлал хийх арга хэлбэрийг зааж" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_send__starred @@ -9219,7 +9460,7 @@ msgstr "Эхлэх Огноо" #. module: account #: model:ir.model.fields,help:account.field_account_fiscal_year__date_from msgid "Start Date, included in the fiscal year." -msgstr "" +msgstr "Эхлэх огноо, санхүүгийн жилд багтана." #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement__balance_start @@ -9239,47 +9480,47 @@ msgstr "Муж" #. module: account #: model:ir.model.fields,field_description:account.field_res_company__account_dashboard_onboarding_state msgid "State of the account dashboard onboarding panel" -msgstr "" +msgstr "Санхүүгийн хянах самбар тохируулалтын төлөв" #. module: account #: model:ir.model.fields,field_description:account.field_res_company__account_invoice_onboarding_state msgid "State of the account invoice onboarding panel" -msgstr "" +msgstr "Нэхэмжлэлийн хянах самбар тохируулалтын төлөв" #. module: account #: model:ir.model.fields,field_description:account.field_res_company__account_setup_bank_data_state msgid "State of the onboarding bank data step" -msgstr "" +msgstr "Банкны өгөгдөл тохируулгын төлөв" #. module: account #: model:ir.model.fields,field_description:account.field_res_company__account_setup_coa_state msgid "State of the onboarding charts of account step" -msgstr "" +msgstr "Дансны мод тохируулалтын төлөв" #. module: account #: model:ir.model.fields,field_description:account.field_res_company__account_setup_fy_data_state msgid "State of the onboarding fiscal year step" -msgstr "" +msgstr "Санхүүгийн жил тохируулалтын төлөв" #. module: account #: model:ir.model.fields,field_description:account.field_res_company__account_onboarding_invoice_layout_state msgid "State of the onboarding invoice layout step" -msgstr "" +msgstr "Нэхэмжлэлийн баримтын загвар тохируулалтын төлөв" #. module: account #: model:ir.model.fields,field_description:account.field_res_company__account_onboarding_sale_tax_state msgid "State of the onboarding sale tax step" -msgstr "" +msgstr "Борлуулалтын татвар тохируулалтын төлөв" #. module: account #: model:ir.model.fields,field_description:account.field_res_company__account_onboarding_sample_invoice_state msgid "State of the onboarding sample invoice step" -msgstr "" +msgstr "Жишээ нэхэмжлэл тохируулалтын төлөв" #. module: account #: model:ir.model.fields,help:account.field_account_move_line__parent_state msgid "State of the parent account.move" -msgstr "" +msgstr "Толгой account.move -ын төлөв" #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement_line__statement_id @@ -9320,7 +9561,7 @@ msgstr "Төлөв" #. module: account #: model:ir.model.fields,field_description:account.field_account_fiscal_position__states_count msgid "States Count" -msgstr "" +msgstr "Мужын тоо" #. module: account #: code:addons/account/controllers/portal.py:41 @@ -9352,7 +9593,7 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:account.onboarding_fiscal_year_step #: model_terms:ir.ui.view,arch_db:account.onboarding_sale_tax_step msgid "Step Completed!" -msgstr "" +msgstr "Алхам дууссан!" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_send__subject @@ -9380,19 +9621,19 @@ msgstr "Дэд төрөл" #: code:addons/account/models/chart_template.py:982 #, python-format msgid "Suggest a write-off." -msgstr "" +msgstr "Зөрүүг хааж бичих үүсгэхийг санал болгох" #. module: account #: selection:account.reconcile.model,rule_type:0 #: code:addons/account/models/account_reconcile_model.py:20 #, python-format msgid "Suggest counterpart values." -msgstr "" +msgstr "Зөрүү хаах бэлэн загвараас санал болгох" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Supplier Payments" -msgstr "" +msgstr "Нийлүүлэгчийн төлөлт" #. module: account #: model:ir.model.fields,field_description:account.field_account_account__tag_ids @@ -9446,7 +9687,7 @@ msgstr "Татварын данс" #. module: account #: model:ir.model.fields,field_description:account.field_account_tax__refund_account_id msgid "Tax Account on Credit Notes" -msgstr "" +msgstr "Буцаалтын нэхэмжлэлийн татварын данс" #. module: account #: model:ir.model.fields,field_description:account.field_account_tax_template__refund_account_id @@ -9457,12 +9698,12 @@ msgstr "Буцаалт дээрх татварын данс" #: model:ir.actions.act_window,name:account.tax_adjustments_form #: model:ir.ui.menu,name:account.menu_action_tax_adjustment msgid "Tax Adjustments" -msgstr "" +msgstr "Татварын өөрчлөлт" #. module: account #: model:ir.model,name:account.model_tax_adjustments_wizard msgid "Tax Adjustments Wizard" -msgstr "" +msgstr "Татвар өөрчлөх визард" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_line__price_tax @@ -9474,7 +9715,7 @@ msgstr "Татварын дүн" #. module: account #: model:ir.model.fields,field_description:account.field_account_reconcile_model__tax_amount_type msgid "Tax Amount Type" -msgstr "" +msgstr "Татварын үнийн төрөл" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_tax_search @@ -9516,13 +9757,13 @@ msgstr "Татварын тайлбар" #: model:ir.model.fields,field_description:account.field_account_tax__tax_exigibility #: model:ir.model.fields,field_description:account.field_account_tax_template__tax_exigibility msgid "Tax Due" -msgstr "" +msgstr "Татвар хэрэгжилт" #. module: account #: model_terms:ir.ui.view,arch_db:account.invoice_supplier_tree #: model_terms:ir.ui.view,arch_db:account.invoice_tree msgid "Tax Excluded" -msgstr "" +msgstr "Татвар шингээгүй" #. module: account #: model:ir.model,name:account.model_account_tax_group @@ -9538,7 +9779,7 @@ msgstr "Татварын бүлэг" #: model:ir.model.fields,field_description:account.field_account_reconcile_model_template__force_tax_included #, python-format msgid "Tax Included in Price" -msgstr "" +msgstr "Татвар үнийн дүнд шингэсэн" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice__tax_line_ids @@ -9555,12 +9796,12 @@ msgstr "Татварын харгалзаа" #. module: account #: model:ir.model,name:account.model_account_fiscal_position_tax_template msgid "Tax Mapping Template of Fiscal Position" -msgstr "" +msgstr "Татварын тохируулгын харгалзааны загвар" #. module: account #: model:ir.model,name:account.model_account_fiscal_position_tax msgid "Tax Mapping of Fiscal Position" -msgstr "" +msgstr "Татварын тохируулгын харгалзаа" #. module: account #: model:ir.model.fields,field_description:account.field_account_tax__name @@ -9603,7 +9844,7 @@ msgstr "Татварын үлгэр" #. module: account #: model:ir.model.fields,field_description:account.field_account_move__tax_type_domain msgid "Tax Type Domain" -msgstr "" +msgstr "Татварын төрөл шүүлт" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice__amount_by_group @@ -9613,7 +9854,7 @@ msgstr "" #. module: account #: model:ir.model.fields,field_description:account.field_res_config_settings__tax_calculation_rounding_method msgid "Tax calculation rounding method" -msgstr "" +msgstr "Татвар тооцооллын тоймлох арга" #. module: account #: model:res.groups,name:account.group_show_line_subtotals_tax_excluded @@ -9643,17 +9884,17 @@ msgstr "Хэрэглэх Татвар" #. module: account #: selection:res.config.settings,show_line_subtotals_tax_selection:0 msgid "Tax-Excluded" -msgstr "" +msgstr "Татвар шингээгүй" #. module: account #: selection:res.config.settings,show_line_subtotals_tax_selection:0 msgid "Tax-Included" -msgstr "" +msgstr "Татвар шингэсэн" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "TaxCloud" -msgstr "" +msgstr "TaxCloud" #. module: account #: selection:account.account.tag,applicability:0 @@ -9673,7 +9914,7 @@ msgstr "Татварууд" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_move_form msgid "Taxes Applied" -msgstr "" +msgstr "Татвар хэрэгжсэн" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_position_template_form @@ -9695,7 +9936,7 @@ msgstr "Борлуулалтад хэрэглэгддэг татвар" msgid "" "Taxes, fiscal positions, chart of accounts & legal statements for your " "country" -msgstr "" +msgstr "Танай улсын татвар, татварын тохируулга, дансны мод & тайлангууд" #. module: account #: model:ir.model.fields,help:account.field_account_payment__invoice_ids @@ -9704,6 +9945,9 @@ msgid "" " This does not especially correspond to the invoices reconciled with the payment,\n" " as it can have been generated first, and reconciled later" msgstr "" +"Төлбөртэй холбоотой нэхэмжлэлүүдийг агуулсан техникийн талбар.\n" +" Энэ нь уг төлбөр тухайн нэхэмжлэлээс үүссэн байх албагүй бөгөөд,\n" +" эхлээд төлбөр нь бүртгэгдээд дараа нь нэхэмжлэлтэй тулгалт хийсэн байх боломжтой" #. module: account #: model:ir.model.fields,help:account.field_account_invoice_line__display_type @@ -9759,6 +10003,8 @@ msgid "" "Technical field indicating if the user selected invoices from multiple " "partners or from different types." msgstr "" +"Энэ техникийн талбар нь хэрэглэгч нэгээс олон нэхэмжлэл түүвэрлэн сонгосон " +"эсэхийг илтгэнэ." #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_refund__refund_only @@ -9785,6 +10031,8 @@ msgid "" "Technical field used inside the view to make the force_second_tax_included " "field invisible if the tax is a group." msgstr "" +"Энэ техникийн талбар нь force_second_tax_included талбарыг дэлгэцэнд " +"харагдуулах эсэхийг тодорхойлно." #. module: account #: model:ir.model.fields,help:account.field_account_reconcile_model__is_second_tax_price_included @@ -9792,6 +10040,9 @@ msgid "" "Technical field used inside the view to make the force_second_tax_included " "field readonly if the tax is already price included." msgstr "" +"Энэ техникийн талбар нь хэрэв татвар үнийн дүнд шингэсэн байвал " +"force_second_tax_included талбар засах боломжгүйгээр харагдаж байх эсэхийг " +"тодорхойлно." #. module: account #: model:ir.model.fields,help:account.field_account_reconcile_model__tax_amount_type @@ -9799,6 +10050,8 @@ msgid "" "Technical field used inside the view to make the force_tax_included field " "invisible if the tax is a group." msgstr "" +"Энэ техникийн талбар нь хэрэв татвар нь бүлэгтэй байвал force_tax_included " +"талбар харагдахгүй байх эсэхийг тодорхойлно." #. module: account #: model:ir.model.fields,help:account.field_account_reconcile_model__is_tax_price_included @@ -9806,6 +10059,9 @@ msgid "" "Technical field used inside the view to make the force_tax_included field " "readonly if the tax is already price included." msgstr "" +"Энэ техникийн талбар нь хэрэв татвар үнийн дүнд шингэсэн байвал " +"force_tax_included талбар засах боломжгүйгээр харагдаж байх эсэхийг " +"тодорхойлно." #. module: account #: model:ir.model.fields,help:account.field_account_abstract_payment__payment_method_code @@ -9823,11 +10079,15 @@ msgid "" "Technical field used to determine at which date this reconciliation needs to" " be shown on the aged receivable/payable reports." msgstr "" +"Энэ техникийн талбар нь авлага/өглөгийн насжилтын тайлан дээр аль огноо " +"хүртэл тулгалт хийх шаардлагатайг илэрхийлнэ." #. module: account #: model:ir.model.fields,help:account.field_account_move__tax_type_domain msgid "Technical field used to have a dynamic taxes domain on the form view." msgstr "" +"Энэ техникийн талбар нь форм дэлгэц дээр динамик татварын шүүлт бий болгоход" +" ашиглагдана." #. module: account #: model:ir.model.fields,help:account.field_account_abstract_payment__hide_payment_method @@ -9847,6 +10107,9 @@ msgid "" "This is needed when cancelling the source: it will post the inverse journal " "entry to cancel that part too." msgstr "" +"Энэ техникийн талбар нь мөнгөн суурьт татварын тулгалтын ул мөрийг " +"хадгалахад хэрэглэгдэнэ. Эх баримтыг цуцлах үед энэ ул мөр хэрэг болно: " +"эсрэг гүйлгээ үүсгэж мөнгөн суурьт татварыг бууруулна. " #. module: account #: model:ir.model.fields,help:account.field_account_move_line__recompute_tax_line @@ -9854,6 +10117,8 @@ msgid "" "Technical field used to know if the tax_ids field has been modified in the " "UI." msgstr "" +"Энэ техникийн талбар нь tax_ids талбарын утгыг хэрэглэгч дэлгэцнээс " +"өөрчилсөн эсэхийг илэрхийлнэ." #. module: account #: model:ir.model.fields,help:account.field_account_abstract_payment__show_partner_bank_account @@ -9863,6 +10128,8 @@ msgid "" "Technical field used to know whether the field `partner_bank_account_id` " "needs to be displayed or not in the payments form views" msgstr "" +"Энэ техникийн талбар нь төлбөрийн форм харагдац дээр " +"'partner_bank_account_id' харуулах үгүй эсэхийг тодорхойлно" #. module: account #: model:ir.model.fields,help:account.field_account_move_line__tax_exigible @@ -9872,6 +10139,11 @@ msgid "" "items are directly exigible, but with the feature cash_basis on taxes, some " "will become exigible only when the payment is recorded." msgstr "" +"Энэ техникийн талбар нь татварын мөрийг татварын тайланд тусах үгүй эсэхийг " +"тогтооно. Бүх журналын бичилтүүд шинээр үүсэхдээ татварын тайланд тусахаар " +"тэмдэглэгдсэн байдаг. Гэвч мөнгөн суурьт татвар бүртгэх боломжыг " +"идэвхижүүлсэн үед зарим гүйлгээнүүд зөвхөн төлбөр төлөгдсөн үед л татварын " +"тайланд тусна." #. module: account #: model:ir.model.fields,help:account.field_account_bank_statement_line__account_number @@ -9879,6 +10151,8 @@ msgid "" "Technical field used to store the bank account number before its creation, " "upon the line's processing" msgstr "" +"Энэ техникийн талбар нь банкны дансны дугаарын бүртгэлийг үүсгэхээс өмнө " +"харуулахад ашиглагдана" #. module: account #: model:ir.model.fields,help:account.field_account_move_line__tax_line_grouping_key @@ -9887,6 +10161,8 @@ msgid "" "lines (in account.move form view) between the moment the user changed it and" " the moment the ORM reflects that change in its one2many" msgstr "" +"Энэ техникийн талбар нь татварын мөрийг шинэчлэн тооцоолох үед хуучин утгыг " +"хадгалахад ашиглагдана. " #. module: account #: model:ir.model.fields,field_description:account.field_res_config_settings__chart_template_id @@ -9938,6 +10214,8 @@ msgid "" "The 'Internal Group' is used to filter accounts based on the internal group " "set on the account type." msgstr "" +"'Дотоод бүлэг' гэлэг нь дансдыг дотоод гэх тодотголтой дансны төрлөөр шүүх " +"үед хэрэглэгдэнэ." #. module: account #: model:ir.model.fields,help:account.field_account_account__internal_type @@ -9955,7 +10233,7 @@ msgstr "" #: code:addons/account/models/account_move.py:1051 #, python-format msgid "The account %s (%s) is deprecated." -msgstr "" +msgstr "%s (%s) данс ашиглагдахаа больсон." #. module: account #: code:addons/account/models/account_invoice.py:536 @@ -9963,7 +10241,7 @@ msgstr "" msgid "" "The account selected for payment does not belong to the same company as this" " invoice." -msgstr "" +msgstr "Төлбөрийн банкны данс нь тухайн компаны данс биш байна." #. module: account #: model:ir.model.fields,help:account.field_account_setup_bank_manual_config__journal_id @@ -9976,7 +10254,7 @@ msgstr "Энэ банкны дансанд харгалзах санхүүгий msgid "" "The accounting journal where automatic exchange differences will be " "registered" -msgstr "" +msgstr "Автоматаар валютын ханшийн зөрүүний бичилт бүртгэх санхүүгийн журнал" #. module: account #. openerp-web @@ -10007,7 +10285,7 @@ msgstr "Хоёрдогч валютаарх дүн Дебит үед хасах, #: code:addons/account/models/account_bank_statement.py:319 #, python-format msgid "The amount of a cash transaction cannot be 0." -msgstr "" +msgstr "Бэлнээрх гүйлгээний дүн 0 байж боллохгүй." #. module: account #: code:addons/account/models/account.py:939 @@ -10016,6 +10294,8 @@ msgid "" "The application scope of taxes in a group must be either the same as the " "group or left empty." msgstr "" +"Дэд татваруудын татварын хэрэглээ нь толгой татварынхтай ижил байх эсвэл " +"хоосон утгатай байх ёстой." #. module: account #: code:addons/account/models/account.py:558 @@ -10032,6 +10312,9 @@ msgid "" " This is useful if you install accounting after having used invoicing for some time and\n" " don't want to reconcile all the past payments with bank statements." msgstr "" +"Банкны хуулга тулгах цонх нь цаашид энэ огнооноос өмнөх гүйлгээг тулгахыг санал болгохгүй.\n" +" Хэрэв та нэхэмжлэлийн модулийг ашиглаж байгаад дараа нь санхүүгийн модуль суулгасан бөгөөд\n" +" суулгахаас өмнө хугацааны төлбөрийг тулгахыг хүсэхгүй байвал энэ талбар танд тусална." #. module: account #: model:ir.model.fields,help:account.field_res_config_settings__account_bank_reconciliation_start @@ -10040,6 +10323,9 @@ msgid "" " This is useful if you install accounting after having used invoicing for some time and\n" " don't want to reconcile all the past payments with bank statements." msgstr "" +"Банкны хуулга тулгах цонх нь цаашид энэ огнооноос өмнөх гүйлгээг тулгахыг санал болгохгүй.\n" +" Хэрэв та нэхэмжлэлийн модулийг ашиглаж байгаад дараа нь санхүүгийн модуль суулгасан бөгөөд\n" +" суулгахаас өмнө хугацааны төлбөрийг тулгахыг хүсэхгүй байвал энэ талбар танд тусална." #. module: account #: model:ir.model.fields,help:account.field_account_move_line__statement_id @@ -10053,6 +10339,8 @@ msgid "" "The cash rounding cannot be computed because the difference must be added on the biggest tax found and no tax are specified.\n" "Please set up a tax or change the cash rounding method." msgstr "" +"Оронгийн нарийвчлалын зөрүү дүн татварын мөр дээр нэмэгдэх ёстой. Гэтэл ямар нэг татвар сонгоогүй байгаа тул мөнгөний бүхэлчлэл хийх боломжгүй байна.\n" +"Ямар нэг татвар сонгох эсвэл мөнгөний бүхэлчлэл хийх аргаа өөрчилнө үү." #. module: account #: model:ir.model.fields,help:account.field_res_company__chart_template_id @@ -10087,6 +10375,8 @@ msgid "" "The currency of the bank statement line must be different than the statement" " currency." msgstr "" +"Касс, банкны хуулгын гүйлгээний мөр дээрх валют нь хуулга дээрх үндсэн " +"валютаас өөр байх ёстой." #. module: account #: code:addons/account/models/account.py:549 @@ -10095,6 +10385,8 @@ msgid "" "The currency of the journal should be the same than the default credit " "account." msgstr "" +"Журнал дээр тохируулсан валют нь журналын үндсэн кредит дансны валюттай ижил" +" байх ёстой." #. module: account #: code:addons/account/models/account.py:551 @@ -10103,6 +10395,8 @@ msgid "" "The currency of the journal should be the same than the default debit " "account." msgstr "" +"Журнал дээр тохируулсан валют нь журналын үндсэн дебет дансны валюттай ижил " +"байх ёстой." #. module: account #: model:ir.model.fields,help:account.field_account_journal__currency_id @@ -10113,7 +10407,7 @@ msgstr "Тухайн журналд гүйлгээ бичихэд хэрэглэ #: code:addons/account/models/account_invoice.py:2024 #, python-format msgid "The day of the month used for this term must be stricly positive." -msgstr "" +msgstr "Энэхүү төлбөрийн нөхцөлийн мөрний хэрэгжих сарын өдөр" #. module: account #: code:addons/account/models/account_bank_statement.py:193 @@ -10129,7 +10423,7 @@ msgstr "" #: code:addons/account/models/account_fiscal_year.py:42 #, python-format msgid "The ending date must not be prior to the starting date." -msgstr "" +msgstr "Дуусах огноо нь эхлэх огнооноос эрт байж болохгүй." #. module: account #: model:ir.model.fields,help:account.field_product_category__property_account_expense_categ_id @@ -10139,6 +10433,9 @@ msgid "" "expense (Cost of Goods Sold account) is recognized at the customer invoice " "validation." msgstr "" +"Нийлүүлэгчийн нэхэмжлэл бүртгэж батлах үед зардал бүртгэгдэнэ. Anglo-Saxon " +"бүртгэлийн байнгын системийн арга хэрэглэж буй үед зардал нь (Борлуулсан " +"барааны өртөг) захиалагчын нэхэмжлэл батлагдах үед бүртгэгдэнэ." #. module: account #: code:addons/account/models/account_invoice.py:906 @@ -10147,6 +10444,8 @@ msgid "" "The field Vendor is required, please complete it to validate the Vendor " "Bill." msgstr "" +"Нийлүүлэгч сонгогдох шаардлагатай, Нийлүүлэгчийн нэхэмжлэл батлахын тулд " +"бүртгэлийг гүйцээнэ үү!" #. module: account #: model:ir.model.fields,help:account.field_res_partner__property_account_position_id @@ -10154,6 +10453,8 @@ msgstr "" msgid "" "The fiscal position determines the taxes/accounts used for this contact." msgstr "" +"Татварын тайлангийн тохиргоо нь энэхүү харилцах хаягт байнга хэрэглэгдэх " +"татвар болон дансуудыг тодорхойлно." #. module: account #: code:addons/account/models/account.py:564 @@ -10176,13 +10477,13 @@ msgstr "Энэ журналийн бичилтүүдийн нэр нь энэ у msgid "" "The journal entry containing the initial balance of all this company's " "accounts." -msgstr "" +msgstr "Энэ компаны данснуудыг эхний үлдэгдлийг агуулж буй ажил гүйлгээ." #. module: account #: code:addons/account/models/account_invoice.py:1935 #, python-format msgid "The last line of a Payment Term should have the Balance type." -msgstr "" +msgstr "Төлбөрийн нөхцөлийн сүүлийн мөр нь Үлдэгдэл төрөлтэй байх ёстой." #. module: account #: model_terms:ir.ui.view,arch_db:account.view_payment_term_form @@ -10198,6 +10499,8 @@ msgstr "" #, python-format msgid "The lock date for advisors is irreversible and can't be removed." msgstr "" +"Санхүүгийн удирдлагын хэмжээнд огноо түгжих үйлдэл нь буцаах цуцлах " +"боломжгүй үйлдэл юм." #. module: account #: model:ir.model.fields,help:account.field_account_move_line__move_id @@ -10215,22 +10518,25 @@ msgstr "Дансны гүйлгээний мөрүүд дээр хэрэглэг msgid "" "The new lock date for advisors must be set after the previous lock date." msgstr "" +"Санхүүгийн удирдлагын хэмжээнд түгжих огноо нь өмнө түгжсэн огнооноос хойшхи" +" огноо байх ёстой." #. module: account #: model:ir.model.fields,help:account.field_account_journal__refund_sequence_number_next msgid "The next sequence number will be used for the next credit note." -msgstr "" +msgstr "Дараагийн буцаалтын нэхэмжлэл дээр ашиглагдах дараагийн дугаар" #. module: account #: model:ir.model.fields,help:account.field_account_journal__sequence_number_next msgid "The next sequence number will be used for the next invoice." -msgstr "" +msgstr "Дараагийн нэхэмжлэл дээр ашиглагдах дараагийн дугаар" #. module: account #: code:addons/account/models/account_invoice.py:2026 #, python-format msgid "The number of days used for a payment term cannot be negative." msgstr "" +"Төлбөрийн нөхцөл дээр ашиглагдах өдрийн тоо сөрөг утгатай байж болохгүй." #. module: account #: model:ir.model.fields,help:account.field_account_bank_statement_line__currency_id @@ -10269,12 +10575,14 @@ msgstr "" msgid "" "The partners of the journal's company and the related bank account mismatch." msgstr "" +"Журналын компани дээрх харилцагч нь холбогдох банзны данстай тохирохгүй " +"байна." #. module: account #: code:addons/account/models/account_payment.py:118 #, python-format msgid "The payment amount cannot be negative." -msgstr "" +msgstr "Төлбөрийн дүн сөрөг утгатай байж болохгүй." #. module: account #: code:addons/account/models/account_payment.py:602 @@ -10288,6 +10596,8 @@ msgid "" "The payment communication that will be automatically populated once the " "invoice validation. You can also write a free communication." msgstr "" +"Нэхэмжлэл батлагдах үед төлбөрийн холбогдол автоматаар байршина. Мөн та " +"хүсвэл өөрийн дурын холбогдолыг бичиж болно." #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form @@ -10295,6 +10605,8 @@ msgid "" "The payments which have not been matched with a bank statement will not be " "shown in bank reconciliation data if they were made before this date." msgstr "" +"Энэхүү огнооноос өмнө бүртгэгдсэн төлөлтүүд байвал хэдий тулгагдаагүй байсан" +" ч энэхүү банкны тулгалтын дэлгэцэнд харагдахгүй." #. module: account #: model:ir.model.fields,help:account.field_account_reconcile_model__match_partner_category_ids @@ -10303,6 +10615,8 @@ msgid "" "The reconciliation model will only be applied to the selected " "customer/vendor categories." msgstr "" +"Энэхүү тулгалтын загвар нь зөвхөн сонгогдсон ангилалд хамаарах " +"харилцагч/нийлүүлэгчийн тохиолдолд ашиглагдана." #. module: account #: model:ir.model.fields,help:account.field_account_reconcile_model__match_partner_ids @@ -10311,6 +10625,8 @@ msgid "" "The reconciliation model will only be applied to the selected " "customers/vendors." msgstr "" +"Энэхүү тулгалтын загвар нь зөвхөн сонгогдсон харилцагч/нийлүүлэгчийн " +"тохиолдолд ашиглагдана." #. module: account #: model:ir.model.fields,help:account.field_account_reconcile_model__match_nature @@ -10321,6 +10637,10 @@ msgid "" " * Amount Paid: Only applied when paying an amount.\n" " * Amount Paid/Received: Applied in both cases." msgstr "" +"Тулгалтын загвар нь зөвхөн нь дараахаас сонгосон төрлийн гүйлгээнд хэрэгжинэ:\n" +" * Хүлээн авсан төлбөр: Зөвхөн мөнгө хүлээн авах үед хэрэгжинэ.\n" +" * Төлсөн төлбөр: Зөвхөн мөнгө төлж зарлагадах үед хэрэгжинэ.\n" +" * Төлсөн/Хүлээн авсан төлбөр: Аль аль тохиолдолд хэрэгжинэ." #. module: account #: model:ir.model.fields,help:account.field_account_reconcile_model__match_partner @@ -10328,6 +10648,8 @@ msgstr "" msgid "" "The reconciliation model will only be applied when a customer/vendor is set." msgstr "" +"Энэхүү тулгалтын загвар нь зөвхөн сонгогдсон харилцагч/нийлүүлэгчийн " +"тохиолдолд ашиглагдана." #. module: account #: model:ir.model.fields,help:account.field_account_reconcile_model__match_amount @@ -10336,6 +10658,8 @@ msgid "" "The reconciliation model will only be applied when the amount being lower " "than, greater than or between specified amount(s)." msgstr "" +"Гүйлгээний дүн энэ утгаас бага, их эсвэл хооронд байх үед энэхүү тулгалтын " +"загвар хэрэгжинэ." #. module: account #: model:ir.model.fields,help:account.field_account_reconcile_model__match_label @@ -10346,13 +10670,17 @@ msgid "" " * Not Contains: Negation of \"Contains\".\n" " * Match Regex: Define your own regular expression." msgstr "" +"Тулгалтын загвар нь зөвхөн дараахаас сонгосон нөхцөл бүхий гүйлгээний утгатай байх үед хэрэгжинэ:\n" +" * Агуулсан: Гүйлгээний утга нь өгөгдсөн үгийг заавал агуулсан байх ёстой (үсгийн том жижиг ялгаа хамаарахгүй).\n" +" * Агуулахгүй: \"Агуулсан\" нөхцөлийн эсрэг.\n" +" * Regex шалгах: Та өөрийн шалгах нөхцөл бүхий regex ашиглах боломжтой." #. module: account #: model:ir.model.fields,help:account.field_account_reconcile_model__match_journal_ids #: model:ir.model.fields,help:account.field_account_reconcile_model_template__match_journal_ids msgid "" "The reconciliation model will only be available from the selected journals." -msgstr "" +msgstr "Тулгалтын загвар нь зөвхөн энэ журналд хэрэгжинэ." #. module: account #: model:ir.model.fields,help:account.field_account_move_line__amount_residual_currency @@ -10386,6 +10714,8 @@ msgid "" "The selected unit of measure has to be in the same category as the product " "unit of measure." msgstr "" +"Сонгосон хэмжих нэгж нь барааны хэмжих нэгжтэй ижил ангилалын нэгж байх " +"ёстой." #. module: account #: model:ir.model.fields,help:account.field_account_tax__sequence @@ -10404,6 +10734,8 @@ msgid "" "The sum of total residual amount propositions matches the statement line " "amount under this percentage." msgstr "" +"Төлбөрийн мөр дээрх дүн нь тулгалт хийж буй төлбөрийн үлдэгдлийн хэдээс " +"багагүй хувийг хангаж байвал тулгалт хийх тухай." #. module: account #: model:ir.model.fields,help:account.field_account_reconcile_model__match_total_amount @@ -10412,16 +10744,20 @@ msgid "" "The sum of total residual amount propositions matches the statement line " "amount." msgstr "" +"Төлбөрийн мөр дээрх дүн нь тулгалт хийж буй төлбөрийн үлдэгдлийн хэдээс " +"багагүй байвал тулгалт хийх тухай." #. module: account #: model:ir.model.fields,help:account.field_account_cash_rounding__rounding_method msgid "The tie-breaking rule used for float rounding operations" -msgstr "" +msgstr "Төлбөрийн дүнг тулгахад үүсэх зөрүүг тоймчлох утга" #. module: account #: model_terms:ir.ui.view,arch_db:account.portal_my_invoices msgid "There are currently no invoices and payments for your account." msgstr "" +"Танай санхүү бүртгэлд одоогоор ямар нэг нэхэмжлэл болон төлбөр бүртгэгдээгүй" +" байна." #. module: account #: code:addons/account/models/company.py:264 @@ -10440,6 +10776,8 @@ msgid "" "There is no Transfer Account defined in the accounting settings. Please " "define one to be able to confirm this transfer." msgstr "" +"Санхүүгийн тохиргоонд мөнгө шилжүүлгийн түр данс тохируулагдаагүй байна. " +"Шилжүүлгийн хийхийн тулд уг дансыг эхлээд тохируулна уу." #. module: account #: code:addons/account/models/account_bank_statement.py:181 @@ -10477,12 +10815,12 @@ msgstr "Тулгах зүйлс алга." #. module: account #: model_terms:ir.ui.view,arch_db:account.portal_invoice_error msgid "There was an error processing this page." -msgstr "" +msgstr "Энэ хуудсыг харуулахад алдаа үүслээ." #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "These taxes are set in any new product created." -msgstr "" +msgstr "Эдгээр татварууд шинээр бараа бүртгэх үед сонгогдоно." #. module: account #: model:ir.model.fields,help:account.field_account_account_template__user_type_id @@ -10522,7 +10860,7 @@ msgstr "" #. module: account #: model:ir.model.fields,help:account.field_product_category__property_account_income_categ_id msgid "This account will be used when validating a customer invoice." -msgstr "" +msgstr "Энэ данс нь захиалагчийн нэхэмжлэл батлагдах үед ашиглагдана." #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form @@ -10531,6 +10869,9 @@ msgid "" " master budgets and the budgets are defined, the project managers can set " "the planned amount on each analytic account." msgstr "" +"Төсөв болон аналитик санхүүг хослуулан ашиглах боломж олгоно. Төсөв болон " +"мастер төсөв тодорхойлсноор төслийн менежерүүд шинжилгээний данс бүр дээр " +"дүн төлөвлөж оруулах боломжтой болно." #. module: account #: model:ir.model.fields,help:account.field_res_config_settings__module_account_batch_payment @@ -10538,6 +10879,8 @@ msgid "" "This allows you grouping payments into a single batch and eases the reconciliation process.\n" "-This installs the account_batch_payment module." msgstr "" +"Энэ нь төлбөрүүдийг багц болгон нэгтгэснээр тулгалтын процессыг хялбарчилна.\n" +"-Ингэхийн тулд account_batch_payment модуль суугдах болно." #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form @@ -10546,6 +10889,9 @@ msgid "" "keeps track of the depreciation occurred on those assets, and creates " "account move for those depreciation lines." msgstr "" +"Энэ нь компаны эзэмшиж буй үндсэн хөрөнгүүдийг бүртгэн удирдах боломж " +"олгоно. Тэдгээр хөрөнгүүдийн элэгдэлийг төлөвлөх, элэгдлийн санхүүгийн ажил " +"гүйлгээ бүртгэх боломжтой." #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form @@ -10554,6 +10900,10 @@ msgid "" "keeps track of the installments occurred on those revenue recognitions, and " "creates account moves for those installment lines." msgstr "" +"Энэ нь барааны урьдчилсан борлуулалтын бүртгэлийг хөтлөх удирдах боломжыг " +"олгоно. Урьдчилж тооцсон борлуулалтыг үе шаттайгаар хэсэгчлэн борлуулалтын " +"орлогоор хүлээн зөвшөөрч тухай бүрд нь санхүүгийн ажил гүйлгээ бүртгэх " +"боломжтой." #. module: account #: model:ir.model.fields,help:account.field_account_chart_template__complete_tax_set @@ -10574,11 +10924,15 @@ msgid "" "This customer invoice credit note has been created from: <a href=# data-oe-" "model=account.invoice data-oe-id=%d>%s</a><br>Reason: %s" msgstr "" +"Энэ захиалагчийн буцаалтын нэхэмжлэл нь дараах нэхэмжлэлээс үүссэн: <a " +"href=# data-oe-model=account.invoice data-oe-id=%d>%s</a><br>Буцаалтын " +"шалтгаан: %s" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "This feature is useful if you issue a high amounts of invoices." msgstr "" +"Хэрэв та их тооны нэхэмжлэл бүртгэдэг бол энэ боломж танд хэрэг болно." #. module: account #: model:ir.model.fields,help:account.field_account_journal__refund_sequence_id @@ -10586,6 +10940,8 @@ msgid "" "This field contains the information related to the numbering of the credit " "note entries of this journal." msgstr "" +"Энэ талбар нь уг журналд хичнээн буцаалтын нэхэмжлэл бүртгэгдсэн тухай " +"мэдээллийг агуулна." #. module: account #: model:ir.model.fields,help:account.field_account_journal__sequence_id @@ -10625,7 +10981,7 @@ msgstr "" #. module: account #: model_terms:ir.actions.act_window,help:account.open_account_journal_dashboard_kanban msgid "This is the accounting dashboard" -msgstr "" +msgstr "Энэ бол санхүүгийн хянах самбар" #. module: account #: code:addons/account/models/account.py:627 @@ -10653,6 +11009,7 @@ msgstr "" msgid "" "This method should only be called to process a single invoice's payment." msgstr "" +"Энэ төлбөрийн аргыг зөвхөн нэг нэхэмжлэл төлөлт дээр хэрэгжүүлэх боломжтой." #. module: account #: model:ir.model.fields,help:account.field_account_account_template__chart_template_id @@ -10685,6 +11042,9 @@ msgid "" "This parameter will be bypassed in case of a statement line communication " "matching exactly existing entries" msgstr "" +"Хуулга дээрх гүйлгээ нь ямар нэг өмнө нь бүртгэгдсэн ажил гүйлгээтэй " +"харгалзан таарч тохирч байвал энэхүү өгөгдлийг үл харгалзан тулгалт " +"хийгдэнэ." #. module: account #. openerp-web @@ -10710,6 +11070,8 @@ msgid "" "This payment term will be used instead of the default one for sales orders " "and customer invoices" msgstr "" +"Энэ төлбөрийн нөхцөлийг борлуулалтын захиалга болон нэхэмжлэл дээрх байнга " +"хэрэглэгддэг төлбөрийн нөхцөлийн оронд сольж хэрэглэнэ." #. module: account #: model:ir.model.fields,help:account.field_account_bank_statement_line__account_id @@ -10729,6 +11091,9 @@ msgid "" "This vendor bill credit note has been created from: <a href=# data-oe-" "model=account.invoice data-oe-id=%d>%s</a><br>Reason: %s" msgstr "" +"Энэ нийлүүлэгчийн буцаалтын нэхэмжлэл нь дараахаас холбогдолтойгоор үүссэн: " +"<a href=# data-oe-model=account.invoice data-oe-id=%d>%s</a><br>Буцаах " +"шалтгаан: %s" #. module: account #: model_terms:ir.actions.act_window,help:account.action_validate_account_move @@ -10768,13 +11133,15 @@ msgstr "Төлөх" #, python-format msgid "To reconcile the entries company should be the same for all entries." msgstr "" +"Зөвхөн нэг ижил компанид харьяалагдах гүйлгээнүүдийг хооронд нь холбож " +"тулгах боломжтой." #. module: account #. openerp-web #: code:addons/account/static/src/xml/account_reconciliation.xml:169 #, python-format msgid "To speed up reconciliation, define" -msgstr "" +msgstr "Тулгалтыг хурдасгахын тулд үүнийг тодорхойлно" #. module: account #: selection:account.invoice,activity_state:0 @@ -10806,7 +11173,7 @@ msgstr "Нийт дүн" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_move_line_tax_audit_tree msgid "Total Base Amount" -msgstr "" +msgstr "Нийт суурь үнэ" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_move_form @@ -10846,12 +11213,13 @@ msgstr "Нийт үлдэгдэл" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_report__user_currency_price_total msgid "Total Without Tax in Currency" -msgstr "" +msgstr "Валютаарх татваргүй нийт" #. module: account #: model:ir.model.fields,help:account.field_account_invoice_line__price_subtotal_signed msgid "Total amount in the currency of the company, negative for credit note." msgstr "" +"Компаны үндсэн валютаарх нийлбэр дүн, буцаалтын тохиолдолд хасах утгатай." #. module: account #: model:ir.model.fields,help:account.field_account_invoice__amount_total_company_signed @@ -10874,12 +11242,12 @@ msgstr "Энэ захиалагчийн авах нийт авлагын дүн. #. module: account #: model:ir.model.fields,help:account.field_account_invoice_line__price_total msgid "Total amount with taxes" -msgstr "" +msgstr "Татвартай нийт дүн" #. module: account #: model:ir.model.fields,help:account.field_account_invoice_line__price_subtotal msgid "Total amount without taxes" -msgstr "" +msgstr "Татваргүй нийт дүн" #. module: account #: model:ir.model.fields,help:account.field_res_partner__debit @@ -10905,7 +11273,7 @@ msgstr "Гүйлгээний мөрүүдийн дүн" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Track costs & revenues by project, department, etc." -msgstr "" +msgstr "Төсөл, алба нэгжээр зардал & урьдчилсан орлогыг мөрших." #. module: account #: model:ir.model.fields,help:account.field_account_invoice_send__tracking_value_ids @@ -10981,13 +11349,13 @@ msgstr "Төрөл" #. module: account #: selection:account.cash.rounding,rounding_method:0 msgid "UP" -msgstr "" +msgstr "ДЭЭШ" #. module: account #: code:addons/account/models/account.py:405 #, python-format msgid "Undefined Yet" -msgstr "" +msgstr "Хараахан тодорхойгүй" #. module: account #: code:addons/account/models/company.py:386 @@ -11100,19 +11468,19 @@ msgstr "Татваргүй Нийт дүн" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Update exchange rates automatically" -msgstr "" +msgstr "Валютын ханш автоматаар шинэчлэх" #. module: account #. openerp-web #: code:addons/account/static/src/xml/bills_tree_upload_views.xml:5 #, python-format msgid "Upload" -msgstr "" +msgstr "Оруулах" #. module: account #: model_terms:ir.ui.view,arch_db:account.account_invoice_import_wizard_form_view msgid "Upload Files" -msgstr "" +msgstr "Файл оруулах" #. module: account #: model:ir.model.fields,field_description:account.field_account_chart_template__use_anglo_saxon @@ -11127,7 +11495,7 @@ msgstr "Мөнгөн Суурийг Хэрэглэх" #. module: account #: model:ir.model.fields,field_description:account.field_res_config_settings__module_account_sepa_direct_debit msgid "Use SEPA Direct Debit" -msgstr "" +msgstr "SEPA дебет үйлчилгээ ашиглах" #. module: account #: model:ir.model.fields,field_description:account.field_account_move_reversal__journal_id @@ -11147,17 +11515,19 @@ msgstr "Англо-Саксон НББ-г хэрэглэх" #. module: account #: model:ir.model.fields,field_description:account.field_res_config_settings__module_account_batch_payment msgid "Use batch payments" -msgstr "" +msgstr "Багц төлбөр ашиглах" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Use budgets to compare actual with expected revenues and costs" msgstr "" +"Төсвийн бүртгэл хийж төлөвлөсөн зардал болон урьдчилсан орлогыг гүйцэтгэлтэй" +" нь харьцуулах" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Use depreciation boards, automate amortization entries" -msgstr "" +msgstr "Элэгдлийн самбар ашиглан автоматаар элэгдлийг урьдчилан төлөвлөх" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form @@ -11167,12 +11537,12 @@ msgstr "Мөшгөлтийн төвшин болон төлөвлөгөөт ар #. module: account #: model:ir.model.fields,field_description:account.field_res_config_settings__group_products_in_bills msgid "Use products in vendor bills" -msgstr "" +msgstr "Нийлүүлэгчийн нэхэмжлэл дээр бараа сонгох" #. module: account #: model:res.groups,name:account.group_products_in_bills msgid "Use products on vendor bills" -msgstr "" +msgstr "Нийлүүлэгчийн нэхэмжлэл дээр бараа сонгох" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_send__template_id @@ -11187,6 +11557,9 @@ msgid "" " with the current invoice. A new draft invoice will be created\n" " so that you can edit it." msgstr "" +"Үүнийг сонгосноор нэхэмжлэлийг цуцлан шинэ нэхэмжлэл бүртгэнэ.\n" +" Буцаалтын нэхэмжлэл үүсч батлагдаад эх нэхэмжлэлийг хааж тулгагдана.\n" +" Улмаар ноорог нэхэмжлэл шинээр үүсэс ба та түүнийг засаж өөрчлөх боломжтой." #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_invoice_refund @@ -11283,6 +11656,8 @@ msgid "" "Validate the statement line automatically (reconciliation based on your " "rule)." msgstr "" +"Банкны хуулганы гүйлгээг автоматаар батлах (таны тулгалт хийх дүрэм дээр " +"тулгуурлана)." #. module: account #: selection:account.bank.statement,state:0 @@ -11440,6 +11815,8 @@ msgid "" "We cannot find a chart of accounts for this company, you should configure it. \n" "Please go to Account Configuration and select or install a fiscal localization." msgstr "" +"Энэ компанид дансны мод суугаагүй байна. та үүнийг тохируулах ёстой.\n" +"Санхүүгийн тохиргоо хэсэгт очоод дансны мод сонгож суулгана уу." #. module: account #: code:addons/account/models/company.py:480 @@ -11448,6 +11825,8 @@ msgid "" "We cannot find any journal for this company. You should create one.\n" "Please go to Configuration > Journals." msgstr "" +"Энэ компанид журнал олдсонгүй. Та нэгийг үүсгэх хэрэгтэй.\n" +"Тохиргоо > Журнал цэс рүү очино уу." #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement__website_message_ids @@ -11469,6 +11848,8 @@ msgid "" "When receiving an email with a bill, or uploading scanned bills, Odoo will " "parse them (OCR) and auto-complete (AI) Draft Bills to validate." msgstr "" +"Имэйлээр нэхэмжлэл хүлээн авах эсвэл сканнердаж оруулах үед Odoo систем " +"түүнийг задалж уншаад автоматаар (AI) ноорог нэхэмжлэл бүртгэж батлана." #. module: account #: model:ir.model.fields,help:account.field_account_journal__post_at_bank_rec @@ -11477,6 +11858,9 @@ msgid "" "draft state, so that the related journal entries are only posted when " "performing bank reconciliation." msgstr "" +"Энэ журналд бүртгэгдсэн төлбөр төлөлтийн гүйлгээнүүд ноорог төлөвтэй байх ба" +" банкны хуулгатай ижилсүүлэлт буюу тулгалт хийсний эцэст батлагдсан төлөвт " +"шилжинэ." #. module: account #: model:ir.model.fields,help:account.field_account_invoice_send__is_log @@ -11491,7 +11875,7 @@ msgstr "Энэ журналь хянах самбарт харагдах эсэÑ #. module: account #: model:ir.model.fields,help:account.field_account_setup_bank_manual_config__new_journal_name msgid "Will be used to name the Journal related to this bank account" -msgstr "" +msgstr "Энэ банкны данстай харгалзах журналын нэрээр ашиглагдана" #. module: account #: model:ir.model.fields,field_description:account.field_account_common_journal_report__amount_currency @@ -11526,7 +11910,7 @@ msgstr "Буруу кредит эсвэл дебит дүн бүхий данс #: code:addons/account/models/account_move.py:899 #, python-format msgid "You are trying to reconcile some entries that are already reconciled." -msgstr "" +msgstr "Та аль хэдийнээ тулгагдсан бичилтийг дахин тулгах гэж оролдож байна." #. module: account #: model:ir.model.fields,help:account.field_account_move_line__blocked @@ -11542,6 +11926,8 @@ msgstr "" #: model:ir.model.fields,help:account.field_account_invoice_line__partner_id msgid "You can find a contact by its Name, TIN, Email or Internal Reference." msgstr "" +"Та харилцах хаягыг Нэр, ТТД, Имэйл болон дотоод дугаараар хайж олох " +"боломжтой." #. module: account #: code:addons/account/models/account_invoice.py:1983 @@ -11550,6 +11936,8 @@ msgid "" "You can not delete payment terms as other records still reference it. " "However, you can archive it." msgstr "" +"Та аль хэдийнээ гүйлгээнд ашиглагдсан төлбөрийн нөхцөлийг устгах боломжгүй. " +"Үүнийг оронд идэвхигүй болгоно уу." #. module: account #: code:addons/account/models/account_fiscal_year.py:55 @@ -11558,6 +11946,8 @@ msgid "" "You can not have an overlap between two fiscal years, please correct the " "start and/or end dates of your fiscal years." msgstr "" +"Хоёр санхүүгийн жил огтолцож болохгүй, та тэдгээрийн эхлэх болон дуусах " +"огноог давхацуулахгүйгээр тааруулна уу." #. module: account #: code:addons/account/models/account_invoice.py:1827 @@ -11578,6 +11968,9 @@ msgid "" "invoices, once validated, to help the customer to refer to that particular " "invoice when making the payment." msgstr "" +"Та захиалагчийн нэхэмжлэл дээр байнга хэрэгжих төлбөрийн лавлагааг энд " +"тохируулах боломжтой. Нэхэмжлэл батлагдсаны дараа энэхүү лавлагааг ашиглан " +"төлбөр төлөлтийг уг нэхэмжлэлтэй харгалзуулж холбох боломжтой болно." #. module: account #: code:addons/account/models/account_move.py:361 @@ -11603,6 +11996,8 @@ msgid "" "You cannot change the currency of the company since some journal items " "already exist" msgstr "" +"Ямар нэг ажил гүйлгээ бүртгэгдсэнээс хойш компаны үндсэн валютыг өөрчлөх " +"боломжгүй" #. module: account #: code:addons/account/models/account.py:317 @@ -11619,6 +12014,8 @@ msgid "" "You cannot create journal items with a secondary currency without filling " "both 'currency' and 'amount currency' fields." msgstr "" +"Гадаад валюттай журналд гүйлгээ бүртгэхдээ заавал валют болон валютын дүн " +"талбаруудыг бүртгэх ёстой." #. module: account #: code:addons/account/models/company.py:187 @@ -11627,12 +12024,15 @@ msgid "" "You cannot define stricter conditions on advisors than on users. Please make" " sure that the lock date on advisor is set before the lock date for users." msgstr "" +"Та санхүүгийн удирдлах эрхэнд санхүүгийн хэрэглэгч эрхээс илүү хатуу эрх " +"тохируулж болохгүй. Удирдлын хэмжээнд түгжих огноо нь хэрэглэгчийн хэмжээнд " +"түгжих огноогоос өмнөх огноо байх ёстойг анхаарна уу." #. module: account #: code:addons/account/models/account_payment.py:583 #, python-format msgid "You cannot delete a payment that is already posted." -msgstr "" +msgstr "Та батлагдсан төлбөрийг устгах боломжгүй." #. module: account #: code:addons/account/models/account_invoice.py:744 @@ -11653,6 +12053,8 @@ msgid "" "You cannot delete an invoice which is not draft or cancelled. You should " "create a credit note instead." msgstr "" +"Та зөвхөн ноорог эсвэл цуцлагдсан төлөвтэй нэхэмжлэлийг устгах боломжтой. " +"Харин энэ нэхэмжлэлийг устгахын оронд буцаалт үүсгэнэ үү." #. module: account #: code:addons/account/models/res_config_settings.py:147 @@ -11661,6 +12063,9 @@ msgid "" "You cannot disable this setting because some of your taxes are cash basis. " "Modify your taxes first before disabling this setting." msgstr "" +"Та энэ тохиргоог болиулах боломжгүй. Учир нь аль хэдийнээ зарим мөнгөн " +"суурьт татварын гүйлгээ бүртгэгдсэн байна. Энэ тохиргоог болиулахын тулд " +"эхлээд ийм татварын гүйлгээнүүдийг засварлах хэрэгтэй." #. module: account #: code:addons/account/models/account_move.py:1136 @@ -11689,6 +12094,8 @@ msgid "" "You cannot have a receivable/payable account that is not reconcilable. " "(account code: %s)" msgstr "" +"Тулгагдахгүй тохиргоотойгоор авлага/өглөгийн дансыг ашиглах боломжгүй. " +"(дансны код: %s)" #. module: account #: code:addons/account/models/account.py:76 @@ -11707,6 +12114,8 @@ msgid "" "You cannot lock a period that is not finished yet. Please make sure that the" " lock date for advisors is not set after the last day of the previous month." msgstr "" +"Та сарын өдөр өнгөрч дуусаагүй байхад мөчлөг түгжих боломжгүй. Сүүлийн сарын" +" хамгийн сүүлийн өдрөөс хойшхи огноогоор түгжиж болохгүйг анхаарна уу." #. module: account #. openerp-web @@ -11720,6 +12129,8 @@ msgstr "Авлага болон өглөгийн дансдаас мөрүүди #, python-format msgid "You cannot modify a journal entry linked to a posted payment." msgstr "" +"Энэхүү гүйлгээ нь ямар нэг батлагдсан төлөлттэй холбогдсон үед та засаж " +"өөрчлөх боломжгүй." #. module: account #: code:addons/account/models/account_move.py:322 @@ -11746,7 +12157,7 @@ msgstr "" #, python-format msgid "" "You cannot perform this action on an account that contains journal items." -msgstr "" +msgstr "Та ажил гүйлгээ бүртгэгдсэн дансанд ийм үйлдэл хийх боломжгүй." #. module: account #: code:addons/account/wizard/pos_box.py:36 @@ -11758,7 +12169,7 @@ msgstr "Хаагдсан банкны хуулга руу мөнгө хийх/а #: code:addons/account/models/account.py:651 #, python-format msgid "You cannot remove the bank account from the journal once set." -msgstr "" +msgstr "Журнал дээр нэгэнт тохируулагдсан банкны дансыг арилгах боломжгүй." #. module: account #: code:addons/account/models/account.py:339 @@ -11777,6 +12188,8 @@ msgid "" "You cannot set a currency on this account as it already has some journal " "entries having a different foreign currency." msgstr "" +"Энэ дансанд аль хэдийнээ ялгаатай валютын гүйлгээнүүд бүртгэгдсэн тул та уг " +"дансанд ямар нэг валют тохируулах боломжгүй." #. module: account #: code:addons/account/models/account.py:301 @@ -11785,12 +12198,14 @@ msgid "" "You cannot switch an account to prevent the reconciliation if some partial " "reconciliations are still pending." msgstr "" +"Энэ дансанд ямар нэг дутуу тулгагдсан гүйлгээ бүртгэлтэй байгаа тул та " +"дансны тулгалт хийх тохиргоог өөрчлөх боломжгүй байна." #. module: account #: code:addons/account/models/account_move.py:1102 #, python-format msgid "You cannot use a deprecated account." -msgstr "" +msgstr "Та хэрэгцээгүй болсон дансыг ашиглах боломжгүй." #. module: account #: code:addons/account/models/account_move.py:1061 @@ -11810,6 +12225,8 @@ msgid "" "You cannot validate an invoice with a negative total amount. You should " "create a credit note instead." msgstr "" +"Та хасах утга бүхий нийт дүнтэй нэхэмжлэлийг батлах боломжгүй. Үүний оронд " +"буцаалтын нэхэмжлэл үүсгэнэ үү." #. module: account #: model_terms:ir.ui.view,arch_db:account.invoice_form @@ -11831,18 +12248,19 @@ msgid "" "You have to define an 'Internal Transfer Account' in your cash register's " "journal." msgstr "" +"Та кассын бүртгэлийн журнал дээр 'Дотоод шилжүүлгийн данс' тохируулна уу." #. module: account #: code:addons/account/models/account.py:147 #, python-format msgid "You must first define an opening move." -msgstr "" +msgstr "Эхлээд та нээлтийн ажил гүйлгээ бүртгэх хэрэгтэй." #. module: account #: code:addons/account/models/account_invoice.py:1726 #, python-format msgid "You must first select a partner." -msgstr "" +msgstr "Та эхлээд харилцагч сонгох ёстой." #. module: account #. openerp-web @@ -11935,27 +12353,27 @@ msgstr "код" #. module: account #: selection:account.payment.term.line,option:0 msgid "day(s) after the end of the invoice month" -msgstr "" +msgstr "Нэхэмжилсэн сарын эцсээс хойшхи хоногийн тоо" #. module: account #: selection:account.payment.term.line,option:0 msgid "day(s) after the invoice date" -msgstr "" +msgstr "Нэхэмжилсэн огноогоос хойшхи өдрийн тоо" #. module: account #: model_terms:ir.ui.view,arch_db:account.setup_bank_account_wizard msgid "e.g BE15001559627230" -msgstr "" +msgstr "ж.ш BE15001559627230" #. module: account #: model_terms:ir.ui.view,arch_db:account.setup_bank_account_wizard msgid "e.g Bank of America" -msgstr "" +msgstr "ж.ш Америкын банк" #. module: account #: model_terms:ir.ui.view,arch_db:account.setup_bank_account_wizard msgid "e.g Checking account" -msgstr "" +msgstr "ж.ш Чекийн данс" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_reconcile_model_form @@ -11979,17 +12397,17 @@ msgstr "байна. Энэ баримтыг хуваарилж төлсөнөөÑ #: code:addons/account/static/src/xml/account_reconciliation.xml:320 #, python-format msgid "have been reconciled automatically." -msgstr "" +msgstr "автоматаар тулгагдсан." #. module: account #: selection:account.payment.term.line,option:0 msgid "of the current month" -msgstr "" +msgstr "тухайн сарын" #. module: account #: selection:account.payment.term.line,option:0 msgid "of the following month" -msgstr "" +msgstr "Дараагийн сарын" #. module: account #: model_terms:ir.ui.view,arch_db:account.invoice_supplier_form @@ -12006,7 +12424,7 @@ msgstr "хэтэрсэн төлбөр" #: code:addons/account/static/src/xml/account_reconciliation.xml:169 #, python-format msgid "reconciliation models" -msgstr "" +msgstr "тулгалтын загвар" #. module: account #. openerp-web @@ -12027,7 +12445,7 @@ msgstr "гүйлгээний секунд." #: code:addons/account/static/src/xml/account_reconciliation.xml:321 #, python-format msgid "statement lines" -msgstr "" +msgstr "гүйлгээний мөрүүд" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_partner_property_form @@ -12039,7 +12457,7 @@ msgstr "эцэг компани" #: code:addons/account/static/src/xml/account_reconciliation.xml:55 #, python-format msgid "transactions in" -msgstr "" +msgstr "гүйлгээг дараах хугацаанд тулгалт хийсэн" #. module: account #: model:ir.model.fields,help:account.field_account_invoice__amount_by_group diff --git a/addons/account/i18n/nl.po b/addons/account/i18n/nl.po index 0491df8b8ec..703fe0a0bd6 100644 --- a/addons/account/i18n/nl.po +++ b/addons/account/i18n/nl.po @@ -45,7 +45,7 @@ msgid "" " * The 'Cancelled' status is used when user cancel invoice." msgstr "" " * De 'Concept' status wordt gebruikt wanneer een gebruiker een nieuwe factuur aan het ingeven is. Deze factuur werd nog niet bevestigd.\n" -" * De 'Open' status wordt gebruikt wanneer de gebruiker een factuur aanmaakt, een nieuwe factuurnummer wordt gegenereerd. De factuur blijft open tot deze betaald is.\n" +" * De 'Open' status wordt gebruikt wanneer de gebruiker een factuur aanmaakt, er wordt een nieuwe factuurnummer gegenereerd. De factuur blijft open tot deze betaald is.\n" " * De 'In betaling' status wordt gebruikt wanneer betalingen werden ontvangen, voor de gehele factuur of een gedeelte ervan, in een dagboek dat enkel werd ingesteld voor bank transacties en sommige nog niet werden afgeletterd.\n" " * De 'Betaald' status wordt automatisch ingesteld wanneer de factuur betaald is. De gerelateerde boekingen kunnen zowel reeds afgeletterd zijn als niet afgeletterd zijn.\n" " * De 'Geannuleerd' status wordt gebruikt wanneer de gebruiker de factuur annuleert." @@ -171,7 +171,7 @@ msgstr "" " Beste${object.partner_id.name}<br/><br/>\n" " Bedankt voor uw betaling\n" " Hierbij sturen wij u het afschrift van de betaling <strong>${(object.name or '').replace('/','-')}</strong> voor het bedrag van\n" -" tot <strong>${format_amount(object.amount, object.currency_id)}</strong> van ${object.company_id.name}.\n" +" <strong>${format_amount(object.amount, object.currency_id)}</strong> van ${object.company_id.name}.\n" " <br/><br/>\n" " Twijfel zeker niet om ons te contacteren indien u nog verdere vragen heeft.\n" " <br/><br/>\n" @@ -228,7 +228,7 @@ msgstr "" " factuur\n" " %endif\n" " % if object.origin:\n" -" (with reference: ${object.origin})\n" +" (met referentie: ${object.origin})\n" " % endif\n" " voor een bedrag van <strong>${format_amount(object.amount_total, object.currency_id)}</strong>\n" " ten aanzien van ${object.company_id.name}.\n" @@ -1411,8 +1411,8 @@ msgid "" msgstr "" "Voeg een EPC QR codering toe aan uw facturen. Dit stelt uw klanten in staat " "om onmiddellijk over te gaan tot betaling via hun mobiele bank applicaties. " -"EPC QR codering worden gebruikt door de meerderheid van Europese banken voor" -" de verwerking van de SEPA verrichtingen." +"EPC QR coderingen worden gebruikt door de meerderheid van Europese banken " +"voor de verwerking van de SEPA verrichtingen." #. module: account #: model_terms:ir.ui.view,arch_db:account.view_move_form @@ -5277,8 +5277,9 @@ msgid "" " type and recipient bank account in the generated payments. If disabled,\n" " a distinct payment will be generated for each invoice." msgstr "" -"Indien geactiveerd, groepeert facturen volgens commerciële relatie, factuurrekening, aard en herkomst bankrekening in de verwerkte betalingen. \n" -"Indien gedeactiveerd, genereert een aparte betaling per factuur. " +"Indien geactiveerd, groepeert dit facturen volgens commerciële relatie, factuurrekening, aard en herkomst van de bankrekening in de verwerkte betalingen. \n" +"Indien gedeactiveerd, \n" +"genereert het een aparte betaling per factuur. " #. module: account #: model:ir.model.fields,help:account.field_account_tax__include_base_amount @@ -6324,7 +6325,7 @@ msgid "" "expense account on the product category will be used." msgstr "" "Laat dit veld leeg om de standaard waarde uit de productcategorie te " -"gebruiken. Bij anlgo-saksische boekhouding met realtime waardering, zal de " +"gebruiken. Bij anglo-saksische boekhouding met realtime waardering, zal de " "kostenrekening op de productcategorie gebruikt worden." #. module: account @@ -6781,11 +6782,11 @@ msgid "" "Batch Deposit: Encase several customer checks at once by generating a batch deposit to submit to your bank. When encoding the bank statement in Odoo, you are suggested to reconcile the transaction with the batch deposit.To enable batch deposit, module account_batch_payment must be installed.\n" "SEPA Credit Transfer: Pay bill from a SEPA Credit Transfer file you submit to your bank. To enable sepa credit transfer, module account_sepa must be installed " msgstr "" -"Handmatig: Krijg betaald met contant geld, cheques of een andere methode buiten Odoo om\n" +"Handmatig: Krijg betaald met contant geld, cheques of een andere methode buiten Odoo om.\n" "Elektronisch: Betaal automatisch via een betalingsverwerker door een transactie aan te vragen op een door de klant opgeslagen kaart bij het online kopen of abonneren van (betalingstoken).\n" "Cheque: Betaal factuur met een cheque en druk deze af in Odoo\n" "Batch Deposito: Verzamel meerdere klantcheques tegelijk door een batch deposito te genereren om bij uw bank in te dienen. Wanneer u de bankafschriften in Odoo ingeeft, wordt u voorgesteld om de transactie af te letteren met de batchafbetaling. Schakel deze optie in bij instellingen.\n" -"SEPA overschrijving: Betaal de factuur met een SEPA verschrijvingsbestand welke je upload bij de bank. Om SEPA te activeren dient te module ccount_sepa worden geïnstalleerd." +"SEPA overschrijving: Betaal de factuur met een SEPA overschrijvingsbestand welke je upload bij de bank. Om SEPA te activeren dient te module account_sepa worden geïnstalleerd." #. module: account #: model:ir.model.fields,help:account.field_account_journal__outbound_payment_method_ids @@ -7545,7 +7546,7 @@ msgid "" "otherwise it would make a gap in the numbering. You should book an entry and" " make a regular revert of it in case you want to cancel it." msgstr "" -"Bewerking niet toegelaten. Aangezien u bankafschriftregel reeds een nummer " +"Bewerking niet toegelaten. Aangezien uw bankafschriftregel reeds een nummer " "(%s) heeft gekregen, kunt u het niet compleet afletteren tegen bestaande " "boekingen anders ontstaat er een gat in de nummering. U kan de boeking maken" " en terugzetten wanneer u deze wil annuleren." @@ -8377,7 +8378,7 @@ msgid "" "Programmation Error: Can't call _get_wo_suggestion_query() for different " "rules than 'writeoff_suggestion'" msgstr "" -"Programmatie Error: kan niet aangeroepen worden _get_wo_suggestion_query() " +"Programmatie Error: _get_wo_suggestion_query() kan niet aangeroepen worden " "voor een andere regel dan 'writeoff_suggestion'" #. module: account @@ -10381,7 +10382,7 @@ msgid "" " don't want to reconcile all the past payments with bank statements." msgstr "" "De bank afletterfunctie zal niet vragen om de betalingen af te letteren welke ouder zijn dan deze datum.\n" -"Dit is zinvol als u boekhouding installeerde nadat u facturatie reeds geruime tijd in gebruik had en\n" +"Dit is zinvol als u de boekhouding applicatie installeerde nadat u facturatie reeds geruime tijd in gebruik had en\n" "niet wil afletteren van oudere betalingen met bankafschriften." #. module: account @@ -10392,8 +10393,8 @@ msgid "" " don't want to reconcile all the past payments with bank statements." msgstr "" "De bank afletterfunctie zal niet vragen om de betalingen af te letteren welke ouder zijn dan deze datum.\n" -"Dit is zinvol als u boekhouding installeerde nadat u facturatie reeds geruime tijd in gebruik had en\n" -"niet wil afletteren van oudere betalingen met bankafschriften." +"Dit is zinvol als u de boekhouding applicatie installeerde nadat u facturatie reeds geruime tijd in gebruik had en\n" +" oudere betalingen niet wil afletteren met bankafschriften." #. module: account #: model:ir.model.fields,help:account.field_account_move_line__statement_id @@ -10710,7 +10711,7 @@ msgid "" " * Amount Paid: Only applied when paying an amount.\n" " * Amount Paid/Received: Applied in both cases." msgstr "" -"Het reconsiliatie model zal enkel toegepast worden op het geselecteerde verrchting type:\n" +"Het afletter model zal enkel toegepast worden op het geselecteerde verrichting type:\n" " * Ontvangen bedrag: Enkel toegepast indien bedrag ontvangen.\n" " * Bedrag betaald: Enkel toegepast indien bedrag betaald.\n" " * Bedrag betaald/ontvangen: Toegepast in beide gevallen." @@ -10743,9 +10744,9 @@ msgid "" " * Not Contains: Negation of \"Contains\".\n" " * Match Regex: Define your own regular expression." msgstr "" -"Het reconsilliatie model zal enkel toegepast worden indien de label:\n" -" * Bevatten: De voorgestelde label zal de string bevatten (hoofdletter gevoelig).\n" -" * Niet Bevatten: Negatie van \"Bevatten\".\n" +"Het aflettermodel zal enkel toegepast worden indien het label:\n" +" * Bevat: De voorgestelde label zal de string bevatten (hoofdletter gevoelig).\n" +" * Bevat niet: Negatie van \"Bevat\".\n" " * Match Regex: Definieer uw eigen reguliere expressie." #. module: account @@ -10957,7 +10958,7 @@ msgid "" "-This installs the account_batch_payment module." msgstr "" "Dit stelt u in staat om groepsbetalingen uit te voeren in een enkele beweging en dit vereenvoudigd het reconsilliatie proces.\n" -"- Dit installeerd de account_batch_payment module. " +"- Dit installeert de account_batch_payment module. " #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form diff --git a/addons/account/i18n/ro.po b/addons/account/i18n/ro.po index a8b2c9271da..ceb40c2496c 100644 --- a/addons/account/i18n/ro.po +++ b/addons/account/i18n/ro.po @@ -187,7 +187,7 @@ msgstr "" #. module: account #: model_terms:ir.ui.view,arch_db:account.portal_my_home_menu_invoice msgid "<em>Draft Invoice</em>" -msgstr "" +msgstr "<em>Factură ciornă" #. module: account #: model_terms:ir.ui.view,arch_db:account.account_move_line_view_kanban @@ -215,7 +215,7 @@ msgstr "" #. module: account #: model_terms:ir.ui.view,arch_db:account.portal_invoice_page msgid "<i class=\"fa fa-fw fa-comments\"/><b>Send message</b>" -msgstr "" +msgstr "<i class=\"fa fa-fw fa-comments\"/><b>Trimiteți un mesaj</b>" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_journal_form @@ -253,6 +253,9 @@ msgid "" " aria-label=\"Opened\" title=\"Opened\" role=\"img\"/><span class=\"d-none d" "-md-inline\"> Waiting for Payment</span></span>" msgstr "" +"<span class=\"badge badge-pill badge-info\"><i class=\"fa fa-fw fa-clock-o\"" +" aria-label=\"Opened\" title=\"Opened\" role=\"img\"/><span class=\"d-none d" +"-md-inline\">Se așteaptă plata</span></span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.portal_my_invoices @@ -425,7 +428,7 @@ msgstr "" #. module: account #: model_terms:ir.ui.view,arch_db:account.report_invoice_document msgid "<span>Description</span>" -msgstr "" +msgstr "<span>Descriere</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.report_invoice_document @@ -480,7 +483,7 @@ msgstr "" #. module: account #: model_terms:ir.ui.view,arch_db:account.report_invoice_document msgid "<span>Quantity</span>" -msgstr "" +msgstr "<span>Cantitate</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.account_journal_dashboard_kanban_view @@ -529,7 +532,7 @@ msgstr "" #. module: account #: model_terms:ir.ui.view,arch_db:account.portal_invoice_page msgid "<strong class=\"text-muted\">Your Contact</strong>" -msgstr "" +msgstr "<strong class=\"text-muted\">Contactul dvs.</strong>" #. module: account #: model_terms:ir.ui.view,arch_db:account.report_invoice_document_with_payments @@ -1125,7 +1128,7 @@ msgstr "Înregistrări contabile" #. module: account #: model:ir.actions.act_window,name:account.open_account_journal_dashboard_kanban msgid "Accounting Overview" -msgstr "" +msgstr "Contabilitate generală" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_partner_property_form @@ -1226,7 +1229,7 @@ msgstr "" #. module: account #: model_terms:ir.ui.view,arch_db:account.onboarding_bank_account_step msgid "Add a bank" -msgstr "" +msgstr "Adaugă o bancă" #. module: account #: model_terms:ir.actions.act_window,help:account.action_account_journal_form @@ -1236,7 +1239,7 @@ msgstr "" #. module: account #: model_terms:ir.ui.view,arch_db:account.invoice_form msgid "Add a line" -msgstr "" +msgstr "Adăugați o linie" #. module: account #: model_terms:ir.actions.act_window,help:account.action_account_form @@ -1251,7 +1254,7 @@ msgstr "" #. module: account #: model_terms:ir.ui.view,arch_db:account.invoice_form msgid "Add a note" -msgstr "" +msgstr "Adaugă o notă" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form @@ -1507,12 +1510,12 @@ msgstr "Valoare" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_line__price_total msgid "Amount (with Taxes)" -msgstr "" +msgstr "Valoare (cu taxe)" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_line__price_subtotal msgid "Amount (without Taxes)" -msgstr "" +msgstr "Valoare (fără taxe)" #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement_line__amount_currency @@ -2308,7 +2311,7 @@ msgstr "Facturile de plată" #. module: account #: model_terms:ir.ui.view,arch_db:account.account_journal_dashboard_kanban_view msgid "Bills to Validate" -msgstr "" +msgstr "Facturi de validat" #. module: account #: code:addons/account/models/account_journal_dashboard.py:178 @@ -3051,7 +3054,7 @@ msgstr "Configurare" #: code:addons/account/static/src/js/section_and_note_fields_backend.js:102 #, python-format msgid "Configure a product" -msgstr "" +msgstr "Configurați un produs" #. module: account #: model:ir.actions.act_window,name:account.action_open_account_onboarding_invoice_layout @@ -3314,7 +3317,7 @@ msgstr "Creează model" #. module: account #: selection:account.setup.bank.manual.config,create_or_link_option:0 msgid "Create new journal" -msgstr "" +msgstr "Creați un jurnal nou" #. module: account #: model_terms:ir.actions.act_window,help:account.rounding_list_action @@ -3917,7 +3920,7 @@ msgstr "" #. module: account #: model_terms:ir.ui.view,arch_db:account.onboarding_fiscal_year_step msgid "Define your fiscal years opening & closing dates." -msgstr "" +msgstr "Definiți datele de deschidere și de închidere a anului fiscal." #. module: account #: model:ir.model.fields,help:account.field_account_journal__bank_statements_source @@ -4032,7 +4035,7 @@ msgstr "" #. module: account #: model:ir.model,name:account.model_digest_digest msgid "Digest" -msgstr "" +msgstr "Rezumat" #. module: account #: model:ir.model.fields,help:account.field_res_config_settings__group_products_in_bills @@ -5205,12 +5208,12 @@ msgstr "" #. module: account #: model:ir.actions.act_window,name:account.account_invoice_import_wizard_action msgid "Import Vendor Bills" -msgstr "" +msgstr "Importați facturile furnizorului" #. module: account #: model:ir.model,name:account.model_account_invoice_import_wizard msgid "Import Your Vendor Bills from Files." -msgstr "" +msgstr "Importați facturile furnizorului din fișiere." #. module: account #: model:ir.model.fields,field_description:account.field_res_config_settings__module_account_bank_statement_import_csv @@ -5629,6 +5632,8 @@ msgid "" "Invoice_${(object.number or '').replace('/','_')}${object.state == 'draft' " "and '_draft' or ''}" msgstr "" +"Factură_${(object.number or '').replace('/','_')}${object.state == 'draft' " +"and '_ciornă' or ''}" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_invoice_report_search @@ -5688,7 +5693,7 @@ msgstr "" #. module: account #: model_terms:ir.ui.view,arch_db:account.account_journal_dashboard_kanban_view msgid "Invoices to Validate" -msgstr "" +msgstr "Facturi de validat" #. module: account #: model:ir.model.fields,help:account.field_account_payment__reconciled_invoice_ids @@ -6357,7 +6362,7 @@ msgstr "" #. module: account #: selection:account.setup.bank.manual.config,create_or_link_option:0 msgid "Link to an existing journal" -msgstr "" +msgstr "Legați de un jurnal existent" #. module: account #: model:ir.model.fields,help:account.field_account_invoice__move_id @@ -8081,7 +8086,7 @@ msgstr "Achiziție" #. module: account #: model_terms:ir.ui.view,arch_db:account.invoice_supplier_form msgid "Purchase Representative" -msgstr "" +msgstr "Responsabil achiziție" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form @@ -9030,17 +9035,17 @@ msgstr "" #. module: account #: model_terms:ir.ui.view,arch_db:account.onboarding_bank_account_step msgid "Setup your bank account to sync bank feeds." -msgstr "" +msgstr "Configurați contul dvs. bancar pentru a sincroniza fluxurile bancare." #. module: account #: model_terms:ir.ui.view,arch_db:account.onboarding_chart_of_account_step msgid "Setup your chart of accounts and record initial balances." -msgstr "" +msgstr "Configurați planul de conturi și înregistrați soldurile inițiale." #. module: account #: model_terms:ir.ui.view,arch_db:account.dashboard_onboarding_company_step msgid "Setup your company's data for reports headers." -msgstr "" +msgstr "Configurați datele companiei pentru anteturile de rapoarte." #. module: account #: model:ir.actions.server,name:account.model_account_invoice_action_share @@ -11519,6 +11524,7 @@ msgid "" "You cannot change the currency of the company since some journal items " "already exist" msgstr "" +"Nu puteți schimba moneda companiei deoarece există deja articole de jurnale" #. module: account #: code:addons/account/models/account.py:317 diff --git a/addons/account/i18n/ru.po b/addons/account/i18n/ru.po index e26f26e9ed7..303e739d7bd 100644 --- a/addons/account/i18n/ru.po +++ b/addons/account/i18n/ru.po @@ -37,6 +37,7 @@ # Collex100, 2019 # Sergo S, 2019 # Vasiliy Korobatov <korobatov@gmail.com>, 2019 +# Oleg Kuryan <oleg@ventor.tech>, 2019 # msgid "" msgstr "" @@ -44,7 +45,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-01-16 07:59+0000\n" "PO-Revision-Date: 2016-08-05 12:55+0000\n" -"Last-Translator: Vasiliy Korobatov <korobatov@gmail.com>, 2019\n" +"Last-Translator: Oleg Kuryan <oleg@ventor.tech>, 2019\n" "Language-Team: Russian (https://www.transifex.com/odoo/teams/41243/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -3693,7 +3694,7 @@ msgstr "Платежи заказчиков" #. module: account #: model:ir.model.fields,help:account.field_account_invoice__access_url msgid "Customer Portal URL" -msgstr "" +msgstr "Ссылка на портал клиента" #. module: account #: model:ir.model.fields,field_description:account.field_product_product__taxes_id @@ -7960,7 +7961,7 @@ msgstr "" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice__access_url msgid "Portal Access URL" -msgstr "" +msgstr "Ссылка для доступа в портал" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_move_form diff --git a/addons/account/i18n/tr.po b/addons/account/i18n/tr.po index 0e0adc23c2b..bfea215d4e2 100644 --- a/addons/account/i18n/tr.po +++ b/addons/account/i18n/tr.po @@ -204,12 +204,12 @@ msgstr "Taslak Fatura" #: model_terms:ir.ui.view,arch_db:account.account_move_line_view_kanban #: model_terms:ir.ui.view,arch_db:account.view_account_move_kanban msgid "<i class=\"fa fa-clock-o\" aria-label=\"Date\" role=\"img\" title=\"Date\"/>" -msgstr "" +msgstr "<i class=\"fa fa-clock-o\" aria-label=\"Date\" role=\"img\" title=\"Date\"/>" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_payment_kanban msgid "<i class=\"fa fa-clock-o\" role=\"img\" aria-label=\"Date\" title=\"Date\"/>" -msgstr "" +msgstr "<i class=\"fa fa-clock-o\" role=\"img\" aria-label=\"Date\" title=\"Date\"/>" #. module: account #: model_terms:ir.ui.view,arch_db:account.portal_invoice_page @@ -222,6 +222,8 @@ msgid "" "<i class=\"fa fa-ellipsis-v\" aria-label=\"Selection\" role=\"img\" " "title=\"Selection\"/>" msgstr "" +"<i class=\"fa fa-ellipsis-v\" aria-label=\"Selection\" role=\"img\" " +"title=\"Selection\"/>" #. module: account #: model_terms:ir.ui.view,arch_db:account.portal_invoice_page @@ -264,6 +266,9 @@ msgid "" " aria-label=\"Opened\" title=\"Opened\" role=\"img\"/><span class=\"d-none d" "-md-inline\"> Waiting for Payment</span></span>" msgstr "" +"<span class=\"badge badge-pill badge-info\"><i class=\"fa fa-fw fa-clock-o\"" +" aria-label=\"Opened\" title=\"Opened\" role=\"img\"/><span class=\"d-none d" +"-md-inline\"> Ödeme Bekleniyor</span></span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.portal_my_invoices @@ -288,6 +293,9 @@ msgid "" "specific.\" aria-label=\"Values set here are company-specific.\" " "groups=\"base.group_multi_company\" role=\"img\"/>" msgstr "" +"<span class=\"fa fa-lg fa-building-o\" title=\"Values set here are company-" +"specific.\" aria-label=\"Values set here are company-specific.\" " +"groups=\"base.group_multi_company\" role=\"img\"/>" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form @@ -295,6 +303,8 @@ msgid "" "<span class=\"fa fa-lg fa-building-o\" title=\"Values set here are company-" "specific.\"/>" msgstr "" +"<span class=\"fa fa-lg fa-building-o\" title=\"Values set here are company-" +"specific.\"/>" #. module: account #: model_terms:ir.ui.view,arch_db:account.invoice_supplier_form @@ -386,6 +396,8 @@ msgid "" "<span class=\"text-muted\">Only journals not yet linked to a bank account " "are proposed</span>" msgstr "" +"<span class=\"text-muted\">Sadece henüz bir banka hesabına bağlı olmayan " +"yevmiye önerilmektedir</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.report_invoice_document @@ -499,7 +511,7 @@ msgstr "<span>İşlemler</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.report_payment_receipt_document msgid "<span>Original Amount</span>" -msgstr "" +msgstr "<span>Orijinal Tutar</span>" #. module: account #: model_terms:ir.ui.view,arch_db:account.report_invoice_document @@ -686,7 +698,7 @@ msgstr "Bir Ödeme Vadesi, Bakiye tipinin sadece bir satırına sahip olmalı." #: code:addons/account/models/account.py:861 #, python-format msgid "A bank account can belong to only one journal." -msgstr "" +msgstr "Bir banka hesabı yalnızca bir yevmiye ait olabilir." #. module: account #: model_terms:ir.actions.act_window,help:account.action_bank_statement_tree @@ -1343,7 +1355,7 @@ msgstr "Ek notlar..." #: selection:account.tax,type_tax_use:0 #: selection:account.tax.template,type_tax_use:0 msgid "Adjustment" -msgstr "" +msgstr "Düzeltme" #. module: account #: model:ir.model.fields,field_description:account.field_tax_adjustments_wizard__tax_id @@ -1717,7 +1729,7 @@ msgstr "Analitik Hesap" #: model:ir.ui.menu,name:account.account_analytic_group_menu #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form msgid "Analytic Account Groups" -msgstr "" +msgstr "Analitik Hesap Grupları" #. module: account #: model:ir.model.fields,field_description:account.field_res_config_settings__group_analytic_accounting @@ -2263,7 +2275,7 @@ msgstr "Faturaya dayalı" #: code:addons/account/models/company.py:19 #, python-format msgid "Based on Invoice Number" -msgstr "" +msgstr "Fatura Numarasına Göre" #. module: account #: model:ir.model.fields,help:account.field_account_tax__tax_exigibility @@ -2838,7 +2850,7 @@ msgstr "" #. module: account #: model_terms:ir.actions.act_window,help:account.actions_account_fiscal_year msgid "Click here to create a new fiscal year." -msgstr "" +msgstr "Yeni bir mali yıl oluşturmak için buraya tıklayın." #. module: account #. openerp-web @@ -2870,7 +2882,7 @@ msgstr "" #: code:addons/account/static/src/xml/account_reconciliation.xml:17 #, python-format msgid "Click to Rename" -msgstr "" +msgstr "Yeniden Adlandırma için Tıklayın" #. module: account #. openerp-web @@ -3088,7 +3100,7 @@ msgstr "Yapılandır" #: code:addons/account/static/src/js/section_and_note_fields_backend.js:102 #, python-format msgid "Configure a product" -msgstr "" +msgstr "Bir Ürünü Yapılandır" #. module: account #: model:ir.actions.act_window,name:account.action_open_account_onboarding_invoice_layout @@ -3218,7 +3230,7 @@ msgstr "Karşı Hesap" #. module: account #: model_terms:ir.ui.view,arch_db:account.view_account_reconcile_model_form msgid "Counterpart Values" -msgstr "" +msgstr "Karşı Değerler" #. module: account #: model:ir.model.fields,field_description:account.field_account_fiscal_position__country_id @@ -5277,7 +5289,7 @@ msgstr ".qif biçiminde içe aktar" #. module: account #: model:ir.actions.act_window,name:account.account_invoice_import_wizard_action msgid "Import Vendor Bills" -msgstr "" +msgstr "Tedarikçi Faturalarını İçe Aktar" #. module: account #: model:ir.model,name:account.model_account_invoice_import_wizard @@ -5791,7 +5803,7 @@ msgstr "Faturalama" #: selection:account.reconcile.model,match_amount:0 #: selection:account.reconcile.model.template,match_amount:0 msgid "Is Between" -msgstr "" +msgstr "Arasında" #. module: account #: model:ir.model.fields,field_description:account.field_account_bank_statement__message_is_follower @@ -5804,13 +5816,13 @@ msgstr "Takipçi mi" #: selection:account.reconcile.model,match_amount:0 #: selection:account.reconcile.model.template,match_amount:0 msgid "Is Greater Than" -msgstr "" +msgstr "Büyüktür" #. module: account #: selection:account.reconcile.model,match_amount:0 #: selection:account.reconcile.model.template,match_amount:0 msgid "Is Lower Than" -msgstr "" +msgstr "Küçüktür" #. module: account #: model:ir.model.fields,field_description:account.field_account_invoice_send__printed @@ -7039,7 +7051,7 @@ msgstr "Normal Borçlu" #: selection:account.reconcile.model,match_label:0 #: selection:account.reconcile.model.template,match_label:0 msgid "Not Contains" -msgstr "" +msgstr "İçermez" #. module: account #: selection:res.company,account_dashboard_onboarding_state:0 @@ -8607,7 +8619,7 @@ msgstr "" #. module: account #: model:ir.model.fields,field_description:account.field_account_move__reverse_date msgid "Reversal Date" -msgstr "" +msgstr "Ters Tarih" #. module: account #: model:ir.model.fields,field_description:account.field_account_move_reversal__date diff --git a/addons/account/i18n/zh_CN.po b/addons/account/i18n/zh_CN.po index 0ba0ee0df10..bf62679cd61 100644 --- a/addons/account/i18n/zh_CN.po +++ b/addons/account/i18n/zh_CN.po @@ -36,7 +36,7 @@ # sunny sun <sunxiaoxia@inspur.com>, 2018 # Maie <m@maie.name>, 2018 # liulixia <liu.lixia@elico-corp.com>, 2018 -# e2f_cn r14 <e2f_cn_r14@outlook.com>, 2018 +# 0023d6d916c2d56e4d76ed7a6e80ad5b, 2018 # John Lin <linyinhuan@139.com>, 2018 # xiaobin wu <bd5dml@gmail.com>, 2018 # Henry Zhou <zhouhenry@live.com>, 2018 @@ -48,10 +48,9 @@ # e2f <projects@e2f.com>, 2019 # Siyuan Gu <siyuancn@hotmail.com>, 2019 # 山西清水欧度(QQ:54773801) <54773801@qq.com>, 2019 -# e2f_cn c7 <e2f_cn_c7@outlook.com>, 2019 +# bf2549c5415a9287249cba2b8a5823c7, 2019 # p too <totopo@163.com>, 2019 # snow wang <147156565@qq.com>, 2019 -# 开阖软件 Jeff Wang <jeff@osbzr.com>, 2019 # 苏州远鼎 <tiexinliu@126.com>, 2019 # waveyeung <waveyeung@qq.com>, 2019 # 老窦 北京 <2662059195@qq.com>, 2019 @@ -74,6 +73,7 @@ # xu xiaohu <xu.xiaohu@gmail.com>, 2019 # inspur qiuguodong <qiuguodong@inspur.com>, 2019 # Jerry Pan <panjianyu@inspur.com>, 2019 +# 开阖软件 Jeff Wang <jeff@osbzr.com>, 2019 # msgid "" msgstr "" @@ -81,7 +81,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-01-16 07:59+0000\n" "PO-Revision-Date: 2016-08-05 12:55+0000\n" -"Last-Translator: Jerry Pan <panjianyu@inspur.com>, 2019\n" +"Last-Translator: 开阖软件 Jeff Wang <jeff@osbzr.com>, 2019\n" "Language-Team: Chinese (China) (https://www.transifex.com/odoo/teams/41243/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -873,7 +873,7 @@ msgstr "选定的语句行已经与帐户移动相协调。" #. module: account #: sql_constraint:account.fiscal.position.tax:0 msgid "A tax fiscal position could be defined only one time on same taxes." -msgstr "" +msgstr "一种税只能定义一个替换规则" #. module: account #: model:res.groups,name:account.group_warning_account @@ -5547,7 +5547,7 @@ msgstr "无效的\"Zip Range\",请正确的配置" #: code:addons/account/models/company.py:106 #, python-format msgid "Invalid fiscal year last day" -msgstr "" +msgstr "会计年度最后一天无效" #. module: account #: code:addons/account/models/account_invoice.py:1358 @@ -10559,6 +10559,8 @@ msgid "" "This customer invoice credit note has been created from: <a href=# data-oe-" "model=account.invoice data-oe-id=%d>%s</a><br>Reason: %s" msgstr "" +"客户红字发票已生成,原发票: <a href=# data-oe-model=account.invoice data-oe-" +"id=%d>%s</a><br>原因: %s" #. module: account #: model_terms:ir.ui.view,arch_db:account.res_config_settings_view_form @@ -10693,6 +10695,8 @@ msgid "" "This vendor bill credit note has been created from: <a href=# data-oe-" "model=account.invoice data-oe-id=%d>%s</a><br>Reason: %s" msgstr "" +"供应商红字发票已生成。原发票:<a href=# data-oe-model=account.invoice data-oe-" +"id=%d>%s</a><br>原因: %s" #. module: account #: model_terms:ir.actions.act_window,help:account.action_validate_account_move diff --git a/addons/account/models/account.py b/addons/account/models/account.py index 8cb2b4f4225..568bf43047e 100644 --- a/addons/account/models/account.py +++ b/addons/account/models/account.py @@ -104,7 +104,7 @@ class AccountAccount(models.Model): @api.model def _search_new_account_code(self, company, digits, prefix): - for num in range(1, 100): + for num in range(1, 10000): new_code = str(prefix.ljust(digits - 1, '0')) + str(num) rec = self.search([('code', '=', new_code), ('company_id', '=', company.id)], limit=1) if not rec: diff --git a/addons/account/models/account_invoice.py b/addons/account/models/account_invoice.py index 4f221aba093..ef13e8a5f4e 100644 --- a/addons/account/models/account_invoice.py +++ b/addons/account/models/account_invoice.py @@ -588,13 +588,16 @@ class AccountInvoice(models.Model): if res.get('type', False) not in ('out_invoice', 'in_refund') or not 'company_id' in res: return res - company = self.env['res.company'].browse(res['company_id']) - if company.partner_id: - partner_bank_result = self.env['res.partner.bank'].search([('partner_id', '=', company.partner_id.id)], limit=1) - if partner_bank_result: - res['partner_bank_id'] = partner_bank_result.id + partner_bank_result = self._get_partner_bank_id(res['company_id']) + if partner_bank_result: + res['partner_bank_id'] = partner_bank_result.id return res + def _get_partner_bank_id(self, company_id): + company = self.env['res.company'].browse(company_id) + if company.partner_id: + return self.env['res.partner.bank'].search([('partner_id', '=', company.partner_id.id)], limit=1) + @api.model def fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False): def get_view_id(xid, name): @@ -1532,6 +1535,11 @@ class AccountInvoice(models.Model): values['payment_term_id'] = False values['refund_invoice_id'] = invoice.id + if values['type'] == 'in_refund': + partner_bank_result = self._get_partner_bank_id(values['company_id']) + if partner_bank_result: + values['partner_bank_id'] = partner_bank_result.id + if date: values['date'] = date if description: diff --git a/addons/account/models/account_move.py b/addons/account/models/account_move.py index c1eac5dd307..58daa1227a8 100644 --- a/addons/account/models/account_move.py +++ b/addons/account/models/account_move.py @@ -311,8 +311,9 @@ class AccountMove(models.Model): @api.multi def post(self): self._post_validate() + # Create the analytic lines in batch is faster as it leads to less cache invalidation. + self.mapped('line_ids').create_analytic_lines() for move in self: - move.line_ids.create_analytic_lines() if move.name == '/': new_name = False journal = move.journal_id diff --git a/addons/account/models/account_payment.py b/addons/account/models/account_payment.py index dfc2b605790..46f6a91bb8b 100644 --- a/addons/account/models/account_payment.py +++ b/addons/account/models/account_payment.py @@ -665,7 +665,9 @@ class account_payment(models.Model): if any(len(record.invoice_ids) != 1 for record in self): # For multiple invoices, there is account.register.payments wizard raise UserError(_("This method should only be called to process a single invoice's payment.")) - return self.post() + res = self.post() + self.mapped('payment_transaction_id').filtered(lambda x: x.state == 'done' and not x.is_processed)._post_process_after_done() + return res def _create_payment_entry(self, amount): """ Create a journal entry corresponding to a payment, if the payment references invoice(s) they are reconciled. diff --git a/addons/account/static/src/xml/account_reconciliation.xml b/addons/account/static/src/xml/account_reconciliation.xml index 57822f75b09..139ce73c402 100644 --- a/addons/account/static/src/xml/account_reconciliation.xml +++ b/addons/account/static/src/xml/account_reconciliation.xml @@ -63,7 +63,7 @@ </t> </p> <t t-if="context && context.active_model"> - <p t-if="context['active_model'] === 'account.journal' || context['active_model'] === 'account.bank.statement'" class="actions_buttons"> + <p t-if="context['active_model'] === 'account.journal' || context['active_model'] === 'account.bank.statement' || context['active_model'] === 'account.bank.statement.import'" class="actions_buttons"> <t t-if="context.journal_id"> <button class="button_back_to_statement btn btn-secondary" t-att-data_journal_id='context.journal_id'>Go to bank statement(s)</button> </t> diff --git a/addons/account/tests/test_account_supplier_invoice.py b/addons/account/tests/test_account_supplier_invoice.py index d1a6ef46902..60979f81b1a 100644 --- a/addons/account/tests/test_account_supplier_invoice.py +++ b/addons/account/tests/test_account_supplier_invoice.py @@ -108,3 +108,38 @@ class TestAccountSupplierInvoice(AccountingTestCase): #I cancel the account move which is in posted state and verifies that it gives warning message with self.assertRaises(Warning): invoice.move_id.button_cancel() + + def test_vendor_bill_refund(self): + invoice_account = self.env['account.account'].search( + [('user_type_id', '=', self.env.ref('account.data_account_type_receivable').id)], limit=1) + invoice_line_account = self.env['account.account'].search( + [('user_type_id', '=', self.env.ref('account.data_account_type_expenses').id)], limit=1) + + if self.env.ref('base.main_partner').bank_account_count > 0: + bank = self.env['res.partner.bank'].search([('partner_id', '=', self.env.ref('base.main_partner').id)], limit=1) + + else: + bank = self.env['res.partner.bank'].create({ + 'acc_number': '12345678910', + 'partner_id': self.env.ref('base.main_partner').id, + }) + + invoice_id = self.env['account.invoice'].create({ + 'name': 'invoice test refund', + 'partner_id': self.env.ref("base.res_partner_2").id, + 'account_id': invoice_account.id, + 'currency_id': self.env.ref('base.USD').id, + 'type': 'in_invoice', + }) + self.env['account.invoice.line'].create({ + 'product_id': self.env.ref("product.product_product_4").id, + 'quantity': 1, + 'price_unit': 15.0, + 'invoice_id': invoice_id.id, + 'name': 'something', + 'account_id': invoice_line_account.id, + }) + + refund_invoices = invoice_id.refund() + + self.assertEqual(refund_invoices.partner_bank_id, bank) diff --git a/addons/account/views/report_invoice.xml b/addons/account/views/report_invoice.xml index bd55957c7c1..c32413a4f1d 100644 --- a/addons/account/views/report_invoice.xml +++ b/addons/account/views/report_invoice.xml @@ -3,7 +3,7 @@ <data> <template id="report_invoice_document"> <t t-call="web.external_layout"> - <t t-set="o" t-value="o.with_context({'lang': lang})"/> + <t t-set="o" t-value="o.with_context(lang=lang)" /> <t t-set="address"> <address t-field="o.partner_id" t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}' /> <div t-if="o.partner_id.vat" class="mt16"><t t-esc="o.company_id.country_id.vat_label or 'Tax ID'"/>: <span t-field="o.partner_id.vat"/></div> diff --git a/addons/account_analytic_default/i18n/mn.po b/addons/account_analytic_default/i18n/mn.po index ec3c0f7616b..06ddb0d30c8 100644 --- a/addons/account_analytic_default/i18n/mn.po +++ b/addons/account_analytic_default/i18n/mn.po @@ -7,13 +7,15 @@ # nasaaskii <nasaaskii@gmail.com>, 2018 # Khishigbat Ganbold <khishigbat@asterisk-tech.mn>, 2018 # Onii Onii <onii0223@yahoo.com>, 2018 +# Baskhuu Lodoikhuu <baskhuujacara@gmail.com>, 2019 +# msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.2\n" +"Project-Id-Version: Odoo Server saas~11.5\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-22 14:10+0000\n" -"PO-Revision-Date: 2018-03-22 14:10+0000\n" -"Last-Translator: Onii Onii <onii0223@yahoo.com>, 2018\n" +"POT-Creation-Date: 2018-09-18 09:49+0000\n" +"PO-Revision-Date: 2016-08-05 12:55+0000\n" +"Last-Translator: Baskhuu Lodoikhuu <baskhuujacara@gmail.com>, 2019\n" "Language-Team: Mongolian (https://www.transifex.com/odoo/teams/41243/mn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -48,6 +50,8 @@ msgid "" "An analytic default requires at least an analytic account or an analytic " "tag." msgstr "" +"Байнга хэрэглэгдэх аналитик гэдэгт аналитик данс эсвэл аналитик пайзыг " +"хэрэглэнэ." #. module: account_analytic_default #: model:ir.model.fields,field_description:account_analytic_default.field_account_analytic_default__analytic_id @@ -70,7 +74,6 @@ msgstr "Шинжилгээний тархалт" #. module: account_analytic_default #: model:ir.actions.act_window,name:account_analytic_default.action_product_default_list -#: model:ir.actions.act_window,name:account_analytic_default.analytic_rule_action_partner #: model:ir.actions.act_window,name:account_analytic_default.analytic_rule_action_user msgid "Analytic Rules" msgstr "Шинжилгээний дүрмүүд" @@ -104,7 +107,7 @@ msgstr "Үүсгэсэн" #. module: account_analytic_default #: model_terms:ir.ui.view,arch_db:account_analytic_default.res_config_settings_view_form msgid "Default Analytic Values" -msgstr "" +msgstr "Шинжилгээний анхны утгууд" #. module: account_analytic_default #: model:ir.model.fields,help:account_analytic_default.field_account_analytic_default__date_stop diff --git a/addons/account_bank_statement_import/i18n/account_bank_statement_import.pot b/addons/account_bank_statement_import/i18n/account_bank_statement_import.pot index 54ac4fabdd0..88d79c1ca5b 100644 --- a/addons/account_bank_statement_import/i18n/account_bank_statement_import.pot +++ b/addons/account_bank_statement_import/i18n/account_bank_statement_import.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-21 13:17+0000\n" -"PO-Revision-Date: 2018-09-21 13:17+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -23,13 +23,13 @@ msgid " Import Template for Bank Statements" msgstr "" #. module: account_bank_statement_import -#: code:addons/account_bank_statement_import/account_bank_statement_import.py:236 +#: code:addons/account_bank_statement_import/account_bank_statement_import.py:234 #, python-format msgid "%d transactions had already been imported and were ignored." msgstr "" #. module: account_bank_statement_import -#: code:addons/account_bank_statement_import/account_bank_statement_import.py:236 +#: code:addons/account_bank_statement_import/account_bank_statement_import.py:234 #, python-format msgid "1 transaction had already been imported and was ignored." msgstr "" @@ -60,11 +60,26 @@ msgid "Accounts Allowed" msgstr "" #. module: account_bank_statement_import +#: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: account_bank_statement_import #: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__active msgid "Active" msgstr "" #. module: account_bank_statement_import +#: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__activity_ids +msgid "Activities" +msgstr "" + +#. module: account_bank_statement_import +#: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__activity_state +msgid "Activity State" +msgstr "" + +#. module: account_bank_statement_import #: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__alias_id msgid "Alias" msgstr "" @@ -85,7 +100,7 @@ msgid "Allow Cancelling Entries" msgstr "" #. module: account_bank_statement_import -#: code:addons/account_bank_statement_import/account_bank_statement_import.py:238 +#: code:addons/account_bank_statement_import/account_bank_statement_import.py:236 #, python-format msgid "Already imported items" msgstr "" @@ -101,7 +116,12 @@ msgid "At Least One Outbound" msgstr "" #. module: account_bank_statement_import -#: code:addons/account_bank_statement_import/account_bank_statement_import.py:82 +#: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: account_bank_statement_import +#: code:addons/account_bank_statement_import/account_bank_statement_import.py:80 #: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__bank_id #, python-format msgid "Bank" @@ -149,7 +169,7 @@ msgid "Cancel" msgstr "" #. module: account_bank_statement_import -#: code:addons/account_bank_statement_import/account_bank_statement_import.py:171 +#: code:addons/account_bank_statement_import/account_bank_statement_import.py:169 #, python-format msgid "Cannot find in which journal import this statement. Please manually select a journal." msgstr "" @@ -185,7 +205,7 @@ msgid "Company related to this journal" msgstr "" #. module: account_bank_statement_import -#: code:addons/account_bank_statement_import/account_bank_statement_import.py:112 +#: code:addons/account_bank_statement_import/account_bank_statement_import.py:110 #, python-format msgid "Could not make sense of the given file.\n" "Did you install the module to support this type of file ?" @@ -260,6 +280,21 @@ msgid "Filename" msgstr "" #. module: account_bank_statement_import +#: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: account_bank_statement_import +#: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__message_channel_ids +msgid "Followers (Channels)" +msgstr "" + +#. module: account_bank_statement_import +#: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: account_bank_statement_import #: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__inbound_payment_method_ids msgid "For Incoming Payments" msgstr "" @@ -286,6 +321,21 @@ msgid "ID" msgstr "" #. module: account_bank_statement_import +#: model:ir.model.fields,help:account_bank_statement_import.field_account_bank_statement_import_journal_creation__message_unread +msgid "If checked new messages require your attention." +msgstr "" + +#. module: account_bank_statement_import +#: model:ir.model.fields,help:account_bank_statement_import.field_account_bank_statement_import_journal_creation__message_needaction +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: account_bank_statement_import +#: model:ir.model.fields,help:account_bank_statement_import.field_account_bank_statement_import_journal_creation__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: account_bank_statement_import #: model:ir.model.fields,help:account_bank_statement_import.field_account_bank_statement_import_journal_creation__group_invoice_lines msgid "If this box is checked, the system will try to group the accounting lines when generating them from invoices." msgstr "" @@ -324,6 +374,11 @@ msgid "Install Import Format" msgstr "" #. module: account_bank_statement_import +#: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: account_bank_statement_import #: model:ir.model.fields,help:account_bank_statement_import.field_account_bank_statement_import_journal_creation__default_credit_account_id msgid "It acts as a default account for credit amount" msgstr "" @@ -345,7 +400,7 @@ msgid "Journal" msgstr "" #. module: account_bank_statement_import -#: code:addons/account_bank_statement_import/account_bank_statement_import.py:73 +#: code:addons/account_bank_statement_import/account_bank_statement_import.py:71 #: model_terms:ir.ui.view,arch_db:account_bank_statement_import.account_bank_statement_import_journal_creation_view #, python-format msgid "Journal Creation" @@ -400,6 +455,11 @@ msgid "Loss Account" msgstr "" #. module: account_bank_statement_import +#: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__message_main_attachment_id +msgid "Main Attachment" +msgstr "" + +#. module: account_bank_statement_import #: model:ir.model.fields,help:account_bank_statement_import.field_account_bank_statement_import_journal_creation__inbound_payment_method_ids msgid "Manual: Get paid by cash, check or any other method outside of Odoo.\n" "Electronic: Get paid automatically through a payment acquirer by requesting a transaction on a card saved by the customer when buying or subscribing online (payment token).\n" @@ -414,17 +474,67 @@ msgid "Manual:Pay bill by cash or any other method outside of Odoo.\n" msgstr "" #. module: account_bank_statement_import +#: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: account_bank_statement_import +#: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__message_ids +msgid "Messages" +msgstr "" + +#. module: account_bank_statement_import +#: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "" + +#. module: account_bank_statement_import +#: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__activity_summary +msgid "Next Activity Summary" +msgstr "" + +#. module: account_bank_statement_import +#: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__activity_type_id +msgid "Next Activity Type" +msgstr "" + +#. module: account_bank_statement_import #: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__sequence_number_next msgid "Next Number" msgstr "" #. module: account_bank_statement_import -#: code:addons/account_bank_statement_import/account_bank_statement_import.py:142 +#: code:addons/account_bank_statement_import/account_bank_statement_import.py:140 #, python-format msgid "No currency found matching '%s'." msgstr "" #. module: account_bank_statement_import +#: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: account_bank_statement_import +#: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__message_has_error_counter +msgid "Number of error" +msgstr "" + +#. module: account_bank_statement_import +#: model:ir.model.fields,help:account_bank_statement_import.field_account_bank_statement_import_journal_creation__message_needaction_counter +msgid "Number of messages which requires an action" +msgstr "" + +#. module: account_bank_statement_import +#: model:ir.model.fields,help:account_bank_statement_import.field_account_bank_statement_import_journal_creation__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: account_bank_statement_import +#: model:ir.model.fields,help:account_bank_statement_import.field_account_bank_statement_import_journal_creation__message_unread_counter +msgid "Number of unread messages" +msgstr "" + +#. module: account_bank_statement_import #: model_terms:ir.ui.view,arch_db:account_bank_statement_import.account_bank_statement_import_journal_creation_view msgid "OK" msgstr "" @@ -440,6 +550,11 @@ msgid "Profit Account" msgstr "" #. module: account_bank_statement_import +#: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__activity_user_id +msgid "Responsible User" +msgstr "" + +#. module: account_bank_statement_import #: model:ir.model.fields,help:account_bank_statement_import.field_account_bank_statement_import_journal_creation__type msgid "Select 'Sale' for customer invoices journals.\n" "Select 'Purchase' for vendor bills journals.\n" @@ -473,18 +588,26 @@ msgid "Show journal on dashboard" msgstr "" #. module: account_bank_statement_import +#: model:ir.model.fields,help:account_bank_statement_import.field_account_bank_statement_import_journal_creation__activity_state +msgid "Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" + +#. module: account_bank_statement_import #: model_terms:ir.ui.view,arch_db:account_bank_statement_import.account_bank_statement_import_journal_creation_view msgid "The account of the statement you are importing is not yet recorded in Odoo. In order to proceed with the import, you need to create a bank journal for this account." msgstr "" #. module: account_bank_statement_import -#: code:addons/account_bank_statement_import/account_bank_statement_import.py:157 +#: code:addons/account_bank_statement_import/account_bank_statement_import.py:155 #, python-format msgid "The account of this statement (%s) is not the same as the journal (%s)." msgstr "" #. module: account_bank_statement_import -#: code:addons/account_bank_statement_import/account_bank_statement_import.py:167 +#: code:addons/account_bank_statement_import/account_bank_statement_import.py:165 #, python-format msgid "The currency of the bank statement (%s) is not the same as the currency of the journal (%s)." msgstr "" @@ -520,13 +643,13 @@ msgid "This field contains the information related to the numbering of the journ msgstr "" #. module: account_bank_statement_import -#: code:addons/account_bank_statement_import/account_bank_statement_import.py:117 +#: code:addons/account_bank_statement_import/account_bank_statement_import.py:115 #, python-format msgid "This file doesn't contain any statement." msgstr "" #. module: account_bank_statement_import -#: code:addons/account_bank_statement_import/account_bank_statement_import.py:125 +#: code:addons/account_bank_statement_import/account_bank_statement_import.py:123 #, python-format msgid "This file doesn't contain any transaction." msgstr "" @@ -537,6 +660,16 @@ msgid "Type" msgstr "" #. module: account_bank_statement_import +#: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__message_unread +msgid "Unread Messages" +msgstr "" + +#. module: account_bank_statement_import +#: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__message_unread_counter +msgid "Unread Messages Counter" +msgstr "" + +#. module: account_bank_statement_import #: model:ir.model.fields,help:account_bank_statement_import.field_account_bank_statement_import_journal_creation__sequence msgid "Used to order Journals in the dashboard view" msgstr "" @@ -552,6 +685,16 @@ msgid "Used to register a profit when the ending balance of a cash register diff msgstr "" #. module: account_bank_statement_import +#: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: account_bank_statement_import +#: model:ir.model.fields,help:account_bank_statement_import.field_account_bank_statement_import_journal_creation__website_message_ids +msgid "Website communication history" +msgstr "" + +#. module: account_bank_statement_import #: model:ir.model.fields,help:account_bank_statement_import.field_account_bank_statement_import_journal_creation__post_at_bank_rec msgid "Whether or not the payments made in this journal should be generated in draft state, so that the related journal entries are only posted when performing bank reconciliation." msgstr "" @@ -562,7 +705,7 @@ msgid "Whether this journal should be displayed on the dashboard or not" msgstr "" #. module: account_bank_statement_import -#: code:addons/account_bank_statement_import/account_bank_statement_import.py:228 +#: code:addons/account_bank_statement_import/account_bank_statement_import.py:226 #, python-format msgid "You already have imported that file." msgstr "" diff --git a/addons/account_bank_statement_import/i18n/es.po b/addons/account_bank_statement_import/i18n/es.po index 793b92740d1..a4704a6ea6f 100644 --- a/addons/account_bank_statement_import/i18n/es.po +++ b/addons/account_bank_statement_import/i18n/es.po @@ -24,6 +24,7 @@ # Jesús Alan Ramos Rodríguez <alan.ramos@jarsa.com.mx>, 2018 # Pedro M. Baeza <pedro.baeza@gmail.com>, 2019 # Gabriel Umaña <gabriel.umana@delfixcr.com>, 2019 +# Jesse Garza <jga@odoo.com>, 2019 # msgid "" msgstr "" @@ -31,7 +32,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-09-21 13:17+0000\n" "PO-Revision-Date: 2016-08-05 12:55+0000\n" -"Last-Translator: Gabriel Umaña <gabriel.umana@delfixcr.com>, 2019\n" +"Last-Translator: Jesse Garza <jga@odoo.com>, 2019\n" "Language-Team: Spanish (https://www.transifex.com/odoo/teams/41243/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -160,7 +161,7 @@ msgstr "Línea de extracto bancario" #. module: account_bank_statement_import #: model:ir.model,name:account_bank_statement_import.model_account_setup_bank_manual_config msgid "Bank setup manual config" -msgstr "" +msgstr "Configuración manual de datos bancarios" #. module: account_bank_statement_import #: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__belongs_to_company diff --git a/addons/account_bank_statement_import/i18n/mn.po b/addons/account_bank_statement_import/i18n/mn.po index 481f137662a..393c5cb5148 100644 --- a/addons/account_bank_statement_import/i18n/mn.po +++ b/addons/account_bank_statement_import/i18n/mn.po @@ -82,7 +82,7 @@ msgstr "Хуурмаг нэр" #. module: account_bank_statement_import #: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__alias_name msgid "Alias Name for Vendor Bills" -msgstr "" +msgstr "Нийлүүлэгчийн нэхэмжлэлийн имэйл нэр" #. module: account_bank_statement_import #: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__alias_domain @@ -103,12 +103,12 @@ msgstr "Аль хэдийнээ импорт хийгдсэн мөрүүд" #. module: account_bank_statement_import #: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__at_least_one_inbound msgid "At Least One Inbound" -msgstr "" +msgstr "Төлбөр хүлээн авах сувагтай" #. module: account_bank_statement_import #: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__at_least_one_outbound msgid "At Least One Outbound" -msgstr "" +msgstr "Төлбөр илгээх сувагтай" #. module: account_bank_statement_import #: code:addons/account_bank_statement_import/account_bank_statement_import.py:82 @@ -145,7 +145,7 @@ msgstr "Банкны хуулгын мөр" #. module: account_bank_statement_import #: model:ir.model,name:account_bank_statement_import.model_account_setup_bank_manual_config msgid "Bank setup manual config" -msgstr "" +msgstr "Банкны данс тохируулга" #. module: account_bank_statement_import #: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__belongs_to_company @@ -174,6 +174,8 @@ msgid "" "Check this box if you don't want to share the same sequence for invoices and" " credit notes made from this journal" msgstr "" +"Үүнийг сонгосноор энэхүү журналд бүртгэгдэх нэхэмжлэл болон буцаалтууд нь " +"дахин давтагдашгүй дугаарлалттай байх болно" #. module: account_bank_statement_import #: model:ir.model.fields,help:account_bank_statement_import.field_account_bank_statement_import_journal_creation__update_posted @@ -244,7 +246,7 @@ msgstr "Валют" #. module: account_bank_statement_import #: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__refund_sequence msgid "Dedicated Credit Note Sequence" -msgstr "" +msgstr "Буцаалтын тусдаа дугаарлалт" #. module: account_bank_statement_import #: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__default_credit_account_id @@ -259,7 +261,7 @@ msgstr "Үндсэн дебит данс" #. module: account_bank_statement_import #: model:ir.model.fields,help:account_bank_statement_import.field_account_bank_statement_import_journal_creation__bank_statements_source msgid "Defines how the bank statements will be registered" -msgstr "" +msgstr "Банкны хуулга хэрхэн бүртгэгдэхийг тодорхойлно" #. module: account_bank_statement_import #: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import__display_name @@ -368,7 +370,7 @@ msgstr "Энэ бол дебит гүйлгээний үндсэн данс" #. module: account_bank_statement_import #: model:ir.model.fields,help:account_bank_statement_import.field_account_bank_statement_import_journal_creation__alias_name msgid "It creates draft vendor bill by sending an email." -msgstr "" +msgstr "Имэйл илгээснээр нийлүүлэгчийн ноорог нэхэмжлэл бүртгэгдэнэ." #. module: account_bank_statement_import #: model:ir.model,name:account_bank_statement_import.model_account_journal @@ -442,6 +444,9 @@ msgid "" "Electronic: Get paid automatically through a payment acquirer by requesting a transaction on a card saved by the customer when buying or subscribing online (payment token).\n" "Batch Deposit: Encase several customer checks at once by generating a batch deposit to submit to your bank. When encoding the bank statement in Odoo,you are suggested to reconcile the transaction with the batch deposit. Enable this option from the settings." msgstr "" +"Гараар: Бэлэн мөнгөөр төлөгдөх эсвэл Odoo системээс гадуур ямар нэг төлбөрийн хэрэгслээр төлөгдөх.\n" +"Электрон: Ямар нэг онлайн төлбөрийн хэрэгсэлээр төлөлт хийх үед автоматаар захиалагчийн гүйлгээ бүртгэгдэх (төлбөрийн token).\n" +"Багц төлбөр: Захиалагч хэд хэдэн төлөлтийг нэгтгэн банкнаар нэг төлбөр шилжүүлэх тохиолдол. Odoo-д банкны гүйлгээ хөтлөгдөх үед танд холбогдох нэхэмжлэлүүдийг сонгож тулгах боломж олгогдоно. Энэ боломжыг тохиргооноос идэвхижүүлээрэй." #. module: account_bank_statement_import #: model:ir.model.fields,help:account_bank_statement_import.field_account_bank_statement_import_journal_creation__outbound_payment_method_ids @@ -450,6 +455,9 @@ msgid "" "Check:Pay bill by check and print it from Odoo.\n" "SEPA Credit Transfer: Pay bill from a SEPA Credit Transfer file you submit to your bank. Enable this option from the settings." msgstr "" +"Гараар: Бэлэн мөнгөөр төлөгдөх эсвэл Odoo системээс гадуур ямар нэг төлбөрийн хэрэгслээр төлөгдөх.\n" +"Чек: Нэхэмжлэлийг чекээр төлж төлбөрийн баримтыг Odoo-с хэвлэх.\n" +"SEPA Credit Transfer: SEPA Credit Transfer систем ашиглан нэхэмжлэлийн төлбөрийг банк руу дамжуулах. Үүний тулд account_sepa модуль суулгах шаардлагатай. " #. module: account_bank_statement_import #: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__sequence_number_next @@ -470,7 +478,7 @@ msgstr "OK" #. module: account_bank_statement_import #: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__post_at_bank_rec msgid "Post At Bank Reconciliation" -msgstr "" +msgstr "Банкны тулгалтаар баталгаажуулах" #. module: account_bank_statement_import #: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__profit_account_id @@ -504,6 +512,8 @@ msgstr "Дараалал" #: model:ir.model.fields,help:account_bank_statement_import.field_account_bank_statement_import_journal_creation__active msgid "Set active to false to hide the Journal without removing it." msgstr "" +"Идэвхитэй талбарыг үгүй утгаар тэмдэглэснээр журналыг устгалгүйгээр нуух " +"боломжтой." #. module: account_bank_statement_import #: model:ir.model.fields,field_description:account_bank_statement_import.field_account_bank_statement_import_journal_creation__code @@ -553,12 +563,12 @@ msgstr "Энэ журналийн бичилтүүдийн нэр нь энэ у #. module: account_bank_statement_import #: model:ir.model.fields,help:account_bank_statement_import.field_account_bank_statement_import_journal_creation__refund_sequence_number_next msgid "The next sequence number will be used for the next credit note." -msgstr "" +msgstr "Дараагийн буцаалтын нэхэмжлэл дээр ашиглагдах дараагийн дугаар" #. module: account_bank_statement_import #: model:ir.model.fields,help:account_bank_statement_import.field_account_bank_statement_import_journal_creation__sequence_number_next msgid "The next sequence number will be used for the next invoice." -msgstr "" +msgstr "Дараагийн нэхэмжлэл дээр ашиглагдах дараагийн дугаар" #. module: account_bank_statement_import #: model:ir.model.fields,help:account_bank_statement_import.field_account_bank_statement_import_journal_creation__refund_sequence_id @@ -566,6 +576,8 @@ msgid "" "This field contains the information related to the numbering of the credit " "note entries of this journal." msgstr "" +"Энэ талбар нь уг журналд хичнээн буцаалтын нэхэмжлэл бүртгэгдсэн тухай " +"мэдээллийг агуулна." #. module: account_bank_statement_import #: model:ir.model.fields,help:account_bank_statement_import.field_account_bank_statement_import_journal_creation__sequence_id @@ -623,6 +635,9 @@ msgid "" "draft state, so that the related journal entries are only posted when " "performing bank reconciliation." msgstr "" +"Энэ журналд бүртгэгдсэн төлбөр төлөлтийн гүйлгээнүүд ноорог төлөвтэй байх ба" +" банкны хуулгатай ижилсүүлэлт буюу тулгалт хийсний эцэст батлагдсан төлөвт " +"шилжинэ." #. module: account_bank_statement_import #: model:ir.model.fields,help:account_bank_statement_import.field_account_bank_statement_import_journal_creation__show_on_dashboard diff --git a/addons/account_bank_statement_import/i18n/nl.po b/addons/account_bank_statement_import/i18n/nl.po index 158499b72d7..30095ea77bd 100644 --- a/addons/account_bank_statement_import/i18n/nl.po +++ b/addons/account_bank_statement_import/i18n/nl.po @@ -451,7 +451,7 @@ msgid "" "Electronic: Get paid automatically through a payment acquirer by requesting a transaction on a card saved by the customer when buying or subscribing online (payment token).\n" "Batch Deposit: Encase several customer checks at once by generating a batch deposit to submit to your bank. When encoding the bank statement in Odoo,you are suggested to reconcile the transaction with the batch deposit. Enable this option from the settings." msgstr "" -"Handmatig: Krijg betaald met contant geld, cheques of een andere methode buiten Odoo om\n" +"Handmatig: Krijg betaald met contant geld, cheques of een andere methode buiten Odoo om.\n" "Elektronisch: Betaal automatisch via een betalingsverwerver door een transactie aan te vragen op een door de klant opgeslagen kaart bij het online kopen of abonneren van (betalingstoken).\n" "Batch Deposito: Verzamel meerdere klantcheques tegelijk door een batch deposito te genereren om bij uw bank in te dienen. Wanneer u de bankafschriften in Odoo ingeeft, wordt u voorgesteld om de transactie af te letteren met de batchafbetaling. Schakel deze optie in bij instellingen." diff --git a/addons/account_check_printing/i18n/account_check_printing.pot b/addons/account_check_printing/i18n/account_check_printing.pot index eddd7858805..b795988873b 100644 --- a/addons/account_check_printing/i18n/account_check_printing.pot +++ b/addons/account_check_printing/i18n/account_check_printing.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-21 13:17+0000\n" -"PO-Revision-Date: 2018-09-21 13:17+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,7 +16,7 @@ msgstr "" "Plural-Forms: \n" #. module: account_check_printing -#: code:addons/account_check_printing/models/account_journal.py:58 +#: code:addons/account_check_printing/models/account_journal.py:61 #, python-format msgid " : Check Number Sequence" msgstr "" @@ -33,6 +33,11 @@ msgid "Account Chart Template" msgstr "" #. module: account_check_printing +#: model:ir.model,name:account_check_printing.model_account_reconciliation_widget +msgid "Account Reconciliation widget" +msgstr "" + +#. module: account_check_printing #: model:ir.model.fields,help:account_check_printing.field_res_company__account_check_printing_margin_left #: model:ir.model.fields,help:account_check_printing.field_res_company__account_check_printing_margin_right #: model:ir.model.fields,help:account_check_printing.field_res_company__account_check_printing_margin_top @@ -125,7 +130,7 @@ msgid "Checks numbering sequence." msgstr "" #. module: account_check_printing -#: code:addons/account_check_printing/models/account_journal.py:97 +#: code:addons/account_check_printing/models/account_journal.py:100 #, python-format msgid "Checks to Print" msgstr "" @@ -216,6 +221,13 @@ msgid "Next Check Number" msgstr "" #. module: account_check_printing +#: code:addons/account_check_printing/models/account_journal.py:27 +#: code:addons/account_check_printing/wizard/print_prenumbered_checks.py:19 +#, python-format +msgid "Next Check Number should only contains numbers." +msgstr "" + +#. module: account_check_printing #: selection:res.company,account_check_printing_layout:0 msgid "None" msgstr "" @@ -263,7 +275,7 @@ msgid "Print Date Label" msgstr "" #. module: account_check_printing -#: code:addons/account_check_printing/models/account_payment.py:94 +#: code:addons/account_check_printing/models/account_payment.py:95 #: model:ir.model,name:account_check_printing.model_print_prenumbered_checks #: model_terms:ir.ui.view,arch_db:account_check_printing.print_pre_numbered_checks_view #, python-format @@ -304,7 +316,7 @@ msgid "The ISO country code in two chars. \n" msgstr "" #. module: account_check_printing -#: code:addons/account_check_printing/models/account_journal.py:26 +#: code:addons/account_check_printing/models/account_journal.py:29 #, python-format msgid "The last check number was %s. In order to avoid a check being rejected by the bank, you can only use a greater number." msgstr "" @@ -337,7 +349,7 @@ msgid "Unmark Sent" msgstr "" #. module: account_check_printing -#: code:addons/account_check_printing/models/account_payment.py:116 +#: code:addons/account_check_printing/models/account_payment.py:117 #, python-format msgid "You have to choose a check layout. For this, go in Apps, search for 'Checks layout' and install one." msgstr "" diff --git a/addons/account_check_printing/i18n/uk.po b/addons/account_check_printing/i18n/uk.po index a8f0cbdbfe2..1fba2a0b551 100644 --- a/addons/account_check_printing/i18n/uk.po +++ b/addons/account_check_printing/i18n/uk.po @@ -68,7 +68,7 @@ msgstr "Скасувати" #: model:ir.model.fields,field_description:account_check_printing.field_res_company__account_check_printing_layout #: model:ir.model.fields,field_description:account_check_printing.field_res_config_settings__account_check_printing_layout msgid "Check Layout" -msgstr "Перевірити компонування" +msgstr "Шаблон чеку" #. module: account_check_printing #: model:ir.model.fields,field_description:account_check_printing.field_res_company__account_check_printing_margin_left diff --git a/addons/account_payment/i18n/account_payment.pot b/addons/account_payment/i18n/account_payment.pot index 962c17acd58..6efad1aef44 100644 --- a/addons/account_payment/i18n/account_payment.pot +++ b/addons/account_payment/i18n/account_payment.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-18 09:49+0000\n" -"PO-Revision-Date: 2018-09-18 09:49+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -81,19 +81,20 @@ msgid "Done, your online payment has been successfully processed. Thank you for msgstr "" #. module: account_payment -#: code:addons/account_payment/controllers/payment.py:47 +#: code:addons/account_payment/controllers/payment.py:49 #, python-format msgid "If we store your payment information on our server, subscription payments will be made automatically." msgstr "" #. module: account_payment -#: code:addons/account_payment/controllers/payment.py:44 +#: code:addons/account_payment/controllers/payment.py:46 #, python-format msgid "Pay & Confirm" msgstr "" #. module: account_payment -#: code:addons/account_payment/models/payment.py:22 +#: code:addons/account_payment/models/payment.py:21 +#: model_terms:ir.ui.view,arch_db:account_payment.portal_invoice_payment #, python-format msgid "Pay Now" msgstr "" diff --git a/addons/account_payment/i18n/ro.po b/addons/account_payment/i18n/ro.po index b818e4d8f6e..03b26659089 100644 --- a/addons/account_payment/i18n/ro.po +++ b/addons/account_payment/i18n/ro.po @@ -3,14 +3,17 @@ # * account_payment # # Translators: -# Martin Trigaux, 2018 +# Cozmin Candea <office@terrabit.ro>, 2018 +# Martin Trigaux, 2019 +# Dorin Hongu <dhongu@gmail.com>, 2019 +# msgid "" msgstr "" "Project-Id-Version: Odoo Server saas~11.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-09-18 09:49+0000\n" -"PO-Revision-Date: 2018-09-18 09:49+0000\n" -"Last-Translator: Martin Trigaux, 2018\n" +"PO-Revision-Date: 2017-12-13 14:50+0000\n" +"Last-Translator: Dorin Hongu <dhongu@gmail.com>, 2019\n" "Language-Team: Romanian (https://www.transifex.com/odoo/teams/41243/ro/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -71,6 +74,9 @@ msgid "" "clock-o\"/><span class=\"d-none d-md-inline\"> Waiting for " "Payment</span></span>" msgstr "" +"<span class=\"badge badge-pill badge-info\"><i class=\"fa fa-fw fa-" +"clock-o\"/><span class=\"d-none d-md-inline\">Se așteaptă " +"plata</span></span>" #. module: account_payment #: model_terms:ir.ui.view,arch_db:account_payment.portal_my_invoices_payment @@ -128,7 +134,7 @@ msgstr "" #. module: account_payment #: model_terms:ir.ui.view,arch_db:account_payment.portal_invoice_payment msgid "Pay with" -msgstr "" +msgstr "Plata cu" #. module: account_payment #: model:ir.model,name:account_payment.model_payment_transaction diff --git a/addons/account_voucher/i18n/mn.po b/addons/account_voucher/i18n/mn.po index 3424f08f698..1b5467015bc 100644 --- a/addons/account_voucher/i18n/mn.po +++ b/addons/account_voucher/i18n/mn.po @@ -696,4 +696,4 @@ msgstr "" #: code:addons/account_voucher/models/account_voucher.py:457 #, python-format msgid "You must first select a partner." -msgstr "" +msgstr "Та эхлээд харилцагч сонгох ёстой." diff --git a/addons/account_voucher/i18n/tr.po b/addons/account_voucher/i18n/tr.po index 7f0311c836e..6dd939094d4 100644 --- a/addons/account_voucher/i18n/tr.po +++ b/addons/account_voucher/i18n/tr.po @@ -68,7 +68,7 @@ msgstr "Muhasebe Fişi" #. module: account_voucher #: model:ir.model,name:account_voucher.model_account_voucher_line msgid "Accounting Voucher Line" -msgstr "" +msgstr "Muhasebe Makbuz Satırı" #. module: account_voucher #: model:ir.model.fields,field_description:account_voucher.field_account_voucher__message_needaction diff --git a/addons/analytic/i18n/mn.po b/addons/analytic/i18n/mn.po index e05c2265e18..b75578db528 100644 --- a/addons/analytic/i18n/mn.po +++ b/addons/analytic/i18n/mn.po @@ -44,7 +44,7 @@ msgstr "" #. module: analytic #: model_terms:ir.actions.act_window,help:analytic.account_analytic_tag_action msgid "Add a new tag" -msgstr "" +msgstr "Шинэ пайз нэмэх" #. module: analytic #: model:ir.model.fields,field_description:analytic.field_account_analytic_line__amount @@ -73,7 +73,7 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:analytic.account_analytic_group_form_view #: model_terms:ir.ui.view,arch_db:analytic.account_analytic_group_tree_view msgid "Analytic Account Groups" -msgstr "" +msgstr "Шинжилгээний дансны бүлэг" #. module: analytic #: model:res.groups,name:analytic.group_analytic_accounting @@ -450,7 +450,7 @@ msgstr "Эцэг" #. module: analytic #: model:ir.model.fields,field_description:analytic.field_account_analytic_group__parent_path msgid "Parent Path" -msgstr "" +msgstr "Эцэг зам" #. module: analytic #: model:ir.model.fields,field_description:analytic.field_account_analytic_distribution__tag_id diff --git a/addons/analytic/i18n/tr.po b/addons/analytic/i18n/tr.po index dfb45f30daf..4baf8637461 100644 --- a/addons/analytic/i18n/tr.po +++ b/addons/analytic/i18n/tr.po @@ -80,7 +80,7 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:analytic.account_analytic_group_form_view #: model_terms:ir.ui.view,arch_db:analytic.account_analytic_group_tree_view msgid "Analytic Account Groups" -msgstr "" +msgstr "Analitik Hesap Grupları" #. module: analytic #: model:res.groups,name:analytic.group_analytic_accounting diff --git a/addons/attachment_indexation/i18n/attachment_indexation.pot b/addons/attachment_indexation/i18n/attachment_indexation.pot index 723566dc04b..cacb62b5a40 100644 --- a/addons/attachment_indexation/i18n/attachment_indexation.pot +++ b/addons/attachment_indexation/i18n/attachment_indexation.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-24 10:57+0000\n" -"PO-Revision-Date: 2018-12-24 10:57+0000\n" +"POT-Creation-Date: 2019-03-20 14:18+0000\n" +"PO-Revision-Date: 2019-03-20 14:18+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,42 +16,7 @@ msgstr "" "Plural-Forms: \n" #. module: attachment_indexation -#. openerp-web -#: code:addons/attachment_indexation/static/src/js/attachment_indexation.js:77 -#, python-format -msgid "%s (%s)" -msgstr "" - -#. module: attachment_indexation #: model:ir.model,name:attachment_indexation.model_ir_attachment msgid "Attachment" msgstr "" -#. module: attachment_indexation -#. openerp-web -#: code:addons/attachment_indexation/static/src/js/attachment_indexation.js:20 -#, python-format -msgid "Attachment(s)" -msgstr "" - -#. module: attachment_indexation -#. openerp-web -#: code:addons/attachment_indexation/static/src/js/attachment_indexation.js:180 -#, python-format -msgid "Do you really want to delete this attachment ?" -msgstr "" - -#. module: attachment_indexation -#. openerp-web -#: code:addons/attachment_indexation/static/src/js/attachment_indexation.js:193 -#, python-format -msgid "Uploading Error" -msgstr "" - -#. module: attachment_indexation -#. openerp-web -#: code:addons/attachment_indexation/static/src/js/attachment_indexation.js:155 -#, python-format -msgid "Uploading..." -msgstr "" - diff --git a/addons/barcodes/static/src/js/barcode_events.js b/addons/barcodes/static/src/js/barcode_events.js index 22c23ece8c3..3f38ea38e37 100644 --- a/addons/barcodes/static/src/js/barcode_events.js +++ b/addons/barcodes/static/src/js/barcode_events.js @@ -56,20 +56,18 @@ var BarcodeEvents = core.Class.extend(mixins.PropertiesMixin, { this.isChromeMobile = isMobile && navigator.userAgent.match(/Chrome/i); // Creates an input who will receive the barcode scanner value. - if (this.isChromeMobile) { - this.$barcodeInput = $('<input/>', { - name: 'barcode', - type: 'text', - css: { - 'position': 'fixed', - 'top': '50%', - 'transform': 'translateY(-50%)', - 'z-index': '-1', - }, - }); - // Avoid to show autocomplete for a non appearing input - this.$barcodeInput.attr('autocomplete', 'off'); - } + this.$barcodeInput = $('<input/>', { + name: 'barcode', + type: 'text', + css: { + 'position': 'fixed', + 'top': '50%', + 'transform': 'translateY(-50%)', + 'z-index': '-1', + }, + }); + // Avoid to show autocomplete for a non appearing input + this.$barcodeInput.attr('autocomplete', 'off'); this.__blurBarcodeInput = _.debounce(this._blurBarcodeInput, this.inputTimeOut); }, @@ -220,7 +218,8 @@ var BarcodeEvents = core.Class.extend(mixins.PropertiesMixin, { * @param {jQuery.Event} e keydown event */ _listenBarcodeScanner: function (e) { - if (!$('input:text:focus, input[type=number]:focus, textarea:focus, [contenteditable]:focus').length) { + if ($(document.activeElement).not('input:text, textarea, [contenteditable], ' + + '[type="email"], [type="number"], [type="password"], [type="tel"]').length) { $('body').append(this.$barcodeInput); this.$barcodeInput.focus(); } @@ -263,11 +262,9 @@ var BarcodeEvents = core.Class.extend(mixins.PropertiesMixin, { * @private */ _blurBarcodeInput: function () { - if (this.$barcodeInput) { - // Close the virtual keyboard on mobile browsers - // FIXME: actually we can't prevent keyboard from opening - this.$barcodeInput.val('').blur(); - } + // Close the virtual keyboard on mobile browsers + // FIXME: actually we can't prevent keyboard from opening + this.$barcodeInput.val('').blur(); }, start: function(prevent_key_repeat){ diff --git a/addons/barcodes/static/tests/barcode_mobile_tests.js b/addons/barcodes/static/tests/barcode_mobile_tests.js new file mode 100644 index 00000000000..cb26da64c74 --- /dev/null +++ b/addons/barcodes/static/tests/barcode_mobile_tests.js @@ -0,0 +1,74 @@ +odoo.define('barcodes.barcode_mobile_tests', function () { + "use strict"; + + QUnit.module('Barcodes', {}, function () { + + QUnit.module('Barcodes Mobile'); + + QUnit.test('barcode field automatically focus behavior', function (assert) { + assert.expect(10); + + // Mock Chrome mobile environment + var barcodeEvents = odoo.__DEBUG__.services["barcodes.BarcodeEvents"].BarcodeEvents; + var __isChromeMobile = barcodeEvents.isChromeMobile; + barcodeEvents.isChromeMobile = true; + // Rebind keyboard events + barcodeEvents.stop(); + barcodeEvents.start(); + + var $form = $( + '<form>' + + '<input name="email" type="email"/>' + + '<input name="number" type="number"/>' + + '<input name="password" type="password"/>' + + '<input name="tel" type="tel"/>' + + '<input name="text"/>' + + '<input name="explicit_text" type="text"/>' + + '<textarea></textarea>' + + '<div contenteditable="true"></div>' + + '<select name="select">' + + '<option value="option1">Option 1</option>' + + '<option value="option2">Option 2</option>' + + '</select>' + + '</form>'); + $('#qunit-fixture').append($form); + + // Some elements doesn't need to keep the focus + $('body').keydown(); + assert.strictEqual(document.activeElement.name, 'barcode', + "hidden barcode input should have the focus"); + + var $element = $form.find('select'); + $element.focus().keydown(); + assert.strictEqual(document.activeElement.name, 'barcode', + "hidden barcode input should have the focus"); + + // Those elements absolutely need to keep the focus: + // inputs elements: + var keepFocusedElements = ['email', 'number', 'password', 'tel', + 'text', 'explicit_text']; + for (var i = 0; i < keepFocusedElements.length; ++i) { + $element = $form.find('input[name=' + keepFocusedElements[i] + ']'); + $element.focus().keydown(); + assert.strictEqual(document.activeElement, $element[0], + "input " + keepFocusedElements[i] + " should keep focus"); + } + // textarea element + $element = $form.find('textarea'); + $element.focus().keydown(); + assert.strictEqual(document.activeElement, $element[0], + "textarea should keep focus"); + // contenteditable elements + $element = $form.find('[contenteditable=true]'); + $element.focus().keydown(); + assert.strictEqual(document.activeElement, $element[0], + "contenteditable should keep focus"); + + $('#qunit-fixture').empty(); + barcodeEvents.isChromeMobile = __isChromeMobile; + // Rebind keyboard events + barcodeEvents.stop(); + barcodeEvents.start(); + }); + }); + }); diff --git a/addons/barcodes/views/barcodes_templates.xml b/addons/barcodes/views/barcodes_templates.xml index cb16a40c178..45b77bd3301 100644 --- a/addons/barcodes/views/barcodes_templates.xml +++ b/addons/barcodes/views/barcodes_templates.xml @@ -16,4 +16,10 @@ </xpath> </template> + <template id="qunit_mobile_suite" name="barcode_mobile_tests" inherit_id="web.qunit_mobile_suite"> + <xpath expr="//t[@t-set='head']" position="inside"> + <script type="text/javascript" src="/barcodes/static/tests/barcode_mobile_tests.js"></script> + </xpath> + </template> + </odoo> diff --git a/addons/base_automation/i18n/base_automation.pot b/addons/base_automation/i18n/base_automation.pot index 42ac32d4bb5..e2c891862d3 100644 --- a/addons/base_automation/i18n/base_automation.pot +++ b/addons/base_automation/i18n/base_automation.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:59+0000\n" -"PO-Revision-Date: 2019-01-16 07:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,6 +16,11 @@ msgstr "" "Plural-Forms: \n" #. module: base_automation +#: model:mail.template,body_html:base_automation.test_mail_template_automation +msgid "<div>Email automation</div>" +msgstr "" + +#. module: base_automation #: model:ir.model.fields,field_description:base_automation.field_base_automation__help msgid "Action Description" msgstr "" @@ -142,6 +147,12 @@ msgid "Base Automation: test rule on write check context" msgstr "" #. module: base_automation +#: model:base.automation,name:base_automation.test_rule_on_write_recompute_send_email +#: model:ir.actions.server,name:base_automation.test_rule_on_write_recompute_send_email_ir_actions_server +msgid "Base Automation: test send an email" +msgstr "" + +#. module: base_automation #: selection:base.automation,trigger:0 msgid "Based on Form Modification" msgstr "" @@ -363,11 +374,6 @@ msgid "Model" msgstr "" #. module: base_automation -#: model:ir.model.fields,field_description:base_automation.field_base_automation__crud_model_name -msgid "Model Description" -msgstr "" - -#. module: base_automation #: model:ir.model.fields,field_description:base_automation.field_base_automation__model_name msgid "Model Name" msgstr "" @@ -458,16 +464,6 @@ msgid "Python Code" msgstr "" #. module: base_automation -#: model_terms:ir.ui.view,arch_db:base_automation.view_base_automation_form -msgid "Remove Action" -msgstr "" - -#. module: base_automation -#: model_terms:ir.ui.view,arch_db:base_automation.view_base_automation_form -msgid "Remove the contextual action related to this server action" -msgstr "" - -#. module: base_automation #: model:ir.model.fields,field_description:base_automation.field_base_automation__activity_user_id #: model:ir.model.fields,field_description:base_automation.field_base_automation_lead_test__user_id msgid "Responsible" @@ -520,6 +516,11 @@ msgid "Summary" msgstr "" #. module: base_automation +#: model:ir.model.fields,field_description:base_automation.field_base_automation__crud_model_name +msgid "Target Model" +msgstr "" + +#. module: base_automation #: model:ir.model.fields,help:base_automation.field_base_automation__activity_user_field_name msgid "Technical name of the user on the record" msgstr "" diff --git a/addons/base_automation/models/base_automation.py b/addons/base_automation/models/base_automation.py index e2620d202e7..ba754f2fe3e 100644 --- a/addons/base_automation/models/base_automation.py +++ b/addons/base_automation/models/base_automation.py @@ -276,7 +276,7 @@ class BaseAutomation(models.Model): # read old values before the update old_values = { old_vals.pop('id'): old_vals - for old_vals in records.read(list(vals)) + for old_vals in (records.read(list(vals)) if vals else []) } # call original method _write.origin(records, vals, **kw) diff --git a/addons/base_gengo/i18n/base_gengo.pot b/addons/base_gengo/i18n/base_gengo.pot index 30bd1d7594a..7bd2cf593cc 100644 --- a/addons/base_gengo/i18n/base_gengo.pot +++ b/addons/base_gengo/i18n/base_gengo.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-02 10:05+0000\n" -"PO-Revision-Date: 2018-10-02 10:05+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -52,6 +52,11 @@ msgid "Auto Approve Translation ?" msgstr "" #. module: base_gengo +#: model:ir.model,name:base_gengo.model_base_gengo_translations +msgid "Base Gengo Translations" +msgstr "" + +#. module: base_gengo #: selection:base.gengo.translations,sync_type:0 msgid "Both" msgstr "" @@ -151,13 +156,13 @@ msgid "Gengo Translation Service Level" msgstr "" #. module: base_gengo -#: code:addons/base_gengo/wizard/base_gengo_translations.py:84 +#: code:addons/base_gengo/wizard/base_gengo_translations.py:85 #, python-format msgid "Gengo `Public Key` or `Private Key` are missing. Enter your Gengo authentication parameters under `Settings > Companies > Gengo Parameters`." msgstr "" #. module: base_gengo -#: code:addons/base_gengo/wizard/base_gengo_translations.py:95 +#: code:addons/base_gengo/wizard/base_gengo_translations.py:96 #, python-format msgid "Gengo connection failed with this message:\n" "``%s``" @@ -267,7 +272,7 @@ msgid "Sync Type" msgstr "" #. module: base_gengo -#: code:addons/base_gengo/wizard/base_gengo_translations.py:114 +#: code:addons/base_gengo/wizard/base_gengo_translations.py:115 #, python-format msgid "The number of terms to sync should be between 1 to 200 to work with Gengo translation services." msgstr "" @@ -284,7 +289,7 @@ msgid "This comment will be automatically be enclosed in each an every request s msgstr "" #. module: base_gengo -#: code:addons/base_gengo/wizard/base_gengo_translations.py:109 +#: code:addons/base_gengo/wizard/base_gengo_translations.py:110 #, python-format msgid "This language is not supported by the Gengo translation services." msgstr "" @@ -314,8 +319,3 @@ msgstr "" msgid "You can select here the service level you want for an automatic translation using Gengo." msgstr "" -#. module: base_gengo -#: model:ir.model,name:base_gengo.model_base_gengo_translations -msgid "base.gengo.translations" -msgstr "" - diff --git a/addons/base_geolocalize/i18n/base_geolocalize.pot b/addons/base_geolocalize/i18n/base_geolocalize.pot index 5e33196a2ec..0d11fae6196 100644 --- a/addons/base_geolocalize/i18n/base_geolocalize.pot +++ b/addons/base_geolocalize/i18n/base_geolocalize.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-24 10:58+0000\n" -"PO-Revision-Date: 2018-12-24 10:58+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -86,11 +86,13 @@ msgstr "" #. module: base_geolocalize #: model:ir.model.fields,field_description:base_geolocalize.field_res_partner__partner_latitude +#: model:ir.model.fields,field_description:base_geolocalize.field_res_users__partner_latitude msgid "Geo Latitude" msgstr "" #. module: base_geolocalize #: model:ir.model.fields,field_description:base_geolocalize.field_res_partner__partner_longitude +#: model:ir.model.fields,field_description:base_geolocalize.field_res_users__partner_longitude msgid "Geo Longitude" msgstr "" @@ -111,6 +113,7 @@ msgstr "" #. module: base_geolocalize #: model:ir.model.fields,field_description:base_geolocalize.field_res_partner__date_localization +#: model:ir.model.fields,field_description:base_geolocalize.field_res_users__date_localization msgid "Geolocation Date" msgstr "" diff --git a/addons/base_import_module/i18n/base_import_module.pot b/addons/base_import_module/i18n/base_import_module.pot index 80245bfda40..3e0c78e1d4a 100644 --- a/addons/base_import_module/i18n/base_import_module.pot +++ b/addons/base_import_module/i18n/base_import_module.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-21 13:17+0000\n" -"PO-Revision-Date: 2018-09-21 13:17+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -26,7 +26,7 @@ msgid "Close" msgstr "" #. module: base_import_module -#: code:addons/base_import_module/controllers/main.py:31 +#: code:addons/base_import_module/controllers/main.py:33 #, python-format msgid "Could not select database '%s'" msgstr "" @@ -127,6 +127,11 @@ msgid "No file sent." msgstr "" #. module: base_import_module +#: model_terms:ir.ui.view,arch_db:base_import_module.view_base_module_import +msgid "Note: you can only import data modules (.xml files and static assets)" +msgstr "" + +#. module: base_import_module #: code:addons/base_import_module/controllers/main.py:25 #, python-format msgid "Only administrators can upload a module" diff --git a/addons/base_setup/i18n/base_setup.pot b/addons/base_setup/i18n/base_setup.pot index 88e9dba7c47..ae49f12bf00 100644 --- a/addons/base_setup/i18n/base_setup.pot +++ b/addons/base_setup/i18n/base_setup.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-24 10:58+0000\n" -"PO-Revision-Date: 2018-12-24 10:58+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -82,13 +82,8 @@ msgid "Attach Google documents to any record" msgstr "" #. module: base_setup -#: model:ir.model.fields,field_description:base_setup.field_res_config_settings__module_partner_autocomplete -msgid "Auto-populate company data" -msgstr "" - -#. module: base_setup #: model_terms:ir.ui.view,arch_db:base_setup.res_config_settings_view_form -msgid "Autocomplete company data (name, logo, address, etc.)" +msgid "Automatically enrich your contact base with company data" msgstr "" #. module: base_setup @@ -107,7 +102,7 @@ msgid "Change Document Template" msgstr "" #. module: base_setup -#: code:addons/base_setup/models/res_config_settings.py:101 +#: code:addons/base_setup/models/res_config_settings.py:102 #, python-format msgid "Choose Your Document Layout" msgstr "" @@ -149,6 +144,11 @@ msgstr "" #. module: base_setup #: model_terms:ir.ui.view,arch_db:base_setup.res_config_settings_view_form +msgid "Contacts" +msgstr "" + +#. module: base_setup +#: model_terms:ir.ui.view,arch_db:base_setup.res_config_settings_view_form msgid "Create and attach Google Drive documents to any record" msgstr "" @@ -301,11 +301,26 @@ msgid "Paper format" msgstr "" #. module: base_setup +#: model:ir.model.fields,field_description:base_setup.field_res_config_settings__module_partner_autocomplete +msgid "Partner Autocomplete" +msgstr "" + +#. module: base_setup #: model_terms:ir.ui.view,arch_db:base_setup.res_config_settings_view_form msgid "Preview Document" msgstr "" #. module: base_setup +#: model:ir.model.fields,field_description:base_setup.field_res_config_settings__module_sms +msgid "Send SMS" +msgstr "" + +#. module: base_setup +#: model_terms:ir.ui.view,arch_db:base_setup.res_config_settings_view_form +msgid "Send texts to your contacts" +msgstr "" + +#. module: base_setup #: model_terms:ir.ui.view,arch_db:base_setup.res_config_settings_view_form msgid "Set custom access rights for new users" msgstr "" diff --git a/addons/calendar/i18n/calendar.pot b/addons/calendar/i18n/calendar.pot index 754f5273486..5c9517f1546 100644 --- a/addons/calendar/i18n/calendar.pot +++ b/addons/calendar/i18n/calendar.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-21 13:18+0000\n" -"PO-Revision-Date: 2018-09-21 13:18+0000\n" +"POT-Creation-Date: 2019-03-20 13:51+0000\n" +"PO-Revision-Date: 2019-03-20 13:51+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -26,14 +26,14 @@ msgid "${object.event_id.name}: Date updated" msgstr "" #. module: calendar -#: code:addons/calendar/models/calendar.py:741 +#: code:addons/calendar/models/calendar.py:743 #, python-format msgid "%s at %s To\n" " %s at %s (%s)" msgstr "" #. module: calendar -#: code:addons/calendar/models/calendar.py:732 +#: code:addons/calendar/models/calendar.py:734 #, python-format msgid "%s at (%s To %s) (%s)" msgstr "" @@ -51,41 +51,6 @@ msgid "%s has declined invitation" msgstr "" #. module: calendar -#: model:calendar.alarm,name:calendar.alarm_notif_5 -msgid "1 Day(s)" -msgstr "" - -#. module: calendar -#: model:calendar.alarm,name:calendar.alarm_notif_3 -msgid "1 Hour(s)" -msgstr "" - -#. module: calendar -#: model:calendar.alarm,name:calendar.alarm_notif_1 -msgid "15 Minute(s)" -msgstr "" - -#. module: calendar -#: model:calendar.alarm,name:calendar.alarm_notif_4 -msgid "2 Hour(s)" -msgstr "" - -#. module: calendar -#: model:calendar.alarm,name:calendar.alarm_mail_1 -msgid "3 Hour(s), by e-mail" -msgstr "" - -#. module: calendar -#: model:calendar.alarm,name:calendar.alarm_notif_2 -msgid "30 Minute(s)" -msgstr "" - -#. module: calendar -#: model:calendar.alarm,name:calendar.alarm_mail_2 -msgid "6 Hour(s), by e-mail" -msgstr "" - -#. module: calendar #: model:mail.template,body_html:calendar.calendar_template_meeting_invitation msgid "<div>\n" " % set colors = {'needsAction': 'grey', 'accepted': 'green', 'tentative': '#FFFF00', 'declined': 'red'}\n" @@ -353,7 +318,7 @@ msgid "All Day" msgstr "" #. module: calendar -#: code:addons/calendar/models/calendar.py:728 +#: code:addons/calendar/models/calendar.py:730 #, python-format msgid "AllDay , %s" msgstr "" @@ -397,7 +362,7 @@ msgid "Availability" msgstr "" #. module: calendar -#: code:addons/calendar/models/calendar.py:1693 +#: code:addons/calendar/models/calendar.py:1696 #: selection:calendar.attendee,availability:0 #: selection:calendar.event,show_as:0 #, python-format @@ -452,7 +417,7 @@ msgstr "" #. module: calendar #: model:ir.model.fields,help:calendar.field_mail_activity_type__category -msgid "Categories may trigger specific behavior like opening calendar view" +msgid "Categories may trigger specific behavior like opening calendar view or automatically mark as done when a document is uploaded" msgstr "" #. module: calendar @@ -594,12 +559,22 @@ msgid "Duration in minutes" msgstr "" #. module: calendar -#: selection:calendar.alarm,type:0 +#: selection:calendar.alarm,alarm_type:0 #: model:ir.model.fields,field_description:calendar.field_calendar_attendee__email msgid "Email" msgstr "" #. module: calendar +#: model:calendar.alarm,name:calendar.alarm_mail_1 +msgid "Email - 3 Hour(s)" +msgstr "" + +#. module: calendar +#: model:calendar.alarm,name:calendar.alarm_mail_2 +msgid "Email - 6 Hour(s)" +msgstr "" + +#. module: calendar #: model:ir.model.fields,help:calendar.field_calendar_attendee__email msgid "Email of Invited Person" msgstr "" @@ -656,7 +631,7 @@ msgid "Event Time" msgstr "" #. module: calendar -#: code:addons/calendar/models/calendar.py:1234 +#: code:addons/calendar/models/calendar.py:1238 #, python-format msgid "Event recurrence interval cannot be negative." msgstr "" @@ -683,7 +658,7 @@ msgid "First" msgstr "" #. module: calendar -#: code:addons/calendar/models/calendar.py:998 +#: code:addons/calendar/models/calendar.py:1000 #, python-format msgid "First you have to specify the date of the invitation." msgstr "" @@ -735,7 +710,7 @@ msgid "Group By" msgstr "" #. module: calendar -#: code:addons/calendar/models/calendar.py:1636 +#: code:addons/calendar/models/calendar.py:1639 #, python-format msgid "Group by date is not supported, use the calendar view instead." msgstr "" @@ -902,8 +877,8 @@ msgid "Meeting" msgstr "" #. module: calendar -#: code:addons/calendar/models/calendar.py:942 -#: code:addons/calendar/models/calendar.py:947 +#: code:addons/calendar/models/calendar.py:944 +#: code:addons/calendar/models/calendar.py:949 #, python-format msgid "Meeting '%s' starts '%s' and ends '%s'" msgstr "" @@ -1003,11 +978,36 @@ msgid "No I'm not going." msgstr "" #. module: calendar -#: selection:calendar.alarm,type:0 +#: selection:calendar.alarm,alarm_type:0 msgid "Notification" msgstr "" #. module: calendar +#: model:calendar.alarm,name:calendar.alarm_notif_5 +msgid "Notification - 1 Day(s)" +msgstr "" + +#. module: calendar +#: model:calendar.alarm,name:calendar.alarm_notif_3 +msgid "Notification - 1 Hour(s)" +msgstr "" + +#. module: calendar +#: model:calendar.alarm,name:calendar.alarm_notif_1 +msgid "Notification - 15 Minute(s)" +msgstr "" + +#. module: calendar +#: model:calendar.alarm,name:calendar.alarm_notif_4 +msgid "Notification - 2 Hour(s)" +msgstr "" + +#. module: calendar +#: model:calendar.alarm,name:calendar.alarm_notif_2 +msgid "Notification - 30 Minute(s)" +msgstr "" + +#. module: calendar #: model:ir.model.fields,field_description:calendar.field_calendar_event__message_needaction_counter msgid "Number of Actions" msgstr "" @@ -1070,11 +1070,6 @@ msgid "Options" msgstr "" #. module: calendar -#: selection:mail.activity.type,category:0 -msgid "Other" -msgstr "" - -#. module: calendar #: model:ir.model.fields,field_description:calendar.field_calendar_event__user_id #: model_terms:ir.ui.view,arch_db:calendar.view_calendar_event_form msgid "Owner" @@ -1091,7 +1086,7 @@ msgid "Partner-related data of the user" msgstr "" #. module: calendar -#: code:addons/calendar/models/calendar.py:1247 +#: code:addons/calendar/models/calendar.py:1251 #, python-format msgid "Please select a proper day of the month." msgstr "" @@ -1184,7 +1179,7 @@ msgid "Responsible" msgstr "" #. module: calendar -#: selection:calendar.alarm,type:0 +#: selection:calendar.alarm,alarm_type:0 msgid "SMS Text Message" msgstr "" @@ -1236,6 +1231,11 @@ msgid "Snooze" msgstr "" #. module: calendar +#: selection:mail.activity.type,category:0 +msgid "Standard" +msgstr "" + +#. module: calendar #: model:ir.model.fields,field_description:calendar.field_calendar_event__start msgid "Start" msgstr "" @@ -1328,13 +1328,13 @@ msgid "The calendar is shared between employees and fully integrated with\n" msgstr "" #. module: calendar -#: code:addons/calendar/models/calendar.py:941 +#: code:addons/calendar/models/calendar.py:943 #, python-format msgid "The ending date and time cannot be earlier than the starting date and time." msgstr "" #. module: calendar -#: code:addons/calendar/models/calendar.py:946 +#: code:addons/calendar/models/calendar.py:948 #, python-format msgid "The ending date cannot be earlier than the starting date." msgstr "" @@ -1376,7 +1376,7 @@ msgid "Tuesday" msgstr "" #. module: calendar -#: model:ir.model.fields,field_description:calendar.field_calendar_alarm__type +#: model:ir.model.fields,field_description:calendar.field_calendar_alarm__alarm_type msgid "Type" msgstr "" @@ -1418,6 +1418,11 @@ msgid "Update only this instance" msgstr "" #. module: calendar +#: selection:mail.activity.type,category:0 +msgid "Upload Document" +msgstr "" + +#. module: calendar #: model:ir.model,name:calendar.model_res_users msgid "Users" msgstr "" @@ -1464,7 +1469,7 @@ msgid "e.g. Business Lunch" msgstr "" #. module: calendar -#: code:addons/calendar/models/calendar.py:1232 +#: code:addons/calendar/models/calendar.py:1236 #, python-format msgid "interval cannot be negative." msgstr "" diff --git a/addons/crm/i18n/crm.pot b/addons/crm/i18n/crm.pot index 8027233db91..a22b336b18a 100644 --- a/addons/crm/i18n/crm.pot +++ b/addons/crm/i18n/crm.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:58+0000\n" -"PO-Revision-Date: 2019-01-16 07:58+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -91,7 +91,7 @@ msgid "<i class=\"fa fa-fw fa-star\" aria-label=\"Favorites\" role=\"img\" title msgstr "" #. module: crm -#: code:addons/crm/models/crm_team.py:103 +#: code:addons/crm/models/crm_team.py:106 #, python-format msgid "<p class='o_view_nocontent_smiling_face'>Add new opportunities</p><p>\n" " Looks like you are not a member of a Sales Team. You should add yourself\n" @@ -142,8 +142,6 @@ 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_terms:ir.ui.view,arch_db:crm.crm_activity_report_view_graph #: model_terms:ir.ui.view,arch_db:crm.crm_activity_report_view_pivot #: model_terms:ir.ui.view,arch_db:crm.crm_activity_report_view_search @@ -162,12 +160,18 @@ msgid "Activities Todo" msgstr "" #. module: crm +#: model_terms:ir.ui.view,arch_db:crm.crm_activity_report_view_tree +msgid "Activity Description" +msgstr "" + +#. module: crm #: model:ir.model.fields,field_description:crm.field_crm_lead__activity_state msgid "Activity State" msgstr "" #. module: crm #: model:ir.model.fields,field_description:crm.field_crm_activity_report__mail_activity_type_id +#: model_terms:ir.ui.view,arch_db:crm.crm_activity_report_view_search msgid "Activity Type" msgstr "" @@ -234,6 +238,12 @@ msgid "Assignation Date" msgstr "" #. module: crm +#: model:ir.model.fields,field_description:crm.field_crm_activity_report__author_id +#: model_terms:ir.ui.view,arch_db:crm.crm_activity_report_view_search +msgid "Assigned To" +msgstr "" + +#. module: crm #: model:ir.model.fields,field_description:crm.field_crm_lead__message_attachment_count msgid "Attachment Count" msgstr "" @@ -360,7 +370,9 @@ msgid "Click on the opportunity to zoom in." msgstr "" #. module: crm +#: model:ir.model.fields,field_description:crm.field_crm_activity_report__date_closed #: model:ir.model.fields,field_description:crm.field_crm_lead__date_closed +#: model_terms:ir.ui.view,arch_db:crm.crm_activity_report_view_search #: model_terms:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search #: model_terms:ir.ui.view,arch_db:crm.view_crm_case_leads_filter #: model_terms:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter @@ -395,6 +407,12 @@ msgid "Company Name" msgstr "" #. module: crm +#: model:ir.model.fields,field_description:crm.field_crm_activity_report__date +#: model_terms:ir.ui.view,arch_db:crm.crm_activity_report_view_search +msgid "Completion Date" +msgstr "" + +#. module: crm #: model:ir.model,name:crm.model_res_config_settings msgid "Config Settings" msgstr "" @@ -438,12 +456,18 @@ msgid "Contacts" msgstr "" #. module: crm +#: model:ir.model.fields,field_description:crm.field_crm_activity_report__body +msgid "Contents" +msgstr "" + +#. module: crm #: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner__name #: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_mass__name msgid "Conversion Action" msgstr "" #. module: crm +#: model:ir.model.fields,field_description:crm.field_crm_activity_report__date_conversion #: model:ir.model.fields,field_description:crm.field_crm_lead__date_conversion #: model_terms:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search #: model_terms:ir.ui.view,arch_db:crm.view_crm_case_leads_filter @@ -510,7 +534,6 @@ 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_terms:ir.ui.view,arch_db:crm.crm_activity_report_view_search #: model_terms:ir.ui.view,arch_db:crm.crm_case_form_view_leads #: model_terms:ir.ui.view,arch_db:crm.crm_case_form_view_oppor #: model_terms:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search @@ -530,7 +553,7 @@ msgid "Create & Edit" msgstr "" #. module: crm -#: model:ir.model.fields,field_description:crm.field_res_config_settings__module_crm_reveal +#: model:ir.model.fields,field_description:crm.field_res_config_settings__module_crm_iap_lead_website msgid "Create Leads/Opportunities from your website's traffic" msgstr "" @@ -540,6 +563,11 @@ msgid "Create Opportunity" msgstr "" #. module: crm +#: model:ir.model.fields,field_description:crm.field_res_config_settings__lead_mining_in_pipeline +msgid "Create a lead mining request directly from the opportunity pipeline." +msgstr "" + +#. module: crm #: selection:crm.lead2opportunity.partner,action:0 #: selection:crm.partner.binding,action:0 msgid "Create a new customer" @@ -581,12 +609,6 @@ msgid "Create tags that fit your business (product structure, sales type, etc.) msgstr "" #. module: crm -#: model:ir.model.fields,field_description:crm.field_crm_activity_report__author_id -#: model_terms: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_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 @@ -613,6 +635,8 @@ msgid "Created on" msgstr "" #. module: crm +#: model:ir.model.fields,field_description:crm.field_crm_activity_report__lead_create_date +#: model_terms:ir.ui.view,arch_db:crm.crm_activity_report_view_search #: model_terms:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search #: model_terms:ir.ui.view,arch_db:crm.view_crm_case_leads_filter #: model_terms:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter @@ -631,6 +655,7 @@ msgstr "" #. module: crm #: code:addons/crm/models/crm_lead.py:1175 +#: model:ir.model.fields,field_description:crm.field_crm_activity_report__partner_id #: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner__partner_id #: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_mass__partner_id #: model:ir.model.fields,field_description:crm.field_crm_lead__partner_id @@ -657,12 +682,6 @@ msgid "Customers" msgstr "" #. module: crm -#: model:ir.model.fields,field_description:crm.field_crm_activity_report__date -#: model_terms:ir.ui.view,arch_db:crm.crm_activity_report_view_search -msgid "Date" -msgstr "" - -#. module: crm #: model_terms:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search msgid "Date Closed" msgstr "" @@ -793,7 +812,9 @@ msgid "Event" msgstr "" #. module: crm +#: model:ir.model.fields,field_description:crm.field_crm_activity_report__date_deadline #: model:ir.model.fields,field_description:crm.field_crm_lead__date_deadline +#: model_terms:ir.ui.view,arch_db:crm.crm_activity_report_view_search #: model_terms:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search #: model_terms:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter msgid "Expected Closing" @@ -889,6 +910,12 @@ msgid "Generate leads from incoming emails and assign them\n" msgstr "" #. module: crm +#: model:ir.model.fields,field_description:crm.field_res_config_settings__module_crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm.res_config_settings_view_form +msgid "Generate new leads based on their country, technologies, size, etc." +msgstr "" + +#. module: crm #: model:ir.model,name:crm.model_crm_lead_lost msgid "Get Lost Reason" msgstr "" @@ -988,7 +1015,7 @@ msgid "Import & Synchronize" msgstr "" #. module: crm -#: code:addons/crm/models/crm_lead.py:1238 +#: code:addons/crm/models/crm_lead.py:1242 #, python-format msgid "Import Template for Leads & Opportunities" msgstr "" @@ -1094,7 +1121,6 @@ msgstr "" #: code:addons/crm/models/crm_lead.py:920 #: selection:crm.activity.report,lead_type:0 #: selection:crm.lead,type:0 -#: model:ir.model.fields,field_description:crm.field_crm_activity_report__lead_id #: model_terms:ir.ui.view,arch_db:crm.crm_case_form_view_leads #: model_terms:ir.ui.view,arch_db:crm.crm_case_tree_view_leads #: model_terms:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search @@ -1103,6 +1129,16 @@ msgid "Lead" msgstr "" #. module: crm +#: model_terms:ir.ui.view,arch_db:crm.res_config_settings_view_form +msgid "Lead Generation" +msgstr "" + +#. module: crm +#: model_terms:ir.ui.view,arch_db:crm.res_config_settings_view_form +msgid "Lead Mining" +msgstr "" + +#. module: crm #: model:ir.model,name:crm.model_crm_lead_tag msgid "Lead Tag" msgstr "" @@ -1423,7 +1459,7 @@ msgid "New Leads/Opportunities" msgstr "" #. module: crm -#: code:addons/crm/models/crm_team.py:149 +#: code:addons/crm/models/crm_team.py:152 #, python-format msgid "New Opportunities" msgstr "" @@ -1612,9 +1648,11 @@ msgstr "" #: selection:crm.activity.report,lead_type:0 #: selection:crm.lead,type:0 #: model:ir.model.fields,field_description:crm.field_calendar_event__opportunity_id +#: model:ir.model.fields,field_description:crm.field_crm_activity_report__lead_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_terms:ir.ui.view,arch_db:crm.crm_activity_report_view_search #: model_terms:ir.ui.view,arch_db:crm.crm_case_tree_view_oppor #: model_terms:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search #: model_terms:ir.ui.view,arch_db:crm.crm_team_salesteams_view_kanban @@ -1724,11 +1762,6 @@ msgid "Partner linking/binding in CRM wizard" msgstr "" #. module: crm -#: model:ir.model.fields,field_description:crm.field_crm_activity_report__partner_id -msgid "Partner/Customer" -msgstr "" - -#. module: crm #: model:ir.model.fields,field_description:crm.field_crm_lead__phone #: model_terms:ir.ui.view,arch_db:crm.crm_case_form_view_oppor msgid "Phone" @@ -1740,7 +1773,7 @@ msgid "Phone Formatting" msgstr "" #. module: crm -#: code:addons/crm/models/crm_team.py:120 +#: code:addons/crm/models/crm_team.py:123 #: model:ir.actions.act_window,name:crm.crm_lead_opportunities_tree_view #: model:ir.ui.menu,name:crm.crm_opportunity_report_menu #: model:ir.ui.menu,name:crm.menu_crm_config_lead @@ -1749,6 +1782,12 @@ msgid "Pipeline" 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 +msgid "Pipeline Activities" +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 @@ -1798,7 +1837,6 @@ 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 msgid "Probability" msgstr "" @@ -1922,6 +1960,7 @@ msgstr "" #: model:ir.model.fields,field_description:crm.field_crm_lead2opportunity_partner_mass__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_terms:ir.ui.view,arch_db:crm.crm_activity_report_view_search #: model_terms:ir.ui.view,arch_db:crm.crm_opportunity_report_view_search #: model_terms:ir.ui.view,arch_db:crm.view_crm_case_leads_filter #: model_terms:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter @@ -2108,15 +2147,11 @@ msgstr "" #. module: crm #: model:ir.model.fields,field_description:crm.field_crm_activity_report__subtype_id +#: model_terms:ir.ui.view,arch_db:crm.crm_activity_report_view_search msgid "Subtype" msgstr "" #. module: crm -#: model:ir.model.fields,field_description:crm.field_crm_activity_report__subject -msgid "Summary" -msgstr "" - -#. module: crm #: model_terms:ir.ui.view,arch_db:crm.view_crm_case_leads_filter #: model_terms:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter msgid "Tag" diff --git a/addons/crm_iap_lead/i18n/crm_iap_lead.pot b/addons/crm_iap_lead/i18n/crm_iap_lead.pot new file mode 100644 index 00000000000..a7d031e01fc --- /dev/null +++ b/addons/crm_iap_lead/i18n/crm_iap_lead.pot @@ -0,0 +1,3624 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * crm_iap_lead +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~12.2\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-03-20 14:18+0000\n" +"PO-Revision-Date: 2019-03-20 14:18+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_iap_lead +#: model:mail.template,body_html:crm_iap_lead.lead_generation_no_credits +msgid "\n" +" \n" +" <p>Dear,</p>\n" +" <p>There is no more credits on your IAP Lead Generation account.<br/>\n" +" You can charge your IAP Lead Generation account in the settings of the CRM app.<br/>\n" +"\n" +" <p>Best regards,</p>\n" +" <p>Odoo S.A.</p>\n" +" \n" +" " +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.lead_message_template +msgid "(Time Now)" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_1 +msgid "1&1 Hosting" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_1 +msgid "3D Printing" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_2 +msgid "3d Cart" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.lead_message_template +msgid "<b>Contacts</b>" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.lead_message_template +msgid "<b>Phone :</b>" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.lead_message_template +msgid "<b>Timezone : </b>" +msgstr "" + +#. module: crm_iap_lead +#: code:addons/crm_iap_lead/models/crm_iap_lead_mining_request.py:216 +#, python-format +msgid "<p class=\"o_view_nocontent_empty_folder\">\n" +" No leads found\n" +" </p><p>\n" +" No leads could be generated according to your search criteria\n" +" </p>" +msgstr "" + +#. module: crm_iap_lead +#: code:addons/crm_iap_lead/models/crm_iap_lead_mining_request.py:228 +#, python-format +msgid "<p class=\"o_view_nocontent_empty_folder\">\n" +" No opportunities found\n" +" </p><p>\n" +" No opportunities could be generated according to your search criteria\n" +" </p>" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_form +msgid "<span class=\"o_stat_text\">Leads</span>" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_form +msgid "<span class=\"o_stat_text\">Opportunities</span>" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_35 +msgid "ASP.Net" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_2 +msgid "Accounting" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_3 +msgid "Acquia" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_4 +msgid "Acquisio" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_5 +msgid "Act On" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_6 +msgid "Action Network" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_7 +msgid "Active Demand" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_8 +msgid "Activecampaign" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_15 +msgid "AdRoll" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_9 +msgid "Add To Any" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_10 +msgid "Adform Advertiser" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_11 +msgid "Adobe Business Catalyst" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_12 +msgid "Adobe Connect" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_13 +msgid "Adobe Dynamic Tag Management" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_14 +msgid "Adobe Experience Manager" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_205 +msgid "Advertising" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_3 +msgid "Aerospace & Defense" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_210 +msgid "Agricultural Products" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_4 +msgid "Agriculture" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_187 +msgid "Air Freight & Logistics" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_16 +msgid "Airbrake" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_5 +msgid "Airlines" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_17 +msgid "Akamai" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_18 +msgid "Akamai DNS" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_19 +msgid "Alexa" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_6 +msgid "Alternative Medicine" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_20 +msgid "Altocloud" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_21 +msgid "Amazon Associates" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_22 +msgid "Amazon Payments" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_23 +msgid "Amazon S3" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_24 +msgid "Amazon Simple Email Service" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_25 +msgid "Amazon Web Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_27 +msgid "Amplitude" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_28 +msgid "Android" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_7 +msgid "Animation" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_29 +msgid "Apache" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_30 +msgid "App Nexus" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_33 +msgid "AppDynamics" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_8 +msgid "Apparel & Footwear" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_31 +msgid "Appboy" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_32 +msgid "Appcues" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_34 +msgid "Apteligent" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_9 +msgid "Architecture" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_10 +msgid "Arts" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_11 +msgid "Arts & Crafts" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_12 +msgid "Asset Management" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_212 +msgid "Asset Management & Custody Banks" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_36 +msgid "Attribution" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_13 +msgid "Audio" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_37 +msgid "Authorizenet" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_14 +msgid "Automation" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_15 +msgid "Automotive" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_38 +msgid "Autopilot" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_39 +msgid "Aweber" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_230 +msgid "B2B" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_231 +msgid "B2C" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_16 +msgid "Banking & Mortgages" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_157 +msgid "Banks" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_40 +msgid "Bazaarvoice" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_41 +msgid "Benchmarkemail" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_17 +msgid "Beverages" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_42 +msgid "Big Cartel" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_43 +msgid "Bigcommerce" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_44 +msgid "Bing Ads" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_45 +msgid "Bing Advertiser" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_46 +msgid "Bing Maps" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_18 +msgid "Biotechnology" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_47 +msgid "Bloomreach" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_48 +msgid "Bluehost Hosting" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_49 +msgid "Braintree" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_50 +msgid "Branch" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_51 +msgid "Brightcove" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_19 +msgid "Broadcasting" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_52 +msgid "Bronto" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_53 +msgid "Bug Herd" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_54 +msgid "Bugsnag" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_20 +msgid "Building Materials" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_21 +msgid "Business Supplies" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_55 +msgid "C3 Metrics" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model,name:crm_iap_lead.model_crm_iap_lead_mining_request +msgid "CRM Lead Mining Request" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_56 +msgid "Calq" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_57 +msgid "Campaignmonitor" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_form +msgid "Cancel" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_162 +msgid "Capital Goods" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_177 +msgid "Capital Markets" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_203 +msgid "Casinos & Gaming" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_58 +msgid "Castle" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_59 +msgid "CentOS" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_60 +msgid "Chargify" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_61 +msgid "Chart Beat" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_62 +msgid "Chartio" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_63 +msgid "Chatlio" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_22 +msgid "Chemicals" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_64 +msgid "Chownow" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_23 +msgid "Civil Engineering" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_65 +msgid "ClickFunnels" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_66 +msgid "Clicktale" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_67 +msgid "Clicky" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_68 +msgid "Cloud Flare" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_24 +msgid "Cloud Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_69 +msgid "Cloudinary" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_industry__color +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_role__color +msgid "Color Index" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_70 +msgid "Commerce Sciences" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_163 +msgid "Commercial & Professional Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_216 +msgid "Commercial Printing" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_181 +msgid "Commercial Services & Supplies" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_225 +msgid "Commodity Chemicals" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_25 +msgid "Communications" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_193 +msgid "Communications Equipment" +msgstr "" + +#. module: crm_iap_lead +#: selection:crm.iap.lead.mining.request,search_type:0 +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_form +msgid "Companies" +msgstr "" + +#. module: crm_iap_lead +#: selection:crm.iap.lead.mining.request,search_type:0 +msgid "Companies and their Contacts" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__company_size_max +msgid "Company Size Max" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_26 +msgid "Computer Hardware" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_224 +msgid "Computer Networking" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_71 +msgid "Constant Contact" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_27 +msgid "Construction" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_182 +msgid "Construction & Engineering" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_28 +msgid "Construction Contractors & Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_167 +msgid "Construction Materials" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_218 +msgid "Consulting" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_29 +msgid "Consulting & Professional Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_30 +msgid "Consumer Discretionary" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_31 +msgid "Consumer Electronics" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_32 +msgid "Consumer Goods" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_150 +msgid "Consumer Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_33 +msgid "Consumer Staples" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__contact_credit_per_company +msgid "Contact Credit Per Company" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__contact_total_credit +msgid "Contact Total Credit" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_form +msgid "Contacts" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_196 +msgid "Containers & Packaging" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_72 +msgid "Contently" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_73 +msgid "Convert Kit" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_74 +msgid "Convertro" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_34 +msgid "Corporate & Business" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_35 +msgid "Cosmetics" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__country_ids +msgid "Countries" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_75 +msgid "Crazy Egg" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_helpers__create_uid +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_industry__create_uid +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__create_uid +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_role__create_uid +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_seniority__create_uid +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_technology__create_uid +msgid "Created by" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_helpers__create_date +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_industry__create_date +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__create_date +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_role__create_date +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_seniority__create_date +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_technology__create_date +msgid "Created on" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_76 +msgid "Criteo" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_77 +msgid "Crowdskout" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_78 +msgid "Customer.io" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_86 +msgid "DNS Made Easy" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_79 +msgid "Dailymotion" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_222 +msgid "Data Processing & Outsourced Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_80 +msgid "Debian" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_81 +msgid "Demandbase" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_82 +msgid "Demandware" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_36 +msgid "Design" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_83 +msgid "Digital Ocean" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_helpers__display_name +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_industry__display_name +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__display_name +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_role__display_name +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_seniority__display_name +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_technology__display_name +msgid "Display Name" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_84 +msgid "Disqus" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_172 +msgid "Distributors" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_213 +msgid "Diversified Capital Markets" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_151 +msgid "Diversified Consumer Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_158 +msgid "Diversified Financial Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_159 +msgid "Diversified Financials" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_199 +msgid "Diversified Telecommunication Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_85 +msgid "Django" +msgstr "" + +#. module: crm_iap_lead +#: selection:crm.iap.lead.mining.request,state:0 +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_search +msgid "Done" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_87 +msgid "DoubleClick Ads" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_88 +msgid "DoubleClick Advertiser" +msgstr "" + +#. module: crm_iap_lead +#: selection:crm.iap.lead.mining.request,state:0 +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_search +msgid "Draft" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_89 +msgid "DreamHost Hosting" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_90 +msgid "Drift" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_91 +msgid "Drip" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_92 +msgid "Drupal" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_93 +msgid "Dwolla" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_94 +msgid "Dyn DNS" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_95 +msgid "Dynamic Yield" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_232 +msgid "E-Commerce" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_37 +msgid "E-Commerce & Marketplaces" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_38 +msgid "E-Learning" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_96 +msgid "Ecwid" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_39 +msgid "Education" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_170 +msgid "Education Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_97 +msgid "ElasticEmail" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_202 +msgid "Electric Utilities" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_40 +msgid "Electrical" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_183 +msgid "Electrical Equipment" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_194 +msgid "Electronic Equipment, Instruments & Components" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_98 +msgid "Elevio" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_99 +msgid "Eloqua" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.lead_message_template +msgid "Email" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_100 +msgid "Emma" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_41 +msgid "Energy" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_42 +msgid "Energy & Utilities" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_156 +msgid "Energy Equipment & Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_101 +msgid "Engagio" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_233 +msgid "Enterprise" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_43 +msgid "Entertainment & Recreation" +msgstr "" + +#. module: crm_iap_lead +#: selection:crm.iap.lead.mining.request,state:0 +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__error +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_search +msgid "Error" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_102 +msgid "Errorception" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_44 +msgid "Events" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_103 +msgid "Express" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_45 +msgid "Eyewear" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_104 +msgid "Facebook Advertiser" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_105 +msgid "Facebook Beacon" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_106 +msgid "Facebook Comments" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_107 +msgid "Facebook Connect" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_108 +msgid "Facebook Like Button" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_109 +msgid "Facebook Social Plugins" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_46 +msgid "Facilities" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_47 +msgid "Family Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_110 +msgid "Fedora" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__contact_filter_type +msgid "Filter on" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__filter_on_size +msgid "Filter on Size" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_48 +msgid "Finance" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_49 +msgid "Financial Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_145 +msgid "Financials" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_50 +msgid "Fine Art" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_51 +msgid "Firearms" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_52 +msgid "Fishery" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_111 +msgid "Flowplayer" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_53 +msgid "Food" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_153 +msgid "Food & Staples Retailing" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_54 +msgid "Food Production" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_174 +msgid "Food Products" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_209 +msgid "Food Retail" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_154 +msgid "Food, Beverage & Tobacco" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_112 +msgid "Formstack" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_55 +msgid "Forums" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_113 +msgid "FreeBSD" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_114 +msgid "Freshdesk" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_form +msgid "From" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_115 +msgid "Fullcontact" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_116 +msgid "Fullstory" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_56 +msgid "Fundraising" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_117 +msgid "FusionCharts" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_57 +msgid "Gambling & Casinos" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_176 +msgid "Gas Utilities" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_118 +msgid "Gauges" +msgstr "" + +#. module: crm_iap_lead +#. openerp-web +#: code:addons/crm_iap_lead/static/src/xml/leads_tree_generate_leads_views.xml:5 +#, python-format +msgid "Generate Leads" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__lead_ids +msgid "Generated Lead / Opportunity" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_119 +msgid "Get Response" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_120 +msgid "Get Satisfaction" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_121 +msgid "Go Squared" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_123 +msgid "GoDaddy Hosting" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_122 +msgid "Gocardless" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_124 +msgid "Godaddy Nameserver" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_226 +msgid "Gold" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_125 +msgid "Google Adsense" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_126 +msgid "Google Adwords" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_127 +msgid "Google Affiliate Network" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_128 +msgid "Google Analytics" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_129 +msgid "Google Apps" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_130 +msgid "Google Charts" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_131 +msgid "Google Cloud" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_132 +msgid "Google Forms" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_133 +msgid "Google Maps" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_134 +msgid "Google Tag Manager" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_135 +msgid "Google Website Optimizer" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_136 +msgid "Google Widgets" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_58 +msgid "Government" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_137 +msgid "GraphIQ" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_223 +msgid "Graphic Design" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_138 +msgid "Gravity Forms" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_139 +msgid "Greenhouse" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_59 +msgid "Ground Transportation" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_search +msgid "Group By" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_60 +msgid "Health & Wellness" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_61 +msgid "Health Care" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_160 +msgid "Health Care Equipment & Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_178 +msgid "Health Care Equipment & Supplies" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_179 +msgid "Health Care Providers & Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_215 +msgid "Health Care Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_140 +msgid "Heap" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_141 +msgid "Hello Bar" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_142 +msgid "Help Scout" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model,name:crm_iap_lead.model_crm_iap_lead_helpers +msgid "Helper methods for crm_iap_lead modules" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_143 +msgid "Heroku" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_144 +msgid "Highcharts" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_62 +msgid "Higher Education" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_63 +msgid "Home & Furniture" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_64 +msgid "Home Improvement" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_207 +msgid "Home Improvement Retail" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_208 +msgid "Homefurnishing Retail" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_169 +msgid "Hotels, Restaurants & Leisure" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_145 +msgid "Hotjar" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_155 +msgid "Household & Personal Products" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_146 +msgid "Hoverowl" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_147 +msgid "HubSpot" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_219 +msgid "Human Resource & Employment Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_65 +msgid "Human Resources" +msgstr "" + +#. module: crm_iap_lead +#: model:mail.template,subject:crm_iap_lead.lead_generation_no_credits +msgid "IAP Lead Generation Notification" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_helpers__id +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_industry__id +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__id +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_role__id +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_seniority__id +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_technology__id +msgid "ID" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_234 +msgid "ISP" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_191 +msgid "IT Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_148 +msgid "Icims" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_66 +msgid "Import & Export" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_168 +msgid "Independent Power and Renewable Electricity Producers" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_149 +msgid "Indicative" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_184 +msgid "Industrial Conglomerates" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_217 +msgid "Industrial Machinery" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_146 +msgid "Industrials" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_67 +msgid "Industrials & Manufacturing" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__industry_ids +msgid "Industries" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model,name:crm_iap_lead.model_crm_iap_lead_industry +msgid "Industry Tag" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_147 +msgid "Information Technology" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_68 +msgid "Information Technology & Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_150 +msgid "Infusionsoft" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_151 +msgid "Inside Sales" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_152 +msgid "Inspectlet" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_153 +msgid "Instagram" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_154 +msgid "Instagram Links" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_155 +msgid "Instart Logic" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_69 +msgid "Insurance" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_228 +msgid "Integrated Telecommunication Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_156 +msgid "Intense Debate" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_157 +msgid "Intercom" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_70 +msgid "International Relations" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_71 +msgid "International Trade" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_72 +msgid "Internet" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_190 +msgid "Internet Software & Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_73 +msgid "Investment" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_74 +msgid "Investment Banking" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_214 +msgid "Investment Banking & Brokerage" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_75 +msgid "Investment Management" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_159 +msgid "Iterable" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_160 +msgid "Java" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_76 +msgid "Jewelry, Watches & Luxury Goods" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_161 +msgid "Jobvite" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_162 +msgid "Joomla" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_77 +msgid "Judiciary" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_163 +msgid "Jw Player" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_164 +msgid "Kaltura" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_165 +msgid "Kapost" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_166 +msgid "Keen IO" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_167 +msgid "Kissmetrics" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_168 +msgid "Klaviyo" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_169 +msgid "Knowtify" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_179 +msgid "LKQD" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_helpers____last_update +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_industry____last_update +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request____last_update +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_role____last_update +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_seniority____last_update +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_technology____last_update +msgid "Last Modified on" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_helpers__write_uid +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_industry__write_uid +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__write_uid +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_role__write_uid +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_seniority__write_uid +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_technology__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_helpers__write_date +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_industry__write_date +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__write_date +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_role__write_date +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_seniority__write_date +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_technology__write_date +msgid "Last Updated on" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_78 +msgid "Law Enforcement" +msgstr "" + +#. module: crm_iap_lead +#: selection:crm.iap.lead.mining.request,lead_type:0 +msgid "Lead" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_170 +msgid "Lead Dyno" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.ui.menu,name:crm_iap_lead.crm_menu_lead_generation +msgid "Lead Generation" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_form +msgid "Lead Information" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.ui.menu,name:crm_iap_lead.crm_iap_lead_mining_request_menu_action +msgid "Lead Mining" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_lead__lead_mining_request_id +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_search +msgid "Lead Mining Request" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.actions.act_window,name:crm_iap_lead.crm_iap_lead_mining_request_action +msgid "Lead Mining Requests" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__lead_total_credit +msgid "Lead Total Credit" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model,name:crm_iap_lead.model_crm_lead +msgid "Lead/Opportunity" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_search +msgid "Leads" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_79 +msgid "Legal Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_204 +msgid "Leisure Facilities" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_171 +msgid "Lever" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_80 +msgid "Libraries" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_180 +msgid "Life Sciences Tools & Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_172 +msgid "Lightspeed" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_173 +msgid "LinkedIn Advertiser" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_174 +msgid "Linkwithin" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_175 +msgid "Linode Hosting" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_176 +msgid "Live Chat" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_177 +msgid "Livefyre" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_178 +msgid "Liveramp" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_180 +msgid "Localytics" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_181 +msgid "Looker" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_182 +msgid "Lucky Orange" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_81 +msgid "Machinery" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_183 +msgid "Mad Kudu" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_184 +msgid "Magento" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_185 +msgid "Magento Enterprise" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_186 +msgid "Magento V1" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_187 +msgid "Magento V2" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_188 +msgid "Mailchimp" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_189 +msgid "Mailgun" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_190 +msgid "Mailjet" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_form +msgid "Make sure you know if you have to be GDPR compliant for storing personal data." +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_191 +msgid "Mandrill" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_192 +msgid "Marin" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_188 +msgid "Marine" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_82 +msgid "Maritime" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_83 +msgid "Market Research" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_84 +msgid "Marketing & Advertising" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_193 +msgid "Marketo" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_235 +msgid "Marketplace" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_148 +msgid "Materials" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_194 +msgid "Maxmind" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_85 +msgid "Mechanical Engineering" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_86 +msgid "Media" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_87 +msgid "Medicine" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_197 +msgid "Metals & Mining" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_195 +msgid "Microsoft Azure" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_196 +msgid "Microsoft Exchange Online" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_197 +msgid "Microsoft Office 365" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_88 +msgid "Military" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_198 +msgid "Mindbody" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_89 +msgid "Mining & Metals" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_199 +msgid "Mixpanel" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_236 +msgid "Mobile" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_200 +msgid "Mode" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_201 +msgid "Mouseflow" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_202 +msgid "Mousestats" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_206 +msgid "Movies & Entertainment" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_90 +msgid "Movies & TV" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_91 +msgid "Museums" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_92 +msgid "Music" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_203 +msgid "My Site Auditor" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_seniority__name +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_technology__name +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.lead_message_template +msgid "Name" +msgstr "" + +#. module: crm_iap_lead +#: sql_constraint:crm.iap.lead.seniority:0 +msgid "Name already exists!" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_204 +msgid "Namecheap Dns" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_93 +msgid "Nanotechnology" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_205 +msgid "NationBuilder" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_94 +msgid "Networking" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_206 +msgid "Neustar Ad Advisor" +msgstr "" + +#. module: crm_iap_lead +#: code:addons/crm_iap_lead/models/crm_iap_lead_mining_request.py:31 +#: code:addons/crm_iap_lead/models/crm_iap_lead_mining_request.py:194 +#: code:addons/crm_iap_lead/models/crm_iap_lead_mining_request.py:200 +#: code:addons/crm_iap_lead/models/crm_iap_lead_mining_request.py:201 +#, python-format +msgid "New" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_207 +msgid "New Relic" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_208 +msgid "Nextable" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_209 +msgid "Nginx" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_95 +msgid "Non-Profit & Philanthropy" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_210 +msgid "Nosto" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_211 +msgid "Ns1" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__contact_number +msgid "Number of Contacts" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__leads_count +msgid "Number of Generated Leads" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__lead_number +msgid "Number of Leads" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__lead_number_info +msgid "Number of Leads " +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_96 +msgid "Oil & Gas" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_212 +msgid "Olark" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_213 +msgid "Omniconvert" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_214 +msgid "Omniture (Adobe Analytics)" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_215 +msgid "Ooyala" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_216 +msgid "Open Table" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_search +msgid "Opportunities" +msgstr "" + +#. module: crm_iap_lead +#: selection:crm.iap.lead.mining.request,lead_type:0 +msgid "Opportunity" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.lead_message_template +msgid "Opportunity created by Odoo Lead Generation" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_217 +msgid "Optimizely" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_218 +msgid "Optimonk" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_219 +msgid "Oscommerce" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__role_ids +msgid "Other Roles" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_220 +msgid "Outbound" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_221 +msgid "Outbrain Ads" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_222 +msgid "Outlook" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_97 +msgid "Outsourcing" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_211 +msgid "Packaged Foods & Meats" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_98 +msgid "Packaging & Containers" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_198 +msgid "Paper & Forest Products" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_99 +msgid "Paper Goods" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_227 +msgid "Paper Products" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_224 +msgid "Pardot" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_225 +msgid "PayPal" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_100 +msgid "Payments" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_226 +msgid "Payza" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model,name:crm_iap_lead.model_crm_iap_lead_role +msgid "People Role" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model,name:crm_iap_lead.model_crm_iap_lead_seniority +msgid "People Seniority" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_227 +msgid "Percolate" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_228 +msgid "Perfect Audience" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_101 +msgid "Performing Arts" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_229 +msgid "Periscope Data" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_175 +msgid "Personal Products" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_102 +msgid "Pharmaceuticals" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_161 +msgid "Pharmaceuticals, Biotechnology & Life Sciences" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_103 +msgid "Pharmacy" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.lead_message_template +msgid "Phone" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_104 +msgid "Photography" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_230 +msgid "Picreel" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_231 +msgid "Pingdom" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_232 +msgid "Pinterest" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_233 +msgid "Pipedrive" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_234 +msgid "Piwik" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_105 +msgid "Plastics" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_235 +msgid "Playwire" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_106 +msgid "Plumbing" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_107 +msgid "Political Organization" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_108 +msgid "Pornography" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_236 +msgid "Postmark" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_237 +msgid "PowerReviews" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__preferred_role_id +msgid "Preferred Role" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_238 +msgid "Presta Shop" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_109 +msgid "Primary & Secondary Education" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_110 +msgid "Printing" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_239 +msgid "Privy" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_186 +msgid "Professional Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_111 +msgid "Public Relations" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_112 +msgid "Publishing" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_240 +msgid "Qbrick" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_241 +msgid "Qualaroo" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_242 +msgid "Qualtrics" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_243 +msgid "Quantcast" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_244 +msgid "Qubit" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_245 +msgid "Rackspace" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_246 +msgid "Rackspace Email" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_113 +msgid "Ranching" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_251 +msgid "ReSRCit" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_114 +msgid "Real Estate" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_247 +msgid "Recaptcha" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_248 +msgid "Recruiterbox" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_249 +msgid "Recurly" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_250 +msgid "Red Hat" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_115 +msgid "Religion" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_201 +msgid "Renewable Electricity" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_229 +msgid "Renewable Energy" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_116 +msgid "Renewables & Environment" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_form +msgid "Request" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__name +msgid "Request Number" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_220 +msgid "Research & Consulting Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_117 +msgid "Restaurants" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_252 +msgid "Resumator" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_118 +msgid "Retail" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_253 +msgid "RetailRocket" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_152 +msgid "Retailing" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_form +msgid "Retry" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_industry__reveal_id +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_role__reveal_id +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_seniority__reveal_id +msgid "Reveal" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_lead__reveal_id +msgid "Reveal ID" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_254 +msgid "Rezdy" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_255 +msgid "Rezgo" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_189 +msgid "Road & Rail" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_256 +msgid "Robly" +msgstr "" + +#. module: crm_iap_lead +#: selection:crm.iap.lead.mining.request,contact_filter_type:0 +msgid "Role" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_role__name +msgid "Role Name" +msgstr "" + +#. module: crm_iap_lead +#: sql_constraint:crm.iap.lead.role:0 +msgid "Role name already exists!" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_257 +msgid "Rollbar" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_258 +msgid "Route 53" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_259 +msgid "Ruby On Rails" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_237 +msgid "SAAS" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__team_id +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_search +msgid "Sales Team" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_260 +msgid "Salesforce" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_261 +msgid "Salesmachine" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__user_id +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_search +msgid "Salesperson" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_262 +msgid "Salsa" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_119 +msgid "Sanitization Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_263 +msgid "Satismeter" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_120 +msgid "Scientific & Academic Research" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_121 +msgid "Security" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_264 +msgid "Segment" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_221 +msgid "Semiconductors" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_164 +msgid "Semiconductors & Semiconductor Equipment" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_265 +msgid "Sendgrid" +msgstr "" + +#. module: crm_iap_lead +#: selection:crm.iap.lead.mining.request,contact_filter_type:0 +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__seniority_id +msgid "Seniority" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_266 +msgid "Sentry" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_122 +msgid "Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_267 +msgid "Sessioncam" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_268 +msgid "Sharepoint" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_269 +msgid "Sharp Spring" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_123 +msgid "Shipbuilding" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_124 +msgid "Shipping & Logistics" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_270 +msgid "Shopify" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_271 +msgid "Shopify Plus" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_272 +msgid "Shopware" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_273 +msgid "Sidecar" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_274 +msgid "Silkroad" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_275 +msgid "Simplicant" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__company_size_min +msgid "Size" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_276 +msgid "Slack" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_277 +msgid "Smartlook" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_278 +msgid "Snowplow Analytics" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_125 +msgid "Society" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_279 +msgid "Sociomantic" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_280 +msgid "Socket.io" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_281 +msgid "Softlayer Hosting" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_192 +msgid "Software" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_165 +msgid "Software & Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_171 +msgid "Specialized Consumer Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_173 +msgid "Specialty Retail" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_126 +msgid "Sporting Goods" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_127 +msgid "Sports & Fitness" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_282 +msgid "Squarespace" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__state_ids +msgid "States" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__state +msgid "Status" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_283 +msgid "SteelHouse" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_128 +msgid "Stores" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_284 +msgid "Stripe" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_form +msgid "Submit" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_285 +msgid "Success Factors" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_286 +msgid "Sumo" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_287 +msgid "Survey Monkey" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_288 +msgid "Tableau" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_289 +msgid "Taboola Ads" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_industry__name +msgid "Tag Name" +msgstr "" + +#. module: crm_iap_lead +#: sql_constraint:crm.iap.lead.industry:0 +msgid "Tag name already exists!" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__tag_ids +msgid "Tags" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_129 +msgid "Talent Agencies" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_290 +msgid "Taleo" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_291 +msgid "Talkable" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__search_type +msgid "Target" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_292 +msgid "Tawk" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_293 +msgid "Tealium" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_technology__tech_tag +msgid "Tech Tag" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__technology_ids +msgid "Technologies" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_130 +msgid "Technology" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_166 +msgid "Technology Hardware & Equipment" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_195 +msgid "Technology Hardware, Storage & Peripherals" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model,name:crm_iap_lead.model_crm_iap_lead_technology +msgid "Technology Tag" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.lead_message_template +msgid "Technology Used :" +msgstr "" + +#. module: crm_iap_lead +#: sql_constraint:crm.iap.lead.technology:0 +msgid "Technology tag name already exists!" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_149 +msgid "Telecommunication Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_131 +msgid "Telecommunications" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_294 +msgid "Terminus" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_132 +msgid "Textiles" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.lead_message_template +msgid "Title" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_133 +msgid "Tobacco" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_134 +msgid "Tools" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_295 +msgid "Top Producer" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_296 +msgid "Totango" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_297 +msgid "Tout" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_298 +msgid "Toutapp" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_299 +msgid "TowerData" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_300 +msgid "Track JS" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_185 +msgid "Trading Companies & Distributors" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_135 +msgid "Translation" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_136 +msgid "Transportation" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_137 +msgid "Travel & Leisure" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_301 +msgid "Trustpilot" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_302 +msgid "Twitter Advertiser" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_303 +msgid "Twitter Badge" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_304 +msgid "Twitter Button" +msgstr "" + +#. module: crm_iap_lead +#: model:ir.model.fields,field_description:crm_iap_lead.field_crm_iap_lead_mining_request__lead_type +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_search +msgid "Type" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_305 +msgid "Typeform" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_306 +msgid "Typekit By Adobe" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_307 +msgid "Uber Cart" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_308 +msgid "Ubuntu" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_309 +msgid "Ultipro" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_310 +msgid "Unix" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_form +msgid "Up to" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_311 +msgid "UserVoice" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_138 +msgid "Utilities" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_139 +msgid "Venture Capital" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_312 +msgid "Vero" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_313 +msgid "Verticalresponse" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_140 +msgid "Veterinary" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_141 +msgid "Video Games" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_314 +msgid "Video.js" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_315 +msgid "Vidyard" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_316 +msgid "Vimeo" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_317 +msgid "Virtue Mart" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_318 +msgid "Visual IQ" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_319 +msgid "Visual Website Optimizer" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_320 +msgid "Volusion" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_321 +msgid "Vzaar" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_142 +msgid "Warehousing" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_143 +msgid "Web Services & Apps" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_322 +msgid "WebEngage" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_323 +msgid "Weebly" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_144 +msgid "Wholesale" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.industry,name:crm_iap_lead.crm_iap_lead_industry_200 +msgid "Wireless Telecommunication Services" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_324 +msgid "Wistia" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_325 +msgid "Wix Stores" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_326 +msgid "Woo Commerce" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_327 +msgid "Woopra" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_328 +msgid "Wootric" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_329 +msgid "Wordpress" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_330 +msgid "Workable" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_331 +msgid "Wp Engine" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_332 +msgid "Wufoo" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_334 +msgid "Yahoo Stores" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_335 +msgid "Yandex Metrica" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_336 +msgid "Yelp Seatme" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_337 +msgid "Yesware" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_338 +msgid "Yieldify" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_339 +msgid "Yotpo" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_340 +msgid "Youtube" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_341 +msgid "Zeit Now" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_342 +msgid "Zen Cart" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_343 +msgid "Zendesk" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_344 +msgid "Zenreach" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_345 +msgid "Zopim" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_346 +msgid "Zuora" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_347 +msgid "Zype" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_form +msgid "additional credits will be consumed per company to identify contacts.\n" +" (" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_26 +msgid "amCharts" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.role,name:crm_iap_lead.crm_iap_lead_role_1 +msgid "ceo" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.role,name:crm_iap_lead.crm_iap_lead_role_2 +msgid "communications" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_form +msgid "companies.\n" +" <br/>" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.role,name:crm_iap_lead.crm_iap_lead_role_3 +msgid "consulting" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_form +msgid "credits will be consumed to find" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.role,name:crm_iap_lead.crm_iap_lead_role_4 +msgid "customer_service" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.seniority,name:crm_iap_lead.crm_iap_lead_seniority_1 +msgid "director" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.role,name:crm_iap_lead.crm_iap_lead_role_5 +msgid "education" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_form +msgid "employees" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.role,name:crm_iap_lead.crm_iap_lead_role_6 +msgid "engineering" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.seniority,name:crm_iap_lead.crm_iap_lead_seniority_2 +msgid "executive" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.role,name:crm_iap_lead.crm_iap_lead_role_7 +msgid "finance" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.role,name:crm_iap_lead.crm_iap_lead_role_8 +msgid "founder" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.role,name:crm_iap_lead.crm_iap_lead_role_9 +msgid "health_professional" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.role,name:crm_iap_lead.crm_iap_lead_role_10 +msgid "human_resources" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.role,name:crm_iap_lead.crm_iap_lead_role_11 +msgid "information_technology" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_158 +msgid "ios" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.role,name:crm_iap_lead.crm_iap_lead_role_12 +msgid "legal" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.seniority,name:crm_iap_lead.crm_iap_lead_seniority_3 +msgid "manager" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.role,name:crm_iap_lead.crm_iap_lead_role_13 +msgid "marketing" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.role,name:crm_iap_lead.crm_iap_lead_role_14 +msgid "operations" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.role,name:crm_iap_lead.crm_iap_lead_role_15 +msgid "owner" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_223 +msgid "ownerIQ" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.role,name:crm_iap_lead.crm_iap_lead_role_16 +msgid "president" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.role,name:crm_iap_lead.crm_iap_lead_role_17 +msgid "product" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.role,name:crm_iap_lead.crm_iap_lead_role_18 +msgid "public_relations" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.role,name:crm_iap_lead.crm_iap_lead_role_19 +msgid "real_estate" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.role,name:crm_iap_lead.crm_iap_lead_role_20 +msgid "recruiting" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.role,name:crm_iap_lead.crm_iap_lead_role_21 +msgid "research" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.role,name:crm_iap_lead.crm_iap_lead_role_22 +msgid "sale" +msgstr "" + +#. module: crm_iap_lead +#: model_terms:ir.ui.view,arch_db:crm_iap_lead.crm_iap_lead_mining_request_form +msgid "to" +msgstr "" + +#. module: crm_iap_lead +#: model:crm.iap.lead.technology,name:crm_iap_lead.crm_iap_lead_technology_333 +msgid "xt:Commerce" +msgstr "" + diff --git a/addons/crm_iap_lead_website/i18n/crm_iap_lead_website.pot b/addons/crm_iap_lead_website/i18n/crm_iap_lead_website.pot new file mode 100644 index 00000000000..51a61a50c50 --- /dev/null +++ b/addons/crm_iap_lead_website/i18n/crm_iap_lead_website.pot @@ -0,0 +1,456 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * crm_iap_lead_website +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~12.2\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-03-20 14:18+0000\n" +"PO-Revision-Date: 2019-03-20 14:18+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_iap_lead_website +#: model_terms:ir.ui.view,arch_db:crm_iap_lead_website.crm_reveal_rule_form +msgid "1 credit is consumed per visitor matching the website traffic conditions and whose company can be identified.<br/>" +msgstr "" + +#. module: crm_iap_lead_website +#: model_terms:ir.ui.view,arch_db:crm_iap_lead_website.crm_reveal_rule_form +msgid "<span class=\"o_stat_text\"> Leads </span>" +msgstr "" + +#. module: crm_iap_lead_website +#: model_terms:ir.ui.view,arch_db:crm_iap_lead_website.crm_reveal_rule_form +msgid "<span class=\"o_stat_text\"> Opportunities </span>" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__active +msgid "Active" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model,name:crm_iap_lead_website.model_crm_reveal_rule +msgid "CRM Lead Generation Rules" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model,name:crm_iap_lead_website.model_crm_reveal_view +msgid "CRM Reveal View" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,help:crm_iap_lead_website.field_crm_reveal_rule__lead_for +msgid "Choose whether to track companies only or companies and their contacts" +msgstr "" + +#. module: crm_iap_lead_website +#: selection:crm.reveal.rule,lead_for:0 +msgid "Companies" +msgstr "" + +#. module: crm_iap_lead_website +#: selection:crm.reveal.rule,lead_for:0 +msgid "Companies and their Contacts" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__company_size_min +msgid "Company Size" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__company_size_max +msgid "Company Size Max" +msgstr "" + +#. module: crm_iap_lead_website +#: model_terms:ir.ui.view,arch_db:crm_iap_lead_website.crm_reveal_rule_form +msgid "Contact Filter" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__country_ids +msgid "Countries" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_view__create_date +msgid "Create Date" +msgstr "" + +#. module: crm_iap_lead_website +#: model_terms:ir.actions.act_window,help:crm_iap_lead_website.crm_reveal_rule_action +msgid "Create a conversion rule" +msgstr "" + +#. module: crm_iap_lead_website +#: model_terms:ir.actions.act_window,help:crm_iap_lead_website.crm_reveal_rule_action +msgid "Create rules to generate B2B leads/opportunities from your website visitors." +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__create_uid +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_view__create_uid +msgid "Created by" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__create_date +msgid "Created on" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__lead_for +msgid "Data Tracking" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__display_name +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_view__display_name +msgid "Display Name" +msgstr "" + +#. module: crm_iap_lead_website +#: code:addons/crm_iap_lead_website/models/crm_reveal_rule.py:73 +#, python-format +msgid "Enter Valid Regex." +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__contact_filter_type +msgid "Filter On" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,help:crm_iap_lead_website.field_crm_reveal_rule__filter_on_size +msgid "Filter companies based on their size." +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__filter_on_size +msgid "Filter on Size" +msgstr "" + +#. module: crm_iap_lead_website +#: model_terms:ir.ui.view,arch_db:crm_iap_lead_website.crm_reveal_rule_form +msgid "From" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__lead_ids +msgid "Generated Lead / Opportunity" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model,name:crm_iap_lead_website.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: crm_iap_lead_website +#: selection:crm.reveal.rule,priority:0 +msgid "High" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_lead__reveal_iap_credits +msgid "IAP Credits" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__id +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_view__id +msgid "ID" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_lead__reveal_ip +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_view__reveal_ip +msgid "IP Address" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__industry_tag_ids +msgid "Industries" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule____last_update +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_view____last_update +msgid "Last Modified on" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__write_uid +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_view__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__write_date +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_view__write_date +msgid "Last Updated on" +msgstr "" + +#. module: crm_iap_lead_website +#: selection:crm.reveal.rule,lead_type:0 +msgid "Lead" +msgstr "" + +#. module: crm_iap_lead_website +#: model_terms:ir.ui.view,arch_db:crm_iap_lead_website.crm_reveal_rule_form +msgid "Lead Data" +msgstr "" + +#. module: crm_iap_lead_website +#: model_terms:ir.ui.view,arch_db:crm_iap_lead_website.crm_reveal_lead_form +#: model_terms:ir.ui.view,arch_db:crm_iap_lead_website.crm_reveal_lead_opportunity_form +msgid "Lead Generation Information" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_lead__reveal_rule_id +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_view__reveal_rule_id +msgid "Lead Generation Rule" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.actions.act_window,name:crm_iap_lead_website.crm_reveal_view_action +#: model:ir.ui.menu,name:crm_iap_lead_website.crm_reveal_view_menu_action +msgid "Lead Generation Views" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.actions.server,name:crm_iap_lead_website.ir_cron_crm_reveal_lead_ir_actions_server +#: model:ir.cron,cron_name:crm_iap_lead_website.ir_cron_crm_reveal_lead +#: model:ir.cron,name:crm_iap_lead_website.ir_cron_crm_reveal_lead +msgid "Lead Generation: Leads/Opportunities Generation" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model,name:crm_iap_lead_website.model_crm_lead +msgid "Lead/Opportunity" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,help:crm_iap_lead_website.field_crm_reveal_rule__industry_tag_ids +msgid "Leave empty to always match. Odoo will not create lead if no match" +msgstr "" + +#. module: crm_iap_lead_website +#: selection:crm.reveal.rule,priority:0 +msgid "Low" +msgstr "" + +#. module: crm_iap_lead_website +#: model_terms:ir.ui.view,arch_db:crm_iap_lead_website.crm_reveal_rule_form +msgid "Make sure you know if you have to be GDPR compliant for storing personal data." +msgstr "" + +#. module: crm_iap_lead_website +#: sql_constraint:crm.reveal.rule:0 +msgid "Maximum 5 contacts are allowed!" +msgstr "" + +#. module: crm_iap_lead_website +#: selection:crm.reveal.rule,priority:0 +msgid "Medium" +msgstr "" + +#. module: crm_iap_lead_website +#: selection:crm.reveal.view,reveal_state:0 +msgid "Not Found" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__extra_contacts +msgid "Number of Contacts" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__leads_count +msgid "Number of Generated Leads" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__opportunity_count +msgid "Number of Generated Opportunity" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,help:crm_iap_lead_website.field_crm_reveal_rule__country_ids +msgid "Only visitors of following countries will be converted into leads/opportunities (using GeoIP)." +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,help:crm_iap_lead_website.field_crm_reveal_rule__state_ids +msgid "Only visitors of following states will be converted into leads/opportunities." +msgstr "" + +#. module: crm_iap_lead_website +#: selection:crm.reveal.rule,lead_type:0 +msgid "Opportunity" +msgstr "" + +#. module: crm_iap_lead_website +#: model_terms:ir.ui.view,arch_db:crm_iap_lead_website.crm_reveal_rule_form +msgid "Opportunity Data" +msgstr "" + +#. module: crm_iap_lead_website +#: model_terms:ir.ui.view,arch_db:crm_iap_lead_website.crm_reveal_rule_form +msgid "Opportunity Generation Conditions" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__other_role_ids +msgid "Other Roles" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__preferred_role_id +msgid "Preferred Role" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__priority +msgid "Priority" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,help:crm_iap_lead_website.field_crm_reveal_rule__regex_url +msgid "Regex to track website pages. Leave empty to track the entire website, or / to target the homepage. Example: /page* to track all the pages which begin with /page" +msgstr "" + +#. module: crm_iap_lead_website +#: selection:crm.reveal.rule,contact_filter_type:0 +msgid "Role" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__name +msgid "Rule Name" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__team_id +msgid "Sales Channel" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__user_id +msgid "Salesperson" +msgstr "" + +#. module: crm_iap_lead_website +#: selection:crm.reveal.rule,contact_filter_type:0 +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__seniority_id +msgid "Seniority" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__sequence +msgid "Sequence" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_view__reveal_state +msgid "State" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__state_ids +msgid "States" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__suffix +msgid "Suffix" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__tag_ids +msgid "Tags" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,help:crm_iap_lead_website.field_crm_reveal_rule__extra_contacts +msgid "This is the number of contacts to track if their role/seniority match your criteria. Their details will show up in the history thread of generated leads/opportunities. One credit is consumed per tracked contact." +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,help:crm_iap_lead_website.field_crm_reveal_rule__suffix +msgid "This will be appended in name of generated lead so you can identify lead/opportunity is generated with this rule" +msgstr "" + +#. module: crm_iap_lead_website +#: selection:crm.reveal.view,reveal_state:0 +msgid "To Process" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__lead_type +msgid "Type" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,field_description:crm_iap_lead_website.field_crm_reveal_rule__regex_url +msgid "URL Expression" +msgstr "" + +#. module: crm_iap_lead_website +#: model_terms:ir.ui.view,arch_db:crm_iap_lead_website.crm_reveal_rule_form +msgid "Up to" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.model.fields,help:crm_iap_lead_website.field_crm_reveal_rule__sequence +msgid "Used to order the rules with same URL and countries. Rules with a lower sequence number will be processed first." +msgstr "" + +#. module: crm_iap_lead_website +#: selection:crm.reveal.rule,priority:0 +msgid "Very High" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.ui.menu,name:crm_iap_lead_website.crm_reveal_rule_menu_action +msgid "Visits to Leads" +msgstr "" + +#. module: crm_iap_lead_website +#: model:ir.actions.act_window,name:crm_iap_lead_website.crm_reveal_rule_action +msgid "Visits to Leads Rules" +msgstr "" + +#. module: crm_iap_lead_website +#: model_terms:ir.ui.view,arch_db:crm_iap_lead_website.crm_reveal_rule_form +msgid "Website Traffic Conditions" +msgstr "" + +#. module: crm_iap_lead_website +#: model_terms:ir.ui.view,arch_db:crm_iap_lead_website.crm_reveal_rule_form +msgid "additional credit(s) are consumed if the company matches this rule." +msgstr "" + +#. module: crm_iap_lead_website +#: model_terms:ir.ui.view,arch_db:crm_iap_lead_website.crm_reveal_rule_form +msgid "e.g. US Visitors" +msgstr "" + +#. module: crm_iap_lead_website +#: model_terms:ir.ui.view,arch_db:crm_iap_lead_website.crm_reveal_rule_form +msgid "employees" +msgstr "" + +#. module: crm_iap_lead_website +#: model_terms:ir.ui.view,arch_db:crm_iap_lead_website.crm_reveal_rule_form +msgid "to" +msgstr "" + diff --git a/addons/delivery/i18n/delivery.pot b/addons/delivery/i18n/delivery.pot index 3e60c60ba0d..c79dc22fff8 100644 --- a/addons/delivery/i18n/delivery.pot +++ b/addons/delivery/i18n/delivery.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:59+0000\n" -"PO-Revision-Date: 2019-01-16 07:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,6 +16,13 @@ msgstr "" "Plural-Forms: \n" #. module: delivery +#: code:addons/delivery/models/sale_order.py:85 +#: code:addons/delivery/models/sale_order.py:116 +#, python-format +msgid " (Estimated Cost: %s )" +msgstr "" + +#. module: delivery #: model:mail.template,report_name:delivery.mail_template_data_delivery_confirmation msgid "${(object.name or '').replace('/','_')}" msgstr "" @@ -53,22 +60,13 @@ msgid "<div style=\"margin: 0px; padding: 0px;\">\n" msgstr "" #. module: delivery -#: model_terms:ir.ui.view,arch_db:delivery.view_order_form_with_carrier -msgid "<i class=\"fa fa-arrow-right\"/> Add to order" -msgstr "" - -#. module: delivery -#: model_terms:ir.ui.view,arch_db:delivery.view_order_form_with_carrier -msgid "<i class=\"fa fa-arrow-right\"/> Get rate" +#: model_terms:ir.ui.view,arch_db:delivery.choose_delivery_carrier_view_form +msgid "<i class=\"fa fa-arrow-right\"/>\n" +" Get rate" msgstr "" #. module: delivery -#: model_terms:ir.ui.view,arch_db:delivery.view_order_form_with_carrier -msgid "<i class=\"fa fa-check text-success\" role=\"img\" aria-label=\"Rating OK\" title=\"Rating OK\" attrs=\"{'invisible':['|','|',('carrier_id','=',False),('state','not in',('draft','sent')),('delivery_rating_success','=',False)]}\"/>" -msgstr "" - -#. module: delivery -#: code:addons/delivery/models/delivery_carrier.py:77 +#: code:addons/delivery/models/delivery_carrier.py:83 #, python-format msgid "<p class=\"o_view_nocontent\">\n" " Buy Odoo Enterprise now to get more providers.\n" @@ -76,11 +74,6 @@ msgid "<p class=\"o_view_nocontent\">\n" msgstr "" #. module: delivery -#: model_terms:ir.ui.view,arch_db:delivery.choose_delivery_package_view_form -msgid "<span>kg</span>" -msgstr "" - -#. module: delivery #: model_terms:ir.ui.view,arch_db:delivery.report_delivery_document2 #: model_terms:ir.ui.view,arch_db:delivery.report_shipping2 msgid "<strong>Carrier</strong>" @@ -112,6 +105,19 @@ msgid "Active" msgstr "" #. module: delivery +#: model_terms:ir.ui.view,arch_db:delivery.choose_delivery_carrier_view_form +msgid "Add" +msgstr "" + +#. module: delivery +#: code:addons/delivery/models/sale_order.py:63 +#: code:addons/delivery/wizard/choose_delivery_carrier.py:68 +#: model_terms:ir.ui.view,arch_db:delivery.view_order_form_with_carrier +#, python-format +msgid "Add a shipping method" +msgstr "" + +#. module: delivery #: model:ir.model.fields,field_description:delivery.field_delivery_carrier__amount msgid "Amount" msgstr "" @@ -127,7 +133,7 @@ msgid "Archived" msgstr "" #. module: delivery -#: model:ir.model.fields,field_description:delivery.field_sale_order__available_carrier_ids +#: model:ir.model.fields,field_description:delivery.field_choose_delivery_carrier__available_carrier_ids msgid "Available Carriers" msgstr "" @@ -157,6 +163,11 @@ msgid "Carrier" msgstr "" #. module: delivery +#: model:ir.model.fields,help:delivery.field_choose_delivery_carrier__carrier_id +msgid "Choose the method to deliver your goods" +msgstr "" + +#. module: delivery #: model:ir.model.fields,field_description:delivery.field_delivery_carrier__company_id msgid "Company" msgstr "" @@ -177,11 +188,18 @@ msgid "Contact" msgstr "" #. module: delivery +#: model:ir.model.fields,field_description:delivery.field_choose_delivery_carrier__display_price +#: model_terms:ir.ui.view,arch_db:delivery.choose_delivery_carrier_view_form +msgid "Cost" +msgstr "" + +#. module: delivery #: model:ir.model.fields,field_description:delivery.field_delivery_carrier__country_ids msgid "Countries" msgstr "" #. module: delivery +#: model:ir.model.fields,field_description:delivery.field_choose_delivery_carrier__create_uid #: model:ir.model.fields,field_description:delivery.field_choose_delivery_package__create_uid #: model:ir.model.fields,field_description:delivery.field_delivery_carrier__create_uid #: model:ir.model.fields,field_description:delivery.field_delivery_price_rule__create_uid @@ -189,6 +207,7 @@ msgid "Created by" msgstr "" #. module: delivery +#: model:ir.model.fields,field_description:delivery.field_choose_delivery_carrier__create_date #: model:ir.model.fields,field_description:delivery.field_choose_delivery_package__create_date #: model:ir.model.fields,field_description:delivery.field_delivery_carrier__create_date #: model:ir.model.fields,field_description:delivery.field_delivery_price_rule__create_date @@ -196,6 +215,16 @@ msgid "Created on" msgstr "" #. module: delivery +#: model:ir.model.fields,field_description:delivery.field_choose_delivery_carrier__currency_id +msgid "Currency" +msgstr "" + +#. module: delivery +#: model:ir.model.fields,field_description:delivery.field_choose_delivery_carrier__partner_id +msgid "Customer" +msgstr "" + +#. module: delivery #: model:ir.model.fields,field_description:delivery.field_delivery_carrier__debug_logging msgid "Debug logging" msgstr "" @@ -227,11 +256,17 @@ msgid "Delivery Carrier" msgstr "" #. module: delivery +#: model:ir.model,name:delivery.model_choose_delivery_carrier +msgid "Delivery Carrier Selection Wizard" +msgstr "" + +#. module: delivery #: model_terms:ir.ui.view,arch_db:delivery.view_delivery_price_rule_form msgid "Delivery Cost" msgstr "" #. module: delivery +#: model:ir.model.fields,field_description:delivery.field_choose_delivery_carrier__delivery_message #: model:ir.model.fields,field_description:delivery.field_sale_order__delivery_message msgid "Delivery Message" msgstr "" @@ -272,6 +307,11 @@ msgid "Delivery Packaging" msgstr "" #. module: delivery +#: model:ir.model.fields,field_description:delivery.field_choose_delivery_carrier__delivery_price +msgid "Delivery Price" +msgstr "" + +#. module: delivery #: model:ir.model,name:delivery.model_delivery_price_rule msgid "Delivery Price Rules" msgstr "" @@ -287,6 +327,17 @@ msgid "Delivery Rating Success" msgstr "" #. module: delivery +#: model:ir.model.fields,field_description:delivery.field_sale_order__delivery_set +msgid "Delivery Set" +msgstr "" + +#. module: delivery +#: model:ir.model.fields,field_description:delivery.field_sale_order__recompute_delivery_price +#: model:ir.model.fields,field_description:delivery.field_sale_order_line__recompute_delivery_price +msgid "Delivery cost should be recomputed" +msgstr "" + +#. module: delivery #: model_terms:ir.ui.view,arch_db:delivery.view_delivery_carrier_form msgid "Destination Availability" msgstr "" @@ -297,11 +348,13 @@ msgid "Determine the display order" msgstr "" #. module: delivery +#: model_terms:ir.ui.view,arch_db:delivery.choose_delivery_carrier_view_form #: model_terms:ir.ui.view,arch_db:delivery.choose_delivery_package_view_form msgid "Discard" msgstr "" #. module: delivery +#: model:ir.model.fields,field_description:delivery.field_choose_delivery_carrier__display_name #: model:ir.model.fields,field_description:delivery.field_choose_delivery_package__display_name #: model:ir.model.fields,field_description:delivery.field_delivery_carrier__display_name #: model:ir.model.fields,field_description:delivery.field_delivery_price_rule__display_name @@ -326,15 +379,21 @@ msgid "Environment" msgstr "" #. module: delivery -#: code:addons/delivery/models/delivery_carrier.py:217 +#: code:addons/delivery/models/delivery_carrier.py:230 #: code:addons/delivery/models/delivery_grid.py:50 #, python-format msgid "Error: this delivery method is not available for this address." msgstr "" #. module: delivery -#: model:ir.model.fields,field_description:delivery.field_sale_order__delivery_price -msgid "Estimated Delivery Price" +#: model:ir.model.fields,help:delivery.field_delivery_carrier__invoice_policy +msgid "Estimated Cost: the customer will be invoiced the estimated cost of the shipping.\n" +"Real Cost: the customer will be invoiced the real cost of the shipping, the cost of the shipping will be updated on the SO after the delivery." +msgstr "" + +#. module: delivery +#: selection:delivery.carrier,invoice_policy:0 +msgid "Estimated cost" msgstr "" #. module: delivery @@ -397,6 +456,7 @@ msgid "Height must be positive" msgstr "" #. module: delivery +#: model:ir.model.fields,field_description:delivery.field_choose_delivery_carrier__id #: model:ir.model.fields,field_description:delivery.field_choose_delivery_package__id #: model:ir.model.fields,field_description:delivery.field_delivery_carrier__id #: model:ir.model.fields,field_description:delivery.field_delivery_price_rule__id @@ -409,14 +469,6 @@ msgid "If the order total amount (shipping excluded) is above or equal to this v msgstr "" #. module: delivery -#: code:addons/delivery/models/delivery_carrier.py:126 -#, python-format -msgid "Info:\n" -"The shipping is free because the order amount exceeds %.2f.\n" -"(The actual shipping cost is: %.2f)" -msgstr "" - -#. module: delivery #: model_terms:ir.ui.view,arch_db:delivery.view_delivery_carrier_form msgid "Install more Providers" msgstr "" @@ -432,11 +484,27 @@ msgid "Invoice Shipping on Delivery" msgstr "" #. module: delivery +#: model:ir.model.fields,field_description:delivery.field_choose_delivery_carrier__invoicing_message +msgid "Invoicing Message" +msgstr "" + +#. module: delivery +#: model:ir.model.fields,field_description:delivery.field_delivery_carrier__invoice_policy +msgid "Invoicing Policy" +msgstr "" + +#. module: delivery +#: model:ir.model.fields,field_description:delivery.field_stock_picking__is_return_picking +msgid "Is Return Picking" +msgstr "" + +#. module: delivery #: model:ir.model.fields,field_description:delivery.field_sale_order_line__is_delivery msgid "Is a Delivery" msgstr "" #. module: delivery +#: model:ir.model.fields,field_description:delivery.field_choose_delivery_carrier____last_update #: model:ir.model.fields,field_description:delivery.field_choose_delivery_package____last_update #: model:ir.model.fields,field_description:delivery.field_delivery_carrier____last_update #: model:ir.model.fields,field_description:delivery.field_delivery_price_rule____last_update @@ -444,6 +512,7 @@ msgid "Last Modified on" msgstr "" #. module: delivery +#: model:ir.model.fields,field_description:delivery.field_choose_delivery_carrier__write_uid #: model:ir.model.fields,field_description:delivery.field_choose_delivery_package__write_uid #: model:ir.model.fields,field_description:delivery.field_delivery_carrier__write_uid #: model:ir.model.fields,field_description:delivery.field_delivery_price_rule__write_uid @@ -451,6 +520,7 @@ msgid "Last Updated by" msgstr "" #. module: delivery +#: model:ir.model.fields,field_description:delivery.field_choose_delivery_carrier__write_date #: model:ir.model.fields,field_description:delivery.field_choose_delivery_package__write_date #: model:ir.model.fields,field_description:delivery.field_delivery_carrier__write_date #: model:ir.model.fields,field_description:delivery.field_delivery_price_rule__write_date @@ -519,12 +589,6 @@ msgid "No carrier integration" msgstr "" #. module: delivery -#: code:addons/delivery/models/sale_order.py:80 -#, python-format -msgid "No carrier set for this order." -msgstr "" - -#. module: delivery #: code:addons/delivery/models/delivery_grid.py:102 #, python-format msgid "No price rule matching this order; delivery cost cannot be computed." @@ -548,6 +612,11 @@ msgid "Operator" msgstr "" #. module: delivery +#: model:ir.model.fields,field_description:delivery.field_choose_delivery_carrier__order_id +msgid "Order" +msgstr "" + +#. module: delivery #: model_terms:ir.ui.view,arch_db:delivery.choose_delivery_package_view_form msgid "Package" msgstr "" @@ -558,14 +627,14 @@ msgid "Package Code" msgstr "" #. module: delivery -#: code:addons/delivery/models/stock_picking.py:43 -#: code:addons/delivery/models/stock_picking.py:132 +#: code:addons/delivery/models/stock_picking.py:48 +#: code:addons/delivery/models/stock_picking.py:145 #, python-format msgid "Package Details" msgstr "" #. module: delivery -#: code:addons/delivery/wizard/choose_delivery_package.py:52 +#: code:addons/delivery/wizard/choose_delivery_package.py:59 #, python-format msgid "Package too heavy!" msgstr "" @@ -582,12 +651,6 @@ msgid "Physical Package" msgstr "" #. module: delivery -#: code:addons/delivery/models/sale_order.py:82 -#, python-format -msgid "Please use \"Check price\" in order to compute a shipping price for this quotation." -msgstr "" - -#. module: delivery #: selection:delivery.price.rule,variable:0 #: selection:delivery.price.rule,variable_factor:0 msgid "Price" @@ -610,6 +673,11 @@ msgid "Pricing Rules" msgstr "" #. module: delivery +#: model_terms:ir.ui.view,arch_db:delivery.view_picking_withcarrier_out_form +msgid "Print Return Label" +msgstr "" + +#. module: delivery #: model:ir.model,name:delivery.model_stock_move_line msgid "Product Moves (Stock Move Line)" msgstr "" @@ -625,6 +693,7 @@ msgid "Product Template" msgstr "" #. module: delivery +#: model:ir.model.fields,field_description:delivery.field_choose_delivery_carrier__delivery_type #: model:ir.model.fields,field_description:delivery.field_delivery_carrier__delivery_type #: model:ir.model.fields,field_description:delivery.field_stock_picking__delivery_type #: model_terms:ir.ui.view,arch_db:delivery.view_delivery_carrier_search @@ -639,6 +708,16 @@ msgid "Quantity" msgstr "" #. module: delivery +#: selection:delivery.carrier,invoice_policy:0 +msgid "Real cost" +msgstr "" + +#. module: delivery +#: model_terms:ir.ui.view,arch_db:delivery.view_order_form_with_carrier +msgid "Recompute shipping cost" +msgstr "" + +#. module: delivery #: model:ir.model,name:delivery.model_stock_return_picking msgid "Return Picking" msgstr "" @@ -690,7 +769,7 @@ msgid "Set to True if your credentials are certified for production." msgstr "" #. module: delivery -#: code:addons/delivery/models/stock_picking.py:181 +#: code:addons/delivery/models/stock_picking.py:194 #, python-format msgid "Shipment sent to carrier %s for shipping with tracking number %s<br/>Cost: %.2f %s" msgstr "" @@ -706,6 +785,11 @@ msgid "Shipping Information" msgstr "" #. module: delivery +#: model:ir.model.fields,field_description:delivery.field_choose_delivery_carrier__carrier_id +msgid "Shipping Method" +msgstr "" + +#. module: delivery #: model:ir.model.fields,field_description:delivery.field_choose_delivery_package__shipping_weight #: model:ir.model.fields,field_description:delivery.field_stock_quant_package__shipping_weight msgid "Shipping Weight" @@ -741,7 +825,19 @@ msgid "The Poste" msgstr "" #. module: delivery -#: code:addons/delivery/wizard/choose_delivery_package.py:53 +#: code:addons/delivery/models/delivery_carrier.py:134 +#, python-format +msgid "The shipping is free since the order amount exceeds %.2f." +msgstr "" + +#. module: delivery +#: code:addons/delivery/wizard/choose_delivery_carrier.py:48 +#, python-format +msgid "The shipping price will be set once the delivery is done." +msgstr "" + +#. module: delivery +#: code:addons/delivery/wizard/choose_delivery_package.py:60 #, python-format msgid "The weight of your package is higher than the maximum weight authorized for this package type. Please choose another package type." msgstr "" @@ -810,6 +906,12 @@ msgid "Transfer" msgstr "" #. module: delivery +#: code:addons/delivery/models/stock_picking.py:203 +#, python-format +msgid "Unable to update the delivery price because of: " +msgstr "" + +#. module: delivery #: model:product.product,uom_name:delivery.product_product_delivery #: model:product.product,uom_name:delivery.product_product_delivery_normal #: model:product.product,uom_name:delivery.product_product_delivery_poste @@ -864,6 +966,7 @@ msgid "Weight for shipping" msgstr "" #. module: delivery +#: model:ir.model.fields,field_description:delivery.field_choose_delivery_package__weight_uom_name #: model:ir.model.fields,field_description:delivery.field_stock_picking__weight_uom_name #: model:ir.model.fields,field_description:delivery.field_stock_quant_package__weight_uom_name msgid "Weight unit of measure label" @@ -886,25 +989,30 @@ msgid "Width must be positive" msgstr "" #. module: delivery -#: code:addons/delivery/models/stock_picking.py:232 +#: code:addons/delivery/models/stock_picking.py:271 #, python-format msgid "You are shipping different packaging types in the same shipment.\n" "Packaging Types: %s" msgstr "" #. module: delivery -#: code:addons/delivery/models/sale_order.py:78 +#: code:addons/delivery/models/sale_order.py:55 #, python-format msgid "You can add delivery price only on unconfirmed quotations." msgstr "" #. module: delivery +#: model:ir.model.fields,help:delivery.field_choose_delivery_carrier__partner_id +msgid "You can find a customer by its Name, TIN, Email or Internal Reference." +msgstr "" + +#. module: delivery #: model_terms:ir.ui.view,arch_db:delivery.delivery_tracking_url_warning_form msgid "You have multiple tracker links, they are available in the chatter." msgstr "" #. module: delivery -#: code:addons/delivery/models/stock_picking.py:195 +#: code:addons/delivery/models/stock_picking.py:234 #, python-format msgid "Your delivery method has no redirect on courier provider's website to track this order." msgstr "" diff --git a/addons/delivery/models/delivery_carrier.py b/addons/delivery/models/delivery_carrier.py index 34c54ece04b..606fc2dceb1 100644 --- a/addons/delivery/models/delivery_carrier.py +++ b/addons/delivery/models/delivery_carrier.py @@ -146,9 +146,11 @@ class DeliveryCarrier(models.Model): res = getattr(self, '%s_rate_shipment' % self.delivery_type)(order) # apply margin on computed price res['price'] = float(res['price']) * (1.0 + (self.margin / 100.0)) + # save the real price in case a free_over rule overide it to 0 + res['carrier_price'] = res['price'] # free when order is large enough if res['success'] and self.free_over and order._compute_amount_total_without_delivery() >= self.amount: - res['warning_message'] = _('Info:\nThe shipping is free because the order amount exceeds %.2f.\n(The actual shipping cost is: %.2f)') % (self.amount, res['price']) + res['warning_message'] = _('The shipping is free since the order amount exceeds %.2f.') % (self.amount) res['price'] = 0.0 return res diff --git a/addons/delivery/models/sale_order.py b/addons/delivery/models/sale_order.py index c772f967bdd..8eb988d8447 100644 --- a/addons/delivery/models/sale_order.py +++ b/addons/delivery/models/sale_order.py @@ -80,11 +80,13 @@ class SaleOrder(models.Model): self.delivery_message = res.get('warning_message', False) else: raise UserError(res['error_message']) + delivery_line.name = self.carrier_id.with_context(lang=self.partner_id.lang).name if self.carrier_id.invoice_policy == 'real': - delivery_line.name = self.carrier_id.with_context(lang=self.partner_id.lang).name delivery_line.name += _(' (Estimated Cost: %s )') % self._format_currency_amount(res['price']) else: delivery_line.price_unit = res['price'] + if self.carrier_id.free_over and self._compute_amount_total_without_delivery() >= res['price']: + delivery_line.name += '\nFree Shipping' self.recompute_delivery_price = False def _create_delivery_line(self, carrier, price_unit, price_unit_in_description=False): @@ -114,7 +116,8 @@ class SaleOrder(models.Model): values['name'] += _(' (Estimated Cost: %s )') % self._format_currency_amount(price_unit) else: values['price_unit'] = price_unit - + if carrier.free_over and self._compute_amount_total_without_delivery() >= price_unit: + values['name'] += '\n' + 'Free Shipping' if self.order_line: values['sequence'] = self.order_line[-1].sequence + 1 sol = SaleOrderLine.sudo().create(values) diff --git a/addons/delivery/views/delivery_view.xml b/addons/delivery/views/delivery_view.xml index afbad0e54ae..7ced55862b7 100644 --- a/addons/delivery/views/delivery_view.xml +++ b/addons/delivery/views/delivery_view.xml @@ -298,13 +298,6 @@ <field name="inherit_id" ref="sale.view_order_form"/> <field name="arch" type="xml"> <data> - <xpath expr="//field[@name='payment_term_id']" position="after"> - <div name='carrier_selection'> - <div class="alert alert-info" role="status" attrs="{'invisible': [('delivery_message','=',False)]}"> - <field name='delivery_message' force_save="1"/> - </div> - </div> - </xpath> <xpath expr="//field[@name='partner_id']" position='after'> <field name="delivery_set" invisible="1"/> <field name="recompute_delivery_price" invisible="1"/> diff --git a/addons/delivery/wizard/choose_delivery_carrier.py b/addons/delivery/wizard/choose_delivery_carrier.py index e2c6372a29d..454190a101e 100644 --- a/addons/delivery/wizard/choose_delivery_carrier.py +++ b/addons/delivery/wizard/choose_delivery_carrier.py @@ -18,23 +18,27 @@ class ChooseDeliveryCarrier(models.TransientModel): required=True, ) delivery_type = fields.Selection(related='carrier_id.delivery_type') - delivery_price = fields.Float(string='Cost', readonly=True) + delivery_price = fields.Float() + display_price = fields.Float(string='Cost', readonly=True) currency_id = fields.Many2one('res.currency', related='order_id.currency_id') available_carrier_ids = fields.Many2many("delivery.carrier", compute='_compute_available_carrier', string="Available Carriers") invoicing_message = fields.Text(compute='_compute_invoicing_message') + delivery_message = fields.Text(readonly=True) @api.onchange('carrier_id') def _onchange_carrier_id(self): + self.delivery_message = False if self.delivery_type in ('fixed', 'base_on_rule'): vals = self.carrier_id.rate_shipment(self.order_id) if vals.get('success'): - if vals['warning_message']: - self.order_id.delivery_message = vals['warning_message'] - else: - self.delivery_price = vals['price'] + if vals.get('warning_message'): + self.delivery_message = vals['warning_message'] + self.delivery_price = vals['price'] + self.display_price = vals['carrier_price'] else: return {'error': vals['error_message']} else: + self.display_price = 0 self.delivery_price = 0 @api.depends('carrier_id') @@ -55,8 +59,9 @@ class ChooseDeliveryCarrier(models.TransientModel): vals = self.carrier_id.rate_shipment(self.order_id) if vals.get('success'): if vals['warning_message']: - self.order_id.delivery_message = vals['warning_message'] + self.delivery_message = vals['warning_message'] self.delivery_price = vals['price'] + self.display_price = vals['carrier_price'] else: raise UserError(vals['error_message']) return { @@ -70,4 +75,5 @@ class ChooseDeliveryCarrier(models.TransientModel): def button_confirm(self): self.order_id.carrier_id = self.carrier_id + self.order_id.delivery_message = self.delivery_message self.order_id.set_delivery_line(self.carrier_id, self.delivery_price) diff --git a/addons/delivery/wizard/choose_delivery_carrier_views.xml b/addons/delivery/wizard/choose_delivery_carrier_views.xml index 3b25fc50d28..e34849eccbe 100644 --- a/addons/delivery/wizard/choose_delivery_carrier_views.xml +++ b/addons/delivery/wizard/choose_delivery_carrier_views.xml @@ -11,7 +11,8 @@ <field name="delivery_type" invisible="1"/> <field name="currency_id" invisible="1"/> <field name="order_id" invisible="1"/> - <field name='delivery_price' string="Cost" widget="monetary" options="{'currency_field': 'currency_id'}" attrs="{'invisible': [('carrier_id','=', False)]}" force_save="1"/> + <field name='delivery_price' invisible="1"/> + <field name='display_price' string="Cost" widget="monetary" options="{'currency_field': 'currency_id'}" attrs="{'invisible': [('carrier_id','=', False)]}"/> </group> <button name="update_price" type="object" attrs="{'invisible': [('delivery_type','in', ('fixed', 'base_on_rule'))]}"> <i class="fa fa-arrow-right"/> @@ -20,6 +21,9 @@ <div role="alert" class="alert alert-warning" attrs="{'invisible': [('invoicing_message', '=', '')]}"> <field name="invoicing_message" nolabel="1"/> </div> + <div role="alert" class="alert alert-info" attrs="{'invisible': [('delivery_message', '=', False)]}"> + <field name="delivery_message" nolabel="1"/> + </div> <footer> <button name="button_confirm" type="object" string="Add" class="btn-primary"/> <button string="Discard" special="cancel" class="btn-secondary"/> diff --git a/addons/digest/i18n/digest.pot b/addons/digest/i18n/digest.pot index d2eb515fa17..2ddf59baa7a 100644 --- a/addons/digest/i18n/digest.pot +++ b/addons/digest/i18n/digest.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-24 10:58+0000\n" -"PO-Revision-Date: 2018-12-24 10:58+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -21,7 +21,8 @@ msgid "\n" "<table style=\"width: 100%; border-spacing: 0; font-family: Helvetica,Arial,Verdana,sans-serif;\">\n" " <tr>\n" " <td align=\"center\" valign=\"top\" style=\"border-collapse: collapse; padding: 0\">\n" -" % set company, user = ctx['company'], ctx['user']\n" +" % set user = ctx.get('user', user)\n" +" % set company = user.company_id\n" " % set data = object.compute_kpis(company, user)\n" " % set tips = object.compute_tips(company, user)\n" " % set kpi_actions = object.compute_kpis_actions(company, user)\n" @@ -147,7 +148,7 @@ msgid "\n" " <table style=\"margin-top: 5px; border: 1px solid #e7e7e7; font-size: 15px; width: 100%; max-width: 600px;\">\n" " <tr>\n" " <td style=\"border-collapse: collapse; margin: 0; padding: 10px 20px;\">\n" -" % if ctx['user'].has_group('base.group_system'): \n" +" % if user.has_group('base.group_system'):\n" " <div style=\"margin-top: 20px;\"> \n" " Want to customize the email?\n" " <a href=\"/web#view_type=form&model=digest.digest&id=${object.id}\" target=\"_blank\" style=\"color: #875A7B;\">Choose the metrics you care about</a>\n" diff --git a/addons/event/i18n/event.pot b/addons/event/i18n/event.pot index 934f4d6b665..3078d4637b7 100644 --- a/addons/event/i18n/event.pot +++ b/addons/event/i18n/event.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:59+0000\n" -"PO-Revision-Date: 2019-01-16 07:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -21,7 +21,7 @@ msgid "${object.event_id.name}: ${object.get_date_range_str()}" msgstr "" #. module: event -#: code:addons/event/models/event.py:303 +#: code:addons/event/models/event.py:312 #, python-format msgid "%s (copy)" msgstr "" @@ -296,7 +296,7 @@ msgid "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"padding-t " <td style=\"padding:25px 0px;\">\n" " <strong>Add this event to your calendar</strong>\n" " <a href=\"https://www.google.com/calendar/render?action=TEMPLATE&text=${object.event_id.name}&dates=${date_begin}/${date_end}&location=${location}\" style=\"padding:3px 5px;border:1px solid #875A7B;color:#875A7B;text-decoration:none;border-radius:3px;\" target=\"new\"><img src=\"/web_editor/font_to_img/61525/rgb(135,90,123)/16\" style=\"vertical-align:middle;\" height=\"16\" alt=\"\"/> Google</a>\n" -" <a href=\"https://bay02.calendar.live.com/calendar/calendar.aspx?rru=addevent&summary=${object.event_id.name}&dtstart=${date_begin}&dtend=${date_end}&location=${location}\" style=\"padding:3px 5px;border:1px solid #875A7B;color:#875A7B;text-decoration:none;border-radius:3px;\" target=\"new\"><img src=\"/web_editor/font_to_img/61525/rgb(135,90,123)/16\" style=\"vertical-align:middle;\" height=\"16\" alt=\"\"/> Outlook</a>\n" +" <a href=\"/event/${slug(object.event_id)}/ics\" style=\"padding:3px 5px;border:1px solid #875A7B;color:#875A7B;text-decoration:none;border-radius:3px;\"><img src=\"/web_editor/font_to_img/61525/rgb(135,90,123)/16\" style=\"vertical-align:middle;\" height=\"16\" alt=\"\"/> iCal/Outlook</a>\n" " <a href=\"https://calendar.yahoo.com/?v=60&view=d&type=20&title=${object.event_id.name}&in_loc=${location}&st=${format_tz(object.event_id.date_begin, tz='UTC', format='%Y%m%dT%H%M%S')}&et=${format_tz(object.event_id.date_end, tz='UTC', format='%Y%m%dT%H%M%S')}\" style=\"padding:3px 5px;border:1px solid #875A7B;color:#875A7B;text-decoration:none;border-radius:3px;\" target=\"new\">\n" " <img src=\"/web_editor/font_to_img/61525/rgb(135,90,123)/16\" style=\"vertical-align:middle;\" height=\"16\" alt=\"\"/> Yahoo</a>\n" " </td>\n" @@ -485,6 +485,7 @@ msgid "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"padding-t " <td style=\"padding:25px 0px;\">\n" " <strong>Add this event to your calendar</strong>\n" " <a href=\"https://www.google.com/calendar/render?action=TEMPLATE&text=${object.event_id.name}&dates=${date_begin}/${date_end}&location=${location}\" style=\"padding:3px 5px;border:1px solid #875A7B;color:#875A7B;text-decoration:none;border-radius:3px;\" target=\"new\"><img src=\"/web_editor/font_to_img/61525/rgb(135,90,123)/16\" style=\"vertical-align:middle;\" height=\"16\" alt=\"\"/> Google</a>\n" +" <a href=\"/event/${slug(object.event_id)}/ics\" style=\"padding:3px 5px;border:1px solid #875A7B;color:#875A7B;text-decoration:none;border-radius:3px;\"><img src=\"/web_editor/font_to_img/61525/rgb(135,90,123)/16\" style=\"vertical-align:middle;\" height=\"16\" alt=\"\"/> iCal/Outlook</a>\n" " <a href=\"https://calendar.yahoo.com/?v=60&view=d&type=20&title=${object.event_id.name}&in_loc=${location}&st=${format_tz(object.event_id.date_begin, tz='UTC', format='%Y%m%dT%H%M%S')}&et=${format_tz(object.event_id.date_end, tz='UTC', format='%Y%m%dT%H%M%S')}\" style=\"padding:3px 5px;border:1px solid #875A7B;color:#875A7B;text-decoration:none;border-radius:3px;\" target=\"new\">\n" " <img src=\"/web_editor/font_to_img/61525/rgb(135,90,123)/16\" style=\"vertical-align:middle;\" height=\"16\" alt=\"\"/> Yahoo</a>\n" " </td>\n" @@ -770,7 +771,7 @@ msgid "Company" msgstr "" #. module: event -#: code:addons/event/models/event.py:504 +#: code:addons/event/models/event.py:536 #, python-format msgid "Compose Email" msgstr "" @@ -877,13 +878,13 @@ msgid "Created on" msgstr "" #. module: event -#: code:addons/event/models/event.py:455 +#: code:addons/event/models/event.py:487 #, python-format msgid "Customer" msgstr "" #. module: event -#: code:addons/event/models/event.py:457 +#: code:addons/event/models/event.py:489 #, python-format msgid "Customer Email" msgstr "" @@ -1491,7 +1492,7 @@ msgid "Maximum Registrations" msgstr "" #. module: event -#: code:addons/event/models/event.py:258 +#: code:addons/event/models/event.py:267 #, python-format msgid "Maximum attendees number should be greater than minimum attendees number." msgstr "" @@ -1553,13 +1554,13 @@ msgid "Next Activity Type" msgstr "" #. module: event -#: code:addons/event/models/event.py:263 +#: code:addons/event/models/event.py:272 #, python-format msgid "No more available seats." msgstr "" #. module: event -#: code:addons/event/models/event.py:369 +#: code:addons/event/models/event.py:401 #, python-format msgid "No more seats available for this event." msgstr "" @@ -1925,13 +1926,13 @@ msgid "Status based on activities\n" msgstr "" #. module: event -#: code:addons/event/models/event.py:269 +#: code:addons/event/models/event.py:278 #, python-format msgid "The closing date cannot be earlier than the beginning date." msgstr "" #. module: event -#: code:addons/event/models/event.py:313 +#: code:addons/event/models/event.py:322 #, python-format msgid "There are already attendees who attended this event. Please reset it to draft if you want to cancel this event." msgstr "" @@ -2106,6 +2107,18 @@ msgid "Warehouse management, Manufacturing (MRP) & Sales, Import/Export." msgstr "" #. module: event +#: model:ir.model.fields,field_description:event.field_event_event__website_message_ids +#: model:ir.model.fields,field_description:event.field_event_registration__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: event +#: model:ir.model.fields,help:event.field_event_event__website_message_ids +#: model:ir.model.fields,help:event.field_event_registration__website_message_ids +msgid "Website communication history" +msgstr "" + +#. module: event #: selection:event.mail,interval_unit:0 #: selection:event.type.mail,interval_unit:0 msgid "Week(s)" @@ -2127,13 +2140,13 @@ msgid "Workflows" msgstr "" #. module: event -#: code:addons/event/models/event.py:426 +#: code:addons/event/models/event.py:458 #, python-format msgid "You must wait the event confirmation before doing this action." msgstr "" #. module: event -#: code:addons/event/models/event.py:428 +#: code:addons/event/models/event.py:460 #, python-format msgid "You must wait the event starting day before doing this action." msgstr "" @@ -2164,37 +2177,37 @@ msgid "events@odoo.com" msgstr "" #. module: event -#: code:addons/event/models/event.py:526 +#: code:addons/event/models/event.py:558 #, python-format msgid "in %d days" msgstr "" #. module: event -#: code:addons/event/models/event.py:530 +#: code:addons/event/models/event.py:562 #, python-format msgid "next month" msgstr "" #. module: event -#: code:addons/event/models/event.py:528 +#: code:addons/event/models/event.py:560 #, python-format msgid "next week" msgstr "" #. module: event -#: code:addons/event/models/event.py:532 +#: code:addons/event/models/event.py:564 #, python-format msgid "on " msgstr "" #. module: event -#: code:addons/event/models/event.py:522 +#: code:addons/event/models/event.py:554 #, python-format msgid "today" msgstr "" #. module: event -#: code:addons/event/models/event.py:524 +#: code:addons/event/models/event.py:556 #, python-format msgid "tomorrow" msgstr "" diff --git a/addons/event_sale/i18n/event_sale.pot b/addons/event_sale/i18n/event_sale.pot index f6140a0ee90..056b0f00acb 100644 --- a/addons/event_sale/i18n/event_sale.pot +++ b/addons/event_sale/i18n/event_sale.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-08 06:49+0000\n" -"PO-Revision-Date: 2018-10-08 06:49+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -161,6 +161,7 @@ msgid "ID" msgstr "" #. module: event_sale +#: model:ir.model.fields,help:event_sale.field_product_product__event_ok #: model:ir.model.fields,help:event_sale.field_product_template__event_ok #: model:ir.model.fields,help:event_sale.field_sale_order_line__event_ok msgid "If checked this product automatically creates an event registration at the sales order confirmation." @@ -177,6 +178,7 @@ msgid "Is Expired" msgstr "" #. module: event_sale +#: model:ir.model.fields,field_description:event_sale.field_product_product__event_ok #: model:ir.model.fields,field_description:event_sale.field_product_template__event_ok #: model:ir.model.fields,field_description:event_sale.field_sale_order_line__event_ok msgid "Is an Event Ticket" @@ -323,16 +325,12 @@ msgid "Reserved Seats" msgstr "" #. module: event_sale -#: model:ir.model,name:event_sale.model_sale_order -msgid "Sale Order" -msgstr "" - -#. module: event_sale #: model:ir.model.fields,field_description:event_sale.field_event_event_ticket__deadline msgid "Sales End" msgstr "" #. module: event_sale +#: model:ir.model,name:event_sale.model_sale_order #: model:ir.model.fields,field_description:event_sale.field_registration_editor__sale_order_id msgid "Sales Order" msgstr "" @@ -435,12 +433,6 @@ msgid "VIP" msgstr "" #. module: event_sale -#: model:product.product,weight_uom_name:event_sale.product_product_event -#: model:product.template,weight_uom_name:event_sale.product_product_event_product_template -msgid "kg" -msgstr "" - -#. module: event_sale #: model_terms:ir.ui.view,arch_db:event_sale.view_event_registration_editor_form msgid "please give details about the registrations" msgstr "" diff --git a/addons/fetchmail/i18n/fetchmail.pot b/addons/fetchmail/i18n/fetchmail.pot index 5747e955021..0b2455aef1a 100644 --- a/addons/fetchmail/i18n/fetchmail.pot +++ b/addons/fetchmail/i18n/fetchmail.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-18 09:49+0000\n" -"PO-Revision-Date: 2018-09-18 09:49+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -108,7 +108,7 @@ msgid "IMAP" msgstr "" #. module: fetchmail -#: selection:fetchmail.server,type:0 +#: selection:fetchmail.server,server_type:0 msgid "IMAP Server" msgstr "" @@ -128,6 +128,7 @@ msgid "Incoming Email Servers" msgstr "" #. module: fetchmail +#: model:ir.model,name:fetchmail.model_fetchmail_server #: model_terms:ir.ui.view,arch_db:fetchmail.view_email_server_form #: model_terms:ir.ui.view,arch_db:fetchmail.view_email_server_search msgid "Incoming Mail Server" @@ -170,7 +171,7 @@ msgid "Last Updated on" msgstr "" #. module: fetchmail -#: selection:fetchmail.server,type:0 +#: selection:fetchmail.server,server_type:0 msgid "Local Server" msgstr "" @@ -218,16 +219,11 @@ msgid "POP" msgstr "" #. module: fetchmail -#: selection:fetchmail.server,type:0 +#: selection:fetchmail.server,server_type:0 msgid "POP Server" msgstr "" #. module: fetchmail -#: model:ir.model,name:fetchmail.model_fetchmail_server -msgid "POP/IMAP Server" -msgstr "" - -#. module: fetchmail #: model_terms:ir.ui.view,arch_db:fetchmail.view_email_server_tree msgid "POP/IMAP Servers" msgstr "" @@ -293,7 +289,7 @@ msgid "Server Priority" msgstr "" #. module: fetchmail -#: model:ir.model.fields,field_description:fetchmail.field_fetchmail_server__type +#: model:ir.model.fields,field_description:fetchmail.field_fetchmail_server__server_type msgid "Server Type" msgstr "" diff --git a/addons/fleet/data/mail_data.xml b/addons/fleet/data/mail_data.xml index 401f115b87b..0fb2cbc3c96 100644 --- a/addons/fleet/data/mail_data.xml +++ b/addons/fleet/data/mail_data.xml @@ -5,7 +5,6 @@ <field name="name">Contract to Renew</field> <field name="icon">fa-car</field> <field name="res_model_id" ref="fleet.model_fleet_vehicle_log_contract"/> - <field name="is_master_data">True</field> </record> <record id="mt_fleet_driver_updated" model="mail.message.subtype"> diff --git a/addons/fleet/i18n/fleet.pot b/addons/fleet/i18n/fleet.pot index b16ffbc9417..f8b5b50087d 100644 --- a/addons/fleet/i18n/fleet.pot +++ b/addons/fleet/i18n/fleet.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-08 06:49+0000\n" -"PO-Revision-Date: 2018-11-23 16:01+0000\n" +"POT-Creation-Date: 2019-03-20 13:51+0000\n" +"PO-Revision-Date: 2019-03-20 13:51+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,6 +16,21 @@ msgstr "" "Plural-Forms: \n" #. module: fleet +#: model_terms:ir.ui.view,arch_db:fleet.res_config_settings_view_form +msgid "<span class=\"o_form_label\">End Date Contract Alert</span>" +msgstr "" + +#. module: fleet +#: model_terms:ir.ui.view,arch_db:fleet.res_config_settings_view_form +msgid "<span> days before the end date</span>" +msgstr "" + +#. module: fleet +#: model_terms:ir.ui.view,arch_db:fleet.res_config_settings_view_form +msgid "<span>Send an alert </span>" +msgstr "" + +#. module: fleet #: model_terms:ir.ui.view,arch_db:fleet.fleet_vehicle_view_form msgid "<span>g/km</span>" msgstr "" @@ -314,6 +329,11 @@ msgid "Company" msgstr "" #. module: fleet +#: model:ir.model,name:fleet.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: fleet #: model:ir.ui.menu,name:fleet.fleet_configuration msgid "Configuration" msgstr "" @@ -610,6 +630,11 @@ msgid "Date when the vehicle has been immatriculated" msgstr "" #. module: fleet +#: model:ir.model.fields,field_description:fleet.field_res_config_settings__delay_alert_contract +msgid "Delay alert contract outdated" +msgstr "" + +#. module: fleet #: model:fleet.service.type,name:fleet.type_service_service_2 msgid "Depreciation and Interests" msgstr "" @@ -768,10 +793,16 @@ msgstr "" #. module: fleet #: model:ir.module.category,name:fleet.module_fleet_category #: model:ir.ui.menu,name:fleet.menu_root +#: model_terms:ir.ui.view,arch_db:fleet.res_config_settings_view_form msgid "Fleet" msgstr "" #. module: fleet +#: model_terms:ir.ui.view,arch_db:fleet.res_config_settings_view_form +msgid "Fleet Management" +msgstr "" + +#. module: fleet #: model:ir.model,name:fleet.model_fleet_service_type msgid "Fleet Service Type" msgstr "" @@ -1084,6 +1115,11 @@ msgid "Km" msgstr "" #. module: fleet +#: selection:fleet.vehicle,fuel_type:0 +msgid "LPG" +msgstr "" + +#. module: fleet #: model:ir.model.fields,field_description:fleet.field_fleet_service_type____last_update #: model:ir.model.fields,field_description:fleet.field_fleet_vehicle____last_update #: model:ir.model.fields,field_description:fleet.field_fleet_vehicle_assignation_log____last_update @@ -1370,7 +1406,7 @@ msgid "No" msgstr "" #. module: fleet -#: code:addons/fleet/models/fleet_vehicle.py:85 +#: code:addons/fleet/models/fleet_vehicle.py:86 #, python-format msgid "No Plate" msgstr "" @@ -1815,6 +1851,12 @@ msgid "Set Contract In Progress" msgstr "" #. module: fleet +#: model:ir.actions.act_window,name:fleet.fleet_config_settings_action +#: model:ir.ui.menu,name:fleet.fleet_config_settings_menu +msgid "Settings" +msgstr "" + +#. module: fleet #: model_terms:ir.ui.view,arch_db:fleet.fleet_vehicle_log_contract_view_search #: model_terms:ir.ui.view,arch_db:fleet.fleet_vehicle_view_search msgid "Show all records which has next action date is before today" diff --git a/addons/gamification/i18n/gamification.pot b/addons/gamification/i18n/gamification.pot index bc8647fc350..31ac83eb18e 100644 --- a/addons/gamification/i18n/gamification.pot +++ b/addons/gamification/i18n/gamification.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 08:00+0000\n" -"PO-Revision-Date: 2019-01-16 08:00+0000\n" +"POT-Creation-Date: 2019-03-20 13:51+0000\n" +"PO-Revision-Date: 2019-03-20 13:51+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -156,6 +156,45 @@ msgid "<br/>Special rewards were sent to the top competing users. The ranking fo msgstr "" #. module: gamification +#: model:mail.template,body_html:gamification.mail_template_data_new_rank_reached +msgid "<div style=\"background:#F0F0F0;color:#515166;padding:10px 0px;font-family:Arial,Helvetica,sans-serif;font-size:14px;\">\n" +" <table style=\"width:600px;margin:0px auto;background:white;border:1px solid #e1e1e1;\">\n" +" <tbody>\n" +" <tr>\n" +" <td style=\"padding:15px 20px 10px 20px;\">\n" +" <p>\n" +" Congratulations\n" +" <span>${object.partner_id.name or ''}</span>!\n" +" </p>\n" +" <p>\n" +" You just reached a new rank : <strong>${object.rank_id.name}</strong>\n" +" </p>\n" +" <p>Continue your work to become a <strong>${object.next_rank_id.name}</strong> !</p>\n" +" <div style=\"margin: 16px 0px 16px 0px;\">\n" +" % set gamification_redirection_data = object.get_gamification_redirection_data()\n" +" % for data in gamification_redirection_data\n" +" % set url = data['url']\n" +" % set label = data['label']\n" +" <a href=\"${url}\" style=\"background-color: #875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: #fff; border-radius: 5px; font-size:13px;\">${label}</a>\n" +" % endfor\n" +" </div>\n" +" </td>\n" +" <td style=\"padding:15px 20px 10px 20px;\">\n" +" <p style=\"text-align: center;\">\n" +" <img src=\"/web/image/gamification.karma.rank/${object.rank_id.id}/image_medium\"/>\n" +" </p>\n" +" </td>\n" +" </tr>\n" +" </tbody>\n" +" </table>\n" +" </div>\n" +" <div>\n" +" Thank you,<br/>\n" +" </div>\n" +" " +msgstr "" + +#. module: gamification #: model:mail.template,body_html:gamification.email_template_goal_reminder msgid "<div>\n" " <strong>Reminder ${object.name}</strong><br/>\n" @@ -417,6 +456,12 @@ msgid "A goal is defined by a user and a goal definition.\n" msgstr "" #. module: gamification +#: model_terms:ir.actions.act_window,help:gamification.gamification_karma_ranks_action +msgid "A rank correspond to a fixed karma level. The more you have karma, the more your rank is high.\n" +" This is used to quickly know which user is new or old or highly or not active." +msgstr "" + +#. module: gamification #: selection:gamification.badge,rule_auth:0 msgid "A selected list of users" msgstr "" @@ -496,6 +541,11 @@ msgid "Automatic: sum on a field" msgstr "" #. module: gamification +#: model:gamification.karma.rank,name:gamification.rank_bachelor +msgid "Bachelor" +msgstr "" + +#. module: gamification #: model:ir.model.fields,field_description:gamification.field_gamification_badge__name #: model:ir.model.fields,field_description:gamification.field_gamification_badge_user__badge_id #: model:ir.model.fields,field_description:gamification.field_gamification_badge_user_wizard__badge_id @@ -509,9 +559,8 @@ msgid "Badge Description" msgstr "" #. module: gamification -#: model:mail.message.subtype,description:gamification.mt_badge_granted -#: model:mail.message.subtype,name:gamification.mt_badge_granted -msgid "Badge Granted" +#: model:ir.model.fields,field_description:gamification.field_gamification_badge_user__level +msgid "Badge Level" msgstr "" #. module: gamification @@ -527,6 +576,7 @@ msgstr "" #. module: gamification #: model:ir.actions.act_window,name:gamification.badge_list_action +#: model:ir.model.fields,field_description:gamification.field_res_users__badge_ids #: model:ir.ui.menu,name:gamification.gamification_badge_menu msgid "Badges" msgstr "" @@ -547,6 +597,16 @@ msgid "Brilliant" msgstr "" #. module: gamification +#: selection:gamification.badge,level:0 +msgid "Bronze" +msgstr "" + +#. module: gamification +#: model:ir.model.fields,field_description:gamification.field_res_users__bronze_badge +msgid "Bronze badges count" +msgstr "" + +#. module: gamification #: model_terms:ir.ui.view,arch_db:gamification.badge_kanban_view msgid "Can not grant" msgstr "" @@ -675,6 +735,11 @@ msgid "Create a new goal definition" msgstr "" #. module: gamification +#: model_terms:ir.actions.act_window,help:gamification.gamification_karma_ranks_action +msgid "Create a new rank" +msgstr "" + +#. module: gamification #: model_terms:ir.actions.act_window,help:gamification.action_new_simplified_res_users msgid "Create and manage users that will connect to the system. Users can be deactivated should there be a period of time during which they will/should not connect to the system. You can assign them groups in order to give them specific access to the applications they need to use in the system." msgstr "" @@ -688,6 +753,7 @@ msgstr "" #: model:ir.model.fields,field_description:gamification.field_gamification_goal__create_uid #: model:ir.model.fields,field_description:gamification.field_gamification_goal_definition__create_uid #: model:ir.model.fields,field_description:gamification.field_gamification_goal_wizard__create_uid +#: model:ir.model.fields,field_description:gamification.field_gamification_karma_rank__create_uid msgid "Created by" msgstr "" @@ -700,6 +766,7 @@ msgstr "" #: model:ir.model.fields,field_description:gamification.field_gamification_goal__create_date #: model:ir.model.fields,field_description:gamification.field_gamification_goal_definition__create_date #: model:ir.model.fields,field_description:gamification.field_gamification_goal_wizard__create_date +#: model:ir.model.fields,field_description:gamification.field_gamification_karma_rank__create_date msgid "Created on" msgstr "" @@ -763,6 +830,7 @@ msgstr "" #. module: gamification #: model:ir.model.fields,field_description:gamification.field_gamification_badge__description #: model:ir.model.fields,field_description:gamification.field_gamification_challenge__description +#: model:ir.model.fields,field_description:gamification.field_gamification_karma_rank__description msgid "Description" msgstr "" @@ -780,6 +848,7 @@ msgstr "" #: model:ir.model.fields,field_description:gamification.field_gamification_goal__display_name #: model:ir.model.fields,field_description:gamification.field_gamification_goal_definition__display_name #: model:ir.model.fields,field_description:gamification.field_gamification_goal_wizard__display_name +#: model:ir.model.fields,field_description:gamification.field_gamification_karma_rank__display_name msgid "Display Name" msgstr "" @@ -795,6 +864,11 @@ msgid "Distinctive field for batch user" msgstr "" #. module: gamification +#: model:gamification.karma.rank,name:gamification.rank_doctor +msgid "Doctor" +msgstr "" + +#. module: gamification #: model:ir.model.fields,help:gamification.field_gamification_goal_definition__domain msgid "Domain for filtering records. General rule, not user depending, e.g. [('state', '=', 'done')]. The expression can contain reference to 'user' which is a browse record of the current user if not in batch mode." msgstr "" @@ -898,6 +972,11 @@ msgid "Formating Options" msgstr "" #. module: gamification +#: model:ir.model.fields,field_description:gamification.field_gamification_badge__level +msgid "Forum Badge Level" +msgstr "" + +#. module: gamification #: model_terms:ir.ui.view,arch_db:gamification.goal_kanban_view msgid "From" msgstr "" @@ -1024,6 +1103,16 @@ msgid "Goals" msgstr "" #. module: gamification +#: selection:gamification.badge,level:0 +msgid "Gold" +msgstr "" + +#. module: gamification +#: model:ir.model.fields,field_description:gamification.field_res_users__gold_badge +msgid "Gold badges count" +msgstr "" + +#. module: gamification #: model:gamification.badge,name:gamification.badge_good_job msgid "Good Job" msgstr "" @@ -1101,6 +1190,7 @@ msgstr "" #: model:ir.model.fields,field_description:gamification.field_gamification_goal__id #: model:ir.model.fields,field_description:gamification.field_gamification_goal_definition__id #: model:ir.model.fields,field_description:gamification.field_gamification_goal_wizard__id +#: model:ir.model.fields,field_description:gamification.field_gamification_karma_rank__id msgid "ID" msgstr "" @@ -1185,6 +1275,16 @@ msgid "Is Follower" msgstr "" #. module: gamification +#: model:ir.model.fields,field_description:gamification.field_res_users__karma +msgid "Karma" +msgstr "" + +#. module: gamification +#: model:ir.model.fields,field_description:gamification.field_res_users__karma_position +msgid "Karma position" +msgstr "" + +#. module: gamification #: model:ir.model.fields,field_description:gamification.field_gamification_badge____last_update #: model:ir.model.fields,field_description:gamification.field_gamification_badge_user____last_update #: model:ir.model.fields,field_description:gamification.field_gamification_badge_user_wizard____last_update @@ -1193,6 +1293,7 @@ msgstr "" #: model:ir.model.fields,field_description:gamification.field_gamification_goal____last_update #: model:ir.model.fields,field_description:gamification.field_gamification_goal_definition____last_update #: model:ir.model.fields,field_description:gamification.field_gamification_goal_wizard____last_update +#: model:ir.model.fields,field_description:gamification.field_gamification_karma_rank____last_update msgid "Last Modified on" msgstr "" @@ -1215,6 +1316,7 @@ msgstr "" #: model:ir.model.fields,field_description:gamification.field_gamification_goal__write_uid #: model:ir.model.fields,field_description:gamification.field_gamification_goal_definition__write_uid #: model:ir.model.fields,field_description:gamification.field_gamification_goal_wizard__write_uid +#: model:ir.model.fields,field_description:gamification.field_gamification_karma_rank__write_uid msgid "Last Updated by" msgstr "" @@ -1227,6 +1329,7 @@ msgstr "" #: model:ir.model.fields,field_description:gamification.field_gamification_goal__write_date #: model:ir.model.fields,field_description:gamification.field_gamification_goal_definition__write_date #: model:ir.model.fields,field_description:gamification.field_gamification_goal_wizard__write_date +#: model:ir.model.fields,field_description:gamification.field_gamification_karma_rank__write_date msgid "Last Updated on" msgstr "" @@ -1272,6 +1375,31 @@ msgid "Main Attachment" msgstr "" #. module: gamification +#: model:gamification.karma.rank,name:gamification.rank_master +msgid "Master" +msgstr "" + +#. module: gamification +#: model:ir.model.fields,field_description:gamification.field_gamification_badge__image_medium +msgid "Medium-sized badge image" +msgstr "" + +#. module: gamification +#: model:ir.model.fields,help:gamification.field_gamification_karma_rank__image_medium +msgid "Medium-sized icon of the rank. It is automatically resized as a 128x128px image, with aspect ratio preserved. Use this field in form views or some kanban views." +msgstr "" + +#. module: gamification +#: model:ir.model.fields,help:gamification.field_gamification_badge__image_medium +msgid "Medium-sized image of the badge. It is automatically resized as a 128x128px image, with aspect ratio preserved. Use this field in form views or some kanban views." +msgstr "" + +#. module: gamification +#: model:ir.model.fields,field_description:gamification.field_gamification_karma_rank__image_medium +msgid "Medium-sized rank icon" +msgstr "" + +#. module: gamification #: model_terms:ir.ui.view,arch_db:gamification.view_challenge_kanban msgid "Member" msgstr "" @@ -1289,6 +1417,11 @@ msgid "Messages" msgstr "" #. module: gamification +#: model:ir.model.fields,help:gamification.field_gamification_karma_rank__karma_min +msgid "Minimum karma needed to reach this rank" +msgstr "" + +#. module: gamification #: model:ir.model.fields,field_description:gamification.field_gamification_goal_definition__model_id #: model_terms:ir.ui.view,arch_db:gamification.goal_definition_search_view msgid "Model" @@ -1321,6 +1454,16 @@ msgid "Monthly total" msgstr "" #. module: gamification +#: model:ir.model.fields,field_description:gamification.field_gamification_karma_rank__description_motivational +msgid "Motivational" +msgstr "" + +#. module: gamification +#: model:ir.model.fields,help:gamification.field_gamification_karma_rank__description_motivational +msgid "Motivational phrase to reach this rank" +msgstr "" + +#. module: gamification #: model_terms:ir.ui.view,arch_db:gamification.goal_search_view msgid "My Goals" msgstr "" @@ -1361,6 +1504,21 @@ msgid "New badge ${object.badge_id.name} granted" msgstr "" #. module: gamification +#: model:mail.template,subject:gamification.mail_template_data_new_rank_reached +msgid "New rank: ${object.rank_id.name}" +msgstr "" + +#. module: gamification +#: model:gamification.karma.rank,name:gamification.rank_newbie +msgid "Newbie" +msgstr "" + +#. module: gamification +#: model:ir.model.fields,field_description:gamification.field_res_users__next_rank_id +msgid "Next Rank" +msgstr "" + +#. module: gamification #: model:ir.model.fields,field_description:gamification.field_gamification_challenge__next_report_date msgid "Next Report Date" msgstr "" @@ -1512,6 +1670,63 @@ msgid "Python code to be executed for each user. 'result' should contains the ne msgstr "" #. module: gamification +#: model:ir.model.fields,field_description:gamification.field_res_users__rank_id +#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_rank_view_form +msgid "Rank" +msgstr "" + +#. module: gamification +#: model:ir.model.fields,field_description:gamification.field_gamification_karma_rank__image +msgid "Rank Icon" +msgstr "" + +#. module: gamification +#: model:ir.model.fields,field_description:gamification.field_gamification_karma_rank__name +msgid "Rank Name" +msgstr "" + +#. module: gamification +#: model:ir.model,name:gamification.model_gamification_karma_rank +msgid "Rank based on karma" +msgstr "" + +#. module: gamification +#: model:ir.actions.act_window,name:gamification.gamification_karma_ranks_action +#: model:ir.ui.menu,name:gamification.gamification_karma_ranks_menu +msgid "Ranks" +msgstr "" + +#. module: gamification +#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_ranks_view_tree +msgid "Ranks List" +msgstr "" + +#. module: gamification +#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_bachelor +msgid "Reach the next rank and gain a very magic wand !" +msgstr "" + +#. module: gamification +#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_master +msgid "Reach the next rank and gain a very nice hat !" +msgstr "" + +#. module: gamification +#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_student +msgid "Reach the next rank and gain a very nice mug !" +msgstr "" + +#. module: gamification +#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_doctor +msgid "Reach the next rank and gain a week-end with a unicorn !" +msgstr "" + +#. module: gamification +#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_newbie +msgid "Reach the next rank to show the rest of the world you exist!" +msgstr "" + +#. module: gamification #: selection:gamification.goal,state:0 msgid "Reached" msgstr "" @@ -1577,6 +1792,11 @@ msgid "Required Badges" msgstr "" #. module: gamification +#: model:ir.model.fields,field_description:gamification.field_gamification_karma_rank__karma_min +msgid "Required Karma" +msgstr "" + +#. module: gamification #: model_terms:ir.ui.view,arch_db:gamification.goal_form_view msgid "Reset Completion" msgstr "" @@ -1653,6 +1873,11 @@ msgid "Search Goals" msgstr "" #. module: gamification +#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_ranks_view_search +msgid "Search Ranks" +msgstr "" + +#. module: gamification #: model_terms:ir.ui.view,arch_db:gamification.badge_form_view msgid "Security rules to define who is allowed to manually grant badges. Not enforced for administrator." msgstr "" @@ -1716,6 +1941,36 @@ msgid "Setup your Company" msgstr "" #. module: gamification +#: selection:gamification.badge,level:0 +msgid "Silver" +msgstr "" + +#. module: gamification +#: model:ir.model.fields,field_description:gamification.field_res_users__silver_badge +msgid "Silver badges count" +msgstr "" + +#. module: gamification +#: model:ir.model.fields,field_description:gamification.field_gamification_badge__image_small +msgid "Small-sized badge image" +msgstr "" + +#. module: gamification +#: model:ir.model.fields,help:gamification.field_gamification_karma_rank__image_small +msgid "Small-sized icon of the rank. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required." +msgstr "" + +#. module: gamification +#: model:ir.model.fields,help:gamification.field_gamification_badge__image_small +msgid "Small-sized image of the badge. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required." +msgstr "" + +#. module: gamification +#: model:ir.model.fields,field_description:gamification.field_gamification_karma_rank__image_small +msgid "Small-sized rank icon" +msgstr "" + +#. module: gamification #: model_terms:ir.ui.view,arch_db:gamification.challenge_form_view msgid "Start Challenge" msgstr "" @@ -1745,6 +2000,11 @@ msgid "Statistics" msgstr "" #. module: gamification +#: model:gamification.karma.rank,name:gamification.rank_student +msgid "Student" +msgstr "" + +#. module: gamification #: model_terms:ir.ui.view,arch_db:gamification.challenge_form_view msgid "Subscriptions" msgstr "" @@ -1947,14 +2207,14 @@ msgid "These goals will not be recomputed." msgstr "" #. module: gamification -#: code:addons/gamification/models/badge.py:208 +#: code:addons/gamification/models/badge.py:236 #, python-format msgid "This badge can not be sent by users." msgstr "" #. module: gamification #: model:ir.model.fields,help:gamification.field_gamification_badge__image -msgid "This field holds the image used for the badge, limited to 256x256" +msgid "This field holds the image used for the badge." msgstr "" #. module: gamification @@ -2024,16 +2284,33 @@ msgid "User domain" msgstr "" #. module: gamification +#: model:ir.model,name:gamification.model_res_users #: model:ir.model.fields,field_description:gamification.field_gamification_challenge__user_ids +#: model:ir.model.fields,field_description:gamification.field_gamification_karma_rank__user_ids msgid "Users" msgstr "" #. module: gamification +#: model:ir.model.fields,help:gamification.field_gamification_karma_rank__user_ids +msgid "Users having this rank" +msgstr "" + +#. module: gamification +#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_rank_view_form +msgid "Users to that rank" +msgstr "" + +#. module: gamification #: selection:gamification.challenge,category:0 msgid "Website / Forum" msgstr "" #. module: gamification +#: selection:gamification.challenge,category:0 +msgid "Website / Slides" +msgstr "" + +#. module: gamification #: selection:gamification.challenge,period:0 #: selection:gamification.challenge,report_message_frequency:0 msgid "Weekly" @@ -2066,7 +2343,7 @@ msgid "Yearly" msgstr "" #. module: gamification -#: code:addons/gamification/models/badge.py:210 +#: code:addons/gamification/models/badge.py:238 #, python-format msgid "You are not in the user allowed list." msgstr "" @@ -2094,13 +2371,13 @@ msgid "You did great at your job." msgstr "" #. module: gamification -#: code:addons/gamification/models/badge.py:212 +#: code:addons/gamification/models/badge.py:240 #, python-format msgid "You do not have the required badges." msgstr "" #. module: gamification -#: code:addons/gamification/models/badge.py:214 +#: code:addons/gamification/models/badge.py:242 #, python-format msgid "You have already sent this badge too many time this month." msgstr "" @@ -2111,6 +2388,31 @@ msgid "You have found the hidden badge" msgstr "" #. module: gamification +#: model_terms:gamification.karma.rank,description:gamification.rank_doctor +msgid "You have reached the last rank. Congratulations!" +msgstr "" + +#. module: gamification +#: model_terms:gamification.karma.rank,description:gamification.rank_newbie +msgid "You just began the adventure! Welcome!" +msgstr "" + +#. module: gamification +#: model_terms:gamification.karma.rank,description:gamification.rank_master +msgid "You know what you are talking about. People learn from you." +msgstr "" + +#. module: gamification +#: model_terms:gamification.karma.rank,description:gamification.rank_bachelor +msgid "You love learning things. Curiosity is a good way to progress." +msgstr "" + +#. module: gamification +#: model_terms:gamification.karma.rank,description:gamification.rank_student +msgid "You're a young padawan now. May the force be with you!" +msgstr "" + +#. module: gamification #: model_terms:ir.ui.view,arch_db:gamification.badge_form_view msgid "badges this month" msgstr "" @@ -2122,11 +2424,26 @@ msgid "days" msgstr "" #. module: gamification +#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_rank_view_form +msgid "e.g. A Master Chief knows quite everything on the forum! You cannot beat him!" +msgstr "" + +#. module: gamification +#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_rank_view_form +msgid "e.g. Master Chief" +msgstr "" + +#. module: gamification #: model_terms:ir.ui.view,arch_db:gamification.challenge_form_view msgid "e.g. Monthly Sales Objectives" msgstr "" #. module: gamification +#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_rank_view_form +msgid "e.g. Reach this rank to gain a free mug !" +msgstr "" + +#. module: gamification #: model_terms:ir.ui.view,arch_db:gamification.goal_definition_form_view msgid "e.g. days" msgstr "" diff --git a/addons/gamification/models/res_users.py b/addons/gamification/models/res_users.py index f556dcc514a..6a188f2003a 100644 --- a/addons/gamification/models/res_users.py +++ b/addons/gamification/models/res_users.py @@ -8,6 +8,7 @@ class Users(models.Model): _inherit = 'res.users' karma = fields.Integer('Karma', default=0) + karma_position = fields.Integer('Karma position', compute="_compute_karma_position", store=False) badge_ids = fields.One2many('gamification.badge.user', 'user_id', string='Badges', copy=False) gold_badge = fields.Integer('Gold badges count', compute="_get_user_badge_level") silver_badge = fields.Integer('Silver badges count', compute="_get_user_badge_level") @@ -15,6 +16,29 @@ class Users(models.Model): rank_id = fields.Many2one('gamification.karma.rank', 'Rank', index=False) next_rank_id = fields.Many2one('gamification.karma.rank', 'Next Rank', index=False) + @api.depends('karma') + def _compute_karma_position(self): + where_query = self._where_calc([]) + self._apply_ir_rules(where_query, 'read') + from_clause, where_clause, where_clause_params = where_query.get_sql() + + query = """ + SELECT sub.id, sub.karma_position + FROM ( + SELECT id, row_number() OVER (ORDER BY res_users.karma DESC) AS karma_position + FROM {from_clause} + WHERE {where_clause} + ) sub + WHERE sub.id IN %s + """.format(from_clause=from_clause, where_clause=where_clause) + + self.env.cr.execute(query, where_clause_params + [tuple(self.ids)]) + + position_map = {item['id']: item['karma_position'] for item in self.env.cr.dictfetchall()} + + for user in self: + user.karma_position = position_map.get(user.id, 0) + @api.multi @api.depends('badge_ids') def _get_user_badge_level(self): diff --git a/addons/google_drive/i18n/google_drive.pot b/addons/google_drive/i18n/google_drive.pot index d9cd66d8546..f30cf8718ec 100644 --- a/addons/google_drive/i18n/google_drive.pot +++ b/addons/google_drive/i18n/google_drive.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-08 06:49+0000\n" -"PO-Revision-Date: 2018-10-08 06:49+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -26,6 +26,31 @@ msgid "<b>To create a new filter:</b><br/>\n" msgstr "" #. module: google_drive +#: model_terms:ir.ui.view,arch_db:google_drive.res_config_settings_view_form +msgid "<i class=\"fa fa-arrow-right\"/> Reset token" +msgstr "" + +#. module: google_drive +#: model_terms:ir.ui.view,arch_db:google_drive.res_config_settings_view_form +msgid "<i class=\"fa fa-arrow-right\"/> Set up token" +msgstr "" + +#. module: google_drive +#: model_terms:ir.ui.view,arch_db:google_drive.res_config_settings_view_form +msgid "<i class=\"fa fa-exclamation-triangle text-warning\"/> &nbsp; No refresh token set" +msgstr "" + +#. module: google_drive +#: model_terms:ir.ui.view,arch_db:google_drive.res_config_settings_view_form +msgid "<i class=\"text-success fa fa-check\"/> &nbsp; Refresh token set" +msgstr "" + +#. module: google_drive +#: model_terms:ir.ui.view,arch_db:google_drive.google_drive_auth_code_wizard +msgid "<span>Get an authorization code and set it in the field below.</span>" +msgstr "" + +#. module: google_drive #: model_terms:ir.ui.view,arch_db:google_drive.view_google_drive_config_kanban msgid "<strong>Active</strong>" msgstr "" @@ -51,7 +76,7 @@ msgid "Add a new template" msgstr "" #. module: google_drive -#: code:addons/google_drive/models/google_drive.py:42 +#: code:addons/google_drive/models/google_drive.py:41 #, python-format msgid "At least one key cannot be found in your Google Drive name pattern." msgstr "" @@ -62,6 +87,11 @@ msgid "Authorization Code" msgstr "" #. module: google_drive +#: model_terms:ir.ui.view,arch_db:google_drive.google_drive_auth_code_wizard +msgid "Cancel" +msgstr "" + +#. module: google_drive #: model:ir.model.fields,help:google_drive.field_google_drive_config__name_template msgid "Choose how the new google drive will be named, on google side. Eg. gdoc_%(field_name)s" msgstr "" @@ -72,6 +102,11 @@ msgid "Config Settings" msgstr "" #. module: google_drive +#: model_terms:ir.ui.view,arch_db:google_drive.google_drive_auth_code_wizard +msgid "Confirm" +msgstr "" + +#. module: google_drive #: model:ir.model.fields,field_description:google_drive.field_google_drive_config__create_uid msgid "Created by" msgstr "" @@ -82,7 +117,7 @@ msgid "Created on" msgstr "" #. module: google_drive -#: code:addons/google_drive/models/google_drive.py:161 +#: code:addons/google_drive/models/google_drive.py:160 #, python-format msgid "Creating google drive may only be done by one at a time." msgstr "" @@ -103,8 +138,8 @@ msgid "Filter" msgstr "" #. module: google_drive -#: code:addons/google_drive/models/google_drive.py:61 -#: code:addons/google_drive/models/google_drive.py:82 +#: code:addons/google_drive/models/google_drive.py:60 +#: code:addons/google_drive/models/google_drive.py:81 #, python-format msgid "Go to the configuration panel" msgstr "" @@ -131,8 +166,8 @@ msgid "Google Drive Templates" msgstr "" #. module: google_drive -#: code:addons/google_drive/models/google_drive.py:63 -#: code:addons/google_drive/models/google_drive.py:84 +#: code:addons/google_drive/models/google_drive.py:62 +#: code:addons/google_drive/models/google_drive.py:83 #, python-format msgid "Google Drive is not yet configured. Please contact your administrator." msgstr "" @@ -173,12 +208,17 @@ msgid "Model" msgstr "" #. module: google_drive -#: code:addons/google_drive/models/google_drive.py:203 +#: code:addons/google_drive/models/google_drive.py:202 #, python-format msgid "Please enter a valid Google Document URL." msgstr "" #. module: google_drive +#: model:ir.model.fields,field_description:google_drive.field_res_config_settings__is_google_drive_token_generated +msgid "Refresh Token Generated" +msgstr "" + +#. module: google_drive #: model:ir.model.fields,field_description:google_drive.field_google_drive_config__model msgid "Related Model" msgstr "" @@ -189,7 +229,13 @@ msgid "Resource Id" msgstr "" #. module: google_drive -#: code:addons/google_drive/models/google_drive.py:81 +#: code:addons/google_drive/models/res_config_settings.py:41 +#, python-format +msgid "Set up refresh token" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/models/google_drive.py:80 #, python-format msgid "Something went wrong during the token generation. Please request again an authorization code ." msgstr "" @@ -210,7 +256,7 @@ msgid "Templates" msgstr "" #. module: google_drive -#: code:addons/google_drive/models/google_drive.py:99 +#: code:addons/google_drive/models/google_drive.py:98 #, python-format msgid "The Google Template cannot be found. Maybe it has been deleted." msgstr "" @@ -229,20 +275,20 @@ msgid "The name of the attached document can use fixed or variable data. To dist msgstr "" #. module: google_drive -#: code:addons/google_drive/models/google_drive.py:135 +#: code:addons/google_drive/models/google_drive.py:134 #, python-format msgid "The permission 'reader' for 'anyone with the link' has not been written on the document" msgstr "" #. module: google_drive -#: model:ir.model.fields,field_description:google_drive.field_res_config_settings__google_drive_uri -msgid "URI" +#: code:addons/google_drive/models/google_drive.py:59 +#, python-format +msgid "There is no refresh code set for Google Drive. You can set it up from the configuration panel." msgstr "" #. module: google_drive -#: code:addons/google_drive/models/google_drive.py:60 -#, python-format -msgid "You haven't configured 'Authorization Code' generated from google, Please generate and configure it ." +#: model:ir.model.fields,field_description:google_drive.field_res_config_settings__google_drive_uri +msgid "URI" msgstr "" #. module: google_drive diff --git a/addons/hr/i18n/hr.pot b/addons/hr/i18n/hr.pot index a1fc038f3ea..200d902d184 100644 --- a/addons/hr/i18n/hr.pot +++ b/addons/hr/i18n/hr.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:59+0000\n" -"PO-Revision-Date: 2019-01-16 07:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,7 +16,7 @@ msgstr "" "Plural-Forms: \n" #. module: hr -#: code:addons/hr/models/hr.py:78 +#: code:addons/hr/models/hr.py:79 #, python-format msgid "%s (copy)" msgstr "" @@ -27,6 +27,12 @@ msgid "&nbsp;" msgstr "" #. module: hr +#: code:addons/hr/models/hr.py:280 +#, python-format +msgid "<b>Congratulations !</b> May I recommand you to setup an <a href=\"%s\">onboarding plan ?</a>" +msgstr "" + +#. module: hr #: model_terms:ir.ui.view,arch_db:hr.hr_department_view_kanban msgid "<i class=\"fa fa-ellipsis-v\" role=\"img\" aria-label=\"Manage\" title=\"Manage\"/>" msgstr "" @@ -142,6 +148,11 @@ msgid "A good job in a young and dynamic team" msgstr "" #. module: hr +#: sql_constraint:hr.employee:0 +msgid "A user cannot be linked to multiple employees in the same company." +msgstr "" + +#. module: hr #: model:ir.model.fields,field_description:hr.field_res_config_settings__hr_presence_control_ip msgid "According to the IP address" msgstr "" @@ -166,27 +177,47 @@ msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_department__active #: model:ir.model.fields,field_description:hr.field_hr_employee__active +#: model:ir.model.fields,field_description:hr.field_hr_plan__active msgid "Active" msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__activity_ids +#: model:ir.model.fields,field_description:hr.field_hr_plan__plan_activity_type_ids +#: model_terms:ir.ui.view,arch_db:hr.view_plan_form msgid "Activities" msgstr "" #. module: hr +#: model:ir.ui.menu,name:hr.menu_config_plan +msgid "Activity Planning" +msgstr "" + +#. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__activity_state msgid "Activity State" msgstr "" #. module: hr +#: model:ir.model.fields,field_description:hr.field_hr_plan_activity_type__activity_type_id +msgid "Activity Type" +msgstr "" + +#. module: hr #: model_terms:ir.actions.act_window,help:hr.act_employee_from_department #: model_terms:ir.actions.act_window,help:hr.open_view_employee_list_my msgid "Add a new employee" msgstr "" #. module: hr +#: model:ir.model.fields,field_description:hr.field_hr_departure_wizard__departure_description +#: model:ir.model.fields,field_description:hr.field_hr_employee__departure_description +msgid "Additional Information" +msgstr "" + +#. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__additional_note +#: model:ir.model.fields,field_description:hr.field_res_users__additional_note msgid "Additional Note" msgstr "" @@ -198,11 +229,21 @@ msgid "Alias Contact Security" msgstr "" #. module: hr +#: model_terms:ir.ui.view,arch_db:hr.res_config_settings_view_form +msgid "Allow employees to update their own data." +msgstr "" + +#. module: hr #: model_terms:hr.job,website_description:hr.job_consultant msgid "Analyse needs, write specification documents and quotation" msgstr "" #. module: hr +#: model:ir.actions.server,name:hr.hr_employee_action_toggle_active +msgid "Archive/Restore" +msgstr "" + +#. module: hr #: model_terms:ir.ui.view,arch_db:hr.view_department_filter #: model_terms:ir.ui.view,arch_db:hr.view_employee_filter msgid "Archived" @@ -242,6 +283,7 @@ msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__barcode +#: model:ir.model.fields,field_description:hr.field_res_users__barcode msgid "Badge ID" msgstr "" @@ -270,8 +312,9 @@ msgid "Because of our constant growth, we're now looking for people to reinforce msgstr "" #. module: hr -#: model_terms:ir.ui.view,arch_db:hr.view_employee_form -msgid "Birth" +#: model_terms:ir.ui.view,arch_db:hr.hr_departure_wizard_view_form +#: model_terms:ir.ui.view,arch_db:hr.plan_wizard +msgid "Cancel" msgstr "" #. module: hr @@ -280,6 +323,16 @@ msgid "Certificate Level" msgstr "" #. module: hr +#: model:ir.actions.act_window,name:hr.res_users_action_my +msgid "Change my Preferences" +msgstr "" + +#. module: hr +#: model_terms:ir.ui.view,arch_db:hr.view_employee_form +msgid "Chat" +msgstr "" + +#. module: hr #: model:hr.job,name:hr.job_ceo msgid "Chief Executive Officer" msgstr "" @@ -295,8 +348,9 @@ msgid "Child Departments" msgstr "" #. module: hr +#: model_terms:ir.ui.view,arch_db:hr.res_users_view_form_profile #: model_terms:ir.ui.view,arch_db:hr.view_employee_form -msgid "Citizenship & Other Information" +msgid "Citizenship" msgstr "" #. module: hr @@ -311,7 +365,9 @@ msgid "Close to the perfection ..." msgstr "" #. module: hr +#: selection:hr.plan.activity.type,responsible:0 #: model:ir.model.fields,field_description:hr.field_hr_employee__coach_id +#: model:ir.model.fields,field_description:hr.field_res_users__coach_id #: model_terms:ir.ui.view,arch_db:hr.view_employee_filter msgid "Coach" msgstr "" @@ -338,16 +394,32 @@ msgid "Company" msgstr "" #. module: hr +#: model_terms:ir.ui.view,arch_db:hr.print_employee_badge +msgid "Company Logo" +msgstr "" + +#. module: hr #: model:ir.model.fields,field_description:hr.field_res_config_settings__resource_calendar_id msgid "Company Working Hours" msgstr "" #. module: hr +#: model:ir.model.fields,field_description:hr.field_res_users__employee_id +msgid "Company employee" +msgstr "" + +#. module: hr #: model:ir.model.fields,field_description:hr.field_hr_department__complete_name msgid "Complete Name" msgstr "" #. module: hr +#: model:hr.plan.activity.type,name:hr.offboarding_setup_compute_out_delais +#: model:mail.activity.type,name:hr.activity_type_compute_out_delais +msgid "Compute Out Delais" +msgstr "" + +#. module: hr #: model:ir.model,name:hr.model_res_config_settings msgid "Config Settings" msgstr "" @@ -368,6 +440,7 @@ msgid "Contact" msgstr "" #. module: hr +#: model_terms:ir.ui.view,arch_db:hr.res_users_view_form_profile #: model_terms:ir.ui.view,arch_db:hr.view_employee_form msgid "Contact Information" msgstr "" @@ -386,6 +459,7 @@ msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__country_of_birth +#: model:ir.model.fields,field_description:hr.field_res_users__country_of_birth msgid "Country of Birth" msgstr "" @@ -396,17 +470,25 @@ msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_department__create_uid +#: model:ir.model.fields,field_description:hr.field_hr_departure_wizard__create_uid #: model:ir.model.fields,field_description:hr.field_hr_employee__create_uid #: model:ir.model.fields,field_description:hr.field_hr_employee_category__create_uid #: model:ir.model.fields,field_description:hr.field_hr_job__create_uid +#: model:ir.model.fields,field_description:hr.field_hr_plan__create_uid +#: model:ir.model.fields,field_description:hr.field_hr_plan_activity_type__create_uid +#: model:ir.model.fields,field_description:hr.field_hr_plan_wizard__create_uid msgid "Created by" msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_department__create_date +#: model:ir.model.fields,field_description:hr.field_hr_departure_wizard__create_date #: model:ir.model.fields,field_description:hr.field_hr_employee__create_date #: model:ir.model.fields,field_description:hr.field_hr_employee_category__create_date #: model:ir.model.fields,field_description:hr.field_hr_job__create_date +#: model:ir.model.fields,field_description:hr.field_hr_plan__create_date +#: model:ir.model.fields,field_description:hr.field_hr_plan_activity_type__create_date +#: model:ir.model.fields,field_description:hr.field_hr_plan_wizard__create_date msgid "Created on" msgstr "" @@ -417,6 +499,7 @@ msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__birthday +#: model:ir.model.fields,field_description:hr.field_res_users__birthday msgid "Date of Birth" msgstr "" @@ -440,6 +523,7 @@ msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__department_id #: model:ir.model.fields,field_description:hr.field_hr_job__department_id +#: model:ir.model.fields,field_description:hr.field_res_users__department_id #: model_terms:ir.ui.view,arch_db:hr.view_department_filter #: model_terms:ir.ui.view,arch_db:hr.view_employee_filter #: model_terms:ir.ui.view,arch_db:hr.view_job_filter @@ -459,6 +543,28 @@ msgid "Departments" msgstr "" #. module: hr +#: model_terms:ir.ui.view,arch_db:hr.view_employee_form +msgid "Departure" +msgstr "" + +#. module: hr +#: model:ir.model.fields,field_description:hr.field_hr_departure_wizard__departure_reason +#: model:ir.model.fields,field_description:hr.field_hr_employee__departure_reason +msgid "Departure Reason" +msgstr "" + +#. module: hr +#: model:ir.model,name:hr.model_hr_departure_wizard +msgid "Departure Wizard" +msgstr "" + +#. module: hr +#: model_terms:ir.ui.view,arch_db:hr.res_users_view_form_profile +#: model_terms:ir.ui.view,arch_db:hr.view_employee_form +msgid "Dependant" +msgstr "" + +#. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__child_ids msgid "Direct subordinates" msgstr "" @@ -470,9 +576,13 @@ msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_department__display_name +#: model:ir.model.fields,field_description:hr.field_hr_departure_wizard__display_name #: model:ir.model.fields,field_description:hr.field_hr_employee__display_name #: model:ir.model.fields,field_description:hr.field_hr_employee_category__display_name #: model:ir.model.fields,field_description:hr.field_hr_job__display_name +#: model:ir.model.fields,field_description:hr.field_hr_plan__display_name +#: model:ir.model.fields,field_description:hr.field_hr_plan_activity_type__display_name +#: model:ir.model.fields,field_description:hr.field_hr_plan_wizard__display_name msgid "Display Name" msgstr "" @@ -482,11 +592,6 @@ msgid "Divorced" msgstr "" #. module: hr -#: model_terms:ir.ui.view,arch_db:hr.view_employee_form -msgid "Education" -msgstr "" - -#. module: hr #: model:ir.model,name:hr.model_mail_alias msgid "Email Aliases" msgstr "" @@ -497,16 +602,25 @@ msgid "Email Aliases Mixin" msgstr "" #. module: hr +#: model_terms:ir.ui.view,arch_db:hr.res_users_view_form_profile +#: model_terms:ir.ui.view,arch_db:hr.view_employee_form +msgid "Emergency" +msgstr "" + +#. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__emergency_contact +#: model:ir.model.fields,field_description:hr.field_res_users__emergency_contact msgid "Emergency Contact" msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__emergency_phone +#: model:ir.model.fields,field_description:hr.field_res_users__emergency_phone msgid "Emergency Phone" msgstr "" #. module: hr +#: selection:hr.plan.activity.type,responsible:0 #: model:ir.model,name:hr.model_hr_employee #: model:ir.ui.menu,name:hr.menu_human_resources_configuration_employee #: model_terms:ir.ui.view,arch_db:hr.view_employee_form @@ -520,26 +634,60 @@ msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__google_drive_link +#: model:ir.model.fields,field_description:hr.field_res_users__google_drive_link msgid "Employee Documents" msgstr "" #. module: hr +#: model:ir.model.fields,field_description:hr.field_res_config_settings__hr_employee_self_edit +msgid "Employee Edition" +msgstr "" + +#. module: hr +#: model_terms:ir.ui.view,arch_db:hr.print_employee_badge +msgid "Employee Image" +msgstr "" + +#. module: hr +#: model:ir.model.fields,field_description:hr.field_res_config_settings__module_hr_skills +msgid "Employee Skills and Resumé" +msgstr "" + +#. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee_category__name msgid "Employee Tag" msgstr "" #. module: hr #: model:ir.actions.act_window,name:hr.open_view_categ_form +#: model:ir.model.fields,field_description:hr.field_res_users__category_ids #: model_terms:ir.ui.view,arch_db:hr.view_employee_category_form msgid "Employee Tags" msgstr "" #. module: hr +#: model_terms:ir.ui.view,arch_db:hr.res_config_settings_view_form +msgid "Employee Update Rights" +msgstr "" + +#. module: hr #: model:ir.model.fields,help:hr.field_hr_employee__bank_account_id +#: model:ir.model.fields,help:hr.field_res_users__employee_bank_account_id msgid "Employee bank salary account" msgstr "" #. module: hr +#: model:ir.model.fields,field_description:hr.field_res_users__employee_bank_account_id +msgid "Employee's Bank Account Number" +msgstr "" + +#. module: hr +#: model:ir.model.fields,field_description:hr.field_res_users__employee_country_id +msgid "Employee's Country" +msgstr "" + +#. module: hr +#: model_terms:ir.ui.view,arch_db:hr.res_users_view_form_profile #: model_terms:ir.ui.view,arch_db:hr.view_employee_form msgid "Employee's Name" msgstr "" @@ -572,6 +720,7 @@ msgstr "" #. module: hr #: model:ir.model.fields,help:hr.field_hr_employee__address_home_id +#: model:ir.model.fields,help:hr.field_res_users__address_home_id msgid "Enter here the private address of the employee, not the one linked to your company." msgstr "" @@ -606,6 +755,12 @@ msgid "Field of Study" msgstr "" #. module: hr +#: selection:hr.departure.wizard,departure_reason:0 +#: selection:hr.employee,departure_reason:0 +msgid "Fired" +msgstr "" + +#. module: hr #: model_terms:hr.job,website_description:hr.job_consultant msgid "Follow and check the development part" msgstr "" @@ -638,6 +793,7 @@ msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__gender +#: model:ir.model.fields,field_description:hr.field_res_users__gender msgid "Gender" msgstr "" @@ -703,6 +859,7 @@ msgid "HR Departments" msgstr "" #. module: hr +#: model_terms:ir.ui.view,arch_db:hr.res_users_view_form_profile #: model_terms:ir.ui.view,arch_db:hr.view_employee_form msgid "HR Settings" msgstr "" @@ -744,19 +901,25 @@ msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_department__id +#: model:ir.model.fields,field_description:hr.field_hr_departure_wizard__id #: model:ir.model.fields,field_description:hr.field_hr_employee__id #: model:ir.model.fields,field_description:hr.field_hr_employee_category__id #: model:ir.model.fields,field_description:hr.field_hr_job__id +#: model:ir.model.fields,field_description:hr.field_hr_plan__id +#: model:ir.model.fields,field_description:hr.field_hr_plan_activity_type__id +#: model:ir.model.fields,field_description:hr.field_hr_plan_wizard__id msgid "ID" msgstr "" #. module: hr #: model:ir.model.fields,help:hr.field_hr_employee__barcode +#: model:ir.model.fields,help:hr.field_res_users__barcode msgid "ID used for employee identification." msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__identification_id +#: model:ir.model.fields,field_description:hr.field_res_users__identification_id msgid "Identification No" msgstr "" @@ -787,7 +950,7 @@ msgid "If the active field is set to False, it will allow you to hide the resour msgstr "" #. module: hr -#: code:addons/hr/models/hr.py:306 +#: code:addons/hr/models/hr.py:346 #, python-format msgid "Import Template for Employees" msgstr "" @@ -857,6 +1020,8 @@ msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__job_title +#: model:ir.model.fields,field_description:hr.field_res_users__job_title +#: model_terms:ir.ui.view,arch_db:hr.view_employee_form msgid "Job Title" msgstr "" @@ -868,34 +1033,54 @@ msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__km_home_work +#: model:ir.model.fields,field_description:hr.field_res_users__km_home_work msgid "Km home-work" msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_department____last_update +#: model:ir.model.fields,field_description:hr.field_hr_departure_wizard____last_update #: model:ir.model.fields,field_description:hr.field_hr_employee____last_update #: model:ir.model.fields,field_description:hr.field_hr_employee_category____last_update #: model:ir.model.fields,field_description:hr.field_hr_job____last_update +#: model:ir.model.fields,field_description:hr.field_hr_plan____last_update +#: model:ir.model.fields,field_description:hr.field_hr_plan_activity_type____last_update +#: model:ir.model.fields,field_description:hr.field_hr_plan_wizard____last_update msgid "Last Modified on" msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_department__write_uid +#: model:ir.model.fields,field_description:hr.field_hr_departure_wizard__write_uid #: model:ir.model.fields,field_description:hr.field_hr_employee__write_uid #: model:ir.model.fields,field_description:hr.field_hr_employee_category__write_uid #: model:ir.model.fields,field_description:hr.field_hr_job__write_uid +#: model:ir.model.fields,field_description:hr.field_hr_plan__write_uid +#: model:ir.model.fields,field_description:hr.field_hr_plan_activity_type__write_uid +#: model:ir.model.fields,field_description:hr.field_hr_plan_wizard__write_uid msgid "Last Updated by" msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_department__write_date +#: model:ir.model.fields,field_description:hr.field_hr_departure_wizard__write_date #: model:ir.model.fields,field_description:hr.field_hr_employee__write_date #: model:ir.model.fields,field_description:hr.field_hr_employee_category__write_date #: model:ir.model.fields,field_description:hr.field_hr_job__write_date +#: model:ir.model.fields,field_description:hr.field_hr_plan__write_date +#: model:ir.model.fields,field_description:hr.field_hr_plan_activity_type__write_date +#: model:ir.model.fields,field_description:hr.field_hr_plan_wizard__write_date msgid "Last Updated on" msgstr "" #. module: hr +#: model:ir.actions.act_window,name:hr.plan_wizard_action +#: model_terms:ir.ui.view,arch_db:hr.plan_wizard +#: model_terms:ir.ui.view,arch_db:hr.view_employee_form +msgid "Launch Plan" +msgstr "" + +#. module: hr #: model_terms:hr.job,website_description:hr.job_marketing msgid "Launch new marketing campaigns and offers" msgstr "" @@ -921,6 +1106,13 @@ msgid "Let's create a job position." msgstr "" #. module: hr +#: model_terms:ir.ui.view,arch_db:hr.res_users_view_form_profile +#: model_terms:ir.ui.view,arch_db:hr.view_employee_form +msgid "Location" +msgstr "" + +#. module: hr +#: model_terms:ir.ui.view,arch_db:hr.res_users_view_form_profile #: model_terms:ir.ui.view,arch_db:hr.view_employee_form msgid "Login Information" msgstr "" @@ -938,15 +1130,31 @@ msgid "Male" msgstr "" #. module: hr +#: model_terms:ir.ui.view,arch_db:hr.res_config_settings_view_form +msgid "Manage skills, knowledge and resumé of your employees" +msgstr "" + +#. module: hr +#: selection:hr.plan.activity.type,responsible:0 #: model:ir.model.fields,field_description:hr.field_hr_department__manager_id #: model:ir.model.fields,field_description:hr.field_hr_employee__parent_id +#: model:ir.model.fields,field_description:hr.field_res_users__parent_id #: model_terms:ir.ui.view,arch_db:hr.view_employee_filter #: model:res.groups,name:hr.group_hr_manager msgid "Manager" msgstr "" #. module: hr +#: model_terms:ir.ui.view,arch_db:hr.res_users_view_form_profile +#: model_terms:ir.ui.view,arch_db:hr.view_employee_form +msgid "Managers" +msgstr "" + +#. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__marital +#: model:ir.model.fields,field_description:hr.field_res_users__marital +#: model_terms:ir.ui.view,arch_db:hr.res_users_view_form_profile +#: model_terms:ir.ui.view,arch_db:hr.view_employee_form msgid "Marital Status" msgstr "" @@ -1013,7 +1221,16 @@ msgid "Must have ..." msgstr "" #. module: hr +#. openerp-web +#: code:addons/hr/static/src/xml/hr_templates.xml:4 +#, python-format +msgid "My Profile" +msgstr "" + +#. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__name +#: model:ir.model.fields,field_description:hr.field_hr_plan__name +#: model:ir.model.fields,field_description:hr.field_hr_plan_activity_type__name msgid "Name" msgstr "" @@ -1049,6 +1266,24 @@ msgid "Nice to have" msgstr "" #. module: hr +#: code:addons/hr/models/plan.py:26 +#, python-format +msgid "No user linked to the coach of %s. Please contact an administrator." +msgstr "" + +#. module: hr +#: code:addons/hr/models/plan.py:34 +#, python-format +msgid "No user linked to the employee %s. Please contact an administrator." +msgstr "" + +#. module: hr +#: code:addons/hr/models/plan.py:30 +#, python-format +msgid "No user linked to the manager of %s. Please contact an administrator." +msgstr "" + +#. module: hr #: selection:hr.job,state:0 msgid "Not Recruiting" msgstr "" @@ -1072,6 +1307,7 @@ msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__children +#: model:ir.model.fields,field_description:hr.field_res_users__children msgid "Number of Children" msgstr "" @@ -1133,15 +1369,11 @@ msgstr "" #. module: hr #: selection:hr.employee,certificate:0 #: selection:hr.employee,gender:0 +#: selection:hr.plan.activity.type,responsible:0 msgid "Other" msgstr "" #. module: hr -#: model_terms:ir.ui.view,arch_db:hr.view_employee_form -msgid "Other Information ..." -msgstr "" - -#. module: hr #: model_terms:hr.job,website_description:hr.job_ceo #: model_terms:hr.job,website_description:hr.job_consultant #: model_terms:hr.job,website_description:hr.job_cto @@ -1159,11 +1391,13 @@ msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__pin +#: model:ir.model.fields,field_description:hr.field_res_users__pin msgid "PIN" msgstr "" #. module: hr #: model:ir.model.fields,help:hr.field_hr_employee__pin +#: model:ir.model.fields,help:hr.field_res_users__pin msgid "PIN used to Check In/Out in Kiosk Mode (if enabled in Configuration)." msgstr "" @@ -1173,12 +1407,18 @@ msgid "Parent Department" msgstr "" #. module: hr +#: model:ir.model.fields,help:hr.field_hr_employee__user_partner_id +msgid "Partner-related data of the user" +msgstr "" + +#. module: hr #: model_terms:hr.job,website_description:hr.job_developer msgid "Passion for the Internet and its culture" msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__passport_id +#: model:ir.model.fields,field_description:hr.field_res_users__passport_id msgid "Passport No" msgstr "" @@ -1200,15 +1440,62 @@ msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__place_of_birth +#: model:ir.model.fields,field_description:hr.field_res_users__place_of_birth msgid "Place of Birth" msgstr "" #. module: hr +#: model:ir.model.fields,field_description:hr.field_hr_departure_wizard__plan_id +#: model:ir.model.fields,field_description:hr.field_hr_plan_wizard__plan_id +#: model_terms:ir.ui.view,arch_db:hr.search_view_plan +msgid "Plan" +msgstr "" + +#. module: hr +#: model:hr.plan.activity.type,name:hr.onboarding_plan_training +#: model:mail.activity.type,name:hr.activity_type_plan_training +msgid "Plan Training" +msgstr "" + +#. module: hr +#: model:ir.model,name:hr.model_hr_plan_wizard +msgid "Plan Wizard" +msgstr "" + +#. module: hr +#: model:ir.model,name:hr.model_hr_plan_activity_type +msgid "Plan activity type" +msgstr "" + +#. module: hr #: selection:hr.employee,activity_state:0 msgid "Planned" msgstr "" #. module: hr +#: model:ir.actions.act_window,name:hr.plan_listing +#: model_terms:ir.ui.view,arch_db:hr.view_plan_activity_form +#: model_terms:ir.ui.view,arch_db:hr.view_plan_form +#: model_terms:ir.ui.view,arch_db:hr.view_plan_tree +msgid "Planning" +msgstr "" + +#. module: hr +#: model:ir.ui.menu,name:hr.menu_config_plan_types +msgid "Planning Types" +msgstr "" + +#. module: hr +#: model:ir.actions.act_window,name:hr.plan_type_listing +msgid "Planning type" +msgstr "" + +#. module: hr +#: model:ir.ui.menu,name:hr.menu_config_plan_plan +msgid "Plans" +msgstr "" + +#. module: hr #: model:ir.model.fields,help:hr.field_mail_alias__alias_contact #: model:ir.model.fields,help:hr.field_mail_alias_mixin__alias_contact #: model:ir.model.fields,help:hr.field_mail_channel__alias_contact @@ -1220,11 +1507,6 @@ msgid "Policy to post a message on the document using the mailgateway.\n" msgstr "" #. module: hr -#: model_terms:ir.ui.view,arch_db:hr.view_employee_form -msgid "Position" -msgstr "" - -#. module: hr #: model_terms:hr.job,website_description:hr.job_cto #: model_terms:hr.job,website_description:hr.job_developer #: model_terms:hr.job,website_description:hr.job_trainee @@ -1232,16 +1514,34 @@ msgid "Preferably 1 year of experience" msgstr "" #. module: hr +#: model_terms:ir.ui.view,arch_db:hr.res_users_view_form_profile +msgid "Preferences" +msgstr "" + +#. module: hr +#: model:ir.actions.report,name:hr.hr_employee_print_badge +msgid "Print Badge" +msgstr "" + +#. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__address_home_id +#: model:ir.model.fields,field_description:hr.field_res_users__address_home_id msgid "Private Address" msgstr "" #. module: hr +#: model_terms:ir.ui.view,arch_db:hr.res_users_view_form_profile #: model_terms:ir.ui.view,arch_db:hr.view_employee_form msgid "Private Information" msgstr "" #. module: hr +#: model:ir.model.fields,field_description:hr.field_hr_employee__phone +#: model:ir.model.fields,field_description:hr.field_res_users__phone +msgid "Private Phone" +msgstr "" + +#. module: hr #: model_terms:hr.job,website_description:hr.job_consultant msgid "Quantify and negotiate the resources required" msgstr "" @@ -1267,13 +1567,20 @@ msgid "Recruitment in Progress" msgstr "" #. module: hr +#: code:addons/hr/models/hr.py:320 +#: model:ir.actions.act_window,name:hr.hr_departure_wizard_action +#, python-format +msgid "Register Departure" +msgstr "" + +#. module: hr #: model_terms:ir.ui.view,arch_db:hr.view_employee_form msgid "Related User" msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_res_users__employee_ids -msgid "Related employees" +msgid "Related employee" msgstr "" #. module: hr @@ -1292,6 +1599,12 @@ msgid "Requirements" msgstr "" #. module: hr +#: selection:hr.departure.wizard,departure_reason:0 +#: selection:hr.employee,departure_reason:0 +msgid "Resigned" +msgstr "" + +#. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__resource_id msgid "Resource" msgstr "" @@ -1308,11 +1621,27 @@ msgid "Responsibilities" msgstr "" #. module: hr +#: model:ir.model.fields,field_description:hr.field_hr_plan_activity_type__responsible +msgid "Responsible" +msgstr "" + +#. module: hr +#: model:ir.model.fields,field_description:hr.field_hr_plan_activity_type__responsible_id +msgid "Responsible Person" +msgstr "" + +#. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__activity_user_id msgid "Responsible User" msgstr "" #. module: hr +#: selection:hr.departure.wizard,departure_reason:0 +#: selection:hr.employee,departure_reason:0 +msgid "Retired" +msgstr "" + +#. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__sinid msgid "SIN No" msgstr "" @@ -1323,6 +1652,11 @@ msgid "SSN No" msgstr "" #. module: hr +#: model_terms:ir.ui.view,arch_db:hr.hr_departure_wizard_view_form +msgid "Save" +msgstr "" + +#. module: hr #: model_terms:hr.job,website_description:hr.job_ceo #: model_terms:hr.job,website_description:hr.job_hrm #: model_terms:hr.job,website_description:hr.job_marketing @@ -1330,6 +1664,11 @@ msgid "Scale our events organization all around the world" msgstr "" #. module: hr +#: model_terms:ir.ui.view,arch_db:hr.view_employee_form +msgid "Schedule" +msgstr "" + +#. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__study_school msgid "School" msgstr "" @@ -1352,6 +1691,12 @@ msgid "Settings" msgstr "" #. module: hr +#: model:hr.plan.activity.type,name:hr.onboarding_setup_it_materials +#: model:mail.activity.type,name:hr.activity_type_setup_it_materials +msgid "Setup IT Materials" +msgstr "" + +#. module: hr #: model:ir.model.fields,field_description:hr.field_res_config_settings__module_hr_org_chart msgid "Show Organizational Chart" msgstr "" @@ -1404,11 +1749,13 @@ msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__spouse_birthdate +#: model:ir.model.fields,field_description:hr.field_res_users__spouse_birthdate msgid "Spouse Birthdate" msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__spouse_complete_name +#: model:ir.model.fields,field_description:hr.field_res_users__spouse_complete_name msgid "Spouse Complete Name" msgstr "" @@ -1419,6 +1766,7 @@ msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_job__state +#: model_terms:ir.ui.view,arch_db:hr.res_users_view_form_profile #: model_terms:ir.ui.view,arch_db:hr.view_employee_form #: model_terms:ir.ui.view,arch_db:hr.view_job_filter msgid "Status" @@ -1450,10 +1798,18 @@ msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__category_ids #: model:ir.ui.menu,name:hr.menu_view_employee_category_form +#: model_terms:ir.ui.view,arch_db:hr.res_users_view_form_profile +#: model_terms:ir.ui.view,arch_db:hr.view_employee_form msgid "Tags" msgstr "" #. module: hr +#: model:hr.plan.activity.type,name:hr.offboarding_take_back_hr_materials +#: model:mail.activity.type,name:hr.activity_type_take_back_hr_materials +msgid "Take Back HR Materials" +msgstr "" + +#. module: hr #: model_terms:hr.job,website_description:hr.job_consultant msgid "Take part in the consulting services" msgstr "" @@ -1469,13 +1825,14 @@ msgid "The Badge ID must be unique, this one is already assigned to another empl msgstr "" #. module: hr -#: code:addons/hr/models/hr.py:212 +#: code:addons/hr/models/hr.py:225 #, python-format msgid "The PIN must be a sequence of digits." msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__is_address_home_a_company +#: model:ir.model.fields,field_description:hr.field_res_users__is_address_home_a_company msgid "The employee adress has a company linked" msgstr "" @@ -1525,6 +1882,12 @@ msgid "Trainee" msgstr "" #. module: hr +#: model:hr.plan.activity.type,name:hr.onboarding_training +#: model:mail.activity.type,name:hr.activity_type_training +msgid "Training" +msgstr "" + +#. module: hr #: model_terms:hr.job,website_description:hr.job_marketing msgid "Transform our product into a suite of well positioned business Apps" msgstr "" @@ -1547,6 +1910,7 @@ msgid "Unread Messages Counter" msgstr "" #. module: hr +#: model_terms:ir.ui.view,arch_db:hr.res_users_view_form_profile #: model_terms:ir.ui.view,arch_db:hr.view_employee_form msgid "Use here the home address of the employee.\n" " This private address is used in the expense report reimbursement document.\n" @@ -1559,6 +1923,11 @@ msgid "User" msgstr "" #. module: hr +#: model:ir.model.fields,field_description:hr.field_hr_employee__user_partner_id +msgid "User's partner" +msgstr "" + +#. module: hr #: model:ir.model,name:hr.model_res_users msgid "Users" msgstr "" @@ -1570,11 +1939,13 @@ msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__visa_expire +#: model:ir.model.fields,field_description:hr.field_res_users__visa_expire msgid "Visa Expire Date" msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__visa_no +#: model:ir.model.fields,field_description:hr.field_res_users__visa_no msgid "Visa No" msgstr "" @@ -1651,26 +2022,31 @@ msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__address_id +#: model:ir.model.fields,field_description:hr.field_res_users__address_id msgid "Work Address" msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__work_email +#: model:ir.model.fields,field_description:hr.field_res_users__work_email msgid "Work Email" msgstr "" #. module: hr +#: model_terms:ir.ui.view,arch_db:hr.res_users_view_form_profile #: model_terms:ir.ui.view,arch_db:hr.view_employee_form msgid "Work Information" msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__work_location +#: model:ir.model.fields,field_description:hr.field_res_users__work_location msgid "Work Location" msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__mobile_phone +#: model:ir.model.fields,field_description:hr.field_res_users__mobile_phone msgid "Work Mobile" msgstr "" @@ -1680,17 +2056,20 @@ msgid "Work Organization" msgstr "" #. module: hr +#: model_terms:ir.ui.view,arch_db:hr.res_users_view_form_profile #: model_terms:ir.ui.view,arch_db:hr.view_employee_form msgid "Work Permit" msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__permit_no +#: model:ir.model.fields,field_description:hr.field_res_users__permit_no msgid "Work Permit No" msgstr "" #. module: hr #: model:ir.model.fields,field_description:hr.field_hr_employee__work_phone +#: model:ir.model.fields,field_description:hr.field_res_users__work_phone msgid "Work Phone" msgstr "" @@ -1744,6 +2123,12 @@ msgid "You are creative" msgstr "" #. module: hr +#: code:addons/hr/models/res_users.py:138 +#, python-format +msgid "You are only allowed to update your preferences. Please contact a HR officer to update other informations." +msgstr "" + +#. module: hr #: model_terms:hr.job,website_description:hr.job_consultant msgid "You are ready to travel in US" msgstr "" @@ -1756,7 +2141,7 @@ msgid "You are ready to work in a dynamic company" msgstr "" #. module: hr -#: code:addons/hr/models/hr.py:341 +#: code:addons/hr/models/hr.py:408 #, python-format msgid "You cannot create recursive departments." msgstr "" @@ -1867,13 +2252,13 @@ msgid "Your document has not been created" msgstr "" #. module: hr -#: model_terms:ir.ui.view,arch_db:hr.view_department_form -msgid "department" +#: model_terms:ir.ui.view,arch_db:hr.print_employee_badge +msgid "barcode" msgstr "" #. module: hr -#: model_terms:ir.ui.view,arch_db:hr.view_employee_form -msgid "e.g. Part Time" +#: model_terms:ir.ui.view,arch_db:hr.view_department_form +msgid "department" msgstr "" #. module: hr @@ -1881,3 +2266,8 @@ msgstr "" msgid "e.g. Sales Manager" msgstr "" +#. module: hr +#: model:ir.model,name:hr.model_hr_plan +msgid "plan" +msgstr "" + diff --git a/addons/hr/models/hr.py b/addons/hr/models/hr.py index de0bc64a3dc..89b883e6df4 100644 --- a/addons/hr/models/hr.py +++ b/addons/hr/models/hr.py @@ -388,6 +388,12 @@ class Department(models.Model): note = fields.Text('Note') color = fields.Integer('Color Index') + @api.multi + def name_get(self): + if not self.env.context.get('hierarchical_naming', True): + return [(record.id, record.name) for record in self] + return super(Department, self).name_get() + @api.depends('name', 'parent_id.complete_name') def _compute_complete_name(self): for department in self: diff --git a/addons/hr_attendance/i18n/hr_attendance.pot b/addons/hr_attendance/i18n/hr_attendance.pot index 235e8d15b70..648a18e257f 100644 --- a/addons/hr_attendance/i18n/hr_attendance.pot +++ b/addons/hr_attendance/i18n/hr_attendance.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:59+0000\n" -"PO-Revision-Date: 2019-01-16 07:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -51,6 +51,15 @@ msgid "<span class=\"o_form_label\">Employee PIN</span>" msgstr "" #. module: hr_attendance +#: model_terms:ir.ui.view,arch_db:hr_attendance.hr_user_view_form +#: model_terms:ir.ui.view,arch_db:hr_attendance.view_employee_form_inherit_hr_attendance +msgid "<span class=\"o_stat_text\">\n" +" Last Month\n" +" </span>" +msgstr "" + +#. module: hr_attendance +#: model_terms:ir.ui.view,arch_db:hr_attendance.hr_user_view_form #: model_terms:ir.ui.view,arch_db:hr_attendance.view_employee_form_inherit_hr_attendance msgid "<span class=\"o_stat_text\">Attendance</span>" msgstr "" @@ -75,14 +84,14 @@ msgstr "" #. module: hr_attendance #. openerp-web -#: code:addons/hr_attendance/static/src/js/greeting_message.js:140 +#: code:addons/hr_attendance/static/src/js/greeting_message.js:126 #, python-format msgid "An apple a day keeps the doctor away" msgstr "" #. module: hr_attendance #. openerp-web -#: code:addons/hr_attendance/static/src/js/greeting_message.js:129 +#: code:addons/hr_attendance/static/src/js/greeting_message.js:115 #, python-format msgid "Another good day's work! See you soon!" msgstr "" @@ -104,6 +113,7 @@ msgstr "" #. module: hr_attendance #: model:ir.model.fields,field_description:hr_attendance.field_hr_employee__attendance_state +#: model:ir.model.fields,field_description:hr_attendance.field_res_users__attendance_state msgid "Attendance Status" msgstr "" @@ -121,6 +131,7 @@ msgstr "" #. module: hr_attendance #. openerp-web #: code:addons/hr_attendance/static/src/xml/attendance.xml:4 +#: model_terms:ir.ui.view,arch_db:hr_attendance.hr_user_view_form #: model_terms:ir.ui.view,arch_db:hr_attendance.view_employee_form_inherit_hr_attendance #, python-format msgid "Available" @@ -140,13 +151,13 @@ msgid "Cannot create new attendance record for %(empl_name)s, the employee was a msgstr "" #. module: hr_attendance -#: code:addons/hr_attendance/models/hr_employee.py:109 +#: code:addons/hr_attendance/models/hr_employee.py:86 #, python-format msgid "Cannot perform check in or check out on multiple employees." msgstr "" #. module: hr_attendance -#: code:addons/hr_attendance/models/hr_employee.py:123 +#: code:addons/hr_attendance/models/hr_employee.py:100 #, python-format msgid "Cannot perform check out on %(empl_name)s, could not find corresponding check in. Your attendances have probably been modified manually by human resources." msgstr "" @@ -216,7 +227,6 @@ msgstr "" #. module: hr_attendance #. openerp-web #: code:addons/hr_attendance/static/src/xml/attendance.xml:14 -#: model_terms:ir.ui.view,arch_db:hr_attendance.print_employee_badge #, python-format msgid "Company Logo" msgstr "" @@ -258,14 +268,14 @@ msgstr "" #. module: hr_attendance #. openerp-web -#: code:addons/hr_attendance/static/src/js/greeting_message.js:146 +#: code:addons/hr_attendance/static/src/js/greeting_message.js:132 #, python-format msgid "Early to bed and early to rise, makes a man healthy, wealthy and wise" msgstr "" #. module: hr_attendance #. openerp-web -#: code:addons/hr_attendance/static/src/js/greeting_message.js:138 +#: code:addons/hr_attendance/static/src/js/greeting_message.js:124 #, python-format msgid "Eat breakfast as a king, lunch as a merchant and supper as a beggar" msgstr "" @@ -279,11 +289,6 @@ msgid "Employee" msgstr "" #. module: hr_attendance -#: model_terms:ir.ui.view,arch_db:hr_attendance.print_employee_badge -msgid "Employee Image" -msgstr "" - -#. module: hr_attendance #: model:ir.model.fields,field_description:hr_attendance.field_res_config_settings__group_attendance_use_pin msgid "Employee PIN" msgstr "" @@ -319,14 +324,14 @@ msgstr "" #. module: hr_attendance #. openerp-web -#: code:addons/hr_attendance/static/src/js/greeting_message.js:93 +#: code:addons/hr_attendance/static/src/js/greeting_message.js:79 #, python-format msgid "First come, first served" msgstr "" #. module: hr_attendance #. openerp-web -#: code:addons/hr_attendance/static/src/js/greeting_message.js:108 +#: code:addons/hr_attendance/static/src/js/greeting_message.js:94 #, python-format msgid "Glad to have you back, it's been a while!" msgstr "" @@ -342,29 +347,29 @@ msgstr "" #. module: hr_attendance #. openerp-web -#: code:addons/hr_attendance/static/src/js/greeting_message.js:99 +#: code:addons/hr_attendance/static/src/js/greeting_message.js:85 #, python-format msgid "Good afternoon" msgstr "" #. module: hr_attendance #. openerp-web -#: code:addons/hr_attendance/static/src/js/greeting_message.js:101 +#: code:addons/hr_attendance/static/src/js/greeting_message.js:87 #, python-format msgid "Good evening" msgstr "" #. module: hr_attendance #. openerp-web -#: code:addons/hr_attendance/static/src/js/greeting_message.js:96 +#: code:addons/hr_attendance/static/src/js/greeting_message.js:82 #, python-format msgid "Good morning" msgstr "" #. module: hr_attendance #. openerp-web -#: code:addons/hr_attendance/static/src/js/greeting_message.js:87 -#: code:addons/hr_attendance/static/src/js/greeting_message.js:103 +#: code:addons/hr_attendance/static/src/js/greeting_message.js:73 +#: code:addons/hr_attendance/static/src/js/greeting_message.js:89 #, python-format msgid "Good night" msgstr "" @@ -384,33 +389,45 @@ msgstr "" #. module: hr_attendance #. openerp-web -#: code:addons/hr_attendance/static/src/js/greeting_message.js:143 +#: code:addons/hr_attendance/static/src/js/greeting_message.js:129 #, python-format msgid "Have a good afternoon" msgstr "" #. module: hr_attendance #. openerp-web -#: code:addons/hr_attendance/static/src/js/greeting_message.js:134 +#: code:addons/hr_attendance/static/src/js/greeting_message.js:120 #, python-format msgid "Have a good day!" msgstr "" #. module: hr_attendance #. openerp-web -#: code:addons/hr_attendance/static/src/js/greeting_message.js:148 +#: code:addons/hr_attendance/static/src/js/greeting_message.js:134 #, python-format msgid "Have a good evening" msgstr "" #. module: hr_attendance #. openerp-web -#: code:addons/hr_attendance/static/src/js/greeting_message.js:136 +#: code:addons/hr_attendance/static/src/js/greeting_message.js:122 #, python-format msgid "Have a nice lunch!" msgstr "" #. module: hr_attendance +#: model_terms:ir.ui.view,arch_db:hr_attendance.hr_user_view_form +#: model_terms:ir.ui.view,arch_db:hr_attendance.view_employee_form_inherit_hr_attendance +msgid "Hours" +msgstr "" + +#. module: hr_attendance +#: model:ir.model.fields,field_description:hr_attendance.field_hr_employee__hours_last_month +#: model:ir.model.fields,field_description:hr_attendance.field_res_users__hours_last_month +msgid "Hours Last Month" +msgstr "" + +#. module: hr_attendance #: model_terms:ir.ui.view,arch_db:hr_attendance.hr_attendance_view_filter msgid "Hr Attendance Search" msgstr "" @@ -470,7 +487,6 @@ msgid "Manager" msgstr "" #. module: hr_attendance -#: model:ir.model.fields,field_description:hr_attendance.field_hr_employee__manual_attendance #: model:res.groups,name:hr_attendance.group_hr_attendance msgid "Manual Attendance" msgstr "" @@ -501,12 +517,13 @@ msgid "No attendance records to display" msgstr "" #. module: hr_attendance -#: code:addons/hr_attendance/models/hr_employee.py:73 +#: code:addons/hr_attendance/models/hr_employee.py:49 #, python-format msgid "No employee corresponding to barcode %(barcode)s" msgstr "" #. module: hr_attendance +#: model_terms:ir.ui.view,arch_db:hr_attendance.hr_user_view_form #: model_terms:ir.ui.view,arch_db:hr_attendance.view_employee_form_inherit_hr_attendance msgid "Not available" msgstr "" @@ -538,11 +555,6 @@ msgid "Please return to the main menu." msgstr "" #. module: hr_attendance -#: model:ir.actions.report,name:hr_attendance.hr_employee_print_badge -msgid "Print Badge" -msgstr "" - -#. module: hr_attendance #: model:ir.ui.menu,name:hr_attendance.menu_hr_attendance_report msgid "Reporting" msgstr "" @@ -606,17 +618,12 @@ msgstr "" #. module: hr_attendance #. openerp-web -#: code:addons/hr_attendance/static/src/js/greeting_message.js:91 +#: code:addons/hr_attendance/static/src/js/greeting_message.js:77 #, python-format msgid "The early bird catches the worm" msgstr "" #. module: hr_attendance -#: model:ir.model.fields,help:hr_attendance.field_hr_employee__manual_attendance -msgid "The employee will have access to the \"My Attendances\" menu to check in and out from his session" -msgstr "" - -#. module: hr_attendance #: model:res.groups,comment:hr_attendance.group_hr_attendance msgid "The user will gain access to the human resources attendance menu, enabling him to manage his own attendance." msgstr "" @@ -632,6 +639,11 @@ msgid "Use PIN codes to check in in Kiosk Mode" msgstr "" #. module: hr_attendance +#: model:ir.model,name:hr_attendance.model_res_users +msgid "Users" +msgstr "" + +#. module: hr_attendance #. openerp-web #: code:addons/hr_attendance/static/src/xml/attendance.xml:44 #: code:addons/hr_attendance/static/src/xml/attendance.xml:71 @@ -674,7 +686,13 @@ msgid "Worked Hours" msgstr "" #. module: hr_attendance -#: code:addons/hr_attendance/models/hr_employee.py:80 +#: model_terms:ir.ui.view,arch_db:hr_attendance.hr_user_view_form +#: model_terms:ir.ui.view,arch_db:hr_attendance.view_employee_form_inherit_hr_attendance +msgid "Worked hours last month" +msgstr "" + +#. module: hr_attendance +#: code:addons/hr_attendance/models/hr_employee.py:56 #, python-format msgid "Wrong PIN" msgstr "" @@ -686,11 +704,6 @@ msgid "You cannot duplicate an attendance." msgstr "" #. module: hr_attendance -#: model_terms:ir.ui.view,arch_db:hr_attendance.print_employee_badge -msgid "barcode" -msgstr "" - -#. module: hr_attendance #. openerp-web #: code:addons/hr_attendance/static/src/xml/attendance.xml:47 #: code:addons/hr_attendance/static/src/xml/attendance.xml:75 diff --git a/addons/hr_contract/i18n/hr_contract.pot b/addons/hr_contract/i18n/hr_contract.pot index 1478e7ba724..02a88e3380a 100644 --- a/addons/hr_contract/i18n/hr_contract.pot +++ b/addons/hr_contract/i18n/hr_contract.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-24 10:58+0000\n" -"PO-Revision-Date: 2018-12-24 10:58+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -56,6 +56,12 @@ msgid "Advantages..." msgstr "" #. module: hr_contract +#: code:addons/hr_contract/models/hr_contract.py:131 +#, python-format +msgid "An employee can only have one contract at the same time. (Excluding Draft and Cancelled contracts)" +msgstr "" + +#. module: hr_contract #: model_terms:ir.ui.view,arch_db:hr_contract.hr_contract_view_search msgid "Archived" msgstr "" @@ -66,6 +72,11 @@ msgid "Attachment Count" msgstr "" #. module: hr_contract +#: model:ir.model.fields,field_description:hr_contract.field_res_users__bank_account_id +msgid "Bank Account Number" +msgstr "" + +#. module: hr_contract #: selection:hr.contract,state:0 msgid "Cancelled" msgstr "" @@ -77,6 +88,7 @@ msgstr "" #. module: hr_contract #: model:ir.model.fields,field_description:hr_contract.field_hr_employee__vehicle +#: model:ir.model.fields,field_description:hr_contract.field_res_users__vehicle msgid "Company Vehicle" msgstr "" @@ -127,7 +139,7 @@ msgid "Contract expired" msgstr "" #. module: hr_contract -#: code:addons/hr_contract/models/hr_contract.py:115 +#: code:addons/hr_contract/models/hr_contract.py:136 #, python-format msgid "Contract start date must be earlier than contract end date." msgstr "" @@ -174,6 +186,7 @@ msgstr "" #: model:ir.model.fields,field_description:hr_contract.field_hr_employee__contract_id #: model_terms:ir.ui.view,arch_db:hr_contract.hr_contract_view_form #: model_terms:ir.ui.view,arch_db:hr_contract.hr_hr_employee_view_form2 +#: model_terms:ir.ui.view,arch_db:hr_contract.hr_user_view_form msgid "Current Contract" msgstr "" @@ -183,6 +196,11 @@ msgid "Current Employee" msgstr "" #. module: hr_contract +#: model:ir.model.fields,help:hr_contract.field_hr_employee__contract_id +msgid "Current contract of the employee" +msgstr "" + +#. module: hr_contract #: model_terms:ir.ui.view,arch_db:hr_contract.hr_contract_view_kanban msgid "Delete" msgstr "" @@ -232,6 +250,11 @@ msgid "Employee Contracts" msgstr "" #. module: hr_contract +#: model:ir.model.fields,help:hr_contract.field_res_users__bank_account_id +msgid "Employee bank salary account" +msgstr "" + +#. module: hr_contract #: model:ir.model.fields,help:hr_contract.field_hr_contract__wage msgid "Employee's monthly gross wage." msgstr "" @@ -331,13 +354,13 @@ msgid "Important Messages" msgstr "" #. module: hr_contract -#: model:ir.model.fields,field_description:hr_contract.field_hr_contract__message_is_follower -msgid "Is Follower" +#: selection:hr.contract,state:0 +msgid "Incoming" msgstr "" #. module: hr_contract -#: model:ir.model.fields,field_description:hr_contract.field_hr_employee__manager -msgid "Is a Manager" +#: model:ir.model.fields,field_description:hr_contract.field_hr_contract__message_is_follower +msgid "Is Follower" msgstr "" #. module: hr_contract @@ -369,11 +392,6 @@ msgid "Last Updated on" msgstr "" #. module: hr_contract -#: model:ir.model.fields,help:hr_contract.field_hr_employee__contract_id -msgid "Latest contract of the employee" -msgstr "" - -#. module: hr_contract #: model:ir.model.fields,field_description:hr_contract.field_hr_contract__message_main_attachment_id msgid "Main Attachment" msgstr "" @@ -385,11 +403,13 @@ msgstr "" #. module: hr_contract #: model_terms:ir.ui.view,arch_db:hr_contract.hr_hr_employee_view_form2 +#: model_terms:ir.ui.view,arch_db:hr_contract.hr_user_view_form msgid "Medical Exam" msgstr "" #. module: hr_contract #: model:ir.model.fields,field_description:hr_contract.field_hr_employee__medic_exam +#: model:ir.model.fields,field_description:hr_contract.field_res_users__medic_exam msgid "Medical Examination Date" msgstr "" @@ -476,6 +496,7 @@ msgstr "" #. module: hr_contract #: selection:hr.contract,state:0 +#: model_terms:ir.ui.view,arch_db:hr_contract.hr_contract_view_search msgid "Running" msgstr "" @@ -571,6 +592,11 @@ msgid "Unread Messages Counter" msgstr "" #. module: hr_contract +#: model:ir.model,name:hr_contract.model_res_users +msgid "Users" +msgstr "" + +#. module: hr_contract #: model:ir.model.fields,field_description:hr_contract.field_hr_contract__visa_expire msgid "Visa Expire Date" msgstr "" diff --git a/addons/hr_expense/data/mail_data.xml b/addons/hr_expense/data/mail_data.xml index 06c497b4176..735771fbff7 100644 --- a/addons/hr_expense/data/mail_data.xml +++ b/addons/hr_expense/data/mail_data.xml @@ -6,7 +6,6 @@ <field name="name">Expense Approval</field> <field name="icon">fa-dollar</field> <field name="res_model_id" ref="hr_expense.model_hr_expense_sheet"/> - <field name="is_master_data">True</field> </record> <!-- default alias for expenses --> diff --git a/addons/hr_expense/i18n/hr_expense.pot b/addons/hr_expense/i18n/hr_expense.pot index 12f9d0782b9..01c681680a2 100644 --- a/addons/hr_expense/i18n/hr_expense.pot +++ b/addons/hr_expense/i18n/hr_expense.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-24 10:57+0000\n" -"PO-Revision-Date: 2018-12-24 10:57+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" #. module: hr_expense #: model_terms:ir.ui.view,arch_db:hr_expense.product_product_expense_form_view -msgid "<i class=\"text-muted oe_edit_only\">Use [Reference] as a subject prefix for incoming receipts</i>" +msgid "<i class=\"text-muted oe_edit_only\">Use this reference as a subject prefix when submitting by email.</i>" msgstr "" #. module: hr_expense @@ -138,7 +138,7 @@ msgid "Actual expense sheets, not the refused ones" msgstr "" #. module: hr_expense -#: code:addons/hr_expense/models/hr_expense.py:158 +#: code:addons/hr_expense/models/hr_expense.py:162 #, python-format msgid "Add a new expense," msgstr "" @@ -227,6 +227,7 @@ msgid "Can Reset" msgstr "" #. module: hr_expense +#: model:ir.model.fields,field_description:hr_expense.field_product_product__can_be_expensed #: model:ir.model.fields,field_description:hr_expense.field_product_template__can_be_expensed msgid "Can be Expensed" msgstr "" @@ -339,6 +340,11 @@ msgid "Date" msgstr "" #. module: hr_expense +#: model_terms:ir.ui.view,arch_db:hr_expense.hr_expense_template_register +msgid "Dear" +msgstr "" + +#. module: hr_expense #: model:ir.model.fields,field_description:hr_expense.field_res_config_settings__expense_alias_prefix msgid "Default Alias Name for Expenses" msgstr "" @@ -507,6 +513,7 @@ msgstr "" #. module: hr_expense #: model:ir.model.fields,field_description:hr_expense.field_hr_employee__expense_manager_id +#: model:ir.model.fields,field_description:hr_expense.field_res_users__expense_manager_id msgid "Expense Responsible" msgstr "" @@ -537,7 +544,6 @@ msgstr "" #. module: hr_expense #: model:ir.ui.menu,name:hr_expense.menu_hr_expense_root -#: model_terms:ir.ui.view,arch_db:hr_expense.hr_employee_view_form_inherit_expense #: model_terms:ir.ui.view,arch_db:hr_expense.hr_expense_view_form #: model_terms:ir.ui.view,arch_db:hr_expense.res_config_settings_view_form #: model_terms:ir.ui.view,arch_db:hr_expense.view_expenses_tree @@ -580,13 +586,13 @@ msgid "Expenses in Draft" msgstr "" #. module: hr_expense -#: code:addons/hr_expense/models/hr_expense.py:569 +#: code:addons/hr_expense/models/hr_expense.py:642 #, python-format msgid "Expenses must be paid by the same entity (Company or employee)." msgstr "" #. module: hr_expense -#: code:addons/hr_expense/models/hr_expense.py:624 +#: code:addons/hr_expense/models/hr_expense.py:697 #, python-format msgid "Expenses must have an expense journal specified to generate accounting entries." msgstr "" @@ -838,7 +844,7 @@ msgid "Name" msgstr "" #. module: hr_expense -#: code:addons/hr_expense/models/hr_expense.py:186 +#: code:addons/hr_expense/models/hr_expense.py:190 #, python-format msgid "New Expense Report" msgstr "" @@ -862,13 +868,13 @@ msgid "Next Activity Type" msgstr "" #. module: hr_expense -#: code:addons/hr_expense/models/hr_expense.py:244 +#: code:addons/hr_expense/models/hr_expense.py:248 #, python-format msgid "No Expense account found for the product %s (or for its category), please configure one." msgstr "" #. module: hr_expense -#: code:addons/hr_expense/models/hr_expense.py:261 +#: code:addons/hr_expense/models/hr_expense.py:265 #, python-format msgid "No Home Address found for the employee %s, please configure one." msgstr "" @@ -879,8 +885,8 @@ msgid "No approved employee expenses" msgstr "" #. module: hr_expense -#: code:addons/hr_expense/models/hr_expense.py:257 -#: code:addons/hr_expense/models/hr_expense.py:368 +#: code:addons/hr_expense/models/hr_expense.py:261 +#: code:addons/hr_expense/models/hr_expense.py:378 #, python-format msgid "No credit account found for the %s journal, please configure one." msgstr "" @@ -938,6 +944,11 @@ msgid "Number of unread messages" msgstr "" #. module: hr_expense +#: model_terms:ir.ui.view,arch_db:hr_expense.hr_expense_template_register_no_user +msgid "Odoo" +msgstr "" + +#. module: hr_expense #: model:res.groups,name:hr_expense.group_hr_expense_user msgid "Officer" msgstr "" @@ -961,14 +972,14 @@ msgid "Once your <b>Expense report</b> is ready, you can submit it to your manag msgstr "" #. module: hr_expense -#: code:addons/hr_expense/models/hr_expense.py:707 +#: code:addons/hr_expense/models/hr_expense.py:780 #, python-format msgid "Only HR Officers or the concerned employee can reset to draft." msgstr "" #. module: hr_expense -#: code:addons/hr_expense/models/hr_expense.py:668 -#: code:addons/hr_expense/models/hr_expense.py:689 +#: code:addons/hr_expense/models/hr_expense.py:741 +#: code:addons/hr_expense/models/hr_expense.py:762 #, python-format msgid "Only Managers and HR Officers can approve expenses" msgstr "" @@ -1029,7 +1040,7 @@ msgid "Planned" msgstr "" #. module: hr_expense -#: code:addons/hr_expense/models/hr_expense.py:248 +#: code:addons/hr_expense/models/hr_expense.py:252 #, python-format msgid "Please configure Default Expense account for Product expense: `property_account_expense_categ_id`." msgstr "" @@ -1045,6 +1056,11 @@ msgid "Posted" msgstr "" #. module: hr_expense +#: model_terms:ir.ui.view,arch_db:hr_expense.hr_expense_template_register_no_user +msgid "Powered by" +msgstr "" + +#. module: hr_expense #: model_terms:ir.ui.view,arch_db:hr_expense.report_expense_sheet msgid "Price" msgstr "" @@ -1055,6 +1071,11 @@ msgid "Price in Company Currency" msgstr "" #. module: hr_expense +#: model_terms:ir.ui.view,arch_db:hr_expense.hr_expense_template_register +msgid "Price:" +msgstr "" + +#. module: hr_expense #: model:ir.model.fields,field_description:hr_expense.field_hr_expense__product_id #: model_terms:ir.ui.view,arch_db:hr_expense.view_hr_expense_filter msgid "Product" @@ -1076,6 +1097,16 @@ msgid "Product Variants" msgstr "" #. module: hr_expense +#: model_terms:ir.ui.view,arch_db:hr_expense.hr_expense_template_register +msgid "Product:" +msgstr "" + +#. module: hr_expense +#: model_terms:ir.ui.view,arch_db:hr_expense.hr_expense_template_register +msgid "Product: not found" +msgstr "" + +#. module: hr_expense #: model_terms:ir.ui.view,arch_db:hr_expense.report_expense_sheet msgid "Qty" msgstr "" @@ -1195,12 +1226,17 @@ msgid "Responsible User" msgstr "" #. module: hr_expense -#: code:addons/hr_expense/models/hr_expense.py:135 +#: code:addons/hr_expense/models/hr_expense.py:139 #, python-format msgid "Selected Unit of Measure does not belong to the same category as the product Unit of Measure." msgstr "" #. module: hr_expense +#: model_terms:ir.ui.view,arch_db:hr_expense.res_config_settings_view_form +msgid "Send an email to this email alias with the receipt in attachment to create an expense in one click. If the first word of the mail subject contains the product's internal reference or the product name, the corresponding product will automatically be set. Type the expense amount in the mail subject to set it on the expense too." +msgstr "" + +#. module: hr_expense #: model:ir.actions.act_window,name:hr_expense.action_hr_expense_configuration #: model:ir.ui.menu,name:hr_expense.menu_hr_expense_global_settings msgid "Settings" @@ -1223,6 +1259,7 @@ msgid "Show all records which has next action date is before today" msgstr "" #. module: hr_expense +#: model:ir.model.fields,help:hr_expense.field_product_product__can_be_expensed #: model:ir.model.fields,help:hr_expense.field_product_template__can_be_expensed msgid "Specify whether the product can be selected in an expense." msgstr "" @@ -1298,6 +1335,11 @@ msgid "The accountant can register a payment to reimburse the employee directly. msgstr "" #. module: hr_expense +#: model_terms:ir.ui.view,arch_db:hr_expense.hr_expense_template_register +msgid "The first word of the email subject did not correspond to any product code. You'll have to set the product manually on the expense." +msgstr "" + +#. module: hr_expense #: model:ir.model.fields,help:hr_expense.field_hr_expense_sheet__journal_id msgid "The journal used when the expense is done." msgstr "" @@ -1408,10 +1450,16 @@ msgstr "" #. module: hr_expense #: model:ir.model.fields,help:hr_expense.field_hr_employee__expense_manager_id +#: model:ir.model.fields,help:hr_expense.field_res_users__expense_manager_id msgid "User responsible of expense approval. Should be Expense Manager." msgstr "" #. module: hr_expense +#: model:ir.model,name:hr_expense.model_res_users +msgid "Users" +msgstr "" + +#. module: hr_expense #: model_terms:ir.ui.view,arch_db:hr_expense.hr_expense_sheet_register_payment_view_form msgid "Validate" msgstr "" @@ -1427,6 +1475,11 @@ msgid "View Attachments" msgstr "" #. module: hr_expense +#: model_terms:ir.ui.view,arch_db:hr_expense.hr_expense_template_register +msgid "View Expense" +msgstr "" + +#. module: hr_expense #: model_terms:ir.ui.view,arch_db:hr_expense.hr_expense_view_form msgid "View Report" msgstr "" @@ -1452,66 +1505,66 @@ msgid "Website communication history" msgstr "" #. module: hr_expense -#: code:addons/hr_expense/models/hr_expense.py:676 +#: model_terms:ir.ui.view,arch_db:hr_expense.hr_expense_template_register +msgid "You can now submit it to the manager from the following link." +msgstr "" + +#. module: hr_expense +#: code:addons/hr_expense/models/hr_expense.py:749 #, python-format msgid "You can only approve your department expenses" msgstr "" #. module: hr_expense -#: code:addons/hr_expense/models/hr_expense.py:621 +#: code:addons/hr_expense/models/hr_expense.py:694 #, python-format msgid "You can only generate accounting entry for approved expense(s)." msgstr "" #. module: hr_expense -#: code:addons/hr_expense/models/hr_expense.py:697 +#: code:addons/hr_expense/models/hr_expense.py:770 #, python-format msgid "You can only refuse your department expenses" msgstr "" #. module: hr_expense -#: model_terms:ir.ui.view,arch_db:hr_expense.res_config_settings_view_form -msgid "You can setup a generic email alias to create incoming expenses easily. Write an email with the receipt in attachment to create an expense line in one click. If the mail subject contains the product's internal reference between brackets, the product will be set automatically. Type the expense amount in the mail subject to set it on the expense too." -msgstr "" - -#. module: hr_expense -#: code:addons/hr_expense/models/hr_expense.py:576 +#: code:addons/hr_expense/models/hr_expense.py:649 #, python-format msgid "You cannot add expenses of another employee." msgstr "" #. module: hr_expense -#: code:addons/hr_expense/models/hr_expense.py:673 +#: code:addons/hr_expense/models/hr_expense.py:746 #, python-format msgid "You cannot approve your own expenses" msgstr "" #. module: hr_expense -#: code:addons/hr_expense/models/hr_expense.py:145 +#: code:addons/hr_expense/models/hr_expense.py:149 #, python-format msgid "You cannot delete a posted or approved expense." msgstr "" #. module: hr_expense -#: code:addons/hr_expense/models/hr_expense.py:588 +#: code:addons/hr_expense/models/hr_expense.py:661 #, python-format msgid "You cannot delete a posted or paid expense." msgstr "" #. module: hr_expense -#: code:addons/hr_expense/models/hr_expense.py:694 +#: code:addons/hr_expense/models/hr_expense.py:767 #, python-format msgid "You cannot refuse your own expenses" msgstr "" #. module: hr_expense -#: code:addons/hr_expense/models/hr_expense.py:182 +#: code:addons/hr_expense/models/hr_expense.py:186 #, python-format msgid "You cannot report expenses for different employees in the same report." msgstr "" #. module: hr_expense -#: code:addons/hr_expense/models/hr_expense.py:180 +#: code:addons/hr_expense/models/hr_expense.py:184 #, python-format msgid "You cannot report twice the same line!" msgstr "" @@ -1522,6 +1575,11 @@ msgid "Your Expense" msgstr "" #. module: hr_expense +#: model_terms:ir.ui.view,arch_db:hr_expense.hr_expense_template_register +msgid "Your expense has been successfully registered." +msgstr "" + +#. module: hr_expense #: model_terms:ir.ui.view,arch_db:hr_expense.product_product_expense_form_view msgid "e.g. Lunch" msgstr "" @@ -1548,7 +1606,7 @@ msgid "km" msgstr "" #. module: hr_expense -#: code:addons/hr_expense/models/hr_expense.py:159 +#: code:addons/hr_expense/models/hr_expense.py:163 #, python-format msgid "or send receipts by email to %s." msgstr "" diff --git a/addons/hr_fleet/i18n/hr_fleet.pot b/addons/hr_fleet/i18n/hr_fleet.pot index 5ba013868a7..addc5a2b62b 100644 --- a/addons/hr_fleet/i18n/hr_fleet.pot +++ b/addons/hr_fleet/i18n/hr_fleet.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-24 10:58+0000\n" -"PO-Revision-Date: 2018-12-24 10:58+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -23,12 +23,14 @@ msgstr "" #. module: hr_fleet #: model:ir.model.fields,field_description:hr_fleet.field_hr_employee__employee_cars_count +#: model:ir.model.fields,field_description:hr_fleet.field_res_users__employee_cars_count msgid "Cars" msgstr "" #. module: hr_fleet +#: model_terms:ir.ui.view,arch_db:hr_fleet.res_users_view_form_preferences #: model_terms:ir.ui.view,arch_db:hr_fleet.view_employee_form -msgid "Claim Report" +msgid "Claim Car Report" msgstr "" #. module: hr_fleet @@ -47,11 +49,17 @@ msgid "Number of Attachments" msgstr "" #. module: hr_fleet +#: model_terms:ir.ui.view,arch_db:hr_fleet.res_users_view_form_preferences #: model_terms:ir.ui.view,arch_db:hr_fleet.view_employee_form msgid "This report will contain only PDF files. If you want all documents, please go on vehicle page. Do you want to proceed?" msgstr "" #. module: hr_fleet +#: model:ir.model,name:hr_fleet.model_res_users +msgid "Users" +msgstr "" + +#. module: hr_fleet #: model_terms:ir.ui.view,arch_db:hr_fleet.fleet_vehicle_assignation_log_view_list msgid "View Attachments" msgstr "" diff --git a/addons/hr_holidays/data/mail_data.xml b/addons/hr_holidays/data/mail_data.xml index a57701e195c..2beaae128f1 100644 --- a/addons/hr_holidays/data/mail_data.xml +++ b/addons/hr_holidays/data/mail_data.xml @@ -6,13 +6,11 @@ <field name="name">Time Off Approval</field> <field name="icon">fa-sun-o</field> <field name="res_model_id" ref="hr_holidays.model_hr_leave"/> - <field name="is_master_data">True</field> </record> <record id="mail_act_leave_second_approval" model="mail.activity.type"> <field name="name">Time Off Second Approve</field> <field name="icon">fa-sun-o</field> <field name="res_model_id" ref="hr_holidays.model_hr_leave"/> - <field name="is_master_data">True</field> </record> <!-- Leave specific activities --> @@ -20,13 +18,11 @@ <field name="name">Allocation Approval</field> <field name="icon">fa-sun-o</field> <field name="res_model_id" ref="hr_holidays.model_hr_leave_allocation"/> - <field name="is_master_data">True</field> </record> <record id="mail_act_leave_allocation_second_approval" model="mail.activity.type"> <field name="name">Allocation Second Approve</field> <field name="icon">fa-sun-o</field> <field name="res_model_id" ref="hr_holidays.model_hr_leave_allocation"/> - <field name="is_master_data">True</field> </record> <!-- Holidays-related subtypes for messaging / Chatter --> @@ -58,4 +54,4 @@ <field name="description">Allocation Request</field> </record> </data> -</odoo>
\ No newline at end of file +</odoo> diff --git a/addons/hr_holidays/i18n/hr_holidays.pot b/addons/hr_holidays/i18n/hr_holidays.pot index 0836ffa40a3..109c7fea326 100644 --- a/addons/hr_holidays/i18n/hr_holidays.pot +++ b/addons/hr_holidays/i18n/hr_holidays.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:59+0000\n" -"PO-Revision-Date: 2019-01-16 07:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" #. module: hr_holidays #: model:ir.model.fields,help:hr_holidays.field_hr_leave_type__allocation_type -msgid " Fixed by HR: allocated by HR and cannot be bypassed; users can request leaves; Fixed by HR + allocation request: allocated by HR and users can request leaves and allocations; No allocation: no allocation by default, users can freely request leaves;" +msgid " No Allocation Needed: no allocation by default, users can freely request time off; Free Allocation Request: allocated by HR and users can request time off and allocations; Allocated by HR only: allocated by HR and cannot be bypassed; users can request time off;" msgstr "" #. module: hr_holidays @@ -46,19 +46,19 @@ msgid "!important; font-size: 8px; min-width: 18px\">" msgstr "" #. module: hr_holidays -#: code:addons/hr_holidays/models/hr_leave_type.py:216 +#: code:addons/hr_holidays/models/hr_leave_type.py:270 #, python-format msgid "%g remaining out of %g" msgstr "" #. module: hr_holidays -#: code:addons/hr_holidays/models/hr_leave.py:433 +#: code:addons/hr_holidays/models/hr_leave.py:457 #, python-format msgid "%s : %.2f day(s)" msgstr "" #. module: hr_holidays -#: code:addons/hr_holidays/models/hr_leave.py:445 +#: code:addons/hr_holidays/models/hr_leave.py:469 #, python-format msgid "%s on %s :%.2f day(s)" msgstr "" @@ -404,7 +404,23 @@ msgstr "" #. module: hr_holidays #: model_terms:ir.ui.view,arch_db:hr_holidays.hr_leave_allocation_view_form_manager -msgid "<span class=\"ml8\">of leaves every</span>" +msgid "<span class=\"ml8\">of time off every</span>" +msgstr "" + +#. module: hr_holidays +#: model_terms:ir.ui.view,arch_db:hr_holidays.res_users_view_form +#: model_terms:ir.ui.view,arch_db:hr_holidays.view_employee_form_leave_inherit +msgid "<span class=\"o_stat_text\">\n" +" Absent Until\n" +" </span>" +msgstr "" + +#. module: hr_holidays +#: model_terms:ir.ui.view,arch_db:hr_holidays.res_users_view_form +#: model_terms:ir.ui.view,arch_db:hr_holidays.view_employee_form_leave_inherit +msgid "<span class=\"o_stat_text\">\n" +" Time Off\n" +" </span>" msgstr "" #. module: hr_holidays @@ -414,7 +430,7 @@ msgstr "" #. module: hr_holidays #: model_terms:ir.ui.view,arch_db:hr_holidays.edit_holiday_status_form -msgid "<span class=\"o_stat_text\">Group Leaves</span>" +msgid "<span class=\"o_stat_text\">Group Time Off</span>" msgstr "" #. module: hr_holidays @@ -445,15 +461,21 @@ msgid "<strong>Departments and Employees</strong>" msgstr "" #. module: hr_holidays -#: code:addons/hr_holidays/models/hr_leave.py:535 -#: code:addons/hr_holidays/models/hr_leave_allocation.py:365 +#: code:addons/hr_holidays/models/hr_leave.py:564 #, python-format msgid "A leave cannot be duplicated." msgstr "" #. module: hr_holidays +#: code:addons/hr_holidays/models/hr_leave_allocation.py:367 +#, python-format +msgid "A time off cannot be duplicated." +msgstr "" + +#. module: hr_holidays #: model:ir.model.fields,field_description:hr_holidays.field_hr_employee__show_leaves -msgid "Able to see Remaining Leaves" +#: model:ir.model.fields,field_description:hr_holidays.field_res_users__show_leaves +msgid "Able to see Remaining Time Off" msgstr "" #. module: hr_holidays @@ -477,12 +499,19 @@ msgid "Absent Employees" msgstr "" #. module: hr_holidays -#: model:ir.model.fields,field_description:hr_holidays.field_hr_employee__is_absent_totay +#: model:ir.model.fields,field_description:hr_holidays.field_hr_employee__is_absent +#: model:ir.model.fields,field_description:hr_holidays.field_res_users__is_absent #: model_terms:ir.ui.view,arch_db:hr_holidays.hr_employee_view_search msgid "Absent Today" msgstr "" #. module: hr_holidays +#: model_terms:ir.ui.view,arch_db:hr_holidays.res_users_view_form +#: model_terms:ir.ui.view,arch_db:hr_holidays.view_employee_form_leave_inherit +msgid "Absent Until" +msgstr "" + +#. module: hr_holidays #: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_allocation__accrual msgid "Accrual" msgstr "" @@ -496,7 +525,7 @@ msgstr "" #: model:ir.actions.server,name:hr_holidays.hr_leave_allocation_cron_accrual_ir_actions_server #: model:ir.cron,cron_name:hr_holidays.hr_leave_allocation_cron_accrual #: model:ir.cron,name:hr_holidays.hr_leave_allocation_cron_accrual -msgid "Accrual Leave: Updates the number of leaves" +msgid "Accrual Time Off: Updates the number of time off" msgstr "" #. module: hr_holidays @@ -518,7 +547,7 @@ msgstr "" #. module: hr_holidays #: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter #: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter_report -msgid "Active Leaves" +msgid "Active Time Off" msgstr "" #. module: hr_holidays @@ -553,7 +582,7 @@ msgstr "" #. module: hr_holidays #: model:ir.model.fields,help:hr_holidays.field_hr_leave_type__validity_start -msgid "Adding validity to types of leaves so that it cannot be selected outside this time period" +msgid "Adding validity to types of time off so that it cannot be selected outside this time period" msgstr "" #. module: hr_holidays @@ -573,7 +602,7 @@ msgstr "" #. module: hr_holidays #: model:ir.actions.act_window,name:hr_holidays.action_hr_holidays_dashboard -msgid "All Leaves" +msgid "All Time Off" msgstr "" #. module: hr_holidays @@ -582,6 +611,11 @@ msgid "Allocated Days" msgstr "" #. module: hr_holidays +#: selection:hr.leave.type,allocation_type:0 +msgid "Allocated by HR only" +msgstr "" + +#. module: hr_holidays #: model_terms:ir.ui.view,arch_db:hr_holidays.edit_holiday_status_form #: model:mail.message.subtype,name:hr_holidays.mt_leave_allocation msgid "Allocation" @@ -612,6 +646,7 @@ msgid "Allocation Request" msgstr "" #. module: hr_holidays +#: model:ir.ui.menu,name:hr_holidays.menu_open_allocation #: model_terms:ir.ui.view,arch_db:hr_holidays.hr_department_view_kanban #: model_terms:ir.ui.view,arch_db:hr_holidays.hr_leave_allocation_view_tree msgid "Allocation Requests" @@ -640,11 +675,6 @@ msgid "Allocations" msgstr "" #. module: hr_holidays -#: model:ir.ui.menu,name:hr_holidays.menu_open_allocation -msgid "Allocations Requests" -msgstr "" - -#. module: hr_holidays #: model:ir.model.fields,help:hr_holidays.field_hr_leave_allocation__holiday_type msgid "Allow to create requests in batchs:\n" "- By Employee: for a specific employee\n" @@ -659,18 +689,13 @@ msgid "Analyze from" msgstr "" #. module: hr_holidays -#: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_type__double_validation -msgid "Apply Double Validation" -msgstr "" - -#. module: hr_holidays #: model_terms:ir.ui.view,arch_db:hr_holidays.view_evaluation_report_graph msgid "Appraisal Analysis" msgstr "" #. module: hr_holidays -#: code:addons/hr_holidays/models/hr_leave.py:796 -#: code:addons/hr_holidays/models/hr_leave_allocation.py:573 +#: code:addons/hr_holidays/models/hr_leave.py:858 +#: code:addons/hr_holidays/models/hr_leave_allocation.py:581 #: model_terms:ir.ui.view,arch_db:hr_holidays.hr_leave_allocation_view_form_manager #: model_terms:ir.ui.view,arch_db:hr_holidays.hr_leave_allocation_view_kanban #: model_terms:ir.ui.view,arch_db:hr_holidays.hr_leave_allocation_view_tree @@ -697,13 +722,18 @@ msgid "Approved Allocations" msgstr "" #. module: hr_holidays +#: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter_report +msgid "Approved Requests" +msgstr "" + +#. module: hr_holidays #: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter -msgid "Approved Leaves" +msgid "Approved Time Off" msgstr "" #. module: hr_holidays -#: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter_report -msgid "Approved Requests" +#: model_terms:ir.ui.view,arch_db:hr_holidays.view_holidays_status_filter +msgid "Archived" msgstr "" #. module: hr_holidays @@ -862,14 +892,19 @@ msgid "Confirmed" msgstr "" #. module: hr_holidays +#: model:ir.model,name:hr_holidays.model_res_partner +msgid "Contact" +msgstr "" + +#. module: hr_holidays #: model_terms:ir.actions.act_window,help:hr_holidays.hr_leave_allocation_action_approve_department -msgid "Create a new leave allocation" +msgid "Create a new time off allocation" msgstr "" #. module: hr_holidays #: model_terms:ir.actions.act_window,help:hr_holidays.hr_leave_allocation_action_all #: model_terms:ir.actions.act_window,help:hr_holidays.hr_leave_allocation_action_my -msgid "Create a new leave allocation request" +msgid "Create a new time off allocation request" msgstr "" #. module: hr_holidays @@ -878,8 +913,7 @@ msgstr "" #: model_terms:ir.actions.act_window,help:hr_holidays.hr_leave_action_my #: model_terms:ir.actions.act_window,help:hr_holidays.hr_leave_action_new_request #: model_terms:ir.actions.act_window,help:hr_holidays.hr_leave_action_payroll -#: model_terms:ir.actions.act_window,help:hr_holidays.open_company_allocation -msgid "Create a new leave request" +msgid "Create a new time off request" msgstr "" #. module: hr_holidays @@ -902,12 +936,12 @@ msgstr "" #. module: hr_holidays #: model:ir.model.fields,field_description:hr_holidays.field_hr_employee__current_leave_state -msgid "Current Leave Status" +msgid "Current Time Off Status" msgstr "" #. module: hr_holidays #: model:ir.model.fields,field_description:hr_holidays.field_hr_employee__current_leave_id -msgid "Current Leave Type" +msgid "Current Time Off Type" msgstr "" #. module: hr_holidays @@ -923,6 +957,12 @@ msgid "Custom Hours" msgstr "" #. module: hr_holidays +#: model:ir.actions.act_window,name:hr_holidays.hr_leave_action_new_request +#: model:ir.ui.menu,name:hr_holidays.hr_leave_menu_new_request +msgid "Dashboard" +msgstr "" + +#. module: hr_holidays #: model:ir.model.fields,field_description:hr_holidays.field_hr_leave__request_date_from_period msgid "Date Period Start" msgstr "" @@ -972,7 +1012,7 @@ msgstr "" #. module: hr_holidays #: model:ir.actions.act_window,name:hr_holidays.hr_leave_action_action_approve_department -msgid "Department Leaves" +msgid "Department Time Off" msgstr "" #. module: hr_holidays @@ -991,6 +1031,11 @@ msgid "Description" msgstr "" #. module: hr_holidays +#: model:ir.model,name:hr_holidays.model_mail_channel +msgid "Discussion channel" +msgstr "" + +#. module: hr_holidays #: model:ir.model.fields,field_description:hr_holidays.field_hr_holidays_summary_dept__display_name #: model:ir.model.fields,field_description:hr_holidays.field_hr_holidays_summary_employee__display_name #: model:ir.model.fields,field_description:hr_holidays.field_hr_leave__display_name @@ -1020,6 +1065,7 @@ msgstr "" #. module: hr_holidays #: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_allocation__number_of_days_display +#: model_terms:ir.ui.view,arch_db:hr_holidays.hr_leave_view_form msgid "Duration (days)" msgstr "" @@ -1050,7 +1096,7 @@ msgstr "" #. module: hr_holidays #: model_terms:ir.ui.view,arch_db:hr_holidays.hr_leave_view_kanban -msgid "Edit Leave" +msgid "Edit Time Off" msgstr "" #. module: hr_holidays @@ -1080,25 +1126,24 @@ msgstr "" #: model:ir.model.fields,field_description:hr_holidays.field_hr_leave__date_to #: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_allocation__date_to #: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_report__date_to -#: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_type__validity_stop msgid "End Date" msgstr "" #. module: hr_holidays -#: code:addons/hr_holidays/models/hr_leave_type.py:97 +#: code:addons/hr_holidays/models/hr_leave_type.py:100 #, python-format msgid "End of validity period should be greater than start of validity period" msgstr "" #. module: hr_holidays #: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_leave_allocation_filter -msgid "Filters only on allocations that belong to an leave type that is 'active' (active field is True)" +msgid "Filters only on allocations that belong to an time off type that is 'active' (active field is True)" msgstr "" #. module: hr_holidays #: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter #: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter_report -msgid "Filters only on requests that belong to an leave type that is 'active' (active field is True)" +msgid "Filters only on requests that belong to an time off type that is 'active' (active field is True)" msgstr "" #. module: hr_holidays @@ -1108,16 +1153,6 @@ msgid "First Approval" msgstr "" #. module: hr_holidays -#: selection:hr.leave.type,allocation_type:0 -msgid "Fixed by HR" -msgstr "" - -#. module: hr_holidays -#: selection:hr.leave.type,allocation_type:0 -msgid "Fixed by HR + allocation request" -msgstr "" - -#. module: hr_holidays #: model:ir.model.fields,field_description:hr_holidays.field_hr_leave__message_follower_ids #: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_allocation__message_follower_ids msgid "Followers" @@ -1142,8 +1177,14 @@ msgid "Form content is missing, this report cannot be printed." msgstr "" #. module: hr_holidays +#: selection:hr.leave.type,allocation_type:0 +msgid "Free Allocation Request" +msgstr "" + +#. module: hr_holidays #: model:ir.model.fields,field_description:hr_holidays.field_hr_holidays_summary_dept__date_from #: model:ir.model.fields,field_description:hr_holidays.field_hr_holidays_summary_employee__date_from +#: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_type__validity_start #: model_terms:ir.ui.view,arch_db:hr_holidays.hr_leave_view_form msgid "From" msgstr "" @@ -1161,7 +1202,7 @@ msgstr "" #. module: hr_holidays #: model:ir.model.fields,help:hr_holidays.field_hr_leave__payslip_status -msgid "Green this button when the leave has been taken into account in the payslip." +msgid "Green this button when the time off has been taken into account in the payslip." msgstr "" #. module: hr_holidays @@ -1173,7 +1214,7 @@ msgstr "" #. module: hr_holidays #: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_type__group_days_leave -msgid "Group Leaves" +msgid "Group Time Off" msgstr "" #. module: hr_holidays @@ -1188,15 +1229,16 @@ msgstr "" #. module: hr_holidays #: model:ir.model,name:hr_holidays.model_hr_holidays_summary_dept -msgid "HR Leaves Summary Report By Department" +msgid "HR Time Off Summary Report By Department" msgstr "" #. module: hr_holidays #: model:ir.model,name:hr_holidays.model_hr_holidays_summary_employee -msgid "HR Leaves Summary Report By Employee" +msgid "HR Time Off Summary Report By Employee" msgstr "" #. module: hr_holidays +#: selection:hr.leave.type,request_unit:0 #: model:ir.model.fields,field_description:hr_holidays.field_hr_leave__request_unit_half msgid "Half Day" msgstr "" @@ -1273,7 +1315,7 @@ msgstr "" #. module: hr_holidays #: model:ir.model.fields,help:hr_holidays.field_hr_leave_type__active -msgid "If the active field is set to false, it will allow you to hide the leave type without removing it." +msgid "If the active field is set to false, it will allow you to hide the time off type without removing it." msgstr "" #. module: hr_holidays @@ -1348,212 +1390,16 @@ msgid "Lavender" msgstr "" #. module: hr_holidays -#: selection:hr.leave.type,time_type:0 -#: model:ir.model,name:hr_holidays.model_hr_leave -#: model:mail.message.subtype,name:hr_holidays.mt_leave -msgid "Leave" -msgstr "" - -#. module: hr_holidays -#: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_type__leave_notif_subtype_id -msgid "Leave Notification Subtype" -msgstr "" - -#. module: hr_holidays -#: selection:hr.leave.report,leave_type:0 #: model:ir.model.fields,field_description:hr_holidays.field_resource_calendar_leaves__holiday_id -#: model_terms:ir.ui.view,arch_db:hr_holidays.hr_leave_view_calendar -#: model_terms:ir.ui.view,arch_db:hr_holidays.hr_leave_view_form -#: model:mail.message.subtype,description:hr_holidays.mt_leave msgid "Leave Request" msgstr "" #. module: hr_holidays -#: model_terms:ir.ui.view,arch_db:hr_holidays.hr_department_view_kanban -#: model_terms:ir.ui.view,arch_db:hr_holidays.hr_leave_view_tree -msgid "Leave Requests" -msgstr "" - -#. module: hr_holidays -#: model:ir.model.fields,field_description:hr_holidays.field_hr_employee__leave_manager_id -msgid "Leave Responsible" -msgstr "" - -#. module: hr_holidays -#: model:ir.model,name:hr_holidays.model_hr_leave_report -msgid "Leave Summary / Report" -msgstr "" - -#. module: hr_holidays -#: model:ir.model,name:hr_holidays.model_hr_leave_type -#: model:ir.model.fields,field_description:hr_holidays.field_hr_holidays_summary_dept__holiday_type -#: model:ir.model.fields,field_description:hr_holidays.field_hr_leave__holiday_status_id -#: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_allocation__holiday_status_id #: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_report__holiday_status_id -#: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_type__name -#: model_terms:ir.ui.view,arch_db:hr_holidays.edit_holiday_status_form -#: model_terms:ir.ui.view,arch_db:hr_holidays.report_holidayssummary -#: model_terms:ir.ui.view,arch_db:hr_holidays.view_holiday_status_normal_tree msgid "Leave Type" msgstr "" #. module: hr_holidays -#: model:ir.actions.act_window,name:hr_holidays.open_view_holiday_status -#: model:ir.ui.menu,name:hr_holidays.hr_holidays_status_menu_configuration -#: model_terms:ir.ui.view,arch_db:hr_holidays.view_holidays_status_filter -msgid "Leave Types" -msgstr "" - -#. module: hr_holidays -#: code:addons/hr_holidays/models/hr_leave.py:642 -#: code:addons/hr_holidays/models/hr_leave_allocation.py:421 -#, python-format -msgid "Leave request must be confirmed (\"To Approve\") in order to approve it." -msgstr "" - -#. module: hr_holidays -#: code:addons/hr_holidays/models/hr_leave.py:655 -#: code:addons/hr_holidays/models/hr_leave_allocation.py:435 -#, python-format -msgid "Leave request must be confirmed in order to approve it." -msgstr "" - -#. module: hr_holidays -#: code:addons/hr_holidays/models/hr_leave.py:690 -#: code:addons/hr_holidays/models/hr_leave_allocation.py:473 -#, python-format -msgid "Leave request must be confirmed or validated in order to refuse it." -msgstr "" - -#. module: hr_holidays -#: code:addons/hr_holidays/models/hr_leave.py:632 -#: code:addons/hr_holidays/models/hr_leave_allocation.py:411 -#, python-format -msgid "Leave request must be in Draft state (\"To Submit\") in order to confirm it." -msgstr "" - -#. module: hr_holidays -#: code:addons/hr_holidays/models/hr_leave.py:616 -#, python-format -msgid "Leave request state must be \"Refused\" or \"To Approve\" in order to be reset to draft." -msgstr "" - -#. module: hr_holidays -#: code:addons/hr_holidays/models/hr_leave_allocation.py:395 -#, python-format -msgid "Leave request state must be \"Refused\" or \"To Approve\" in order to reset to Draft." -msgstr "" - -#. module: hr_holidays -#: model:ir.model.fields,field_description:hr_holidays.field_hr_department__leave_to_approve_count -msgid "Leave to Approve" -msgstr "" - -#. module: hr_holidays -#: model:ir.actions.act_window,name:hr_holidays.act_hr_employee_holiday_request -#: model:ir.actions.act_window,name:hr_holidays.hr_leave_action_all -#: model:ir.ui.menu,name:hr_holidays.menu_hr_holidays_root -#: model:ir.ui.menu,name:hr_holidays.menu_open_department_leave_approve -#: model:ir.ui.menu,name:hr_holidays.menu_open_employee_leave -#: model_terms:ir.ui.view,arch_db:hr_holidays.hr_department_view_kanban -#: model_terms:ir.ui.view,arch_db:hr_holidays.view_employee_form_leave_inherit -msgid "Leaves" -msgstr "" - -#. module: hr_holidays -#: model:ir.model,name:hr_holidays.model_hr_leave_allocation -msgid "Leaves Allocation" -msgstr "" - -#. module: hr_holidays -#: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_type__leaves_taken -msgid "Leaves Already Taken" -msgstr "" - -#. module: hr_holidays -#: model:ir.actions.act_window,name:hr_holidays.action_hr_available_holidays_report -#: model:ir.actions.act_window,name:hr_holidays.hr_leave_action_action_department -#: model:ir.ui.menu,name:hr_holidays.menu_hr_available_holidays_report_tree -msgid "Leaves Analysis" -msgstr "" - -#. module: hr_holidays -#: model:mail.activity.type,name:hr_holidays.mail_act_leave_approval -msgid "Leaves Approval" -msgstr "" - -#. module: hr_holidays -#: model_terms:ir.ui.view,arch_db:hr_holidays.view_employee_form_leave_inherit -msgid "Leaves Left" -msgstr "" - -#. module: hr_holidays -#: model:ir.actions.act_window,name:hr_holidays.hr_leave_action_my -#: model:ir.actions.act_window,name:hr_holidays.hr_leave_action_payroll -#: model:ir.ui.menu,name:hr_holidays.hr_leave_menu_my -msgid "Leaves Requests" -msgstr "" - -#. module: hr_holidays -#: model:mail.activity.type,name:hr_holidays.mail_act_leave_second_approval -msgid "Leaves Second Approve" -msgstr "" - -#. module: hr_holidays -#: model:ir.actions.act_window,name:hr_holidays.action_hr_holidays_summary_employee -#: model:ir.actions.act_window,name:hr_holidays.open_company_allocation -#: model:ir.actions.report,name:hr_holidays.action_report_holidayssummary -#: model:ir.actions.report,name:hr_holidays.action_report_holidayssummary2 -#: model_terms:ir.ui.view,arch_db:hr_holidays.report_holidayssummary -#: model_terms:ir.ui.view,arch_db:hr_holidays.view_holiday_graph -#: model_terms:ir.ui.view,arch_db:hr_holidays.view_holiday_pivot -#: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_summary_employee -msgid "Leaves Summary" -msgstr "" - -#. module: hr_holidays -#: model_terms:ir.ui.view,arch_db:hr_holidays.hr_holiday_status_view_kanban -msgid "Leaves Taken:" -msgstr "" - -#. module: hr_holidays -#: model:ir.actions.act_window,name:hr_holidays.action_hr_holidays_summary_dept -#: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_summary_dept -msgid "Leaves by Department" -msgstr "" - -#. module: hr_holidays -#: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter_report -#: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_leave_allocation_filter -msgid "Leaves of Your Team Member" -msgstr "" - -#. module: hr_holidays -#: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter -msgid "Leaves of Your Team Members" -msgstr "" - -#. module: hr_holidays -#: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter -msgid "Leaves of people you are manager of" -msgstr "" - -#. module: hr_holidays -#: model:ir.ui.menu,name:hr_holidays.hr_holidays_menu_manager_payroll_to_report -msgid "Leaves to report" -msgstr "" - -#. module: hr_holidays -#: model_terms:ir.ui.view,arch_db:hr_holidays.report_holidayssummary -msgid "Leaves." -msgstr "" - -#. module: hr_holidays -#: model:hr.leave.type,name:hr_holidays.holiday_status_cl -msgid "Legal Leaves 2018" -msgstr "" - -#. module: hr_holidays #: selection:hr.leave.type,color_name:0 msgid "Light Blue" msgstr "" @@ -1620,7 +1466,7 @@ msgstr "" #. module: hr_holidays #: model_terms:ir.ui.view,arch_db:hr_holidays.hr_holiday_status_view_kanban -msgid "Max Leaves:" +msgid "Max Time Off:" msgstr "" #. module: hr_holidays @@ -1630,12 +1476,12 @@ msgstr "" #. module: hr_holidays #: model:ir.model.fields,help:hr_holidays.field_hr_leave_type__remaining_leaves -msgid "Maximum Leaves Allowed - Leaves Already Taken" +msgid "Maximum Time Off Allowed - Time Off Already Taken" msgstr "" #. module: hr_holidays #: model:ir.model.fields,help:hr_holidays.field_hr_leave_type__virtual_remaining_leaves -msgid "Maximum Leaves Allowed - Leaves Already Taken - Leaves Waiting Approval" +msgid "Maximum Time Off Allowed - Time Off Already Taken - Time Off Waiting Approval" msgstr "" #. module: hr_holidays @@ -1703,30 +1549,30 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter #: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter_report #: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_leave_allocation_filter -msgid "My Department Leaves" +msgid "My Department Time Off" msgstr "" #. module: hr_holidays -#: model:ir.ui.menu,name:hr_holidays.menu_hr_holidays_my_leaves -#: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter -msgid "My Leaves" +#: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter_report +msgid "My Requests" msgstr "" #. module: hr_holidays -#: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter_report -msgid "My Requests" +#: model:ir.ui.menu,name:hr_holidays.menu_hr_holidays_dashboard +msgid "My Team" msgstr "" #. module: hr_holidays #: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter #: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter_report #: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_leave_allocation_filter -msgid "My Team Leaves" +msgid "My Team Time Off" msgstr "" #. module: hr_holidays -#: model:ir.ui.menu,name:hr_holidays.menu_hr_holidays_dashboard -msgid "My Team" +#: model:ir.ui.menu,name:hr_holidays.menu_hr_holidays_my_leaves +#: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter +msgid "My Time Off" msgstr "" #. module: hr_holidays @@ -1735,9 +1581,17 @@ msgid "New" msgstr "" #. module: hr_holidays -#: model:ir.actions.act_window,name:hr_holidays.hr_leave_action_new_request -#: model:ir.ui.menu,name:hr_holidays.hr_leave_menu_new_request -msgid "New Request" +#. openerp-web +#: code:addons/hr_holidays/static/src/js/time_off_calendar.js:59 +#, python-format +msgid "New Allocation Request" +msgstr "" + +#. module: hr_holidays +#. openerp-web +#: code:addons/hr_holidays/static/src/js/time_off_calendar.js:58 +#, python-format +msgid "New Time Off Request" msgstr "" #. module: hr_holidays @@ -1759,13 +1613,13 @@ msgid "Next Activity Type" msgstr "" #. module: hr_holidays -#: selection:hr.leave.type,validation_type:0 -msgid "No Validation" +#: selection:hr.leave.type,allocation_type:0 +msgid "No Allocation Needed" msgstr "" #. module: hr_holidays -#: selection:hr.leave.type,allocation_type:0 -msgid "No allocation" +#: selection:hr.leave.type,validation_type:0 +msgid "No Validation" msgstr "" #. module: hr_holidays @@ -1789,17 +1643,17 @@ msgstr "" #. module: hr_holidays #: model:ir.model.fields,field_description:hr_holidays.field_hr_employee__leaves_count -msgid "Number of Leaves" +msgid "Number of Time Off" msgstr "" #. module: hr_holidays -#: model:ir.model.fields,help:hr_holidays.field_hr_leave__number_of_days -msgid "Number of days of the leave request according to your working schedule." +#: model:ir.model.fields,help:hr_holidays.field_hr_leave__number_of_days_display +msgid "Number of days of the time off request according to your working schedule. Used for interface." msgstr "" #. module: hr_holidays -#: model:ir.model.fields,help:hr_holidays.field_hr_leave__number_of_days_display -msgid "Number of days of the leave request. Used for interface." +#: model:ir.model.fields,help:hr_holidays.field_hr_leave__number_of_days +msgid "Number of days of the time off request. Used in the calculation. To manually correct the duration, use this field." msgstr "" #. module: hr_holidays @@ -1810,7 +1664,7 @@ msgstr "" #. module: hr_holidays #: model:ir.model.fields,help:hr_holidays.field_hr_leave__number_of_hours_display -msgid "Number of hours of the leave request according to your working schedule. Used for interface." +msgid "Number of hours of the time off request according to your working schedule. Used for interface." msgstr "" #. module: hr_holidays @@ -1848,50 +1702,69 @@ msgstr "" #. module: hr_holidays #: model:ir.model.fields,help:hr_holidays.field_hr_leave_type__categ_id -msgid "Once a leave is validated, Odoo will create a corresponding meeting of this type in the calendar." +msgid "Once a time off is validated, Odoo will create a corresponding meeting of this type in the calendar." msgstr "" #. module: hr_holidays #: model_terms:ir.actions.act_window,help:hr_holidays.hr_leave_action_my #: model_terms:ir.actions.act_window,help:hr_holidays.hr_leave_action_new_request #: model_terms:ir.actions.act_window,help:hr_holidays.hr_leave_action_payroll -msgid "Once you have recorded your leave request, it will be sent\n" -" to a manager for validation. Be sure to set the right leave\n" -" type (recuperation, legal leaves, sickness) and the exact\n" -" number of open days related to your leave." +msgid "Once a time off request is posted, your manager is notified for validation." +msgstr "" + +#. module: hr_holidays +#. openerp-web +#: code:addons/hr_holidays/static/src/xml/discuss.xml:5 +#, python-format +msgid "Online" +msgstr "" + +#. module: hr_holidays +#: code:addons/hr_holidays/models/hr_leave.py:755 +#, python-format +msgid "Only a Team Leader, Time Off Officer or Manager can approve or refuse time off requests." +msgstr "" + +#. module: hr_holidays +#: code:addons/hr_holidays/models/hr_leave.py:773 +#, python-format +msgid "Only a Time Off Manager can approve its own requests." msgstr "" #. module: hr_holidays -#: code:addons/hr_holidays/models/hr_leave.py:728 -#: code:addons/hr_holidays/models/hr_leave_allocation.py:507 +#: code:addons/hr_holidays/models/hr_leave.py:765 #, python-format -msgid "Only a Leave Manager can approve its own requests." +msgid "Only a Time Off Manager can reset other people time off." msgstr "" #. module: hr_holidays -#: code:addons/hr_holidays/models/hr_leave.py:717 -#: code:addons/hr_holidays/models/hr_leave_allocation.py:496 +#: code:addons/hr_holidays/models/hr_leave_allocation.py:509 #, python-format -msgid "Only a Leave Manager can reset other people leaves." +msgid "Only a time off Manager can approve its own requests." msgstr "" #. module: hr_holidays -#: code:addons/hr_holidays/models/hr_leave_allocation.py:500 +#: code:addons/hr_holidays/models/hr_leave_allocation.py:498 #, python-format -msgid "Only a Leave Officer or Manager can approve or refuse leave requests." +msgid "Only a time off Manager can reset other people time off." msgstr "" #. module: hr_holidays -#: code:addons/hr_holidays/models/hr_leave.py:721 +#: code:addons/hr_holidays/models/hr_leave_allocation.py:502 #, python-format -msgid "Only a Team Leader, Leave Officer or Manager can approve or refuse leave requests." +msgid "Only a time off Officer or Manager can approve or refuse time off requests." msgstr "" #. module: hr_holidays -#: code:addons/hr_holidays/models/hr_leave.py:737 -#: code:addons/hr_holidays/models/hr_leave_allocation.py:516 +#: code:addons/hr_holidays/models/hr_leave.py:789 #, python-format -msgid "Only an Leave Manager can apply the second approval on leave requests." +msgid "Only an Time Off Manager can apply the second approval on time off requests." +msgstr "" + +#. module: hr_holidays +#: code:addons/hr_holidays/models/hr_leave_allocation.py:518 +#, python-format +msgid "Only an time off Manager can apply the second approval on time off requests." msgstr "" #. module: hr_holidays @@ -1905,6 +1778,18 @@ msgid "Other" msgstr "" #. module: hr_holidays +#: model:ir.model.fields,field_description:hr_holidays.field_hr_leave__out_of_office_message +msgid "Out of Office Message" +msgstr "" + +#. module: hr_holidays +#. openerp-web +#: code:addons/hr_holidays/static/src/xml/discuss.xml:6 +#, python-format +msgid "Out of office" +msgstr "" + +#. module: hr_holidays #: selection:hr.leave,activity_state:0 #: selection:hr.leave.allocation,activity_state:0 msgid "Overdue" @@ -1916,11 +1801,7 @@ msgid "Overtime Compensation" msgstr "" #. module: hr_holidays -#: model:ir.ui.menu,name:hr_holidays.menu_hr_holidays_dashboard -msgid "Overview" -msgstr "" - -#. module: hr_holidays +#: model:hr.leave.type,name:hr_holidays.holiday_status_cl #: model:hr.leave.type,name:hr_holidays.holiday_status_cla msgid "Paid Time Off 2019" msgstr "" @@ -1933,7 +1814,7 @@ msgstr "" #. module: hr_holidays #: model:hr.leave.type,name:hr_holidays.hr_holiday_status_dv -msgid "Parental Leaves" +msgid "Parental Time Off" msgstr "" #. module: hr_holidays @@ -1975,8 +1856,8 @@ msgid "Red" msgstr "" #. module: hr_holidays -#: code:addons/hr_holidays/models/hr_leave.py:799 -#: code:addons/hr_holidays/models/hr_leave_allocation.py:576 +#: code:addons/hr_holidays/models/hr_leave.py:861 +#: code:addons/hr_holidays/models/hr_leave_allocation.py:584 #: model_terms:ir.ui.view,arch_db:hr_holidays.hr_leave_allocation_view_form_manager #: model_terms:ir.ui.view,arch_db:hr_holidays.hr_leave_allocation_view_kanban #: model_terms:ir.ui.view,arch_db:hr_holidays.hr_leave_allocation_view_tree @@ -2006,16 +1887,17 @@ msgid "Remaining Days" msgstr "" #. module: hr_holidays -#: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_type__remaining_leaves -msgid "Remaining Leaves" +#: model:ir.model.fields,field_description:hr_holidays.field_hr_employee__remaining_leaves +msgid "Remaining Paid Time Off" msgstr "" #. module: hr_holidays -#: model:ir.model.fields,field_description:hr_holidays.field_hr_employee__remaining_leaves -msgid "Remaining Legal Leaves" +#: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_type__remaining_leaves +msgid "Remaining Time Off" msgstr "" #. module: hr_holidays +#: model_terms:ir.ui.view,arch_db:hr_holidays.res_users_view_form #: model_terms:ir.ui.view,arch_db:hr_holidays.view_employee_form_leave_inherit msgid "Remaining leaves" msgstr "" @@ -2037,6 +1919,11 @@ msgid "Reporting" msgstr "" #. module: hr_holidays +#: model_terms:ir.ui.view,arch_db:hr_holidays.res_users_view_form +msgid "Request Allocation" +msgstr "" + +#. module: hr_holidays #: model:ir.model.fields,field_description:hr_holidays.field_hr_leave__request_date_to msgid "Request End Date" msgstr "" @@ -2047,6 +1934,11 @@ msgid "Request Start Date" msgstr "" #. module: hr_holidays +#: model_terms:ir.ui.view,arch_db:hr_holidays.res_users_view_form +msgid "Request Time off" +msgstr "" + +#. module: hr_holidays #: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_report__leave_type msgid "Request Type" msgstr "" @@ -2059,7 +1951,7 @@ msgstr "" #. module: hr_holidays #: model:ir.model,name:hr_holidays.model_resource_calendar_leaves -msgid "Resource Leaves Detail" +msgid "Resource Time Off Detail" msgstr "" #. module: hr_holidays @@ -2081,12 +1973,12 @@ msgstr "" #. module: hr_holidays #: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter #: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter_report -msgid "Search Leave" +msgid "Search Time Off" msgstr "" #. module: hr_holidays #: model_terms:ir.ui.view,arch_db:hr_holidays.view_holidays_status_filter -msgid "Search Leave Type" +msgid "Search Time Off Type" msgstr "" #. module: hr_holidays @@ -2105,7 +1997,7 @@ msgstr "" #. module: hr_holidays #: model:ir.model.fields,field_description:hr_holidays.field_hr_holidays_summary_employee__holiday_type -msgid "Select Leave Type" +msgid "Select Time Off Type" msgstr "" #. module: hr_holidays @@ -2120,21 +2012,16 @@ msgid "Show all records which has next action date is before today" msgstr "" #. module: hr_holidays +#: model:hr.leave.type,name:hr_holidays.holiday_status_sl #: model:mail.message.subtype,description:hr_holidays.mt_leave_sick #: model:mail.message.subtype,name:hr_holidays.mt_leave_sick -msgid "Sick Leave" -msgstr "" - -#. module: hr_holidays -#: model:hr.leave.type,name:hr_holidays.holiday_status_sl -msgid "Sick Leaves" +msgid "Sick Time Off" msgstr "" #. module: hr_holidays #: model:ir.model.fields,field_description:hr_holidays.field_hr_leave__date_from #: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_allocation__date_from #: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_report__date_from -#: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_type__validity_start #: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter #: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter_report msgid "Start Date" @@ -2162,20 +2049,10 @@ msgid "Sum" msgstr "" #. module: hr_holidays -#: model:ir.ui.menu,name:hr_holidays.menu_open_company_allocation -msgid "Summary" -msgstr "" - -#. module: hr_holidays #: model:ir.model.fields,field_description:hr_holidays.field_hr_leave__leave_type_request_unit #: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_allocation__type_request_unit #: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_type__request_unit -msgid "Take Leaves in" -msgstr "" - -#. module: hr_holidays -#: model:hr.leave.type,name:hr_holidays.hr_holiday_status_tb -msgid "Team Building" +msgid "Take Time Off in" msgstr "" #. module: hr_holidays @@ -2201,21 +2078,15 @@ msgid "The interval number should be greater than 0" msgstr "" #. module: hr_holidays -#: code:addons/hr_holidays/models/hr_leave.py:491 -#, python-format -msgid "The leave has been automatically approved" -msgstr "" - -#. module: hr_holidays #: sql_constraint:hr.leave.allocation:0 msgid "The number of days must be greater than 0." msgstr "" #. module: hr_holidays -#: code:addons/hr_holidays/models/hr_leave.py:412 +#: code:addons/hr_holidays/models/hr_leave.py:432 #, python-format -msgid "The number of remaining leaves is not sufficient for this leave type.\n" -"Please also check the leaves waiting for validation." +msgid "The number of remaining time off is not sufficient for this time off type.\n" +"Please also check the time off waiting for validation." msgstr "" #. module: hr_holidays @@ -2231,32 +2102,38 @@ msgstr "" #. module: hr_holidays #: model:ir.model.fields,help:hr_holidays.field_hr_leave__state #: model:ir.model.fields,help:hr_holidays.field_hr_leave_allocation__state -msgid "The status is set to 'To Submit', when a leave request is created.\n" -"The status is 'To Approve', when leave request is confirmed by user.\n" -"The status is 'Refused', when leave request is refused by manager.\n" -"The status is 'Approved', when leave request is approved by manager." +msgid "The status is set to 'To Submit', when a time off request is created.\n" +"The status is 'To Approve', when time off request is confirmed by user.\n" +"The status is 'Refused', when time off request is refused by manager.\n" +"The status is 'Approved', when time off request is approved by manager." +msgstr "" + +#. module: hr_holidays +#: code:addons/hr_holidays/models/hr_leave.py:518 +#, python-format +msgid "The time off has been automatically approved" msgstr "" #. module: hr_holidays #: model:ir.model.fields,help:hr_holidays.field_hr_leave_type__sequence -msgid "The type with the smallest sequence is the default value in leave request" +msgid "The type with the smallest sequence is the default value in time off request" msgstr "" #. module: hr_holidays #: model:ir.model.fields,help:hr_holidays.field_hr_leave__first_approver_id #: model:ir.model.fields,help:hr_holidays.field_hr_leave_allocation__first_approver_id -msgid "This area is automatically filled by the user who validate the leave" +msgid "This area is automatically filled by the user who validate the time off" msgstr "" #. module: hr_holidays #: model:ir.model.fields,help:hr_holidays.field_hr_leave__second_approver_id #: model:ir.model.fields,help:hr_holidays.field_hr_leave_allocation__second_approver_id -msgid "This area is automaticly filled by the user who validate the leave with second level (If Leave type need second validation)" +msgid "This area is automaticly filled by the user who validate the time off with second level (If time off type need second validation)" msgstr "" #. module: hr_holidays #: model:ir.model.fields,help:hr_holidays.field_hr_leave_type__color_name -msgid "This color will be used in the leaves summary located in Reporting > Leaves by Department." +msgid "This color will be used in the time off summary located in Reporting > Time off by Department." msgstr "" #. module: hr_holidays @@ -2266,15 +2143,210 @@ msgstr "" #. module: hr_holidays #: model:ir.model.fields,help:hr_holidays.field_hr_leave_type__leaves_taken -msgid "This value is given by the sum of all leaves requests with a negative value." +msgid "This value is given by the sum of all time off requests with a negative value." msgstr "" #. module: hr_holidays #: model:ir.model.fields,help:hr_holidays.field_hr_leave_type__max_leaves -msgid "This value is given by the sum of all leaves requests with a positive value." +msgid "This value is given by the sum of all time off requests with a positive value." msgstr "" #. module: hr_holidays +#: selection:hr.leave.type,time_type:0 +#: model:ir.actions.act_window,name:hr_holidays.act_hr_employee_holiday_request +#: model:ir.actions.act_window,name:hr_holidays.hr_leave_action_all +#: model:ir.model,name:hr_holidays.model_hr_leave +#: model:ir.ui.menu,name:hr_holidays.menu_hr_holidays_root +#: model:ir.ui.menu,name:hr_holidays.menu_open_department_leave_approve +#: model:ir.ui.menu,name:hr_holidays.menu_open_employee_leave +#: model_terms:ir.ui.view,arch_db:hr_holidays.hr_department_view_kanban +#: model:mail.message.subtype,name:hr_holidays.mt_leave +msgid "Time Off" +msgstr "" + +#. module: hr_holidays +#: model:ir.model,name:hr_holidays.model_hr_leave_allocation +msgid "Time Off Allocation" +msgstr "" + +#. module: hr_holidays +#: model:ir.actions.act_window,name:hr_holidays.action_hr_available_holidays_report +#: model:ir.actions.act_window,name:hr_holidays.hr_leave_action_action_department +#: model:ir.ui.menu,name:hr_holidays.menu_hr_available_holidays_report_tree +msgid "Time Off Analysis" +msgstr "" + +#. module: hr_holidays +#: model:mail.activity.type,name:hr_holidays.mail_act_leave_approval +msgid "Time Off Approval" +msgstr "" + +#. module: hr_holidays +#: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_type__leave_notif_subtype_id +msgid "Time Off Notification Subtype" +msgstr "" + +#. module: hr_holidays +#: model_terms:ir.actions.act_window,help:hr_holidays.hr_leave_allocation_action_all +#: model_terms:ir.actions.act_window,help:hr_holidays.hr_leave_allocation_action_approve_department +#: model_terms:ir.actions.act_window,help:hr_holidays.hr_leave_allocation_action_my +msgid "Time Off Officers allocate time off days to employees (e.g. paid time off).<br>\n" +" Employees request allocations to Time Off Officers (e.g. recuperation days)." +msgstr "" + +#. module: hr_holidays +#: selection:hr.leave.report,leave_type:0 +#: model_terms:ir.ui.view,arch_db:hr_holidays.hr_leave_view_calendar +#: model_terms:ir.ui.view,arch_db:hr_holidays.hr_leave_view_dashboard +#: model_terms:ir.ui.view,arch_db:hr_holidays.hr_leave_view_form +#: model:mail.message.subtype,description:hr_holidays.mt_leave +msgid "Time Off Request" +msgstr "" + +#. module: hr_holidays +#: model:ir.actions.act_window,name:hr_holidays.hr_leave_action_my +#: model:ir.actions.act_window,name:hr_holidays.hr_leave_action_payroll +#: model:ir.ui.menu,name:hr_holidays.hr_leave_menu_my +#: model_terms:ir.ui.view,arch_db:hr_holidays.hr_department_view_kanban +#: model_terms:ir.ui.view,arch_db:hr_holidays.hr_leave_view_tree +msgid "Time Off Requests" +msgstr "" + +#. module: hr_holidays +#: model:ir.model.fields,field_description:hr_holidays.field_hr_employee__leave_manager_id +#: model:ir.model.fields,field_description:hr_holidays.field_res_users__leave_manager_id +msgid "Time Off Responsible" +msgstr "" + +#. module: hr_holidays +#: model:mail.activity.type,name:hr_holidays.mail_act_leave_second_approval +msgid "Time Off Second Approve" +msgstr "" + +#. module: hr_holidays +#: model:ir.actions.act_window,name:hr_holidays.action_hr_holidays_summary_employee +#: model:ir.actions.report,name:hr_holidays.action_report_holidayssummary +#: model:ir.actions.report,name:hr_holidays.action_report_holidayssummary2 +#: model_terms:ir.ui.view,arch_db:hr_holidays.report_holidayssummary +#: model_terms:ir.ui.view,arch_db:hr_holidays.view_holiday_graph +#: model_terms:ir.ui.view,arch_db:hr_holidays.view_holiday_pivot +#: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_summary_employee +msgid "Time Off Summary" +msgstr "" + +#. module: hr_holidays +#: model:ir.model,name:hr_holidays.model_hr_leave_report +msgid "Time Off Summary / Report" +msgstr "" + +#. module: hr_holidays +#: model_terms:ir.ui.view,arch_db:hr_holidays.hr_holiday_status_view_kanban +msgid "Time Off Taken:" +msgstr "" + +#. module: hr_holidays +#: model:ir.model,name:hr_holidays.model_hr_leave_type +#: model:ir.model.fields,field_description:hr_holidays.field_hr_holidays_summary_dept__holiday_type +#: model:ir.model.fields,field_description:hr_holidays.field_hr_leave__holiday_status_id +#: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_allocation__holiday_status_id +#: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_type__name +#: model_terms:ir.ui.view,arch_db:hr_holidays.edit_holiday_status_form +#: model_terms:ir.ui.view,arch_db:hr_holidays.report_holidayssummary +#: model_terms:ir.ui.view,arch_db:hr_holidays.view_holiday_status_normal_tree +msgid "Time Off Type" +msgstr "" + +#. module: hr_holidays +#: model:ir.actions.act_window,name:hr_holidays.open_view_holiday_status +#: model:ir.ui.menu,name:hr_holidays.hr_holidays_status_menu_configuration +#: model_terms:ir.ui.view,arch_db:hr_holidays.view_holidays_status_filter +msgid "Time Off Types" +msgstr "" + +#. module: hr_holidays +#: model:ir.actions.act_window,name:hr_holidays.action_hr_holidays_summary_dept +#: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_summary_dept +msgid "Time Off by Department" +msgstr "" + +#. module: hr_holidays +#: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter_report +#: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_leave_allocation_filter +msgid "Time Off of Your Team Member" +msgstr "" + +#. module: hr_holidays +#: model:ir.model.fields,field_description:hr_holidays.field_hr_department__leave_to_approve_count +msgid "Time Off to Approve" +msgstr "" + +#. module: hr_holidays +#: model:ir.ui.menu,name:hr_holidays.hr_holidays_menu_manager_payroll_to_report +msgid "Time Off to report" +msgstr "" + +#. module: hr_holidays +#: model_terms:ir.ui.view,arch_db:hr_holidays.report_holidayssummary +msgid "Time Off." +msgstr "" + +#. module: hr_holidays +#: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_type__leaves_taken +msgid "Time off Already Taken" +msgstr "" + +#. module: hr_holidays +#: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter +msgid "Time off of Your Team Members" +msgstr "" + +#. module: hr_holidays +#: model_terms:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter +msgid "Time off of people you are manager of" +msgstr "" + +#. module: hr_holidays +#: code:addons/hr_holidays/models/hr_leave.py:677 +#: code:addons/hr_holidays/models/hr_leave_allocation.py:423 +#, python-format +msgid "Time off request must be confirmed (\"To Approve\") in order to approve it." +msgstr "" + +#. module: hr_holidays +#: code:addons/hr_holidays/models/hr_leave.py:690 +#: code:addons/hr_holidays/models/hr_leave_allocation.py:437 +#, python-format +msgid "Time off request must be confirmed in order to approve it." +msgstr "" + +#. module: hr_holidays +#: code:addons/hr_holidays/models/hr_leave.py:731 +#: code:addons/hr_holidays/models/hr_leave_allocation.py:475 +#, python-format +msgid "Time off request must be confirmed or validated in order to refuse it." +msgstr "" + +#. module: hr_holidays +#: code:addons/hr_holidays/models/hr_leave.py:667 +#: code:addons/hr_holidays/models/hr_leave_allocation.py:413 +#, python-format +msgid "Time off request must be in Draft state (\"To Submit\") in order to confirm it." +msgstr "" + +#. module: hr_holidays +#: code:addons/hr_holidays/models/hr_leave.py:651 +#, python-format +msgid "Time off request state must be \"Refused\" or \"To Approve\" in order to be reset to draft." +msgstr "" + +#. module: hr_holidays +#: code:addons/hr_holidays/models/hr_leave_allocation.py:397 +#, python-format +msgid "Time off request state must be \"Refused\" or \"To Approve\" in order to reset to Draft." +msgstr "" + +#. module: hr_holidays +#: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_type__validity_stop #: model_terms:ir.ui.view,arch_db:hr_holidays.hr_leave_view_form msgid "To" msgstr "" @@ -2292,6 +2364,7 @@ msgstr "" #. module: hr_holidays #: model:ir.model.fields,field_description:hr_holidays.field_hr_employee__leave_date_to +#: model:ir.model.fields,field_description:hr_holidays.field_res_users__leave_date_to msgid "To Date" msgstr "" @@ -2337,13 +2410,25 @@ msgid "Total allocated days" msgstr "" #. module: hr_holidays -#: model_terms:ir.ui.view,arch_db:hr_holidays.hr_leave_view_tree -msgid "Total leaves" +#: model:ir.model.fields,field_description:hr_holidays.field_hr_employee__allocation_count +#: model:ir.model.fields,field_description:hr_holidays.field_res_users__allocation_count +msgid "Total number of days allocated." +msgstr "" + +#. module: hr_holidays +#: model:ir.model.fields,field_description:hr_holidays.field_hr_employee__allocation_used_count +#: model:ir.model.fields,field_description:hr_holidays.field_res_users__allocation_used_count +msgid "Total number of days off used" msgstr "" #. module: hr_holidays #: model:ir.model.fields,help:hr_holidays.field_hr_employee__remaining_leaves -msgid "Total number of legal leaves allocated to this employee, change this value to create allocation/leave request. Total based on all the leave types without overriding limit." +msgid "Total number of paid time off allocated to this employee, change this value to create allocation/time off request. Total based on all the time off types without overriding limit." +msgstr "" + +#. module: hr_holidays +#: model_terms:ir.ui.view,arch_db:hr_holidays.hr_leave_view_tree +msgid "Total time off" msgstr "" #. module: hr_holidays @@ -2381,7 +2466,7 @@ msgstr "" #. module: hr_holidays #: model:mail.message.subtype,description:hr_holidays.mt_leave_unpaid #: model:mail.message.subtype,name:hr_holidays.mt_leave_unpaid -msgid "Unpaid Leave" +msgid "Unpaid Time Off" msgstr "" #. module: hr_holidays @@ -2405,10 +2490,16 @@ msgstr "" #. module: hr_holidays #: model:ir.model.fields,help:hr_holidays.field_hr_employee__leave_manager_id +#: model:ir.model.fields,help:hr_holidays.field_res_users__leave_manager_id msgid "User responsible of leaves approval. Should be Team Leader or Department Manager." msgstr "" #. module: hr_holidays +#: model:ir.model,name:hr_holidays.model_res_users +msgid "Users" +msgstr "" + +#. module: hr_holidays #: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_type__valid msgid "Valid" msgstr "" @@ -2422,15 +2513,11 @@ msgid "Validate" msgstr "" #. module: hr_holidays -#: model_terms:ir.ui.view,arch_db:hr_holidays.edit_holiday_status_form -msgid "Validation" -msgstr "" - -#. module: hr_holidays #: model:ir.model.fields,field_description:hr_holidays.field_hr_leave__validation_type #: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_allocation__validation_type #: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_type__validation_type -msgid "Validation By" +#: model_terms:ir.ui.view,arch_db:hr_holidays.edit_holiday_status_form +msgid "Validation" msgstr "" #. module: hr_holidays @@ -2451,7 +2538,7 @@ msgstr "" #. module: hr_holidays #: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_type__virtual_remaining_leaves -msgid "Virtual Remaining Leaves" +msgid "Virtual Remaining Time Off" msgstr "" #. module: hr_holidays @@ -2487,11 +2574,6 @@ msgid "Wheat" msgstr "" #. module: hr_holidays -#: model:ir.model.fields,help:hr_holidays.field_hr_leave_type__double_validation -msgid "When selected, the Allocation/Leave Requests for this type require a second validation to be approved." -msgstr "" - -#. module: hr_holidays #: model:ir.model.fields,help:hr_holidays.field_hr_leave_type__time_type msgid "Whether this should be computed as a holiday or as work time (eg: formation)" msgstr "" @@ -2508,22 +2590,28 @@ msgid "You can allocate %s only between %s and %s" msgstr "" #. module: hr_holidays -#: code:addons/hr_holidays/models/hr_leave.py:402 +#: code:addons/hr_holidays/models/hr_leave.py:707 #, python-format msgid "You can not have 2 leaves that overlaps on the same day." msgstr "" #. module: hr_holidays -#: code:addons/hr_holidays/models/hr_leave.py:468 +#: code:addons/hr_holidays/models/hr_leave.py:422 +#, python-format +msgid "You can not set 2 times off that overlaps on the same day for the same employee." +msgstr "" + +#. module: hr_holidays +#: code:addons/hr_holidays/models/hr_leave.py:492 #, python-format msgid "You can take %s only between %s and %s" msgstr "" #. module: hr_holidays -#: code:addons/hr_holidays/models/hr_leave.py:530 -#: code:addons/hr_holidays/models/hr_leave_allocation.py:360 +#: code:addons/hr_holidays/models/hr_leave.py:559 +#: code:addons/hr_holidays/models/hr_leave_allocation.py:362 #, python-format -msgid "You cannot delete a leave which is in %s state." +msgid "You cannot delete a time off which is in %s state." msgstr "" #. module: hr_holidays @@ -2533,17 +2621,21 @@ msgid "You have to select at least one department." msgstr "" #. module: hr_holidays -#: code:addons/hr_holidays/models/hr_leave.py:733 -#: code:addons/hr_holidays/models/hr_leave_allocation.py:512 +#: code:addons/hr_holidays/models/hr_leave.py:786 #, python-format -msgid "You must be either %s's manager or Leave manager to approve this leave" +msgid "You must be either %s's manager or Time Off Manager to approve this time off" +msgstr "" + +#. module: hr_holidays +#: code:addons/hr_holidays/models/hr_leave_allocation.py:514 +#, python-format +msgid "You must be either %s's manager or time off manager to approve this time off" msgstr "" #. module: hr_holidays #: model_terms:ir.ui.view,arch_db:hr_holidays.hr_leave_allocation_view_kanban #: model_terms:ir.ui.view,arch_db:hr_holidays.hr_leave_report_kanban #: model_terms:ir.ui.view,arch_db:hr_holidays.hr_leave_view_kanban -#: model_terms:ir.ui.view,arch_db:hr_holidays.view_employee_form_leave_inherit msgid "days" msgstr "" diff --git a/addons/hr_holidays/models/hr_leave.py b/addons/hr_holidays/models/hr_leave.py index 7159f7feb8d..fbe59aa6926 100644 --- a/addons/hr_holidays/models/hr_leave.py +++ b/addons/hr_holidays/models/hr_leave.py @@ -9,7 +9,7 @@ import math from datetime import datetime, time from pytz import timezone, UTC -from odoo import api, fields, models, tools +from odoo import api, fields, models, tools, SUPERUSER_ID from odoo.addons.resource.models.resource import float_to_time, HOURS_PER_DAY from odoo.exceptions import AccessError, UserError, ValidationError from odoo.tools import float_compare @@ -745,6 +745,9 @@ class HolidaysRequest(models.Model): def _check_approval_update(self, state): """ Check if target state is achievable. """ + if self.env.user.id == SUPERUSER_ID: + return + current_employee = self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1) is_officer = self.env.user.has_group('hr_holidays.group_hr_holidays_user') is_manager = self.env.user.has_group('hr_holidays.group_hr_holidays_manager') diff --git a/addons/hr_holidays/tests/test_leave_requests.py b/addons/hr_holidays/tests/test_leave_requests.py index ea025d571cd..67d468b0a44 100644 --- a/addons/hr_holidays/tests/test_leave_requests.py +++ b/addons/hr_holidays/tests/test_leave_requests.py @@ -138,7 +138,7 @@ class TestLeaveRequests(TestHrHolidaysBase): 'number_of_days': 1, }) - @mute_logger('odoo.models.unlink', 'odoo.addons.mail.models.mail_mail', 'odoo.models') + @mute_logger('odoo.models.unlink', 'odoo.addons.mail.models.mail_mail') def test_accrual_validity_time_not_valid(self): """ Employee ask leav during a not valid validity time """ with self.assertRaises(ValidationError): diff --git a/addons/hr_maintenance/i18n/hr_maintenance.pot b/addons/hr_maintenance/i18n/hr_maintenance.pot index 9aba0f6d626..cc7e4f9188a 100644 --- a/addons/hr_maintenance/i18n/hr_maintenance.pot +++ b/addons/hr_maintenance/i18n/hr_maintenance.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-21 13:18+0000\n" -"PO-Revision-Date: 2018-09-21 13:18+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -46,6 +46,7 @@ msgid "Department" msgstr "" #. module: hr_maintenance +#: model:ir.model,name:hr_maintenance.model_hr_employee #: model:ir.model.fields,field_description:hr_maintenance.field_maintenance_request__employee_id #: model_terms:ir.ui.view,arch_db:hr_maintenance.maintenance_equipment_view_form_inherit_hr #: model_terms:ir.ui.view,arch_db:hr_maintenance.maintenance_equipment_view_search_inherit_hr @@ -55,6 +56,17 @@ msgid "Employee" msgstr "" #. module: hr_maintenance +#: model:ir.model.fields,field_description:hr_maintenance.field_res_users__equipment_ids +msgid "Equipment" +msgstr "" + +#. module: hr_maintenance +#: model:ir.model.fields,field_description:hr_maintenance.field_hr_employee__equipment_count +#: model:ir.model.fields,field_description:hr_maintenance.field_res_users__equipment_count +msgid "Equipments" +msgstr "" + +#. module: hr_maintenance #: model:ir.model,name:hr_maintenance.model_maintenance_equipment msgid "Maintenance Equipment" msgstr "" @@ -89,3 +101,8 @@ msgstr "" msgid "Used By" msgstr "" +#. module: hr_maintenance +#: model:ir.model,name:hr_maintenance.model_res_users +msgid "Users" +msgstr "" + diff --git a/addons/hr_org_chart/i18n/hr_org_chart.pot b/addons/hr_org_chart/i18n/hr_org_chart.pot index 4c93e2fef2c..f141c9784ab 100644 --- a/addons/hr_org_chart/i18n/hr_org_chart.pot +++ b/addons/hr_org_chart/i18n/hr_org_chart.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-24 10:58+0000\n" -"PO-Revision-Date: 2018-12-24 10:58+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -22,7 +22,7 @@ msgstr "" #. module: hr_org_chart #. openerp-web -#: code:addons/hr_org_chart/static/src/xml/hr_org_chart.xml:125 +#: code:addons/hr_org_chart/static/src/xml/hr_org_chart.xml:126 #, python-format msgid "Direct subordinates" msgstr "" @@ -46,7 +46,7 @@ msgstr "" #. module: hr_org_chart #. openerp-web -#: code:addons/hr_org_chart/static/src/xml/hr_org_chart.xml:135 +#: code:addons/hr_org_chart/static/src/xml/hr_org_chart.xml:136 #, python-format msgid "Indirect subordinates" msgstr "" @@ -67,12 +67,13 @@ msgstr "" #. module: hr_org_chart #: model_terms:ir.ui.view,arch_db:hr_org_chart.hr_employee_view_form_inherit_org_chart +#: model_terms:ir.ui.view,arch_db:hr_org_chart.res_users_view_form msgid "Organization Chart" msgstr "" #. module: hr_org_chart #. openerp-web -#: code:addons/hr_org_chart/static/src/xml/hr_org_chart.xml:154 +#: code:addons/hr_org_chart/static/src/xml/hr_org_chart.xml:155 #, python-format msgid "Redirect" msgstr "" @@ -91,7 +92,7 @@ msgstr "" #. module: hr_org_chart #. openerp-web -#: code:addons/hr_org_chart/static/src/xml/hr_org_chart.xml:143 +#: code:addons/hr_org_chart/static/src/xml/hr_org_chart.xml:144 #, python-format msgid "Total" msgstr "" diff --git a/addons/hr_presence/i18n/hr_presence.pot b/addons/hr_presence/i18n/hr_presence.pot index 68081d80cc7..3c96ca99706 100644 --- a/addons/hr_presence/i18n/hr_presence.pot +++ b/addons/hr_presence/i18n/hr_presence.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-24 10:58+0000\n" -"PO-Revision-Date: 2018-12-24 10:58+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -35,6 +35,33 @@ msgid "<?xml version=\"1.0\"?>\n" msgstr "" #. module: hr_presence +#: model_terms:ir.ui.view,arch_db:hr_presence.hr_employee_view_kanban +msgid "<span class=\"fa fa-circle text-danger\" role=\"img\" aria-label=\"Absent\" title=\"Absent\" name=\"presence_absent\"/>" +msgstr "" + +#. module: hr_presence +#: model_terms:ir.ui.view,arch_db:hr_presence.hr_employee_view_kanban +msgid "<span class=\"fa fa-circle text-success\" role=\"img\" aria-label=\"Present\" title=\"Present\" name=\"presence_present\"/>" +msgstr "" + +#. module: hr_presence +#: model_terms:ir.ui.view,arch_db:hr_presence.hr_employee_view_kanban +msgid "<span class=\"fa fa-circle text-warning\" role=\"img\" aria-label=\"To define\" title=\"To define\" name=\"presence_to_define\"/>" +msgstr "" + +#. module: hr_presence +#: model_terms:ir.ui.view,arch_db:hr_presence.hr_employee_view_form +msgid "<span class=\"o_stat_text\">\n" +" Last Activity\n" +" </span>" +msgstr "" + +#. module: hr_presence +#: model_terms:ir.ui.view,arch_db:hr_presence.hr_employee_view_form +msgid "<span class=\"o_stat_text\">Connected</span>" +msgstr "" + +#. module: hr_presence #: model_terms:ir.ui.view,arch_db:hr_presence.res_config_settings_view_form msgid "<span> sent emails</span>" msgstr "" @@ -70,12 +97,17 @@ msgid "According to the system login (User status on chat)" msgstr "" #. module: hr_presence +#: model_terms:ir.ui.view,arch_db:hr_presence.hr_employee_view_form +msgid "Available" +msgstr "" + +#. module: hr_presence #: model:ir.model,name:hr_presence.model_res_company msgid "Companies" msgstr "" #. module: hr_presence -#: code:addons/hr_presence/models/hr_employee.py:155 +#: code:addons/hr_presence/models/hr_employee.py:167 #, python-format msgid "Compose Email" msgstr "" @@ -111,7 +143,12 @@ msgid "Employee Presence" msgstr "" #. module: hr_presence -#: code:addons/hr_presence/models/hr_employee.py:119 +#: model_terms:ir.ui.view,arch_db:hr_presence.hr_employee_view_kanban +msgid "Employee's Name" +msgstr "" + +#. module: hr_presence +#: code:addons/hr_presence/models/hr_employee.py:131 #, python-format msgid "Exception made if there was a mistake of ours, it seems that you are not at your office and there is not request of leaves from you.\n" "Please, take appropriate measures in order to carry out this work absence.\n" @@ -134,13 +171,13 @@ msgid "IP Address" msgstr "" #. module: hr_presence -#: model_terms:ir.ui.view,arch_db:hr_presence.hr_employee_view_kanban -msgid "Leaves" +#: model:ir.model.fields,field_description:hr_presence.field_hr_employee__last_activity +msgid "Last Activity" msgstr "" #. module: hr_presence -#: model_terms:ir.ui.view,arch_db:hr_presence.hr_employee_view_kanban -msgid "Mail" +#: model_terms:ir.ui.view,arch_db:hr_presence.hr_employee_view_form +msgid "Not available" msgstr "" #. module: hr_presence @@ -159,23 +196,13 @@ msgid "Reports" msgstr "" #. module: hr_presence -#: model_terms:ir.ui.view,arch_db:hr_presence.hr_employee_view_kanban -msgid "SMS" -msgstr "" - -#. module: hr_presence -#: model_terms:ir.ui.view,arch_db:hr_presence.hr_employee_view_kanban -msgid "Set as present" -msgstr "" - -#. module: hr_presence -#: code:addons/hr_presence/models/hr_employee.py:140 +#: code:addons/hr_presence/models/hr_employee.py:152 #, python-format msgid "There is no professional email address for this employee." msgstr "" #. module: hr_presence -#: code:addons/hr_presence/models/hr_employee.py:118 +#: code:addons/hr_presence/models/hr_employee.py:130 #, python-format msgid "There is no professional phone for this employee." msgstr "" @@ -202,9 +229,9 @@ msgid "Valid IP addresses" msgstr "" #. module: hr_presence -#: code:addons/hr_presence/models/hr_employee.py:100 -#: code:addons/hr_presence/models/hr_employee.py:116 -#: code:addons/hr_presence/models/hr_employee.py:138 +#: code:addons/hr_presence/models/hr_employee.py:112 +#: code:addons/hr_presence/models/hr_employee.py:128 +#: code:addons/hr_presence/models/hr_employee.py:150 #, python-format msgid "You don't have the right to do this. Please contact an Administrator." msgstr "" diff --git a/addons/hr_recruitment/i18n/hr_recruitment.pot b/addons/hr_recruitment/i18n/hr_recruitment.pot index 9bedcc17031..eea6d960a08 100644 --- a/addons/hr_recruitment/i18n/hr_recruitment.pot +++ b/addons/hr_recruitment/i18n/hr_recruitment.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:59+0000\n" -"PO-Revision-Date: 2019-01-16 07:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -388,6 +388,11 @@ msgid "Applicant created" msgstr "" #. module: hr_recruitment +#: model:ir.model.fields,help:hr_recruitment.field_hr_applicant__email_from +msgid "Applicant email" +msgstr "" + +#. module: hr_recruitment #: model:mail.message.subtype,description:hr_recruitment.mt_applicant_hired msgid "Applicant hired" msgstr "" @@ -423,6 +428,7 @@ msgid "Applicants can send resume to this email address,<br/>it will create an a msgstr "" #. module: hr_recruitment +#: model:ir.model.fields,field_description:hr_recruitment.field_hr_applicant__application_count #: model:ir.model.fields,field_description:hr_recruitment.field_hr_job__application_count msgid "Application Count" msgstr "" @@ -443,15 +449,23 @@ msgid "Application(s)" msgstr "" #. module: hr_recruitment +#: code:addons/hr_recruitment/models/hr_recruitment.py:345 #: model:ir.actions.act_window,name:hr_recruitment.action_hr_job_applications #: model:ir.actions.act_window,name:hr_recruitment.crm_case_categ0_act_job #: model:ir.model.fields,field_description:hr_recruitment.field_hr_job__application_ids #: model:ir.ui.menu,name:hr_recruitment.menu_crm_case_categ0_act_job +#: model_terms:ir.ui.view,arch_db:hr_recruitment.crm_case_form_view_job #: model_terms:ir.ui.view,arch_db:hr_recruitment.hr_job_survey +#, python-format msgid "Applications" msgstr "" #. module: hr_recruitment +#: model:ir.model.fields,help:hr_recruitment.field_hr_applicant__application_count +msgid "Applications with the same email" +msgstr "" + +#. module: hr_recruitment #: model:ir.model.fields,field_description:hr_recruitment.field_hr_applicant__job_id msgid "Applied Job" msgstr "" @@ -592,14 +606,14 @@ msgid "Configuration" msgstr "" #. module: hr_recruitment -#: code:addons/hr_recruitment/models/hr_recruitment.py:371 +#: code:addons/hr_recruitment/models/hr_recruitment.py:391 #: model:ir.model.fields,field_description:hr_recruitment.field_hr_applicant__partner_id #, python-format msgid "Contact" msgstr "" #. module: hr_recruitment -#: code:addons/hr_recruitment/models/hr_recruitment.py:373 +#: code:addons/hr_recruitment/models/hr_recruitment.py:393 #, python-format msgid "Contact Email" msgstr "" @@ -1065,7 +1079,7 @@ msgid "Is Follower" msgstr "" #. module: hr_recruitment -#: code:addons/hr_recruitment/models/hr_job.py:94 +#: code:addons/hr_recruitment/models/hr_job.py:98 #: model_terms:ir.ui.view,arch_db:hr_recruitment.crm_case_form_view_job #: model_terms:ir.ui.view,arch_db:hr_recruitment.view_crm_case_jobs_filter #, python-format @@ -1298,7 +1312,7 @@ msgid "New Applications" msgstr "" #. module: hr_recruitment -#: code:addons/hr_recruitment/models/hr_recruitment.py:447 +#: code:addons/hr_recruitment/models/hr_recruitment.py:467 #, python-format msgid "New Employee %s Hired" msgstr "" @@ -1349,7 +1363,7 @@ msgid "Next Activity Type" msgstr "" #. module: hr_recruitment -#: code:addons/hr_recruitment/models/hr_recruitment.py:389 +#: code:addons/hr_recruitment/models/hr_recruitment.py:409 #, python-format msgid "No Subject" msgstr "" @@ -1811,11 +1825,6 @@ msgid "These email addresses will be added to the CC field of all inbound and ou msgstr "" #. module: hr_recruitment -#: model:ir.model.fields,help:hr_recruitment.field_hr_applicant__email_from -msgid "These people will receive email." -msgstr "" - -#. module: hr_recruitment #: model:ir.model.fields,help:hr_recruitment.field_hr_applicant__campaign_id msgid "This is a name that helps you keep track of your different campaign efforts, e.g. Fall_Drive, Christmas_Special" msgstr "" @@ -1948,7 +1957,7 @@ msgid "You can define here the labels that will be displayed for the kanban stat msgstr "" #. module: hr_recruitment -#: code:addons/hr_recruitment/models/hr_recruitment.py:450 +#: code:addons/hr_recruitment/models/hr_recruitment.py:470 #, python-format msgid "You must define an Applied Job and a Contact Name for this applicant." msgstr "" @@ -1966,7 +1975,7 @@ msgid "e.g. Sales Manager" msgstr "" #. module: hr_recruitment -#: code:addons/hr_recruitment/models/hr_recruitment.py:295 +#: code:addons/hr_recruitment/models/hr_recruitment.py:304 #, python-format msgid "job applicant" msgstr "" diff --git a/addons/hr_recruitment/models/hr_recruitment.py b/addons/hr_recruitment/models/hr_recruitment.py index b1299e50299..f4338dc24f5 100644 --- a/addons/hr_recruitment/models/hr_recruitment.py +++ b/addons/hr_recruitment/models/hr_recruitment.py @@ -222,12 +222,12 @@ class Applicant(models.Model): def _onchange_job_id_internal(self, job_id): department_id = False user_id = False - stage_id = self.stage_id.id + stage_id = self.stage_id.id or self._context.get('default_stage_id') if job_id: job = self.env['hr.job'].browse(job_id) department_id = job.department_id.id user_id = job.user_id.id - if not self.stage_id: + if not stage_id: stage_ids = self.env['hr.recruitment.stage'].search([ '|', ('job_id', '=', False), diff --git a/addons/hr_recruitment/static/src/scss/hr_job.scss b/addons/hr_recruitment/static/src/scss/hr_job.scss index 0b9675c86bb..eb9328243a8 100644 --- a/addons/hr_recruitment/static/src/scss/hr_job.scss +++ b/addons/hr_recruitment/static/src/scss/hr_job.scss @@ -1,11 +1,8 @@ -.o_kanban_view.o_kanban_ungrouped { - display: flex; - .o_kanban_record { +.o_kanban_view.o_kanban_dashboard { + &.o_hr_recruitment_kanban.o_kanban_ungrouped .o_kanban_record { width: 350px; } -} -.o_kanban_view.o_kanban_dashboard { .o_recruitment_kanban_boxes { display: flex; flex-flow: row nowrap; diff --git a/addons/hr_recruitment_survey/i18n/hr_recruitment_survey.pot b/addons/hr_recruitment_survey/i18n/hr_recruitment_survey.pot index f1dd5970ddb..d5852f2f27d 100644 --- a/addons/hr_recruitment_survey/i18n/hr_recruitment_survey.pot +++ b/addons/hr_recruitment_survey/i18n/hr_recruitment_survey.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-24 10:58+0000\n" -"PO-Revision-Date: 2018-12-24 10:58+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -28,12 +28,14 @@ msgid "<span class=\"o_stat_text\">Start</span>\n" msgstr "" #. module: hr_recruitment_survey -#: model:survey.page,title:hr_recruitment_survey.survey_recruitment_form_p1 +#: model:survey.question,question:hr_recruitment_survey.survey_recruitment_form_p1 +#: model:survey.question,title:hr_recruitment_survey.survey_recruitment_form_p1 msgid "About you" msgstr "" #. module: hr_recruitment_survey #: model:survey.question,question:hr_recruitment_survey.survey_recruitment_form_p1_q7 +#: model:survey.question,title:hr_recruitment_survey.survey_recruitment_form_p1_q7 msgid "Activities" msgstr "" @@ -48,6 +50,16 @@ msgid "Applicant" msgstr "" #. module: hr_recruitment_survey +#: model:ir.model.fields,field_description:hr_recruitment_survey.field_survey_survey__category +msgid "Category" +msgstr "" + +#. module: hr_recruitment_survey +#: model:ir.model.fields,help:hr_recruitment_survey.field_survey_survey__category +msgid "Category is used to know in which context the survey is used. Various apps may define their own categories when they use survey like jobs recruitment or employee appraisal surveys." +msgstr "" + +#. module: hr_recruitment_survey #: model:ir.model.fields,help:hr_recruitment_survey.field_hr_applicant__survey_id #: model:ir.model.fields,help:hr_recruitment_survey.field_hr_job__survey_id msgid "Choose an interview form for this job position and you will be able to print/answer this interview from all applicants who apply for this job" @@ -55,6 +67,7 @@ msgstr "" #. module: hr_recruitment_survey #: model:survey.question,question:hr_recruitment_survey.survey_recruitment_form_p1_q3 +#: model:survey.question,title:hr_recruitment_survey.survey_recruitment_form_p1_q3 msgid "Did you apply from an employee ?" msgstr "" @@ -66,15 +79,22 @@ msgstr "" #. module: hr_recruitment_survey #: model:survey.question,question:hr_recruitment_survey.survey_recruitment_form_p1_q4 +#: model:survey.question,title:hr_recruitment_survey.survey_recruitment_form_p1_q4 msgid "Education" msgstr "" #. module: hr_recruitment_survey #: model:survey.question,question:hr_recruitment_survey.survey_recruitment_form_p1_q2 +#: model:survey.question,title:hr_recruitment_survey.survey_recruitment_form_p1_q2 msgid "From which university did or will you graduate ?" msgstr "" #. module: hr_recruitment_survey +#: selection:survey.survey,category:0 +msgid "Generic Survey" +msgstr "" + +#. module: hr_recruitment_survey #: model:survey.label,value:hr_recruitment_survey.survey_recruitment_form_p1_q8_row2 msgid "Getting on with colleagues" msgstr "" @@ -100,6 +120,7 @@ msgid "Having freebies such as tea, coffee and stationery" msgstr "" #. module: hr_recruitment_survey +#: model:survey.question,comments_message:hr_recruitment_survey.survey_recruitment_form_p1 #: model:survey.question,comments_message:hr_recruitment_survey.survey_recruitment_form_p1_q1 #: model:survey.question,comments_message:hr_recruitment_survey.survey_recruitment_form_p1_q2 #: model:survey.question,comments_message:hr_recruitment_survey.survey_recruitment_form_p1_q3 @@ -134,6 +155,7 @@ msgstr "" #. module: hr_recruitment_survey #: model:survey.question,question:hr_recruitment_survey.survey_recruitment_form_p1_q6 +#: model:survey.question,title:hr_recruitment_survey.survey_recruitment_form_p1_q6 msgid "Knowledge" msgstr "" @@ -159,6 +181,7 @@ msgstr "" #. module: hr_recruitment_survey #: model:survey.question,question:hr_recruitment_survey.survey_recruitment_form_p1_q5 +#: model:survey.question,title:hr_recruitment_survey.survey_recruitment_form_p1_q5 msgid "Past work experiences" msgstr "" @@ -168,7 +191,7 @@ msgid "Please answer those questions to help recruitment officers to preprocess msgstr "" #. module: hr_recruitment_survey -#: model_terms:survey.page,description:hr_recruitment_survey.survey_recruitment_form_p1 +#: model_terms:survey.question,description:hr_recruitment_survey.survey_recruitment_form_p1 msgid "Please fill information about you: who you are, what are your education, experience, and activities.\n" " It will help us managing your application." msgstr "" @@ -190,6 +213,11 @@ msgid "Print interview report" msgstr "" #. module: hr_recruitment_survey +#: selection:survey.survey,category:0 +msgid "Recruitment" +msgstr "" + +#. module: hr_recruitment_survey #: model:survey.survey,title:hr_recruitment_survey.survey_recruitment_form msgid "Recruitment Form" msgstr "" @@ -200,6 +228,7 @@ msgid "Response" msgstr "" #. module: hr_recruitment_survey +#: model:ir.model,name:hr_recruitment_survey.model_survey_survey #: model:ir.model.fields,field_description:hr_recruitment_survey.field_hr_applicant__survey_id msgid "Survey" msgstr "" @@ -210,6 +239,7 @@ msgid "Thanks you for answering this survey. We will come back to you soon." msgstr "" #. module: hr_recruitment_survey +#: model:survey.question,validation_error_msg:hr_recruitment_survey.survey_recruitment_form_p1 #: model:survey.question,validation_error_msg:hr_recruitment_survey.survey_recruitment_form_p1_q1 #: model:survey.question,validation_error_msg:hr_recruitment_survey.survey_recruitment_form_p1_q2 #: model:survey.question,validation_error_msg:hr_recruitment_survey.survey_recruitment_form_p1_q3 @@ -218,10 +248,11 @@ msgstr "" #: model:survey.question,validation_error_msg:hr_recruitment_survey.survey_recruitment_form_p1_q6 #: model:survey.question,validation_error_msg:hr_recruitment_survey.survey_recruitment_form_p1_q7 #: model:survey.question,validation_error_msg:hr_recruitment_survey.survey_recruitment_form_p1_q8 -msgid "The answer you entered has an invalid format." +msgid "The answer you entered is not valid." msgstr "" #. module: hr_recruitment_survey +#: model:survey.question,constr_error_msg:hr_recruitment_survey.survey_recruitment_form_p1 #: model:survey.question,constr_error_msg:hr_recruitment_survey.survey_recruitment_form_p1_q1 #: model:survey.question,constr_error_msg:hr_recruitment_survey.survey_recruitment_form_p1_q2 #: model:survey.question,constr_error_msg:hr_recruitment_survey.survey_recruitment_form_p1_q3 @@ -245,11 +276,13 @@ msgstr "" #. module: hr_recruitment_survey #: model:survey.question,question:hr_recruitment_survey.survey_recruitment_form_p1_q8 +#: model:survey.question,title:hr_recruitment_survey.survey_recruitment_form_p1_q8 msgid "What is important for you ?" msgstr "" #. module: hr_recruitment_survey #: model:survey.question,question:hr_recruitment_survey.survey_recruitment_form_p1_q1 +#: model:survey.question,title:hr_recruitment_survey.survey_recruitment_form_p1_q1 msgid "Which country are you from ?" msgstr "" diff --git a/addons/hr_skills/__manifest__.py b/addons/hr_skills/__manifest__.py index 9a912aac2fb..2ecc696ee48 100644 --- a/addons/hr_skills/__manifest__.py +++ b/addons/hr_skills/__manifest__.py @@ -21,7 +21,11 @@ This module introduces skills and resumé management for employees. 'views/hr_templates.xml', 'data/hr_resume_data.xml', ], - 'demo': ['data/hr_resume_demo.xml'], + 'demo': [ + 'data/hr_resume_demo.xml', + 'data/hr.employee.skill.csv', + 'data/hr.resume.line.csv', + ], 'qweb': [ 'static/src/xml/resume_templates.xml', 'static/src/xml/skills_templates.xml', diff --git a/addons/hr_skills/data/hr.employee.skill.csv b/addons/hr_skills/data/hr.employee.skill.csv new file mode 100644 index 00000000000..f21ba6aff03 --- /dev/null +++ b/addons/hr_skills/data/hr.employee.skill.csv @@ -0,0 +1,127 @@ +id,employee_id:id,skill_id:id,skill_type_id:id,skill_level_id:id
+employee_skill_admin_spark,hr.employee_admin,hr_skill_spark,hr_skill_type_dev,hr_skill_level_intermediate
+employee_skill_admin_flute,hr.employee_admin,hr_skill_flute,hr_skill_type_music,hr_skill_level_l2
+employee_skill_admin_singing,hr.employee_admin,hr_skill_singing,hr_skill_type_music,hr_skill_level_l1
+employee_skill_admin_violin,hr.employee_admin,hr_skill_violin,hr_skill_type_music,hr_skill_level_l2
+employee_skill_admin_piano,hr.employee_admin,hr_skill_piano,hr_skill_type_music,hr_skill_level_l2
+employee_skill_al_analytics,hr.employee_al,hr_skill_analytics,hr_skill_type_marketing,hr_skill_level_ml3
+employee_skill_al_digital_ad,hr.employee_al,hr_skill_digital_ad,hr_skill_type_marketing,hr_skill_level_ml1
+employee_skill_al_public,hr.employee_al,hr_skill_public,hr_skill_type_marketing,hr_skill_level_ml1
+employee_skill_al_com,hr.employee_al,hr_skill_com,hr_skill_type_marketing,hr_skill_level_ml1
+employee_skill_al_french,hr.employee_al,hr_skill_french,hr_skill_type_lang,hr_skill_level_c1
+employee_skill_al_nosql,hr.employee_al,hr_skill_nosql,hr_skill_type_dev,hr_skill_level_beginner
+employee_skill_al_django,hr.employee_al,hr_skill_django,hr_skill_type_dev,hr_skill_level_advanced
+employee_skill_al_python,hr.employee_al,hr_skill_python,hr_skill_type_dev,hr_skill_level_advanced
+employee_skill_mit_piano,hr.employee_mit,hr_skill_piano,hr_skill_type_music,hr_skill_level_l3
+employee_skill_mit_singing,hr.employee_mit,hr_skill_singing,hr_skill_type_music,hr_skill_level_l2
+employee_skill_mit_violin,hr.employee_mit,hr_skill_violin,hr_skill_type_music,hr_skill_level_l4
+employee_skill_mit_flute,hr.employee_mit,hr_skill_flute,hr_skill_type_music,hr_skill_level_l2
+employee_skill_mit_email,hr.employee_mit,hr_skill_email,hr_skill_type_marketing,hr_skill_level_ml2
+employee_skill_mit_public,hr.employee_mit,hr_skill_public,hr_skill_type_marketing,hr_skill_level_ml3
+employee_skill_mit_cms,hr.employee_mit,hr_skill_cms,hr_skill_type_marketing,hr_skill_level_ml1
+employee_skill_mit_com,hr.employee_mit,hr_skill_com,hr_skill_type_marketing,hr_skill_level_ml1
+employee_skill_mit_js,hr.employee_mit,hr_skill_js,hr_skill_type_dev,hr_skill_level_elementary
+employee_skill_niv_email,hr.employee_niv,hr_skill_email,hr_skill_type_marketing,hr_skill_level_ml1
+employee_skill_niv_public,hr.employee_niv,hr_skill_public,hr_skill_type_marketing,hr_skill_level_ml4
+employee_skill_niv_c,hr.employee_niv,hr_skill_c,hr_skill_type_dev,hr_skill_level_expert
+employee_skill_niv_android,hr.employee_niv,hr_skill_android,hr_skill_type_dev,hr_skill_level_intermediate
+employee_skill_niv_nosql,hr.employee_niv,hr_skill_nosql,hr_skill_type_dev,hr_skill_level_beginner
+employee_skill_niv_flute,hr.employee_niv,hr_skill_flute,hr_skill_type_music,hr_skill_level_l4
+employee_skill_niv_singing,hr.employee_niv,hr_skill_singing,hr_skill_type_music,hr_skill_level_l4
+employee_skill_stw_com,hr.employee_stw,hr_skill_com,hr_skill_type_marketing,hr_skill_level_ml4
+employee_skill_stw_digital_ad,hr.employee_stw,hr_skill_digital_ad,hr_skill_type_marketing,hr_skill_level_ml2
+employee_skill_chs_digital_ad,hr.employee_chs,hr_skill_digital_ad,hr_skill_type_marketing,hr_skill_level_ml3
+employee_skill_chs_email,hr.employee_chs,hr_skill_email,hr_skill_type_marketing,hr_skill_level_ml3
+employee_skill_chs_arabic,hr.employee_chs,hr_skill_arabic,hr_skill_type_lang,hr_skill_level_c1
+employee_skill_chs_piano,hr.employee_chs,hr_skill_piano,hr_skill_type_music,hr_skill_level_l4
+employee_skill_qdp_com,hr.employee_qdp,hr_skill_com,hr_skill_type_marketing,hr_skill_level_ml4
+employee_skill_qdp_email,hr.employee_qdp,hr_skill_email,hr_skill_type_marketing,hr_skill_level_ml4
+employee_skill_qdp_analytics,hr.employee_qdp,hr_skill_analytics,hr_skill_type_marketing,hr_skill_level_ml2
+employee_skill_qdp_nosql,hr.employee_qdp,hr_skill_nosql,hr_skill_type_dev,hr_skill_level_advanced
+employee_skill_qdp_js,hr.employee_qdp,hr_skill_js,hr_skill_type_dev,hr_skill_level_expert
+employee_skill_qdp_flute,hr.employee_qdp,hr_skill_flute,hr_skill_type_music,hr_skill_level_l1
+employee_skill_qdp_violin,hr.employee_qdp,hr_skill_violin,hr_skill_type_music,hr_skill_level_l4
+employee_skill_qdp_singing,hr.employee_qdp,hr_skill_singing,hr_skill_type_music,hr_skill_level_l4
+employee_skill_qdp_bengali,hr.employee_qdp,hr_skill_bengali,hr_skill_type_lang,hr_skill_level_b2
+employee_skill_qdp_english,hr.employee_qdp,hr_skill_english,hr_skill_type_lang,hr_skill_level_b1
+employee_skill_fme_spark,hr.employee_fme,hr_skill_spark,hr_skill_type_dev,hr_skill_level_beginner
+employee_skill_fme_com,hr.employee_fme,hr_skill_com,hr_skill_type_marketing,hr_skill_level_ml2
+employee_skill_fpi_django,hr.employee_fpi,hr_skill_django,hr_skill_type_dev,hr_skill_level_expert
+employee_skill_fpi_violin,hr.employee_fpi,hr_skill_violin,hr_skill_type_music,hr_skill_level_l1
+employee_skill_fpi_piano,hr.employee_fpi,hr_skill_piano,hr_skill_type_music,hr_skill_level_l1
+employee_skill_fpi_singing,hr.employee_fpi,hr_skill_singing,hr_skill_type_music,hr_skill_level_l4
+employee_skill_fpi_flute,hr.employee_fpi,hr_skill_flute,hr_skill_type_music,hr_skill_level_l2
+employee_skill_fpi_cms,hr.employee_fpi,hr_skill_cms,hr_skill_type_marketing,hr_skill_level_ml1
+employee_skill_jth_hadoop,hr.employee_jth,hr_skill_hadoop,hr_skill_type_dev,hr_skill_level_expert
+employee_skill_jth_nosql,hr.employee_jth,hr_skill_nosql,hr_skill_type_dev,hr_skill_level_elementary
+employee_skill_jth_c,hr.employee_jth,hr_skill_c,hr_skill_type_dev,hr_skill_level_intermediate
+employee_skill_ngh_violin,hr.employee_ngh,hr_skill_violin,hr_skill_type_music,hr_skill_level_l4
+employee_skill_ngh_piano,hr.employee_ngh,hr_skill_piano,hr_skill_type_music,hr_skill_level_l1
+employee_skill_ngh_flute,hr.employee_ngh,hr_skill_flute,hr_skill_type_music,hr_skill_level_l4
+employee_skill_vad_sql,hr.employee_vad,hr_skill_sql,hr_skill_type_dev,hr_skill_level_intermediate
+employee_skill_vad_js,hr.employee_vad,hr_skill_js,hr_skill_type_dev,hr_skill_level_elementary
+employee_skill_vad_spark,hr.employee_vad,hr_skill_spark,hr_skill_type_dev,hr_skill_level_expert
+employee_skill_vad_python,hr.employee_vad,hr_skill_python,hr_skill_type_dev,hr_skill_level_expert
+employee_skill_vad_french,hr.employee_vad,hr_skill_french,hr_skill_type_lang,hr_skill_level_a2
+employee_skill_vad_singing,hr.employee_vad,hr_skill_singing,hr_skill_type_music,hr_skill_level_l2
+employee_skill_vad_public,hr.employee_vad,hr_skill_public,hr_skill_type_marketing,hr_skill_level_ml1
+employee_skill_vad_cms,hr.employee_vad,hr_skill_cms,hr_skill_type_marketing,hr_skill_level_ml3
+employee_skill_vad_analytics,hr.employee_vad,hr_skill_analytics,hr_skill_type_marketing,hr_skill_level_ml1
+employee_skill_vad_digital_ad,hr.employee_vad,hr_skill_digital_ad,hr_skill_type_marketing,hr_skill_level_ml3
+employee_skill_han_bengali,hr.employee_han,hr_skill_bengali,hr_skill_type_lang,hr_skill_level_b2
+employee_skill_han_python,hr.employee_han,hr_skill_python,hr_skill_type_dev,hr_skill_level_advanced
+employee_skill_han_react,hr.employee_han,hr_skill_react,hr_skill_type_dev,hr_skill_level_advanced
+employee_skill_han_analytics,hr.employee_han,hr_skill_analytics,hr_skill_type_marketing,hr_skill_level_ml1
+employee_skill_han_digital_ad,hr.employee_han,hr_skill_digital_ad,hr_skill_type_marketing,hr_skill_level_ml4
+employee_skill_han_violin,hr.employee_han,hr_skill_violin,hr_skill_type_music,hr_skill_level_l1
+employee_skill_han_flute,hr.employee_han,hr_skill_flute,hr_skill_type_music,hr_skill_level_l1
+employee_skill_han_piano,hr.employee_han,hr_skill_piano,hr_skill_type_music,hr_skill_level_l3
+employee_skill_jve_cms,hr.employee_jve,hr_skill_cms,hr_skill_type_marketing,hr_skill_level_ml1
+employee_skill_jve_email,hr.employee_jve,hr_skill_email,hr_skill_type_marketing,hr_skill_level_ml1
+employee_skill_jve_digital_ad,hr.employee_jve,hr_skill_digital_ad,hr_skill_type_marketing,hr_skill_level_ml1
+employee_skill_jve_com,hr.employee_jve,hr_skill_com,hr_skill_type_marketing,hr_skill_level_ml4
+employee_skill_jve_violin,hr.employee_jve,hr_skill_violin,hr_skill_type_music,hr_skill_level_l2
+employee_skill_jve_singing,hr.employee_jve,hr_skill_singing,hr_skill_type_music,hr_skill_level_l3
+employee_skill_jve_flute,hr.employee_jve,hr_skill_flute,hr_skill_type_music,hr_skill_level_l4
+employee_skill_jve_piano,hr.employee_jve,hr_skill_piano,hr_skill_type_music,hr_skill_level_l3
+employee_skill_jve_french,hr.employee_jve,hr_skill_french,hr_skill_type_lang,hr_skill_level_b1
+employee_skill_jve_spark,hr.employee_jve,hr_skill_spark,hr_skill_type_dev,hr_skill_level_expert
+employee_skill_jve_c,hr.employee_jve,hr_skill_c,hr_skill_type_dev,hr_skill_level_elementary
+employee_skill_jve_js,hr.employee_jve,hr_skill_js,hr_skill_type_dev,hr_skill_level_expert
+employee_skill_jve_hadoop,hr.employee_jve,hr_skill_hadoop,hr_skill_type_dev,hr_skill_level_advanced
+employee_skill_jep_piano,hr.employee_jep,hr_skill_piano,hr_skill_type_music,hr_skill_level_l1
+employee_skill_jep_flute,hr.employee_jep,hr_skill_flute,hr_skill_type_music,hr_skill_level_l4
+employee_skill_jep_singing,hr.employee_jep,hr_skill_singing,hr_skill_type_music,hr_skill_level_l4
+employee_skill_jep_violin,hr.employee_jep,hr_skill_violin,hr_skill_type_music,hr_skill_level_l4
+employee_skill_jod_singing,hr.employee_jod,hr_skill_singing,hr_skill_type_music,hr_skill_level_l4
+employee_skill_jod_violin,hr.employee_jod,hr_skill_violin,hr_skill_type_music,hr_skill_level_l4
+employee_skill_jod_filipino,hr.employee_jod,hr_skill_filipino,hr_skill_type_lang,hr_skill_level_c1
+employee_skill_jod_spark,hr.employee_jod,hr_skill_spark,hr_skill_type_dev,hr_skill_level_advanced
+employee_skill_jod_sql,hr.employee_jod,hr_skill_sql,hr_skill_type_dev,hr_skill_level_expert
+employee_skill_jod_analytics,hr.employee_jod,hr_skill_analytics,hr_skill_type_marketing,hr_skill_level_ml1
+employee_skill_jod_public,hr.employee_jod,hr_skill_public,hr_skill_type_marketing,hr_skill_level_ml2
+employee_skill_jog_violin,hr.employee_jog,hr_skill_violin,hr_skill_type_music,hr_skill_level_l4
+employee_skill_jog_singing,hr.employee_jog,hr_skill_singing,hr_skill_type_music,hr_skill_level_l1
+employee_skill_jog_public,hr.employee_jog,hr_skill_public,hr_skill_type_marketing,hr_skill_level_ml1
+employee_skill_jog_cms,hr.employee_jog,hr_skill_cms,hr_skill_type_marketing,hr_skill_level_ml1
+employee_skill_jog_filipino,hr.employee_jog,hr_skill_filipino,hr_skill_type_lang,hr_skill_level_c1
+employee_skill_jog_german,hr.employee_jog,hr_skill_german,hr_skill_type_lang,hr_skill_level_c1
+employee_skill_jog_bengali,hr.employee_jog,hr_skill_bengali,hr_skill_type_lang,hr_skill_level_a1
+employee_skill_jog_django,hr.employee_jog,hr_skill_django,hr_skill_type_dev,hr_skill_level_elementary
+employee_skill_jog_react,hr.employee_jog,hr_skill_react,hr_skill_type_dev,hr_skill_level_beginner
+employee_skill_jgo_digital_ad,hr.employee_jgo,hr_skill_digital_ad,hr_skill_type_marketing,hr_skill_level_ml3
+employee_skill_jgo_public,hr.employee_jgo,hr_skill_public,hr_skill_type_marketing,hr_skill_level_ml2
+employee_skill_jgo_analytics,hr.employee_jgo,hr_skill_analytics,hr_skill_type_marketing,hr_skill_level_ml1
+employee_skill_jgo_com,hr.employee_jgo,hr_skill_com,hr_skill_type_marketing,hr_skill_level_ml1
+employee_skill_lur_english,hr.employee_lur,hr_skill_english,hr_skill_type_lang,hr_skill_level_c2
+employee_skill_lur_french,hr.employee_lur,hr_skill_french,hr_skill_type_lang,hr_skill_level_a1
+employee_skill_lur_singing,hr.employee_lur,hr_skill_singing,hr_skill_type_music,hr_skill_level_l3
+employee_skill_hne_spanish,hr.employee_hne,hr_skill_spanish,hr_skill_type_lang,hr_skill_level_c1
+employee_skill_hne_cms,hr.employee_hne,hr_skill_cms,hr_skill_type_marketing,hr_skill_level_ml4
+employee_skill_hne_public,hr.employee_hne,hr_skill_public,hr_skill_type_marketing,hr_skill_level_ml3
+employee_skill_hne_com,hr.employee_hne,hr_skill_com,hr_skill_type_marketing,hr_skill_level_ml4
+employee_skill_hne_digital_ad,hr.employee_hne,hr_skill_digital_ad,hr_skill_type_marketing,hr_skill_level_ml3
+employee_skill_hne_singing,hr.employee_hne,hr_skill_singing,hr_skill_type_music,hr_skill_level_l2
+employee_skill_hne_flute,hr.employee_hne,hr_skill_flute,hr_skill_type_music,hr_skill_level_l3
+employee_skill_hne_piano,hr.employee_hne,hr_skill_piano,hr_skill_type_music,hr_skill_level_l4
+employee_skill_hne_sql,hr.employee_hne,hr_skill_sql,hr_skill_type_dev,hr_skill_level_expert
diff --git a/addons/hr_skills/data/hr.resume.line.csv b/addons/hr_skills/data/hr.resume.line.csv new file mode 100644 index 00000000000..caffabfb37b --- /dev/null +++ b/addons/hr_skills/data/hr.resume.line.csv @@ -0,0 +1,96 @@ +id,employee_id:id,name,date_start,date_end,line_type_id:id,description
+employee_resume_admin_park_lake_state_school,hr.employee_admin,Park Lake State School,2012-02-27,2012-11-03,resume_type_education,
+employee_resume_admin_blue_mountains_grammar_school,hr.employee_admin,Blue Mountains Grammar School,2008-12-09,2011-12-16,resume_type_education,
+employee_resume_admin_harrington_park_public_school,hr.employee_admin,Harrington Park Public School,2006-09-21,2008-11-15,resume_type_education,
+employee_resume_admin_schultz_inc,hr.employee_admin,Schultz Inc,2009-03-23,,resume_type_experience,"Engineer, electrical"
+employee_resume_admin_greeneorr,hr.employee_admin,Greene-Orr,2008-01-21,2006-09-21,resume_type_experience,Magazine journalist
+employee_resume_admin_white_inc,hr.employee_admin,White Inc,2007-05-24,2006-12-22,resume_type_experience,"Designer, television/film set"
+employee_resume_admin_lewisbailey,hr.employee_admin,Lewis-Bailey,2009-04-22,2006-12-22,resume_type_experience,Civil Service fast streamer
+employee_resume_al_bathurst_west_public_school,hr.employee_al,Bathurst West Public School,1997-05-06,1998-03-18,resume_type_education,
+employee_resume_al_jones_ltd,hr.employee_al,Jones Ltd,1998-02-05,1997-08-05,resume_type_experience,Energy manager
+employee_resume_al_garcia_smith_and_king,hr.employee_al,"Garcia, Smith and King",1998-09-05,,resume_type_experience,Medical illustrator
+employee_resume_mit_seymour_p12_college,hr.employee_mit,Seymour P-12 College,2013-08-11,2015-07-01,resume_type_education,
+employee_resume_mit_darlington_primary_school,hr.employee_mit,Darlington Primary School,2012-08-08,2013-05-05,resume_type_education,
+employee_resume_mit_sutherland_dianella_primary_school,hr.employee_mit,Sutherland Dianella Primary School,2010-03-25,2012-06-27,resume_type_education,
+employee_resume_mit_burns_lester_and_cuevas,hr.employee_mit,"Burns, Lester and Cuevas",2012-04-24,2010-05-26,resume_type_experience,Police officer
+employee_resume_mit_hill_group,hr.employee_mit,Hill Group,2012-05-25,2010-04-25,resume_type_experience,Glass blower/designer
+employee_resume_mit_parker_roberson_and_acosta,hr.employee_mit,"Parker, Roberson and Acosta",2013-03-25,2010-04-25,resume_type_experience,Science writer
+employee_resume_mit_robinson_crawford_and_norman,hr.employee_mit,"Robinson, Crawford and Norman",2011-10-23,2010-06-23,resume_type_experience,Psychiatric nurse
+employee_resume_niv_kialla_west_primary_school,hr.employee_niv,Kialla West Primary School,2016-08-23,2017-03-26,resume_type_education,
+employee_resume_niv_arroyo_ltd,hr.employee_niv,Arroyo Ltd,2017-05-23,2016-09-23,resume_type_experience,Insurance risk surveyor
+employee_resume_stw_northern_bay_p12_college,hr.employee_stw,Northern Bay P-12 College,2016-03-25,2017-06-03,resume_type_education,
+employee_resume_stw_whitsunday_anglican_school,hr.employee_stw,Whitsunday Anglican School,2014-05-06,2016-03-21,resume_type_education,
+employee_resume_stw_tyndale_christian_school,hr.employee_stw,Tyndale Christian School,2011-03-04,2014-03-28,resume_type_education,
+employee_resume_stw_green_ltd,hr.employee_stw,Green Ltd,2013-01-31,2011-04-01,resume_type_experience,Arboriculturist
+employee_resume_stw_lynchhodges,hr.employee_stw,Lynch-Hodges,2012-12-01,,resume_type_experience,Publishing rights manager
+employee_resume_stw_finley_rowe_and_adams,hr.employee_stw,"Finley, Rowe and Adams",2012-12-31,,resume_type_experience,"Copywriter, advertising"
+employee_resume_chs_avoca_primary_school,hr.employee_chs,Avoca Primary School,1996-03-04,1996-10-26,resume_type_education,
+employee_resume_chs_boyd_wilson_and_moore,hr.employee_chs,"Boyd, Wilson and Moore",1997-11-03,,resume_type_experience,Medical physicist
+employee_resume_chs_freeman_williams_and_berger,hr.employee_chs,"Freeman, Williams and Berger",1997-02-02,1996-06-04,resume_type_experience,Human resources officer
+employee_resume_chs_hanson_roach_and_jordan,hr.employee_chs,"Hanson, Roach and Jordan",1997-03-04,1996-03-04,resume_type_experience,Geographical information systems officer
+employee_resume_chs_davis_plc,hr.employee_chs,Davis PLC,1996-10-05,1996-06-04,resume_type_experience,"Secretary, company"
+employee_resume_qdp_parke_state_school,hr.employee_qdp,Parke State School,1997-06-26,1999-03-17,resume_type_education,
+employee_resume_qdp_evans_cooper_and_white,hr.employee_qdp,"Evans, Cooper and White",1999-04-26,,resume_type_experience,"Therapist, speech and language"
+employee_resume_qdp_rivera_shaw_and_hughes,hr.employee_qdp,"Rivera, Shaw and Hughes",1998-11-26,,resume_type_experience,Landscape architect
+employee_resume_qdp_phillips_jones_and_brown,hr.employee_qdp,"Phillips, Jones and Brown",1999-12-27,1997-07-27,resume_type_experience,"Teacher, special educational needs"
+employee_resume_qdp_hughes_parker_and_barber,hr.employee_qdp,"Hughes, Parker and Barber",1999-02-24,1997-07-27,resume_type_experience,"Engineer, drilling"
+employee_resume_fme_st_michaels_primary_school,hr.employee_fme,St Michael's Primary School,2006-12-22,2009-01-23,resume_type_education,
+employee_resume_fme_wodonga_primary_school,hr.employee_fme,Wodonga Primary School,2006-02-21,2006-09-27,resume_type_education,
+employee_resume_fme_leinster_school,hr.employee_fme,Leinster School,2003-10-14,2005-11-09,resume_type_education,
+employee_resume_fme_russellwebster,hr.employee_fme,Russell-Webster,2006-05-14,2003-11-14,resume_type_experience,"Biochemist, clinical"
+employee_resume_fme_lewis_group,hr.employee_fme,Lewis Group,2004-07-14,2003-11-14,resume_type_experience,Sports development officer
+employee_resume_fme_johnson_shaw_and_carroll,hr.employee_fme,"Johnson, Shaw and Carroll",2004-07-14,2003-11-14,resume_type_experience,"Engineer, mining"
+employee_resume_fpi_st_raphaels_primary_school,hr.employee_fpi,St Raphael's Primary School,2006-08-13,2008-09-30,resume_type_education,
+employee_resume_fpi_woodridge_state_school,hr.employee_fpi,Woodridge State School,2005-12-28,2006-08-09,resume_type_education,
+employee_resume_fpi_our_lady_star_of_the_sea_school,hr.employee_fpi,Our Lady Star of the Sea School,2003-06-07,2005-12-26,resume_type_education,
+employee_resume_fpi_chavez_group,hr.employee_fpi,Chavez Group,2004-04-06,,resume_type_experience,Mental health nurse
+employee_resume_fpi_hubbarddean,hr.employee_fpi,Hubbard-Dean,2005-05-07,2003-08-08,resume_type_experience,Conference centre manager
+employee_resume_jth_narellan_public_school,hr.employee_jth,Narellan Public School,2004-11-02,2007-10-09,resume_type_education,
+employee_resume_jth_wilkinson_plc,hr.employee_jth,Wilkinson PLC,2006-02-01,,resume_type_experience,Architectural technologist
+employee_resume_jth_simmonswilcox,hr.employee_jth,Simmons-Wilcox,2005-09-03,2004-12-03,resume_type_experience,IT sales professional
+employee_resume_jth_goodman_inc,hr.employee_jth,Goodman Inc,2007-06-03,,resume_type_experience,Analytical chemist
+employee_resume_ngh_armidale_city_public_school,hr.employee_ngh,Armidale City Public School,1994-11-19,1997-02-18,resume_type_education,
+employee_resume_ngh_craigmore_south_junior_primary_school,hr.employee_ngh,Craigmore South Junior Primary School,1993-05-11,1994-08-24,resume_type_education,
+employee_resume_ngh_stanleymendez,hr.employee_ngh,Stanley-Mendez,1993-12-12,1993-05-11,resume_type_experience,Glass blower/designer
+employee_resume_ngh_jackson_schwartz_and_aguirre,hr.employee_ngh,"Jackson, Schwartz and Aguirre",1995-04-12,1993-07-12,resume_type_experience,Analytical chemist
+employee_resume_vad_wycheproof_p12_college,hr.employee_vad,Wycheproof P-12 College,1999-06-02,2000-12-01,resume_type_education,
+employee_resume_vad_christian_outreach_college,hr.employee_vad,Christian Outreach College,1996-08-02,1999-02-01,resume_type_education,
+employee_resume_vad_thomas_chirnside_primary_school,hr.employee_vad,Thomas Chirnside Primary School,1995-05-05,1996-07-27,resume_type_education,
+employee_resume_vad_loganmartin,hr.employee_vad,Logan-Martin,1996-04-04,1995-07-05,resume_type_experience,Petroleum engineer
+employee_resume_vad_gallegos_little_and_walters,hr.employee_vad,"Gallegos, Little and Walters",1996-12-02,1995-08-05,resume_type_experience,"Lecturer, higher education"
+employee_resume_han_king_island_district_high_school,hr.employee_han,King Island District High School,2014-08-17,2016-05-06,resume_type_education,
+employee_resume_han_elphinstone_primary_school,hr.employee_han,Elphinstone Primary School,2013-07-18,2014-07-29,resume_type_education,
+employee_resume_han_william_light_r12_school,hr.employee_han,William Light R-12 School,2011-01-29,2013-03-30,resume_type_education,
+employee_resume_han_davis_plc,hr.employee_han,Davis PLC,2012-10-30,2011-01-29,resume_type_experience,"Engineer, production"
+employee_resume_han_perezmorgan,hr.employee_han,Perez-Morgan,2013-05-01,,resume_type_experience,Geoscientist
+employee_resume_jve_ellinbank_primary_school,hr.employee_jve,Ellinbank Primary School,2003-02-16,2004-05-18,resume_type_education,
+employee_resume_jve_talbot_primary_school,hr.employee_jve,Talbot Primary School,2002-07-01,2003-02-09,resume_type_education,
+employee_resume_jve_saundersadkins,hr.employee_jve,Saunders-Adkins,2003-07-01,,resume_type_experience,Jewellery designer
+employee_resume_jve_davis_and_sons,hr.employee_jve,Davis and Sons,2004-12-28,2002-07-01,resume_type_experience,Health physicist
+employee_resume_jve_arnoldcohen,hr.employee_jve,Arnold-Cohen,2003-12-29,,resume_type_experience,Personnel officer
+employee_resume_jep_lawson_public_school,hr.employee_jep,Lawson Public School,1998-06-07,2000-02-17,resume_type_education,
+employee_resume_jep_trinity_college,hr.employee_jep,Trinity College,1995-08-21,1998-04-10,resume_type_education,
+employee_resume_jep_woodend_primary_school,hr.employee_jep,Woodend Primary School,1992-11-22,1995-05-05,resume_type_education,
+employee_resume_jep_mcneil_rodriguez_and_warren,hr.employee_jep,"Mcneil, Rodriguez and Warren",1994-11-22,1993-01-22,resume_type_experience,Sub
+employee_resume_jep_davis_sanchez_and_miller,hr.employee_jep,"Davis, Sanchez and Miller",1995-05-25,1992-11-22,resume_type_experience,Customer service manager
+employee_resume_jep_cole_ltd,hr.employee_jep,Cole Ltd,1994-02-22,,resume_type_experience,Fast food restaurant manager
+employee_resume_jep_garcia_and_sons,hr.employee_jep,Garcia and Sons,1995-07-25,1992-12-23,resume_type_experience,Careers information officer
+employee_resume_jod_umbakumba_school,hr.employee_jod,Umbakumba School,2009-11-08,2010-09-30,resume_type_education,
+employee_resume_jod_wilson_ltd,hr.employee_jod,Wilson Ltd,2011-02-07,2010-01-08,resume_type_experience,Trade union research officer
+employee_resume_jog_port_curtis_road_state_school,hr.employee_jog,Port Curtis Road State School,2005-04-10,2006-09-30,resume_type_education,
+employee_resume_jog_claremont_college,hr.employee_jog,Claremont College,2004-01-12,2005-03-10,resume_type_education,
+employee_resume_jog_mandurah_catholic_college,hr.employee_jog,Mandurah Catholic College,2003-02-08,2003-09-28,resume_type_education,
+employee_resume_jog_douglas_thompson_and_conner,hr.employee_jog,"Douglas, Thompson and Conner",2004-01-10,,resume_type_experience,Music therapist
+employee_resume_jog_allenkeller,hr.employee_jog,Allen-Keller,2005-07-09,2003-03-11,resume_type_experience,Lexicographer
+employee_resume_jgo_tottenham_central_school,hr.employee_jgo,Tottenham Central School,2001-04-13,2002-09-06,resume_type_education,
+employee_resume_jgo_galilee_catholic_school,hr.employee_jgo,Galilee Catholic School,2000-08-07,2001-02-16,resume_type_education,
+employee_resume_jgo_martin_stanley_and_duncan,hr.employee_jgo,"Martin, Stanley and Duncan",2001-05-07,,resume_type_experience,IT technical support officer
+employee_resume_jgo_fox_and_sons,hr.employee_jgo,Fox and Sons,2003-03-07,2000-10-05,resume_type_experience,Merchant navy officer
+employee_resume_lur_holy_family_primary_school,hr.employee_lur,Holy Family Primary School,2009-07-16,2012-07-23,resume_type_education,
+employee_resume_lur_lindenow_primary_school,hr.employee_lur,Lindenow Primary School,2007-07-08,2009-07-16,resume_type_education,
+employee_resume_lur_narrogin_primary_school,hr.employee_lur,Narrogin Primary School,2005-12-14,2007-06-10,resume_type_education,
+employee_resume_lur_ramirez_inc,hr.employee_lur,Ramirez Inc,2006-11-13,,resume_type_experience,Glass blower/designer
+employee_resume_lur_whitebell,hr.employee_lur,White-Bell,2006-04-15,2006-01-13,resume_type_experience,Sports coach
+employee_resume_hne_st_peters_parish_primary_school,hr.employee_hne,St Peter's Parish Primary School,2008-05-18,2008-11-17,resume_type_education,
+employee_resume_hne_dandenong_north_primary_school,hr.employee_hne,Dandenong North Primary School,2005-07-20,2008-02-15,resume_type_education,
+employee_resume_hne_nortonsilva,hr.employee_hne,Norton-Silva,2007-05-21,2005-09-19,resume_type_experience,"Horticulturist, commercial"
diff --git a/addons/hr_skills/data/hr_resume_demo.xml b/addons/hr_skills/data/hr_resume_demo.xml index 4e4d8642c2b..79cd1a4ea8c 100644 --- a/addons/hr_skills/data/hr_resume_demo.xml +++ b/addons/hr_skills/data/hr_resume_demo.xml @@ -12,6 +12,9 @@ <record id="hr_skill_type_music" model="hr.skill.type"> <field name="name">Music</field> </record> + <record id="hr_skill_type_marketing" model="hr.skill.type"> + <field name="name">Marketing</field> + </record> <!--Skill Levels--> <record id="hr_skill_level_a1" model="hr.skill.level"> @@ -107,6 +110,31 @@ <field name="skill_type_id" ref="hr_skill_type_music"/> </record> + <record id="hr_skill_level_ml1" model="hr.skill.level"> + <field name="name">L1</field> + <field name="level_progress">25</field> + <field name="sequence">1</field> + <field name="skill_type_id" ref="hr_skill_type_marketing"/> + </record> + <record id="hr_skill_level_ml2" model="hr.skill.level"> + <field name="name">L2</field> + <field name="level_progress">50</field> + <field name="sequence">5</field> + <field name="skill_type_id" ref="hr_skill_type_marketing"/> + </record> + <record id="hr_skill_level_ml3" model="hr.skill.level"> + <field name="name">L3</field> + <field name="level_progress">75</field> + <field name="sequence">15</field> + <field name="skill_type_id" ref="hr_skill_type_marketing"/> + </record> + <record id="hr_skill_level_ml4" model="hr.skill.level"> + <field name="name">L4</field> + <field name="level_progress">100</field> + <field name="sequence">25</field> + <field name="skill_type_id" ref="hr_skill_type_marketing"/> + </record> + <!-- **** Skills **** --> <!-- Languages --> <record id="hr_skill_french" model="hr.skill"> @@ -129,6 +157,14 @@ <field name="name">Filipino</field> <field name="skill_type_id" ref="hr_skill_type_lang"/> </record> + <record id="hr_skill_arabic" model="hr.skill"> + <field name="name">Arabic</field> + <field name="skill_type_id" ref="hr_skill_type_lang"/> + </record> + <record id="hr_skill_bengali" model="hr.skill"> + <field name="name">Bengali</field> + <field name="skill_type_id" ref="hr_skill_type_lang"/> + </record> <!-- Dev --> <record id="hr_skill_js" model="hr.skill"> @@ -155,6 +191,22 @@ <field name="name">Spark</field> <field name="skill_type_id" ref="hr_skill_type_dev"/> </record> + <record id="hr_skill_react" model="hr.skill"> + <field name="name">React</field> + <field name="skill_type_id" ref="hr_skill_type_dev"/> + </record> + <record id="hr_skill_django" model="hr.skill"> + <field name="name">Django</field> + <field name="skill_type_id" ref="hr_skill_type_dev"/> + </record> + <record id="hr_skill_sql" model="hr.skill"> + <field name="name">RDMS</field> + <field name="skill_type_id" ref="hr_skill_type_dev"/> + </record> + <record id="hr_skill_nosql" model="hr.skill"> + <field name="name">NoSQL</field> + <field name="skill_type_id" ref="hr_skill_type_dev"/> + </record> <!-- Music --> <record id="hr_skill_piano" model="hr.skill"> @@ -174,95 +226,30 @@ <field name="skill_type_id" ref="hr_skill_type_music"/> </record> - <!-- **** Employee Skills **** --> - <!-- Abigael --> - <record id="employee_level_1" model="hr.employee.skill"> - <field name="employee_id" ref="hr.employee_hne"/> - <field name="skill_id" ref="hr_skill_french"/> - <field name="skill_type_id" ref="hr_skill_type_lang"/> - <field name="skill_level_id" ref="hr_skill_level_b2"/> - </record> - <record id="employee_level_2" model="hr.employee.skill"> - <field name="employee_id" ref="hr.employee_hne"/> - <field name="skill_id" ref="hr_skill_filipino"/> - <field name="skill_type_id" ref="hr_skill_type_lang"/> - <field name="skill_level_id" ref="hr_skill_level_a1"/> - </record> - <record id="employee_level_3" model="hr.employee.skill"> - <field name="employee_id" ref="hr.employee_hne"/> - <field name="skill_id" ref="hr_skill_english"/> - <field name="skill_type_id" ref="hr_skill_type_lang"/> - <field name="skill_level_id" ref="hr_skill_level_c2"/> - </record> - - <!-- Admin --> - <record id="employee_level_4" model="hr.employee.skill"> - <field name="employee_id" ref="hr.employee_admin"/> - <field name="skill_id" ref="hr_skill_spanish"/> - <field name="skill_type_id" ref="hr_skill_type_lang"/> - <field name="skill_level_id" ref="hr_skill_level_c2"/> - </record> - <record id="employee_level_5" model="hr.employee.skill"> - <field name="employee_id" ref="hr.employee_admin"/> - <field name="skill_id" ref="hr_skill_filipino"/> - <field name="skill_type_id" ref="hr_skill_type_lang"/> - <field name="skill_level_id" ref="hr_skill_level_a2"/> - </record> - <record id="employee_level_6" model="hr.employee.skill"> - <field name="employee_id" ref="hr.employee_admin"/> - <field name="skill_id" ref="hr_skill_js"/> - <field name="skill_type_id" ref="hr_skill_type_dev"/> - <field name="skill_level_id" ref="hr_skill_level_intermediate"/> - </record> - <record id="employee_level_7" model="hr.employee.skill"> - <field name="employee_id" ref="hr.employee_admin"/> - <field name="skill_id" ref="hr_skill_c"/> - <field name="skill_type_id" ref="hr_skill_type_dev"/> - <field name="skill_level_id" ref="hr_skill_level_advanced"/> - </record> - <record id="employee_level_8" model="hr.employee.skill"> - <field name="employee_id" ref="hr.employee_admin"/> - <field name="skill_id" ref="hr_skill_spark"/> - <field name="skill_type_id" ref="hr_skill_type_dev"/> - <field name="skill_level_id" ref="hr_skill_level_expert"/> - </record> - - <!-- Demo --> - <record id="employee_level_9" model="hr.employee.skill"> - <field name="employee_id" ref="hr.employee_qdp"/> - <field name="skill_id" ref="hr_skill_french"/> - <field name="skill_type_id" ref="hr_skill_type_lang"/> - <field name="skill_level_id" ref="hr_skill_level_c2"/> - </record> - <record id="employee_level_10" model="hr.employee.skill"> - <field name="employee_id" ref="hr.employee_qdp"/> - <field name="skill_id" ref="hr_skill_js"/> - <field name="skill_type_id" ref="hr_skill_type_dev"/> - <field name="skill_level_id" ref="hr_skill_level_elementary"/> - </record> - <record id="employee_level_11" model="hr.employee.skill"> - <field name="employee_id" ref="hr.employee_qdp"/> - <field name="skill_id" ref="hr_skill_python"/> - <field name="skill_type_id" ref="hr_skill_type_dev"/> - <field name="skill_level_id" ref="hr_skill_level_expert"/> - </record> - <record id="employee_level_12" model="hr.employee.skill"> - <field name="employee_id" ref="hr.employee_qdp"/> - <field name="skill_id" ref="hr_skill_spark"/> - <field name="skill_type_id" ref="hr_skill_type_dev"/> - <field name="skill_level_id" ref="hr_skill_level_expert"/> - </record> - <record id="employee_level_13" model="hr.employee.skill"> - <field name="employee_id" ref="hr.employee_qdp"/> - <field name="skill_id" ref="hr_skill_piano"/> - <field name="skill_type_id" ref="hr_skill_type_music"/> - <field name="skill_level_id" ref="hr_skill_level_l1"/> - </record> - <record id="employee_level_14" model="hr.employee.skill"> - <field name="employee_id" ref="hr.employee_qdp"/> - <field name="skill_id" ref="hr_skill_singing"/> - <field name="skill_type_id" ref="hr_skill_type_music"/> - <field name="skill_level_id" ref="hr_skill_level_l3"/> + <!-- Marketing --> + <record id="hr_skill_com" model="hr.skill"> + <field name="name">Communication</field> + <field name="skill_type_id" ref="hr_skill_type_marketing"/> + </record> + <record id="hr_skill_analytics" model="hr.skill"> + <field name="name">Analytics</field> + <field name="skill_type_id" ref="hr_skill_type_marketing"/> + </record> + <record id="hr_skill_digital_ad" model="hr.skill"> + <field name="name">Digital advertising</field> + <field name="skill_type_id" ref="hr_skill_type_marketing"/> + </record> + <record id="hr_skill_public" model="hr.skill"> + <field name="name">Public Speaking</field> + <field name="skill_type_id" ref="hr_skill_type_marketing"/> + </record> + <record id="hr_skill_cms" model="hr.skill"> + <field name="name">CMS</field> + <field name="skill_type_id" ref="hr_skill_type_marketing"/> + </record> + <record id="hr_skill_email" model="hr.skill"> + <field name="name">Email Marketing</field> + <field name="skill_type_id" ref="hr_skill_type_marketing"/> </record> <!-- Resumé --> diff --git a/addons/hr_skills/i18n/hr_skills.pot b/addons/hr_skills/i18n/hr_skills.pot new file mode 100644 index 00000000000..a61b5e8f926 --- /dev/null +++ b/addons/hr_skills/i18n/hr_skills.pot @@ -0,0 +1,298 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * hr_skills +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~12.2\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-03-20 14:18+0000\n" +"PO-Revision-Date: 2019-03-20 14:18+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: hr_skills +#. openerp-web +#: code:addons/hr_skills/static/src/xml/resume_templates.xml:46 +#, python-format +msgid "ADD" +msgstr "" + +#. module: hr_skills +#: model:ir.model.fields,field_description:hr_skills.field_hr_employee_skill__create_uid +#: model:ir.model.fields,field_description:hr_skills.field_hr_resume_line__create_uid +#: model:ir.model.fields,field_description:hr_skills.field_hr_resume_line_type__create_uid +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill__create_uid +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill_level__create_uid +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill_type__create_uid +msgid "Created by" +msgstr "" + +#. module: hr_skills +#: model:ir.model.fields,field_description:hr_skills.field_hr_employee_skill__create_date +#: model:ir.model.fields,field_description:hr_skills.field_hr_resume_line__create_date +#: model:ir.model.fields,field_description:hr_skills.field_hr_resume_line_type__create_date +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill__create_date +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill_level__create_date +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill_type__create_date +msgid "Created on" +msgstr "" + +#. module: hr_skills +#. openerp-web +#: code:addons/hr_skills/static/src/js/resume_widget.js:142 +#, python-format +msgid "Current" +msgstr "" + +#. module: hr_skills +#: model:ir.model.fields,field_description:hr_skills.field_hr_resume_line__date_end +msgid "Date End" +msgstr "" + +#. module: hr_skills +#: model:ir.model.fields,field_description:hr_skills.field_hr_resume_line__date_start +msgid "Date Start" +msgstr "" + +#. module: hr_skills +#: model:ir.model.fields,field_description:hr_skills.field_hr_resume_line__description +#: model_terms:ir.ui.view,arch_db:hr_skills.resume_line_view_form +msgid "Description" +msgstr "" + +#. module: hr_skills +#: model:ir.model.fields,field_description:hr_skills.field_hr_employee_skill__display_name +#: model:ir.model.fields,field_description:hr_skills.field_hr_resume_line__display_name +#: model:ir.model.fields,field_description:hr_skills.field_hr_resume_line_type__display_name +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill__display_name +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill_level__display_name +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill_type__display_name +msgid "Display Name" +msgstr "" + +#. module: hr_skills +#: model:ir.model,name:hr_skills.model_hr_employee +#: model:ir.model.fields,field_description:hr_skills.field_hr_employee_skill__employee_id +#: model:ir.model.fields,field_description:hr_skills.field_hr_resume_line__employee_id +msgid "Employee" +msgstr "" + +#. module: hr_skills +#: model:ir.model.fields,field_description:hr_skills.field_hr_employee_skill__id +#: model:ir.model.fields,field_description:hr_skills.field_hr_resume_line__id +#: model:ir.model.fields,field_description:hr_skills.field_hr_resume_line_type__id +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill__id +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill_level__id +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill_type__id +msgid "ID" +msgstr "" + +#. module: hr_skills +#: model:ir.model.fields,field_description:hr_skills.field_hr_employee_skill____last_update +#: model:ir.model.fields,field_description:hr_skills.field_hr_resume_line____last_update +#: model:ir.model.fields,field_description:hr_skills.field_hr_resume_line_type____last_update +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill____last_update +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill_level____last_update +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill_type____last_update +msgid "Last Modified on" +msgstr "" + +#. module: hr_skills +#: model:ir.model.fields,field_description:hr_skills.field_hr_employee_skill__write_uid +#: model:ir.model.fields,field_description:hr_skills.field_hr_resume_line__write_uid +#: model:ir.model.fields,field_description:hr_skills.field_hr_resume_line_type__write_uid +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill__write_uid +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill_level__write_uid +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill_type__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: hr_skills +#: model:ir.model.fields,field_description:hr_skills.field_hr_employee_skill__write_date +#: model:ir.model.fields,field_description:hr_skills.field_hr_resume_line__write_date +#: model:ir.model.fields,field_description:hr_skills.field_hr_resume_line_type__write_date +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill__write_date +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill_level__write_date +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill_type__write_date +msgid "Last Updated on" +msgstr "" + +#. module: hr_skills +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill_type__skill_level_ids +#: model_terms:ir.ui.view,arch_db:hr_skills.hr_employee_skill_type_view_form +msgid "Levels" +msgstr "" + +#. module: hr_skills +#: model:ir.model.fields,field_description:hr_skills.field_hr_resume_line__name +#: model:ir.model.fields,field_description:hr_skills.field_hr_resume_line_type__name +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill__name +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill_level__name +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill_type__name +msgid "Name" +msgstr "" + +#. module: hr_skills +#: model:ir.model.fields,field_description:hr_skills.field_hr_employee_skill__level_progress +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill_level__level_progress +msgid "Progress" +msgstr "" + +#. module: hr_skills +#: model_terms:ir.ui.view,arch_db:hr_skills.employee_skill_level_view_form +msgid "Progress (%)" +msgstr "" + +#. module: hr_skills +#: model:ir.model.fields,help:hr_skills.field_hr_employee_skill__level_progress +#: model:ir.model.fields,help:hr_skills.field_hr_skill_level__level_progress +msgid "Progress from zero knowledge (0%) to fully mastered (100%)." +msgstr "" + +#. module: hr_skills +#: model:ir.ui.menu,name:hr_skills.menu_human_resources_configuration_resume +#: model_terms:ir.ui.view,arch_db:hr_skills.hr_employee_view_form +#: model_terms:ir.ui.view,arch_db:hr_skills.hr_employee_view_search +#: model_terms:ir.ui.view,arch_db:hr_skills.res_users_view_form +#: model_terms:ir.ui.view,arch_db:hr_skills.resume_line_view_form +msgid "Resumé" +msgstr "" + +#. module: hr_skills +#: model:ir.actions.act_window,name:hr_skills.hr_resume_type_action +msgid "Resumé Line Types" +msgstr "" + +#. module: hr_skills +#: model:ir.model,name:hr_skills.model_hr_resume_line +msgid "Resumé line of an employee" +msgstr "" + +#. module: hr_skills +#: model_terms:ir.ui.view,arch_db:hr_skills.resume_line_view_search +msgid "Resumé line type" +msgstr "" + +#. module: hr_skills +#: model:ir.model.fields,field_description:hr_skills.field_hr_employee__resume_line_ids +#: model:ir.model.fields,field_description:hr_skills.field_res_users__resume_line_ids +msgid "Resumé lines" +msgstr "" + +#. module: hr_skills +#: model_terms:ir.ui.view,arch_db:hr_skills.resume_line_view_search +msgid "Résume" +msgstr "" + +#. module: hr_skills +#: model:ir.model.fields,field_description:hr_skills.field_hr_resume_line__sequence +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill_level__sequence +msgid "Sequence" +msgstr "" + +#. module: hr_skills +#: model:ir.model,name:hr_skills.model_hr_skill +#: model:ir.model.fields,field_description:hr_skills.field_hr_employee_skill__skill_id +msgid "Skill" +msgstr "" + +#. module: hr_skills +#: model:ir.model,name:hr_skills.model_hr_skill_level +#: model:ir.model.fields,field_description:hr_skills.field_hr_employee_skill__skill_level_id +#: model_terms:ir.ui.view,arch_db:hr_skills.employee_skill_level_view_form +msgid "Skill Level" +msgstr "" + +#. module: hr_skills +#: model_terms:ir.ui.view,arch_db:hr_skills.employee_skill_level_view_tree +#: model_terms:ir.ui.view,arch_db:hr_skills.employee_skill_view_tree +msgid "Skill Levels" +msgstr "" + +#. module: hr_skills +#: model:ir.model,name:hr_skills.model_hr_skill_type +#: model:ir.model.fields,field_description:hr_skills.field_hr_employee_skill__skill_type_id +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill__skill_type_id +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill_level__skill_type_id +#: model_terms:ir.ui.view,arch_db:hr_skills.hr_employee_skill_type_view_form +msgid "Skill Type" +msgstr "" + +#. module: hr_skills +#: model:ir.actions.act_window,name:hr_skills.hr_skill_type_action +#: model_terms:ir.ui.view,arch_db:hr_skills.hr_skill_type_view_tree +msgid "Skill Types" +msgstr "" + +#. module: hr_skills +#: model:ir.model,name:hr_skills.model_hr_employee_skill +msgid "Skill level for an employee" +msgstr "" + +#. module: hr_skills +#: model:ir.model.fields,field_description:hr_skills.field_hr_employee__employee_skill_ids +#: model:ir.model.fields,field_description:hr_skills.field_hr_skill_type__skill_ids +#: model:ir.model.fields,field_description:hr_skills.field_res_users__employee_skill_ids +#: model:ir.ui.menu,name:hr_skills.hr_skill_type_menu +#: model_terms:ir.ui.view,arch_db:hr_skills.employee_skill_view_form +#: model_terms:ir.ui.view,arch_db:hr_skills.hr_employee_skill_type_view_form +#: model_terms:ir.ui.view,arch_db:hr_skills.hr_employee_view_form +#: model_terms:ir.ui.view,arch_db:hr_skills.hr_skill_view_form +#: model_terms:ir.ui.view,arch_db:hr_skills.res_users_view_form +msgid "Skills" +msgstr "" + +#. module: hr_skills +#: code:addons/hr_skills/models/hr_skills.py:35 +#, python-format +msgid "The skill %s and skill type %s doesn't match" +msgstr "" + +#. module: hr_skills +#: code:addons/hr_skills/models/hr_skills.py:41 +#, python-format +msgid "The skill level %s is not valid for skill type: %s " +msgstr "" + +#. module: hr_skills +#: sql_constraint:hr.resume.line:0 +msgid "The start date must be anterior to the end date." +msgstr "" + +#. module: hr_skills +#: model_terms:ir.ui.view,arch_db:hr_skills.resume_line_view_form +msgid "Title" +msgstr "" + +#. module: hr_skills +#: code:addons/hr_skills/models/hr_skills.py:28 +#: sql_constraint:hr.employee.skill:0 +#, python-format +msgid "Two levels for the same skill is not allowed" +msgstr "" + +#. module: hr_skills +#: model:ir.model.fields,field_description:hr_skills.field_hr_resume_line__line_type_id +msgid "Type" +msgstr "" + +#. module: hr_skills +#: model:ir.model,name:hr_skills.model_hr_resume_line_type +msgid "Type of a resumé line" +msgstr "" + +#. module: hr_skills +#: model:ir.ui.menu,name:hr_skills.hr_resume_line_type_menu +msgid "Types" +msgstr "" + +#. module: hr_skills +#: model:ir.model,name:hr_skills.model_res_users +msgid "Users" +msgstr "" + diff --git a/addons/hr_skills/models/hr_resume.py b/addons/hr_skills/models/hr_resume.py index d8e772f50cd..bfea9306cee 100644 --- a/addons/hr_skills/models/hr_resume.py +++ b/addons/hr_skills/models/hr_resume.py @@ -18,9 +18,9 @@ class Employee(models.Model): line_type = self.env.ref('hr_skills.resume_type_experience', raise_if_not_found=False) resume_lines_values.append({ 'employee_id': employee.id, - 'name': employee.company_id.name, + 'name': employee.company_id.name or '', 'date_start': employee.create_date.date(), - 'description': employee.job_title, + 'description': employee.job_title or '', 'line_type_id': line_type and line_type.id, }) self.env['hr.resume.line'].create(resume_lines_values) diff --git a/addons/hr_skills/models/hr_skills.py b/addons/hr_skills/models/hr_skills.py index 39436e178b3..5b75a5ac146 100644 --- a/addons/hr_skills/models/hr_skills.py +++ b/addons/hr_skills/models/hr_skills.py @@ -16,6 +16,7 @@ class Skill(models.Model): class EmployeeSkill(models.Model): _name = 'hr.employee.skill' _description = "Skill level for an employee" + _rec_name = 'skill_id' employee_id = fields.Many2one('hr.employee', required=True, ondelete='cascade') skill_id = fields.Many2one('hr.skill', required=True) diff --git a/addons/hr_skills/static/src/xml/resume_templates.xml b/addons/hr_skills/static/src/xml/resume_templates.xml index 4bea6538e72..89d7352f464 100644 --- a/addons/hr_skills/static/src/xml/resume_templates.xml +++ b/addons/hr_skills/static/src/xml/resume_templates.xml @@ -17,7 +17,7 @@ </div> <div class="o_resume_line_desc col-lg-9"> <h3><t t-esc="data.name"/></h3> - <t t-esc="data.description"/> + <t t-if="data.description" t-esc="data.description"/> </div> </div> </td> diff --git a/addons/hr_skills/views/hr_views.xml b/addons/hr_skills/views/hr_views.xml index e5cc42bfc4e..fd92c8bd588 100644 --- a/addons/hr_skills/views/hr_views.xml +++ b/addons/hr_skills/views/hr_views.xml @@ -11,6 +11,18 @@ </field> </record> + <record id="hr_employee_view_search" model="ir.ui.view"> + <field name="name">hr.employee.skill.search</field> + <field name="model">hr.employee</field> + <field name="inherit_id" ref="hr.view_employee_filter"/> + <field name="arch" type="xml"> + <xpath expr="//field[@name='job_id']" position="after"> + <field name="employee_skill_ids"/> + <field name="resume_line_ids" string="Resumé" filter_domain="['|', ('resume_line_ids.name', 'ilike', self), ('resume_line_ids.description', 'ilike', self)]"/> + </xpath> + </field> + </record> + <record id="resume_line_view_form" model="ir.ui.view"> <field name="name">hr.resume.line.form</field> <field name="model">hr.resume.line</field> diff --git a/addons/hr_timesheet/i18n/hr_timesheet.pot b/addons/hr_timesheet/i18n/hr_timesheet.pot index c2158a0e2e9..87bc5e31d74 100644 --- a/addons/hr_timesheet/i18n/hr_timesheet.pot +++ b/addons/hr_timesheet/i18n/hr_timesheet.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:59+0000\n" -"PO-Revision-Date: 2019-01-16 07:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -89,7 +89,6 @@ msgstr "" #. module: hr_timesheet #: model:ir.model.fields,field_description:hr_timesheet.field_project_project__allow_timesheets #: model:ir.model.fields,field_description:hr_timesheet.field_project_task__allow_timesheets -#: model_terms:ir.ui.view,arch_db:hr_timesheet.project_invoice_form msgid "Allow timesheets" msgstr "" @@ -201,6 +200,7 @@ msgstr "" #. module: hr_timesheet #: model_terms:ir.ui.view,arch_db:hr_timesheet.portal_my_task +#: model_terms:ir.ui.view,arch_db:hr_timesheet.view_task_form2_inherited msgid "Duration" msgstr "" @@ -268,12 +268,6 @@ msgid "Initially Planned Hours" msgstr "" #. module: hr_timesheet -#: model:ir.model.fields,field_description:hr_timesheet.field_res_config_settings__module_project_timesheet_holidays -#: model_terms:ir.ui.view,arch_db:hr_timesheet.res_config_settings_view_form -msgid "Leaves" -msgstr "" - -#. module: hr_timesheet #: model:res.groups,name:hr_timesheet.group_timesheet_manager msgid "Manager" msgstr "" @@ -444,6 +438,12 @@ msgid "Time Encoding" msgstr "" #. module: hr_timesheet +#: model:ir.model.fields,field_description:hr_timesheet.field_res_config_settings__module_project_timesheet_holidays +#: model_terms:ir.ui.view,arch_db:hr_timesheet.res_config_settings_view_form +msgid "Time Off" +msgstr "" + +#. module: hr_timesheet #: model:ir.ui.menu,name:hr_timesheet.menu_hr_time_tracking #: model:ir.ui.menu,name:hr_timesheet.menu_timesheets_reports_timesheet #: model_terms:ir.ui.view,arch_db:hr_timesheet.hr_timesheet_line_search @@ -535,7 +535,7 @@ msgstr "" #. module: hr_timesheet #: model_terms:ir.ui.view,arch_db:hr_timesheet.res_config_settings_view_form -msgid "Validated leaves create timesheets automatically." +msgid "Validated time off create timesheets automatically." msgstr "" #. module: hr_timesheet diff --git a/addons/hw_screen/static/src/js/worker.js b/addons/hw_screen/static/src/js/worker.js index 9f181e650a6..4031e85cf52 100644 --- a/addons/hw_screen/static/src/js/worker.js +++ b/addons/hw_screen/static/src/js/worker.js @@ -35,8 +35,8 @@ $("head").append($parsedHTML.find(".resources").html()); } - $(".container").html($parsedHTML.find('.pos-customer_facing_display').html()); - $(".container").attr('class', 'container').addClass($parsedHTML.find('.pos-customer_facing_display').attr('class')); + $(".container-fluid").html($parsedHTML.find('.pos-customer_facing_display').html()); + $(".container-fluid").attr('class', 'container-fluid').addClass($parsedHTML.find('.pos-customer_facing_display').attr('class')); var d = $('.pos_orderlines_list'); d.scrollTop(d.prop("scrollHeight")); diff --git a/addons/hw_screen/views/pos_display.html b/addons/hw_screen/views/pos_display.html index b36cfac24ba..202cb33e8ea 100644 --- a/addons/hw_screen/views/pos_display.html +++ b/addons/hw_screen/views/pos_display.html @@ -39,7 +39,7 @@ </style> </head> <body> - <div class="container"> + <div class="container-fluid"> <div class="text-center pt-5"> <img style="width: 150px;" src="/web/static/src/img/logo_inverse_white_206px.png"> <p class="mt-3" style="color: #fff;font-size: 30px;">IoTBox</p> diff --git a/addons/iap/i18n/iap.pot b/addons/iap/i18n/iap.pot index a538a719690..42f587d3178 100644 --- a/addons/iap/i18n/iap.pot +++ b/addons/iap/i18n/iap.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-24 10:58+0000\n" -"PO-Revision-Date: 2018-12-24 10:58+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -27,16 +27,16 @@ msgstr "" #. module: iap #. openerp-web -#: code:addons/iap/static/src/js/crash_manager.js:23 +#: code:addons/iap/static/src/xml/iap_templates.xml:39 #, python-format -msgid "Buy credits at Odoo" +msgid "Buy credits" msgstr "" #. module: iap #. openerp-web -#: code:addons/iap/static/src/xml/iap_templates.xml:53 +#: code:addons/iap/static/src/js/crash_manager.js:23 #, python-format -msgid "Buy more credits" +msgid "Buy credits at Odoo" msgstr "" #. module: iap @@ -47,13 +47,6 @@ msgid "Cancel" msgstr "" #. module: iap -#. openerp-web -#: code:addons/iap/static/src/xml/iap_templates.xml:40 -#, python-format -msgid "Checking remaining credit ..." -msgstr "" - -#. module: iap #: model:ir.model.fields,field_description:iap.field_iap_account__company_id msgid "Company" msgstr "" @@ -119,13 +112,6 @@ msgstr "" #. module: iap #. openerp-web -#: code:addons/iap/static/src/xml/iap_templates.xml:43 -#, python-format -msgid "Insufficient credit" -msgstr "" - -#. module: iap -#. openerp-web #: code:addons/iap/static/src/xml/iap_templates.xml:14 #, python-format msgid "Insufficient credit to perform this service." @@ -147,13 +133,6 @@ msgid "Last Updated on" msgstr "" #. module: iap -#. openerp-web -#: code:addons/iap/static/src/xml/iap_templates.xml:46 -#, python-format -msgid "Remaining :" -msgstr "" - -#. module: iap #: model:ir.model.fields,field_description:iap.field_iap_account__service_name msgid "Service Name" msgstr "" @@ -165,17 +144,3 @@ msgstr "" msgid "Start a Trial at Odoo" msgstr "" -#. module: iap -#. openerp-web -#: code:addons/iap/static/src/xml/iap_templates.xml:49 -#, python-format -msgid "Temporarily unavailable" -msgstr "" - -#. module: iap -#. openerp-web -#: code:addons/iap/static/src/xml/iap_templates.xml:46 -#, python-format -msgid "credits" -msgstr "" - diff --git a/addons/im_livechat/i18n/im_livechat.pot b/addons/im_livechat/i18n/im_livechat.pot index 05373791669..115466848c9 100644 --- a/addons/im_livechat/i18n/im_livechat.pot +++ b/addons/im_livechat/i18n/im_livechat.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 08:00+0000\n" -"PO-Revision-Date: 2019-01-16 08:00+0000\n" +"POT-Creation-Date: 2019-03-20 13:51+0000\n" +"PO-Revision-Date: 2019-03-20 13:51+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -36,7 +36,7 @@ msgid "% Happy" msgstr "" #. module: im_livechat -#: code:addons/im_livechat/controllers/main.py:83 +#: code:addons/im_livechat/controllers/main.py:97 #, python-format msgid "%s (%s)" msgstr "" @@ -517,16 +517,12 @@ msgid "Listeners of a Channel" msgstr "" #. module: im_livechat +#: model:ir.module.category,name:im_livechat.module_category_im_livechat #: model:ir.ui.menu,name:im_livechat.menu_livechat_root msgid "Live Chat" msgstr "" #. module: im_livechat -#: model:ir.module.category,name:im_livechat.module_category_im_livechat -msgid "Live Support" -msgstr "" - -#. module: im_livechat #. openerp-web #: code:addons/im_livechat/static/src/xml/im_livechat_backend.xml:9 #: code:addons/im_livechat/static/src/xml/im_livechat_backend.xml:21 @@ -631,16 +627,16 @@ msgid "No customer ratings on live chat session yet" msgstr "" #. module: im_livechat -#: code:addons/im_livechat/models/mail_channel.py:138 +#: code:addons/im_livechat/models/mail_channel.py:145 #, python-format msgid "No history found" msgstr "" #. module: im_livechat #. openerp-web -#: code:addons/im_livechat/static/src/js/im_livechat.js:226 +#: code:addons/im_livechat/static/src/js/im_livechat.js:222 #, python-format -msgid "None of our collaborators seems to be available, please try again later." +msgid "None of our collaborators seem to be available, please try again later." msgstr "" #. module: im_livechat @@ -733,7 +729,7 @@ msgstr "" #. module: im_livechat #. openerp-web -#: code:addons/im_livechat/static/src/js/im_livechat.js:420 +#: code:addons/im_livechat/static/src/js/im_livechat.js:416 #, python-format msgid "Rating: %s" msgstr "" @@ -806,7 +802,7 @@ msgid "Search report" msgstr "" #. module: im_livechat -#: code:addons/im_livechat/models/mail_channel.py:126 +#: code:addons/im_livechat/models/mail_channel.py:133 #, python-format msgid "See 15 last visited pages" msgstr "" @@ -987,8 +983,8 @@ msgstr "" #. module: im_livechat #. openerp-web -#: code:addons/im_livechat/controllers/main.py:36 -#: code:addons/im_livechat/models/mail_channel.py:105 +#: code:addons/im_livechat/controllers/main.py:50 +#: code:addons/im_livechat/models/mail_channel.py:112 #: code:addons/im_livechat/static/src/js/im_livechat.js:61 #, python-format msgid "Visitor" diff --git a/addons/l10n_es/data/account.account.template-common.csv b/addons/l10n_es/data/account.account.template-common.csv index 8537a3f264e..21c952cf79c 100644 --- a/addons/l10n_es/data/account.account.template-common.csv +++ b/addons/l10n_es/data/account.account.template-common.csv @@ -6,47 +6,47 @@ "account_common_110","Prima de emisión o asunción","110","account.data_account_type_equity","l10n_es.account_chart_template_common","l10n_es.account_group_110","False" "account_common_112","Reserva legal","112","account.data_account_type_equity","l10n_es.account_chart_template_common","l10n_es.account_group_112","False" "account_common_113","Reservas voluntarias","113","account.data_account_type_equity","l10n_es.account_chart_template_common","l10n_es.account_group_113","False" -"account_common_1140","Reservas para acciones o participaciones de la sociedad dominante","1140","account.data_account_type_equity","l10n_es.account_chart_template_common","l10n_es.account_group_114","False" -"account_common_1141","Reservas estatutarias","1141","account.data_account_type_equity","l10n_es.account_chart_template_common","l10n_es.account_group_114","False" -"account_common_1142","Reserva por capital amortizado","1142","account.data_account_type_equity","l10n_es.account_chart_template_common","l10n_es.account_group_114","False" -"account_common_1144","Reservas por acciones propias aceptadas en garantía","1144","account.data_account_type_equity","l10n_es.account_chart_template_common","l10n_es.account_group_114","False" +"account_common_1140","Reservas para acciones o participaciones de la sociedad dominante","1140","account.data_account_type_equity","l10n_es.account_chart_template_common","l10n_es.account_group_1140","False" +"account_common_1141","Reservas estatutarias","1141","account.data_account_type_equity","l10n_es.account_chart_template_common","l10n_es.account_group_1141","False" +"account_common_1142","Reserva por capital amortizado","1142","account.data_account_type_equity","l10n_es.account_chart_template_common","l10n_es.account_group_1142","False" +"account_common_1144","Reservas por acciones propias aceptadas en garantía","1144","account.data_account_type_equity","l10n_es.account_chart_template_common","l10n_es.account_group_1144","False" "account_common_118","Aportaciones de socios o propietarios","118","account.data_account_type_equity","l10n_es.account_chart_template_common","l10n_es.account_group_118","False" "account_common_119","Diferencias por ajuste del capital a euros","119","account.data_account_type_equity","l10n_es.account_chart_template_common","l10n_es.account_group_119","False" "account_common_131","Donaciones y legados de capital","131","account.data_account_type_equity","l10n_es.account_chart_template_common","l10n_es.account_group_131","False" -"account_common_1370","Ingresos fiscales por diferencias permanentes a distribuir en varios ejercicios","1370","account.data_account_type_equity","l10n_es.account_chart_template_common","l10n_es.account_group_137","False" -"account_common_1371","Ingresos fiscales por deducciones y bonificaciones a distribuir en varios ejercicios","1371","account.data_account_type_equity","l10n_es.account_chart_template_common","l10n_es.account_group_137","False" +"account_common_1370","Ingresos fiscales por diferencias permanentes a distribuir en varios ejercicios","1370","account.data_account_type_equity","l10n_es.account_chart_template_common","l10n_es.account_group_1370","False" +"account_common_1371","Ingresos fiscales por deducciones y bonificaciones a distribuir en varios ejercicios","1371","account.data_account_type_equity","l10n_es.account_chart_template_common","l10n_es.account_group_1371","False" "account_common_141","Provisión para impuestos","141","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_141","True" "account_common_142","Provisión para otras responsabilidades","142","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_142","True" "account_common_143","Provisión por desmantelamiento, retiro o rehabilitación del inmovilizado","143","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_143","True" "account_common_145","Provisión para actuaciones medioambientales","145","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_145","True" "account_common_150","Acciones o participaciones consideradas como pasivos financieros","150","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_150","False" -"account_common_1533","Desembolsos no exigidos, empresas del grupo","1533","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_153","False" -"account_common_1534","Desembolsos no exigidos, empresas asociadas","1534","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_153","False" -"account_common_1535","Desembolsos no exigidos, otras partes vinculadas","1535","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_153","False" -"account_common_1536","Otros desembolsos no exigidos","1536","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_153","False" -"account_common_1543","Aportaciones no dinerarias pendientes, empresas del grupo","1543","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_154","False" -"account_common_1544","Aportaciones no dinerarias pendientes, empresas asociadas","1544","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_154","False" -"account_common_1545","Aportaciones no dinerarias pendientes, otras partes vinculadas","1545","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_154","False" -"account_common_1546","Otras aportaciones no dinerarias pendientes","1546","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_154","False" -"account_common_1603","Deudas con entidades de crédito vinculadas, empresas del grupo","1603","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_160","False" -"account_common_1604","Deudas con entidades de crédito vinculadas, empresas asociadas","1604","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_160","False" -"account_common_1605","Deudas con otras entidades de crédito vinculadas","1605","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_160","False" -"account_common_1613","Proveedores de inmovilizado, empresas del grupo","1613","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_161","False" -"account_common_1614","Proveedores de inmovilizado, empresas asociadas","1614","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_161","False" -"account_common_1615","Proveedores de inmovilizado, otras partes vinculadas","1615","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_161","False" -"account_common_1623","Acreedores por arrendamiento financiero, empresas de grupo","1623","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_162","False" -"account_common_1624","Acreedores por arrendamiento financiero, empresas asociadas","1624","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_162","False" -"account_common_1625","Acreedores por arrendamiento financiero, otras partes vinculadas","1625","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_162","False" -"account_common_1633","Otras deudas, empresas del grupo","1633","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_163","False" -"account_common_1634","Otras deudas, empresas asociadas","1634","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_163","False" -"account_common_1635","Otras deudas, con otras partes vinculadas","1635","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_163","False" +"account_common_1533","Desembolsos no exigidos, empresas del grupo","1533","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_1533","False" +"account_common_1534","Desembolsos no exigidos, empresas asociadas","1534","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_1534","False" +"account_common_1535","Desembolsos no exigidos, otras partes vinculadas","1535","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_1535","False" +"account_common_1536","Otros desembolsos no exigidos","1536","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_1536","False" +"account_common_1543","Aportaciones no dinerarias pendientes, empresas del grupo","1543","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_1543","False" +"account_common_1544","Aportaciones no dinerarias pendientes, empresas asociadas","1544","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_1544","False" +"account_common_1545","Aportaciones no dinerarias pendientes, otras partes vinculadas","1545","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_1545","False" +"account_common_1546","Otras aportaciones no dinerarias pendientes","1546","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_1546","False" +"account_common_1603","Deudas con entidades de crédito vinculadas, empresas del grupo","1603","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_1603","False" +"account_common_1604","Deudas con entidades de crédito vinculadas, empresas asociadas","1604","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_1604","False" +"account_common_1605","Deudas con otras entidades de crédito vinculadas","1605","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_1605","False" +"account_common_1613","Proveedores de inmovilizado, empresas del grupo","1613","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_1613","False" +"account_common_1614","Proveedores de inmovilizado, empresas asociadas","1614","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_1614","False" +"account_common_1615","Proveedores de inmovilizado, otras partes vinculadas","1615","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_1615","False" +"account_common_1623","Acreedores por arrendamiento financiero, empresas de grupo","1623","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_1623","False" +"account_common_1624","Acreedores por arrendamiento financiero, empresas asociadas","1624","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_1624","False" +"account_common_1625","Acreedores por arrendamiento financiero, otras partes vinculadas","1625","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_1625","False" +"account_common_1633","Otras deudas, empresas del grupo","1633","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_1633","False" +"account_common_1634","Otras deudas, empresas asociadas","1634","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_1634","False" +"account_common_1635","Otras deudas, con otras partes vinculadas","1635","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_1635","False" "account_common_170","Deudas con entidades de crédito","170","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_170","False" "account_common_171","Deudas","171","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_171","False" "account_common_172","Deudas transformables en subvenciones, donaciones y legados","172","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_172","False" "account_common_173","Proveedores de inmovilizado","173","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_173","False" "account_common_174","Acreedores por arrendamiento financiero","174","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_174","False" "account_common_175","Efectos a pagar","175","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_175","False" -"account_common_176","Pasivos por derivados financieros","176","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_176","False" +"account_common_176","Pasivos por derivados financieros","176","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_1760","False" "account_common_177","Obligaciones y bonos","177","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_177","False" "account_common_179","Deudas representadas en otros valores negociables","179","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_179","False" "account_common_180","Fianzas recibidas","180","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_180","False" @@ -83,12 +83,12 @@ "account_common_233","Maquinaria en montaje","233","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_233","False" "account_common_237","Equipos para procesos de información en montaje","237","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_237","False" "account_common_239","Anticipos para inmovilizaciones materiales","239","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_239","False" -"account_common_2413","Valores representativos de deuda de empresas del grupo","2413","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_241","False" -"account_common_2414","Valores representativos de deuda de empresas asociadas","2414","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_241","False" -"account_common_2415","Valores representativos de deuda de otras partes vinculadas","2415","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_241","False" -"account_common_2423","Créditos a empresas del grupo","2423","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_242","False" -"account_common_2424","Créditos a empresas asociadas","2424","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_242","False" -"account_common_2425","Créditos a otras partes vinculadas","2425","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_242","False" +"account_common_2413","Valores representativos de deuda de empresas del grupo","2413","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2413","False" +"account_common_2414","Valores representativos de deuda de empresas asociadas","2414","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2414","False" +"account_common_2415","Valores representativos de deuda de otras partes vinculadas","2415","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2415","False" +"account_common_2423","Créditos a empresas del grupo","2423","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2423","False" +"account_common_2424","Créditos a empresas asociadas","2424","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2424","False" +"account_common_2425","Créditos a otras partes vinculadas","2425","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2425","False" "account_common_250","Inversiones financieras en instrumentos de patrimonio","250","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_250","False" "account_common_251","Valores representativos de deuda","251","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_251","False" "account_common_252","Créditos","252","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_252","False" @@ -98,48 +98,48 @@ "account_common_259","Desembolsos pendientes sobre participaciones en el patrimonio neto","259","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_259","False" "account_common_260","Fianzas constituidas","260","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_260","False" "account_common_265","Depósitos constituidos","265","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_265","False" -"account_common_2800","Amortización acumulada de investigación","2800","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_280","False" -"account_common_2801","Amortización acumulada de desarrollo","2801","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_280","False" -"account_common_2802","Amortización acumulada de concesiones administrativas","2802","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_280","False" -"account_common_2803","Amortización acumulada de propiedad industrial","2803","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_280","False" -"account_common_2805","Amortización acumulada de derechos de traspaso","2805","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_280","False" -"account_common_2806","Amortización acumulada de aplicaciones informáticas","2806","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_280","False" -"account_common_2811","Amortización acumulada de construcciones","2811","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_281","False" -"account_common_2812","Amortización acumulada de instalaciones técnicas","2812","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_281","False" -"account_common_2813","Amortización acumulada de maquinaria","2813","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_281","False" -"account_common_2814","Amortización acumulada de utillaje","2814","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_281","False" -"account_common_2815","Amortización acumulada de otras instalaciones","2815","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_281","False" -"account_common_2816","Amortización acumulada de mobiliario","2816","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_281","False" -"account_common_2817","Amortización acumulada de equipos para proceso de información","2817","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_281","False" -"account_common_2818","Amortización acumulada de elementos de transporte","2818","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_281","False" -"account_common_2819","Amortización acumulada de otro inmovilizado material","2819","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_281","False" +"account_common_2800","Amortización acumulada de investigación","2800","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2800","False" +"account_common_2801","Amortización acumulada de desarrollo","2801","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2801","False" +"account_common_2802","Amortización acumulada de concesiones administrativas","2802","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2802","False" +"account_common_2803","Amortización acumulada de propiedad industrial","2803","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2803","False" +"account_common_2805","Amortización acumulada de derechos de traspaso","2805","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2805","False" +"account_common_2806","Amortización acumulada de aplicaciones informáticas","2806","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2806","False" +"account_common_2811","Amortización acumulada de construcciones","2811","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2811","False" +"account_common_2812","Amortización acumulada de instalaciones técnicas","2812","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2812","False" +"account_common_2813","Amortización acumulada de maquinaria","2813","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2813","False" +"account_common_2814","Amortización acumulada de utillaje","2814","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2814","False" +"account_common_2815","Amortización acumulada de otras instalaciones","2815","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2815","False" +"account_common_2816","Amortización acumulada de mobiliario","2816","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2816","False" +"account_common_2817","Amortización acumulada de equipos para proceso de información","2817","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2817","False" +"account_common_2818","Amortización acumulada de elementos de transporte","2818","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2818","False" +"account_common_2819","Amortización acumulada de otro inmovilizado material","2819","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2819","False" "account_common_282","Amortización acumulada de las inversiones inmobiliarias","282","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_282","False" -"account_common_2900","Deterioro del valor de investigación","2900","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_290","False" -"account_common_2901","Deterioro del valor de desarrollo","2901","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_290","False" -"account_common_2902","Deterioro del valor de concesiones administrativas","2902","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_290","False" -"account_common_2903","Deterioro del valor de propiedad industrial","2903","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_290","False" -"account_common_2905","Deterioro del valor de derechos de traspaso","2905","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_290","False" -"account_common_2906","Deterioro del valor de aplicaciones informáticas","2906","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_290","False" -"account_common_2910","Deterioro de valor de terrenos y bienes naturales","2910","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_291","False" -"account_common_2911","Deterioro de valor de construcciones","2911","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_291","False" -"account_common_2912","Deterioro de valor de instalaciones técnicas","2912","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_291","False" -"account_common_2913","Deterioro de valor de maquinaria","2913","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_291","False" -"account_common_2914","Deterioro de valor de utillaje","2914","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_291","False" -"account_common_2915","Deterioro de valor de otras instalaciones","2915","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_291","False" -"account_common_2916","Deterioro de valor de mobiliario","2916","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_291","False" -"account_common_2917","Deterioro de valor de equipos para proceso de información","2917","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_291","False" -"account_common_2918","Deterioro de valor de elementos de transporte","2918","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_291","False" -"account_common_2919","Deterioro de valor de otro inmovilizado material","2919","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_291","False" -"account_common_2920","Deterioro de valor de los terrenos y bienes naturales","2920","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_292","False" -"account_common_2921","Deterioro de valor de construcciones","2921","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_292","False" -"account_common_2933","Deterioro de valor de participaciones en empresas del grupo","2933","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_293","False" -"account_common_2934","Deterioro de valor de participaciones en empresas asociadas","2934","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_293","False" -"account_common_2943","Deterioro de valor de valores representativos de deuda de empresas del grupo","2943","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_294","False" -"account_common_2944","Deterioro de valor de valores representativos de deuda de empresas asociadas","2944","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_294","False" -"account_common_2945","Deterioro de valor de valores representativos de deuda de otras partes vinculadas","2945","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_294","False" -"account_common_2953","Deterioro de valor de créditos a empresas del grupo","2953","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_295","False" -"account_common_2954","Deterioro de valor de créditos a empresas asociadas","2954","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_295","False" -"account_common_2955","Deterioro de valor de créditos a otras partes vinculadas","2955","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_295","False" +"account_common_2900","Deterioro del valor de investigación","2900","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2900","False" +"account_common_2901","Deterioro del valor de desarrollo","2901","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2901","False" +"account_common_2902","Deterioro del valor de concesiones administrativas","2902","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2902","False" +"account_common_2903","Deterioro del valor de propiedad industrial","2903","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2903","False" +"account_common_2905","Deterioro del valor de derechos de traspaso","2905","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2905","False" +"account_common_2906","Deterioro del valor de aplicaciones informáticas","2906","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2906","False" +"account_common_2910","Deterioro de valor de terrenos y bienes naturales","2910","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2910","False" +"account_common_2911","Deterioro de valor de construcciones","2911","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2911","False" +"account_common_2912","Deterioro de valor de instalaciones técnicas","2912","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2912","False" +"account_common_2913","Deterioro de valor de maquinaria","2913","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2913","False" +"account_common_2914","Deterioro de valor de utillaje","2914","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2914","False" +"account_common_2915","Deterioro de valor de otras instalaciones","2915","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2915","False" +"account_common_2916","Deterioro de valor de mobiliario","2916","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2916","False" +"account_common_2917","Deterioro de valor de equipos para proceso de información","2917","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2917","False" +"account_common_2918","Deterioro de valor de elementos de transporte","2918","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2918","False" +"account_common_2919","Deterioro de valor de otro inmovilizado material","2919","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2919","False" +"account_common_2920","Deterioro de valor de los terrenos y bienes naturales","2920","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2920","False" +"account_common_2921","Deterioro de valor de construcciones","2921","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2921","False" +"account_common_2933","Deterioro de valor de participaciones en empresas del grupo","2933","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2933","False" +"account_common_2934","Deterioro de valor de participaciones en empresas asociadas","2934","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2934","False" +"account_common_2943","Deterioro de valor de valores representativos de deuda de empresas del grupo","2943","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2943","False" +"account_common_2944","Deterioro de valor de valores representativos de deuda de empresas asociadas","2944","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2944","False" +"account_common_2945","Deterioro de valor de valores representativos de deuda de otras partes vinculadas","2945","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2945","False" +"account_common_2953","Deterioro de valor de créditos a empresas del grupo","2953","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2953","False" +"account_common_2954","Deterioro de valor de créditos a empresas asociadas","2954","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2954","False" +"account_common_2955","Deterioro de valor de créditos a otras partes vinculadas","2955","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_2955","False" "account_common_297","Deterioro de valor de valores representativos de deuda","297","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_297","False" "account_common_298","Deterioro de valor de créditos","298","account.data_account_type_fixed_assets","l10n_es.account_chart_template_common","l10n_es.account_group_298","False" "account_common_300","Mercaderías A","300","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_300","False" @@ -172,105 +172,105 @@ "account_common_394","Deterioro de valor de los productos semiterminados","394","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_394","False" "account_common_395","Deterioro de valor de los productos terminados","395","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_395","False" "account_common_396","Deterioro de valor de los subproductos, residuos y materiales recuperados","396","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_396","False" -"account_common_4000","Proveedores (euros)","4000","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_400","True" -"account_common_4004","Proveedores (moneda extranjera)","4004","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_400","True" -"account_common_4009","Proveedores, facturas pendientes de recibir o de formalizar","4009","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_400","True" +"account_common_4000","Proveedores (euros)","4000","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_4000","True" +"account_common_4004","Proveedores (moneda extranjera)","4004","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_4004","True" +"account_common_4009","Proveedores, facturas pendientes de recibir o de formalizar","4009","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_4009","True" "account_common_401","Proveedores, efectos comerciales a pagar","401","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_401","True" -"account_common_4030","Proveedores, empresas del grupo (euros)","4030","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_403","True" -"account_common_4031","Efectos comerciales a pagar, empresas del grupo","4031","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_403","True" -"account_common_4034","Proveedores, empresas del grupo (moneda extranjera)","4034","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_403","True" -"account_common_4036","Envases y embalajes a devolver a proveedores, empresas del grupo","4036","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_403","True" -"account_common_4039","Proveedores, empresas del grupo, facturas pendientes de recibir o de formalizar","4039","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_403","True" +"account_common_4030","Proveedores, empresas del grupo (euros)","4030","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_4030","True" +"account_common_4031","Efectos comerciales a pagar, empresas del grupo","4031","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_4031","True" +"account_common_4034","Proveedores, empresas del grupo (moneda extranjera)","4034","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_4034","True" +"account_common_4036","Envases y embalajes a devolver a proveedores, empresas del grupo","4036","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_4036","True" +"account_common_4039","Proveedores, empresas del grupo, facturas pendientes de recibir o de formalizar","4039","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_4039","True" "account_common_404","Proveedores, empresas asociadas","404","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_404","True" "account_common_405","Proveedores, otras partes vinculadas","405","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_405","True" "account_common_406","Envases y embalajes a devolver a proveedores","406","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_406","True" "account_common_407","Anticipos a proveedores","407","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_407","True" -"account_common_4100","Acreedores por prestaciones de servicios (euros)","4100","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_410","True" -"account_common_4104","Acreedores por prestaciones de servicios (moneda extranjera)","4104","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_410","True" -"account_common_4109","Acreedores por prestaciones de servicios, facturas pendientes de recibir o de formalizar","4109","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_410","True" +"account_common_4100","Acreedores por prestaciones de servicios (euros)","4100","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_4100","True" +"account_common_4104","Acreedores por prestaciones de servicios (moneda extranjera)","4104","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_4104","True" +"account_common_4109","Acreedores por prestaciones de servicios, facturas pendientes de recibir o de formalizar","4109","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_4109","True" "account_common_411","Acreedores, efectos comerciales a pagar","411","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_411","True" "account_common_419","Acreedores por operaciones en común","419","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_419","True" -"account_common_4300","Clientes (euros)","4300","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_430","True" -"account_common_4304","Clientes (moneda extranjera)","4304","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_430","True" -"account_common_4309","Clientes, facturas pendientes de recibir o de formalizar","4309","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_430","True" -"account_common_4310","Efectos comerciales en cartera","4310","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_431","True" -"account_common_4311","Efectos comerciales descontados","4311","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_431","True" -"account_common_4312","Efectos comerciales en gestión de cobro","4312","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_431","True" -"account_common_4315","Efectos comerciales impagados","4315","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_431","True" +"account_common_4300","Clientes (euros)","4300","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_4300","True" +"account_common_4304","Clientes (moneda extranjera)","4304","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_4304","True" +"account_common_4309","Clientes, facturas pendientes de recibir o de formalizar","4309","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_4309","True" +"account_common_4310","Efectos comerciales en cartera","4310","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_4310","True" +"account_common_4311","Efectos comerciales descontados","4311","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_4311","True" +"account_common_4312","Efectos comerciales en gestión de cobro","4312","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_4312","True" +"account_common_4315","Efectos comerciales impagados","4315","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_4315","True" "account_common_432","Clientes, operaciones de factoring","432","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_432","True" -"account_common_4330","Clientes empresas del grupo (euros)","4330","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_433","True" -"account_common_4331","Efectos comerciales a cobrar, empresas del grupo","4331","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_433","True" -"account_common_4332","Clientes empresas del grupo, operaciones de factoring","4332","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_433","True" -"account_common_4334","Clientes empresas del grupo (moneda extranjera)","4334","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_433","True" -"account_common_4336","Clientes empresas del grupo de dudoso cobro","4336","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_433","True" -"account_common_4337","Envases y embalajes a devolver a clientes, empresas del grupo","4337","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_433","True" -"account_common_4339","Clientes empresas del grupo, facturas pendientes de formalizar","4339","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_433","True" +"account_common_4330","Clientes empresas del grupo (euros)","4330","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_4330","True" +"account_common_4331","Efectos comerciales a cobrar, empresas del grupo","4331","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_4331","True" +"account_common_4332","Clientes empresas del grupo, operaciones de factoring","4332","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_4332","True" +"account_common_4334","Clientes empresas del grupo (moneda extranjera)","4334","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_4334","True" +"account_common_4336","Clientes empresas del grupo de dudoso cobro","4336","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_4336","True" +"account_common_4337","Envases y embalajes a devolver a clientes, empresas del grupo","4337","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_4337","True" +"account_common_4339","Clientes empresas del grupo, facturas pendientes de formalizar","4339","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_4339","True" "account_common_434","Clientes, empresas asociadas","434","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_434","True" "account_common_435","Clientes, otras partes vinculadas","435","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_435","True" "account_common_436","Clientes de dudoso cobro","436","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_436","True" "account_common_437","Envases y embalajes a devolver por clientes","437","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_437","True" "account_common_438","Anticipos de clientes","438","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_438","True" -"account_common_4400","Deudores (euros)","4400","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_440","False" -"account_common_4404","Deudores (moneda extranjera)","4404","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_440","False" -"account_common_4409","Deudores, facturas pendientes de formalizar","4409","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_440","False" -"account_common_4410","Deudores, efectos comerciales en cartera","4410","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_441","False" -"account_common_4411","Deudores, efectos comerciales descontados","4411","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_441","False" -"account_common_4412","Deudores, efectos comerciales en gestión de cobro","4412","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_441","False" -"account_common_4415","Deudores, efectos comerciales impagados","4415","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_441","False" +"account_common_4400","Deudores (euros)","4400","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_4400","False" +"account_common_4404","Deudores (moneda extranjera)","4404","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_4404","False" +"account_common_4409","Deudores, facturas pendientes de formalizar","4409","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_4409","False" +"account_common_4410","Deudores, efectos comerciales en cartera","4410","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_4410","False" +"account_common_4411","Deudores, efectos comerciales descontados","4411","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_4411","False" +"account_common_4412","Deudores, efectos comerciales en gestión de cobro","4412","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_4412","False" +"account_common_4415","Deudores, efectos comerciales impagados","4415","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_4415","False" "account_common_446","Deudores de dudoso cobro","446","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_446","True" "account_common_449","Deudores por operaciones en común","449","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_449","True" "account_common_460","Anticipos de remuneraciones","460","account.data_account_type_receivable","l10n_es.account_chart_template_common","l10n_es.account_group_460","True" "account_common_465","Remuneraciones pendientes de pago","465","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_465","True" -"account_common_4700","Hacienda Pública, deudora por IVA","4700","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_470","True" -"account_common_4708","Hacienda Pública, deudora por subvenciones concedidas","4708","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_470","True" -"account_common_4709","Hacienda Pública, deudora por devolución de impuestos","4709","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_470","True" +"account_common_4700","Hacienda Pública, deudora por IVA","4700","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_4700","True" +"account_common_4708","Hacienda Pública, deudora por subvenciones concedidas","4708","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_4708","True" +"account_common_4709","Hacienda Pública, deudora por devolución de impuestos","4709","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_4709","True" "account_common_471","Organismos de la Seguridad Social, deudores","471","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_471","False" "account_common_472","Hacienda Pública. IVA soportado","472","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_472","True" "account_common_473","Hacienda Pública, retenciones y pagos a cuenta","473","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_473","True" -"account_common_4740","Activos por diferencias temporarias deducibles","4740","account.data_account_type_non_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_474","False" -"account_common_4742","Derechos por deducciones y bonificaciones pendientes de aplicar","4742","account.data_account_type_non_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_474","False" -"account_common_4745","Crédito por pérdidas a compensar del ejercicio","4745","account.data_account_type_non_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_474","False" -"account_common_4750","Hacienda Pública, acreedora por IVA","4750","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_475","True" -"account_common_4751","Hacienda Pública, acreedora por retenciones practicadas","4751","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_475","True" -"account_common_4752","Hacienda Pública, acreedora por impuesto sobre sociedades","4752","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_475","True" -"account_common_4758","Hacienda Pública, acreedora por subvenciones a reintegrar","4758","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_475","True" -"account_common_4759","Hacienda Pública, acreedora por otros conceptos","4759","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_475","False" +"account_common_4740","Activos por diferencias temporarias deducibles","4740","account.data_account_type_non_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_4740","False" +"account_common_4742","Derechos por deducciones y bonificaciones pendientes de aplicar","4742","account.data_account_type_non_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_4742","False" +"account_common_4745","Crédito por pérdidas a compensar del ejercicio","4745","account.data_account_type_non_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_4745","False" +"account_common_4750","Hacienda Pública, acreedora por IVA","4750","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_4750","True" +"account_common_4751","Hacienda Pública, acreedora por retenciones practicadas","4751","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_4751","True" +"account_common_4752","Hacienda Pública, acreedora por impuesto sobre sociedades","4752","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_4752","True" +"account_common_4758","Hacienda Pública, acreedora por subvenciones a reintegrar","4758","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_4758","True" +"account_common_4759","Hacienda Pública, acreedora por otros conceptos","4759","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_4759","False" "account_common_476","Organismos de la Seguridad Social, acreedores","476","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_476","False" "account_common_477","Hacienda Pública. IVA repercutido","477","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_477","True" "account_common_479","Pasivos por diferencias temporarias imponibles","479","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_479","False" "account_common_480","Gastos anticipados","480","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_480","False" "account_common_485","Ingresos anticipados","485","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_485","False" -"account_common_4933","Deterioro de valor de créditos por operaciones comerciales con empresas del grupo","4933","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_493","True" -"account_common_4934","Deterioro de valor de créditos por operaciones comerciales con empresas asociadas","4934","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_493","True" -"account_common_4935","Deterioro de valor de créditos por operaciones comerciales con otras partes vinculadas","4935","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_493","True" -"account_common_4994","Provisión por contratos onerosos","4994","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_499","True" -"account_common_4999","Provisión para otras operaciones comerciales","4999","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_499","True" +"account_common_4933","Deterioro de valor de créditos por operaciones comerciales con empresas del grupo","4933","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_4933","True" +"account_common_4934","Deterioro de valor de créditos por operaciones comerciales con empresas asociadas","4934","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_4934","True" +"account_common_4935","Deterioro de valor de créditos por operaciones comerciales con otras partes vinculadas","4935","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_4935","True" +"account_common_4994","Provisión por contratos onerosos","4994","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_4994","True" +"account_common_4999","Provisión para otras operaciones comerciales","4999","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_4999","True" "account_common_500","Obligaciones y bonos a corto plazo","500","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_500","False" "account_common_502","Acciones o participaciones a corto plazo consideradas como pasivos financieros","502","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_502","False" "account_common_505","Deudas representadas en otros valores negociables a corto plazo","505","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_505","False" "account_common_506","Intereses a corto plazo de empréstitos y otras emisiones análogas","506","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_506","False" "account_common_507","Dividendos de acciones o participaciones consideradas como pasivos financieros","507","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_507","False" -"account_common_5090","Obligaciones y bonos amortizados","5090","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_509","True" -"account_common_5095","Otros valores negociables amortizados","5095","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_509","True" -"account_common_5103","Deudas a corto plazo con entidades de crédito, empresas del grupo","5103","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_510","False" -"account_common_5104","Deudas a corto plazo con entidades de crédito, empresas asociadas","5104","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_510","False" -"account_common_5105","Deudas a corto plazo con otras entidades de crédito vinculadas","5105","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_510","False" -"account_common_5113","Proveedores de inmovilizado a corto plazo, empresas del grupo","5113","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_511","False" -"account_common_5114","Proveedores de inmovilizado a corto plazo, empresas asociadas","5114","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_511","False" -"account_common_5115","Proveedores de inmovilizado a corto plazo, otras partes vinculadas","5115","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_511","False" -"account_common_5123","Acreedores por arrendamiento financiero a corto plazo, empresas del grupo","5123","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_512","False" -"account_common_5124","Acreedores por arrendamiento financiero a corto plazo, empresas asociadas","5124","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_512","False" -"account_common_5125","Acreedores por arrendamiento financiero a corto plazo, otras partes vinculadas","5125","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_512","False" -"account_common_5133","Otras deudas a corto plazo con empresas del grupo","5133","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_513","False" -"account_common_5134","Otras deudas a corto plazo con empresas asociadas","5134","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_513","False" -"account_common_5135","Otras deudas a corto plazo con otras partes vinculadas","5135","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_513","False" -"account_common_5143","Intereses a corto plazo de deudas con empresas del grupo","5143","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_514","False" -"account_common_5144","Intereses a corto plazo de deudas con empresas asociadas","5144","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_514","False" -"account_common_5145","Intereses a corto plazo de deudas con otras partes vinculadas","5145","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_514","False" -"account_common_5200","Préstamos a corto plazo de entidades de crédito","5200","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_520","True" -"account_common_5201","Deudas a corto plazo por crédito dispuesto","5201","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_520","True" -"account_common_5208","Deudas por efectos descontados","5208","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_520","True" -"account_common_5209","Deudas por operaciones de “factoring”","5209","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_520","True" +"account_common_5090","Obligaciones y bonos amortizados","5090","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5090","True" +"account_common_5095","Otros valores negociables amortizados","5095","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5095","True" +"account_common_5103","Deudas a corto plazo con entidades de crédito, empresas del grupo","5103","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5103","False" +"account_common_5104","Deudas a corto plazo con entidades de crédito, empresas asociadas","5104","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5104","False" +"account_common_5105","Deudas a corto plazo con otras entidades de crédito vinculadas","5105","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5105","False" +"account_common_5113","Proveedores de inmovilizado a corto plazo, empresas del grupo","5113","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5113","False" +"account_common_5114","Proveedores de inmovilizado a corto plazo, empresas asociadas","5114","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5114","False" +"account_common_5115","Proveedores de inmovilizado a corto plazo, otras partes vinculadas","5115","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5115","False" +"account_common_5123","Acreedores por arrendamiento financiero a corto plazo, empresas del grupo","5123","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5123","False" +"account_common_5124","Acreedores por arrendamiento financiero a corto plazo, empresas asociadas","5124","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5124","False" +"account_common_5125","Acreedores por arrendamiento financiero a corto plazo, otras partes vinculadas","5125","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5125","False" +"account_common_5133","Otras deudas a corto plazo con empresas del grupo","5133","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5133","False" +"account_common_5134","Otras deudas a corto plazo con empresas asociadas","5134","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5134","False" +"account_common_5135","Otras deudas a corto plazo con otras partes vinculadas","5135","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5135","False" +"account_common_5143","Intereses a corto plazo de deudas con empresas del grupo","5143","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5143","False" +"account_common_5144","Intereses a corto plazo de deudas con empresas asociadas","5144","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5144","False" +"account_common_5145","Intereses a corto plazo de deudas con otras partes vinculadas","5145","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5145","False" +"account_common_5200","Préstamos a corto plazo de entidades de crédito","5200","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5200","True" +"account_common_5201","Deudas a corto plazo por crédito dispuesto","5201","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5201","True" +"account_common_5208","Deudas por efectos descontados","5208","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5208","True" +"account_common_5209","Deudas por operaciones de “factoring”","5209","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5209","True" "account_common_521","Deudas a corto plazo","521","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_521","False" "account_common_522","Deudas a corto plazo transformables en subvenciones, donaciones y legados","522","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_522","False" "account_common_523","Proveedores de inmovilizado a corto plazo","523","account.data_account_type_payable","l10n_es.account_chart_template_common","l10n_es.account_group_523","True" @@ -279,32 +279,32 @@ "account_common_526","Dividendo activo a pagar","526","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_526","False" "account_common_527","Intereses a corto plazo de deudas con entidades de crédito","527","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_527","False" "account_common_528","Intereses a corto plazo de deudas","528","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_528","False" -"account_common_5290","Provisión a corto plazo por retribuciones al personal","5290","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_529","True" -"account_common_5291","Provisión a corto plazo para impuestos","5291","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_529","True" -"account_common_5292","Provisión a corto plazo para otras responsabilidades","5292","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_529","True" -"account_common_5293","Provisión a corto plazo por desmantelamiento, retiro o rehabilitación del inmovilizado","5293","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_529","True" -"account_common_5295","Provisión a corto plazo para actuaciones medioambientales","5295","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_529","True" -"account_common_5303","Participaciones a corto plazo en empresas del grupo","5303","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_530","False" -"account_common_5304","Participaciones a corto plazo en empresas asociadas","5304","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_530","False" -"account_common_5305","Participaciones a corto plazo en otras partes vinculadas","5305","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_530","False" -"account_common_5313","Valores representativos de deuda a corto plazo de empresas del grupo","5313","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_531","False" -"account_common_5314","Valores representativos de deuda a corto plazo de empresas asociadas","5314","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_531","False" -"account_common_5315","Valores representativos de deuda a corto plazo de otras partes vinculadas","5315","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_531","False" -"account_common_5323","Créditos a corto plazo a empresas del grupo","5323","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_532","False" -"account_common_5324","Créditos a corto plazo a empresas asociadas","5324","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_532","False" -"account_common_5325","Créditos a corto plazo a otras partes vinculadas","5325","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_532","False" -"account_common_5333","Intereses a corto plazo de valores representativos de deuda de empresas del grupo","5333","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_533","False" -"account_common_5334","Intereses a corto plazo de valores representativos de deuda de empresas asociadas","5334","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_533","False" -"account_common_5335","Intereses a corto plazo de valores representativos de deuda de otras partes vinculadas","5335","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_533","False" -"account_common_5343","Intereses a corto plazo de créditos a empresas del grupo","5343","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_534","False" -"account_common_5344","Intereses a corto plazo de créditos a empresas asociadas","5344","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_534","False" -"account_common_5345","Intereses a corto plazo de créditos a otras partes vinculadas","5345","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_534","False" -"account_common_5353","Dividendo a cobrar de inversiones financieras en empresas del grupo","5353","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_535","False" -"account_common_5354","Dividendo a cobrar de inversiones financieras en empresas asociadas","5354","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_535","False" -"account_common_5355","Dividendo a cobrar de inversiones financieras en otras partes vinculadas","5355","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_535","False" -"account_common_5393","Desembolsos pendientes sobre participaciones a corto plazo en empresas del grupo","5393","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_539","False" -"account_common_5394","Desembolsos pendientes sobre participaciones a corto plazo en empresas asociadas","5394","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_539","False" -"account_common_5395","Desembolsos pendientes sobre participaciones a corto plazo en otras partes vinculadas","5395","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_539","False" +"account_common_5290","Provisión a corto plazo por retribuciones al personal","5290","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5290","True" +"account_common_5291","Provisión a corto plazo para impuestos","5291","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5291","True" +"account_common_5292","Provisión a corto plazo para otras responsabilidades","5292","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5292","True" +"account_common_5293","Provisión a corto plazo por desmantelamiento, retiro o rehabilitación del inmovilizado","5293","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5293","True" +"account_common_5295","Provisión a corto plazo para actuaciones medioambientales","5295","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5295","True" +"account_common_5303","Participaciones a corto plazo en empresas del grupo","5303","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5303","False" +"account_common_5304","Participaciones a corto plazo en empresas asociadas","5304","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5304","False" +"account_common_5305","Participaciones a corto plazo en otras partes vinculadas","5305","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5305","False" +"account_common_5313","Valores representativos de deuda a corto plazo de empresas del grupo","5313","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5313","False" +"account_common_5314","Valores representativos de deuda a corto plazo de empresas asociadas","5314","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5314","False" +"account_common_5315","Valores representativos de deuda a corto plazo de otras partes vinculadas","5315","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5315","False" +"account_common_5323","Créditos a corto plazo a empresas del grupo","5323","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5323","False" +"account_common_5324","Créditos a corto plazo a empresas asociadas","5324","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5324","False" +"account_common_5325","Créditos a corto plazo a otras partes vinculadas","5325","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5325","False" +"account_common_5333","Intereses a corto plazo de valores representativos de deuda de empresas del grupo","5333","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5333","False" +"account_common_5334","Intereses a corto plazo de valores representativos de deuda de empresas asociadas","5334","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5334","False" +"account_common_5335","Intereses a corto plazo de valores representativos de deuda de otras partes vinculadas","5335","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5335","False" +"account_common_5343","Intereses a corto plazo de créditos a empresas del grupo","5343","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5343","False" +"account_common_5344","Intereses a corto plazo de créditos a empresas asociadas","5344","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5344","False" +"account_common_5345","Intereses a corto plazo de créditos a otras partes vinculadas","5345","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5345","False" +"account_common_5353","Dividendo a cobrar de inversiones financieras en empresas del grupo","5353","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5353","False" +"account_common_5354","Dividendo a cobrar de inversiones financieras en empresas asociadas","5354","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5354","False" +"account_common_5355","Dividendo a cobrar de inversiones financieras en otras partes vinculadas","5355","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5355","False" +"account_common_5393","Desembolsos pendientes sobre participaciones a corto plazo en empresas del grupo","5393","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5393","False" +"account_common_5394","Desembolsos pendientes sobre participaciones a corto plazo en empresas asociadas","5394","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5394","False" +"account_common_5395","Desembolsos pendientes sobre participaciones a corto plazo en otras partes vinculadas","5395","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5395","False" "account_common_540","Inversiones financieras a corto plazo en instrumentos de patrimonio","540","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_540","False" "account_common_541","Valores representativos de deuda a corto plazo","541","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_541","False" "account_common_542","Créditos a corto plazo","542","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_542","False" @@ -316,20 +316,20 @@ "account_common_548","Imposiciones a corto plazo","548","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_548","False" "account_common_549","Desembolsos pendientes sobre participaciones en el patrimonio neto a corto plazo","549","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_549","False" "account_common_550","Titular de la explotación","550","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_550","False" -"account_common_5523","Cuenta corriente con empresas del grupo","5523","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_552","False" -"account_common_5524","Cuenta corriente con empresas asociadas","5524","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_552","False" -"account_common_5525","Cuenta corriente con otras partes vinculadas","5525","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_552","False" +"account_common_5523","Cuenta corriente con empresas del grupo","5523","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5523","False" +"account_common_5524","Cuenta corriente con empresas asociadas","5524","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5524","False" +"account_common_5525","Cuenta corriente con otras partes vinculadas","5525","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5525","False" "account_common_554","Cuenta corriente con uniones temporales de empresas y comunidades de bienes","554","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_554","False" "account_common_555","Partidas pendientes de aplicación","555","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_555","False" -"account_common_5563","Desembolsos exigidos sobre participaciones, empresas del grupo","5563","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_556","False" -"account_common_5564","Desembolsos exigidos sobre participaciones, empresas asociadas","5564","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_556","False" -"account_common_5565","Desembolsos exigidos sobre participaciones, otras partes vinculadas","5565","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_556","False" -"account_common_5566","Desembolsos exigidos sobre participaciones de otras empresas","5566","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_556","False" +"account_common_5563","Desembolsos exigidos sobre participaciones, empresas del grupo","5563","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5563","False" +"account_common_5564","Desembolsos exigidos sobre participaciones, empresas asociadas","5564","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5564","False" +"account_common_5565","Desembolsos exigidos sobre participaciones, otras partes vinculadas","5565","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5565","False" +"account_common_5566","Desembolsos exigidos sobre participaciones de otras empresas","5566","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5566","False" "account_common_557","Dividendo activo a cuenta","557","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_557","False" -"account_common_5580","Socios por desembolsos exigidos sobre acciones o participaciones ordinarias","5580","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_558","False" -"account_common_5585","Socios por desembolsos exigidos sobre acciones o participaciones consideradas como pasivos financieros","5585","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_558","False" -"account_common_5590","Activos por derivados financieros a corto plazo, cartera de negociación","5590","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_559","False" -"account_common_5595","Pasivos por derivados financieros a corto plazo, cartera de negociación","5595","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_559","False" +"account_common_5580","Socios por desembolsos exigidos sobre acciones o participaciones ordinarias","5580","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5580","False" +"account_common_5585","Socios por desembolsos exigidos sobre acciones o participaciones consideradas como pasivos financieros","5585","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5585","False" +"account_common_5590","Activos por derivados financieros a corto plazo, cartera de negociación","5590","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5590","False" +"account_common_5595","Pasivos por derivados financieros a corto plazo, cartera de negociación","5595","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_5595","False" "account_common_560","Fianzas recibidas a corto plazo","560","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_560","False" "account_common_561","Depósitos recibidos a corto plazo","561","account.data_account_type_current_liabilities","l10n_es.account_chart_template_common","l10n_es.account_group_561","False" "account_common_565","Fianzas constituidas a corto plazo","565","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_565","False" @@ -343,29 +343,29 @@ "account_common_574","Bancos e instituciones de crédito, cuentas de ahorro, euros","574","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_574","False" "account_common_575","Bancos e instituciones de crédito, cuentas de ahorro, moneda extranjera","575","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_575","False" "account_common_576","Inversiones a corto plazo de gran liquidez","576","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_576","False" -"account_common_5933","Deterioro de valor de participaciones a corto plazo en empresas del grupo","5933","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_593","False" -"account_common_5934","Deterioro de valor de participaciones a corto plazo en empresas asociadas","5934","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_593","False" -"account_common_5943","Deterioro de valor de valores representativos de deuda a corto plazo de empresas del grupo","5943","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_594","False" -"account_common_5944","Deterioro de valor de valores representativos de deuda a corto plazo de empresas asociadas","5944","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_594","False" -"account_common_5945","Deterioro de valor de valores representativos de deuda a corto plazo de otras partes vinculadas","5945","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_594","False" -"account_common_5953","Deterioro de valor de créditos a corto plazo a empresas del grupo","5953","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_595","False" -"account_common_5954","Deterioro de valor de créditos a corto plazo a empresas asociadas","5954","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_595","False" -"account_common_5955","Deterioro de valor de créditos a corto plazo a otras partes vinculadas","5955","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_595","False" +"account_common_5933","Deterioro de valor de participaciones a corto plazo en empresas del grupo","5933","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5933","False" +"account_common_5934","Deterioro de valor de participaciones a corto plazo en empresas asociadas","5934","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5934","False" +"account_common_5943","Deterioro de valor de valores representativos de deuda a corto plazo de empresas del grupo","5943","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5943","False" +"account_common_5944","Deterioro de valor de valores representativos de deuda a corto plazo de empresas asociadas","5944","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5944","False" +"account_common_5945","Deterioro de valor de valores representativos de deuda a corto plazo de otras partes vinculadas","5945","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5945","False" +"account_common_5953","Deterioro de valor de créditos a corto plazo a empresas del grupo","5953","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5953","False" +"account_common_5954","Deterioro de valor de créditos a corto plazo a empresas asociadas","5954","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5954","False" +"account_common_5955","Deterioro de valor de créditos a corto plazo a otras partes vinculadas","5955","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_5955","False" "account_common_597","Deterioro de valor de valores representativos de deuda a corto plazo","597","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_597","False" "account_common_598","Deterioro de valor de créditos a corto plazo","598","account.data_account_type_current_assets","l10n_es.account_chart_template_common","l10n_es.account_group_598","False" "account_common_600","Compras de mercaderías","600","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_600","False" "account_common_601","Compras de materias primas","601","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_601","False" "account_common_602","Compras de otros aprovisionamientos","602","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_602","False" -"account_common_6060","Descuentos sobre compras por pronto pago de mercaderías","6060","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_606","False" -"account_common_6061","Descuentos sobre compras por pronto pago de materias primas","6061","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_606","False" -"account_common_6062","Descuentos sobre compras por pronto pago de otros aprovisionamientos","6062","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_606","False" +"account_common_6060","Descuentos sobre compras por pronto pago de mercaderías","6060","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6060","False" +"account_common_6061","Descuentos sobre compras por pronto pago de materias primas","6061","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6061","False" +"account_common_6062","Descuentos sobre compras por pronto pago de otros aprovisionamientos","6062","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6062","False" "account_common_607","Trabajos realizados por otras empresas","607","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_607","False" -"account_common_6080","Devoluciones de compras de mercaderías","6080","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_608","False" -"account_common_6081","Devoluciones de compras de materias primas","6081","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_608","False" -"account_common_6082","Devoluciones de compras de otros aprovisionamientos","6082","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_608","False" -"account_common_6090","""Rappels"" por compras de mercaderías","6090","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_609","False" -"account_common_6091","""Rappels"" por compras de materias primas","6091","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_609","False" -"account_common_6092","""Rappels"" por compras de otros aprovisionamientos","6092","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_609","False" +"account_common_6080","Devoluciones de compras de mercaderías","6080","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6080","False" +"account_common_6081","Devoluciones de compras de materias primas","6081","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6081","False" +"account_common_6082","Devoluciones de compras de otros aprovisionamientos","6082","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6082","False" +"account_common_6090","""Rappels"" por compras de mercaderías","6090","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6090","False" +"account_common_6091","""Rappels"" por compras de materias primas","6091","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6091","False" +"account_common_6092","""Rappels"" por compras de otros aprovisionamientos","6092","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6092","False" "account_common_610","Variación de existencias de mercaderías","610","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_610","False" "account_common_611","Variación de existencias de materias primas","611","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_611","False" "account_common_612","Variación de existencias de otros aprovisionamientos","612","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_612","False" @@ -379,69 +379,69 @@ "account_common_627","Publicidad, propaganda y relaciones públicas","627","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_627","False" "account_common_628","Suministros","628","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_628","False" "account_common_629","Otros servicios","629","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_629","False" -"account_common_6300","Impuesto corriente","6300","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_630","False" -"account_common_6301","Impuesto diferido","6301","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_630","False" +"account_common_6300","Impuesto corriente","6300","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6300","False" +"account_common_6301","Impuesto diferido","6301","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6301","False" "account_common_631","Otros tributos","631","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_631","False" "account_common_633","Ajustes negativos en la imposición sobre beneficios","633","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_633","False" -"account_common_6341","Ajustes negativos en IVA de activo corriente","6341","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_634","False" -"account_common_6342","Ajustes negativos en IVA de inversiones","6342","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_634","False" +"account_common_6341","Ajustes negativos en IVA de activo corriente","6341","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6341","False" +"account_common_6342","Ajustes negativos en IVA de inversiones","6342","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6342","False" "account_common_636","Devolución de impuestos","636","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_636","False" "account_common_638","Ajustes positivos en la imposición sobre beneficios","638","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_638","False" -"account_common_6391","Ajustes positivos en IVA de activo corriente","6391","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_639","False" -"account_common_6392","Ajustes positivos en IVA de inversiones","6392","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_639","False" +"account_common_6391","Ajustes positivos en IVA de activo corriente","6391","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6391","False" +"account_common_6392","Ajustes positivos en IVA de inversiones","6392","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6392","False" "account_common_640","Sueldos y salarios","640","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_640","False" "account_common_641","Indemnizaciones","641","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_641","False" "account_common_642","Seguridad Social a cargo de la empresa","642","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_642","False" "account_common_649","Otros gastos sociales","649","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_649","False" "account_common_660","Gastos financieros por actualización de provisiones","660","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_660","False" -"account_common_6610","Intereses de obligaciones y bonos, empresas del grupo","6610","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_661","False" -"account_common_6611","Intereses de obligaciones y bonos, empresas asociadas","6611","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_661","False" -"account_common_6612","Intereses de obligaciones y bonos, otras partes vinculadas","6612","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_661","False" -"account_common_6613","Intereses de obligaciones y bonos, otras empresas","6613","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_661","False" -"account_common_6615","Intereses de obligaciones y bonos a corto plazo, empresas del grupo","6615","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_661","False" -"account_common_6616","Intereses de obligaciones y bonos a corto plazo, empresas asociadas","6616","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_661","False" -"account_common_6617","Intereses de obligaciones y bonos a corto plazo, otras partes vinculadas","6617","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_661","False" -"account_common_6618","Intereses de obligaciones y bonos a corto plazo, otras empresas","6618","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_661","False" -"account_common_6620","Intereses de deudas, empresas del grupo","6620","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_662","False" -"account_common_6621","Intereses de deudas, empresas asociadas","6621","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_662","False" -"account_common_6622","Intereses de deudas, otras partes vinculadas","6622","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_662","False" -"account_common_6623","Intereses de deudas con entidades de crédito","6623","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_662","False" -"account_common_6624","Intereses de deudas, otras empresas","6624","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_662","False" -"account_common_6640","Dividendos de pasivos, empresas del grupo","6640","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_664","False" -"account_common_6641","Dividendos de pasivos, empresas asociadas","6641","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_664","False" -"account_common_6642","Dividendos de pasivos, otras partes vinculadas","6642","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_664","False" -"account_common_6643","Dividendos de pasivos, otras empresas","6643","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_664","False" -"account_common_6650","Intereses por descuento de efectos en entidades de crédito del grupo","6650","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_665","False" -"account_common_6651","Intereses por descuento de efectos en entidades de crédito asociadas","6651","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_665","False" -"account_common_6652","Intereses por descuento de efectos en entidades de crédito vinculadas","6652","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_665","False" -"account_common_6653","Intereses por descuento de efectos en otras entidades de crédito","6653","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_665","False" -"account_common_6654","Intereses por operaciones de ""factoring"" con entidades de crédito del grupo","6654","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_665","False" -"account_common_6655","Intereses por operaciones de ""factoring"" con entidades de crédito asociadas","6655","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_665","False" -"account_common_6656","Intereses por operaciones de ""factoring"" con entidades de crédito vinculadas","6656","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_665","False" -"account_common_6657","Intereses por operaciones de ""factoring"" con otras entidades de crédito","6657","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_665","False" -"account_common_6660","Pérdidas en valores representativos de deuda, empresas del grupo","6660","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_666","False" -"account_common_6661","Pérdidas en valores representativos de deuda, empresas asociadas","6661","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_666","False" -"account_common_6662","Pérdidas en valores representativos de deuda, otras partes vinculadas","6662","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_666","False" -"account_common_6663","Pérdidas en valores representativos de deuda, otras empresas","6663","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_666","False" -"account_common_6665","Pérdidas en valores representativos de deuda a corto plazo, empresas del grupo","6665","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_666","False" -"account_common_6666","Pérdidas en valores representativos de deuda a corto plazo, empresas asociadas","6666","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_666","False" -"account_common_6667","Pérdidas en valores representativos de deuda a corto plazo, otras partes vinculadas","6667","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_666","False" -"account_common_6668","Pérdidas en valores representativos de deuda a corto plazo, otras empresas","6668","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_666","False" -"account_common_6670","Pérdidas de créditos, empresas del grupo","6670","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_667","False" -"account_common_6671","Pérdidas de créditos, empresas asociadas","6671","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_667","False" -"account_common_6672","Pérdidas de créditos, otras partes vinculadas","6672","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_667","False" -"account_common_6673","Pérdidas de créditos, otras empresas","6673","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_667","False" -"account_common_6675","Pérdidas de créditos a corto plazo, empresas del grupo","6675","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_667","False" -"account_common_6676","Pérdidas de créditos a corto plazo, empresas asociadas","6676","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_667","False" -"account_common_6677","Pérdidas de créditos a corto plazo, otras partes vinculadas","6677","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_667","False" -"account_common_6678","Pérdidas de créditos a corto plazo, otras empresas","6678","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_667","False" +"account_common_6610","Intereses de obligaciones y bonos, empresas del grupo","6610","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6610","False" +"account_common_6611","Intereses de obligaciones y bonos, empresas asociadas","6611","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6611","False" +"account_common_6612","Intereses de obligaciones y bonos, otras partes vinculadas","6612","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6612","False" +"account_common_6613","Intereses de obligaciones y bonos, otras empresas","6613","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6613","False" +"account_common_6615","Intereses de obligaciones y bonos a corto plazo, empresas del grupo","6615","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6615","False" +"account_common_6616","Intereses de obligaciones y bonos a corto plazo, empresas asociadas","6616","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6616","False" +"account_common_6617","Intereses de obligaciones y bonos a corto plazo, otras partes vinculadas","6617","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6617","False" +"account_common_6618","Intereses de obligaciones y bonos a corto plazo, otras empresas","6618","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6618","False" +"account_common_6620","Intereses de deudas, empresas del grupo","6620","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6620","False" +"account_common_6621","Intereses de deudas, empresas asociadas","6621","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6621","False" +"account_common_6622","Intereses de deudas, otras partes vinculadas","6622","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6622","False" +"account_common_6623","Intereses de deudas con entidades de crédito","6623","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6623","False" +"account_common_6624","Intereses de deudas, otras empresas","6624","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6624","False" +"account_common_6640","Dividendos de pasivos, empresas del grupo","6640","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6640","False" +"account_common_6641","Dividendos de pasivos, empresas asociadas","6641","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6641","False" +"account_common_6642","Dividendos de pasivos, otras partes vinculadas","6642","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6642","False" +"account_common_6643","Dividendos de pasivos, otras empresas","6643","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6643","False" +"account_common_6650","Intereses por descuento de efectos en entidades de crédito del grupo","6650","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6650","False" +"account_common_6651","Intereses por descuento de efectos en entidades de crédito asociadas","6651","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6651","False" +"account_common_6652","Intereses por descuento de efectos en entidades de crédito vinculadas","6652","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6652","False" +"account_common_6653","Intereses por descuento de efectos en otras entidades de crédito","6653","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6653","False" +"account_common_6654","Intereses por operaciones de ""factoring"" con entidades de crédito del grupo","6654","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6654","False" +"account_common_6655","Intereses por operaciones de ""factoring"" con entidades de crédito asociadas","6655","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6655","False" +"account_common_6656","Intereses por operaciones de ""factoring"" con entidades de crédito vinculadas","6656","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6656","False" +"account_common_6657","Intereses por operaciones de ""factoring"" con otras entidades de crédito","6657","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6657","False" +"account_common_6660","Pérdidas en valores representativos de deuda, empresas del grupo","6660","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6660","False" +"account_common_6661","Pérdidas en valores representativos de deuda, empresas asociadas","6661","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6661","False" +"account_common_6662","Pérdidas en valores representativos de deuda, otras partes vinculadas","6662","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6662","False" +"account_common_6663","Pérdidas en valores representativos de deuda, otras empresas","6663","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6663","False" +"account_common_6665","Pérdidas en valores representativos de deuda a corto plazo, empresas del grupo","6665","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6665","False" +"account_common_6666","Pérdidas en valores representativos de deuda a corto plazo, empresas asociadas","6666","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6666","False" +"account_common_6667","Pérdidas en valores representativos de deuda a corto plazo, otras partes vinculadas","6667","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6667","False" +"account_common_6668","Pérdidas en valores representativos de deuda a corto plazo, otras empresas","6668","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6668","False" +"account_common_6670","Pérdidas de créditos, empresas del grupo","6670","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6670","False" +"account_common_6671","Pérdidas de créditos, empresas asociadas","6671","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6671","False" +"account_common_6672","Pérdidas de créditos, otras partes vinculadas","6672","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6672","False" +"account_common_6673","Pérdidas de créditos, otras empresas","6673","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6673","False" +"account_common_6675","Pérdidas de créditos a corto plazo, empresas del grupo","6675","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6675","False" +"account_common_6676","Pérdidas de créditos a corto plazo, empresas asociadas","6676","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6676","False" +"account_common_6677","Pérdidas de créditos a corto plazo, otras partes vinculadas","6677","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6677","False" +"account_common_6678","Pérdidas de créditos a corto plazo, otras empresas","6678","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6678","False" "account_common_668","Diferencias negativas de cambio","668","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_668","False" "account_common_669","Otros gastos financieros","669","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_669","False" "account_common_670","Pérdidas procedentes del inmovilizado intangible","670","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_670","False" "account_common_672","Pérdidas procedentes de las inversiones inmobiliarias","672","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_672","False" -"account_common_6733","Pérdidas procedentes de participaciones en, empresas del grupo","6733","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_673","False" -"account_common_6734","Pérdidas procedentes de participaciones, empresas asociadas","6734","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_673","False" -"account_common_6735","Pérdidas procedentes de participaciones, otras partes vinculadas","6735","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_673","False" +"account_common_6733","Pérdidas procedentes de participaciones en, empresas del grupo","6733","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6733","False" +"account_common_6734","Pérdidas procedentes de participaciones, empresas asociadas","6734","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6734","False" +"account_common_6735","Pérdidas procedentes de participaciones, otras partes vinculadas","6735","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6735","False" "account_common_675","Pérdidas por operaciones con obligaciones propias","675","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_675","False" "account_common_678","Gastos excepcionales","678","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_678","False" "account_common_680","Amortización del inmovilizado intangible","680","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_680","False" @@ -449,34 +449,34 @@ "account_common_682","Amortización de las inversiones inmobiliarias","682","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_682","False" "account_common_690","Pérdidas por deterioro del inmovilizado intangible","690","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_690","False" "account_common_692","Pérdidas por deterioro de las inversiones inmobiliarias","692","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_692","False" -"account_common_6930","Pérdidas por deterioro de productos terminados y en curso de fabricación","6930","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_693","False" -"account_common_6931","Pérdidas por deterioro de mercaderías","6931","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_693","False" -"account_common_6932","Pérdidas por deterioro de materias primas","6932","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_693","False" -"account_common_6933","Pérdidas por deterioro de otros aprovisionamientos","6933","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_693","False" -"account_common_6954","Dotación a la provisión por contratos onerosos","6954","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_695","False" -"account_common_6959","Dotación a la provisión para otras operaciones comerciales","6959","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_695","False" -"account_common_6960","Pérdidas por deterioro de participaciones en instrumentos de patrimonio neto, empresas del grupo","6960","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_696","False" -"account_common_6961","Pérdidas por deterioro de participaciones en instrumentos de patrimonio neto, empresas asociadas","6961","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_696","False" -"account_common_6962","Pérdidas por deterioro de participaciones en instrumentos de patrimonio neto, otras partes vinculadas","6962","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_696","False" -"account_common_6963","Pérdidas por deterioro de participaciones en instrumentos de patrimonio neto, otras empresas","6963","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_696","False" -"account_common_6965","Pérdidas por deterioro en valores representativos de deuda, empresas del grupo","6965","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_696","False" -"account_common_6966","Pérdidas por deterioro en valores representativos de deuda, empresas asociadas","6966","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_696","False" -"account_common_6967","Pérdidas por deterioro en valores representativos de deuda, otras partes vinculadas","6967","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_696","False" -"account_common_6968","Pérdidas por deterioro en valores representativos de deuda, otras empresas","6968","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_696","False" -"account_common_6970","Pérdidas por deterioro de créditos, empresas del grupo","6970","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_697","False" -"account_common_6971","Pérdidas por deterioro de créditos, empresas asociadas","6971","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_697","False" -"account_common_6972","Pérdidas por deterioro de créditos, otras partes vinculadas","6972","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_697","False" -"account_common_6973","Pérdidas por deterioro de créditos, otras empresas","6973","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_697","False" -"account_common_6980","Pérdidas por deterioro de participaciones en instrumentos de patrimonio neto a corto plazo, empresas del grupo","6980","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_698","False" -"account_common_6981","Pérdidas por deterioro de participaciones en instrumentos de patrimonio neto a corto plazo, empresas asociadas","6981","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_698","False" -"account_common_6985","Pérdidas por deterioro en valores representativos de deuda a corto plazo, empresas del grupo","6985","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_698","False" -"account_common_6986","Pérdidas por deterioro en valores representativos de deuda a corto plazo, empresas asociadas","6986","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_698","False" -"account_common_6987","Pérdidas por deterioro en valores representativos de deuda a corto plazo, otras partes vinculadas","6987","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_698","False" -"account_common_6988","Pérdidas por deterioro en valores representativos de deuda a corto plazo, otras empresas","6988","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_698","False" -"account_common_6990","Pérdidas por deterioro de créditos a corto plazo, empresas del grupo","6990","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_699","False" -"account_common_6991","Pérdidas por deterioro de créditos a corto plazo, empresas asociadas","6991","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_699","False" -"account_common_6992","Pérdidas por deterioro de créditos a corto plazo, otras partes vinculadas","6992","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_699","False" -"account_common_6993","Pérdidas por deterioro de créditos a corto plazo, otras empresas","6993","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_699","False" +"account_common_6930","Pérdidas por deterioro de productos terminados y en curso de fabricación","6930","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6930","False" +"account_common_6931","Pérdidas por deterioro de mercaderías","6931","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6931","False" +"account_common_6932","Pérdidas por deterioro de materias primas","6932","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6932","False" +"account_common_6933","Pérdidas por deterioro de otros aprovisionamientos","6933","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6933","False" +"account_common_6954","Dotación a la provisión por contratos onerosos","6954","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6954","False" +"account_common_6959","Dotación a la provisión para otras operaciones comerciales","6959","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6959","False" +"account_common_6960","Pérdidas por deterioro de participaciones en instrumentos de patrimonio neto, empresas del grupo","6960","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6960","False" +"account_common_6961","Pérdidas por deterioro de participaciones en instrumentos de patrimonio neto, empresas asociadas","6961","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6961","False" +"account_common_6962","Pérdidas por deterioro de participaciones en instrumentos de patrimonio neto, otras partes vinculadas","6962","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6962","False" +"account_common_6963","Pérdidas por deterioro de participaciones en instrumentos de patrimonio neto, otras empresas","6963","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6963","False" +"account_common_6965","Pérdidas por deterioro en valores representativos de deuda, empresas del grupo","6965","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6965","False" +"account_common_6966","Pérdidas por deterioro en valores representativos de deuda, empresas asociadas","6966","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6966","False" +"account_common_6967","Pérdidas por deterioro en valores representativos de deuda, otras partes vinculadas","6967","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6967","False" +"account_common_6968","Pérdidas por deterioro en valores representativos de deuda, otras empresas","6968","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6968","False" +"account_common_6970","Pérdidas por deterioro de créditos, empresas del grupo","6970","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6970","False" +"account_common_6971","Pérdidas por deterioro de créditos, empresas asociadas","6971","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6971","False" +"account_common_6972","Pérdidas por deterioro de créditos, otras partes vinculadas","6972","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6972","False" +"account_common_6973","Pérdidas por deterioro de créditos, otras empresas","6973","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6973","False" +"account_common_6980","Pérdidas por deterioro de participaciones en instrumentos de patrimonio neto a corto plazo, empresas del grupo","6980","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6980","False" +"account_common_6981","Pérdidas por deterioro de participaciones en instrumentos de patrimonio neto a corto plazo, empresas asociadas","6981","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6981","False" +"account_common_6985","Pérdidas por deterioro en valores representativos de deuda a corto plazo, empresas del grupo","6985","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6985","False" +"account_common_6986","Pérdidas por deterioro en valores representativos de deuda a corto plazo, empresas asociadas","6986","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6986","False" +"account_common_6987","Pérdidas por deterioro en valores representativos de deuda a corto plazo, otras partes vinculadas","6987","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6987","False" +"account_common_6988","Pérdidas por deterioro en valores representativos de deuda a corto plazo, otras empresas","6988","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6988","False" +"account_common_6990","Pérdidas por deterioro de créditos a corto plazo, empresas del grupo","6990","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6990","False" +"account_common_6991","Pérdidas por deterioro de créditos a corto plazo, empresas asociadas","6991","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6991","False" +"account_common_6992","Pérdidas por deterioro de créditos a corto plazo, otras partes vinculadas","6992","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6992","False" +"account_common_6993","Pérdidas por deterioro de créditos a corto plazo, otras empresas","6993","account.data_account_type_expenses","l10n_es.account_chart_template_common","l10n_es.account_group_6993","False" "account_common_7000","Ventas de mercaderías en España","7000","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_700","False" "account_common_7001","Ventas de mercaderías Intracomunitarias","7001","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_700","False" "account_common_7002","Ventas de mercaderías Exportación","7002","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_700","False" @@ -495,20 +495,20 @@ "account_common_7050","Prestaciones de servicios en España","7050","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_705","False" "account_common_7051","Prestaciones de servicios Intracomunitarias","7051","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_705","False" "account_common_7052","Prestaciones de servicios fuera de la UE","7052","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_705","False" -"account_common_7060","Descuentos sobre ventas por pronto pago de mercaderías","7060","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_706","False" -"account_common_7061","Descuentos sobre ventas por pronto pago de productos terminados","7061","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_706","False" -"account_common_7062","Descuentos sobre ventas por pronto pago de productos semiterminados","7062","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_706","False" -"account_common_7063","Descuentos sobre ventas por pronto pago de subproductos y residuos","7063","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_706","False" -"account_common_7080","Devoluciones de ventas de mercaderías","7080","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_708","False" -"account_common_7081","Devoluciones de ventas de productos terminados","7081","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_708","False" -"account_common_7082","Devoluciones de ventas de productos semiterminados","7082","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_708","False" -"account_common_7083","Devoluciones de ventas de subproductos y residuos","7083","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_708","False" -"account_common_7084","Devoluciones de ventas de envases y embalajes","7084","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_708","False" -"account_common_7090","""Rappels"" sobre ventas de mercaderías","7090","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_709","False" -"account_common_7091","""Rappels"" sobre ventas de productos terminados","7091","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_709","False" -"account_common_7092","""Rappels"" sobre ventas de productos semiterminados","7092","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_709","False" -"account_common_7093","""Rappels"" sobre ventas de subproductos y residuos","7093","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_709","False" -"account_common_7094","""Rappels"" sobre ventas de envases y embalajes","7094","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_709","False" +"account_common_7060","Descuentos sobre ventas por pronto pago de mercaderías","7060","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7060","False" +"account_common_7061","Descuentos sobre ventas por pronto pago de productos terminados","7061","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7061","False" +"account_common_7062","Descuentos sobre ventas por pronto pago de productos semiterminados","7062","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7062","False" +"account_common_7063","Descuentos sobre ventas por pronto pago de subproductos y residuos","7063","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7063","False" +"account_common_7080","Devoluciones de ventas de mercaderías","7080","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7080","False" +"account_common_7081","Devoluciones de ventas de productos terminados","7081","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7081","False" +"account_common_7082","Devoluciones de ventas de productos semiterminados","7082","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7082","False" +"account_common_7083","Devoluciones de ventas de subproductos y residuos","7083","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7083","False" +"account_common_7084","Devoluciones de ventas de envases y embalajes","7084","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7084","False" +"account_common_7090","""Rappels"" sobre ventas de mercaderías","7090","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7090","False" +"account_common_7091","""Rappels"" sobre ventas de productos terminados","7091","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7091","False" +"account_common_7092","""Rappels"" sobre ventas de productos semiterminados","7092","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7092","False" +"account_common_7093","""Rappels"" sobre ventas de subproductos y residuos","7093","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7093","False" +"account_common_7094","""Rappels"" sobre ventas de envases y embalajes","7094","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7094","False" "account_common_710","Variación de existencias de productos en curso","710","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_710","False" "account_common_711","Variación de existencias de productos semiterminados","711","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_711","False" "account_common_712","Variación de existencias de productos terminados","712","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_712","False" @@ -520,75 +520,75 @@ "account_common_740","Subvenciones, donaciones y legados a la explotación","740","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_740","False" "account_common_746","Subvenciones, donaciones y legados de capital transferidos al resultado del ejercicio","746","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_746","False" "account_common_747","Otras subvenciones, donaciones y legados transferidos al resultado del ejercicio","747","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_747","False" -"account_common_7510","Pérdida transferido (gestor)","7510","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_751","False" -"account_common_7511","Beneficio atribuido (partícipe o asociado no gestor)","7511","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_751","False" +"account_common_7510","Pérdida transferido (gestor)","7510","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7510","False" +"account_common_7511","Beneficio atribuido (partícipe o asociado no gestor)","7511","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7511","False" "account_common_752","Ingresos por arrendamientos","752","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_752","False" "account_common_753","Ingresos de propiedad industrial cedida en explotación","753","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_753","False" "account_common_754","Ingresos por comisiones","754","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_754","False" "account_common_755","Ingresos por servicios al personal","755","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_755","False" "account_common_759","Ingresos por servicios diversos","759","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_759","False" -"account_common_7600","Ingresos de participaciones en instrumentos de patrimonio, empresas del grupo","7600","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_760","False" -"account_common_7601","Ingresos de participaciones en instrumentos de patrimonio, empresas asociadas","7601","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_760","False" -"account_common_7602","Ingresos de participaciones en instrumentos de patrimonio, otras partes vinculadas","7602","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_760","False" -"account_common_7603","Ingresos de participaciones en instrumentos de patrimonio, otras empresas","7603","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_760","False" -"account_common_7610","Ingresos de valores representativos de deuda, empresas del grupo","7610","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_761","False" -"account_common_7611","Ingresos de valores representativos de deuda, empresas asociadas","7611","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_761","False" -"account_common_7612","Ingresos de valores representativos de deuda, otras partes vinculadas","7612","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_761","False" -"account_common_7613","Ingresos de valores representativos de deuda, otras empresas","7613","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_761","False" -"account_common_76200","Ingresos de créditos a largo plazo, empresas del grupo","76200","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_762","False" -"account_common_76201","Ingresos de créditos a largo plazo, empresas asociadas","76201","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_762","False" -"account_common_76202","Ingresos de créditos a largo plazo, otras partes vinculadas","76202","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_762","False" -"account_common_76203","Ingresos de créditos a largo plazo, otras empresas","76203","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_762","False" -"account_common_76210","Ingresos de créditos a corto plazo, empresas del grupo","76210","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_762","False" -"account_common_76211","Ingresos de créditos a corto plazo, empresas asociadas","76211","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_762","False" -"account_common_76212","Ingresos de créditos a corto plazo, otras partes vinculadas","76212","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_762","False" -"account_common_76213","Ingresos de créditos a corto plazo, otras empresas","76213","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_762","False" -"account_common_7660","Beneficios en valores representativos de deuda a largo plazo, empresas del grupo","7660","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_766","False" -"account_common_7661","Beneficios en valores representativos de deuda a largo plazo, empresas asociadas","7661","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_766","False" -"account_common_7662","Beneficios en valores representativos de deuda a largo plazo, otras partes vinculadas","7662","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_766","False" -"account_common_7663","Beneficios en valores representativos de deuda a largo plazo, otras empresas","7663","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_766","False" -"account_common_7665","Beneficios en valores representativos de deuda a corto plazo, empresas del grupo","7665","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_766","False" -"account_common_7666","Beneficios en valores representativos de deuda a corto plazo, empresas asociadas","7666","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_766","False" -"account_common_7667","Beneficios en valores representativos de deuda a corto plazo, otras partes vinculadas","7667","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_766","False" -"account_common_7668","Beneficios en valores representativos de deuda a corto plazo, otras empresas","7668","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_766","False" +"account_common_7600","Ingresos de participaciones en instrumentos de patrimonio, empresas del grupo","7600","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7600","False" +"account_common_7601","Ingresos de participaciones en instrumentos de patrimonio, empresas asociadas","7601","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7601","False" +"account_common_7602","Ingresos de participaciones en instrumentos de patrimonio, otras partes vinculadas","7602","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7602","False" +"account_common_7603","Ingresos de participaciones en instrumentos de patrimonio, otras empresas","7603","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7603","False" +"account_common_7610","Ingresos de valores representativos de deuda, empresas del grupo","7610","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7610","False" +"account_common_7611","Ingresos de valores representativos de deuda, empresas asociadas","7611","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7611","False" +"account_common_7612","Ingresos de valores representativos de deuda, otras partes vinculadas","7612","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7612","False" +"account_common_7613","Ingresos de valores representativos de deuda, otras empresas","7613","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7613","False" +"account_common_76200","Ingresos de créditos a largo plazo, empresas del grupo","76200","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_76200","False" +"account_common_76201","Ingresos de créditos a largo plazo, empresas asociadas","76201","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_76201","False" +"account_common_76202","Ingresos de créditos a largo plazo, otras partes vinculadas","76202","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_76202","False" +"account_common_76203","Ingresos de créditos a largo plazo, otras empresas","76203","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_76203","False" +"account_common_76210","Ingresos de créditos a corto plazo, empresas del grupo","76210","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_76210","False" +"account_common_76211","Ingresos de créditos a corto plazo, empresas asociadas","76211","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_76211","False" +"account_common_76212","Ingresos de créditos a corto plazo, otras partes vinculadas","76212","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_76212","False" +"account_common_76213","Ingresos de créditos a corto plazo, otras empresas","76213","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_76213","False" +"account_common_7660","Beneficios en valores representativos de deuda a largo plazo, empresas del grupo","7660","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7660","False" +"account_common_7661","Beneficios en valores representativos de deuda a largo plazo, empresas asociadas","7661","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7661","False" +"account_common_7662","Beneficios en valores representativos de deuda a largo plazo, otras partes vinculadas","7662","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7662","False" +"account_common_7663","Beneficios en valores representativos de deuda a largo plazo, otras empresas","7663","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7663","False" +"account_common_7665","Beneficios en valores representativos de deuda a corto plazo, empresas del grupo","7665","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7665","False" +"account_common_7666","Beneficios en valores representativos de deuda a corto plazo, empresas asociadas","7666","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7666","False" +"account_common_7667","Beneficios en valores representativos de deuda a corto plazo, otras partes vinculadas","7667","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7667","False" +"account_common_7668","Beneficios en valores representativos de deuda a corto plazo, otras empresas","7668","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7668","False" "account_common_768","Diferencias positivas de cambio","768","account.data_account_type_other_income","l10n_es.account_chart_template_common","l10n_es.account_group_768","False" "account_common_769","Otros ingresos financieros","769","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_769","False" "account_common_770","Beneficios procedentes del inmovilizado intangible","770","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_770","False" "account_common_771","Beneficios procedentes del inmovilizado material","771","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_771","False" "account_common_772","Beneficios procedentes de las inversiones inmobiliarias","772","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_772","False" -"account_common_7733","Beneficios procedentes de participaciones a largo plazo, empresas del grupo","7733","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_773","False" -"account_common_7734","Beneficios procedentes de participaciones a largo plazo, empresas asociadas","7734","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_773","False" -"account_common_7735","Beneficios procedentes de participaciones a largo plazo, otras partes vinculadas","7735","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_773","False" +"account_common_7733","Beneficios procedentes de participaciones a largo plazo, empresas del grupo","7733","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7733","False" +"account_common_7734","Beneficios procedentes de participaciones a largo plazo, empresas asociadas","7734","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7734","False" +"account_common_7735","Beneficios procedentes de participaciones a largo plazo, otras partes vinculadas","7735","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7735","False" "account_common_775","Beneficos por operaciones con obligaciones propias","775","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_775","False" "account_common_778","Ingresos excepcionales","778","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_778","False" "account_common_790","Reversión del deterioro del inmovilizado intangible","790","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_790","False" "account_common_792","Reversión del deterioro de las inversiones inmobiliarias","792","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_792","False" -"account_common_7930","Reversión del deterioro de productos terminados y en curso de fabricación","7930","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_793","False" -"account_common_7931","Reversión del deterioro de mercaderías","7931","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_793","False" -"account_common_7932","Reversión del deterioro de materias primas","7932","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_793","False" -"account_common_7933","Reversión del deterioro de otros aprovisionamientos","7933","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_793","False" -"account_common_7951","Exceso de provisión para impuestos","7951","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_795","False" -"account_common_7952","Exceso de provisión para otras responsabilidades","7952","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_795","False" -"account_common_79544","Exceso de provisión por contratos onerosos","79544","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_795","False" -"account_common_79549","Exceso de provisión para otras operaciones comerciales","79549","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_795","False" -"account_common_7955","Exceso de provisión para actuaciones medioambientales","7955","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_795","False" -"account_common_7960","Reversión del deterioro de participaciones en instrumentos de patrimonio neto a largo plazo, empresas del grupo","7960","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_796","False" -"account_common_7961","Reversión del deterioro de participaciones en instrumentos de patrimonio neto a largo plazo, empresas asociadas","7961","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_796","False" -"account_common_7965","Reversión del deterioro de valores representativos de deuda a largo plazo, empresas del grupo","7965","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_796","False" -"account_common_7966","Reversión del deterioro de valores representativos de deuda a largo plazo, empresas asociadas","7966","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_796","False" -"account_common_7967","Reversión del deterioro de valores representativos de deuda a largo plazo, otras partes vinculadas","7967","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_796","False" -"account_common_7968","Reversión del deterioro de valores representativos de deuda a largo plazo, otras empresas","7968","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_796","False" -"account_common_7970","Reversión del deterioro de créditos a largo plazo, empresas del grupo","7970","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_797","False" -"account_common_7971","Reversión del deterioro de créditos a largo plazo, empresas asociadas","7971","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_797","False" -"account_common_7972","Reversión del deterioro de créditos a largo plazo, otras partes vinculadas","7972","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_797","False" -"account_common_7973","Reversión del deterioro de créditos a largo plazo, otras empresas","7973","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_797","False" -"account_common_7980","Reversión del deterioro de participaciones en instrumentos de patrimonio neto a corto plazo, empresas del grupo","7980","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_798","False" -"account_common_7981","Reversión del deterioro de participaciones en instrumentos de patrimonio neto a corto plazo, empresas asociadas","7981","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_798","False" -"account_common_7985","Reversión del deterioro de valores representativos de deuda a corto plazo, empresas del grupo","7985","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_798","False" -"account_common_7986","Reversión del deterioro de valores representativos de deuda a corto plazo, empresas asociadas","7986","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_798","False" -"account_common_7987","Reversión del deterioro de valores representativos de deuda a corto plazo, otras partes vinculadas","7987","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_798","False" -"account_common_7988","Reversión del deterioro de valores representativos de deuda a corto plazo, otras empresas","7988","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_798","False" -"account_common_7990","Reversión del deterioro de créditos a corto plazo, empresas del grupo","7990","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_799","False" -"account_common_7991","Reversión del deterioro de créditos a corto plazo, empresas asociadas","7991","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_799","False" -"account_common_7992","Reversión del deterioro de créditos a corto plazo, otras partes vinculadas","7992","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_799","False" -"account_common_7993","Reversión del deterioro de créditos a corto plazo, otras empresas","7993","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_799","False" +"account_common_7930","Reversión del deterioro de productos terminados y en curso de fabricación","7930","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7930","False" +"account_common_7931","Reversión del deterioro de mercaderías","7931","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7931","False" +"account_common_7932","Reversión del deterioro de materias primas","7932","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7932","False" +"account_common_7933","Reversión del deterioro de otros aprovisionamientos","7933","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7933","False" +"account_common_7951","Exceso de provisión para impuestos","7951","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7951","False" +"account_common_7952","Exceso de provisión para otras responsabilidades","7952","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7952","False" +"account_common_79544","Exceso de provisión por contratos onerosos","79544","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_79544","False" +"account_common_79549","Exceso de provisión para otras operaciones comerciales","79549","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_79549","False" +"account_common_7955","Exceso de provisión para actuaciones medioambientales","7955","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7955","False" +"account_common_7960","Reversión del deterioro de participaciones en instrumentos de patrimonio neto a largo plazo, empresas del grupo","7960","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7960","False" +"account_common_7961","Reversión del deterioro de participaciones en instrumentos de patrimonio neto a largo plazo, empresas asociadas","7961","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7961","False" +"account_common_7965","Reversión del deterioro de valores representativos de deuda a largo plazo, empresas del grupo","7965","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7965","False" +"account_common_7966","Reversión del deterioro de valores representativos de deuda a largo plazo, empresas asociadas","7966","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7966","False" +"account_common_7967","Reversión del deterioro de valores representativos de deuda a largo plazo, otras partes vinculadas","7967","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7967","False" +"account_common_7968","Reversión del deterioro de valores representativos de deuda a largo plazo, otras empresas","7968","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7968","False" +"account_common_7970","Reversión del deterioro de créditos a largo plazo, empresas del grupo","7970","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7970","False" +"account_common_7971","Reversión del deterioro de créditos a largo plazo, empresas asociadas","7971","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7971","False" +"account_common_7972","Reversión del deterioro de créditos a largo plazo, otras partes vinculadas","7972","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7972","False" +"account_common_7973","Reversión del deterioro de créditos a largo plazo, otras empresas","7973","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7973","False" +"account_common_7980","Reversión del deterioro de participaciones en instrumentos de patrimonio neto a corto plazo, empresas del grupo","7980","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7980","False" +"account_common_7981","Reversión del deterioro de participaciones en instrumentos de patrimonio neto a corto plazo, empresas asociadas","7981","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7981","False" +"account_common_7985","Reversión del deterioro de valores representativos de deuda a corto plazo, empresas del grupo","7985","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7985","False" +"account_common_7986","Reversión del deterioro de valores representativos de deuda a corto plazo, empresas asociadas","7986","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7986","False" +"account_common_7987","Reversión del deterioro de valores representativos de deuda a corto plazo, otras partes vinculadas","7987","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7987","False" +"account_common_7988","Reversión del deterioro de valores representativos de deuda a corto plazo, otras empresas","7988","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7988","False" +"account_common_7990","Reversión del deterioro de créditos a corto plazo, empresas del grupo","7990","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7990","False" +"account_common_7991","Reversión del deterioro de créditos a corto plazo, empresas asociadas","7991","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7991","False" +"account_common_7992","Reversión del deterioro de créditos a corto plazo, otras partes vinculadas","7992","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7992","False" +"account_common_7993","Reversión del deterioro de créditos a corto plazo, otras empresas","7993","account.data_account_type_revenue","l10n_es.account_chart_template_common","l10n_es.account_group_7993","False" diff --git a/addons/l10n_es/data/account.account.template-full.csv b/addons/l10n_es/data/account.account.template-full.csv index 0bca4ddc6ab..3f03f6e4fbd 100644 --- a/addons/l10n_es/data/account.account.template-full.csv +++ b/addons/l10n_es/data/account.account.template-full.csv @@ -1,12 +1,12 @@ "id","name","code","user_type_id/id","chart_template_id/id","group_id/id","reconcile" "account_full_100","Capital social","100","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_100","False" -"account_full_1030","Socios por desembolsos no exigidos, capital social","1030","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_103","False" -"account_full_1034","Socios por desembolsos no exigidos, capital pendiente de inscripción","1034","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_103","False" -"account_full_1040","Socios por aportaciones no dinerarias pendientes, capital social","1040","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_104","False" -"account_full_1044","Socios por aportaciones no dinerarias pendientes, capital pendiente de inscripción","1044","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_104","False" -"account_full_1110","Patrimonio neto por emision de instrumentos financieros compuestos","1110","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_111","False" -"account_full_1111","Resto de instrumentos de patrimonio neto","111100","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_111","False" -"account_full_1143","Reserva por fondo de comercio","1143","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_114","False" +"account_full_1030","Socios por desembolsos no exigidos, capital social","1030","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_1030","False" +"account_full_1034","Socios por desembolsos no exigidos, capital pendiente de inscripción","1034","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_1034","False" +"account_full_1040","Socios por aportaciones no dinerarias pendientes, capital social","1040","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_1040","False" +"account_full_1044","Socios por aportaciones no dinerarias pendientes, capital pendiente de inscripción","1044","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_1044","False" +"account_full_1110","Patrimonio neto por emision de instrumentos financieros compuestos","1110","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_1110","False" +"account_full_1111","Resto de instrumentos de patrimonio neto","111100","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_1111","False" +"account_full_1143","Reserva por fondo de comercio","1143","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_1143","False" "account_full_115","Reservas por pérdidas y ganancias actuariales y otros ajustes","115","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_115","False" "account_full_120","Remanente","120","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_120","False" "account_full_121","Resultados negativos de ejercicios anteriores","121","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_121","False" @@ -14,40 +14,40 @@ "account_full_130","Subvenciones oficiales de capital","130","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_130","False" "account_full_132","Otras subvenciones, donaciones y legados","132","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_132","False" "account_full_133","Ajustes por valoración en activos financieros disponibles para la venta","133","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_133","False" -"account_full_1340","Cobertura de flujos de efectivo","1340","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_134","False" -"account_full_1341","Cobertura de una inversión neta en un negocio en el extranjero","1341","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_134","False" +"account_full_1340","Cobertura de flujos de efectivo","1340","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_1340","False" +"account_full_1341","Cobertura de una inversión neta en un negocio en el extranjero","1341","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_1341","False" "account_full_135","Diferencias de conversión","135","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_135","False" "account_full_136","Ajustes por valoración de activos no corrientes y grupos enajenables de elementos, mantenidos para la venta","136","account.data_account_type_equity","l10n_es.account_chart_template_full","l10n_es.account_group_136","False" "account_full_140","Provisión por retribuciones del personal","140","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_140","True" "account_full_146","Provisión para reestructuraciones","146","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_146","True" "account_full_147","Provisión por transacciones con pagos basados en instrumentos de patrimonio","147","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_147","True" -"account_full_1765","Pasivos por derivados financieros, carter de negociación","1765","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_176","True" -"account_full_1768","Pasivos por derivados financieros, instrumentos de cobertura","1768","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_176","True" +"account_full_1765","Pasivos por derivados financieros, carter de negociación","1765","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_1765","True" +"account_full_1768","Pasivos por derivados financieros, instrumentos de cobertura","1768","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_1768","True" "account_full_178","Obligaciones y bonos convertibles","178","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_178","False" "account_full_189","Garantías financieras","189","account.data_account_type_non_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_189","False" "account_full_204","Fondo de comercio","204","account.data_account_type_fixed_assets","l10n_es.account_chart_template_full","l10n_es.account_group_204","False" -"account_full_2403","Participaciones en empresas del grupo","2403","account.data_account_type_fixed_assets","l10n_es.account_chart_template_full","l10n_es.account_group_240","False" -"account_full_2404","Participaciones en empresas asociadas","2404","account.data_account_type_fixed_assets","l10n_es.account_chart_template_full","l10n_es.account_group_240","False" -"account_full_2405","Participaciones en otras partes vinculadas","2405","account.data_account_type_fixed_assets","l10n_es.account_chart_template_full","l10n_es.account_group_240","False" -"account_full_2493","Desembolsos pendientes sobre participaciones en empresas del grupo","2493","account.data_account_type_fixed_assets","l10n_es.account_chart_template_full","l10n_es.account_group_249","False" -"account_full_2494","Desembolsos pendientes sobre participaciones en empresas asociadas","2494","account.data_account_type_fixed_assets","l10n_es.account_chart_template_full","l10n_es.account_group_249","False" -"account_full_2495","Desembolsos pendientes sobre participaciones en otras partes vinculadas","2495","account.data_account_type_fixed_assets","l10n_es.account_chart_template_full","l10n_es.account_group_249","False" -"account_full_2550","Activos por derivados financieros, cartera de negociación","2550","account.data_account_type_fixed_assets","l10n_es.account_chart_template_full","l10n_es.account_group_255","False" -"account_full_2553","Activos por derivados financieros, instrumentos de cobertura","2553","account.data_account_type_fixed_assets","l10n_es.account_chart_template_full","l10n_es.account_group_255","False" +"account_full_2403","Participaciones en empresas del grupo","2403","account.data_account_type_fixed_assets","l10n_es.account_chart_template_full","l10n_es.account_group_2403","False" +"account_full_2404","Participaciones en empresas asociadas","2404","account.data_account_type_fixed_assets","l10n_es.account_chart_template_full","l10n_es.account_group_2404","False" +"account_full_2405","Participaciones en otras partes vinculadas","2405","account.data_account_type_fixed_assets","l10n_es.account_chart_template_full","l10n_es.account_group_2405","False" +"account_full_2493","Desembolsos pendientes sobre participaciones en empresas del grupo","2493","account.data_account_type_fixed_assets","l10n_es.account_chart_template_full","l10n_es.account_group_2493","False" +"account_full_2494","Desembolsos pendientes sobre participaciones en empresas asociadas","2494","account.data_account_type_fixed_assets","l10n_es.account_chart_template_full","l10n_es.account_group_2494","False" +"account_full_2495","Desembolsos pendientes sobre participaciones en otras partes vinculadas","2495","account.data_account_type_fixed_assets","l10n_es.account_chart_template_full","l10n_es.account_group_2495","False" +"account_full_2550","Activos por derivados financieros, cartera de negociación","2550","account.data_account_type_fixed_assets","l10n_es.account_chart_template_full","l10n_es.account_group_2550","False" +"account_full_2553","Activos por derivados financieros, instrumentos de cobertura","2553","account.data_account_type_fixed_assets","l10n_es.account_chart_template_full","l10n_es.account_group_2553","False" "account_full_257","Derechos de reembolso derivados de contratos de seguro relativos a retribuciones al personal","257","account.data_account_type_fixed_assets","l10n_es.account_chart_template_full","l10n_es.account_group_257","False" "account_full_466","Remuneraciones mediante sistemas de aportación definida pendientes de pago","466","account.data_account_type_payable","l10n_es.account_chart_template_full","l10n_es.account_group_466","True" "account_full_490","Deterioro de valor de créditos por operaciones comerciales","490","account.data_account_type_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_490","False" "account_full_501","Obligaciones y bonos convertibles a corto plazo","501","account.data_account_type_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_501","False" -"account_full_5091","Obligaciones y bonos convertibles amortizados","5091","account.data_account_type_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_509","True" -"account_full_5296","Provisión a corto plazo para reestructuraciones de patrimonio","5296","account.data_account_type_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_529","True" -"account_full_5297","Provisión a corto plazo por transacciones con pagos basados en instrumentos","5297","account.data_account_type_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_529","True" +"account_full_5091","Obligaciones y bonos convertibles amortizados","5091","account.data_account_type_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_5091","True" +"account_full_5296","Provisión a corto plazo para reestructuraciones de patrimonio","5296","account.data_account_type_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_5296","True" +"account_full_5297","Provisión a corto plazo por transacciones con pagos basados en instrumentos","5297","account.data_account_type_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_5297","True" "account_full_551","Cuenta corriente con socios y administradores","551","account.data_account_type_current_assets","l10n_es.account_chart_template_full","l10n_es.account_group_551","False" -"account_full_5530","Socios de sociedad disuelta","5530","account.data_account_type_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_553","False" -"account_full_5531","Socios, cuenta de fusión","5531","account.data_account_type_current_assets","l10n_es.account_chart_template_full","l10n_es.account_group_553","False" -"account_full_5532","Socios de sociedad escindida","5532","account.data_account_type_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_553","False" -"account_full_5533","Socios, cuenta de escisión","5533","account.data_account_type_current_assets","l10n_es.account_chart_template_full","l10n_es.account_group_553","False" -"account_full_5593","Activos por derivados financieros a corto plazo, instrumentos de cobertura","5593","account.data_account_type_current_assets","l10n_es.account_chart_template_full","l10n_es.account_group_559","False" -"account_full_5598","Pasivos por derivados financieros a corto plazo, instrumentos de cobertura","5598","account.data_account_type_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_559","False" +"account_full_5530","Socios de sociedad disuelta","5530","account.data_account_type_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_5530","False" +"account_full_5531","Socios, cuenta de fusión","5531","account.data_account_type_current_assets","l10n_es.account_chart_template_full","l10n_es.account_group_5531","False" +"account_full_5532","Socios de sociedad escindida","5532","account.data_account_type_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_5532","False" +"account_full_5533","Socios, cuenta de escisión","5533","account.data_account_type_current_assets","l10n_es.account_chart_template_full","l10n_es.account_group_5533","False" +"account_full_5593","Activos por derivados financieros a corto plazo, instrumentos de cobertura","5593","account.data_account_type_current_assets","l10n_es.account_chart_template_full","l10n_es.account_group_5593","False" +"account_full_5598","Pasivos por derivados financieros a corto plazo, instrumentos de cobertura","5598","account.data_account_type_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_5598","False" "account_full_569","Garantías financieras a corto plazo","569","account.data_account_type_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_569","False" "account_full_580","Inmovilizado","580","account.data_account_type_current_assets","l10n_es.account_chart_template_full","l10n_es.account_group_580","False" "account_full_581","Inversiones con personas y entidades vinculadas","581","account.data_account_type_current_assets","l10n_es.account_chart_template_full","l10n_es.account_group_581","False" @@ -59,38 +59,38 @@ "account_full_587","Deudas con personas y entidades vinculadas","587","account.data_account_type_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_587","False" "account_full_588","Acreedores comerciales y otras cuentas a pagar","588","account.data_account_type_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_588","False" "account_full_589","Otros pasivos","589","account.data_account_type_current_liabilities","l10n_es.account_chart_template_full","l10n_es.account_group_589","False" -"account_full_5990","Deterioro de valor de inmovilizado no corriente mantenido para la venta","5990","account.data_account_type_current_assets","l10n_es.account_chart_template_full","l10n_es.account_group_599","False" -"account_full_5991","Deterioro de valor de inversiones y entidades vinculadas no corrientes mantenidas para la venta","5991","account.data_account_type_current_assets","l10n_es.account_chart_template_full","l10n_es.account_group_599","False" -"account_full_5992","Deterioro de valor de inversiones financieras no corrientes mantenidas para la venta","5992","account.data_account_type_current_assets","l10n_es.account_chart_template_full","l10n_es.account_group_599","False" -"account_full_5993","Deterioro de valor de existencias, deudores comerciales y otras cuentas a cobrar integrados en un grupo enajenable mantenido para la venta","5993","account.data_account_type_current_assets","l10n_es.account_chart_template_full","l10n_es.account_group_599","False" -"account_full_5994","Deterioro de valor de otros activos mantenidos para la venta","5994","account.data_account_type_current_assets","l10n_es.account_chart_template_full","l10n_es.account_group_599","False" +"account_full_5990","Deterioro de valor de inmovilizado no corriente mantenido para la venta","5990","account.data_account_type_current_assets","l10n_es.account_chart_template_full","l10n_es.account_group_5990","False" +"account_full_5991","Deterioro de valor de inversiones y entidades vinculadas no corrientes mantenidas para la venta","5991","account.data_account_type_current_assets","l10n_es.account_chart_template_full","l10n_es.account_group_5991","False" +"account_full_5992","Deterioro de valor de inversiones financieras no corrientes mantenidas para la venta","5992","account.data_account_type_current_assets","l10n_es.account_chart_template_full","l10n_es.account_group_5992","False" +"account_full_5993","Deterioro de valor de existencias, deudores comerciales y otras cuentas a cobrar integrados en un grupo enajenable mantenido para la venta","5993","account.data_account_type_current_assets","l10n_es.account_chart_template_full","l10n_es.account_group_5993","False" +"account_full_5994","Deterioro de valor de otros activos mantenidos para la venta","5994","account.data_account_type_current_assets","l10n_es.account_chart_template_full","l10n_es.account_group_5994","False" "account_full_643","Retribuciones mediante sistemas de aportación definida","643","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_643","False" -"account_full_6440","Contribuciones anuales","6440","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_644","False" -"account_full_6442","Otros costes","6442","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_644","False" -"account_full_6450","Retribuciones al personal liquidados con instrumentos de patrimonio","6450","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_645","False" -"account_full_6457","Retribuciones al personal liquidados en efectivo basado en instrumentos de patrimonio","6457","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_645","False" +"account_full_6440","Contribuciones anuales","6440","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_6440","False" +"account_full_6442","Otros costes","6442","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_6442","False" +"account_full_6450","Retribuciones al personal liquidados con instrumentos de patrimonio","6450","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_6450","False" +"account_full_6457","Retribuciones al personal liquidados en efectivo basado en instrumentos de patrimonio","6457","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_6457","False" "account_full_650","Pérdidas de créditos comerciales incobrables","650","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_650","False" -"account_full_6510","Beneficio transferido (gestor)","6510","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_651","False" -"account_full_6511","Pérdida soportada (partícipe o asociado no gestor)","6511","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_651","False" +"account_full_6510","Beneficio transferido (gestor)","6510","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_6510","False" +"account_full_6511","Pérdida soportada (partícipe o asociado no gestor)","6511","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_6511","False" "account_full_659","Otras pérdidas en gestión corriente","659","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_659","False" -"account_full_6630","Pérdidas de cartera de negociación","6630","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_663","False" -"account_full_6631","Pérdidas de designados por la empresa","6631","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_663","False" -"account_full_6632","Pérdidas de disponibles para la venta","6632","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_663","False" -"account_full_6633","Pérdidas de instrumentos de cobertura","6633","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_663","False" +"account_full_6630","Pérdidas de cartera de negociación","6630","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_6630","False" +"account_full_6631","Pérdidas de designados por la empresa","6631","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_6631","False" +"account_full_6632","Pérdidas de disponibles para la venta","6632","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_6632","False" +"account_full_6633","Pérdidas de instrumentos de cobertura","6633","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_6633","False" "account_full_671","Pérdidas procedentes del inmovilizado material","671","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_671","False" "account_full_691","Pérdidas por deterioro del inmovilizado material","691","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_691","False" "account_full_694","Pérdidas por deterioro de créditos por operaciones comerciales","694","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_694","False" -"account_full_7630","Beneficios de cartera de negociación","7630","account.data_account_type_revenue","l10n_es.account_chart_template_full","l10n_es.account_group_763","False" -"account_full_7631","Beneficios de designados por la empresa","7631","account.data_account_type_revenue","l10n_es.account_chart_template_full","l10n_es.account_group_763","False" -"account_full_7632","Beneficios de disponibles para la venta","7632","account.data_account_type_revenue","l10n_es.account_chart_template_full","l10n_es.account_group_763","False" -"account_full_7633","Beneficios de instrumentos de cobertura","7633","account.data_account_type_revenue","l10n_es.account_chart_template_full","l10n_es.account_group_763","False" +"account_full_7630","Beneficios de cartera de negociación","7630","account.data_account_type_revenue","l10n_es.account_chart_template_full","l10n_es.account_group_7630","False" +"account_full_7631","Beneficios de designados por la empresa","7631","account.data_account_type_revenue","l10n_es.account_chart_template_full","l10n_es.account_group_7631","False" +"account_full_7632","Beneficios de disponibles para la venta","7632","account.data_account_type_revenue","l10n_es.account_chart_template_full","l10n_es.account_group_7632","False" +"account_full_7633","Beneficios de instrumentos de cobertura","7633","account.data_account_type_revenue","l10n_es.account_chart_template_full","l10n_es.account_group_7633","False" "account_full_767","Ingresos de activos afectos y de derechos de reembolso relativos a retribuciones a largo plazo","767","account.data_account_type_revenue","l10n_es.account_chart_template_full","l10n_es.account_group_767","False" "account_full_774","Diferencia negativa en combinaciones de negocios","774","account.data_account_type_revenue","l10n_es.account_chart_template_full","l10n_es.account_group_774","False" "account_full_791","Reversión del deterioro del inmovilizado material","791","account.data_account_type_revenue","l10n_es.account_chart_template_full","l10n_es.account_group_791","False" "account_full_794","Reversión del deterioro de créditos por operaciones comerciales","794","account.data_account_type_revenue","l10n_es.account_chart_template_full","l10n_es.account_group_794","False" -"account_full_7950","Exceso de provisión por retribuciones al personal","7950","account.data_account_type_revenue","l10n_es.account_chart_template_full","l10n_es.account_group_795","False" -"account_full_7956","Exceso de provisión para reestructuraciones","7956","account.data_account_type_revenue","l10n_es.account_chart_template_full","l10n_es.account_group_795","False" -"account_full_7957","Exceso de provisión por transacciones con pagos basados en instrumentos de patrimonio","7957","account.data_account_type_revenue","l10n_es.account_chart_template_full","l10n_es.account_group_795","False" +"account_full_7950","Exceso de provisión por retribuciones al personal","7950","account.data_account_type_revenue","l10n_es.account_chart_template_full","l10n_es.account_group_7950","False" +"account_full_7956","Exceso de provisión para reestructuraciones","7956","account.data_account_type_revenue","l10n_es.account_chart_template_full","l10n_es.account_group_7956","False" +"account_full_7957","Exceso de provisión por transacciones con pagos basados en instrumentos de patrimonio","7957","account.data_account_type_revenue","l10n_es.account_chart_template_full","l10n_es.account_group_7957","False" "account_full_800","Pérdidas en activos financieros disponibles para la venta","800","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_800","False" "account_full_802","Transferencia de beneficios en activos financieros disponibles para la venta","802","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_802","False" "account_full_810","Pérdidas por coberturas de flujos de efectivo","810","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_810","False" @@ -99,8 +99,8 @@ "account_full_813","Transferencia de beneficios por coberturas de inversiones netas en un negocio en el extranjero","813","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_813","False" "account_full_820","Diferencias de conversión negativas","820","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_820","False" "account_full_821","Transferencia de diferencias de conversión positivas","821","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_821","False" -"account_full_8300","Impuesto corriente","8300","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_830","False" -"account_full_8301","Impuesto diferido","8301","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_830","False" +"account_full_8300","Impuesto corriente","8300","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_8300","False" +"account_full_8301","Impuesto diferido","8301","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_8301","False" "account_full_833","Ajustes negativos en la imposición sobre beneficios","833","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_833","False" "account_full_834","Ingresos fiscales por diferencias permanentes","834","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_834","False" "account_full_835","Ingresos fiscales por deducciones y bonificaciones","835","account.data_account_type_expenses","l10n_es.account_chart_template_full","l10n_es.account_group_835","False" diff --git a/addons/l10n_es/data/account.account.template-pymes.csv b/addons/l10n_es/data/account.account.template-pymes.csv index e39307331f2..503067c1b28 100644 --- a/addons/l10n_es/data/account.account.template-pymes.csv +++ b/addons/l10n_es/data/account.account.template-pymes.csv @@ -1,20 +1,20 @@ "id","name","code","user_type_id/id","chart_template_id/id","group_id/id" "account_pymes_100","Capital social","100","account.data_account_type_equity","l10n_es.account_chart_template_pymes","l10n_es.account_group_100" -"account_pymes_1030","Socios por desembolsos no exigidos, capital social","1030","account.data_account_type_equity","l10n_es.account_chart_template_pymes","l10n_es.account_group_103" -"account_pymes_1034","Socios por desembolsos no exigidos, capital pendiente de inscripción","1034","account.data_account_type_equity","l10n_es.account_chart_template_pymes","l10n_es.account_group_103" -"account_pymes_1040","Socios por aportaciones no dinerarias pendientes, capital social","1040","account.data_account_type_equity","l10n_es.account_chart_template_pymes","l10n_es.account_group_104" -"account_pymes_1044","Socios por aportaciones no dinerarias pendientes, capital pendiente de inscripción","1044","account.data_account_type_equity","l10n_es.account_chart_template_pymes","l10n_es.account_group_104" +"account_pymes_1030","Socios por desembolsos no exigidos, capital social","1030","account.data_account_type_equity","l10n_es.account_chart_template_pymes","l10n_es.account_group_1030" +"account_pymes_1034","Socios por desembolsos no exigidos, capital pendiente de inscripción","1034","account.data_account_type_equity","l10n_es.account_chart_template_pymes","l10n_es.account_group_1034" +"account_pymes_1040","Socios por aportaciones no dinerarias pendientes, capital social","1040","account.data_account_type_equity","l10n_es.account_chart_template_pymes","l10n_es.account_group_1040" +"account_pymes_1044","Socios por aportaciones no dinerarias pendientes, capital pendiente de inscripción","1044","account.data_account_type_equity","l10n_es.account_chart_template_pymes","l10n_es.account_group_1044" "account_pymes_120","Remanente","120","account.data_account_type_equity","l10n_es.account_chart_template_pymes","l10n_es.account_group_120" "account_pymes_121","Resultados negativos de ejercicios anteriores","121","account.data_account_type_equity","l10n_es.account_chart_template_pymes","l10n_es.account_group_121" "account_pymes_129","Resultado del ejercicio","129","account.data_unaffected_earnings","l10n_es.account_chart_template_pymes","l10n_es.account_group_129" "account_pymes_130","Subvenciones oficiales de capital","130","account.data_account_type_equity","l10n_es.account_chart_template_pymes","l10n_es.account_group_130" "account_pymes_132","Otras subvenciones, donaciones y legados","132","account.data_account_type_equity","l10n_es.account_chart_template_pymes","l10n_es.account_group_132" -"account_pymes_2403","Participaciones en empresas del grupo","2403","account.data_account_type_fixed_assets","l10n_es.account_chart_template_pymes","l10n_es.account_group_240" -"account_pymes_2404","Participaciones en empresas asociadas","2404","account.data_account_type_fixed_assets","l10n_es.account_chart_template_pymes","l10n_es.account_group_240" -"account_pymes_2405","Participaciones en otras partes vinculadas","2405","account.data_account_type_fixed_assets","l10n_es.account_chart_template_pymes","l10n_es.account_group_240" -"account_pymes_2493","Desembolsos pendientes sobre participaciones en empresas del grupo","2493","account.data_account_type_fixed_assets","l10n_es.account_chart_template_pymes","l10n_es.account_group_249" -"account_pymes_2494","Desembolsos pendientes sobre participaciones en empresas asociadas","2494","account.data_account_type_fixed_assets","l10n_es.account_chart_template_pymes","l10n_es.account_group_249" -"account_pymes_2495","Desembolsos pendientes sobre participaciones en otras partes vinculadas","2495","account.data_account_type_fixed_assets","l10n_es.account_chart_template_pymes","l10n_es.account_group_249" +"account_pymes_2403","Participaciones en empresas del grupo","2403","account.data_account_type_fixed_assets","l10n_es.account_chart_template_pymes","l10n_es.account_group_2403" +"account_pymes_2404","Participaciones en empresas asociadas","2404","account.data_account_type_fixed_assets","l10n_es.account_chart_template_pymes","l10n_es.account_group_2404" +"account_pymes_2405","Participaciones en otras partes vinculadas","2405","account.data_account_type_fixed_assets","l10n_es.account_chart_template_pymes","l10n_es.account_group_2405" +"account_pymes_2493","Desembolsos pendientes sobre participaciones en empresas del grupo","2493","account.data_account_type_fixed_assets","l10n_es.account_chart_template_pymes","l10n_es.account_group_2493" +"account_pymes_2494","Desembolsos pendientes sobre participaciones en empresas asociadas","2494","account.data_account_type_fixed_assets","l10n_es.account_chart_template_pymes","l10n_es.account_group_2494" +"account_pymes_2495","Desembolsos pendientes sobre participaciones en otras partes vinculadas","2495","account.data_account_type_fixed_assets","l10n_es.account_chart_template_pymes","l10n_es.account_group_2495" "account_pymes_255","Activos por derivados financieros","255","account.data_account_type_fixed_assets","l10n_es.account_chart_template_pymes","l10n_es.account_group_255" "account_pymes_2935","Deterioro de valor de participaciones a largo plazo en otras partes vinculadas","2935","account.data_account_type_fixed_assets","l10n_es.account_chart_template_pymes","l10n_es.account_group_293" "account_pymes_296","Deterioro de valor de participaciones en el patrimonio neto a largo plazo","296","account.data_account_type_fixed_assets","l10n_es.account_chart_template_pymes","l10n_es.account_group_296" @@ -23,8 +23,8 @@ "account_pymes_5935","Deterioro de valor de participaciones a corto plazo en otras partes vinculadas","5935","account.data_account_type_current_assets","l10n_es.account_chart_template_pymes","l10n_es.account_group_593" "account_pymes_596","Deterioro de valor de participaciones a corto plazo","596","account.data_account_type_current_assets","l10n_es.account_chart_template_pymes","l10n_es.account_group_596" "account_pymes_650","Pérdidas de créditos comerciales incobrables","650","account.data_account_type_expenses","l10n_es.account_chart_template_pymes","l10n_es.account_group_650" -"account_pymes_6510","Beneficio transferido (gestor)","6510","account.data_account_type_expenses","l10n_es.account_chart_template_pymes","l10n_es.account_group_651" -"account_pymes_6511","Pérdida soportada (partícipe o asociado no gestor)","6511","account.data_account_type_expenses","l10n_es.account_chart_template_pymes","l10n_es.account_group_651" +"account_pymes_6510","Beneficio transferido (gestor)","6510","account.data_account_type_expenses","l10n_es.account_chart_template_pymes","l10n_es.account_group_6510" +"account_pymes_6511","Pérdida soportada (partícipe o asociado no gestor)","6511","account.data_account_type_expenses","l10n_es.account_chart_template_pymes","l10n_es.account_group_6511" "account_pymes_659","Otras pérdidas en gestión corriente","659","account.data_account_type_expenses","l10n_es.account_chart_template_pymes","l10n_es.account_group_659" "account_pymes_663","Pérdidas por valoración de instrumentos financieros por su valor razonable","663","account.data_account_type_expenses","l10n_es.account_chart_template_pymes","l10n_es.account_group_663" "account_pymes_671","Pérdidas procedentes del inmovilizado material","671","account.data_account_type_expenses","l10n_es.account_chart_template_pymes","l10n_es.account_group_671" @@ -34,4 +34,4 @@ "account_pymes_791","Reversión del deterioro del inmovilizado material","791","account.data_account_type_revenue","l10n_es.account_chart_template_pymes","l10n_es.account_group_791" "account_pymes_794","Reversión del deterioro de créditos por operaciones comerciales","794","account.data_account_type_revenue","l10n_es.account_chart_template_pymes","l10n_es.account_group_794" "account_pymes_7962","Reversión del deterioro de participaciones en instrumentos de patrimonio neto a largo plazo, otras partes vinculadas","7962","account.data_account_type_revenue","l10n_es.account_chart_template_pymes","l10n_es.account_group_796" -"account_pymes_7963","Reversión del deterioro de participaciones en instrumentos de patrimonio neto a largo plazo, otras empresas","7963","account.data_account_type_revenue","l10n_es.account_chart_template_pymes","l10n_es.account_group_796"
\ No newline at end of file +"account_pymes_7963","Reversión del deterioro de participaciones en instrumentos de patrimonio neto a largo plazo, otras empresas","7963","account.data_account_type_revenue","l10n_es.account_chart_template_pymes","l10n_es.account_group_796" diff --git a/addons/l10n_es/data/account_group.xml b/addons/l10n_es/data/account_group.xml index 4d457aeba6e..5e146d1891e 100644 --- a/addons/l10n_es/data/account_group.xml +++ b/addons/l10n_es/data/account_group.xml @@ -110,6 +110,11 @@ <field name="name">Reservas para acciones o participaciones de la sociedad dominante</field> <field name="parent_id" ref="l10n_es.account_group_114"/> </record> + <record id="account_group_1141" model="account.group"> + <field name="code_prefix">1141</field> + <field name="name">Reservas estatutarias</field> + <field name="parent_id" ref="l10n_es.account_group_114"/> + </record> <record id="account_group_1142" model="account.group"> <field name="code_prefix">1142</field> <field name="name">Reserva por capital amortizado</field> @@ -450,6 +455,11 @@ <field name="name">Pasivos por derivados financieros a largo plazo</field> <field name="parent_id" ref="l10n_es.account_group_17"/> </record> + <record id="account_group_1760" model="account.group"> + <field name="code_prefix">1760</field> + <field name="name">Pasivos por derivados financieros</field> + <field name="parent_id" ref="l10n_es.account_group_176"/> + </record> <record id="account_group_1765" model="account.group"> <field name="code_prefix">1765</field> <field name="name">Pasivos por derivados financieros a largo plazo, cartera de negociación</field> @@ -1757,6 +1767,11 @@ <field name="name">Hacienda Pública, acreedora por subvenciones a reintegrar</field> <field name="parent_id" ref="l10n_es.account_group_475"/> </record> + <record id="account_group_4759" model="account.group"> + <field name="code_prefix">4759</field> + <field name="name">Hacienda Pública, acreedora por otros conceptos</field> + <field name="parent_id" ref="l10n_es.account_group_475"/> + </record> <record id="account_group_476" model="account.group"> <field name="code_prefix">476</field> <field name="name">Organismos de la Seguridad Social, acreedores</field> @@ -3200,6 +3215,16 @@ <field name="name">Intereses por operaciones de «factoring» con entidades de crédito del grupo</field> <field name="parent_id" ref="l10n_es.account_group_665"/> </record> + <record id="account_group_6655" model="account.group"> + <field name="code_prefix">6655</field> + <field name="name">Intereses por operaciones de "factoring" con entidades de crédito asociadas</field> + <field name="parent_id" ref="l10n_es.account_group_665"/> + </record> + <record id="account_group_6656" model="account.group"> + <field name="code_prefix">6656</field> + <field name="name">Intereses por operaciones de "factoring" con entidades de crédito vinculadas</field> + <field name="parent_id" ref="l10n_es.account_group_665"/> + </record> <record id="account_group_6657" model="account.group"> <field name="code_prefix">6657</field> <field name="name">Intereses por operaciones de «factoring» con otras entidades de crédito</field> diff --git a/addons/l10n_fr_fec/wizard/account_fr_fec.py b/addons/l10n_fr_fec/wizard/account_fr_fec.py index d91f4858c88..0a6459a0953 100644 --- a/addons/l10n_fr_fec/wizard/account_fr_fec.py +++ b/addons/l10n_fr_fec/wizard/account_fr_fec.py @@ -8,7 +8,7 @@ import io from odoo import api, fields, models, _ from odoo.exceptions import Warning -from odoo.tools import pycompat +from odoo.tools import float_is_zero, pycompat class AccountFrFec(models.TransientModel): @@ -182,14 +182,16 @@ class AccountFrFec(models.TransientModel): sql_query += ''' GROUP BY aml.account_id, aat.type - HAVING sum(aml.balance) != 0 + HAVING round(sum(aml.balance), %s) != 0 AND aat.type not in ('receivable', 'payable') ''' formatted_date_from = fields.Date.to_string(self.date_from).replace('-', '') date_from = self.date_from formatted_date_year = date_from.year + currency_digits = 2 + self._cr.execute( - sql_query, (formatted_date_year, formatted_date_from, formatted_date_from, formatted_date_from, self.date_from, company.id)) + sql_query, (formatted_date_year, formatted_date_from, formatted_date_from, formatted_date_from, self.date_from, company.id, currency_digits)) for row in self._cr.fetchall(): listrow = list(row) @@ -202,6 +204,8 @@ class AccountFrFec(models.TransientModel): current_amount = float(listrow[11].replace(',', '.')) - float(listrow[12].replace(',', '.')) unaffected_earnings_amount = float(unaffected_earnings_results[11].replace(',', '.')) - float(unaffected_earnings_results[12].replace(',', '.')) listrow_amount = current_amount + unaffected_earnings_amount + if float_is_zero(listrow_amount, precision_digits=currency_digits): + continue if listrow_amount > 0: listrow[11] = str(listrow_amount).replace('.', ',') listrow[12] = '0,00' @@ -269,11 +273,11 @@ class AccountFrFec(models.TransientModel): sql_query += ''' GROUP BY aml.account_id, aat.type, rp.ref, rp.id - HAVING sum(aml.balance) != 0 + HAVING round(sum(aml.balance), %s) != 0 AND aat.type in ('receivable', 'payable') ''' self._cr.execute( - sql_query, (formatted_date_year, formatted_date_from, formatted_date_from, formatted_date_from, self.date_from, company.id)) + sql_query, (formatted_date_year, formatted_date_from, formatted_date_from, formatted_date_from, self.date_from, company.id, currency_digits)) for row in self._cr.fetchall(): listrow = list(row) diff --git a/addons/l10n_jp/__manifest__.py b/addons/l10n_jp/__manifest__.py index 97165c350e8..4dba2f0e0ec 100644 --- a/addons/l10n_jp/__manifest__.py +++ b/addons/l10n_jp/__manifest__.py @@ -5,7 +5,7 @@ { 'name': 'Japan - Accounting', - 'version': '2.0', + 'version': '2.1', 'category': 'Localization', 'description': """ diff --git a/addons/l10n_jp/data/account.account.template.csv b/addons/l10n_jp/data/account.account.template.csv index f7046bf9915..928ec3b4996 100644 --- a/addons/l10n_jp/data/account.account.template.csv +++ b/addons/l10n_jp/data/account.account.template.csv @@ -19,22 +19,24 @@ A11802,A11802,前渡金,account.data_account_type_current_assets,,FALSE,,l10n_jp A11804,A11804,前払費用,account.data_account_type_current_assets,,FALSE,,l10n_jp1 A11805,A11805,立替金,account.data_account_type_current_assets,,FALSE,,l10n_jp1 A11806,A11806,仮払金,account.data_account_type_current_assets,,FALSE,,l10n_jp1 -A11807,A11807,仮払消費税,account.data_account_type_current_assets,,FALSE,,l10n_jp1 +A11807,A11807,敷金・保証金,account.data_account_type_current_assets,,FALSE,,l10n_jp1 +A11809,A11809,仮払消費税,account.data_account_type_current_assets,,FALSE,,l10n_jp1 A11901,A11901,貸倒引当金,account.data_account_type_current_assets,,FALSE,,l10n_jp1 -A12111,A12111,建物及び構築物,account.data_account_type_current_assets,,FALSE,,l10n_jp1 -A12112,A12112,建物及び構築物減償累計額,account.data_account_type_current_assets,,FALSE,,l10n_jp1 -A12121,A12121,機械及び装置,account.data_account_type_current_assets,,FALSE,,l10n_jp1 -A12122,A12122,機械及び装置物減償累計額,account.data_account_type_current_assets,,FALSE,,l10n_jp1 -A12131,A12131,工具、機器及び備品,account.data_account_type_current_assets,,FALSE,,l10n_jp1 -A12132,A12132,工具、機器及び備品減償累計額,account.data_account_type_current_assets,,FALSE,,l10n_jp1 -A12141,A12141,土地,account.data_account_type_current_assets,,FALSE,,l10n_jp1 -A1221,A1221,ソフトウェア,account.data_account_type_current_assets,,FALSE,,l10n_jp1 -A1222,A1222,ソフトウェア仮勘定,account.data_account_type_current_assets,,FALSE,,l10n_jp1 -A1223,A1223,その他無形固定資産,account.data_account_type_current_assets,,FALSE,,l10n_jp1 -A12301,A12301,投資有価証券,account.data_account_type_current_assets,,FALSE,,l10n_jp1 -A12302,A12302,関係会社株式,account.data_account_type_current_assets,,FALSE,,l10n_jp1 -A12303,A12303,長期貸付金,account.data_account_type_current_assets,,FALSE,,l10n_jp1 -A13001,A13001,創立費,account.data_account_type_current_assets,,FALSE,,l10n_jp1 +A12111,A12111,建物及び構築物,account.data_account_type_fixed_assets,,FALSE,,l10n_jp1 +A12112,A12112,建物及び構築物減償累計額,account.data_account_type_fixed_assets,,FALSE,,l10n_jp1 +A12121,A12121,機械及び装置,account.data_account_type_fixed_assets,,FALSE,,l10n_jp1 +A12122,A12122,機械及び装置物減償累計額,account.data_account_type_fixed_assets,,FALSE,,l10n_jp1 +A12131,A12131,工具、機器及び備品,account.data_account_type_fixed_assets,,FALSE,,l10n_jp1 +A12132,A12132,工具、機器及び備品減償累計額,account.data_account_type_fixed_assets,,FALSE,,l10n_jp1 +A12141,A12141,土地,account.data_account_type_fixed_assets,,FALSE,,l10n_jp1 +A1221,A1221,ソフトウェア,account.data_account_type_non_current_assets,,FALSE,,l10n_jp1 +A1222,A1222,ソフトウェア仮勘定,account.data_account_type_non_current_assets,,FALSE,,l10n_jp1 +A1223,A1223,その他無形固定資産,account.data_account_type_non_current_assets,,FALSE,,l10n_jp1 +A12301,A12301,投資有価証券,account.data_account_type_non_current_assets,,FALSE,,l10n_jp1 +A12302,A12302,関係会社株式,account.data_account_type_non_current_assets,,FALSE,,l10n_jp1 +A12303,A12303,長期貸付金,account.data_account_type_non_current_assets,,FALSE,,l10n_jp1 +A12304,A12304,長期前払費用,account.data_account_type_non_current_assets,,FALSE,,l10n_jp1 +A13001,A13001,創立費,account.data_account_type_non_current_assets,,FALSE,,l10n_jp1 A21211,A21211,買掛金,account.data_account_type_payable,,TRUE,,l10n_jp1 A21212,A21212,買掛金(USD),account.data_account_type_payable,,TRUE,base.USD,l10n_jp1 A21215,A21215,支払手形,account.data_account_type_payable,,TRUE,,l10n_jp1 @@ -51,7 +53,7 @@ A21802,A21802,前受金,account.data_account_type_current_liabilities,,FALSE,,l1 A21803,A21803,預り金,account.data_account_type_current_liabilities,,FALSE,,l10n_jp1 A21804,A21804,仮受金,account.data_account_type_current_liabilities,,FALSE,,l10n_jp1 A21806,A21806,賞与引当金,account.data_account_type_current_liabilities,,FALSE,,l10n_jp1 -A21807,A21807,仮受消費税,account.data_account_type_current_liabilities,,FALSE,,l10n_jp1 +A21809,A21809,仮受消費税,account.data_account_type_current_liabilities,,FALSE,,l10n_jp1 A22001,A22001,社債,account.data_account_type_current_liabilities,,FALSE,,l10n_jp1 A22002,A22002,長期借入金,account.data_account_type_current_liabilities,,FALSE,,l10n_jp1 A22005,A22005,退職給付引当金,account.data_account_type_current_liabilities,,FALSE,,l10n_jp1 @@ -103,8 +105,9 @@ B61602,B61602,投資有価証券評価益(外益),account.data_account_type_othe B61801,B61801,雑収入,account.data_account_type_other_income,,FALSE,,l10n_jp1 B62101,B62101,支払利息,account.data_account_type_expenses,,FALSE,,l10n_jp1 B62201,B62201,創立費償却,account.data_account_type_expenses,,FALSE,,l10n_jp1 +B62202,B62202,減価償却費,account.data_account_type_expenses,,FALSE,,l10n_jp1 B62401,B62401,未実現為替差損,account.data_account_type_expenses,,FALSE,,l10n_jp1 -B62402,B62402,実現為替差損,account.data_account_type_expenses,,FALSE,,l10n_jp1 +B62501,B62501,実現為替差損,account.data_account_type_expenses,,FALSE,,l10n_jp1 B62601,B62601,投資有価証券売却損(外損),account.data_account_type_expenses,,FALSE,,l10n_jp1 B62602,B62602,投資有価証券評価損(外損),account.data_account_type_expenses,,FALSE,,l10n_jp1 B62801,B62801,雑費用,account.data_account_type_expenses,,FALSE,,l10n_jp1 diff --git a/addons/l10n_jp/data/account_chart_template_data.xml b/addons/l10n_jp/data/account_chart_template_data.xml index b5e73af7a02..228423838b0 100644 --- a/addons/l10n_jp/data/account_chart_template_data.xml +++ b/addons/l10n_jp/data/account_chart_template_data.xml @@ -9,6 +9,6 @@ <field name="property_account_expense_categ_id" ref="A21219"/> <field name="property_account_income_categ_id" ref="B41001"/> <field name="income_currency_exchange_account_id" ref="B61501"/> - <field name="expense_currency_exchange_account_id" ref="B62601"/> + <field name="expense_currency_exchange_account_id" ref="B62501"/> </record> </odoo> diff --git a/addons/l10n_mx/data/account_tax_data.xml b/addons/l10n_mx/data/account_tax_data.xml index 13f78068494..12555ba9ed4 100644 --- a/addons/l10n_mx/data/account_tax_data.xml +++ b/addons/l10n_mx/data/account_tax_data.xml @@ -208,6 +208,7 @@ <field name="tax_exigibility">on_payment</field> <field name="cash_basis_account_id" ref="cuenta118_01"/> <field name="tag_ids" eval="[(6,0,[ref('tag_diot_8')])]"/> + <field name="sequence" eval="10"/> </record> <record id="tax17" model="account.tax.template"> @@ -223,6 +224,7 @@ <field name="tax_group_id" ref="tax_group_iva_8"/> <field name="tax_exigibility">on_payment</field> <field name="cash_basis_account_id" ref="cuenta208_01"/> + <field name="sequence" eval="10"/> </record> </data> </odoo> diff --git a/addons/link_tracker/i18n/link_tracker.pot b/addons/link_tracker/i18n/link_tracker.pot index 7b093617f2c..012b1481b35 100644 --- a/addons/link_tracker/i18n/link_tracker.pot +++ b/addons/link_tracker/i18n/link_tracker.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-24 10:58+0000\n" -"PO-Revision-Date: 2018-12-24 10:58+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -47,11 +47,6 @@ msgid "Country" msgstr "" #. module: link_tracker -#: model:ir.model.fields,field_description:link_tracker.field_link_tracker_click__click_date -msgid "Create Date" -msgstr "" - -#. module: link_tracker #: model_terms:ir.actions.act_window,help:link_tracker.link_tracker_action msgid "Create a new link tracker" msgstr "" @@ -211,6 +206,11 @@ msgid "Target URL" msgstr "" #. module: link_tracker +#: sql_constraint:link.tracker:0 +msgid "The URL and the UTM combination must be unique" +msgstr "" + +#. module: link_tracker #: model:ir.model.fields,help:link_tracker.field_link_tracker__campaign_id msgid "This is a name that helps you keep track of your different campaign efforts, e.g. Fall_Drive, Christmas_Special" msgstr "" diff --git a/addons/link_tracker/models/link_tracker.py b/addons/link_tracker/models/link_tracker.py index 645171c8279..2e565a06691 100644 --- a/addons/link_tracker/models/link_tracker.py +++ b/addons/link_tracker/models/link_tracker.py @@ -185,11 +185,11 @@ class LinkTracker(models.Model): @api.model def recent_links(self, filter, limit): if filter == 'newest': - return self.search_read([], order='create_date DESC', limit=limit) + return self.search_read([], order='create_date DESC, id DESC', limit=limit) elif filter == 'most-clicked': return self.search_read([('count', '!=', 0)], order='count DESC', limit=limit) elif filter == 'recently-used': - return self.search_read([('count', '!=', 0)], order='write_date DESC', limit=limit) + return self.search_read([('count', '!=', 0)], order='write_date DESC, id DESC', limit=limit) else: return {'Error': "This filter doesn't exist."} diff --git a/addons/lunch/i18n/lunch.pot b/addons/lunch/i18n/lunch.pot index 2d58a6d4e21..4b5fd1f7417 100644 --- a/addons/lunch/i18n/lunch.pot +++ b/addons/lunch/i18n/lunch.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 08:00+0000\n" -"PO-Revision-Date: 2019-01-16 08:00+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,44 +16,41 @@ msgstr "" "Plural-Forms: \n" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_line_view_kanban +#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_kanban msgid "<i class=\"fa fa-check\" role=\"img\" aria-label=\"Receive button\" title=\"Receive button\"/>" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_line_view_kanban +#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_kanban #: model_terms:ir.ui.view,arch_db:lunch.view_lunch_cashmove_kanban +#: model_terms:ir.ui.view,arch_db:lunch.view_lunch_cashmove_report_kanban msgid "<i class=\"fa fa-clock-o\" role=\"img\" aria-label=\"Date\" title=\"Date\"/>" msgstr "" #. module: lunch #: model_terms:ir.ui.view,arch_db:lunch.view_lunch_cashmove_kanban +#: model_terms:ir.ui.view,arch_db:lunch.view_lunch_cashmove_report_kanban msgid "<i class=\"fa fa-money\" role=\"img\" aria-label=\"Amount\" title=\"Amount\"/>" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_line_view_kanban +#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_kanban msgid "<i class=\"fa fa-money\" role=\"img\" aria-label=\"Money\" title=\"Money\"/>" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_line_view_kanban +#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_kanban msgid "<i class=\"fa fa-phone\" role=\"img\" aria-label=\"Order button\" title=\"Order button\"/>" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_line_view_kanban +#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_kanban msgid "<i class=\"fa fa-times\" role=\"img\" aria-label=\"Cancel button\" title=\"Cancel button\"/>" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_form -msgid "<span class=\"o_stat_text\">Balance</span>" -msgstr "" - -#. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.report_lunch_order -msgid "<strong>Total</strong>" +#: model_terms:ir.ui.view,arch_db:lunch.res_config_settings_view_form +msgid "<span class=\"o_form_label\">Lunch Overdraft</span>" msgstr "" #. module: lunch @@ -93,24 +90,43 @@ msgid "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"padding-t " Here is, today orders for ${order['company_name']}:\n" " </p>\n" "\n" -" <ul>\n" -" % for line in lines:\n" -" <li>\n" -" <strong>\n" -" ${line['product']}\n" -" (x${line['quantity']})\n" -" </strong>\n" -" % if line['note']:\n" -" <em>(${line['note']})</em>\n" -" % endif\n" -" <div style=\"display: inline-block; float:right\">\n" -" ${format_amount(line['price'], currency)}\n" -" </div>\n" -" </li>\n" -" % endfor\n" -" </ul>\n" +" <table>\n" +" <thead>\n" +" <tr style=\"background-color:rgb(233,232,233);\">\n" +" <th style=\"width: 100%; min-width: 96px; font-size: 13px;\"><strong>Product</strong></th>\n" +" <th style=\"width: 100%; min-width: 96px; font-size: 13px;\"><strong>Comments</strong></th>\n" +" <th style=\"width: 100%; min-width: 96px; font-size: 13px;\"><strong>Person</strong></th>\n" +" <th style=\"width: 100%; min-width: 96px; font-size: 13px;\" align=\"center\"><strong>Qty</strong></th>\n" +" <th style=\"width: 100%; min-width: 96px; font-size: 13px;\" align=\"center\"><strong>Price</strong></th>\n" +" </tr>\n" +" </thead>\n" +" <tbody>\n" +" % for line in lines\n" +" <tr>\n" +" <td style=\"width: 100%; font-size: 13px;\" valign=\"top\">${line['product']}</td>\n" +" <td style=\"width: 100%; font-size: 13px;\" valign=\"top\">\n" +" % if line['toppings']:\n" +" ${line['toppings']}\n" +" % endif\n" +" % if line['note']:\n" +" <div style=\"color: rgb(173,181,189);\">${line['note']}</div>\n" +" % endif\n" +" </td>\n" +" <td style=\"width: 100%; font-size: 13px;\" valign=\"top\">${line['username']}</td>\n" +" <td style=\"width: 100%; font-size: 13px;\" valign=\"top\" align=\"right\">${line['quantity']}</td>\n" +" <td style=\"width: 100%; font-size: 13px;\" valign=\"top\" align=\"right\">${format_amount(line['price'], currency)}</td>\n" +" </tr>\n" +" % endfor\n" +" <tr>\n" +" <td/>\n" +" <td/>\n" +" <td/>\n" +" <td style=\"width: 100%; font-size: 13px; border-top: 1px solid black;\"><strong>Total</strong></td>\n" +" <td style=\"width: 100%; font-size: 13px; border-top: 1px solid black;\" align=\"right\"><strong>${format_amount(order['amount_total'], currency)}</strong></td>\n" +" </tr>\n" +" </tbody>\n" +" </table>\n" "\n" -" <p>Amounting in <strong>${format_amount(order['amount_total'], currency)}</strong>.</p>\n" " <p>Do not hesitate to contact us if you have any question.</p>\n" " </div>\n" " </td>\n" @@ -166,7 +182,7 @@ msgid "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"padding-t msgstr "" #. module: lunch -#: model_terms:ir.actions.act_window,help:lunch.lunch_cashmove_action_control_accounts +#: model_terms:ir.actions.act_window,help:lunch.lunch_cashmove_report_action_control_accounts msgid "A cashmove can either be an expense or a payment.<br>\n" " An expense is automatically created at the order receipt.<br>\n" " A payment represents the employee reimbursement to the company." @@ -178,12 +194,35 @@ msgid "A product is defined by its name, category, price and vendor." msgstr "" #. module: lunch +#: selection:lunch.supplier,moment:0 +msgid "AM" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: lunch #: model:ir.model.fields,field_description:lunch.field_lunch_alert__active +#: model:ir.model.fields,field_description:lunch.field_lunch_order__active #: model:ir.model.fields,field_description:lunch.field_lunch_product__active +#: model:ir.model.fields,field_description:lunch.field_lunch_product_report__active +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__active msgid "Active" msgstr "" #. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__activity_ids +msgid "Activities" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__activity_state +msgid "Activity State" +msgstr "" + +#. module: lunch #. openerp-web #: code:addons/lunch/static/src/xml/lunch.xml:15 #, python-format @@ -191,152 +230,176 @@ msgid "Add" msgstr "" #. module: lunch -#: code:addons/lunch/models/lunch_alert.py:38 -#, python-format -msgid "Alert" +#: model_terms:ir.ui.view,arch_db:lunch.view_lunch_order_temp +msgid "Add To Cart" msgstr "" #. module: lunch -#: model:ir.actions.act_window,name:lunch.lunch_alert_action -#: model:ir.model.fields,field_description:lunch.field_lunch_order__alerts -#: model:ir.ui.menu,name:lunch.lunch_alert_menu -msgid "Alerts" +#: model:ir.model.fields,field_description:lunch.field_lunch_location__address +#: model_terms:ir.ui.view,arch_db:lunch.lunch_supplier_view_form +msgid "Address" msgstr "" #. module: lunch -#: model_terms:ir.actions.act_window,help:lunch.lunch_alert_action -msgid "Alerts are used to warn employee from possible issues concerning the lunch orders.\n" -" To create a lunch alert you have to define its recurrence, the time interval during which the alert should be executed and the message to display." +#: model:ir.ui.menu,name:lunch.lunch_alert_menu +msgid "Alerts" msgstr "" #. module: lunch #: model:ir.model.fields,field_description:lunch.field_lunch_cashmove__amount +#: model:ir.model.fields,field_description:lunch.field_lunch_cashmove_report__amount msgid "Amount" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_alert__end_hour -msgid "And" +#: model_terms:ir.ui.view,arch_db:lunch.lunch_product_view_search +msgid "Archived" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_alert_view_search -#: model_terms:ir.ui.view,arch_db:lunch.lunch_product_view_search -msgid "Archived" +#: model:ir.model.fields,help:lunch.field_lunch_order_temp__available_toppings_1 +#: model:ir.model.fields,help:lunch.field_lunch_order_temp__available_toppings_2 +#: model:ir.model.fields,help:lunch.field_lunch_order_temp__available_toppings_3 +msgid "Are toppings available for this product" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_product__available -msgid "Available" +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__message_attachment_count +msgid "Attachment Count" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_order__balance_visible -msgid "Balance Visible" +#: sql_constraint:lunch.supplier:0 +msgid "Automatic Email Sending Time should be between 0 and 12" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_alert__start_hour -msgid "Between" +#: model_terms:ir.ui.view,arch_db:lunch.lunch_supplier_view_form +msgid "Availability" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.view_lunch_alert_kanban -msgid "Between:" +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__available_toppings_1 +msgid "Available Toppings 1" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_cashmove_view_search_2 -msgid "By Employee" +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__available_toppings_2 +msgid "Available Toppings 2" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__available_toppings_3 +msgid "Available Toppings 3" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_line_view_search -msgid "By Order" +#: model_terms:ir.ui.view,arch_db:lunch.lunch_cashmove_report_view_search_2 +msgid "By Employee" msgstr "" #. module: lunch +#: model_terms:ir.ui.view,arch_db:lunch.lunch_cashmove_report_view_search #: model_terms:ir.ui.view,arch_db:lunch.lunch_cashmove_view_search msgid "By User" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_line_view_search +#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_search msgid "By Vendor" msgstr "" #. module: lunch -#: model:ir.model.fields,help:lunch.field_lunch_cashmove__description -msgid "Can be an order or a payment" +#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_kanban +#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_tree +msgid "Cancel" msgstr "" #. module: lunch -#: model:ir.model.fields,help:lunch.field_lunch_cashmove__amount -msgid "Can be positive (payment) or negative (order or payment if user wants to get his money back)" +#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_search +#: selection:lunch.order,state:0 +msgid "Cancelled" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_line_view_kanban -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_line_view_tree -#: model_terms:ir.ui.view,arch_db:lunch.view_lunch_order_line_lucky -msgid "Cancel" +#: model:ir.model,name:lunch.model_lunch_cashmove_report +msgid "Cashmoves report" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_line_view_search -#: selection:lunch.order,state:0 -#: selection:lunch.order.line,state:0 -msgid "Cancelled" +#: model_terms:ir.ui.view,arch_db:lunch.view_lunch_product_kanban_order +msgid "Categories" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line__cashmove -msgid "Cash Move" +#: model:ir.model.fields,field_description:lunch.field_lunch_topping__category_id +msgid "Category" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_order__cash_move_balance -msgid "Cash Move Balance" +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__city +#: model_terms:ir.ui.view,arch_db:lunch.lunch_supplier_view_form +msgid "City" msgstr "" #. module: lunch -#: model_terms:ir.actions.act_window,help:lunch.lunch_order_line_action_control_suppliers +#: model_terms:ir.actions.act_window,help:lunch.lunch_order_action_control_suppliers msgid "Click on the <span class=\"fa fa-phone text-success\" title=\"Order button\"></span> to announce that the order is ordered.<br>\n" " Click on the <span class=\"fa fa-check text-success\" title=\"Receive button\"></span> to announce that the order is received.<br>\n" " Click on the <span class=\"fa fa-times-circle text-danger\" title=\"Cancel button\"></span> red X to announce that the order isn't available." msgstr "" #. module: lunch -#: model_terms:ir.actions.act_window,help:lunch.lunch_order_line_action_by_supplier +#: model_terms:ir.actions.act_window,help:lunch.lunch_order_action_by_supplier msgid "Click on the <span class=\"fa fa-phone text-success\" title=\"Order button\"></span> to announce that the order is ordered.<br>\n" " Click on the <span class=\"fa fa-check text-success\" title=\"Receive button\"></span> to announce that the order is received.<br>\n" " Click on the <span class=\"fa fa-times-circle text-danger\" title=\"Cancel button\"></span> to announce that the order isn't available." msgstr "" #. module: lunch +#: model:ir.model,name:lunch.model_res_company +msgid "Companies" +msgstr "" + +#. module: lunch #: model:ir.model.fields,field_description:lunch.field_lunch_order__company_id +#: model:ir.model.fields,field_description:lunch.field_lunch_product__company_id +#: model:ir.model.fields,field_description:lunch.field_lunch_product_category__company_id +#: model:ir.model.fields,field_description:lunch.field_lunch_product_report__company_id +#: model:ir.model.fields,field_description:lunch.field_lunch_topping__company_id msgid "Company" msgstr "" #. module: lunch +#: model:ir.model,name:lunch.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: lunch #: model:ir.ui.menu,name:lunch.menu_lunch_config msgid "Configuration" msgstr "" #. module: lunch -#: model:ir.actions.act_window,name:lunch.lunch_cashmove_action_control_accounts -#: model:ir.ui.menu,name:lunch.lunch_cashmove_menu_control_accounts +#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_tree +msgid "Confirm" +msgstr "" + +#. module: lunch +#: model:ir.actions.act_window,name:lunch.lunch_cashmove_report_action_control_accounts +#: model:ir.ui.menu,name:lunch.lunch_cashmove_report_menu_control_accounts msgid "Control Accounts" msgstr "" #. module: lunch -#: model:ir.actions.act_window,name:lunch.lunch_order_line_action_control_suppliers +#: model:ir.actions.act_window,name:lunch.lunch_order_action_control_suppliers msgid "Control Vendors" msgstr "" #. module: lunch -#: model_terms:ir.actions.act_window,help:lunch.lunch_alert_action -msgid "Create a new lunch alert" +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__country_id +#: model_terms:ir.ui.view,arch_db:lunch.lunch_supplier_view_form +msgid "Country" msgstr "" #. module: lunch @@ -345,7 +408,7 @@ msgid "Create a new lunch category" msgstr "" #. module: lunch -#: model_terms:ir.actions.act_window,help:lunch.lunch_cashmove_action_control_accounts +#: model_terms:ir.actions.act_window,help:lunch.lunch_cashmove_report_action_control_accounts msgid "Create a new payment" msgstr "" @@ -357,64 +420,86 @@ msgstr "" #. module: lunch #: model:ir.model.fields,field_description:lunch.field_lunch_alert__create_uid #: model:ir.model.fields,field_description:lunch.field_lunch_cashmove__create_uid +#: model:ir.model.fields,field_description:lunch.field_lunch_location__create_uid #: model:ir.model.fields,field_description:lunch.field_lunch_order__create_uid -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line__create_uid -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line_lucky__create_uid +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__create_uid #: model:ir.model.fields,field_description:lunch.field_lunch_product__create_uid #: model:ir.model.fields,field_description:lunch.field_lunch_product_category__create_uid +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__create_uid +#: model:ir.model.fields,field_description:lunch.field_lunch_topping__create_uid msgid "Created by" msgstr "" #. module: lunch #: model:ir.model.fields,field_description:lunch.field_lunch_alert__create_date #: model:ir.model.fields,field_description:lunch.field_lunch_cashmove__create_date +#: model:ir.model.fields,field_description:lunch.field_lunch_location__create_date #: model:ir.model.fields,field_description:lunch.field_lunch_order__create_date -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line__create_date -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line_lucky__create_date +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__create_date #: model:ir.model.fields,field_description:lunch.field_lunch_product__create_date #: model:ir.model.fields,field_description:lunch.field_lunch_product_category__create_date +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__create_date +#: model:ir.model.fields,field_description:lunch.field_lunch_topping__create_date msgid "Created on" msgstr "" #. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_cashmove__currency_id +#: model:ir.model.fields,field_description:lunch.field_lunch_cashmove_report__currency_id #: model:ir.model.fields,field_description:lunch.field_lunch_order__currency_id -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line__currency_id +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__currency_id +#: model:ir.model.fields,field_description:lunch.field_lunch_product__currency_id +#: model:ir.model.fields,field_description:lunch.field_lunch_product_category__currency_id +#: model:ir.model.fields,field_description:lunch.field_lunch_product_report__currency_id +#: model:ir.model.fields,field_description:lunch.field_lunch_topping__currency_id +#: model:ir.model.fields,field_description:lunch.field_res_config_settings__currency_id msgid "Currency" msgstr "" #. module: lunch +#: model_terms:ir.ui.view,arch_db:lunch.lunch_alert_view_search +msgid "Currently inactive" +msgstr "" + +#. module: lunch #: model:ir.model.fields,field_description:lunch.field_lunch_cashmove__date -#: model:ir.model.fields,field_description:lunch.field_lunch_order__date -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line__date -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_line_view_search +#: model:ir.model.fields,field_description:lunch.field_lunch_cashmove_report__date +#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_search msgid "Date" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_alert__specific_day -msgid "Day" +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__delivery +#: selection:lunch.supplier,delivery:0 +msgid "Delivery" msgstr "" #. module: lunch #: model:ir.model.fields,field_description:lunch.field_lunch_cashmove__description +#: model:ir.model.fields,field_description:lunch.field_lunch_cashmove_report__description +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__product_description #: model:ir.model.fields,field_description:lunch.field_lunch_product__description -#: model_terms:ir.ui.view,arch_db:lunch.report_lunch_order +#: model:ir.model.fields,field_description:lunch.field_lunch_product_report__description msgid "Description" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_alert__display -msgid "Display" +#: model_terms:ir.ui.view,arch_db:lunch.view_lunch_order_temp +msgid "Discard" msgstr "" #. module: lunch #: model:ir.model.fields,field_description:lunch.field_lunch_alert__display_name #: model:ir.model.fields,field_description:lunch.field_lunch_cashmove__display_name +#: model:ir.model.fields,field_description:lunch.field_lunch_cashmove_report__display_name +#: model:ir.model.fields,field_description:lunch.field_lunch_location__display_name #: model:ir.model.fields,field_description:lunch.field_lunch_order__display_name -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line__display_name -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line_lucky__display_name +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__display_name #: model:ir.model.fields,field_description:lunch.field_lunch_product__display_name #: model:ir.model.fields,field_description:lunch.field_lunch_product_category__display_name +#: model:ir.model.fields,field_description:lunch.field_lunch_product_report__display_name +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__display_name +#: model:ir.model.fields,field_description:lunch.field_lunch_topping__display_name msgid "Display Name" msgstr "" @@ -426,46 +511,80 @@ msgid "Don't forget the alerts displayed in the reddish area" msgstr "" #. module: lunch -#: model:ir.ui.menu,name:lunch.lunch_cashmove_menu_payment +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__edit +msgid "Edit Mode" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__email +#: selection:lunch.supplier,send_by:0 +msgid "Email" +msgstr "" + +#. module: lunch +#: model:ir.ui.menu,name:lunch.lunch_cashmove_report_menu_payment msgid "Employee Payments" msgstr "" #. module: lunch -#: model:ir.model.fields,help:lunch.field_lunch_order_line_lucky__is_max_budget -msgid "Enable this option to set a maximal budget for your lucky order." +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__topping_ids_1 +msgid "Extra Garniture" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__topping_ids_2 +msgid "Extra Garniture 2" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__topping_ids_3 +msgid "Extra Garniture 3" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_product_report__is_favorite +msgid "Favorite" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_product__favorite_user_ids +msgid "Favorite User" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__message_follower_ids +msgid "Followers" msgstr "" #. module: lunch -#: selection:lunch.alert,alert_type:0 -msgid "Every Day" +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__message_channel_ids +msgid "Followers (Channels)" msgstr "" #. module: lunch -#: selection:lunch.alert,alert_type:0 -msgid "Every Week" +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__message_partner_ids +msgid "Followers (Partners)" msgstr "" #. module: lunch -#: model_terms:ir.actions.act_window,help:lunch.lunch_alert_action -msgid "Example:<br>\n" -" Recurency: Everyday,<br>\n" -" Time interval: from 00h00 am to 11h59 pm,<br>\n" -" Message: \"You must order before 10h30 am\"." +#: model:ir.model.fields,help:lunch.field_lunch_supplier__email_formatted +msgid "Format email address \"Name <email@domain>\"" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_form -msgid "Feeling Lucky" +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__email_formatted +msgid "Formatted Email" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_alert__friday +#: model:ir.model.fields,field_description:lunch.field_lunch_alert__recurrency_friday +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__recurrency_friday msgid "Friday" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_cashmove_view_search_2 -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_line_view_search +#: model_terms:ir.ui.view,arch_db:lunch.lunch_cashmove_report_view_search_2 +#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_search #: model_terms:ir.ui.view,arch_db:lunch.lunch_product_view_search msgid "Group By" msgstr "" @@ -481,94 +600,137 @@ msgid "Here you can access all categories for the lunch products." msgstr "" #. module: lunch -#: model_terms:ir.actions.act_window,help:lunch.lunch_order_line_action_by_supplier +#: model_terms:ir.actions.act_window,help:lunch.lunch_order_action_by_supplier msgid "Here you can see today's orders grouped by vendors." msgstr "" #. module: lunch -#: model_terms:ir.actions.act_window,help:lunch.lunch_cashmove_action_account +#: model_terms:ir.actions.act_window,help:lunch.lunch_cashmove_report_action_account msgid "Here you can see your cash moves.<br>A cash move can either be an expense or a payment.\n" " An expense is automatically created when an order is received while a payment is a reimbursement to the company encoded by the manager." msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.view_lunch_order_line_lucky -msgid "I'm feeling lucky" +#: model:ir.model.fields,field_description:lunch.field_lunch_alert__id +#: model:ir.model.fields,field_description:lunch.field_lunch_cashmove__id +#: model:ir.model.fields,field_description:lunch.field_lunch_cashmove_report__id +#: model:ir.model.fields,field_description:lunch.field_lunch_location__id +#: model:ir.model.fields,field_description:lunch.field_lunch_order__id +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__id +#: model:ir.model.fields,field_description:lunch.field_lunch_product__id +#: model:ir.model.fields,field_description:lunch.field_lunch_product_category__id +#: model:ir.model.fields,field_description:lunch.field_lunch_product_report__id +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__id +#: model:ir.model.fields,field_description:lunch.field_lunch_topping__id +msgid "ID" msgstr "" #. module: lunch -#: model:ir.actions.act_window,name:lunch.action_lunch_order_line_lucky -#: model_terms:ir.ui.view,arch_db:lunch.view_lunch_order_line_lucky -msgid "I'm feeling lucky today !" +#: model:ir.model.fields,help:lunch.field_lunch_supplier__message_unread +msgid "If checked new messages require your attention." msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line_lucky__is_max_budget -msgid "I'm not feeling rich" +#: model:ir.model.fields,help:lunch.field_lunch_supplier__message_needaction +msgid "If checked, new messages require your attention." msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_alert__id -#: model:ir.model.fields,field_description:lunch.field_lunch_cashmove__id -#: model:ir.model.fields,field_description:lunch.field_lunch_order__id -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line__id -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line_lucky__id -#: model:ir.model.fields,field_description:lunch.field_lunch_product__id -#: model:ir.model.fields,field_description:lunch.field_lunch_product_category__id -msgid "ID" +#: model:ir.model.fields,help:lunch.field_lunch_supplier__message_has_error +msgid "If checked, some messages have a delivery error." msgstr "" #. module: lunch -#: model:ir.model.fields,help:lunch.field_lunch_alert__partner_id -msgid "If specified, the selected vendor can be ordered only on selected days" +#: model:ir.model.fields,field_description:lunch.field_lunch_product__image +msgid "Image" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_cashmove__state -msgid "Is an order or a payment" +#: model_terms:ir.ui.view,arch_db:lunch.view_lunch_order_temp +msgid "Informations, allergens, ..." +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_alert__available_today +msgid "Is Displayed Today" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_res_users__last_lunch_location_id +msgid "Last Lunch Location" msgstr "" #. module: lunch #: model:ir.model.fields,field_description:lunch.field_lunch_alert____last_update #: model:ir.model.fields,field_description:lunch.field_lunch_cashmove____last_update +#: model:ir.model.fields,field_description:lunch.field_lunch_cashmove_report____last_update +#: model:ir.model.fields,field_description:lunch.field_lunch_location____last_update #: model:ir.model.fields,field_description:lunch.field_lunch_order____last_update -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line____last_update -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line_lucky____last_update +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp____last_update #: model:ir.model.fields,field_description:lunch.field_lunch_product____last_update #: model:ir.model.fields,field_description:lunch.field_lunch_product_category____last_update +#: model:ir.model.fields,field_description:lunch.field_lunch_product_report____last_update +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier____last_update +#: model:ir.model.fields,field_description:lunch.field_lunch_topping____last_update msgid "Last Modified on" msgstr "" #. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_product_report__last_order_date +msgid "Last Order Date" +msgstr "" + +#. module: lunch #: model:ir.model.fields,field_description:lunch.field_lunch_alert__write_uid #: model:ir.model.fields,field_description:lunch.field_lunch_cashmove__write_uid +#: model:ir.model.fields,field_description:lunch.field_lunch_location__write_uid #: model:ir.model.fields,field_description:lunch.field_lunch_order__write_uid -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line__write_uid -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line_lucky__write_uid +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__write_uid #: model:ir.model.fields,field_description:lunch.field_lunch_product__write_uid #: model:ir.model.fields,field_description:lunch.field_lunch_product_category__write_uid +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__write_uid +#: model:ir.model.fields,field_description:lunch.field_lunch_topping__write_uid msgid "Last Updated by" msgstr "" #. module: lunch #: model:ir.model.fields,field_description:lunch.field_lunch_alert__write_date #: model:ir.model.fields,field_description:lunch.field_lunch_cashmove__write_date +#: model:ir.model.fields,field_description:lunch.field_lunch_location__write_date #: model:ir.model.fields,field_description:lunch.field_lunch_order__write_date -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line__write_date -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line_lucky__write_date +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__write_date #: model:ir.model.fields,field_description:lunch.field_lunch_product__write_date #: model:ir.model.fields,field_description:lunch.field_lunch_product_category__write_date +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__write_date +#: model:ir.model.fields,field_description:lunch.field_lunch_topping__write_date msgid "Last Updated on" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_form -msgid "List" +#: model:ir.model.fields,field_description:lunch.field_lunch_alert__location_ids +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__available_location_ids +msgid "Location" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_location__name +msgid "Location Name" +msgstr "" + +#. module: lunch +#: model:ir.ui.menu,name:lunch.lunch_location_menu +msgid "Locations" msgstr "" #. module: lunch #: model:ir.module.category,name:lunch.module_lunch_category #: model:ir.ui.menu,name:lunch.menu_lunch +#: model_terms:ir.ui.view,arch_db:lunch.res_config_settings_view_form msgid "Lunch" msgstr "" @@ -578,34 +740,44 @@ msgid "Lunch Alert" msgstr "" #. module: lunch +#: model:ir.actions.act_window,name:lunch.lunch_alert_action +msgid "Lunch Alerts" +msgstr "" + +#. module: lunch #: code:addons/lunch/models/lunch_cashmove.py:23 +#: code:addons/lunch/report/lunch_cashmove_report.py:22 #: model:ir.model,name:lunch.model_lunch_cashmove #, python-format msgid "Lunch Cashmove" msgstr "" #. module: lunch -#: code:addons/lunch/models/lunch_order.py:65 -#: model:ir.actions.report,name:lunch.action_report_lunch_order -#: model:ir.model,name:lunch.model_lunch_order -#: model_terms:ir.ui.view,arch_db:lunch.report_lunch_order +#. openerp-web +#: code:addons/lunch/static/src/js/lunch_kanban_view.js:20 #, python-format -msgid "Lunch Order" +msgid "Lunch Kanban" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_form -msgid "Lunch Order Form" +#: model:ir.actions.act_window,name:lunch.lunch_location_action +#: model:ir.model,name:lunch.model_lunch_location +msgid "Lunch Locations" msgstr "" #. module: lunch -#: model:ir.model,name:lunch.model_lunch_order_line -msgid "Lunch Order Line" +#: model:ir.model.fields,field_description:lunch.field_res_company__lunch_minimum_threshold +msgid "Lunch Minimum Threshold" +msgstr "" + +#. module: lunch +#: model:ir.model,name:lunch.model_lunch_order +msgid "Lunch Order" msgstr "" #. module: lunch -#: model:ir.model,name:lunch.model_lunch_order_line_lucky -msgid "Lunch Order Line Lucky" +#: model:ir.model,name:lunch.model_lunch_order_temp +msgid "Lunch Order Temp" msgstr "" #. module: lunch @@ -619,23 +791,45 @@ msgid "Lunch Product Category" msgstr "" #. module: lunch +#: model:ir.model,name:lunch.model_lunch_supplier +msgid "Lunch Supplier" +msgstr "" + +#. module: lunch +#: model:ir.model,name:lunch.model_lunch_topping +msgid "Lunch Toppings" +msgstr "" + +#. module: lunch #: model:ir.actions.server,name:lunch.action_server_lunch_archive_product msgid "Lunch: Archive/Restore products" msgstr "" #. module: lunch -#: model:ir.actions.server,name:lunch.lunch_order_line_action_cancel +#: model:ir.actions.server,name:lunch.lunch_order_action_cancel msgid "Lunch: Cancel meals" msgstr "" #. module: lunch -#: model:ir.actions.server,name:lunch.lunch_order_line_action_order -msgid "Lunch: Order meals" +#: model:ir.actions.server,name:lunch.lunch_order_action_confirm +msgid "Lunch: Receive meals" msgstr "" #. module: lunch -#: model:ir.actions.server,name:lunch.lunch_order_line_action_confirm -msgid "Lunch: Receive meals" +#: model:ir.actions.server,name:lunch.ir_cron_lunch_ir_actions_server +#: model:ir.cron,cron_name:lunch.ir_cron_lunch +#: model:ir.cron,name:lunch.ir_cron_lunch +msgid "Lunch: automatic email send" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__message_main_attachment_id +msgid "Main Attachment" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,help:lunch.field_res_config_settings__currency_id +msgid "Main currency of the company." msgstr "" #. module: lunch @@ -645,22 +839,58 @@ msgid "Manager" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line_lucky__max_budget -msgid "Max Budget" +#: model:ir.model.fields,field_description:lunch.field_res_config_settings__company_lunch_minimum_threshold +msgid "Maximum Allowed Overdraft" +msgstr "" + +#. module: lunch +#: model_terms:ir.ui.view,arch_db:lunch.res_config_settings_view_form +msgid "Maximum overdraft that your employees can reach" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_product__image_medium +msgid "Medium-sized image" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,help:lunch.field_lunch_product__image_medium +msgid "Medium-sized image of the product. It is automatically resized as a 128x128px image, with aspect ratio preserved, only when the image exceeds one of those sizes. Use this field in form views or some kanban views." msgstr "" #. module: lunch #: model:ir.model.fields,field_description:lunch.field_lunch_alert__message -#: model_terms:ir.ui.view,arch_db:lunch.lunch_alert_view_form msgid "Message" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_alert__monday +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__message_ids +msgid "Messages" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__moment +msgid "Moment" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_alert__recurrency_monday +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__recurrency_monday msgid "Monday" msgstr "" #. module: lunch +#: model:ir.actions.act_window,name:lunch.lunch_cashmove_report_action_account +msgid "My Account" +msgstr "" + +#. module: lunch +#: model_terms:ir.ui.view,arch_db:lunch.lunch_cashmove_report_view_search #: model_terms:ir.ui.view,arch_db:lunch.lunch_cashmove_view_search msgid "My Account grouped" msgstr "" @@ -671,119 +901,191 @@ msgid "My Lunch" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_line_view_search +#: model:ir.ui.menu,name:lunch.lunch_cashmove_report_menu_form +msgid "My Lunch Account" +msgstr "" + +#. module: lunch +#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_search msgid "My Orders" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.report_lunch_order -msgid "Name/Date" +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__name +#: model:ir.model.fields,field_description:lunch.field_lunch_topping__name +msgid "Name" msgstr "" #. module: lunch -#: selection:lunch.order,state:0 -#: selection:lunch.order.line,state:0 +#: model:ir.model.fields,field_description:lunch.field_lunch_product_report__is_new +#: model_terms:ir.ui.view,arch_db:lunch.view_lunch_product_kanban_order msgid "New" msgstr "" #. module: lunch -#: model:ir.actions.act_window,name:lunch.lunch_order_action_form #: model:ir.ui.menu,name:lunch.lunch_order_menu_form msgid "New Order" msgstr "" #. module: lunch -#: model_terms:ir.actions.act_window,help:lunch.lunch_cashmove_action_account +#: model:ir.model.fields,field_description:lunch.field_lunch_product__new_until +msgid "New Until" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__activity_summary +msgid "Next Activity Summary" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__activity_type_id +msgid "Next Activity Type" +msgstr "" + +#. module: lunch +#: selection:lunch.supplier,delivery:0 +msgid "No Delivery" +msgstr "" + +#. module: lunch +#: model_terms:ir.actions.act_window,help:lunch.lunch_cashmove_report_action_account msgid "No cash move yet" msgstr "" #. module: lunch -#: model_terms:ir.actions.act_window,help:lunch.lunch_order_line_action_control_suppliers +#: model_terms:ir.actions.act_window,help:lunch.lunch_order_action_control_suppliers msgid "No lunch order yet" msgstr "" #. module: lunch -#: model_terms:ir.actions.act_window,help:lunch.lunch_order_line_action +#: model_terms:ir.actions.act_window,help:lunch.lunch_order_action msgid "No previous order found" msgstr "" #. module: lunch -#: code:addons/lunch/wizard/lucky_order.py:40 -#, python-format -msgid "No product is matching your request. Now you will starve to death." +#: model_terms:ir.ui.view,arch_db:lunch.res_config_settings_view_form +msgid "None" +msgstr "" + +#. module: lunch +#: selection:lunch.product.category,topping_quantity_1:0 +#: selection:lunch.product.category,topping_quantity_2:0 +#: selection:lunch.product.category,topping_quantity_3:0 +msgid "None or More" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_line_view_search +#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_search msgid "Not Received" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line__note -msgid "Note" +#. openerp-web +#: code:addons/lunch/static/src/js/lunch_kanban_controller.js:191 +#, python-format +msgid "Not enough money in your wallet" msgstr "" #. module: lunch -#: model_terms:ir.actions.act_window,help:lunch.lunch_order_line_action_by_supplier +#: model:ir.model.fields,field_description:lunch.field_lunch_order__note +msgid "Notes" +msgstr "" + +#. module: lunch +#: model_terms:ir.actions.act_window,help:lunch.lunch_order_action_by_supplier msgid "Nothing to order today" msgstr "" #. module: lunch -#: code:addons/lunch/models/lunch_order.py:315 -#, python-format -msgid "Only your lunch manager cancels the orders." +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__message_needaction_counter +msgid "Number of Actions" msgstr "" #. module: lunch -#: code:addons/lunch/models/lunch_order.py:284 -#, python-format -msgid "Only your lunch manager processes the orders." +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__message_has_error_counter +msgid "Number of error" msgstr "" #. module: lunch -#: code:addons/lunch/models/lunch_order.py:304 -#, python-format -msgid "Only your lunch manager sets the orders as received." +#: model:ir.model.fields,help:lunch.field_lunch_supplier__message_needaction_counter +msgid "Number of messages which requires an action" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,help:lunch.field_lunch_supplier__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,help:lunch.field_lunch_supplier__message_unread_counter +msgid "Number of unread messages" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_cashmove__order_id -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line__order_id -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_line_view_kanban -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_line_view_tree -#: model_terms:ir.ui.view,arch_db:lunch.report_lunch_order -#: selection:lunch.cashmove,state:0 +#: selection:lunch.product.category,topping_quantity_1:0 +#: selection:lunch.product.category,topping_quantity_2:0 +#: selection:lunch.product.category,topping_quantity_3:0 +msgid "One or More" +msgstr "" + +#. module: lunch +#: selection:lunch.product.category,topping_quantity_1:0 +#: selection:lunch.product.category,topping_quantity_2:0 +#: selection:lunch.product.category,topping_quantity_3:0 +msgid "Only One" +msgstr "" + +#. module: lunch +#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_kanban msgid "Order" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_line_view_search +#: model:ir.model.fields,field_description:lunch.field_lunch_order__date +#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_search msgid "Order Date" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_line_view_tree +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__automatic_email_time +msgid "Order Time" +msgstr "" + +#. module: lunch +#: model:ir.actions.act_window,name:lunch.lunch_product_action_order +msgid "Order Your Lunch" +msgstr "" + +#. module: lunch +#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_tree msgid "Order lines Tree" msgstr "" #. module: lunch -#: selection:lunch.order.line,state:0 -msgid "Ordered" +#. openerp-web +#: code:addons/lunch/static/src/xml/lunch_kanban.xml:84 +#, python-format +msgid "Order now" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_form -msgid "Orders Form" +#: selection:lunch.order,state:0 +msgid "Ordered" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_tree -msgid "Orders Tree" +#: model_terms:ir.ui.view,arch_db:lunch.lunch_supplier_view_form +msgid "Orders" msgstr "" #. module: lunch -#: model:ir.actions.act_window,name:lunch.lunch_order_line_action_by_supplier -#: model:ir.ui.menu,name:lunch.lunch_order_line_menu_control_suppliers +#: model:ir.actions.act_window,name:lunch.lunch_order_action_by_supplier +#: model:ir.ui.menu,name:lunch.lunch_order_menu_control_suppliers msgid "Orders by Vendor" msgstr "" @@ -793,8 +1095,22 @@ msgid "Orders for ${ctx['order']['company_name']}" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_cashmove_view_search -#: selection:lunch.cashmove,state:0 +#: model_terms:ir.ui.view,arch_db:lunch.res_config_settings_view_form +msgid "Overdraft" +msgstr "" + +#. module: lunch +#: selection:lunch.supplier,activity_state:0 +msgid "Overdue" +msgstr "" + +#. module: lunch +#: selection:lunch.supplier,moment:0 +msgid "PM" +msgstr "" + +#. module: lunch +#: model_terms:ir.ui.view,arch_db:lunch.lunch_cashmove_report_view_search msgid "Payment" msgstr "" @@ -804,13 +1120,14 @@ msgid "Payments are used to register liquidity movements. You can process those msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_order__previous_order_ids -msgid "Previous Order" +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__phone +#: selection:lunch.supplier,send_by:0 +msgid "Phone" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_order__previous_order_widget -msgid "Previous Order Widget" +#: selection:lunch.supplier,activity_state:0 +msgid "Planned" msgstr "" #. module: lunch @@ -819,23 +1136,23 @@ msgid "Previous Orders" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line__price #: model:ir.model.fields,field_description:lunch.field_lunch_product__price -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_line_view_tree +#: model:ir.model.fields,field_description:lunch.field_lunch_product_report__price +#: model:ir.model.fields,field_description:lunch.field_lunch_topping__price +#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_tree msgid "Price" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.view_lunch_product_kanban -msgid "Price:" +#: model:ir.model.fields,field_description:lunch.field_lunch_order__product_id +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__product_name +#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_search +msgid "Product" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line__product_id -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line_lucky__product_id -#: model:ir.model.fields,field_description:lunch.field_lunch_product__name -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_line_view_search -msgid "Product" +#: model:ir.model.fields,field_description:lunch.field_lunch_product_report__is_available_at +msgid "Product Availability" msgstr "" #. module: lunch @@ -845,20 +1162,35 @@ msgid "Product Categories" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line__category_id +#: model_terms:ir.ui.view,arch_db:lunch.lunch_product_category_view_form +msgid "Product Categories Form" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_order__category_id +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__product_category #: model:ir.model.fields,field_description:lunch.field_lunch_product__category_id #: model:ir.model.fields,field_description:lunch.field_lunch_product_category__name +#: model:ir.model.fields,field_description:lunch.field_lunch_product_report__category_id #: model_terms:ir.ui.view,arch_db:lunch.lunch_product_view_search msgid "Product Category" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_product_category_view_form +#: model_terms:ir.ui.view,arch_db:lunch.lunch_product_category_view_tree msgid "Product Category:" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line__name +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__product_id +#: model:ir.model.fields,field_description:lunch.field_lunch_product_report__product_id +msgid "Product ID" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_order__name +#: model:ir.model.fields,field_description:lunch.field_lunch_product__name +#: model:ir.model.fields,field_description:lunch.field_lunch_product_report__name msgid "Product Name" msgstr "" @@ -868,52 +1200,49 @@ msgid "Product Search" msgstr "" #. module: lunch +#: model:ir.model,name:lunch.model_lunch_product_report +msgid "Product report" +msgstr "" + +#. module: lunch #: model:ir.actions.act_window,name:lunch.lunch_product_action -#: model:ir.model.fields,field_description:lunch.field_lunch_order__order_line_ids #: model:ir.ui.menu,name:lunch.lunch_product_menu msgid "Products" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_product_category_view_form #: model_terms:ir.ui.view,arch_db:lunch.lunch_product_view_form msgid "Products Form" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_product_view_tree -msgid "Products Tree" +#: model_terms:ir.ui.view,arch_db:lunch.lunch_product_category_view_tree +msgid "Products List" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_alert_view_form -msgid "Products from this vendor can <strong>not</strong> be ordered at that moment." +#: model_terms:ir.ui.view,arch_db:lunch.lunch_product_view_tree +msgid "Products Tree" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_alert_view_form -msgid "Products from this vendor can be ordered at that moment." +#: model:ir.model.fields,field_description:lunch.field_lunch_order__quantity +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__quantity +msgid "Quantity" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_line_view_kanban -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_line_view_tree +#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_kanban msgid "Receive" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_line_view_search +#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_search #: selection:lunch.order,state:0 -#: selection:lunch.order.line,state:0 msgid "Received" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_alert__alert_type -msgid "Recurrence" -msgstr "" - -#. module: lunch #: model:ir.actions.act_window,name:lunch.lunch_cashmove_action_payment msgid "Register Cash Moves" msgstr "" @@ -924,18 +1253,29 @@ msgid "Register a payment" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_alert__saturday +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__responsible_id +msgid "Responsible" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__activity_user_id +msgid "Responsible User" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_alert__recurrency_saturday +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__recurrency_saturday msgid "Saturday" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_alert_view_form -msgid "Schedule" +#: model_terms:ir.ui.view,arch_db:lunch.view_lunch_order_temp +msgid "Save" msgstr "" #. module: lunch #: model_terms:ir.ui.view,arch_db:lunch.lunch_alert_view_search -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_line_view_search +#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_search msgid "Search" msgstr "" @@ -947,33 +1287,83 @@ msgid "Select a product and put your order comments on the note." msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_form -msgid "Select your order" +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__send_by +msgid "Send Order By" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.view_lunch_order_line_lucky -msgid "Select your vendor" +#: model:ir.actions.act_window,name:lunch.lunch_config_settings_action +#: model:ir.ui.menu,name:lunch.lunch_settings_menu +msgid "Settings" msgstr "" #. module: lunch -#: selection:lunch.alert,alert_type:0 -msgid "Specific Day" +#: model:ir.model.fields,field_description:lunch.field_lunch_alert__until +msgid "Show Until" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_product__image_small +msgid "Small-sized image" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,help:lunch.field_lunch_product__image_small +msgid "Small-sized image of the product. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required." +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__note +msgid "Special Instructions" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__state_id +#: model_terms:ir.ui.view,arch_db:lunch.lunch_supplier_view_form +msgid "State" msgstr "" #. module: lunch #: model:ir.model.fields,field_description:lunch.field_lunch_order__state -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line__state msgid "Status" msgstr "" #. module: lunch -#: model_terms:ir.actions.act_window,help:lunch.lunch_order_line_action_control_suppliers +#: model:ir.model.fields,help:lunch.field_lunch_supplier__activity_state +msgid "Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__street +msgid "Street" +msgstr "" + +#. module: lunch +#: model_terms:ir.ui.view,arch_db:lunch.lunch_supplier_view_form +msgid "Street 2..." +msgstr "" + +#. module: lunch +#: model_terms:ir.ui.view,arch_db:lunch.lunch_supplier_view_form +msgid "Street..." +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__street2 +msgid "Street2" +msgstr "" + +#. module: lunch +#: model_terms:ir.actions.act_window,help:lunch.lunch_order_action_control_suppliers msgid "Summary of all lunch orders, grouped by vendor and by date." msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_alert__sunday +#: model:ir.model.fields,field_description:lunch.field_lunch_alert__recurrency_sunday +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__recurrency_sunday msgid "Sunday" msgstr "" @@ -983,17 +1373,41 @@ msgid "The company this user is currently working for." msgstr "" #. module: lunch -#: code:addons/lunch/models/lunch_order.py:128 -#, python-format -msgid "The date of your order is in the past." +#: model:ir.model.fields,help:lunch.field_lunch_supplier__responsible_id +msgid "The responsible is the person that will order lunch for everyoneIt will be used as the 'from' when sending the automatic email" msgstr "" #. module: lunch -#: model_terms:ir.actions.act_window,help:lunch.lunch_order_line_action +#: model_terms:ir.actions.act_window,help:lunch.lunch_order_action msgid "There is no previous order recorded. Click on \"My Lunch\" and then create a new lunch order." msgstr "" #. module: lunch +#: model_terms:ir.actions.act_window,help:lunch.lunch_product_action_order +msgid "There is no product available today" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,help:lunch.field_lunch_product__image +msgid "This field holds the image used as image for the product, limited to 1024x1024px." +msgstr "" + +#. module: lunch +#: model:ir.model.fields,help:lunch.field_lunch_topping__topping_category +msgid "This field is a technical field" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,help:lunch.field_lunch_supplier__recurrency_end_date +msgid "This field is used in order to " +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__available_today +msgid "This is True when if the supplier is available today" +msgstr "" + +#. module: lunch #. openerp-web #: code:addons/lunch/static/src/xml/lunch.xml:4 #, python-format @@ -1001,130 +1415,292 @@ msgid "This is the first time you order a meal" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_alert__thursday +#: model:ir.model.fields,field_description:lunch.field_lunch_alert__recurrency_thursday +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__recurrency_thursday msgid "Thursday" msgstr "" #. module: lunch -#: model:ir.ui.menu,name:lunch.lunch_order_line_menu_by_supplier +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__tz +msgid "Timezone" +msgstr "" + +#. module: lunch +#. openerp-web +#: code:addons/lunch/static/src/js/lunch_kanban_widget.js:51 +#: selection:lunch.order,state:0 +#, python-format +msgid "To Order" +msgstr "" + +#. module: lunch +#: model_terms:ir.ui.view,arch_db:lunch.lunch_payment_dialog +msgid "To add some money to your wallet, please contact your lunch manager." +msgstr "" + +#. module: lunch +#: model_terms:ir.actions.act_window,help:lunch.lunch_location_action +msgid "To see some locations, create one using the create button" +msgstr "" + +#. module: lunch +#: model_terms:ir.actions.act_window,help:lunch.lunch_product_action_order +msgid "To see some products, check if your vendors are available today and that you have configured some products" +msgstr "" + +#. module: lunch +#: selection:lunch.supplier,activity_state:0 +msgid "Today" +msgstr "" + +#. module: lunch +#: model:ir.ui.menu,name:lunch.lunch_order_menu_by_supplier msgid "Today's Orders" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_order__total +#: model:ir.model.fields,field_description:lunch.field_lunch_topping__topping_category +msgid "Topping Category" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_product_category__topping_ids_1 +msgid "Topping Ids 1" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_product_category__topping_ids_2 +msgid "Topping Ids 2" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_product_category__topping_ids_3 +msgid "Topping Ids 3" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__topping_label_1 +#: model:ir.model.fields,field_description:lunch.field_lunch_product_category__topping_label_1 +msgid "Topping Label 1" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__topping_label_2 +#: model:ir.model.fields,field_description:lunch.field_lunch_product_category__topping_label_2 +msgid "Topping Label 2" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__topping_label_3 +#: model:ir.model.fields,field_description:lunch.field_lunch_product_category__topping_label_3 +msgid "Topping Label 3" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__topping_quantity_1 +#: model:ir.model.fields,field_description:lunch.field_lunch_product_category__topping_quantity_1 +msgid "Topping Quantity 1" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__topping_quantity_2 +#: model:ir.model.fields,field_description:lunch.field_lunch_product_category__topping_quantity_2 +msgid "Topping Quantity 2" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__topping_quantity_3 +#: model:ir.model.fields,field_description:lunch.field_lunch_product_category__topping_quantity_3 +msgid "Topping Quantity 3" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_order__display_toppings +msgid "Toppings" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_order__topping_ids_1 +msgid "Toppings 1" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_order__topping_ids_2 +msgid "Toppings 2" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_order__topping_ids_3 +msgid "Toppings 3" +msgstr "" + +#. module: lunch +#. openerp-web +#: code:addons/lunch/static/src/xml/lunch_kanban.xml:78 +#: model_terms:ir.ui.view,arch_db:lunch.lunch_cashmove_report_view_tree +#: model_terms:ir.ui.view,arch_db:lunch.lunch_cashmove_report_view_tree_2 #: model_terms:ir.ui.view,arch_db:lunch.lunch_cashmove_view_tree -#: model_terms:ir.ui.view,arch_db:lunch.lunch_cashmove_view_tree_2 -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_line_view_tree #: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_tree +#, python-format msgid "Total" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_alert__tuesday +#: model:ir.model.fields,field_description:lunch.field_lunch_order__price +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__price_total +msgid "Total Price" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_alert__recurrency_tuesday +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__recurrency_tuesday msgid "Tuesday" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.report_lunch_order -msgid "Unit Price" +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__message_unread +msgid "Unread Messages" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_cashmove__user_id -#: model:ir.model.fields,field_description:lunch.field_lunch_order__user_id -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line__user_id -#: model:res.groups,name:lunch.group_lunch_user -msgid "User" +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__message_unread_counter +msgid "Unread Messages Counter" msgstr "" #. module: lunch -#: code:addons/lunch/models/lunch_order.py:232 -#, python-format -msgid "Validate order for one company at a time to send emails (mixed orders from %s and %s)" +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__recurrency_end_date +msgid "Until" msgstr "" #. module: lunch -#: code:addons/lunch/models/lunch_order.py:237 -#, python-format -msgid "Validate order for one currency at a time to send emails (mixed orders from %s and %s)" +#: model:ir.model.fields,field_description:lunch.field_lunch_cashmove__user_id +#: model:ir.model.fields,field_description:lunch.field_lunch_cashmove_report__user_id +#: model:ir.model.fields,field_description:lunch.field_lunch_order__user_id +#: model:ir.model.fields,field_description:lunch.field_lunch_order_temp__user_id +#: model:ir.model.fields,field_description:lunch.field_lunch_product_report__user_id +#: model:res.groups,name:lunch.group_lunch_user +msgid "User" msgstr "" #. module: lunch -#: code:addons/lunch/models/lunch_order.py:227 -#, python-format -msgid "Validate order for one supplier at a time to send emails (mixed orders from %s and %s)" +#: model:ir.model,name:lunch.model_res_users +msgid "Users" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_alert__partner_id -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line__supplier -#: model:ir.model.fields,field_description:lunch.field_lunch_order_line_lucky__supplier_ids -#: model:ir.model.fields,field_description:lunch.field_lunch_product__supplier -#: model_terms:ir.ui.view,arch_db:lunch.lunch_alert_view_form +#: model:ir.model.fields,field_description:lunch.field_lunch_order__supplier_id +#: model:ir.model.fields,field_description:lunch.field_lunch_product__supplier_id +#: model:ir.model.fields,field_description:lunch.field_lunch_product_report__supplier_id +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__partner_id #: model_terms:ir.ui.view,arch_db:lunch.lunch_product_view_search msgid "Vendor" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_line_view_search +#: model_terms:ir.ui.view,arch_db:lunch.lunch_order_view_search msgid "Vendor Orders by Date" msgstr "" #. module: lunch -#: code:addons/lunch/models/lunch_order.py:190 -#, python-format -msgid "Vendor(s) '%s' is not available today" +#: model:ir.actions.act_window,name:lunch.lunch_vendors_action +#: model:ir.ui.menu,name:lunch.lunch_vendors_menu +#: model_terms:ir.ui.view,arch_db:lunch.view_lunch_product_kanban_order +msgid "Vendors" msgstr "" #. module: lunch -#: model:ir.model.fields,field_description:lunch.field_lunch_alert__wednesday +#: model:ir.model.fields,field_description:lunch.field_lunch_alert__recurrency_wednesday +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__recurrency_wednesday msgid "Wednesday" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_alert_view_form -msgid "Write the message you want to display during the defined period..." +#: code:addons/lunch/wizard/lunch_line_wizard.py:68 +#, python-format +msgid "You have to order one and only one %s" msgstr "" #. module: lunch -#: model:ir.actions.act_window,name:lunch.lunch_cashmove_action_account -msgid "Your Account" +#: code:addons/lunch/wizard/lunch_line_wizard.py:67 +#, python-format +msgid "You should order at least one %s" msgstr "" #. module: lunch -#: model:ir.ui.menu,name:lunch.lunch_cashmove_menu_form -msgid "Your Lunch Account" +#. openerp-web +#: code:addons/lunch/static/src/xml/lunch_kanban.xml:15 +#, python-format +msgid "Your Account" msgstr "" #. module: lunch -#: model:ir.actions.act_window,name:lunch.lunch_order_line_action +#: model:ir.actions.act_window,name:lunch.lunch_order_action msgid "Your Orders" msgstr "" #. module: lunch #. openerp-web +#: code:addons/lunch/static/src/xml/lunch_kanban.xml:120 +#, python-format +msgid "Your cart\n" +" (" +msgstr "" + +#. module: lunch +#. openerp-web #: code:addons/lunch/static/src/xml/lunch.xml:6 #, python-format msgid "Your favorite meals will be created based on your last orders." msgstr "" #. module: lunch +#. openerp-web +#: code:addons/lunch/static/src/xml/lunch_kanban.xml:34 +#, python-format +msgid "Your order" +msgstr "" + +#. module: lunch +#: code:addons/lunch/models/lunch_order.py:68 +#, python-format +msgid "Your wallet does not contain enough money to order that.To add some money to your wallet, please contact your lunch manager." +msgstr "" + +#. module: lunch +#: model_terms:ir.ui.view,arch_db:lunch.lunch_supplier_view_form +msgid "ZIP" +msgstr "" + +#. module: lunch +#: model:ir.model.fields,field_description:lunch.field_lunch_supplier__zip_code +msgid "Zip" +msgstr "" + +#. module: lunch +#: model_terms:ir.ui.view,arch_db:lunch.lunch_alert_view_form +msgid "alert form" +msgstr "" + +#. module: lunch +#: model_terms:ir.ui.view,arch_db:lunch.lunch_cashmove_report_view_form #: model_terms:ir.ui.view,arch_db:lunch.lunch_cashmove_view_form msgid "cashmove form" msgstr "" #. module: lunch +#: model_terms:ir.ui.view,arch_db:lunch.lunch_cashmove_report_view_tree +#: model_terms:ir.ui.view,arch_db:lunch.lunch_cashmove_report_view_tree_2 #: model_terms:ir.ui.view,arch_db:lunch.lunch_cashmove_view_tree -#: model_terms:ir.ui.view,arch_db:lunch.lunch_cashmove_view_tree_2 msgid "cashmove tree" msgstr "" #. module: lunch -#: model_terms:ir.ui.view,arch_db:lunch.lunch_cashmove_view_search_2 +#: model_terms:ir.ui.view,arch_db:lunch.lunch_cashmove_report_view_search_2 msgid "lunch cashmove" msgstr "" #. module: lunch +#: model_terms:ir.ui.view,arch_db:lunch.lunch_cashmove_report_view_search #: model_terms:ir.ui.view,arch_db:lunch.lunch_cashmove_view_search msgid "lunch employee payment" msgstr "" diff --git a/addons/lunch/static/src/js/lunch_kanban_controller.js b/addons/lunch/static/src/js/lunch_kanban_controller.js index e1025251b53..80a39adae96 100644 --- a/addons/lunch/static/src/js/lunch_kanban_controller.js +++ b/addons/lunch/static/src/js/lunch_kanban_controller.js @@ -18,11 +18,9 @@ var LunchKanbanController = KanbanController.extend({ add_product: '_onAddProduct', change_location: '_onLocationChanged', change_user: '_onUserChanged', - edit_order: '_onEditOrder', open_wizard: '_onOpenWizard', order_now: '_onOrderNow', remove_product: '_onRemoveProduct', - save_order: '_onSaveOrder', unlink_order: '_onUnlinkOrder', }), @@ -69,7 +67,23 @@ var LunchKanbanController = KanbanController.extend({ }, }).then(function (data) { self.widgetData = data; - self.model._updateLocation(data.user_location[0]); + return self.model._updateLocation(data.user_location[0]); + }); + }, + /** + * Renders and appends the lunch banner widget. + * + * @private + */ + _renderLunchKanbanWidget: function () { + var self = this; + if (this.widget) { + this.widget.destroy(); + } + this.widgetData.wallet = parseFloat(this.widgetData.wallet).toFixed(2); + this.widget = new LunchKanbanWidget(this, _.extend(this.widgetData, {edit: this.editMode})); + return this.widget.appendTo(document.createDocumentFragment()).then(function () { + self.$('.o_lunch_kanban').prepend(self.widget.$el); }); }, _showPaymentDialog: function (title) { @@ -91,19 +105,8 @@ var LunchKanbanController = KanbanController.extend({ * @private */ _update: function () { - var self = this; - - var def = this._fetchWidgetData().then(function () { - if (self.widget) { - self.widget.destroy(); - } - self.widgetData.wallet = parseFloat(self.widgetData.wallet).toFixed(2); - self.widget = new LunchKanbanWidget(self, _.extend(self.widgetData, {edit: self.editMode})); - return self.widget.appendTo(document.createDocumentFragment()).then(function () { - self.$('.o_lunch_kanban').prepend(self.widget.$el); - }); - }); - return Promise.all([def, this._super.apply(self, arguments)]); + var def = this._fetchWidgetData().then(this._renderLunchKanbanWidget.bind(this)); + return Promise.all([def, this._super.apply(this, arguments)]); }, /** * Override to add the location domain (coming from the lunchKanbanWidget) @@ -134,12 +137,6 @@ var LunchKanbanController = KanbanController.extend({ self.reload(); }); }, - _onEditOrder: function (ev) { - ev.stopPropagation(); - - this.editMode = true; - this.reload(); - }, _onLocationChanged: function (ev) { var self = this; @@ -208,12 +205,6 @@ var LunchKanbanController = KanbanController.extend({ self.reload(); }); }, - _onSaveOrder: function (ev) { - ev.stopPropagation(); - - this.editMode = false; - this.reload(); - }, _onUserChanged: function (ev) { ev.stopPropagation(); diff --git a/addons/lunch/static/src/js/lunch_kanban_mobile.js b/addons/lunch/static/src/js/lunch_kanban_mobile.js new file mode 100644 index 00000000000..eddd22ac351 --- /dev/null +++ b/addons/lunch/static/src/js/lunch_kanban_mobile.js @@ -0,0 +1,74 @@ +odoo.define('lunch.LunchKanbanMobile', function (require) { +"use strict"; + +var config = require('web.config'); +var LunchKanbanWidget = require('lunch.LunchKanbanWidget'); +var LunchKanbanController = require('lunch.LunchKanbanController'); + +if (!config.device.isMobile) { + return; +} + +LunchKanbanWidget.include({ + template: "LunchKanbanWidgetMobile", + + /** + * Override to set the toggle state allowing initially open it. + * + * @override + */ + init: function (parent, params) { + this._super.apply(this, arguments); + this.keepOpen = params.keepOpen || undefined; + }, +}); + +LunchKanbanController.include({ + /** + * @override + */ + init: function () { + this._super.apply(this, arguments); + this.openWidget = false; + }, + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * Override to add the widget's toggle state to its data. + * + * @override + * @private + */ + _renderLunchKanbanWidget: function () { + this.widgetData.keepOpen = this.openWidget; + this.openWidget = false; + return this._super.apply(this, arguments); + }, + + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + /** + * @override + * @private + */ + _onAddProduct: function () { + this.openWidget = true; + this._super.apply(this, arguments); + }, + + /** + * @override + * @private + */ + _onRemoveProduct: function () { + this.openWidget = true; + this._super.apply(this, arguments); + }, +}); + +}); diff --git a/addons/lunch/static/src/js/lunch_kanban_record.js b/addons/lunch/static/src/js/lunch_kanban_record.js index a0d60588fae..ce9272b34f0 100644 --- a/addons/lunch/static/src/js/lunch_kanban_record.js +++ b/addons/lunch/static/src/js/lunch_kanban_record.js @@ -1,22 +1,36 @@ odoo.define('lunch.LunchKanbanRecord', function (require) { -"use strict"; + "use strict"; -/** - * This file defines the KanbanRecord for the Lunch Kanban view. - */ + /** + * This file defines the KanbanRecord for the Lunch Kanban view. + */ -var KanbanRecord = require('web.KanbanRecord'); + var KanbanRecord = require('web.KanbanRecord'); -var LunchKanbanRecord = KanbanRecord.extend({ - _onGlobalClick: function (ev) { - ev.preventDefault(); - // ignore clicks on oe_kanban_action elements - if (!$(ev.target).hasClass('oe_kanban_action')) { - this.trigger_up('open_wizard', {productId: this.recordData.product_id}); - } - }, -}); + var LunchKanbanRecord = KanbanRecord.extend({ + events: _.extend({}, KanbanRecord.prototype.events, { + 'click': '_onSelectRecord', + }), -return LunchKanbanRecord; + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- -}); + /** + * Open the add product wizard + * + * @private + * @param {MouseEvent} ev Click event + */ + _onSelectRecord: function (ev) { + ev.preventDefault(); + // ignore clicks on oe_kanban_action elements + if (!$(ev.target).hasClass('oe_kanban_action')) { + this.trigger_up('open_wizard', {productId: this.recordData.product_id}); + } + }, + }); + + return LunchKanbanRecord; + + }); diff --git a/addons/lunch/static/src/js/lunch_kanban_view.js b/addons/lunch/static/src/js/lunch_kanban_view.js index 72b30634e87..a0cd6d3f3e0 100644 --- a/addons/lunch/static/src/js/lunch_kanban_view.js +++ b/addons/lunch/static/src/js/lunch_kanban_view.js @@ -5,19 +5,12 @@ var LunchKanbanController = require('lunch.LunchKanbanController'); var LunchKanbanModel = require('lunch.LunchKanbanModel'); var LunchKanbanRenderer = require('lunch.LunchKanbanRenderer'); -var config = require('web.config'); var core = require('web.core'); var KanbanView = require('web.KanbanView'); var view_registry = require('web.view_registry'); var _lt = core._lt; -if (config.device.isMobile) { - // use the classical KanbanView in mobile - view_registry.add('lunch_kanban', KanbanView); - return; -} - var LunchKanbanView = KanbanView.extend({ config: _.extend({}, KanbanView.prototype.config, { Controller: LunchKanbanController, diff --git a/addons/lunch/static/src/js/lunch_kanban_widget.js b/addons/lunch/static/src/js/lunch_kanban_widget.js index 216c62b482c..2080590acd1 100644 --- a/addons/lunch/static/src/js/lunch_kanban_widget.js +++ b/addons/lunch/static/src/js/lunch_kanban_widget.js @@ -23,17 +23,14 @@ var LunchKanbanWidget = Widget.extend({ field_changed: '_onFieldChanged', }, events: { - 'click .o_add_money': '_onAddMoney', 'click .o_add_product': '_onAddProduct', 'click .o_lunch_widget_order_button': '_onOrderNow', 'click .o_remove_product': '_onRemoveProduct', - 'click .o_lunch_widget_save': '_onSaveOrder', 'click .o_lunch_widget_unlink': '_onUnlinkOrder', 'click .o_lunch_open_wizard': '_onLunchOpenWizard', }, init: function (parent, params) { - var self = this; this._super.apply(this, arguments); this.is_manager = params.is_manager || false; @@ -44,20 +41,6 @@ var LunchKanbanWidget = Widget.extend({ this.group_portal_id = undefined; - self._rpc({ - model: 'ir.model.data', - method: 'xmlid_to_res_id', - kwargs: {xmlid: 'base.group_portal'}, - }).then(function (id) { - self.group_portal_id = id; - }); - - if (this.is_manager) { - this.lunchUserField = this._createMany2One('users', 'res.users', this.username, function () { - return [['groups_id', 'not in', [self.group_portal_id]]]; - }); - } - this.locations = params.locations || []; this.userLocation = params.user_location[1] || ''; @@ -73,6 +56,25 @@ var LunchKanbanWidget = Widget.extend({ this.currency = params.currency || session.get_currency(session.company_currency_id); }, + willStart: function () { + var self = this; + var superDef = this._super.apply(this, arguments); + + var def = this._rpc({ + model: 'ir.model.data', + method: 'xmlid_to_res_id', + kwargs: {xmlid: 'base.group_portal'}, + }).then(function (id) { + self.group_portal_id = id; + + if (self.is_manager) { + self.lunchUserField = self._createMany2One('users', 'res.users', self.username, function () { + return [['groups_id', 'not in', [self.group_portal_id]]]; + }); + } + }); + return Promise.all([superDef, def]); + }, renderElement: function () { this._super.apply(this, arguments); if (this.lunchUserField) { @@ -120,11 +122,6 @@ var LunchKanbanWidget = Widget.extend({ // Handlers //-------------------------------------------------------------------------- - _onAddMoney: function (ev) { - ev.preventDefault(); - ev.stopPropagation(); - this.trigger_up('add_money', {}); - }, _onAddProduct: function (ev) { ev.preventDefault(); ev.stopPropagation(); @@ -159,12 +156,6 @@ var LunchKanbanWidget = Widget.extend({ this.trigger_up('remove_product', {lineId: $(ev.currentTarget).data('id')}); }, - _onSaveOrder: function (ev) { - ev.preventDefault(); - ev.stopPropagation(); - - this.trigger_up('save_order', {}); - }, _onUnlinkOrder: function (ev) { ev.preventDefault(); ev.stopPropagation(); diff --git a/addons/lunch/static/src/js/lunch_payment_dialog.js b/addons/lunch/static/src/js/lunch_payment_dialog.js index 00e49299189..ae624403f12 100644 --- a/addons/lunch/static/src/js/lunch_payment_dialog.js +++ b/addons/lunch/static/src/js/lunch_payment_dialog.js @@ -1,19 +1,15 @@ odoo.define('lunch.LunchPaymentDialog', function (require) { "use strict"; -var core = require('web.core'); var Dialog = require('web.Dialog'); -var qweb = core.qweb; - var LunchPaymentDialog = Dialog.extend({ template: 'lunch.LunchPaymentDialog', init: function (parent, options) { - var self = this; this._super.apply(this, arguments); - options = (options || {}); + options = options || {}; this.message = options.message || ''; }, diff --git a/addons/lunch/static/src/scss/lunch_kanban.scss b/addons/lunch/static/src/scss/lunch_kanban.scss index 7c50ae36358..51acfd2b3f8 100644 --- a/addons/lunch/static/src/scss/lunch_kanban.scss +++ b/addons/lunch/static/src/scss/lunch_kanban.scss @@ -6,6 +6,8 @@ height: 100%; .o_lunch_kanban_banner { flex: 0 0 auto; + border-bottom: 1px solid #CED4DA; + background-color: white; } .o_kanban_view { flex: 1 1 100%; @@ -19,52 +21,47 @@ } .o_lunch_widget { - display: flex; - border-bottom: 1px solid #CED4DA; - background-color: white; min-height: 90px; max-height: 33vh; overflow-y: auto; - .o_lunch_widget_info { - padding: 5px 12px; - margin: 4px 8px; - width: 300px; - flex: 1 1 auto; - overflow-y: auto; - - .o_lunch_ordered { - color: white; - background-color: #F0D970; - padding: 1px 3px; - border-radius: .25em; - } - - .o_lunch_confirmed { - color: white; - background-color: #00BA4E; - padding: 1px 3px; - border-radius: .25em; + .o_lunch_widget_info.card { + &, .card-title, .card-body { + color: $o-main-text-color; + background-color: inherit !important; } - .o_lunch_widget_title { + .card-title { font-weight: bold; - font-size: initial; + margin-bottom: 0; } - .o_lunch_widget_order_button { - display: block; - width: 100%; - margin-bottom: 4px; - margin-top: 12px; + .card-body { + padding: 0.5rem 1rem; } - .o_lunch_open_wizard { - cursor: pointer; - &:hover { - font-weight: bolder; + .btn-link { + padding: 0; + &.o_lunch_open_wizard { + color: $o-main-text-color; + font-weight: normal; } } } } } + +@include media-breakpoint-down(sm) { + .o_lunch_kanban { + details summary { + // Hide the caret. For details see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/summary + list-style-type: none; + &::-webkit-details-marker { + display: none + } + } + .o_lunch_widget { + max-height: 100% + } + } +} diff --git a/addons/lunch/static/src/xml/lunch_kanban.xml b/addons/lunch/static/src/xml/lunch_kanban.xml index 62a2edd2900..3b3b319ce95 100644 --- a/addons/lunch/static/src/xml/lunch_kanban.xml +++ b/addons/lunch/static/src/xml/lunch_kanban.xml @@ -1,84 +1,88 @@ <?xml version="1.0" encoding="UTF-8"?> <templates> - <div t-name="LunchKanbanWidget" class="o_lunch_kanban_banner"> - <div class="o_lunch_widget"> - <div class="o_lunch_widget_info d-flex flex-row"> - <div> - <img class="rounded-circle" t-attf-src="{{ widget.userimage }}"/> - </div> - <div class="w-50 ml-2 py-3"> - <div class="o_lunch_user_field"/> - <div class="o_lunch_location_field"/> - <div class="d-flex flex-row"> - <span class="flex-grow-1">Your Account</span> - <t t-call="currency_field"> - <t t-set="value" t-value="widget.wallet"/> - <t t-set="currency" t-value="widget.currency"/> - </t> + <div t-name="LunchKanbanWidget" class="o_lunch_kanban_banner container-fluid"> + <div class="o_lunch_widget row py-3 py-md-0"> + <div class="o_lunch_widget_info col-12 col-md-4 card border-0"> + <div class="card-body row no-gutters align-items-center"> + <div class="col-3 col-md-6 col-lg-4"> + <img class="rounded-circle" t-attf-src="{{ widget.userimage }}"/> + </div> + <div class="col-9 col-md-6 col-lg-8"> + <div class="pl-3"> + <div class="o_lunch_user_field py-1"/> + <div class="o_lunch_location_field py-1"/> + <div class="d-flex flex-row py-1"> + <span class="flex-grow-1">Your Account</span> + <t t-call="currency_field"> + <t t-set="value" t-value="widget.wallet"/> + <t t-set="currency" t-value="widget.currency"/> + </t> + </div> + </div> </div> </div> </div> - <div class="o_lunch_widget_info"> + <div class="o_lunch_widget_info col-12 col-md-4 card border-0"> <t t-if="!_.isEmpty(widget.lines)"> <t t-if="widget.raw_state == 'ordered'"> - <t t-set="state_class" t-value="'o_lunch_ordered'"/> + <t t-set="state_class" t-value="'badge-warning o_lunch_ordered'"/> </t> <t t-else="widget.raw_state == 'confirmed'"> - <t t-set="state_class" t-value="'o_lunch_confirmed'"/> + <t t-set="state_class" t-value="'badge-success o_lunch_confirmed'"/> </t> - <div class="d-flex flex-row"> - <div class="flex-grow-1"> - <span class="o_lunch_widget_title">Your order</span> - <a href="#"><i t-if="widget.raw_state != 'confirmed'" class="fa fa-trash o_lunch_widget_unlink"/></a> - </div> - <div t-if="widget.raw_state != 'new'" t-esc="widget.state" t-attf-class="flex-grow-0 {{ state_class }}"/> - </div> - <div t-foreach="widget.lines" t-as="line"> - <div class="d-flex flex-row"> - <div class="flex-grow-0"> - <a class="o_remove_product" t-if="widget.raw_state != 'confirmed'" t-attf-data-id="{{ line.id }}" href="#"><i class="fa fa-minus-circle"/></a> - <span t-esc="line.quantity"/> - <a class="o_add_product" t-if="widget.raw_state != 'confirmed'" t-attf-data-id="{{ line.id }}" href="#"><i class="fa fa-plus-circle"/></a> - </div> - <div class="flex-grow-1 pl-2"> - <a t-esc="line.product[1]" class="o_lunch_open_wizard" t-attf-data-product-id="{{ line.product[0] }}" t-attf-data-id="{{ line.id }}"/> - </div> - <div class="flex-grow-0"> - <t t-call="currency_field"> - <t t-set="value" t-value="line.product[2]"/> - <t t-set="currency" t-value="widget.currency"/> - </t> - </div> - </div> - <div t-foreach="line.toppings" t-as="topping" class="d-flex flex-row"> - <div class="flex-grow-1 pl-5"> - <span>+ <t t-esc="topping[0]"/></span> - </div> - <div class="flex-grow-0"> - <t t-call="currency_field"> - <t t-set="value" t-value="topping[1]"/> - <t t-set="currency" t-value="widget.currency"/> - </t> - </div> - </div> - <span t-if="line.note" t-esc="line.note" class="text-muted pl-5"/> + <div class="card-body"> + <h4 class="card-title"> + Your order + <button t-if="widget.raw_state != 'confirmed'" class="btn btn-sm btn-icon btn-link fa fa-trash o_lunch_widget_unlink"/> + <span t-if="widget.raw_state != 'new'" t-esc="widget.state" t-attf-class="badge badge-pill {{ state_class }}"/> + </h4> + <ul class="list-unstyled o_lunch_widget_lines"> + <li t-foreach="widget.lines" t-as="line"> + <div class="d-flex align-items-center"> + <div class="flex-grow-0 flex-shrink-0 o_lunch_product_quantity"> + <button class="btn btn-sm btn-icon btn-link fa fa-minus-circle o_remove_product" t-if="widget.raw_state != 'confirmed'" t-attf-data-id="{{ line.id }}"/> + <span t-esc="line.quantity"/> + <button class="btn btn-sm btn-icon btn-link fa fa-plus-circle o_add_product" t-if="widget.raw_state != 'confirmed'" t-attf-data-id="{{ line.id }}"/> + </div> + <div class="flex-grow-1 pl-2"> + <button t-esc="line.product[1]" class="btn btn-link o_lunch_open_wizard" t-attf-data-product-id="{{ line.product[0] }}" t-attf-data-id="{{ line.id }}"/> + </div> + <div class="flex-grow-0"> + <t t-call="currency_field"> + <t t-set="value" t-value="line.product[2]"/> + <t t-set="currency" t-value="widget.currency"/> + </t> + </div> + </div> + <div t-foreach="line.toppings" t-as="topping" class="d-flex flex-row"> + <div class="flex-grow-1 pl-5"> + <span>+ <t t-esc="topping[0]"/></span> + </div> + <div class="flex-grow-0"> + <t t-call="currency_field"> + <t t-set="value" t-value="topping[1]"/> + <t t-set="currency" t-value="widget.currency"/> + </t> + </div> + </div> + <span t-if="line.note" t-esc="line.note" class="text-muted pl-5"/> + </li> + </ul> </div> </t> </div> - <div class="o_lunch_widget_info"> + <div class="o_lunch_widget_info col-12 col-md-4 card border-0"> <t t-if="!_.isEmpty(widget.lines) && widget.raw_state == 'new'"> - <div class="d-flex flex-row"> - <div class="o_lunch_widget_title flex-grow-1"> - Total - </div> - <div class="flex-grow-0 pr-1"> + <div class="card-body d-flex flex-column justify-content-between"> + <h4 class="card-title d-flex py-1"> + <span class="flex-grow-1">Total</span> <t t-call="currency_field"> <t t-set="value" t-value="widget.total"/> <t t-set="currency" t-value="widget.currency"/> </t> - </div> + </h4> + <button t-if="widget.raw_state == 'new'" class="btn btn-primary w-100 o_lunch_widget_order_button">Order now</button> </div> - <button t-if="widget.raw_state == 'new'" class="btn btn-primary o_lunch_widget_order_button">ORDER NOW</button> </t> </div> </div> @@ -89,7 +93,7 @@ </t> </div> - <t t-name="currency_field"> + <span t-name="currency_field" class="o_field_monetary o_field_number o_field_widget"> <t t-js="ctx"> ctx.value = _.str.sprintf('%.2f', parseFloat(ctx.value)); </t> @@ -104,9 +108,23 @@ <t t-else=""> <t t-esc="value"/> </t> - </t> + </span> <div t-name="lunch.LunchPaymentDialog"> <span t-esc="widget.message"/> </div> + + <t t-name="LunchKanbanWidgetMobile"> + <details class="fixed-bottom" t-attf-open="#{widget.keepOpen}"> + <summary class="o_lunch_toggle_cart btn btn-primary w-100"> + <i class="fa fa-fw fa-shopping-cart"/> + Your cart + (<t t-call="currency_field"> + <t t-set="value" t-value="widget.total"/> + <t t-set="currency" t-value="widget.currency"/> + </t>) + </summary> + <t t-call="LunchKanbanWidget"/> + </details> + </t> </templates> diff --git a/addons/lunch/static/tests/lunch_kanban_mobile_tests.js b/addons/lunch/static/tests/lunch_kanban_mobile_tests.js new file mode 100644 index 00000000000..5b110b3f0b9 --- /dev/null +++ b/addons/lunch/static/tests/lunch_kanban_mobile_tests.js @@ -0,0 +1,208 @@ +odoo.define('lunch.lunchKanbanMobileTests', function (require) { +"use strict"; + +const LunchKanbanView = require('lunch.LunchKanbanView'); + +const testUtils = require('web.test_utils'); +const {createLunchKanbanView, mockLunchRPC} = require('lunch.test_utils'); + +QUnit.module('Views'); + +QUnit.module('LunchKanbanView Mobile', { + beforeEach() { + const PORTAL_GROUP_ID = 1234; + + this.data = { + 'product': { + fields: { + is_available_at: {string: 'Product Availability', type: 'many2one', relation: 'lunch.location'}, + category_id: {string: 'Product Category', type: 'many2one', relation: 'lunch.product.category'}, + supplier_id: {string: 'Vendor', type: 'many2one', relation: 'lunch.supplier'}, + }, + records: [ + {id: 1, name: 'Tuna sandwich', is_available_at: 1}, + ], + }, + 'lunch.order': { + fields: {}, + update_quantity() { + return Promise.resolve(); + }, + }, + 'ir.model.data': { + fields: {}, + xmlid_to_res_id() { + return Promise.resolve(PORTAL_GROUP_ID); + }, + }, + 'lunch.location': { + fields: { + name: {string: 'Name', type: 'char'}, + }, + records: [ + {id: 1, name: "Office 1"}, + {id: 2, name: "Office 2"}, + ], + }, + }; + this.regularInfos = { + user_location: [2, "Office 2"], + }; + }, +}, function () { + QUnit.test('basic rendering', async function (assert) { + assert.expect(9); + + const kanban = await createLunchKanbanView({ + View: LunchKanbanView, + model: 'product', + data: this.data, + arch: ` + <kanban> + <templates> + <t t-name="kanban-box"> + <div><field name="name"/></div> + </t> + </templates> + </kanban> + `, + mockRPC: mockLunchRPC({ + infos: this.regularInfos, + userLocation: this.data['lunch.location'].records[0].id, + }), + }); + + assert.containsOnce(kanban, '.o_kanban_view .o_kanban_record:not(.o_kanban_ghost)', + "should have 1 records in the renderer"); + + // check view layout + assert.containsOnce(kanban, '.o_content > div', + "should have 1 column"); + assert.containsNone(kanban, '.o_content > div.o_search_panel', + "shouldn't have a 'lunch filters' column"); + assert.containsOnce(kanban, '.o_content > .o_lunch_kanban', + "should have a 'kanban lunch wrapper' column"); + assert.containsOnce(kanban, '.o_lunch_kanban > .o_kanban_view', + "should have a 'classical kanban view' column"); + assert.hasClass(kanban.$('.o_kanban_view'), 'o_lunch_kanban_view', + "should have classname 'o_lunch_kanban_view'"); + assert.containsOnce($('.o_lunch_kanban'), '> details', + "should have a 'lunch kanban' details/summary discolure panel"); + assert.hasClass($('.o_lunch_kanban > details'), 'fixed-bottom', + "should have classname 'fixed-bottom'"); + assert.isNotVisible($('.o_lunch_kanban > details .o_lunch_kanban_banner'), + "shouldn't have a visible 'lunch kanban' banner"); + + kanban.destroy(); + }); + + QUnit.module('LunchKanbanWidget', function () { + QUnit.test('toggle', async function (assert) { + assert.expect(6); + + const kanban = await createLunchKanbanView({ + View: LunchKanbanView, + model: 'product', + data: this.data, + arch: ` + <kanban> + <templates> + <t t-name="kanban-box"> + <div><field name="name"/></div> + </t> + </templates> + </kanban> + `, + mockRPC: mockLunchRPC({ + infos: Object.assign({}, this.regularInfos, { + total: "3.00", + }), + userLocation: this.data['lunch.location'].records[0].id, + }), + }); + + const $details = $('.o_lunch_kanban > details'); + assert.isNotVisible($details.find('.o_lunch_kanban_banner'), + "shouldn't have a visible 'lunch kanban' banner"); + assert.isVisible($details.find('> summary'), + "should hava a visible cart toggle button"); + assert.containsOnce($details, '> summary:contains(Your cart)', + "should have 'Your cart' in the button text"); + assert.containsOnce($details, '> summary:contains(3.00)', + "should have '3.00' in the button text"); + + await testUtils.dom.click($details.find('> summary')); + assert.isVisible($details.find('.o_lunch_kanban_banner'), + "should have a visible 'lunch kanban' banner"); + + await testUtils.dom.click($details.find('> summary')); + assert.isNotVisible($details.find('.o_lunch_kanban_banner'), + "shouldn't have a visible 'lunch kanban' banner"); + + kanban.destroy(); + }); + + QUnit.test('keep open when adding quantities', async function (assert) { + assert.expect(6); + + const kanban = await createLunchKanbanView({ + View: LunchKanbanView, + model: 'product', + data: this.data, + arch: ` + <kanban> + <templates> + <t t-name="kanban-box"> + <div><field name="name"/></div> + </t> + </templates> + </kanban> + `, + mockRPC: mockLunchRPC({ + infos: Object.assign({}, this.regularInfos, { + lines: [ + { + id: 6, + product: [1, "Tuna sandwich", "3.00"], + toppings: [], + quantity: 1.0, + }, + ], + }), + userLocation: this.data['lunch.location'].records[0].id, + }), + }); + + const $details = $('.o_lunch_kanban > details'); + assert.isNotVisible($details.find('.o_lunch_kanban_banner'), + "shouldn't have a visible 'lunch kanban' banner"); + assert.isVisible($details.find('> summary'), + "should hava a visible cart toggle button"); + + await testUtils.dom.click($details.find('> summary')); + assert.isVisible($details.find('.o_lunch_kanban_banner'), + "should have a visible 'lunch kanban' banner"); + + const $widgetSecondColumn = kanban.$('.o_lunch_widget .o_lunch_widget_info:eq(1)'); + + assert.containsOnce($widgetSecondColumn, '.o_lunch_widget_lines > li', + "should have 1 order line"); + + let $firstLine = $widgetSecondColumn.find('.o_lunch_widget_lines > li:first'); + + await testUtils.dom.click($firstLine.find('button.o_add_product')); + assert.isVisible($('.o_lunch_kanban > details .o_lunch_kanban_banner'), + "add quantity should keep 'lunch kanban' banner open"); + + $firstLine = kanban.$('.o_lunch_widget .o_lunch_widget_info:eq(1) .o_lunch_widget_lines > li:first'); + + await testUtils.dom.click($firstLine.find('button.o_remove_product')); + assert.isVisible($('.o_lunch_kanban > details .o_lunch_kanban_banner'), + "remove quantity should keep 'lunch kanban' banner open"); + + kanban.destroy(); + }); + }); +}); + +}); diff --git a/addons/lunch/static/tests/lunch_kanban_tests.js b/addons/lunch/static/tests/lunch_kanban_tests.js new file mode 100644 index 00000000000..32cac593dcc --- /dev/null +++ b/addons/lunch/static/tests/lunch_kanban_tests.js @@ -0,0 +1,821 @@ +odoo.define('lunch.lunchKanbanTests', function (require) { +"use strict"; + +const LunchKanbanView = require('lunch.LunchKanbanView'); + +const testUtils = require('web.test_utils'); +const {createLunchKanbanView, mockLunchRPC} = require('lunch.test_utils'); + +QUnit.module('Views'); + +QUnit.module('LunchKanbanView', { + beforeEach() { + const PORTAL_GROUP_ID = 1234; + + this.data = { + 'product': { + fields: { + is_available_at: {string: 'Product Availability', type: 'many2one', relation: 'lunch.location'}, + category_id: {string: 'Product Category', type: 'many2one', relation: 'lunch.product.category'}, + supplier_id: {string: 'Vendor', type: 'many2one', relation: 'lunch.supplier'}, + }, + records: [ + {id: 1, name: 'Tuna sandwich', is_available_at: 1}, + ], + }, + 'lunch.order': { + fields: {}, + update_quantity() { + return Promise.resolve(); + }, + }, + 'lunch.product.category': { + fields: {}, + records: [], + }, + 'lunch.supplier': { + fields: {}, + records: [], + }, + 'ir.model.data': { + fields: {}, + xmlid_to_res_id() { + return Promise.resolve(PORTAL_GROUP_ID); + }, + }, + 'lunch.location': { + fields: { + name: {string: 'Name', type: 'char'}, + }, + records: [ + {id: 1, name: "Office 1"}, + {id: 2, name: "Office 2"}, + ], + }, + 'res.users': { + fields: { + name: {string: 'Name', type: 'char'}, + groups_id: {string: 'Groups', type: 'many2many'}, + }, + records: [ + {id: 1, name: "Mitchell Admin", groups_id: []}, + {id: 2, name: "Marc Demo", groups_id: []}, + {id: 3, name: "Jean-Luc Portal", groups_id: [PORTAL_GROUP_ID]}, + ], + }, + }; + this.regularInfos = { + username: "Marc Demo", + wallet: 36.5, + is_manager: false, + currency: { + symbol: "\u20ac", + position: "after" + }, + user_location: [2, "Office 2"], + }; + this.managerInfos = { + username: "Mitchell Admin", + wallet: 47.6, + is_manager: true, + currency: { + symbol: "\u20ac", + position: "after" + }, + user_location: [2, "Office 2"], + }; + }, +}, function () { + QUnit.test('basic rendering', async function (assert) { + assert.expect(7); + + const kanban = await createLunchKanbanView({ + View: LunchKanbanView, + model: 'product', + data: this.data, + arch: ` + <kanban> + <templates> + <t t-name="kanban-box"> + <div><field name="name"/></div> + </t> + </templates> + </kanban> + `, + mockRPC: mockLunchRPC({ + infos: this.regularInfos, + userLocation: this.data['lunch.location'].records[0].id, + }), + }); + + assert.containsOnce(kanban, '.o_kanban_view .o_kanban_record:not(.o_kanban_ghost)', + "should have 1 records in the renderer"); + + // check view layout + assert.containsN(kanban, '.o_content > div', 2, + "should have 2 columns"); + assert.containsOnce(kanban, '.o_content > div.o_search_panel', + "should have a 'lunch filters' column"); + assert.containsOnce(kanban, '.o_content > .o_lunch_kanban', + "should have a 'kanban lunch wrapper' column"); + assert.containsOnce(kanban, '.o_lunch_kanban > .o_kanban_view', + "should have a 'classical kanban view' column"); + assert.hasClass(kanban.$('.o_kanban_view'), 'o_lunch_kanban_view', + "should have classname 'o_lunch_kanban_view'"); + assert.containsOnce(kanban, '.o_lunch_kanban > .o_lunch_kanban_banner', + "should have a 'lunch kanban' banner"); + + kanban.destroy(); + }); + + QUnit.module('LunchKanbanWidget', function () { + + QUnit.test('empty cart', async function (assert) { + assert.expect(3); + + const kanban = await createLunchKanbanView({ + View: LunchKanbanView, + model: 'product', + data: this.data, + arch: ` + <kanban> + <templates> + <t t-name="kanban-box"> + <div><field name="name"/></div> + </t> + </templates> + </kanban> + `, + mockRPC: mockLunchRPC({ + infos: this.regularInfos, + userLocation: this.data['lunch.location'].records[0].id, + }), + }); + + const $kanbanWidget = kanban.$('.o_lunch_widget'); + + assert.containsN($kanbanWidget, '> .o_lunch_widget_info', 3, + "should have 3 columns"); + assert.isVisible($kanbanWidget.find('> .o_lunch_widget_info:first'), + "should have the first column visible"); + assert.strictEqual($kanbanWidget.find('> .o_lunch_widget_info:not(:first)').html().trim(), "", + "all columns but the first should be empty"); + + kanban.destroy(); + }); + + QUnit.test('non-empty cart', async function (assert) { + assert.expect(17); + + const kanban = await createLunchKanbanView({ + View: LunchKanbanView, + model: 'product', + data: this.data, + arch: ` + <kanban> + <templates> + <t t-name="kanban-box"> + <div><field name="name"/></div> + </t> + </templates> + </kanban> + `, + mockRPC: mockLunchRPC({ + infos: Object.assign({}, this.regularInfos, { + total: "3.00", + lines: [ + { + product: [1, "Tuna sandwich", "3.00"], + toppings: [], + quantity: 1.0, + }, + ], + }), + userLocation: this.data['lunch.location'].records[0].id, + }), + }); + + const $kanbanWidget = kanban.$('.o_lunch_widget'); + + assert.containsN($kanbanWidget, '> .o_lunch_widget_info', 3, + "should have 3 columns"); + + assert.containsOnce($kanbanWidget, '.o_lunch_widget_info:eq(1)', + "should have a second column"); + + const $widgetSecondColumn = $kanbanWidget.find('.o_lunch_widget_info:eq(1)'); + + assert.containsOnce($widgetSecondColumn, '.o_lunch_widget_unlink', + "should have a button to clear the order"); + + assert.containsOnce($widgetSecondColumn, '.o_lunch_widget_lines > li', + "should have 1 order line"); + + const $firstLine = $widgetSecondColumn.find('.o_lunch_widget_lines > li:first'); + assert.containsOnce($firstLine, 'button.o_remove_product', + "should have a button to remove a product quantity on each line"); + assert.containsOnce($firstLine, 'button.o_add_product', + "should have a button to add a product quantity on each line"); + assert.containsOnce($firstLine, '.o_lunch_product_quantity > :eq(1)', + "should have the line's quantity"); + assert.strictEqual($firstLine.find('.o_lunch_product_quantity > :eq(1)').text().trim(), "1", + "should have 1 as the line's quantity"); + assert.containsOnce($firstLine, '.o_lunch_open_wizard', + "should have the line's product name to open the wizard"); + assert.strictEqual($firstLine.find('.o_lunch_open_wizard').text().trim(), "Tuna sandwich", + "should have 'Tuna sandwich' as the line's product name"); + assert.containsOnce($firstLine, '.o_field_monetary', + "should have the line's amount"); + assert.strictEqual($firstLine.find('.o_field_monetary').text().trim(), "3.00€", + "should have '3.00€' as the line's amount"); + + assert.containsOnce($kanbanWidget, '.o_lunch_widget_info:eq(2)', + "should have a third column"); + + const $widgetThirdColumn = kanban.$('.o_lunch_widget .o_lunch_widget_info:eq(2)'); + + assert.containsOnce($widgetThirdColumn, '.o_field_monetary', + "should have an account balance"); + assert.strictEqual($widgetThirdColumn.find('.o_field_monetary').text().trim(), "3.00€", + "should have '3.00€' in the account balance"); + assert.containsOnce($widgetThirdColumn, '.o_lunch_widget_order_button', + "should have a button to validate the order"); + assert.strictEqual($widgetThirdColumn.find('.o_lunch_widget_order_button').text().trim(), "Order now", + "should have 'Order now' as the validate order button text"); + + kanban.destroy(); + }); + + QUnit.test('ordered cart', async function (assert) { + assert.expect(15); + + const kanban = await createLunchKanbanView({ + View: LunchKanbanView, + model: 'product', + data: this.data, + arch: ` + <kanban> + <templates> + <t t-name="kanban-box"> + <div><field name="name"/></div> + </t> + </templates> + </kanban> + `, + mockRPC: mockLunchRPC({ + infos: Object.assign({}, this.regularInfos, { + raw_state: "ordered", + state: "Ordered", + lines: [ + { + product: [1, "Tuna sandwich", "3.00"], + toppings: [], + quantity: 1.0, + }, + ], + }), + userLocation: this.data['lunch.location'].records[0].id, + }), + }); + + const $kanbanWidget = kanban.$('.o_lunch_widget'); + + assert.containsN($kanbanWidget, '> .o_lunch_widget_info', 3, + "should have 3 columns"); + + assert.containsOnce($kanbanWidget, '.o_lunch_widget_info:eq(1)', + "should have a second column"); + + const $widgetSecondColumn = $kanbanWidget.find('.o_lunch_widget_info:eq(1)'); + + assert.containsOnce($widgetSecondColumn, '.o_lunch_widget_unlink', + "should have a button to clear the order"); + assert.containsOnce($widgetSecondColumn, '.badge.badge-warning.o_lunch_ordered', + "should have an ordered state badge"); + assert.strictEqual($widgetSecondColumn.find('.o_lunch_ordered').text().trim(), "Ordered", + "should have 'Ordered' in the state badge"); + + assert.containsOnce($widgetSecondColumn, '.o_lunch_widget_lines > li', + "should have 1 order line"); + + const $firstLine = $widgetSecondColumn.find('.o_lunch_widget_lines > li:first'); + assert.containsOnce($firstLine, 'button.o_remove_product', + "should have a button to remove a product quantity on each line"); + assert.containsOnce($firstLine, 'button.o_add_product', + "should have a button to add a product quantity on each line"); + assert.containsOnce($firstLine, '.o_lunch_product_quantity > :eq(1)', + "should have the line's quantity"); + assert.strictEqual($firstLine.find('.o_lunch_product_quantity > :eq(1)').text().trim(), "1", + "should have 1 as the line's quantity"); + assert.containsOnce($firstLine, '.o_lunch_open_wizard', + "should have the line's product name to open the wizard"); + assert.strictEqual($firstLine.find('.o_lunch_open_wizard').text().trim(), "Tuna sandwich", + "should have 'Tuna sandwich' as the line's product name"); + assert.containsOnce($firstLine, '.o_field_monetary', + "should have the line's amount"); + assert.strictEqual($firstLine.find('.o_field_monetary').text().trim(), "3.00€", + "should have '3.00€' as the line's amount"); + + assert.strictEqual($kanbanWidget.find('> .o_lunch_widget_info:eq(2)').html().trim(), "", + "third column should be empty"); + + kanban.destroy(); + }); + + QUnit.test('confirmed cart', async function (assert) { + assert.expect(15); + + const kanban = await createLunchKanbanView({ + View: LunchKanbanView, + model: 'product', + data: this.data, + arch: ` + <kanban> + <templates> + <t t-name="kanban-box"> + <div><field name="name"/></div> + </t> + </templates> + </kanban> + `, + mockRPC: mockLunchRPC({ + infos: Object.assign({}, this.regularInfos, { + raw_state: "confirmed", + state: "Received", + lines: [ + { + product: [1, "Tuna sandwich", "3.00"], + toppings: [], + quantity: 1.0, + }, + ], + }), + userLocation: this.data['lunch.location'].records[0].id, + }), + }); + + const $kanbanWidget = kanban.$('.o_lunch_widget'); + + assert.containsN($kanbanWidget, '> .o_lunch_widget_info', 3, + "should have 3 columns"); + + assert.containsOnce($kanbanWidget, '.o_lunch_widget_info:eq(1)', + "should have a second column"); + + const $widgetSecondColumn = $kanbanWidget.find('.o_lunch_widget_info:eq(1)'); + + assert.containsNone($widgetSecondColumn, '.o_lunch_widget_unlink', + "shouldn't have a button to clear the order"); + assert.containsOnce($widgetSecondColumn, '.badge.badge-success.o_lunch_confirmed', + "should have a confirmed state badge"); + assert.strictEqual($widgetSecondColumn.find('.o_lunch_confirmed').text().trim(), "Received", + "should have 'Received' in the state badge"); + + assert.containsOnce($widgetSecondColumn, '.o_lunch_widget_lines > li', + "should have 1 order line"); + + const $firstLine = $widgetSecondColumn.find('.o_lunch_widget_lines > li:first'); + assert.containsNone($firstLine, 'button.o_remove_product', + "shouldn't have a button to remove a product quantity on each line"); + assert.containsNone($firstLine, 'button.o_add_product', + "shouldn't have a button to add a product quantity on each line"); + assert.containsOnce($firstLine, '.o_lunch_product_quantity', + "should have the line's quantity"); + assert.strictEqual($firstLine.find('.o_lunch_product_quantity').text().trim(), "1", + "should have 1 as the line's quantity"); + assert.containsOnce($firstLine, '.o_lunch_open_wizard', + "should have the line's product name to open the wizard"); + assert.strictEqual($firstLine.find('.o_lunch_open_wizard').text().trim(), "Tuna sandwich", + "should have 'Tuna sandwich' as the line's product name"); + assert.containsOnce($firstLine, '.o_field_monetary', + "should have the line's amount"); + assert.strictEqual($firstLine.find('.o_field_monetary').text().trim(), "3.00€", + "should have '3.00€' as the line's amount"); + + assert.strictEqual($kanbanWidget.find('> .o_lunch_widget_info:eq(2)').html().trim(), "", + "third column should be empty"); + + kanban.destroy(); + }); + + QUnit.test('regular user', async function (assert) { + assert.expect(11); + + const kanban = await createLunchKanbanView({ + View: LunchKanbanView, + model: 'product', + data: this.data, + arch: ` + <kanban> + <templates> + <t t-name="kanban-box"> + <div><field name="name"/></div> + </t> + </templates> + </kanban> + `, + mockRPC: mockLunchRPC({ + infos: this.regularInfos, + userLocation: this.data['lunch.location'].records[0].id, + }), + }); + + const $kanbanWidget = kanban.$('.o_lunch_widget'); + + assert.containsOnce($kanbanWidget, '.o_lunch_widget_info:first', + "should have a first column"); + + const $widgetFirstColumn = $kanbanWidget.find('.o_lunch_widget_info:first'); + + assert.containsOnce($widgetFirstColumn, 'img.rounded-circle', + "should have a rounded avatar image"); + + assert.containsOnce($widgetFirstColumn, '.o_lunch_user_field', + "should have a user field"); + assert.containsNone($widgetFirstColumn, '.o_lunch_user_field > .o_field_widget', + "shouldn't have a field widget in the user field"); + assert.strictEqual($widgetFirstColumn.find('.o_lunch_user_field').text().trim(), "Marc Demo", + "should have 'Marc Demo' in the user field"); + + assert.containsOnce($widgetFirstColumn, '.o_lunch_location_field', + "should have a location field"); + assert.containsOnce($widgetFirstColumn, '.o_lunch_location_field > .o_field_many2one[name="locations"]', + "should have a many2one in the location field"); + + await testUtils.fields.many2one.clickOpenDropdown('locations'); + const $input = $widgetFirstColumn.find('.o_field_many2one[name="locations"] input'); + assert.containsN($input.autocomplete('widget'), 'li', 2, + "autocomplete dropdown should have 2 entries"); + assert.strictEqual($input.val(), "Office 2", + "locations input should have 'Office 2' as value"); + + assert.containsOnce($widgetFirstColumn, '.o_lunch_location_field + div', + "should have an account balance"); + assert.strictEqual($widgetFirstColumn.find('.o_lunch_location_field + div .o_field_monetary').text().trim(), "36.50€", + "should have '36.50€' in the account balance"); + + kanban.destroy(); + }); + + QUnit.test('manager user', async function (assert) { + assert.expect(12); + + const kanban = await createLunchKanbanView({ + View: LunchKanbanView, + model: 'product', + data: this.data, + arch: ` + <kanban> + <templates> + <t t-name="kanban-box"> + <div><field name="name"/></div> + </t> + </templates> + </kanban> + `, + mockRPC: mockLunchRPC({ + infos: this.managerInfos, + userLocation: this.data['lunch.location'].records[0].id, + }), + }); + + const $kanbanWidget = kanban.$('.o_lunch_widget'); + + assert.containsOnce($kanbanWidget, '.o_lunch_widget_info:first', + "should have a first column"); + + const $widgetFirstColumn = $kanbanWidget.find('.o_lunch_widget_info:first'); + + assert.containsOnce($widgetFirstColumn, 'img.rounded-circle', + "should have a rounded avatar image"); + + assert.containsOnce($widgetFirstColumn, '.o_lunch_user_field', + "should have a user field"); + assert.containsOnce($widgetFirstColumn, '.o_lunch_user_field > .o_field_many2one[name="users"]', + "shouldn't have a field widget in the user field"); + + await testUtils.fields.many2one.clickOpenDropdown('users'); + const $userInput = $widgetFirstColumn.find('.o_field_many2one[name="users"] input'); + assert.containsN($userInput.autocomplete('widget'), 'li', 2, + "users autocomplete dropdown should have 2 entries"); + assert.strictEqual($userInput.val(), "Mitchell Admin", + "should have 'Mitchell Admin' as value in user field"); + + assert.containsOnce($widgetFirstColumn, '.o_lunch_location_field', + "should have a location field"); + assert.containsOnce($widgetFirstColumn, '.o_lunch_location_field > .o_field_many2one[name="locations"]', + "should have a many2one in the location field"); + + await testUtils.fields.many2one.clickOpenDropdown('locations'); + const $locationInput = $widgetFirstColumn.find('.o_field_many2one[name="locations"] input'); + assert.containsN($locationInput.autocomplete('widget'), 'li', 2, + "locations autocomplete dropdown should have 2 entries"); + assert.strictEqual($locationInput.val(), "Office 2", + "should have 'Office 2' as value"); + + assert.containsOnce($widgetFirstColumn, '.o_lunch_location_field + div', + "should have an account balance"); + assert.strictEqual($widgetFirstColumn.find('.o_lunch_location_field + div .o_field_monetary').text().trim(), "47.60€", + "should have '47.60€' in the account balance"); + + kanban.destroy(); + }); + + QUnit.test('add a product', async function (assert) { + assert.expect(1); + + const kanban = await createLunchKanbanView({ + View: LunchKanbanView, + model: 'product', + data: this.data, + arch: ` + <kanban> + <templates> + <t t-name="kanban-box"> + <div><field name="name"/></div> + </t> + </templates> + </kanban> + `, + mockRPC: mockLunchRPC({ + infos: this.regularInfos, + userLocation: this.data['lunch.location'].records[0].id, + }), + intercepts: { + do_action: function (ev) { + assert.deepEqual(ev.data.action, { + res_model: 'lunch.order.temp', + type: 'ir.actions.act_window', + views: [[false, 'form']], + target: 'new', + context: { + default_product_id: undefined, + line_id: false, + }, + }, + "should open the wizard"); + }, + }, + }); + + await testUtils.dom.click(kanban.$('.o_kanban_record:first')); + + kanban.destroy(); + }); + + QUnit.test('add product quantity', async function (assert) { + assert.expect(3); + + const kanban = await createLunchKanbanView({ + View: LunchKanbanView, + model: 'product', + data: Object.assign({}, this.data, { + 'lunch.order': { + fields: {}, + update_quantity([lineIds, increment]) { + assert.deepEqual(lineIds, [6], "should have [6] as lineId to update quantity"); + assert.strictEqual(increment, 1, "should have +1 as increment to update quantity"); + return Promise.resolve(); + }, + }, + }), + arch: ` + <kanban> + <templates> + <t t-name="kanban-box"> + <div><field name="name"/></div> + </t> + </templates> + </kanban> + `, + mockRPC: mockLunchRPC({ + infos: Object.assign({}, this.regularInfos, { + lines: [ + { + id: 6, + product: [1, "Tuna sandwich", "3.00"], + toppings: [], + quantity: 1.0, + }, + ], + }), + userLocation: this.data['lunch.location'].records[0].id, + }), + }); + + const $widgetSecondColumn = kanban.$('.o_lunch_widget .o_lunch_widget_info:eq(1)'); + + assert.containsOnce($widgetSecondColumn, '.o_lunch_widget_lines > li', + "should have 1 order line"); + + const $firstLine = $widgetSecondColumn.find('.o_lunch_widget_lines > li:first'); + + await testUtils.dom.click($firstLine.find('button.o_add_product')); + + kanban.destroy(); + }); + + QUnit.test('remove product quantity', async function (assert) { + assert.expect(3); + + const kanban = await createLunchKanbanView({ + View: LunchKanbanView, + model: 'product', + data: Object.assign({}, this.data, { + 'lunch.order': { + fields: {}, + update_quantity([lineIds, increment]) { + assert.deepEqual(lineIds, [6], "should have [6] as lineId to update quantity"); + assert.strictEqual(increment, -1, "should have -1 as increment to update quantity"); + return Promise.resolve(); + }, + }, + }), + arch: ` + <kanban> + <templates> + <t t-name="kanban-box"> + <div><field name="name"/></div> + </t> + </templates> + </kanban> + `, + mockRPC: mockLunchRPC({ + infos: Object.assign({}, this.regularInfos, { + lines: [ + { + id: 6, + product: [1, "Tuna sandwich", "3.00"], + toppings: [], + quantity: 1.0, + }, + ], + }), + userLocation: this.data['lunch.location'].records[0].id, + }), + }); + + const $widgetSecondColumn = kanban.$('.o_lunch_widget .o_lunch_widget_info:eq(1)'); + + assert.containsOnce($widgetSecondColumn, '.o_lunch_widget_lines > li', + "should have 1 order line"); + + const $firstLine = $widgetSecondColumn.find('.o_lunch_widget_lines > li:first'); + + await testUtils.dom.click($firstLine.find('button.o_remove_product')); + + kanban.destroy(); + }); + + QUnit.test('clear order', async function (assert) { + assert.expect(1); + + const self = this; + const kanban = await createLunchKanbanView({ + View: LunchKanbanView, + model: 'product', + data: this.data, + arch: ` + <kanban> + <templates> + <t t-name="kanban-box"> + <div><field name="name"/></div> + </t> + </templates> + </kanban> + `, + mockRPC: function (route) { + if (route.startsWith('/lunch')) { + if (route === '/lunch/trash') { + assert.ok('should perform clear order RPC call'); + return Promise.resolve(); + } + return mockLunchRPC({ + infos: Object.assign({}, self.regularInfos, { + lines: [ + { + product: [1, "Tuna sandwich", "3.00"], + toppings: [], + }, + ], + }), + userLocation: self.data['lunch.location'].records[0].id, + }).apply(this, arguments); + } + return this._super.apply(this, arguments); + }, + }); + + const $widgetSecondColumn = kanban.$('.o_lunch_widget .o_lunch_widget_info:eq(1)'); + + await testUtils.dom.click($widgetSecondColumn.find('button.o_lunch_widget_unlink')); + + kanban.destroy(); + }); + + QUnit.test('validate order: success', async function (assert) { + assert.expect(1); + + const self = this; + const kanban = await createLunchKanbanView({ + View: LunchKanbanView, + model: 'product', + data: this.data, + arch: ` + <kanban> + <templates> + <t t-name="kanban-box"> + <div><field name="name"/></div> + </t> + </templates> + </kanban> + `, + mockRPC: function (route) { + if (route.startsWith('/lunch')) { + if (route === '/lunch/pay') { + assert.ok("should perform pay order RPC call"); + return Promise.resolve(true); + } + return mockLunchRPC({ + infos: Object.assign({}, self.regularInfos, { + lines: [ + { + product: [1, "Tuna sandwich", "3.00"], + toppings: [], + }, + ], + }), + userLocation: self.data['lunch.location'].records[0].id, + }).apply(this, arguments); + } + return this._super.apply(this, arguments); + }, + }); + + const $widgetThirdColumn = kanban.$('.o_lunch_widget .o_lunch_widget_info:eq(2)'); + + await testUtils.dom.click($widgetThirdColumn.find('button.o_lunch_widget_order_button')); + + kanban.destroy(); + }); + + QUnit.test('validate order: failure', async function (assert) { + assert.expect(5); + + const self = this; + const kanban = await createLunchKanbanView({ + View: LunchKanbanView, + model: 'product', + data: this.data, + arch: ` + <kanban> + <templates> + <t t-name="kanban-box"> + <div><field name="name"/></div> + </t> + </templates> + </kanban> + `, + mockRPC: function (route) { + if (route.startsWith('/lunch')) { + if (route === '/lunch/pay') { + assert.ok('should perform pay order RPC call'); + return Promise.resolve(false); + } + if (route === '/lunch/payment_message') { + assert.ok('should perform payment message RPC call'); + return Promise.resolve({ message: 'This is a payment message.'}); + } + return mockLunchRPC({ + infos: Object.assign({}, self.regularInfos, { + lines: [ + { + product: [1, "Tuna sandwich", "3.00"], + toppings: [], + }, + ], + }), + userLocation: self.data['lunch.location'].records[0].id, + }).apply(this, arguments); + } + return this._super.apply(this, arguments); + }, + }); + + const $widgetThirdColumn = kanban.$('.o_lunch_widget .o_lunch_widget_info:eq(2)'); + + await testUtils.dom.click($widgetThirdColumn.find('button.o_lunch_widget_order_button')); + + assert.containsOnce(document.body, '.modal', "should open a Dialog box"); + assert.strictEqual($('.modal-title').text().trim(), + "Not enough money in your wallet", "should have a Dialog's title"); + assert.strictEqual($('.modal-body').text().trim(), + "This is a payment message.", "should have a Dialog's message"); + + kanban.destroy(); + }); + + }); +}); + +}); diff --git a/addons/lunch/static/tests/lunch_test_utils.js b/addons/lunch/static/tests/lunch_test_utils.js new file mode 100644 index 00000000000..a69fadf2b3b --- /dev/null +++ b/addons/lunch/static/tests/lunch_test_utils.js @@ -0,0 +1,58 @@ +odoo.define('lunch.test_utils', function (require) { +"use strict"; + +const AbstractStorageService = require('web.AbstractStorageService'); +const RamStorage = require('web.RamStorage'); +const {createView} = require('web.test_utils'); + +/** + * Helper to create a lunch kanban view with searchpanel + * + * @param {object} params + */ +async function createLunchKanbanView(params) { + const archPieces = params.arch.split('</templates>'); + params.arch = ` + ${archPieces[0]}</templates> + <searchpanel> + <field name="category_id" select="multi" string="Categories"/> + <field name="supplier_id" select="multi" string="Vendors"/> + </searchpanel> + ${archPieces[1]} + `; + if (!params.services || !params.services.local_storage) { + // the searchPanel uses the localStorage to store/retrieve default + // active category value + params.services = params.services || {}; + const RamStorageService = AbstractStorageService.extend({ + storage: new RamStorage(), + }); + params.services.local_storage = RamStorageService; + } + return createView(params); +} + +/** + * Helper to generate a mockRPC function for the mandatory lunch routes (prefixed by '/lunch') + * + * @param {object} infos + * @param {integer} userLocation + */ +function mockLunchRPC({infos, userLocation}) { + return async function (route) { + if (route === '/lunch/infos') { + return Promise.resolve(infos); + } + if (route === '/lunch/user_location_get') { + return Promise.resolve(userLocation); + } + return this._super.apply(this, arguments); + }; +} + +return { + createLunchKanbanView, + mockLunchRPC, +}; + +}); diff --git a/addons/lunch/static/tests/test_lunch_kanban.js b/addons/lunch/static/tests/test_lunch_kanban.js deleted file mode 100644 index ef22057d3b2..00000000000 --- a/addons/lunch/static/tests/test_lunch_kanban.js +++ /dev/null @@ -1,223 +0,0 @@ -odoo.define('lunch.lunchKanbanTests', function (require) { -"use strict"; - -var LunchKanbanView = require('lunch.LunchKanbanView'); -var testUtils = require('web.test_utils'); - -var createView = testUtils.createView; - -QUnit.module('Views', { - beforeEach: function () { - this.data = { - product: { - fields: { - id: {string: 'ID', type: 'integer'}, - is_available_at: {string: 'available_location_ids', type: 'integer'}, - }, - records: [ - {id: 1, name: 'Tuna sandwich', price: 3.0, is_available_at: 1}, - ] - }, - }; - }, -}, function () { - QUnit.module('LunchKanbanView'); - - QUnit.test('Simple rendering of LunchKanbanView', async function (assert) { - assert.expect(7); - - var lunchKanban = await createView({ - View: LunchKanbanView, - model: 'product', - data: this.data, - arch: '<kanban><templates><t t-name="kanban-box">' + - '<div>' + - '</div>' + - '</t></templates></kanban>', - mockRPC: function(route, args) { - if (route === '/lunch/infos') { - return Promise.resolve({ - order: 1, - wallet: 20, - username: 'Marc Demo', - userimage: '', - is_manager: false, - users: [ - {id: 1, name: 'Mitchell Admin'}, - {id: 2, name: 'Marc Demo'}, - ], - total: 7.4, - state: 'new', - lines: [ - {id: 1, product: ['Pizza Italiana', 7.4], toppings: [], quantity: 1.0, price: 7.4} - ], - alerts: [], - locations: ['hello', 'hallo'], - user_location: [1, 'hello'], - }); - } else if (route === '/lunch/user_location_get') { - return Promise.resolve(1); - } else if (route === '/web/dataset/call_kw/ir.model.data/xmlid_to_res_id') { - return Promise.resolve(); - } else if (route.startsWith('data:image/png;base64,')) { - return Promise.resolve(); - } - return this._super(route, args); - }, - }); - - var $section = $(lunchKanban.$('.o_lunch_widget_info')[0]); - // username - assert.strictEqual($section.find('div:eq(1) div:eq(0)').text().trim(), 'Marc Demo', 'Username should have been Marc Demo'); - // your order section - $section = $(lunchKanban.$('.o_lunch_widget_info')[1]); - // only one line - assert.strictEqual($section.find('div:eq(2) div.d-flex').length, 1, 'There should be only one line'); - // quantity = 1 - assert.strictEqual($section.find('div:eq(2) div:eq(0) span:eq(0)').text().trim(), '1', 'The line should contain only one product'); - // buttons to remove and to add product - assert.strictEqual($section.find('.o_remove_product').length, 1, 'There should be a remove product button'); - assert.strictEqual($section.find('.o_add_product').length, 1, 'There should be a add product button'); - - $section = $(lunchKanban.$('.o_lunch_widget_info')[2]); - // total - assert.strictEqual($section.find('div:eq(0) div:eq(1)').text().trim(), '7.40', 'total should be of 7.40'); - // order now button - assert.strictEqual($section.find('button').length, 1, 'order now button should be available'); - - lunchKanban.destroy(); - }); - - QUnit.test('User interactions', async function (assert) { - assert.expect(9); - - var state = 'new'; - - var lunchKanban = await createView({ - View: LunchKanbanView, - model: 'product', - data: this.data, - arch: '<kanban><templates><t t-name="kanban-box">' + - '<div>' + - '</div>' + - '</t></templates></kanban>', - mockRPC: function(route, args) { - if (route === '/lunch/infos') { - return Promise.resolve({ - order: 1, - wallet: 20, - username: 'Marc Demo', - userimage: '', - is_manager: false, - users: [ - {id: 1, name: 'Mitchell Admin'}, - {id: 2, name: 'Marc Demo'}, - ], - total: 7.4, - raw_state: state, - state: 'New', - lines: [ - {id: 1, product: ['Pizza Italiana', 7.4], toppings: [], quantity: 1.0, price: 7.4} - ], - alerts: [], - locations: ['hello', 'hallo'], - user_location: [1, 'hello'], - }); - } else if (route === '/lunch/payment_message') { - return Promise.resolve({message: 'Hello'}); - } else if (route === '/lunch/pay') { - return Promise.resolve(true); - } else if (route === '/lunch/user_location_get') { - return Promise.resolve(1); - } else if (args.method === 'update_quantity') { - assert.step(JSON.stringify(args.args)); - return Promise.resolve(); - } else if (route === '/web/dataset/call_kw/ir.model.data/xmlid_to_res_id') { - return Promise.resolve(); - } else if (route.startsWith('data:image/png;base64,')) { - return Promise.resolve(); - } - return this._super(route, args); - }, - }); - - await testUtils.dom.click(lunchKanban.$('.o_add_product')); - await testUtils.dom.click(lunchKanban.$('.o_remove_product')); - - state = 'ordered'; - await testUtils.dom.click(lunchKanban.$('.o_lunch_widget_order_button')); - // state is shown - assert.strictEqual(lunchKanban.$('.o_lunch_ordered').length, 1, 'state should be shown as ordered'); - // buttons - assert.strictEqual(lunchKanban.$('.o_remove_product').length, 1, 'button to remove product should be shown'); - assert.strictEqual(lunchKanban.$('.o_add_product').length, 1, 'button to add product should be shown'); - state = 'confirmed'; - await lunchKanban.reload(); - // state is updated - assert.strictEqual(lunchKanban.$('.o_lunch_confirmed').length, 1, 'state should be shown as confirmed'); - // Buttons not shown anymore - assert.strictEqual(lunchKanban.$('.o_remove_product').length, 0, 'button to remove product should not be shown'); - assert.strictEqual(lunchKanban.$('.o_add_product').length, 0, 'button to add product should not be shown'); - - - assert.verifySteps([ - JSON.stringify([[1], 1]), - JSON.stringify([[1], -1]), - ]); - - lunchKanban.destroy(); - }); - - QUnit.test('Manager interactions', async function (assert) { - assert.expect(1); - - var lunchKanban = await createView({ - View: LunchKanbanView, - model: 'product', - data: this.data, - arch: '<kanban><templates><t t-name="kanban-box">' + - '<div>' + - '</div>' + - '</t></templates></kanban>', - mockRPC: function(route, args) { - if (route === '/lunch/infos') { - return Promise.resolve({ - order: 1, - wallet: 20, - username: 'Marc Demo', - userimage: '', - is_manager: true, - users: [ - {id: 1, name: 'Mitchell Admin'}, - {id: 2, name: 'Marc Demo'}, - ], - total: 7.4, - raw_state: 'new', - state: 'New', - lines: [ - {id: 1, product: ['Pizza Italiana', 7.4], toppings: [], quantity: 1.0, price: 7.4} - ], - alerts: [], - locations: ['hello', 'hallo'], - user_location: [1, 'hello'], - }); - } else if (route === '/lunch/user_location_get') { - return Promise.resolve(1); - } else if (route === '/web/dataset/call_kw/ir.model.data/xmlid_to_res_id') { - return Promise.resolve(); - } else if (route.startsWith('data:image/png;base64,')) { - return Promise.resolve(); - } - return this._super(route, args); - }, - }); - - var select = lunchKanban.$('div.o_lunch_user_field div.o_field_widget.o_field_many2one'); - - assert.strictEqual(select.length, 1, 'There should be a user selection field'); - - lunchKanban.destroy(); - }); -}); - -}); diff --git a/addons/lunch/views/lunch_templates.xml b/addons/lunch/views/lunch_templates.xml index a076bbb2261..40c57da0b79 100644 --- a/addons/lunch/views/lunch_templates.xml +++ b/addons/lunch/views/lunch_templates.xml @@ -11,16 +11,25 @@ <script type="text/javascript" src="/lunch/static/src/js/lunch_kanban_renderer.js"></script> <script type="text/javascript" src="/lunch/static/src/js/lunch_kanban_record.js"></script> <script type="text/javascript" src="/lunch/static/src/js/lunch_kanban_model.js"></script> + <script type="text/javascript" src="/lunch/static/src/js/lunch_kanban_mobile.js"></script> </xpath> </template> <template id="qunit_suite" name="lunch tests" inherit_id="web.qunit_suite"> <xpath expr="//t[@t-set='head']" position="inside"> - <script type="text/javascript" src="/lunch/static/tests/test_lunch_kanban.js"></script> + <script type="text/javascript" src="/lunch/static/tests/lunch_test_utils.js"></script> + <script type="text/javascript" src="/lunch/static/tests/lunch_kanban_tests.js"></script> + </xpath> + </template> + + <template id="qunit_mobile_suite" name="lunch mobile tests" inherit_id="web.qunit_mobile_suite"> + <xpath expr="//t[@t-set='head']" position="inside"> + <script type="text/javascript" src="/lunch/static/tests/lunch_test_utils.js"></script> + <script type="text/javascript" src="/lunch/static/tests/lunch_kanban_mobile_tests.js"></script> </xpath> </template> <template id="lunch_payment_dialog" name="Lunch Payment Dialog"> - To add some money to your wallet, please contact your lunch manager. + To add some money to your wallet, please contact your lunch manager. </template> </odoo> diff --git a/addons/mail/data/mail_activity_data.xml b/addons/mail/data/mail_activity_data.xml index f3594e44fc2..f05d7695ec1 100644 --- a/addons/mail/data/mail_activity_data.xml +++ b/addons/mail/data/mail_activity_data.xml @@ -11,20 +11,17 @@ <field name="icon">fa-phone</field> <field name="delay_count">2</field> <field name="sequence">6</field> - <field name="is_master_data">True</field> </record> <record id="mail_activity_data_meeting" model="mail.activity.type"> <field name="name">Meeting</field> <field name="icon">fa-users</field> <field name="sequence">9</field> - <field name="is_master_data">True</field> </record> <record id="mail_activity_data_todo" model="mail.activity.type"> <field name="name">To Do</field> <field name="icon">fa-tasks</field> <field name="delay_count">5</field> <field name="sequence">12</field> - <field name="is_master_data">True</field> </record> <record id="mail_activity_data_upload_document" model="mail.activity.type"> <field name="name">Upload Document</field> @@ -39,7 +36,6 @@ <field name="delay_count">0</field> <field name="sequence">99</field> <field name="decoration_type">warning</field> - <field name="is_master_data">True</field> </record> </data> </odoo> diff --git a/addons/mail/i18n/mail.pot b/addons/mail/i18n/mail.pot index 0288498e689..c1838bf79a0 100644 --- a/addons/mail/i18n/mail.pot +++ b/addons/mail/i18n/mail.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:59+0000\n" -"PO-Revision-Date: 2019-01-16 07:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,7 +16,7 @@ msgstr "" "Plural-Forms: \n" #. module: mail -#: code:addons/mail/models/mail_channel.py:975 +#: code:addons/mail/models/mail_channel.py:1026 #, python-format msgid " This channel is private. People must be invited to join it." msgstr "" @@ -35,14 +35,14 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/services/mail_manager.js:945 +#: code:addons/mail/static/src/js/services/mail_manager.js:974 #, python-format msgid "%d Messages" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/activity.js:89 +#: code:addons/mail/static/src/js/activity.js:95 #, python-format msgid "%d days overdue" msgstr "" @@ -81,7 +81,7 @@ msgid "%s, %s and more are typing..." msgstr "" #. module: mail -#: code:addons/mail/models/mail_activity.py:344 +#: code:addons/mail/models/mail_activity.py:388 #, python-format msgid "%s: %s assigned to you" msgstr "" @@ -93,19 +93,24 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:312 +#: code:addons/mail/static/src/xml/discuss.xml:317 #, python-format msgid " (" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:307 +#: code:addons/mail/static/src/xml/thread.xml:313 #, python-format msgid "(from" msgstr "" #. module: mail +#: model_terms:ir.ui.view,arch_db:mail.message_activity_done +msgid "(originally assigned to" +msgstr "" + +#. module: mail #. openerp-web #: code:addons/mail/static/src/xml/activity.xml:56 #, python-format @@ -114,7 +119,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:597 +#: code:addons/mail/static/src/xml/thread.xml:603 #, python-format msgid "-------- Show older messages --------" msgstr "" @@ -141,7 +146,7 @@ msgid "0 Today" msgstr "" #. module: mail -#: code:addons/mail/models/mail_channel.py:980 +#: code:addons/mail/models/mail_channel.py:1031 #, python-format msgid "<br><br>\n" " Type <b>@username</b> to mention someone, and grab his attention.<br>\n" @@ -151,26 +156,26 @@ msgid "<br><br>\n" msgstr "" #. module: mail -#: code:addons/mail/models/mail_channel.py:768 +#: code:addons/mail/models/mail_channel.py:816 #, python-format msgid "<div class=\"o_mail_notification\">%(author)s invited %(new_partner)s to <a href=\"#\" class=\"o_channel_redirect\" data-oe-id=\"%(channel_id)s\">#%(channel_name)s</a></div>" msgstr "" #. module: mail -#: code:addons/mail/models/mail_channel.py:883 +#: code:addons/mail/models/mail_channel.py:931 #, python-format msgid "<div class=\"o_mail_notification\">created <a href=\"#\" class=\"o_channel_redirect\" data-oe-id=\"%s\">#%s</a></div>" msgstr "" #. module: mail -#: code:addons/mail/models/mail_channel.py:775 -#: code:addons/mail/models/mail_channel.py:858 +#: code:addons/mail/models/mail_channel.py:823 +#: code:addons/mail/models/mail_channel.py:906 #, python-format msgid "<div class=\"o_mail_notification\">joined <a href=\"#\" class=\"o_channel_redirect\" data-oe-id=\"%s\">#%s</a></div>" msgstr "" #. module: mail -#: code:addons/mail/models/mail_channel.py:295 +#: code:addons/mail/models/mail_channel.py:302 #, python-format msgid "<div class=\"o_mail_notification\">left <a href=\"#\" class=\"o_channel_redirect\" data-oe-id=\"%s\">#%s</a></div>" msgstr "" @@ -281,11 +286,6 @@ msgid "<strong>\n" msgstr "" #. module: mail -#: model_terms:ir.ui.view,arch_db:mail.message_activity_done -msgid "<strong> Feedback</strong>" -msgstr "" - -#. module: mail #: model_terms:ir.ui.view,arch_db:mail.message_notification_email msgid "<strong>Internal communication</strong>: Replying will post an internal note. Followers won't receive any email notification." msgstr "" @@ -297,6 +297,11 @@ msgid "<strong>Only records checked in list view will be used.</strong><br/>\n" msgstr "" #. module: mail +#: model_terms:ir.ui.view,arch_db:mail.message_activity_done +msgid "<strong>Original note:</strong>" +msgstr "" + +#. module: mail #: model_terms:ir.ui.view,arch_db:mail.mail_activity_view_form_popup msgid "<strong>Recommended Activities</strong>" msgstr "" @@ -321,22 +326,22 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:210 -#: code:addons/mail/static/src/xml/thread.xml:464 +#: code:addons/mail/static/src/xml/discuss.xml:214 +#: code:addons/mail/static/src/xml/thread.xml:470 #, python-format msgid "Accept" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:210 +#: code:addons/mail/static/src/xml/discuss.xml:214 #, python-format msgid "Accept selected messages" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:464 +#: code:addons/mail/static/src/xml/thread.xml:470 #, python-format msgid "Accept |" msgstr "" @@ -410,7 +415,6 @@ msgstr "" #: selection:ir.actions.act_window.view,view_mode:0 #: model:ir.model,name:mail.model_mail_activity #: model:ir.model.fields,field_description:mail.field_ir_actions_server__activity_type_id -#: model:ir.model.fields,field_description:mail.field_mail_activity__activity_type_id #: model_terms:ir.ui.view,arch_db:mail.mail_activity_view_calendar #: model_terms:ir.ui.view,arch_db:mail.mail_activity_view_form_popup #: model_terms:ir.ui.view,arch_db:mail.mail_activity_view_search @@ -434,6 +438,7 @@ msgstr "" #. module: mail #: model:ir.model,name:mail.model_mail_activity_type +#: model:ir.model.fields,field_description:mail.field_mail_activity__activity_type_id #: model_terms:ir.ui.view,arch_db:mail.mail_activity_view_search msgid "Activity Type" msgstr "" @@ -516,7 +521,7 @@ msgstr "" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/discuss.xml:83 -#: code:addons/mail/static/src/xml/discuss.xml:268 +#: code:addons/mail/static/src/xml/discuss.xml:272 #, python-format msgid "Add a channel" msgstr "" @@ -552,7 +557,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:470 +#: code:addons/mail/static/src/xml/thread.xml:476 #, python-format msgid "Add this email address to white list of people" msgstr "" @@ -573,11 +578,6 @@ msgid "Advanced Settings" msgstr "" #. module: mail -#: model:ir.model.fields,field_description:mail.field_mail_activity_type__delay_count -msgid "After" -msgstr "" - -#. module: mail #. openerp-web #: code:addons/mail/static/src/xml/followers.xml:26 #, python-format @@ -652,33 +652,28 @@ msgid "Allowed Emails" msgstr "" #. module: mail -#: selection:ir.model.fields,track_visibility:0 -msgid "Always" -msgstr "" - -#. module: mail #: selection:mail.moderation,status:0 msgid "Always Allow" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:470 +#: code:addons/mail/static/src/xml/thread.xml:476 #, python-format msgid "Always Allow |" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/models/mail_failure.js:80 +#: code:addons/mail/static/src/js/models/mail_failure.js:90 #, python-format msgid "An error occured when sending an email" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/models/mail_channel.py:979 -#: code:addons/mail/static/src/js/models/messages/message.js:148 +#: code:addons/mail/models/mail_channel.py:1030 +#: code:addons/mail/static/src/js/models/messages/message.js:143 #, python-format msgid "Anonymous" msgstr "" @@ -724,8 +719,8 @@ msgid "Assigned to" msgstr "" #. module: mail -#: code:addons/mail/models/mail_activity.py:257 -#: code:addons/mail/models/mail_activity.py:264 +#: code:addons/mail/models/mail_activity.py:293 +#: code:addons/mail/models/mail_activity.py:306 #, python-format msgid "Assigned user %s has no access to the document and is not able to handle this activity." msgstr "" @@ -819,12 +814,6 @@ msgid "Auto Delete" msgstr "" #. module: mail -#: model:ir.model.fields,field_description:mail.field_mail_activity__force_next -#: model:ir.model.fields,field_description:mail.field_mail_activity_type__force_next -msgid "Auto Schedule Next Activity" -msgstr "" - -#. module: mail #: model_terms:ir.ui.view,arch_db:mail.mail_channel_view_form msgid "Auto Subscribe Groups" msgstr "" @@ -864,7 +853,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:472 +#: code:addons/mail/static/src/xml/thread.xml:478 #, python-format msgid "Ban" msgstr "" @@ -876,7 +865,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:472 +#: code:addons/mail/static/src/xml/thread.xml:478 #, python-format msgid "Ban this email address" msgstr "" @@ -927,7 +916,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:437 +#: code:addons/mail/static/src/xml/thread.xml:443 #: selection:mail.notification,email_status:0 #, python-format msgid "Bounced" @@ -945,9 +934,14 @@ msgid "Call" msgstr "" #. module: mail +#: model:ir.model.fields,field_description:mail.field_mail_activity__can_write +msgid "Can Write" +msgstr "" + +#. module: mail #. openerp-web #: code:addons/mail/static/src/js/followers.js:367 -#: code:addons/mail/static/src/xml/activity.xml:86 +#: code:addons/mail/static/src/xml/activity.xml:107 #: model_terms:ir.ui.view,arch_db:mail.email_compose_message_wizard_form #: model_terms:ir.ui.view,arch_db:mail.mail_resend_cancel_view_form #: model_terms:ir.ui.view,arch_db:mail.mail_resend_message_view_form @@ -969,7 +963,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:440 +#: code:addons/mail/static/src/xml/thread.xml:446 #: selection:mail.notification,email_status:0 #, python-format msgid "Canceled" @@ -1004,7 +998,7 @@ msgstr "" #. module: mail #: model:ir.model.fields,help:mail.field_mail_activity__activity_category #: model:ir.model.fields,help:mail.field_mail_activity_type__category -msgid "Categories may trigger specific behavior like opening calendar view" +msgid "Categories may trigger specific behavior like opening calendar view or automatically mark as done when a document is uploaded" msgstr "" #. module: mail @@ -1028,7 +1022,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:491 +#: code:addons/mail/static/src/xml/thread.xml:497 #, python-format msgid "Changed" msgstr "" @@ -1072,7 +1066,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:169 +#: code:addons/mail/static/src/xml/discuss.xml:170 #, python-format msgid "Channel settings" msgstr "" @@ -1080,7 +1074,7 @@ msgstr "" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/discuss.xml:78 -#: code:addons/mail/static/src/xml/discuss.xml:254 +#: code:addons/mail/static/src/xml/discuss.xml:258 #: code:addons/mail/static/src/xml/systray.xml:22 #: code:addons/mail/static/src/xml/systray.xml:39 #: model:ir.model.fields,field_description:mail.field_mail_compose_message__channel_ids @@ -1103,7 +1097,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:250 +#: code:addons/mail/static/src/xml/discuss.xml:254 #: code:addons/mail/static/src/xml/systray.xml:21 #: code:addons/mail/static/src/xml/systray.xml:35 #, python-format @@ -1192,7 +1186,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/activity.js:378 +#: code:addons/mail/static/src/js/activity.js:460 #: model:ir.actions.act_window,name:mail.action_email_compose_message_wizard #: model_terms:ir.ui.view,arch_db:mail.email_compose_message_wizard_form #, python-format @@ -1223,7 +1217,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/discuss.js:1059 +#: code:addons/mail/static/src/js/discuss.js:1064 #, python-format msgid "Congratulations, your inbox is empty!" msgstr "" @@ -1276,14 +1270,14 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/discuss.js:656 +#: code:addons/mail/static/src/js/discuss.js:660 #, python-format msgid "Create %s (Private)" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/discuss.js:649 +#: code:addons/mail/static/src/js/discuss.js:653 #, python-format msgid "Create %s (Public)" msgstr "" @@ -1294,6 +1288,11 @@ msgid "Create Next Activity" msgstr "" #. module: mail +#: model:ir.model.fields,field_description:mail.field_mail_activity_type__create_uid +msgid "Create Uid" +msgstr "" + +#. module: mail #: code:addons/mail/models/mail_thread.py:401 #, python-format msgid "Create a new %(document)s" @@ -1318,7 +1317,6 @@ msgstr "" #. module: mail #: model:ir.model.fields,field_description:mail.field_email_template_preview__create_uid #: model:ir.model.fields,field_description:mail.field_mail_activity__create_uid -#: model:ir.model.fields,field_description:mail.field_mail_activity_type__create_uid #: model:ir.model.fields,field_description:mail.field_mail_alias__create_uid #: model:ir.model.fields,field_description:mail.field_mail_alias_mixin__create_uid #: model:ir.model.fields,field_description:mail.field_mail_blacklist__create_uid @@ -1373,11 +1371,6 @@ msgid "Creation Date" msgstr "" #. module: mail -#: model:ir.model.fields,field_description:mail.field_mail_activity__create_user_id -msgid "Creator" -msgstr "" - -#. module: mail #: model:ir.model.fields,help:mail.field_mail_compose_message__starred #: model:ir.model.fields,help:mail.field_mail_mail__starred #: model:ir.model.fields,help:mail.field_mail_message__starred @@ -1416,7 +1409,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/web_kanban_activity.xml:46 +#: code:addons/mail/static/src/xml/web_kanban_activity.xml:63 #: model_terms:ir.ui.view,arch_db:mail.mail_activity_view_search #, python-format msgid "Deadline" @@ -1444,6 +1437,11 @@ msgid "Default Next Activity" msgstr "" #. module: mail +#: model:ir.model.fields,field_description:mail.field_mail_activity_type__summary +msgid "Default Summary" +msgstr "" + +#. module: mail #: model:ir.model.fields,field_description:mail.field_email_template_preview__null_value #: model:ir.model.fields,field_description:mail.field_mail_template__null_value msgid "Default Value" @@ -1487,8 +1485,8 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/composer.xml:102 -#: code:addons/mail/static/src/xml/thread.xml:582 +#: code:addons/mail/static/src/xml/composer.xml:105 +#: code:addons/mail/static/src/xml/thread.xml:588 #, python-format msgid "Delete" msgstr "" @@ -1540,11 +1538,11 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/discuss.js:135 -#: code:addons/mail/static/src/js/discuss.js:417 -#: code:addons/mail/static/src/xml/activity.xml:103 +#: code:addons/mail/static/src/js/discuss.js:138 +#: code:addons/mail/static/src/js/discuss.js:420 +#: code:addons/mail/static/src/xml/activity.xml:120 #: code:addons/mail/static/src/xml/composer.xml:31 -#: code:addons/mail/static/src/xml/discuss.xml:212 +#: code:addons/mail/static/src/xml/discuss.xml:216 #: model_terms:ir.ui.view,arch_db:mail.email_template_preview_form #: model_terms:ir.ui.view,arch_db:mail.mail_activity_view_form_popup #, python-format @@ -1563,14 +1561,14 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:212 +#: code:addons/mail/static/src/xml/discuss.xml:216 #, python-format msgid "Discard selected messages" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:468 +#: code:addons/mail/static/src/xml/thread.xml:474 #, python-format msgid "Discard |" msgstr "" @@ -1645,7 +1643,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/chatter.js:499 +#: code:addons/mail/static/src/js/chatter.js:503 #, python-format msgid "Do you really want to delete %s?" msgstr "" @@ -1672,14 +1670,14 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/activity.xml:101 +#: code:addons/mail/static/src/xml/activity.xml:118 #, python-format msgid "Done" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/activity.xml:107 +#: code:addons/mail/static/src/xml/activity.xml:124 #: model_terms:ir.ui.view,arch_db:mail.mail_activity_view_form_popup #, python-format msgid "Done & Launch Next" @@ -1687,7 +1685,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/activity.xml:99 +#: code:addons/mail/static/src/xml/activity.xml:116 #: model_terms:ir.ui.view,arch_db:mail.mail_activity_view_form_popup #, python-format msgid "Done & Schedule Next" @@ -1728,7 +1726,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/activity.js:95 +#: code:addons/mail/static/src/js/activity.js:101 #, python-format msgid "Due in %d days" msgstr "" @@ -1745,7 +1743,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/activity.xml:83 +#: code:addons/mail/static/src/xml/activity.xml:104 #, python-format msgid "Edit" msgstr "" @@ -1900,6 +1898,12 @@ msgid "Email resend wizard" msgstr "" #. module: mail +#: model:ir.model.fields,field_description:mail.field_mail_activity__mail_template_ids +#: model:ir.model.fields,field_description:mail.field_mail_activity_type__mail_template_ids +msgid "Email templates" +msgstr "" + +#. module: mail #: model:ir.actions.act_window,name:mail.action_view_mail_mail #: model:ir.ui.menu,name:mail.menu_mail_mail #: model_terms:ir.ui.view,arch_db:mail.view_mail_tree @@ -1914,13 +1918,18 @@ msgid "Emojis" msgstr "" #. module: mail +#: model:ir.model.fields,field_description:mail.field_ir_model_fields__tracking +msgid "Enable Ordered Tracking" +msgstr "" + +#. module: mail #: model_terms:ir.ui.view,arch_db:mail.mail_resend_cancel_view_form msgid "Envelope Example" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:438 +#: code:addons/mail/static/src/xml/thread.xml:444 #: selection:mail.activity.type,decoration_type:0 #, python-format msgid "Error" @@ -2032,8 +2041,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/activity.js:316 -#: model:ir.model.fields,field_description:mail.field_mail_activity__feedback +#: code:addons/mail/static/src/js/activity.js:384 #, python-format msgid "Feedback" msgstr "" @@ -2045,13 +2053,13 @@ msgid "Field" msgstr "" #. module: mail -#: code:addons/mail/models/ir_model.py:35 +#: code:addons/mail/models/ir_model.py:50 #, python-format msgid "Field \"Mail Activity\" cannot be changed to \"False\"." msgstr "" #. module: mail -#: code:addons/mail/models/ir_model.py:33 +#: code:addons/mail/models/ir_model.py:48 #, python-format msgid "Field \"Mail Thread\" cannot be changed to \"False\"." msgstr "" @@ -2211,7 +2219,7 @@ msgid "Generic User From Record" msgstr "" #. module: mail -#: code:addons/mail/models/res_users.py:88 +#: code:addons/mail/models/res_users.py:89 #, python-format msgid "Go to the configuration panel" msgstr "" @@ -2235,6 +2243,7 @@ msgid "Group by..." msgstr "" #. module: mail +#: model:ir.model.fields,field_description:mail.field_mail_tracking_value__groups #: model_terms:ir.ui.view,arch_db:mail.mail_channel_view_tree msgid "Groups" msgstr "" @@ -2245,12 +2254,17 @@ msgid "Guidelines" msgstr "" #. module: mail -#: code:addons/mail/models/mail_channel.py:448 +#: code:addons/mail/models/mail_channel.py:456 #, python-format msgid "Guidelines of channel %s" msgstr "" #. module: mail +#: model:ir.model,name:mail.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: mail #: selection:res.users,notification_type:0 msgid "Handle by Emails" msgstr "" @@ -2372,8 +2386,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:182 -#: code:addons/mail/static/src/xml/discuss.xml:304 +#: code:addons/mail/static/src/xml/discuss.xml:185 #, python-format msgid "Idle" msgstr "" @@ -2417,6 +2430,11 @@ msgid "If checked, the user's signature will be appended to the text version of msgstr "" #. module: mail +#: model:ir.model.fields,help:mail.field_ir_model_fields__tracking +msgid "If set every modification done to this field is tracked in the chatter. Value is used to order tracking values." +msgstr "" + +#. module: mail #: model:ir.model.fields,help:mail.field_mail_mail__scheduled_date msgid "If set, the queue manager will send the email after the date. If not set, the email will be send as soon as possible." msgstr "" @@ -2464,10 +2482,10 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/services/mail_manager.js:1230 +#: code:addons/mail/static/src/js/services/mail_manager.js:1255 #: code:addons/mail/static/src/xml/discuss.xml:53 -#: code:addons/mail/static/src/xml/discuss.xml:235 -#: code:addons/mail/static/src/xml/discuss.xml:246 +#: code:addons/mail/static/src/xml/discuss.xml:239 +#: code:addons/mail/static/src/xml/discuss.xml:250 #, python-format msgid "Inbox" msgstr "" @@ -2532,8 +2550,8 @@ msgid "Invalid primary email field on model %s" msgstr "" #. module: mail -#: code:addons/mail/models/mail_thread.py:1946 -#: code:addons/mail/models/mail_thread.py:2177 +#: code:addons/mail/models/mail_thread.py:1953 +#: code:addons/mail/models/mail_thread.py:2184 #, python-format msgid "Invalid record set: should be called as model (without records) or on single-record recordset" msgstr "" @@ -2546,7 +2564,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/services/mail_notification_manager.js:226 +#: code:addons/mail/static/src/js/services/mail_notification_manager.js:230 #, python-format msgid "Invitation" msgstr "" @@ -2560,7 +2578,7 @@ msgstr "" #. module: mail #. openerp-web #: code:addons/mail/static/src/js/discuss.js:41 -#: code:addons/mail/static/src/xml/discuss.xml:203 +#: code:addons/mail/static/src/xml/discuss.xml:207 #, python-format msgid "Invite" msgstr "" @@ -2575,14 +2593,14 @@ msgstr "" #. module: mail #. openerp-web #: code:addons/mail/static/src/js/discuss.js:26 -#: code:addons/mail/static/src/xml/discuss.xml:203 +#: code:addons/mail/static/src/xml/discuss.xml:207 #, python-format msgid "Invite people" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/discuss.js:1327 +#: code:addons/mail/static/src/js/discuss.js:1332 #, python-format msgid "Invite people to #%s" msgstr "" @@ -2632,6 +2650,11 @@ msgid "Is Subscribed" msgstr "" #. module: mail +#: model:ir.model.fields,field_description:mail.field_mail_channel__is_chat +msgid "Is a chat" +msgstr "" + +#. module: mail #: model:ir.model.fields,field_description:mail.field_mail_channel__is_member msgid "Is a member" msgstr "" @@ -2785,8 +2808,8 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/models/mail_channel.py:989 -#: code:addons/mail/static/src/xml/discuss.xml:172 +#: code:addons/mail/models/mail_channel.py:1040 +#: code:addons/mail/static/src/xml/discuss.xml:173 #, python-format msgid "Leave this channel" msgstr "" @@ -2802,7 +2825,7 @@ msgid "List of partners that will be added as follower of the current document." msgstr "" #. module: mail -#: code:addons/mail/models/mail_channel.py:1000 +#: code:addons/mail/models/mail_channel.py:1051 #, python-format msgid "List users in the current channel" msgstr "" @@ -2836,7 +2859,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:594 +#: code:addons/mail/static/src/xml/thread.xml:600 #, python-format msgid "Loading older messages..." msgstr "" @@ -2851,7 +2874,7 @@ msgstr "" #. module: mail #. openerp-web #: code:addons/mail/static/src/js/composers/chatter_composer.js:35 -#: code:addons/mail/static/src/xml/web_kanban_activity.xml:41 +#: code:addons/mail/static/src/xml/web_kanban_activity.xml:58 #: model_terms:ir.ui.view,arch_db:mail.email_compose_message_wizard_form #, python-format msgid "Log" @@ -2897,7 +2920,7 @@ msgstr "" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/activity.xml:68 -#: code:addons/mail/static/src/xml/web_kanban_activity.xml:51 +#: code:addons/mail/static/src/xml/web_kanban_activity.xml:68 #: model:ir.model.fields,field_description:mail.field_mail_notification__mail_id #, python-format msgid "Mail" @@ -2928,7 +2951,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:228 +#: code:addons/mail/static/src/xml/discuss.xml:232 #, python-format msgid "Mail Body" msgstr "" @@ -2975,18 +2998,12 @@ msgid "Mail: Notify channel moderators" msgstr "" #. module: mail -#: code:addons/mail/models/mail_thread.py:938 +#: code:addons/mail/models/mail_thread.py:944 #, python-format msgid "Mailbox unavailable - %s" msgstr "" #. module: mail -#: model:ir.model.fields,field_description:mail.field_mail_activity__mail_template_ids -#: model:ir.model.fields,field_description:mail.field_mail_activity_type__mail_template_ids -msgid "Mails templates" -msgstr "" - -#. module: mail #: model:ir.model.fields,field_description:mail.field_mail_blacklist__message_main_attachment_id #: model:ir.model.fields,field_description:mail.field_mail_channel__message_main_attachment_id #: model:ir.model.fields,field_description:mail.field_mail_thread__message_main_attachment_id @@ -3005,21 +3022,21 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/activity.xml:80 +#: code:addons/mail/static/src/xml/activity.xml:89 #, python-format msgid "Mark Done" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:204 +#: code:addons/mail/static/src/xml/discuss.xml:208 #, python-format msgid "Mark all as read" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:204 +#: code:addons/mail/static/src/xml/discuss.xml:208 #, python-format msgid "Mark all read" msgstr "" @@ -3031,23 +3048,23 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:327 -#: code:addons/mail/static/src/xml/thread.xml:328 +#: code:addons/mail/static/src/xml/discuss.xml:332 +#: code:addons/mail/static/src/xml/thread.xml:334 #, python-format msgid "Mark as Read" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:279 -#: code:addons/mail/static/src/xml/thread.xml:322 +#: code:addons/mail/static/src/xml/thread.xml:285 +#: code:addons/mail/static/src/xml/thread.xml:328 #, python-format msgid "Mark as Todo" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/web_kanban_activity.xml:71 +#: code:addons/mail/static/src/xml/web_kanban_activity.xml:104 #, python-format msgid "Mark as done" msgstr "" @@ -3136,7 +3153,7 @@ msgid "Message Type" msgstr "" #. module: mail -#: code:addons/mail/models/mail_message.py:1297 +#: code:addons/mail/models/mail_message.py:1316 #, python-format msgid "Message are pending moderation" msgstr "" @@ -3153,7 +3170,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:190 +#: code:addons/mail/static/src/xml/discuss.xml:194 #, python-format msgid "Message sent in \"" msgstr "" @@ -3261,7 +3278,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/services/mail_manager.js:1242 +#: code:addons/mail/static/src/js/services/mail_manager.js:1267 #: model_terms:ir.ui.view,arch_db:mail.mail_channel_notify_moderation #, python-format msgid "Moderate Messages" @@ -3404,14 +3421,14 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:207 +#: code:addons/mail/static/src/xml/discuss.xml:211 #, python-format msgid "New Channel" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:206 +#: code:addons/mail/static/src/xml/discuss.xml:210 #, python-format msgid "New Message" msgstr "" @@ -3448,8 +3465,8 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/services/mail_manager.js:935 -#: code:addons/mail/static/src/js/thread_windows/thread_window.js:116 +#: code:addons/mail/static/src/js/services/mail_manager.js:964 +#: code:addons/mail/static/src/js/thread_windows/thread_window.js:118 #: code:addons/mail/static/src/xml/systray.xml:15 #: code:addons/mail/static/src/xml/systray.xml:24 #, python-format @@ -3458,7 +3475,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:477 +#: code:addons/mail/static/src/xml/thread.xml:483 #, python-format msgid "New messages" msgstr "" @@ -3472,7 +3489,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/discuss.js:100 +#: code:addons/mail/static/src/js/discuss.js:103 #, python-format msgid "New people" msgstr "" @@ -3620,7 +3637,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:285 +#: code:addons/mail/static/src/xml/thread.xml:291 #, python-format msgid "Note by" msgstr "" @@ -3718,7 +3735,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:183 +#: code:addons/mail/static/src/xml/discuss.xml:186 #, python-format msgid "Offline" msgstr "" @@ -3759,11 +3776,6 @@ msgid "Old values" msgstr "" #. module: mail -#: selection:ir.model.fields,track_visibility:0 -msgid "On Change" -msgstr "" - -#. module: mail #. openerp-web #: code:addons/mail/static/src/js/tour.js:47 #, python-format @@ -3779,14 +3791,13 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:181 -#: code:addons/mail/static/src/xml/discuss.xml:303 +#: code:addons/mail/static/src/xml/discuss.xml:184 #, python-format msgid "Online" msgstr "" #. module: mail -#: code:addons/mail/models/ir_model.py:31 +#: code:addons/mail/models/ir_model.py:46 #, python-format msgid "Only custom models can be modified." msgstr "" @@ -3798,7 +3809,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:455 +#: code:addons/mail/static/src/xml/thread.xml:461 #, python-format msgid "Open Channel in Discuss to moderate" msgstr "" @@ -3815,21 +3826,21 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:269 +#: code:addons/mail/static/src/xml/discuss.xml:273 #, python-format msgid "Open chat" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/thread_windows/thread_window.js:194 +#: code:addons/mail/static/src/js/thread_windows/thread_window.js:196 #, python-format msgid "Open document" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/thread_windows/thread_window.js:196 +#: code:addons/mail/static/src/js/thread_windows/thread_window.js:198 #, python-format msgid "Open in Discuss" msgstr "" @@ -3866,8 +3877,20 @@ msgid "Optional value to use if the target field is empty" msgstr "" #. module: mail -#: selection:mail.activity.type,category:0 -msgid "Other" +#: model:ir.model.fields,field_description:mail.field_res_users__out_of_office_message +msgid "Out of Office Message" +msgstr "" + +#. module: mail +#: model_terms:ir.ui.view,arch_db:mail.view_users_form_simple_modif_mail +msgid "Out of office" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/js/models/threads/dm_chat.js:78 +#, python-format +msgid "Out of office until %s" msgstr "" #. module: mail @@ -3895,9 +3918,12 @@ msgid "Outgoing mail server" msgstr "" #. module: mail +#. openerp-web +#: code:addons/mail/static/src/js/views/activity/activity_renderer.js:110 #: selection:mail.activity,state:0 #: selection:mail.activity.mixin,activity_state:0 #: selection:res.partner,activity_state:0 +#, python-format msgid "Overdue" msgstr "" @@ -3964,7 +3990,7 @@ msgid "Partner" msgstr "" #. module: mail -#: code:addons/mail/models/res_partner.py:29 +#: code:addons/mail/models/res_partner.py:33 #, python-format msgid "Partner Profile" msgstr "" @@ -3994,8 +4020,8 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:452 -#: code:addons/mail/static/src/xml/thread.xml:455 +#: code:addons/mail/static/src/xml/thread.xml:458 +#: code:addons/mail/static/src/xml/thread.xml:461 #, python-format msgid "Pending moderation" msgstr "" @@ -4042,9 +4068,12 @@ msgid "Placeholder Expression" msgstr "" #. module: mail +#. openerp-web +#: code:addons/mail/static/src/js/views/activity/activity_renderer.js:112 #: selection:mail.activity,state:0 #: selection:mail.activity.mixin,activity_state:0 #: selection:res.partner,activity_state:0 +#, python-format msgid "Planned" msgstr "" @@ -4079,14 +4108,14 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:594 +#: code:addons/mail/static/src/xml/thread.xml:600 #, python-format msgid "Please wait" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/composers/basic_composer.js:267 +#: code:addons/mail/static/src/js/composers/basic_composer.js:268 #, python-format msgid "Please, wait while the file is uploading." msgstr "" @@ -4143,8 +4172,8 @@ msgstr "" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/activity.xml:70 -#: code:addons/mail/static/src/xml/discuss.xml:302 -#: code:addons/mail/static/src/xml/web_kanban_activity.xml:54 +#: code:addons/mail/static/src/xml/discuss.xml:306 +#: code:addons/mail/static/src/xml/web_kanban_activity.xml:71 #: model_terms:ir.ui.view,arch_db:mail.email_template_form #, python-format msgid "Preview" @@ -4182,14 +4211,14 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:160 +#: code:addons/mail/static/src/xml/discuss.xml:161 #, python-format msgid "Private channel" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/discuss.js:1491 +#: code:addons/mail/static/src/js/discuss.js:1496 #, python-format msgid "Public Channels" msgstr "" @@ -4207,6 +4236,7 @@ msgid "Publisher: Update Notification" msgstr "" #. module: mail +#: selection:ir.actions.act_window.view,view_mode:0 #: selection:ir.ui.view,type:0 msgid "QWeb" msgstr "" @@ -4226,7 +4256,22 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:439 +#: code:addons/mail/static/src/js/thread_windows/thread_window.js:266 +#, python-format +msgid "Read less" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/js/thread_windows/thread_window.js:266 +#: code:addons/mail/static/src/xml/thread_window.xml:13 +#, python-format +msgid "Read more" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/thread.xml:445 #, python-format msgid "Ready" msgstr "" @@ -4244,14 +4289,14 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:410 +#: code:addons/mail/static/src/xml/thread.xml:416 #, python-format msgid "Received by Everyone" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:414 +#: code:addons/mail/static/src/xml/thread.xml:420 #, python-format msgid "Received by:" msgstr "" @@ -4302,21 +4347,21 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:211 +#: code:addons/mail/static/src/xml/discuss.xml:215 #, python-format msgid "Reject" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:211 +#: code:addons/mail/static/src/xml/discuss.xml:215 #, python-format msgid "Reject selected messages" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:466 +#: code:addons/mail/static/src/xml/thread.xml:472 #, python-format msgid "Reject |" msgstr "" @@ -4375,14 +4420,14 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:466 +#: code:addons/mail/static/src/xml/thread.xml:472 #, python-format msgid "Remove message with explanation" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:468 +#: code:addons/mail/static/src/xml/thread.xml:474 #, python-format msgid "Remove message without explanation" msgstr "" @@ -4401,21 +4446,21 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/discuss.js:130 +#: code:addons/mail/static/src/js/discuss.js:133 #, python-format msgid "Rename" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/discuss.js:114 +#: code:addons/mail/static/src/js/discuss.js:117 #, python-format msgid "Rename conversation" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:325 +#: code:addons/mail/static/src/xml/thread.xml:331 #: model_terms:ir.ui.view,arch_db:mail.view_mail_form #, python-format msgid "Reply" @@ -4506,11 +4551,22 @@ msgid "SMTP Server" msgstr "" #. module: mail +#: model:ir.model.fields,field_description:mail.field_res_partner__user_id +#: model:ir.model.fields,field_description:mail.field_res_users__user_id +msgid "Salesperson" +msgstr "" + +#. module: mail #: model:ir.model.fields,field_description:mail.field_email_template_preview__res_id msgid "Sample Document" msgstr "" #. module: mail +#: model_terms:ir.ui.view,arch_db:mail.mail_activity_view_form_popup +msgid "Save" +msgstr "" + +#. module: mail #: model_terms:ir.ui.view,arch_db:mail.email_compose_message_wizard_form msgid "Save as a new template" msgstr "" @@ -4534,26 +4590,34 @@ msgstr "" #. module: mail #. openerp-web +#: code:addons/mail/static/src/js/activity.js:221 +#, python-format +msgid "Schedule Activity" +msgstr "" + +#. module: mail +#. openerp-web #: code:addons/mail/static/src/xml/chatter.xml:103 #, python-format msgid "Schedule activity" msgstr "" #. module: mail -#: code:addons/mail/models/mail_activity.py:398 +#: code:addons/mail/models/mail_activity.py:424 #, python-format msgid "Schedule an Activity" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/web_kanban_activity.xml:82 +#: code:addons/mail/static/src/xml/web_kanban_activity.xml:49 #, python-format msgid "Schedule an activity" msgstr "" #. module: mail #: model:ir.model.fields,field_description:mail.field_email_template_preview__scheduled_date +#: model:ir.model.fields,field_description:mail.field_mail_activity_type__delay_count #: model:ir.model.fields,field_description:mail.field_mail_template__scheduled_date msgid "Scheduled Date" msgstr "" @@ -4586,28 +4650,28 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:396 +#: code:addons/mail/static/src/xml/thread.xml:402 #, python-format msgid "Seen by Everyone" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:400 +#: code:addons/mail/static/src/xml/thread.xml:406 #, python-format msgid "Seen by:" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:208 +#: code:addons/mail/static/src/xml/discuss.xml:212 #, python-format msgid "Select All" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:208 +#: code:addons/mail/static/src/xml/discuss.xml:212 #, python-format msgid "Select all messages to moderate" msgstr "" @@ -4632,7 +4696,7 @@ msgstr "" #. module: mail #. openerp-web #: code:addons/mail/static/src/js/composers/basic_composer.js:51 -#: code:addons/mail/static/src/js/discuss.js:210 +#: code:addons/mail/static/src/js/discuss.js:213 #: code:addons/mail/static/src/xml/composer.xml:22 #: model_terms:ir.ui.view,arch_db:mail.email_compose_message_wizard_form #, python-format @@ -4660,7 +4724,7 @@ msgstr "" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/activity.xml:72 -#: code:addons/mail/static/src/xml/web_kanban_activity.xml:56 +#: code:addons/mail/static/src/xml/web_kanban_activity.xml:73 #: model_terms:ir.ui.view,arch_db:mail.view_mail_form #: model_terms:ir.ui.view,arch_db:mail.view_mail_tree #, python-format @@ -4676,7 +4740,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/discuss.js:207 +#: code:addons/mail/static/src/js/discuss.js:210 #, python-format msgid "Send explanation to author" msgstr "" @@ -4718,14 +4782,14 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:162 +#: code:addons/mail/static/src/xml/discuss.xml:163 #, python-format msgid "Sends messages by email" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:436 +#: code:addons/mail/static/src/xml/thread.xml:442 #: model_terms:ir.ui.view,arch_db:mail.message_notification_email #: model_terms:ir.ui.view,arch_db:mail.view_mail_search #: selection:mail.mail,state:0 @@ -4768,7 +4832,7 @@ msgid "Show all records which has next action date is before today" msgstr "" #. module: mail -#: code:addons/mail/models/mail_channel.py:968 +#: code:addons/mail/models/mail_channel.py:1019 #, python-format msgid "Show an helper message" msgstr "" @@ -4803,6 +4867,12 @@ msgid "Small-sized photo of the group. It is automatically resized as a 64x64px msgstr "" #. module: mail +#: selection:mail.compose.message,message_type:0 +#: selection:mail.message,message_type:0 +msgid "Snailmail" +msgstr "" + +#. module: mail #: selection:ir.actions.server,activity_user_type:0 msgid "Specific User" msgstr "" @@ -4813,10 +4883,15 @@ msgid "Specify a model if the activity should be specific to a model and not ava msgstr "" #. module: mail +#: selection:mail.activity.type,category:0 +msgid "Standard" +msgstr "" + +#. module: mail #. openerp-web -#: code:addons/mail/static/src/js/services/mail_manager.js:1235 +#: code:addons/mail/static/src/js/services/mail_manager.js:1260 #: code:addons/mail/static/src/xml/discuss.xml:59 -#: code:addons/mail/static/src/xml/discuss.xml:238 +#: code:addons/mail/static/src/xml/discuss.xml:242 #: model:ir.model.fields,field_description:mail.field_mail_compose_message__starred #: model:ir.model.fields,field_description:mail.field_mail_mail__starred #: model:ir.model.fields,field_description:mail.field_mail_message__starred @@ -4862,7 +4937,7 @@ msgstr "" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/composer.xml:11 -#: code:addons/mail/static/src/xml/discuss.xml:227 +#: code:addons/mail/static/src/xml/discuss.xml:231 #: model:ir.model.fields,field_description:mail.field_email_template_preview__subject #: model:ir.model.fields,field_description:mail.field_mail_compose_message__subject #: model:ir.model.fields,field_description:mail.field_mail_mail__subject @@ -4886,7 +4961,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:343 +#: code:addons/mail/static/src/xml/thread.xml:349 #, python-format msgid "Subject:" msgstr "" @@ -4914,7 +4989,6 @@ msgstr "" #. module: mail #: model:ir.model.fields,field_description:mail.field_ir_actions_server__activity_summary #: model:ir.model.fields,field_description:mail.field_mail_activity__summary -#: model:ir.model.fields,field_description:mail.field_mail_activity_type__summary msgid "Summary" msgstr "" @@ -4935,6 +5009,11 @@ msgid "Technical field for UX related behaviour" msgstr "" #. module: mail +#: model:ir.model.fields,help:mail.field_mail_activity__can_write +msgid "Technical field to hide buttons if the current user has no access." +msgstr "" + +#. module: mail #: model:ir.model.fields,help:mail.field_mail_activity_type__initial_res_model_id msgid "Technical field to keep trace of the model at the beginning of the edition for UX related behaviour" msgstr "" @@ -4990,6 +5069,12 @@ msgid "The escaped html code replacing the shortcut" msgstr "" #. module: mail +#: model:ir.model.fields,help:mail.field_res_partner__user_id +#: model:ir.model.fields,help:mail.field_res_users__user_id +msgid "The internal user in charge of this contact." +msgstr "" + +#. module: mail #: model:ir.model.fields,help:mail.field_mail_alias__alias_model_id #: model:ir.model.fields,help:mail.field_mail_alias_mixin__alias_model_id #: model:ir.model.fields,help:mail.field_mail_channel__alias_model_id @@ -5011,9 +5096,8 @@ msgid "The owner of records created upon receiving emails on this alias. If this msgstr "" #. module: mail -#: code:addons/mail/models/mail_activity.py:242 -#: code:addons/mail/models/mail_message.py:716 -#: code:addons/mail/models/mail_message.py:886 +#: code:addons/mail/models/mail_message.py:732 +#: code:addons/mail/models/mail_message.py:902 #, python-format msgid "The requested operation cannot be completed due to security restrictions. Please contact your system administrator.\n" "\n" @@ -5098,15 +5182,16 @@ msgstr "" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/chatter.xml:49 -#: code:addons/mail/static/src/xml/thread_window.xml:10 +#: code:addons/mail/static/src/xml/thread_window.xml:17 #, python-format msgid "To:" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/activity.js:83 -#: code:addons/mail/static/src/js/models/messages/abstract_message.js:107 +#: code:addons/mail/static/src/js/activity.js:89 +#: code:addons/mail/static/src/js/models/messages/abstract_message.js:115 +#: code:addons/mail/static/src/js/views/activity/activity_renderer.js:111 #: code:addons/mail/static/src/xml/systray.xml:96 #: selection:mail.activity,state:0 #: selection:mail.activity.mixin,activity_state:0 @@ -5123,7 +5208,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/activity.js:93 +#: code:addons/mail/static/src/js/activity.js:99 #, python-format msgid "Tomorrow" msgstr "" @@ -5141,7 +5226,6 @@ msgid "Tracked values are stored in a separate model. This field allow to recons msgstr "" #. module: mail -#: model:ir.model.fields,field_description:mail.field_ir_model_fields__track_visibility #: model_terms:ir.ui.view,arch_db:mail.view_message_form msgid "Tracking" msgstr "" @@ -5159,7 +5243,7 @@ msgid "Tracking Values" msgstr "" #. module: mail -#: model:ir.model.fields,field_description:mail.field_mail_tracking_value__track_sequence +#: model:ir.model.fields,field_description:mail.field_mail_tracking_value__tracking_sequence msgid "Tracking field sequence" msgstr "" @@ -5177,6 +5261,12 @@ msgid "Tree" msgstr "" #. module: mail +#: model:ir.model.fields,field_description:mail.field_mail_activity__force_next +#: model:ir.model.fields,field_description:mail.field_mail_activity_type__force_next +msgid "Trigger Next Activity" +msgstr "" + +#. module: mail #: model:ir.model.fields,field_description:mail.field_mail_compose_message__message_type #: model:ir.model.fields,field_description:mail.field_mail_mail__message_type #: model:ir.model.fields,field_description:mail.field_mail_message__message_type @@ -5212,13 +5302,13 @@ msgid "Unable to connect to SMTP Server" msgstr "" #. module: mail -#: code:addons/mail/models/mail_thread.py:2185 +#: code:addons/mail/models/mail_thread.py:2192 #, python-format msgid "Unable to log message, please configure the sender's email address." msgstr "" #. module: mail -#: code:addons/mail/models/mail_thread.py:2150 +#: code:addons/mail/models/mail_thread.py:2157 #, python-format msgid "Unable to notify message, please configure the sender's email address." msgstr "" @@ -5231,7 +5321,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/thread_windows/abstract_thread_window.js:171 +#: code:addons/mail/static/src/js/thread_windows/abstract_thread_window.js:193 #, python-format msgid "Undefined" msgstr "" @@ -5293,41 +5383,41 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:209 +#: code:addons/mail/static/src/xml/discuss.xml:213 #, python-format msgid "Unselect All" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:209 +#: code:addons/mail/static/src/xml/discuss.xml:213 #, python-format msgid "Unselect all messages to moderate" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:205 +#: code:addons/mail/static/src/xml/discuss.xml:209 #, python-format msgid "Unstar all" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:205 +#: code:addons/mail/static/src/xml/discuss.xml:209 #, python-format msgid "Unstar all messages" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/discuss.js:410 +#: code:addons/mail/static/src/js/discuss.js:413 #, python-format msgid "Unsubscribe" msgstr "" #. module: mail -#: code:addons/mail/models/mail_template.py:472 +#: code:addons/mail/models/mail_template.py:480 #, python-format msgid "Unsupported report type %s found." msgstr "" @@ -5345,21 +5435,37 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:581 +#: code:addons/mail/static/src/xml/activity.xml:93 +#: selection:mail.activity.type,category:0 +#: model:mail.activity.type,name:mail.mail_activity_data_upload_document +#, python-format +msgid "Upload Document" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/web_kanban_activity.xml:88 +#, python-format +msgid "Upload file" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/thread.xml:587 #, python-format msgid "Uploaded" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:573 +#: code:addons/mail/static/src/xml/thread.xml:579 #, python-format msgid "Uploading" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/composers/basic_composer.js:267 +#: code:addons/mail/static/src/js/composers/basic_composer.js:268 #, python-format msgid "Uploading error" msgstr "" @@ -5391,7 +5497,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/web_kanban_activity.xml:61 +#: code:addons/mail/static/src/xml/web_kanban_activity.xml:78 #: model_terms:ir.ui.view,arch_db:mail.view_mail_alias_search #: model_terms:ir.ui.view,arch_db:mail.view_mail_form #: model_terms:ir.ui.view,arch_db:mail.view_mail_tree @@ -5407,7 +5513,7 @@ msgstr "" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/discuss.xml:93 -#: code:addons/mail/static/src/xml/thread_window.xml:11 +#: code:addons/mail/static/src/xml/thread_window.xml:18 #, python-format msgid "User name" msgstr "" @@ -5418,7 +5524,7 @@ msgid "Users" msgstr "" #. module: mail -#: code:addons/mail/models/mail_channel.py:1013 +#: code:addons/mail/models/mail_channel.py:1064 #, python-format msgid "Users in this channel: %s %s and you." msgstr "" @@ -5436,7 +5542,7 @@ msgid "Video" msgstr "" #. module: mail -#: code:addons/mail/models/mail_thread.py:746 +#: code:addons/mail/models/mail_thread.py:752 #: model:ir.model,name:mail.model_ir_ui_view #: model_terms:ir.ui.view,arch_db:mail.mail_notification_paynow #: model_terms:ir.ui.view,arch_db:mail.message_activity_assigned @@ -5446,7 +5552,7 @@ msgid "View" msgstr "" #. module: mail -#: code:addons/mail/models/mail_thread.py:744 +#: code:addons/mail/models/mail_thread.py:750 #, python-format msgid "View %s" msgstr "" @@ -5459,7 +5565,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/chatter.xml:109 +#: code:addons/mail/static/src/xml/chatter.xml:115 #, python-format msgid "View all the attachments of the current record" msgstr "" @@ -5505,11 +5611,6 @@ msgid "When a relationship field is selected as first field, this field shows th msgstr "" #. module: mail -#: model:ir.model.fields,help:mail.field_ir_model_fields__track_visibility -msgid "When set, every modification to this field will be tracked in the chatter." -msgstr "" - -#. module: mail #: model:ir.model.fields,help:mail.field_mail_compose_message__is_log msgid "Whether the message is an internal note (comment mode only)" msgstr "" @@ -5531,7 +5632,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/activity.xml:96 +#: code:addons/mail/static/src/xml/activity.xml:113 #, python-format msgid "Write Feedback" msgstr "" @@ -5545,42 +5646,42 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/activity.js:87 -#: code:addons/mail/static/src/js/models/messages/abstract_message.js:109 +#: code:addons/mail/static/src/js/activity.js:93 +#: code:addons/mail/static/src/js/models/messages/abstract_message.js:117 #, python-format msgid "Yesterday" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/discuss.js:97 +#: code:addons/mail/static/src/js/discuss.js:100 #, python-format msgid "You added <b>%s</b> to the conversation." msgstr "" #. module: mail -#: code:addons/mail/models/mail_channel.py:1010 +#: code:addons/mail/models/mail_channel.py:1061 #, python-format msgid "You are alone in this channel." msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/discuss.js:436 +#: code:addons/mail/static/src/js/discuss.js:439 #, python-format msgid "You are going to ban: %s. Do you confirm the action?" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/discuss.js:459 +#: code:addons/mail/static/src/js/discuss.js:462 #, python-format msgid "You are going to discard %s messages. Do you confirm the action?" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/discuss.js:463 +#: code:addons/mail/static/src/js/discuss.js:466 #, python-format msgid "You are going to discard 1 message. Do you confirm the action?" msgstr "" @@ -5591,20 +5692,20 @@ msgid "You are going to send the guidelines to all the subscribers. Do you confi msgstr "" #. module: mail -#: code:addons/mail/models/mail_channel.py:979 +#: code:addons/mail/models/mail_channel.py:1030 #, python-format msgid "You are in a private conversation with <b>@%s</b>." msgstr "" #. module: mail -#: code:addons/mail/models/mail_channel.py:973 +#: code:addons/mail/models/mail_channel.py:1024 #, python-format msgid "You are in channel <b>#%s</b>." msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/discuss.js:407 +#: code:addons/mail/static/src/js/discuss.js:410 #, python-format msgid "You are the administrator of this channel. Are you sure you want to unsubscribe?" msgstr "" @@ -5617,20 +5718,20 @@ msgid "You can mark any message as 'starred', and it shows up in this mailbox." msgstr "" #. module: mail -#: code:addons/mail/models/res_users.py:87 +#: code:addons/mail/models/res_users.py:88 #, python-format msgid "You cannot create a new user from here.\n" " To create new user please go to configuration panel." msgstr "" #. module: mail -#: code:addons/mail/models/mail_channel.py:241 +#: code:addons/mail/models/mail_channel.py:248 #, python-format msgid "You cannot delete those groups, as the Whole Company group is required by other modules." msgstr "" #. module: mail -#: code:addons/mail/models/mail_thread.py:2351 +#: code:addons/mail/models/mail_thread.py:2358 #, python-format msgid "You have been assigned to %s" msgstr "" @@ -5642,7 +5743,7 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/services/mail_notification_manager.js:227 +#: code:addons/mail/static/src/js/services/mail_notification_manager.js:231 #, python-format msgid "You have been invited to: " msgstr "" @@ -5660,6 +5761,13 @@ msgid "You have no message to moderate" msgstr "" #. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/user_menu.xml:7 +#, python-format +msgid "You have set an out of office message." +msgstr "" + +#. module: mail #: model:ir.model.fields,help:mail.field_email_template_preview__attachment_ids #: model:ir.model.fields,help:mail.field_mail_template__attachment_ids msgid "You may attach files to this template, to be added to all emails created from this template" @@ -5667,21 +5775,21 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/services/mail_notification_manager.js:471 +#: code:addons/mail/static/src/js/services/mail_notification_manager.js:498 #, python-format msgid "You unpinned your conversation with <b>%s</b>." msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/services/mail_notification_manager.js:466 +#: code:addons/mail/static/src/js/services/mail_notification_manager.js:493 #, python-format msgid "You unsubscribed from <b>%s</b>." msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:319 +#: code:addons/mail/static/src/xml/discuss.xml:324 #, python-format msgid "You:" msgstr "" @@ -5701,14 +5809,14 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:452 +#: code:addons/mail/static/src/xml/thread.xml:458 #, python-format msgid "Your message is pending moderation" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/discuss.xml:228 +#: code:addons/mail/static/src/xml/discuss.xml:232 #, python-format msgid "Your message was rejected by moderator." msgstr "" @@ -5744,7 +5852,7 @@ msgid "after validation date" msgstr "" #. module: mail -#: code:addons/mail/models/mail_thread.py:1073 +#: code:addons/mail/models/mail_thread.py:1079 #, python-format msgid "alias %s: %s" msgstr "" @@ -5797,8 +5905,7 @@ msgstr "" #. module: mail #: model_terms:ir.ui.view,arch_db:mail.message_activity_done -msgid "done\n" -" by" +msgid "done" msgstr "" #. module: mail @@ -5849,19 +5956,19 @@ msgid "incorrectly configured alias (unknown reference record)" msgstr "" #. module: mail -#: code:addons/mail/models/mail_thread.py:1050 +#: code:addons/mail/models/mail_thread.py:1056 #, python-format msgid "model %s does not accept document creation" msgstr "" #. module: mail -#: code:addons/mail/models/mail_thread.py:1045 +#: code:addons/mail/models/mail_thread.py:1051 #, python-format msgid "model %s does not accept document update" msgstr "" #. module: mail -#: code:addons/mail/models/mail_thread.py:1038 +#: code:addons/mail/models/mail_thread.py:1044 #, python-format msgid "model %s does not accept document update, fall back on document creation" msgstr "" @@ -5883,14 +5990,14 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/utils.js:108 +#: code:addons/mail/static/src/js/utils.js:89 #, python-format msgid "now" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/xml/thread.xml:304 +#: code:addons/mail/static/src/xml/thread.xml:310 #: model_terms:ir.ui.view,arch_db:mail.message_activity_assigned #: model_terms:ir.ui.view,arch_db:mail.view_mail_form #, python-format @@ -5900,19 +6007,19 @@ msgstr "" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/activity.xml:71 -#: code:addons/mail/static/src/xml/web_kanban_activity.xml:55 +#: code:addons/mail/static/src/xml/web_kanban_activity.xml:72 #, python-format msgid "or" msgstr "" #. module: mail -#: code:addons/mail/models/mail_thread.py:1020 +#: code:addons/mail/models/mail_thread.py:1026 #, python-format msgid "posting a message without model should be with a null res_id (private message), received %s" msgstr "" #. module: mail -#: code:addons/mail/models/mail_thread.py:1024 +#: code:addons/mail/models/mail_thread.py:1030 #, python-format msgid "posting a message without model should be with a parent_id (private message)" msgstr "" @@ -5924,14 +6031,14 @@ msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/thread_widget.js:20 +#: code:addons/mail/static/src/js/thread_widget.js:21 #, python-format msgid "read less" msgstr "" #. module: mail #. openerp-web -#: code:addons/mail/static/src/js/thread_widget.js:19 +#: code:addons/mail/static/src/js/thread_widget.js:20 #, python-format msgid "read more" msgstr "" @@ -5942,25 +6049,25 @@ msgid "record:" msgstr "" #. module: mail -#: code:addons/mail/models/mail_thread.py:1042 +#: code:addons/mail/models/mail_thread.py:1048 #, python-format msgid "reply to missing document (%s,%s)" msgstr "" #. module: mail -#: code:addons/mail/models/mail_thread.py:1035 +#: code:addons/mail/models/mail_thread.py:1041 #, python-format msgid "reply to missing document (%s,%s), fall back on new document creation" msgstr "" #. module: mail -#: code:addons/mail/models/mail_thread.py:1020 +#: code:addons/mail/models/mail_thread.py:1026 #, python-format msgid "resetting thread_id" msgstr "" #. module: mail -#: code:addons/mail/models/mail_channel.py:407 +#: code:addons/mail/models/mail_channel.py:415 #, python-format msgid "restricted to channel members" msgstr "" @@ -5983,11 +6090,11 @@ msgid "sales" msgstr "" #. module: mail -#: code:addons/mail/models/mail_thread.py:1024 -#: code:addons/mail/models/mail_thread.py:1042 -#: code:addons/mail/models/mail_thread.py:1045 -#: code:addons/mail/models/mail_thread.py:1050 -#: code:addons/mail/models/mail_thread.py:1073 +#: code:addons/mail/models/mail_thread.py:1030 +#: code:addons/mail/models/mail_thread.py:1048 +#: code:addons/mail/models/mail_thread.py:1051 +#: code:addons/mail/models/mail_thread.py:1056 +#: code:addons/mail/models/mail_thread.py:1079 #, python-format msgid "skipping" msgstr "" @@ -6010,13 +6117,13 @@ msgid "to close for" msgstr "" #. module: mail -#: code:addons/mail/models/mail_thread.py:1073 +#: code:addons/mail/models/mail_thread.py:1079 #, python-format msgid "unknown error" msgstr "" #. module: mail -#: code:addons/mail/models/mail_thread.py:1013 +#: code:addons/mail/models/mail_thread.py:1019 #, python-format msgid "unknown target model %s" msgstr "" diff --git a/addons/mail/models/ir_attachment.py b/addons/mail/models/ir_attachment.py index 99263c683c5..4330059c495 100644 --- a/addons/mail/models/ir_attachment.py +++ b/addons/mail/models/ir_attachment.py @@ -7,6 +7,14 @@ from odoo import api, fields, models class IrAttachment(models.Model): _inherit = 'ir.attachment' + @api.multi + def _post_add_create(self): + """ Overrides behaviour when the attachment is created through the controller + """ + super(IrAttachment, self)._post_add_create() + for record in self: + record.register_as_main_attachment() + def register_as_main_attachment(self): """ Registers this attachment as the main one of the model it is attached to. @@ -15,5 +23,5 @@ class IrAttachment(models.Model): related_record = self.env[self.res_model].browse(self.res_id) # message_main_attachment_id field can be empty, that's why we compare to False; # we are just checking that it exists on the model before writing it - if hasattr(related_record, 'message_main_attachment_id'): + if related_record and hasattr(related_record, 'message_main_attachment_id'): related_record.message_main_attachment_id = self diff --git a/addons/mail/models/mail_activity.py b/addons/mail/models/mail_activity.py index 70072a16785..f3d351f678f 100644 --- a/addons/mail/models/mail_activity.py +++ b/addons/mail/models/mail_activity.py @@ -78,7 +78,6 @@ class MailActivityType(models.Model): initial_res_model_id = fields.Many2one('ir.model', 'Initial model', compute="_compute_initial_res_model_id", store=False, help='Technical field to keep trace of the model at the beginning of the edition for UX related behaviour') res_model_change = fields.Boolean(string="Model has change", help="Technical field for UX related behaviour", default=False, store=False) - is_master_data = fields.Boolean(string="Master data", help="This field is used to prevent master data from the deletion.") @api.onchange('res_model_id') def _onchange_res_model_id(self): @@ -91,9 +90,8 @@ class MailActivityType(models.Model): @api.multi def unlink(self): - for activity_type in self: - if activity_type.is_master_data: - raise exceptions.ValidationError("You can not delete activity type that are used as master data.") + if any(self.get_external_id().values()): + raise exceptions.ValidationError("You can not delete activity type that are used as master data.") return super(MailActivityType, self).unlink() diff --git a/addons/mail/models/mail_message.py b/addons/mail/models/mail_message.py index 3c37988a5bb..e228f7c4062 100644 --- a/addons/mail/models/mail_message.py +++ b/addons/mail/models/mail_message.py @@ -1085,6 +1085,9 @@ class Message(models.Model): if pid and pid == author_id and not self.env.context.get('mail_notify_author'): # do not notify the author of its own messages continue if pid: + if active is False: + # avoid to notify inactive partner by email (odoobot) + continue pdata = {'id': pid, 'active': active, 'share': pshare, 'groups': groups} if notif == 'inbox': recipient_data['partners'].append(dict(pdata, notif=notif, type='user')) diff --git a/addons/mail/models/mail_template.py b/addons/mail/models/mail_template.py index b0046033205..3b8732d86ac 100644 --- a/addons/mail/models/mail_template.py +++ b/addons/mail/models/mail_template.py @@ -387,7 +387,7 @@ class MailTemplate(models.Model): records_company = None if self._context.get('tpl_partners_only') and self.model and results and 'company_id' in self.env[self.model]._fields: records = self.env[self.model].browse(results.keys()).read(['company_id']) - records_company = {rec['id']: rec['company_id'][0] for rec in records} + records_company = {rec['id']: (rec['company_id'][0] if rec['company_id'] else None) for rec in records} for res_id, values in results.items(): partner_ids = values.get('partner_ids', list()) diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py index 44c6cec5687..79cfb230a6b 100644 --- a/addons/mail/models/mail_thread.py +++ b/addons/mail/models/mail_thread.py @@ -110,7 +110,7 @@ class MailThread(models.AbstractModel): 'Number of error', compute='_compute_message_has_error', help="Number of messages with delivery error") message_attachment_count = fields.Integer('Attachment Count', compute='_compute_message_attachment_count') - message_main_attachment_id = fields.Many2one(string="Main Attachment", comodel_name='ir.attachment', index=True) + message_main_attachment_id = fields.Many2one(string="Main Attachment", comodel_name='ir.attachment', index=True, copy=False) @api.one @api.depends('message_follower_ids') diff --git a/addons/mail/static/src/js/thread_widget.js b/addons/mail/static/src/js/thread_widget.js index ee4e543dbe9..e5902602a77 100644 --- a/addons/mail/static/src/js/thread_widget.js +++ b/addons/mail/static/src/js/thread_widget.js @@ -10,14 +10,15 @@ var Widget = require('web.Widget'); var QWeb = core.qweb; var _t = core._t; +var _lt = core._lt; var ORDER = { ASC: 1, // visually, ascending order of message IDs (from top to bottom) DESC: -1, // visually, descending order of message IDs (from top to bottom) }; -var READ_MORE = _t("read more"); -var READ_LESS = _t("read less"); +var READ_MORE = _lt("read more"); +var READ_LESS = _lt("read less"); /** * This is a generic widget to render a thread. diff --git a/addons/mail/static/src/scss/systray.scss b/addons/mail/static/src/scss/systray.scss index b40e4f73bdf..6b57aa5a9a6 100644 --- a/addons/mail/static/src/scss/systray.scss +++ b/addons/mail/static/src/scss/systray.scss @@ -75,6 +75,10 @@ .o_mail_preview_image { width: 40px; height: 40px; + + .fa-circle-o { + display: none; + } } .o_preview_info { margin-left: 10px; diff --git a/addons/mail/static/src/scss/thread.scss b/addons/mail/static/src/scss/thread.scss index 04ffee37478..89e5f220ea2 100644 --- a/addons/mail/static/src/scss/thread.scss +++ b/addons/mail/static/src/scss/thread.scss @@ -79,6 +79,10 @@ position: absolute; bottom: 0; right: 0; + + &.fa-circle-o { + display: none; + } } } diff --git a/addons/mail/static/src/xml/discuss.xml b/addons/mail/static/src/xml/discuss.xml index 10fb71a5110..a4637ad9e02 100644 --- a/addons/mail/static/src/xml/discuss.xml +++ b/addons/mail/static/src/xml/discuss.xml @@ -183,7 +183,7 @@ <span t-att-class="partnerID ? 'o_updatable_im_status' : ''" t-att-data-partner-id="partnerID"> <i t-if="status == 'online'" class="o_mail_user_status o_user_online fa fa-circle" title="Online" role="img" aria-label="User is online"/> <i t-if="status == 'away'" class="o_mail_user_status o_user_idle fa fa-circle" title="Idle" role="img" aria-label="User is idle"/> - <i t-if="status == 'offline'" class="o_mail_user_status fa fa-circle" title="Offline" role="img" aria-label="User is offline"/> + <i t-if="status == 'offline'" class="o_mail_user_status fa fa-circle-o" title="Offline" role="img" aria-label="User is offline"/> </span> </t> diff --git a/addons/mail/views/mail_activity_views.xml b/addons/mail/views/mail_activity_views.xml index 0ee562df52e..1e494532e60 100644 --- a/addons/mail/views/mail_activity_views.xml +++ b/addons/mail/views/mail_activity_views.xml @@ -32,7 +32,6 @@ </div> <field name="delay_from"/> </div> - <field name="is_master_data" groups="base.group_no_one"/> </group> <group name="activity_planning"> <field name="force_next"/> diff --git a/addons/mail_bot/i18n/mail_bot.pot b/addons/mail_bot/i18n/mail_bot.pot index 28bae3d5eb4..ab8eeccced1 100644 --- a/addons/mail_bot/i18n/mail_bot.pot +++ b/addons/mail_bot/i18n/mail_bot.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-02 10:05+0000\n" -"PO-Revision-Date: 2018-10-02 10:05+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -48,7 +48,7 @@ msgstr "" #. module: mail_bot #. openerp-web -#: code:addons/mail_bot/static/src/js/mailbot_service.js:42 +#: code:addons/mail_bot/static/src/js/mailbot_service.js:45 #, python-format msgid "Enable desktop notifications to chat" msgstr "" @@ -65,7 +65,7 @@ msgid "HTTP Routing" msgstr "" #. module: mail_bot -#: code:addons/mail_bot/models/mail_channel.py:38 +#: code:addons/mail_bot/models/mail_channel.py:26 #, python-format msgid "Hello,<br/>Odoo's chat helps employees collaborate efficiently. I'm here to help you discover its features.<br/><b>Try to send me an emoji :)</b>" msgstr "" @@ -139,14 +139,7 @@ msgstr "" #. module: mail_bot #. openerp-web -#: code:addons/mail_bot/static/src/js/systray_messaging_menu.js:64 -#, python-format -msgid "Odoo has now the permission to send you native notifications on this device." -msgstr "" - -#. module: mail_bot -#. openerp-web -#: code:addons/mail_bot/static/src/js/systray_messaging_menu.js:61 +#: code:addons/mail_bot/static/src/js/systray_messaging_menu.js:62 #, python-format msgid "Odoo will not have the permission to send native notifications on this device." msgstr "" @@ -158,7 +151,7 @@ msgstr "" #. module: mail_bot #. openerp-web -#: code:addons/mail_bot/static/src/js/mailbot_service.js:39 +#: code:addons/mail_bot/static/src/js/mailbot_service.js:42 #, python-format msgid "OdooBot has a request" msgstr "" @@ -190,7 +183,7 @@ msgstr "" #. module: mail_bot #. openerp-web -#: code:addons/mail_bot/static/src/js/systray_messaging_menu.js:60 +#: code:addons/mail_bot/static/src/js/systray_messaging_menu.js:61 #, python-format msgid "Permission denied" msgstr "" @@ -243,13 +236,6 @@ msgid "Wow you are a natural!<br/>Ping someone to grab its attention with @nameo msgstr "" #. module: mail_bot -#. openerp-web -#: code:addons/mail_bot/static/src/js/systray_messaging_menu.js:63 -#, python-format -msgid "Yay, push notifications are enabled!" -msgstr "" - -#. module: mail_bot #: code:addons/mail_bot/models/mail_bot.py:51 #, python-format msgid "Yep, I am here! 🎉 <br/>You finished the tour, you can <b>close this chat window</b>. Enjoy discovering Odoo." diff --git a/addons/maintenance/data/mail_data.xml b/addons/maintenance/data/mail_data.xml index d298a0fb55d..dd80a831723 100644 --- a/addons/maintenance/data/mail_data.xml +++ b/addons/maintenance/data/mail_data.xml @@ -6,7 +6,6 @@ <field name="name">Maintenance Request</field> <field name="icon">fa-wrench</field> <field name="res_model_id" ref="maintenance.model_maintenance_request"/> - <field name="is_master_data">True</field> </record> <!-- email alias for maintenance requests --> diff --git a/addons/maintenance/i18n/maintenance.pot b/addons/maintenance/i18n/maintenance.pot index ca87fc725d8..1205ca0ebec 100644 --- a/addons/maintenance/i18n/maintenance.pot +++ b/addons/maintenance/i18n/maintenance.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 08:00+0000\n" -"PO-Revision-Date: 2019-01-16 08:00+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -410,7 +410,7 @@ msgstr "" #. module: maintenance #: model:ir.model.fields,help:maintenance.field_maintenance_request__duration -msgid "Duration in minutes and seconds." +msgid "Duration in hours." msgstr "" #. module: maintenance diff --git a/addons/mass_mailing/i18n/mass_mailing.pot b/addons/mass_mailing/i18n/mass_mailing.pot index df33e9de93d..5e2624c624d 100644 --- a/addons/mass_mailing/i18n/mass_mailing.pot +++ b/addons/mass_mailing/i18n/mass_mailing.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 08:00+0000\n" -"PO-Revision-Date: 2019-01-16 08:00+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -38,7 +38,7 @@ msgid "%<br/>\n" msgstr "" #. module: mass_mailing -#: code:addons/mass_mailing/models/mass_mailing.py:640 +#: code:addons/mass_mailing/models/mass_mailing.py:659 #, python-format msgid "%s (copy)" msgstr "" @@ -83,7 +83,6 @@ msgid "21 Jul" msgstr "" #. module: mass_mailing -#: model_terms:mail.mass_mailing.list,popup_content:mass_mailing.mass_mail_list_1 #: model_terms:mail.mass_mailing.list,popup_content:mass_mailing.mass_mail_list_2 msgid "<font>7</font>\n" " <strong>Business Hacks</strong>\n" @@ -350,11 +349,16 @@ msgid "Blacklist Me" msgstr "" #. module: mass_mailing -#: model:ir.model.fields,field_description:mass_mailing.field_mail_mass_mailing__body_html +#: model:ir.model.fields,field_description:mass_mailing.field_mail_mass_mailing__body_arch msgid "Body" msgstr "" #. module: mass_mailing +#: model:ir.model.fields,field_description:mass_mailing.field_mail_mass_mailing__body_html +msgid "Body converted to be send by mail" +msgstr "" + +#. module: mass_mailing #: model:ir.model.fields,field_description:mass_mailing.field_mail_mail_statistics__bounced #: model:ir.model.fields,field_description:mass_mailing.field_mail_mass_mailing__bounced #: model:ir.model.fields,field_description:mass_mailing.field_mail_mass_mailing_campaign__bounced @@ -790,6 +794,11 @@ msgid "Email Statistics" msgstr "" #. module: mass_mailing +#: model:ir.model,name:mass_mailing.model_mail_template +msgid "Email Templates" +msgstr "" + +#. module: mass_mailing #: model:ir.model,name:mass_mailing.model_mail_thread msgid "Email Thread" msgstr "" @@ -873,18 +882,12 @@ msgid "Failed" msgstr "" #. module: mass_mailing -#: code:addons/mass_mailing/controllers/main.py:157 +#: code:addons/mass_mailing/controllers/main.py:162 #, python-format msgid "Feedback from %s: %s" msgstr "" #. module: mass_mailing -#: model:mail.mass_mailing,name:mass_mailing.mass_mail_1 -#: model:utm.source,name:mass_mailing.mass_mail_1_utm_source -msgid "First Newsletter" -msgstr "" - -#. module: mass_mailing #: model:ir.model.fields,field_description:mass_mailing.field_mail_mass_mailing_contact__message_follower_ids msgid "Followers" msgstr "" @@ -1002,7 +1005,6 @@ msgid "Is Public" msgstr "" #. module: mass_mailing -#: model_terms:mail.mass_mailing.list,popup_content:mass_mailing.mass_mail_list_1 #: model_terms:mail.mass_mailing.list,popup_content:mass_mailing.mass_mail_list_2 msgid "Join our Marketing newsletter and get <strong>this white paper instantly</strong>" msgstr "" @@ -1183,8 +1185,8 @@ msgid "Mailing Lists" msgstr "" #. module: mass_mailing -#: model:ir.model.fields,field_description:mass_mailing.field_mail_mass_mailing__user_id -msgid "Mailing Manager" +#: model_terms:ir.ui.view,arch_db:mass_mailing.view_mail_mass_mailing_form +msgid "Mailing Name" msgstr "" #. module: mass_mailing @@ -1446,6 +1448,12 @@ msgid "Newsletter" msgstr "" #. module: mass_mailing +#: model:mail.mass_mailing,name:mass_mailing.mass_mail_1 +#: model:utm.source,name:mass_mailing.mass_mail_1_utm_source +msgid "Newsletter 1" +msgstr "" + +#. module: mass_mailing #: model_terms:ir.ui.view,arch_db:mass_mailing.s_mail_block_comparison_table msgid "No customization" msgstr "" @@ -1537,7 +1545,6 @@ msgid "Odoo" msgstr "" #. module: mass_mailing -#: model_terms:mail.mass_mailing.list,popup_content:mass_mailing.mass_mail_list_1 #: model_terms:mail.mass_mailing.list,popup_content:mass_mailing.mass_mail_list_2 msgid "Odoo Presents" msgstr "" @@ -1752,18 +1759,19 @@ msgid "Requested blacklisting via unsubscribe link." msgstr "" #. module: mass_mailing -#: code:addons/mass_mailing/controllers/main.py:132 +#: code:addons/mass_mailing/controllers/main.py:137 #, python-format msgid "Requested blacklisting via unsubscription page." msgstr "" #. module: mass_mailing -#: code:addons/mass_mailing/controllers/main.py:144 +#: code:addons/mass_mailing/controllers/main.py:149 #, python-format msgid "Requested de-blacklisting via unsubscription page." msgstr "" #. module: mass_mailing +#: model:ir.model.fields,field_description:mass_mailing.field_mail_mass_mailing__user_id #: model:ir.model.fields,field_description:mass_mailing.field_mail_mass_mailing_campaign__user_id #: model_terms:ir.ui.view,arch_db:mass_mailing.view_mail_mass_mailing_campaign_search msgid "Responsible" @@ -1927,6 +1935,7 @@ msgid "Show blacklist buttons on unsubscribe page" msgstr "" #. module: mass_mailing +#: model:ir.model.fields,field_description:mass_mailing.field_mail_mass_mailing__source_id #: model:ir.model.fields,field_description:mass_mailing.field_mail_mass_mailing_campaign__source_id #: model_terms:ir.ui.view,arch_db:mass_mailing.view_mail_mass_mailing_form msgid "Source" @@ -1984,12 +1993,17 @@ msgid "Status" msgstr "" #. module: mass_mailing -#: model:ir.model.fields,field_description:mass_mailing.field_mail_mass_mailing__source_id +#: model:ir.model.fields,field_description:mass_mailing.field_mail_mass_mailing__subject #: model_terms:ir.ui.view,arch_db:mass_mailing.view_mail_mass_mailing_form msgid "Subject" msgstr "" #. module: mass_mailing +#: model:ir.model.fields,help:mass_mailing.field_mail_mass_mailing__subject +msgid "Subject of emails to send" +msgstr "" + +#. module: mass_mailing #: model:ir.model.fields,field_description:mass_mailing.field_mail_mass_mailing_contact__subscription_list_ids #: model:ir.model.fields,field_description:mass_mailing.field_mail_mass_mailing_list__subscription_contact_ids msgid "Subscription Information" @@ -2017,7 +2031,7 @@ msgid "Test" msgstr "" #. module: mass_mailing -#: code:addons/mass_mailing/models/mass_mailing.py:691 +#: code:addons/mass_mailing/models/mass_mailing.py:757 #, python-format msgid "Test Mailing" msgstr "" @@ -2066,19 +2080,19 @@ msgid "The open source model of Odoo has allowed us to leverage thousands of dev msgstr "" #. module: mass_mailing -#: code:addons/mass_mailing/models/mass_mailing.py:658 +#: code:addons/mass_mailing/models/mass_mailing.py:677 #, python-format msgid "The recipient <strong>subscribed to %s</strong> mailing list(s)" msgstr "" #. module: mass_mailing -#: code:addons/mass_mailing/models/mass_mailing.py:657 +#: code:addons/mass_mailing/models/mass_mailing.py:676 #, python-format msgid "The recipient <strong>unsubscribed from %s</strong> mailing list(s)" msgstr "" #. module: mass_mailing -#: code:addons/mass_mailing/models/mass_mailing.py:856 +#: code:addons/mass_mailing/models/mass_mailing.py:957 #, python-format msgid "There is no recipients selected." msgstr "" @@ -2175,11 +2189,27 @@ msgid "Unsubscribe" msgstr "" #. module: mass_mailing +#: model_terms:ir.ui.view,arch_db:mass_mailing.unsubscribe +msgid "Unsubscribed" +msgstr "" + +#. module: mass_mailing #: model:ir.model.fields,field_description:mass_mailing.field_mail_mass_mailing_list_contact_rel__unsubscription_date msgid "Unsubscription Date" msgstr "" #. module: mass_mailing +#: code:addons/mass_mailing/models/mass_mailing.py:893 +#, python-format +msgid "Unsupported mass mailing model %s" +msgstr "" + +#. module: mass_mailing +#: model_terms:ir.ui.view,arch_db:mass_mailing.unsubscribe +msgid "Update my subscriptions" +msgstr "" + +#. module: mass_mailing #. openerp-web #: code:addons/mass_mailing/static/src/xml/mass_mailing.xml:17 #, python-format diff --git a/addons/mass_mailing_crm/i18n/mass_mailing_crm.pot b/addons/mass_mailing_crm/i18n/mass_mailing_crm.pot index 1d60d883674..38a5d16cf90 100644 --- a/addons/mass_mailing_crm/i18n/mass_mailing_crm.pot +++ b/addons/mass_mailing_crm/i18n/mass_mailing_crm.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-08 06:49+0000\n" -"PO-Revision-Date: 2018-10-08 06:49+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -23,7 +23,7 @@ msgstr "" #. module: mass_mailing_crm #: model:mail.mass_mailing,name:mass_mailing_crm.mass_mail_lead_0 #: model:utm.source,name:mass_mailing_crm.mass_mail_lead_0_utm_source -msgid "Lead Newsletter" +msgid "Lead Recall" msgstr "" #. module: mass_mailing_crm diff --git a/addons/mass_mailing_sale/i18n/mass_mailing_sale.pot b/addons/mass_mailing_sale/i18n/mass_mailing_sale.pot index e26f30edb9c..ee2881aec04 100644 --- a/addons/mass_mailing_sale/i18n/mass_mailing_sale.pot +++ b/addons/mass_mailing_sale/i18n/mass_mailing_sale.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-08 06:49+0000\n" -"PO-Revision-Date: 2018-10-08 06:49+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -43,6 +43,6 @@ msgstr "" #. module: mass_mailing_sale #: model:mail.mass_mailing,name:mass_mailing_sale.mass_mail_sale_order_0 #: model:utm.source,name:mass_mailing_sale.mass_mail_sale_order_0_utm_source -msgid "Sale Newsletter" +msgid "Sale Promotion 1" msgstr "" diff --git a/addons/mrp/i18n/mrp.pot b/addons/mrp/i18n/mrp.pot index 3f1a57beb2b..ae62c80537b 100644 --- a/addons/mrp/i18n/mrp.pot +++ b/addons/mrp/i18n/mrp.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:59+0000\n" -"PO-Revision-Date: 2019-01-16 07:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -34,7 +34,7 @@ msgid " * Ready: The material is available to start the production.\n" msgstr "" #. module: mrp -#: code:addons/mrp/models/stock_rule.py:19 +#: code:addons/mrp/models/stock_rule.py:20 #, python-format msgid " <br/><br/> The components will be taken from <b>%s</b>." msgstr "" @@ -111,7 +111,7 @@ msgid "<i class=\"fa fa-stop\" role=\"img\" aria-label=\"Stop\" title=\"Stop\"/> msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_bom.py:332 +#: code:addons/mrp/models/mrp_bom.py:338 #, python-format msgid "<p class=\"o_view_nocontent_smiling_face\">\n" " Upload files to your product\n" @@ -285,12 +285,22 @@ msgid "<strong>WorkCenter</strong>" msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_workorder.py:512 +#: model_terms:ir.ui.view,arch_db:mrp.mrp_bom_form_view +msgid "A BoM of type kit is used to split the product into its components." +msgstr "" + +#. module: mrp +#: code:addons/mrp/models/mrp_workorder.py:353 #, python-format msgid "A Manufacturing Order is already done or cancelled." msgstr "" #. module: mrp +#: model:ir.model,name:mrp.model_mrp_abstract_workorder_line +msgid "Abstract model to implement product_produce_line as well as workorder_line" +msgstr "" + +#. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_document__access_token msgid "Access Token" msgstr "" @@ -317,11 +327,6 @@ msgid "Active" msgstr "" #. module: mrp -#: model:ir.model.fields,field_description:mrp.field_mrp_workorder__active_move_line_ids -msgid "Active Move Line" -msgstr "" - -#. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_production__activity_ids #: model:ir.model.fields,field_description:mrp.field_mrp_unbuild__activity_ids #: model:ir.model.fields,field_description:mrp.field_mrp_workorder__activity_ids @@ -405,6 +410,16 @@ msgid "Archived" msgstr "" #. module: mrp +#: model_terms:ir.ui.view,arch_db:mrp.mrp_bom_form_view +msgid "At the creation of a Manufacturing Order." +msgstr "" + +#. module: mrp +#: model_terms:ir.ui.view,arch_db:mrp.mrp_bom_form_view +msgid "At the creation of a Stock Transfer." +msgstr "" + +#. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_bom__message_attachment_count #: model:ir.model.fields,field_description:mrp.field_mrp_production__message_attachment_count #: model:ir.model.fields,field_description:mrp.field_mrp_unbuild__message_attachment_count @@ -419,8 +434,8 @@ msgstr "" #. module: mrp #. openerp-web -#: code:addons/mrp/models/mrp_bom.py:324 -#: code:addons/mrp/static/src/js/mrp_bom_report.js:178 +#: code:addons/mrp/models/mrp_bom.py:330 +#: code:addons/mrp/static/src/js/mrp_bom_report.js:179 #: model_terms:ir.ui.view,arch_db:mrp.report_mrp_bom #, python-format msgid "Attachments" @@ -478,6 +493,7 @@ msgid "BOM lines of the referred bom" msgstr "" #. module: mrp +#: model_terms:ir.ui.view,arch_db:mrp.label_production_view_pdf #: model_terms:ir.ui.view,arch_db:mrp.report_mrporder msgid "Barcode" msgstr "" @@ -662,7 +678,6 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:mrp.mrp_production_form_view #: model_terms:ir.ui.view,arch_db:mrp.mrp_workcenter_block_wizard_form #: model_terms:ir.ui.view,arch_db:mrp.view_change_production_qty_wizard -#: model_terms:ir.ui.view,arch_db:mrp.view_mrp_product_produce_wizard msgid "Cancel" msgstr "" @@ -674,7 +689,7 @@ msgid "Cancelled" msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_production.py:434 +#: code:addons/mrp/models/mrp_production.py:475 #, python-format msgid "Cannot delete a manufacturing order not in cancel state" msgstr "" @@ -730,6 +745,11 @@ msgid "Color" msgstr "" #. module: mrp +#: model:ir.model,name:mrp.model_mrp_abstract_workorder +msgid "Common code between produce wizards and workorders." +msgstr "" + +#. module: mrp #: model:ir.model,name:mrp.model_res_company msgid "Companies" msgstr "" @@ -752,6 +772,7 @@ msgstr "" #. module: mrp #: model_terms:ir.ui.view,arch_db:mrp.mrp_bom_form_view +#: model_terms:ir.ui.view,arch_db:mrp.mrp_production_workorder_form_view_inherit #: model_terms:ir.ui.view,arch_db:mrp.view_mrp_bom_filter msgid "Components" msgstr "" @@ -778,7 +799,9 @@ msgid "Confirmed" msgstr "" #. module: mrp +#: model:ir.model.fields,field_description:mrp.field_mrp_abstract_workorder_line__qty_done #: model:ir.model.fields,field_description:mrp.field_mrp_product_produce_line__qty_done +#: model:ir.model.fields,field_description:mrp.field_mrp_workorder_line__qty_done #: model_terms:ir.ui.view,arch_db:mrp.mrp_production_form_view #: model_terms:ir.ui.view,arch_db:mrp.production_message msgid "Consumed" @@ -815,6 +838,11 @@ msgid "Consumed in Operation" msgstr "" #. module: mrp +#: model_terms:ir.ui.view,arch_db:mrp.view_mrp_product_produce_wizard +msgid "Continue" +msgstr "" + +#. module: mrp #: model_terms:ir.ui.view,arch_db:mrp.mrp_production_workorder_form_view_inherit msgid "Continue Production" msgstr "" @@ -830,11 +858,6 @@ msgid "Costing Information" msgstr "" #. module: mrp -#: model_terms:ir.ui.view,arch_db:mrp.mrp_production_form_view -msgid "Create Workorders" -msgstr "" - -#. module: mrp #: model_terms:ir.actions.act_window,help:mrp.mrp_bom_form_action msgid "Create a bill of materials" msgstr "" @@ -887,6 +910,7 @@ msgstr "" #: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity_loss__create_uid #: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity_loss_type__create_uid #: model:ir.model.fields,field_description:mrp.field_mrp_workorder__create_uid +#: model:ir.model.fields,field_description:mrp.field_mrp_workorder_line__create_uid #: model:ir.model.fields,field_description:mrp.field_stock_warn_insufficient_qty_unbuild__create_uid msgid "Created by" msgstr "" @@ -907,6 +931,7 @@ msgstr "" #: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity_loss__create_date #: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity_loss_type__create_date #: model:ir.model.fields,field_description:mrp.field_mrp_workorder__create_date +#: model:ir.model.fields,field_description:mrp.field_mrp_workorder_line__create_date #: model:ir.model.fields,field_description:mrp.field_stock_warn_insufficient_qty_unbuild__create_date msgid "Created on" msgstr "" @@ -922,11 +947,8 @@ msgid "Current Production" msgstr "" #. module: mrp -#: model_terms:ir.ui.view,arch_db:mrp.mrp_production_workorder_form_view_inherit -msgid "Current Qty" -msgstr "" - -#. module: mrp +#: model:ir.model.fields,field_description:mrp.field_mrp_abstract_workorder__qty_producing +#: model:ir.model.fields,field_description:mrp.field_mrp_product_produce__qty_producing #: model:ir.model.fields,field_description:mrp.field_mrp_workorder__qty_producing msgid "Currently Produced Quantity" msgstr "" @@ -1013,7 +1035,14 @@ msgid "Disassembly Order" msgstr "" #. module: mrp +#: model_terms:ir.ui.view,arch_db:mrp.view_mrp_product_produce_wizard +msgid "Discard" +msgstr "" + +#. module: mrp #: model:ir.model.fields,field_description:mrp.field_change_production_qty__display_name +#: model:ir.model.fields,field_description:mrp.field_mrp_abstract_workorder__display_name +#: model:ir.model.fields,field_description:mrp.field_mrp_abstract_workorder_line__display_name #: model:ir.model.fields,field_description:mrp.field_mrp_bom__display_name #: model:ir.model.fields,field_description:mrp.field_mrp_bom_line__display_name #: model:ir.model.fields,field_description:mrp.field_mrp_document__display_name @@ -1028,6 +1057,7 @@ msgstr "" #: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity_loss__display_name #: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity_loss_type__display_name #: model:ir.model.fields,field_description:mrp.field_mrp_workorder__display_name +#: model:ir.model.fields,field_description:mrp.field_mrp_workorder_line__display_name #: model:ir.model.fields,field_description:mrp.field_report_mrp_report_bom_structure__display_name #: model:ir.model.fields,field_description:mrp.field_stock_warn_insufficient_qty_unbuild__display_name msgid "Display Name" @@ -1050,11 +1080,6 @@ msgid "Done" msgstr "" #. module: mrp -#: model:ir.model.fields,field_description:mrp.field_stock_move_line__done_wo -msgid "Done for Work Order" -msgstr "" - -#. module: mrp #: model_terms:ir.ui.view,arch_db:mrp.mrp_unbuild_search_view #: model_terms:ir.ui.view,arch_db:mrp.view_mrp_production_filter #: selection:mrp.production,state:0 @@ -1135,9 +1160,13 @@ msgid "End Date" msgstr "" #. module: mrp +#: model:ir.model.fields,help:mrp.field_mrp_abstract_workorder__product_tracking +#: model:ir.model.fields,help:mrp.field_mrp_abstract_workorder_line__product_tracking #: model:ir.model.fields,help:mrp.field_mrp_product_produce__product_tracking #: model:ir.model.fields,help:mrp.field_mrp_product_produce_line__product_tracking #: model:ir.model.fields,help:mrp.field_mrp_unbuild__has_tracking +#: model:ir.model.fields,help:mrp.field_mrp_workorder__product_tracking +#: model:ir.model.fields,help:mrp.field_mrp_workorder_line__product_tracking msgid "Ensure the traceability of a storable product in your warehouse." msgstr "" @@ -1187,6 +1216,11 @@ msgid "Filters" msgstr "" #. module: mrp +#: model:ir.model.fields,field_description:mrp.field_mrp_workorder__final_lot_domain +msgid "Final Lot Domain" +msgstr "" + +#. module: mrp #: model_terms:ir.ui.view,arch_db:mrp.mrp_production_workorder_form_view_inherit msgid "Finish Order" msgstr "" @@ -1214,6 +1248,16 @@ msgid "Finished Product" msgstr "" #. module: mrp +#: model:ir.actions.report,name:mrp.action_report_finished_product +msgid "Finished Product Label (PDF)" +msgstr "" + +#. module: mrp +#: model:ir.actions.report,name:mrp.label_manufacture_template +msgid "Finished Product Label (ZPL)" +msgstr "" + +#. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_production__move_finished_ids #: model_terms:ir.ui.view,arch_db:mrp.mrp_production_form_view msgid "Finished Products" @@ -1331,6 +1375,8 @@ msgstr "" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_change_production_qty__id +#: model:ir.model.fields,field_description:mrp.field_mrp_abstract_workorder__id +#: model:ir.model.fields,field_description:mrp.field_mrp_abstract_workorder_line__id #: model:ir.model.fields,field_description:mrp.field_mrp_bom__id #: model:ir.model.fields,field_description:mrp.field_mrp_bom_line__id #: model:ir.model.fields,field_description:mrp.field_mrp_document__id @@ -1345,6 +1391,7 @@ msgstr "" #: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity_loss__id #: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity_loss_type__id #: model:ir.model.fields,field_description:mrp.field_mrp_workorder__id +#: model:ir.model.fields,field_description:mrp.field_mrp_workorder_line__id #: model:ir.model.fields,field_description:mrp.field_report_mrp_report_bom_structure__id #: model:ir.model.fields,field_description:mrp.field_stock_warn_insufficient_qty_unbuild__id msgid "ID" @@ -1400,27 +1447,12 @@ msgid "If the active field is set to False, it will allow you to hide the routin msgstr "" #. module: mrp -#: model_terms:ir.ui.view,arch_db:mrp.mrp_bom_form_view -msgid "If the product is a finished product: When processing a sales\n" -" order for this product, the delivery order will contain the raw\n" -" materials, instead of the finished product." -msgstr "" - -#. module: mrp -#: model_terms:ir.ui.view,arch_db:mrp.mrp_bom_form_view -msgid "If the product is a semi-finished product: When processing a\n" -" manufacturing order that contains that product as component,\n" -" the raw materials of that product will be added to the\n" -" manufacturing order of the final product." -msgstr "" - -#. module: mrp #: model_terms:ir.ui.view,arch_db:mrp.exception_on_mo msgid "Impacted Transfer(s):" msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_bom.py:193 +#: code:addons/mrp/models/mrp_bom.py:197 #, python-format msgid "Import Template for Bills of Materials" msgstr "" @@ -1448,7 +1480,7 @@ msgid "Informative, not used in matching" msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_unbuild.py:219 +#: code:addons/mrp/models/mrp_unbuild.py:229 #, python-format msgid "Insufficient Quantity" msgstr "" @@ -1483,6 +1515,11 @@ msgid "Is Locked" msgstr "" #. module: mrp +#: model:ir.model.fields,field_description:mrp.field_mrp_product_produce__is_pending_production +msgid "Is Pending Production" +msgstr "" + +#. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity_loss__manual msgid "Is a Blocking Reason" msgstr "" @@ -1526,6 +1563,8 @@ msgstr "" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_change_production_qty____last_update +#: model:ir.model.fields,field_description:mrp.field_mrp_abstract_workorder____last_update +#: model:ir.model.fields,field_description:mrp.field_mrp_abstract_workorder_line____last_update #: model:ir.model.fields,field_description:mrp.field_mrp_bom____last_update #: model:ir.model.fields,field_description:mrp.field_mrp_bom_line____last_update #: model:ir.model.fields,field_description:mrp.field_mrp_document____last_update @@ -1540,6 +1579,7 @@ msgstr "" #: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity_loss____last_update #: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity_loss_type____last_update #: model:ir.model.fields,field_description:mrp.field_mrp_workorder____last_update +#: model:ir.model.fields,field_description:mrp.field_mrp_workorder_line____last_update #: model:ir.model.fields,field_description:mrp.field_report_mrp_report_bom_structure____last_update #: model:ir.model.fields,field_description:mrp.field_stock_warn_insufficient_qty_unbuild____last_update msgid "Last Modified on" @@ -1561,6 +1601,7 @@ msgstr "" #: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity_loss__write_uid #: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity_loss_type__write_uid #: model:ir.model.fields,field_description:mrp.field_mrp_workorder__write_uid +#: model:ir.model.fields,field_description:mrp.field_mrp_workorder_line__write_uid #: model:ir.model.fields,field_description:mrp.field_stock_warn_insufficient_qty_unbuild__write_uid msgid "Last Updated by" msgstr "" @@ -1581,6 +1622,7 @@ msgstr "" #: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity_loss__write_date #: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity_loss_type__write_date #: model:ir.model.fields,field_description:mrp.field_mrp_workorder__write_date +#: model:ir.model.fields,field_description:mrp.field_mrp_workorder_line__write_date #: model:ir.model.fields,field_description:mrp.field_stock_warn_insufficient_qty_unbuild__write_date msgid "Last Updated on" msgstr "" @@ -1614,7 +1656,7 @@ msgid "Layers that are stick together to assemble wood panels." msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_production.py:547 +#: code:addons/mrp/models/mrp_production.py:574 #, python-format msgid "Lines need to be deleted, but can not as you still have some quantities to consume in them. " msgstr "" @@ -1661,10 +1703,13 @@ msgid "Lot/Serial" msgstr "" #. module: mrp -#: model:ir.model.fields,field_description:mrp.field_mrp_product_produce__lot_id +#: model:ir.model.fields,field_description:mrp.field_mrp_abstract_workorder__final_lot_id +#: model:ir.model.fields,field_description:mrp.field_mrp_abstract_workorder_line__lot_id +#: model:ir.model.fields,field_description:mrp.field_mrp_product_produce__final_lot_id #: model:ir.model.fields,field_description:mrp.field_mrp_product_produce_line__lot_id #: model:ir.model.fields,field_description:mrp.field_mrp_unbuild__lot_id #: model:ir.model.fields,field_description:mrp.field_mrp_workorder__final_lot_id +#: model:ir.model.fields,field_description:mrp.field_mrp_workorder_line__lot_id msgid "Lot/Serial Number" msgstr "" @@ -1684,7 +1729,6 @@ msgid "Lot/Serial number" msgstr "" #. module: mrp -#: model:ir.model.fields,field_description:mrp.field_stock_move__active_move_line_ids #: model_terms:ir.ui.view,arch_db:mrp.view_stock_move_lots msgid "Lots" msgstr "" @@ -1718,7 +1762,6 @@ msgid "Main Attachment" msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_production.py:519 #: code:addons/mrp/models/stock_warehouse.py:129 #, python-format msgid "Make To Order" @@ -1791,7 +1834,7 @@ msgid "Manufactured in the last 365 days" msgstr "" #. module: mrp -#: code:addons/mrp/models/stock_warehouse.py:208 +#: code:addons/mrp/models/stock_warehouse.py:220 #: model:ir.ui.menu,name:mrp.menu_mrp_root #: model_terms:ir.ui.view,arch_db:mrp.res_config_settings_view_form #, python-format @@ -1818,9 +1861,12 @@ msgstr "" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_change_production_qty__mo_id +#: model:ir.model.fields,field_description:mrp.field_mrp_abstract_workorder__production_id +#: model:ir.model.fields,field_description:mrp.field_mrp_product_produce__production_id #: model:ir.model.fields,field_description:mrp.field_mrp_unbuild__mo_id #: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity__production_id #: model:ir.model.fields,field_description:mrp.field_mrp_workorder__production_id +#: model:ir.model.fields,field_description:mrp.field_report_stock_forecast__production_id #: model:ir.model.fields,field_description:mrp.field_stock_scrap__production_id #: model_terms:ir.ui.view,arch_db:mrp.mrp_unbuild_search_view msgid "Manufacturing Order" @@ -1934,7 +1980,9 @@ msgid "Miscellaneous" msgstr "" #. module: mrp +#: model:ir.model.fields,field_description:mrp.field_mrp_abstract_workorder_line__move_id #: model:ir.model.fields,field_description:mrp.field_mrp_product_produce_line__move_id +#: model:ir.model.fields,field_description:mrp.field_mrp_workorder_line__move_id msgid "Move" msgstr "" @@ -1980,15 +2028,15 @@ msgid "Name" msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_production.py:45 -#: code:addons/mrp/models/mrp_production.py:420 -#: code:addons/mrp/models/mrp_production.py:426 +#: code:addons/mrp/models/mrp_production.py:56 +#: code:addons/mrp/models/mrp_production.py:461 +#: code:addons/mrp/models/mrp_production.py:467 #: code:addons/mrp/models/mrp_routing.py:18 #: code:addons/mrp/models/mrp_routing.py:34 #: code:addons/mrp/models/mrp_routing.py:35 -#: code:addons/mrp/models/mrp_unbuild.py:21 -#: code:addons/mrp/models/mrp_unbuild.py:81 -#: code:addons/mrp/models/mrp_unbuild.py:82 +#: code:addons/mrp/models/mrp_unbuild.py:31 +#: code:addons/mrp/models/mrp_unbuild.py:91 +#: code:addons/mrp/models/mrp_unbuild.py:92 #, python-format msgid "New" msgstr "" @@ -2188,7 +2236,7 @@ msgid "Operation Type" msgstr "" #. module: mrp -#: code:addons/mrp/report/mrp_report_bom_structure.py:231 +#: code:addons/mrp/report/mrp_report_bom_structure.py:230 #: model:ir.model.fields,field_description:mrp.field_mrp_routing__operation_ids #: model:ir.ui.menu,name:mrp.menu_mrp_manufacturing #: model_terms:ir.ui.view,arch_db:mrp.mrp_workorder_view_gantt @@ -2220,6 +2268,11 @@ msgid "Order Finished Lot" msgstr "" #. module: mrp +#: model:ir.model.fields,field_description:mrp.field_mrp_production__orderpoint_id +msgid "Orderpoint" +msgstr "" + +#. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_workcenter__order_ids msgid "Orders" msgstr "" @@ -2303,7 +2356,7 @@ msgid "Performance over the last month" msgstr "" #. module: mrp -#: code:addons/mrp/models/stock_warehouse.py:190 +#: code:addons/mrp/models/stock_warehouse.py:202 #, python-format msgid "Pick Components" msgstr "" @@ -2362,6 +2415,11 @@ msgid "Picking before Manufacturing Location" msgstr "" #. module: mrp +#: model_terms:ir.ui.view,arch_db:mrp.mrp_production_form_view +msgid "Plan" +msgstr "" + +#. module: mrp #: model_terms:ir.ui.view,arch_db:mrp.mrp_workcenter_kanban msgid "Plan Orders" msgstr "" @@ -2393,19 +2451,24 @@ msgid "Planning" msgstr "" #. module: mrp +#: model:ir.model.fields,field_description:mrp.field_mrp_production__date_start_wo +msgid "Planning Start Date" +msgstr "" + +#. module: mrp #: model:product.product,name:mrp.product_product_plastic_laminate #: model:product.template,name:mrp.product_product_plastic_laminate_product_template msgid "Plastic Laminate" msgstr "" #. module: mrp -#: code:addons/mrp/wizard/mrp_product_produce.py:119 +#: code:addons/mrp/models/mrp_abstract_workorder.py:275 #, python-format msgid "Please enter a lot or serial number for %s !" msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_workorder.py:306 +#: code:addons/mrp/models/mrp_workorder.py:219 #, python-format msgid "Please set the quantity you are currently producing. It should be different from zero." msgstr "" @@ -2428,13 +2491,13 @@ msgid "Post Inventory" msgstr "" #. module: mrp -#: code:addons/mrp/models/stock_warehouse.py:173 +#: code:addons/mrp/models/stock_warehouse.py:181 #, python-format msgid "Post-Production" msgstr "" #. module: mrp -#: code:addons/mrp/models/stock_warehouse.py:172 +#: code:addons/mrp/models/stock_warehouse.py:175 #, python-format msgid "Pre-Production" msgstr "" @@ -2456,12 +2519,13 @@ msgid "Processed Disassembly Lines" msgstr "" #. module: mrp +#: model:ir.model,name:mrp.model_procurement_group #: model:ir.model.fields,field_description:mrp.field_mrp_production__procurement_group_id msgid "Procurement Group" msgstr "" #. module: mrp -#: code:addons/mrp/wizard/mrp_product_produce.py:58 +#: code:addons/mrp/wizard/mrp_product_produce.py:71 #: model:ir.actions.act_window,name:mrp.act_mrp_product_produce #: model_terms:ir.ui.view,arch_db:mrp.mrp_production_form_view #: model_terms:ir.ui.view,arch_db:mrp.view_mrp_product_produce_wizard @@ -2481,18 +2545,26 @@ msgid "Produce residual products (A + B -> C + D)" msgstr "" #. module: mrp +#: model:ir.model.fields,field_description:mrp.field_mrp_product_produce_line__product_produce_id +msgid "Produce wizard" +msgstr "" + +#. module: mrp #: model_terms:ir.ui.view,arch_db:mrp.production_message msgid "Produced" msgstr "" #. module: mrp #: model:ir.model,name:mrp.model_product_product +#: model:ir.model.fields,field_description:mrp.field_mrp_abstract_workorder__product_id +#: model:ir.model.fields,field_description:mrp.field_mrp_abstract_workorder_line__product_id #: model:ir.model.fields,field_description:mrp.field_mrp_bom__product_tmpl_id #: model:ir.model.fields,field_description:mrp.field_mrp_product_produce__product_id #: model:ir.model.fields,field_description:mrp.field_mrp_product_produce_line__product_id #: model:ir.model.fields,field_description:mrp.field_mrp_production__product_id #: model:ir.model.fields,field_description:mrp.field_mrp_unbuild__product_id #: model:ir.model.fields,field_description:mrp.field_mrp_workorder__product_id +#: model:ir.model.fields,field_description:mrp.field_mrp_workorder_line__product_id #: model:ir.model.fields,field_description:mrp.field_stock_warn_insufficient_qty_unbuild__product_id #: model_terms:ir.ui.view,arch_db:mrp.mrp_bom_line_view_form #: model_terms:ir.ui.view,arch_db:mrp.mrp_unbuild_search_view @@ -2525,11 +2597,6 @@ msgid "Product Moves (Stock Move Line)" msgstr "" #. module: mrp -#: model:ir.model.fields,field_description:mrp.field_mrp_product_produce_line__product_produce_id -msgid "Product Produce" -msgstr "" - -#. module: mrp #: model:ir.model,name:mrp.model_product_template #: model:ir.model.fields,field_description:mrp.field_mrp_bom_line__product_tmpl_id #: model:ir.model.fields,field_description:mrp.field_mrp_production__product_tmpl_id @@ -2555,13 +2622,7 @@ msgid "Product Variants" msgstr "" #. module: mrp -#: model:ir.model.fields,field_description:mrp.field_mrp_product_produce__produce_line_ids -msgid "Product to Track" -msgstr "" - -#. module: mrp #: model:ir.model,name:mrp.model_mrp_production -#: model:ir.model.fields,field_description:mrp.field_mrp_product_produce__production_id #: model_terms:ir.ui.view,arch_db:mrp.view_mrp_production_filter #: model_terms:ir.ui.view,arch_db:mrp.view_mrp_production_workorder_form_view_filter msgid "Production" @@ -2695,7 +2756,6 @@ msgstr "" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_bom__product_qty #: model:ir.model.fields,field_description:mrp.field_mrp_bom_line__product_qty -#: model:ir.model.fields,field_description:mrp.field_mrp_product_produce__product_qty #: model:ir.model.fields,field_description:mrp.field_mrp_unbuild__product_qty #: model:ir.model.fields,field_description:mrp.field_mrp_workorder__qty_produced #: model_terms:ir.ui.view,arch_db:mrp.mrp_bom_form_view @@ -2704,6 +2764,7 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:mrp.report_mrp_bom #: model_terms:ir.ui.view,arch_db:mrp.report_mrporder #: model_terms:ir.ui.view,arch_db:mrp.view_finisehd_move_line +#: model_terms:ir.ui.view,arch_db:mrp.view_mrp_product_produce_wizard msgid "Quantity" msgstr "" @@ -2730,6 +2791,11 @@ msgid "Quantity To Produce" msgstr "" #. module: mrp +#: model_terms:ir.ui.view,arch_db:mrp.mrp_production_workorder_form_view_inherit +msgid "Quantity in Production" +msgstr "" + +#. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_routing_workcenter__batch_size msgid "Quantity to Process" msgstr "" @@ -2737,6 +2803,7 @@ msgstr "" #. module: mrp #. openerp-web #: code:addons/mrp/static/src/xml/mrp.xml:10 +#: model_terms:ir.ui.view,arch_db:mrp.label_production_view_pdf #, python-format msgid "Quantity:" msgstr "" @@ -2747,6 +2814,7 @@ msgid "Raw Material" msgstr "" #. module: mrp +#: model:ir.model.fields,field_description:mrp.field_mrp_product_produce__move_raw_ids #: model:ir.model.fields,field_description:mrp.field_mrp_production__move_raw_ids msgid "Raw Materials" msgstr "" @@ -2783,17 +2851,16 @@ msgstr "" #. module: mrp #: model:ir.model,name:mrp.model_mrp_product_produce -#: model_terms:ir.ui.view,arch_db:mrp.view_mrp_product_produce_wizard msgid "Record Production" msgstr "" #. module: mrp #: model:ir.model,name:mrp.model_mrp_product_produce_line -msgid "Record Production Line" +msgid "Record production line" msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_bom.py:178 +#: code:addons/mrp/models/mrp_bom.py:182 #, python-format msgid "Recursion error! A product with a Bill of Material should not have itself in its BoM or child BoMs!" msgstr "" @@ -2844,7 +2911,9 @@ msgid "Requires Serial" msgstr "" #. module: mrp +#: model:ir.model.fields,field_description:mrp.field_mrp_abstract_workorder_line__qty_reserved #: model:ir.model.fields,field_description:mrp.field_mrp_product_produce_line__qty_reserved +#: model:ir.model.fields,field_description:mrp.field_mrp_workorder_line__qty_reserved #: model_terms:ir.ui.view,arch_db:mrp.mrp_production_form_view #: model_terms:ir.ui.view,arch_db:mrp.view_stock_move_lots msgid "Reserved" @@ -2927,11 +2996,17 @@ msgid "Routings define the successive operations that need to be\n" msgstr "" #. module: mrp +#: model_terms:ir.ui.view,arch_db:mrp.view_mrp_product_produce_wizard +msgid "Save" +msgstr "" + +#. module: mrp #: model_terms:ir.ui.view,arch_db:mrp.res_config_settings_view_form msgid "Schedule manufacturing orders earlier to avoid delays" msgstr "" #. module: mrp +#: model_terms:ir.ui.view,arch_db:mrp.mrp_production_form_view #: model_terms:ir.ui.view,arch_db:mrp.view_mrp_production_filter #: model_terms:ir.ui.view,arch_db:mrp.view_mrp_production_workorder_form_view_filter msgid "Scheduled Date" @@ -2953,8 +3028,18 @@ msgid "Scheduled Date by Month" msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_production.py:784 -#: code:addons/mrp/models/mrp_workorder.py:521 +#: model:ir.model.fields,field_description:mrp.field_mrp_production__date_planned_finished_wo +msgid "Scheduled End Date" +msgstr "" + +#. module: mrp +#: model:ir.model.fields,field_description:mrp.field_mrp_production__date_planned_start_wo +msgid "Scheduled Start Date" +msgstr "" + +#. module: mrp +#: code:addons/mrp/models/mrp_production.py:871 +#: code:addons/mrp/models/mrp_workorder.py:362 #: model:ir.model,name:mrp.model_stock_scrap #: model:ir.model.fields,field_description:mrp.field_mrp_workorder__scrap_ids #: model_terms:ir.ui.view,arch_db:mrp.mrp_production_form_view @@ -3031,19 +3116,19 @@ msgid "Sequence" msgstr "" #. module: mrp -#: code:addons/mrp/models/stock_warehouse.py:180 +#: code:addons/mrp/models/stock_warehouse.py:192 #, python-format msgid "Sequence picking before manufacturing" msgstr "" #. module: mrp -#: code:addons/mrp/models/stock_warehouse.py:182 +#: code:addons/mrp/models/stock_warehouse.py:194 #, python-format msgid "Sequence production" msgstr "" #. module: mrp -#: code:addons/mrp/models/stock_warehouse.py:181 +#: code:addons/mrp/models/stock_warehouse.py:193 #, python-format msgid "Sequence stock after manufacturing" msgstr "" @@ -3092,13 +3177,13 @@ msgid "Solid wood table." msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_unbuild.py:105 +#: code:addons/mrp/models/mrp_unbuild.py:115 #, python-format msgid "Some of your components are tracked, you have to specify a manufacturing order in order to retrieve the correct components." msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_production.py:679 +#: code:addons/mrp/models/mrp_production.py:766 #, python-format msgid "Some raw materials have been consumed for a lot/serial number that has not been produced. Unlock the MO and click on the components lines to correct it.\n" "List of the components:\n" @@ -3106,6 +3191,18 @@ msgid "Some raw materials have been consumed for a lot/serial number that has no msgstr "" #. module: mrp +#: code:addons/mrp/models/mrp_production.py:688 +#, python-format +msgid "Some work orders are already done, you cannot unplan this manufacturing order." +msgstr "" + +#. module: mrp +#: code:addons/mrp/models/mrp_production.py:690 +#, python-format +msgid "Some work orders have already started, you cannot unplan this manufacturing order." +msgstr "" + +#. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_production__origin msgid "Source" msgstr "" @@ -3187,6 +3284,11 @@ msgid "Stock After Manufacturing Rule" msgstr "" #. module: mrp +#: model:ir.model,name:mrp.model_report_stock_forecast +msgid "Stock Forecast Report" +msgstr "" + +#. module: mrp #: model:ir.model,name:mrp.model_stock_move msgid "Stock Move" msgstr "" @@ -3217,7 +3319,7 @@ msgid "Stock rule report" msgstr "" #. module: mrp -#: code:addons/mrp/models/stock_warehouse.py:199 +#: code:addons/mrp/models/stock_warehouse.py:211 #, python-format msgid "Store Finished Product" msgstr "" @@ -3274,11 +3376,6 @@ msgid "Technical Field to order moves" msgstr "" #. module: mrp -#: model:ir.model.fields,help:mrp.field_stock_move_line__done_wo -msgid "Technical Field which is False when temporarily filled in in work order" -msgstr "" - -#. module: mrp #: model:ir.model.fields,help:mrp.field_mrp_workorder__is_user_working msgid "Technical field indicating whether the current user is working. " msgstr "" @@ -3314,9 +3411,6 @@ msgid "Technical: used in views only" msgstr "" #. module: mrp -#: model:ir.model.fields,help:mrp.field_mrp_workorder__product_id -#: model:ir.model.fields,help:mrp.field_mrp_workorder__product_tracking -#: model:ir.model.fields,help:mrp.field_mrp_workorder__product_uom_id #: model:ir.model.fields,help:mrp.field_mrp_workorder__production_state msgid "Technical: used in views only." msgstr "" @@ -3328,7 +3422,7 @@ msgstr "" #. module: mrp #: code:addons/mrp/models/mrp_bom.py:88 -#: code:addons/mrp/models/mrp_bom.py:283 +#: code:addons/mrp/models/mrp_bom.py:287 #, python-format msgid "The Product Unit of Measure you chose has a different category than in the product form." msgstr "" @@ -3370,13 +3464,13 @@ msgid "The operations for producing this BoM. When a routing is specified, the msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_workorder.py:240 +#: code:addons/mrp/models/mrp_workorder.py:179 #, python-format msgid "The planned end date of the work order cannot be prior to the planned start date, please correct this to save the work order." msgstr "" #. module: mrp -#: code:addons/mrp/wizard/mrp_product_produce.py:73 +#: code:addons/mrp/wizard/mrp_product_produce.py:125 #, python-format msgid "The production order for '%s' has no quantity specified." msgstr "" @@ -3397,7 +3491,12 @@ msgid "The routing contains all the Work Centers used and for how long. This wil msgstr "" #. module: mrp -#: code:addons/mrp/models/stock_rule.py:38 +#: model:ir.model.fields,help:mrp.field_mrp_production__date_start_wo +msgid "The work orders will be planned based on the availability of the work centers starting from this date. If emtpy, the work orders are planned as soon as possible." +msgstr "" + +#. module: mrp +#: code:addons/mrp/models/stock_rule.py:39 #, python-format msgid "There is no Bill of Material found for the product %s. Please define a Bill of Material for this product." msgstr "" @@ -3453,7 +3552,7 @@ msgid "Time Tracking" msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_workorder.py:442 +#: code:addons/mrp/models/mrp_workorder.py:283 #, python-format msgid "Time Tracking: " msgstr "" @@ -3500,9 +3599,10 @@ msgid "To Close" msgstr "" #. module: mrp +#: model:ir.model.fields,field_description:mrp.field_mrp_abstract_workorder_line__qty_to_consume #: model:ir.model.fields,field_description:mrp.field_mrp_product_produce_line__qty_to_consume +#: model:ir.model.fields,field_description:mrp.field_mrp_workorder_line__qty_to_consume #: model_terms:ir.ui.view,arch_db:mrp.mrp_production_form_view -#: model_terms:ir.ui.view,arch_db:mrp.mrp_production_workorder_form_view_inherit msgid "To Consume" msgstr "" @@ -3593,10 +3693,13 @@ msgid "Traceability Report" msgstr "" #. module: mrp +#: model:ir.model.fields,field_description:mrp.field_mrp_abstract_workorder__product_tracking +#: model:ir.model.fields,field_description:mrp.field_mrp_abstract_workorder_line__product_tracking #: model:ir.model.fields,field_description:mrp.field_mrp_product_produce__product_tracking #: model:ir.model.fields,field_description:mrp.field_mrp_product_produce_line__product_tracking #: model:ir.model.fields,field_description:mrp.field_mrp_unbuild__has_tracking #: model:ir.model.fields,field_description:mrp.field_mrp_workorder__product_tracking +#: model:ir.model.fields,field_description:mrp.field_mrp_workorder_line__product_tracking #: model:ir.model.fields,field_description:mrp.field_stock_move__needs_lots msgid "Tracking" msgstr "" @@ -3634,7 +3737,7 @@ msgid "Unbuild Order" msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_unbuild.py:77 +#: code:addons/mrp/models/mrp_unbuild.py:87 #, python-format msgid "Unbuild Order product quantity has to be strictly positive." msgstr "" @@ -3657,10 +3760,13 @@ msgid "Unit Factor" msgstr "" #. module: mrp +#: model:ir.model.fields,field_description:mrp.field_mrp_abstract_workorder__product_uom_id +#: model:ir.model.fields,field_description:mrp.field_mrp_abstract_workorder_line__product_uom_id #: model:ir.model.fields,field_description:mrp.field_mrp_product_produce__product_uom_id #: model:ir.model.fields,field_description:mrp.field_mrp_product_produce_line__product_uom_id #: model:ir.model.fields,field_description:mrp.field_mrp_unbuild__product_uom_id #: model:ir.model.fields,field_description:mrp.field_mrp_workorder__product_uom_id +#: model:ir.model.fields,field_description:mrp.field_mrp_workorder_line__product_uom_id #: model_terms:ir.ui.view,arch_db:mrp.mrp_production_tree_view #: model_terms:ir.ui.view,arch_db:mrp.report_mrp_bom msgid "Unit of Measure" @@ -3713,6 +3819,11 @@ msgid "Unlock the manufacturing order to correct what has been consumed or produ msgstr "" #. module: mrp +#: model_terms:ir.ui.view,arch_db:mrp.mrp_production_form_view +msgid "Unplan" +msgstr "" + +#. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_bom__message_unread #: model:ir.model.fields,field_description:mrp.field_mrp_production__message_unread #: model:ir.model.fields,field_description:mrp.field_mrp_unbuild__message_unread @@ -3837,9 +3948,9 @@ msgid "Warn Insufficient Unbuild Quantity" msgstr "" #. module: mrp +#: code:addons/mrp/models/mrp_abstract_workorder.py:261 #: code:addons/mrp/models/mrp_bom.py:88 -#: code:addons/mrp/models/mrp_bom.py:283 -#: code:addons/mrp/wizard/mrp_product_produce.py:218 +#: code:addons/mrp/models/mrp_bom.py:287 #, python-format msgid "Warning" msgstr "" @@ -3892,7 +4003,7 @@ msgid "When products are manufactured, they can be manufactured in this warehous msgstr "" #. module: mrp -#: code:addons/mrp/models/stock_rule.py:17 +#: code:addons/mrp/models/stock_rule.py:18 #, python-format msgid "When products are needed in <b>%s</b>, <br/> a manufacturing order is created to fulfill the need." msgstr "" @@ -4039,7 +4150,7 @@ msgid "Work Sheet" msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_production.py:760 +#: code:addons/mrp/models/mrp_production.py:847 #, python-format msgid "Work order %s is still running" msgstr "" @@ -4106,6 +4217,26 @@ msgid "Working user on this work order." msgstr "" #. module: mrp +#: model:ir.model.fields,field_description:mrp.field_mrp_workorder_line__workorder_id +msgid "Workorder" +msgstr "" + +#. module: mrp +#: model:ir.model.fields,field_description:mrp.field_mrp_product_produce__workorder_line_ids +msgid "Workorder Line" +msgstr "" + +#. module: mrp +#: model:ir.model.fields,field_description:mrp.field_mrp_workorder__workorder_line_ids +msgid "Workorder lines" +msgstr "" + +#. module: mrp +#: model:ir.model,name:mrp.model_mrp_workorder_line +msgid "Workorder move line" +msgstr "" + +#. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_workorder__worksheet msgid "Worksheet" msgstr "" @@ -4116,62 +4247,62 @@ msgid "You can either upload a file from your computer or copy/paste an internet msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_production.py:694 +#: code:addons/mrp/models/mrp_production.py:781 #, python-format msgid "You can not cancel production order, a work order is still in progress." msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_workorder.py:234 +#: code:addons/mrp/models/mrp_workorder.py:173 #, python-format msgid "You can not change the finished work order." msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_production.py:746 +#: code:addons/mrp/models/mrp_production.py:833 #, python-format msgid "You can not consume without telling for which lot you consumed it" msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_bom.py:110 +#: code:addons/mrp/models/mrp_bom.py:112 #, python-format msgid "You can not delete a Bill of Material with running manufacturing orders.\n" "Please close or cancel it first." msgstr "" #. module: mrp -#: code:addons/mrp/wizard/mrp_product_produce.py:217 +#: code:addons/mrp/models/mrp_abstract_workorder.py:260 #, python-format msgid "You can only process 1.0 %s of products with unique serial number." msgstr "" #. module: mrp -#: code:addons/mrp/models/stock_move.py:143 +#: code:addons/mrp/models/stock_move.py:138 #, python-format msgid "You cannot cancel a manufacturing order if you have already consumed material. If you want to cancel this MO, please change the consumed quantities to 0." msgstr "" #. module: mrp -#: code:addons/mrp/models/stock_move.py:216 +#: code:addons/mrp/models/mrp_abstract_workorder.py:278 #, python-format msgid "You cannot consume the same serial number twice. Please correct the serial numbers encoded." msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_unbuild.py:88 +#: code:addons/mrp/models/mrp_unbuild.py:98 #, python-format msgid "You cannot delete an unbuild order if the state is 'Done'." msgstr "" #. module: mrp -#: code:addons/mrp/wizard/mrp_product_produce.py:98 +#: code:addons/mrp/models/mrp_abstract_workorder.py:196 #, python-format msgid "You cannot produce the same serial number twice." msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_unbuild.py:99 +#: code:addons/mrp/models/mrp_unbuild.py:109 #, python-format msgid "You cannot unbuild a undone manufacturing order." msgstr "" @@ -4188,48 +4319,36 @@ msgid "You have consumed less material than what was planned. Are you sure you w msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_workorder.py:434 +#: code:addons/mrp/models/mrp_workorder.py:275 #, python-format msgid "You need to define at least one productivity loss in the category 'Performance'. Create one from the Manufacturing app, menu: Configuration / Productivity Losses." msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_workorder.py:430 +#: code:addons/mrp/models/mrp_workorder.py:271 #, python-format msgid "You need to define at least one productivity loss in the category 'Productivity'. Create one from the Manufacturing app, menu: Configuration / Productivity Losses." msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_workorder.py:486 +#: code:addons/mrp/models/mrp_workorder.py:327 #, python-format msgid "You need to define at least one unactive productivity loss in the category 'Performance'. Create one from the Manufacturing app, menu: Configuration / Productivity Losses." msgstr "" #. module: mrp -#: code:addons/mrp/wizard/mrp_product_produce.py:94 +#: code:addons/mrp/models/mrp_abstract_workorder.py:190 #, python-format msgid "You need to provide a lot for the finished product." msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_unbuild.py:95 +#: code:addons/mrp/models/mrp_unbuild.py:105 #, python-format msgid "You should provide a lot number for the final product." msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_workorder.py:334 -#, python-format -msgid "You should provide a lot/serial number for a component." -msgstr "" - -#. module: mrp -#: code:addons/mrp/models/mrp_workorder.py:309 -#, python-format -msgid "You should provide a lot/serial number for the final product." -msgstr "" - -#. module: mrp #: model_terms:ir.actions.act_window,help:mrp.action_mrp_routing_time #: model_terms:ir.actions.act_window,help:mrp.mrp_workorder_delta_report msgid "You will get here statistics about the\n" @@ -4263,7 +4382,7 @@ msgid "last" msgstr "" #. module: mrp -#: code:addons/mrp/models/mrp_production.py:806 +#: code:addons/mrp/models/mrp_production.py:893 #, python-format msgid "manufacturing order" msgstr "" @@ -4274,8 +4393,8 @@ msgid "minute(s)" msgstr "" #. module: mrp -#: code:addons/mrp/report/mrp_report_bom_structure.py:234 -#: code:addons/mrp/report/mrp_report_bom_structure.py:244 +#: code:addons/mrp/report/mrp_report_bom_structure.py:233 +#: code:addons/mrp/report/mrp_report_bom_structure.py:243 #: model_terms:ir.ui.view,arch_db:mrp.mrp_production_workorder_form_view_inherit #: model_terms:ir.ui.view,arch_db:mrp.mrp_routing_workcenter_form_view #: model_terms:ir.ui.view,arch_db:mrp.mrp_workcenter_view @@ -4313,6 +4432,11 @@ msgid "quantity has been updated." msgstr "" #. module: mrp +#: model_terms:ir.ui.view,arch_db:mrp.mrp_production_form_view +msgid "to" +msgstr "" + +#. module: mrp #: model_terms:ir.ui.view,arch_db:mrp.mrp_routing_workcenter_form_view msgid "work orders" msgstr "" diff --git a/addons/mrp/models/mrp_abstract_workorder.py b/addons/mrp/models/mrp_abstract_workorder.py index 0cf35f4c7e8..fcd4256fb6d 100644 --- a/addons/mrp/models/mrp_abstract_workorder.py +++ b/addons/mrp/models/mrp_abstract_workorder.py @@ -1,6 +1,8 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. +from collections import defaultdict + from odoo import api, fields, models, _ from odoo.addons import decimal_precision as dp from odoo.exceptions import UserError @@ -61,7 +63,7 @@ class MrpAbstractWorkorder(models.AbstractModel): # Remove or lower quantity on exisiting workorder lines if float_compare(qty_todo, 0.0, precision_rounding=rounding) < 0: qty_todo = abs(qty_todo) - for workorder_line in move_workorder_lines: + for workorder_line in move_workorder_lines.sorted(key=lambda wl: wl.qty_reserved): if float_compare(qty_todo, 0, precision_rounding=rounding) <= 0: break if float_compare(workorder_line.qty_to_consume, qty_todo, precision_rounding=rounding) <= 0: @@ -73,27 +75,39 @@ class MrpAbstractWorkorder(models.AbstractModel): line_values['to_delete'] = workorder_line else: new_val = workorder_line.qty_to_consume - qty_todo + new_reserved = max(0, workorder_line.qty_reserved - qty_todo) line_values['to_update'][workorder_line] = { 'qty_to_consume': new_val, 'qty_done': new_val, - 'qty_reserved': new_val, + 'qty_reserved': new_reserved, } qty_todo = 0 else: # Search among wo lines which one could be updated - for move_line in move_raw.move_line_ids: - # Get workorder lines that match reservation. - candidates = move_workorder_lines._find_candidate(move_line) - for candidate in candidates: - if float_compare(qty_todo, 0, precision_rounding=rounding) <= 0: - break - qty_to_add = move_line.product_uom_qty - candidate.qty_done - line_values['to_update'][candidate] = { - 'qty_done': candidate.qty_done + qty_to_add, - 'qty_to_consume': candidate.qty_to_consume + qty_to_add, - 'qty_reserved': candidate.qty_reserved + qty_to_add, + qty_reserved_wl = defaultdict(float) + for workorder_line in move_workorder_lines.sorted(key=lambda wl: wl.qty_reserved, reverse=True): + rounding = workorder_line.product_uom_id.rounding + if float_compare(qty_todo, 0, precision_rounding=rounding) <= 0: + break + move_lines = workorder_line._get_move_lines() + qty_reserved_wl[workorder_line.lot_id] += workorder_line.qty_reserved + qty_reserved_remaining = sum(move_lines.mapped('product_uom_qty')) - sum(move_lines.mapped('qty_done')) - qty_reserved_wl[workorder_line.lot_id] + if float_compare(qty_reserved_remaining, 0, precision_rounding=rounding) > 0: + qty_to_add = min(qty_reserved_remaining, qty_todo) + line_values['to_update'][workorder_line] = { + 'qty_done': workorder_line.qty_done + qty_to_add, + 'qty_to_consume': workorder_line.qty_to_consume + qty_to_add, + 'qty_reserved': workorder_line.qty_reserved + qty_to_add, } qty_todo -= qty_to_add + qty_reserved_wl[workorder_line.lot_id] += qty_to_add + + if not workorder_line.qty_reserved and not workorder_line.lot_id and workorder_line.product_tracking != 'serial': + line_values['to_update'][workorder_line] = { + 'qty_done': workorder_line.qty_done + qty_todo, + 'qty_to_consume': workorder_line.qty_to_consume + qty_todo, + } + qty_todo = 0 # if there are still qty_todo, create new wo lines if float_compare(qty_todo, 0.0, precision_rounding=rounding) > 0: @@ -122,18 +136,18 @@ class MrpAbstractWorkorder(models.AbstractModel): line.lot_id == move_line.lot_id ) if linked_wo_line: - if float_compare(sum(linked_wo_line.mapped('qty_to_consume')), move_line.product_uom_qty, precision_rounding=move.product_uom.rounding) < 0: - to_consume_in_line = min(qty_to_consume, move_line.product_uom_qty - sum(linked_wo_line.mapped('qty_to_consume'))) + if float_compare(sum(linked_wo_line.mapped('qty_to_consume')), move_line.product_uom_qty - move_line.qty_done, precision_rounding=move.product_uom.rounding) < 0: + to_consume_in_line = min(qty_to_consume, move_line.product_uom_qty - move_line.qty_done - sum(linked_wo_line.mapped('qty_to_consume'))) else: continue else: - to_consume_in_line = min(qty_to_consume, move_line.product_uom_qty) + to_consume_in_line = min(qty_to_consume, move_line.product_uom_qty - move_line.qty_done) line = { 'move_id': move.id, 'product_id': move.product_id.id, 'product_uom_id': is_tracked and move.product_id.uom_id.id or move.product_uom.id, 'qty_to_consume': to_consume_in_line, - 'qty_reserved': move_line.product_uom_qty, + 'qty_reserved': to_consume_in_line, 'lot_id': move_line.lot_id.id, 'qty_done': to_consume_in_line } @@ -183,6 +197,7 @@ class MrpAbstractWorkorder(models.AbstractModel): move_line.product_uom_qty += self.qty_producing move_line.qty_done += self.qty_producing else: + location_dest_id = production_move.location_dest_id._get_putaway_strategy(self.product_id).id or production_move.location_dest_id.id move_line.create({ 'move_id': production_move.id, 'product_id': production_move.product_id.id, @@ -191,12 +206,12 @@ class MrpAbstractWorkorder(models.AbstractModel): 'product_uom_id': self.product_uom_id.id, 'qty_done': self.qty_producing, 'location_id': production_move.location_id.id, - 'location_dest_id': production_move.location_dest_id.id, + 'location_dest_id': location_dest_id, }) else: rounding = production_move.product_uom.rounding production_move._set_quantity_done( - production_move.quantity_done + float_round(self.qty_producing, precision_rounding=rounding) + float_round(self.qty_producing, precision_rounding=rounding) ) def _update_raw_moves(self): @@ -224,7 +239,7 @@ class MrpAbstractWorkorderLine(models.AbstractModel): lot_id = fields.Many2one('stock.production.lot', 'Lot/Serial Number') qty_to_consume = fields.Float('To Consume', digits=dp.get_precision('Product Unit of Measure')) product_uom_id = fields.Many2one('uom.uom', string='Unit of Measure') - qty_done = fields.Float('Consumed') + qty_done = fields.Float('Consumed', digits=dp.get_precision('Product Unit of Measure')) qty_reserved = fields.Float('Reserved', digits=dp.get_precision('Product Unit of Measure')) @api.onchange('lot_id') @@ -235,6 +250,11 @@ class MrpAbstractWorkorderLine(models.AbstractModel): if self.product_id.tracking == 'serial': self.qty_done = 1 + @api.onchange('product_id') + def _onchange_product_id(self): + if self.product_id and not self.move_id: + self.product_uom_id = self.product_id.uom_id + @api.onchange('qty_done') def _onchange_qty_done(self): """ When the user is encoding a produce line for a tracked product, we apply some logic to @@ -303,7 +323,7 @@ class MrpAbstractWorkorderLine(models.AbstractModel): # quantity into stock, we take the move location. Anyway, no # reservation is made, so it is still possible to change it afterwards. for quant in quants: - quantity = quant.reserved_quantity - quant.quantity + quantity = quant.quantity - quant.reserved_quantity rounding = quant.product_uom_id.rounding if (float_compare(quant.quantity, 0, precision_rounding=rounding) <= 0 or float_compare(quantity, 0, precision_rounding=rounding) <= 0): @@ -345,16 +365,9 @@ class MrpAbstractWorkorderLine(models.AbstractModel): return vals_list - def _find_candidate(self, move_line): - """ Method used in order to return move lines that match reservation. - The purpose is to update exisiting workorder line regarding the - reservation of the raw moves. - """ - rounding = move_line.product_uom_id.rounding - return self.filtered(lambda line: - line.lot_id == move_line.lot_id and - float_compare(line.qty_done, move_line.product_uom_qty, precision_rounding=rounding) < 0 and - line.product_id == move_line.product_id) + def _get_move_lines(self): + return self.move_id.move_line_ids.filtered(lambda ml: + ml.lot_id == self.lot_id and ml.product_id == self.product_id) # To be implemented in specific model def _get_final_lot(self): diff --git a/addons/mrp/tests/test_order.py b/addons/mrp/tests/test_order.py index f970e5055e4..438bff2a52e 100644 --- a/addons/mrp/tests/test_order.py +++ b/addons/mrp/tests/test_order.py @@ -620,9 +620,9 @@ class TestMrpOrder(TestMrpCommon): product_produce.do_produce() ml_p1 = mo.move_raw_ids.filtered(lambda x: x.product_id == p1).mapped('move_line_ids') - self.assertEqual(len(ml_p1), 4) + self.assertEqual(len(ml_p1), 3) for ml in ml_p1: - self.assertIn(ml.qty_done, [1.0, 2.0], 'Quantity done should be 1.0, 2.0 or 3.0') + self.assertIn(ml.qty_done, [1.0, 2.0, 3.0], 'Quantity done should be 1.0, 2.0 or 3.0') self.assertEqual(sum(ml_p1.mapped('qty_done')), 6.0, 'Total qty consumed should be 6.0') self.assertEqual(sum(ml_p1.mapped('product_uom_qty')), 5.0, 'Total qty reserved should be 5.0') @@ -684,6 +684,9 @@ class TestMrpOrder(TestMrpCommon): mo, bom, p_final, p1, p2 = self.generate_mo(qty_final=1) self.assertEqual(len(mo), 1, 'MO should have been created') + self.env['stock.quant']._update_available_quantity(p1, self.stock_location, 4) + self.env['stock.quant']._update_available_quantity(p2, self.stock_location, 1) + mo.action_assign() produce_form = Form(self.env['mrp.product.produce'].with_context({ @@ -693,15 +696,137 @@ class TestMrpOrder(TestMrpCommon): produce_form.qty_producing = 3 self.assertEqual(len(produce_form.workorder_line_ids._records), 4, 'Update the produce quantity should change the components quantity.') self.assertEqual(sum([x['qty_done'] for x in produce_form.workorder_line_ids._records]), 15, 'Update the produce quantity should change the components quantity.') + self.assertEqual(sum([x['qty_reserved'] for x in produce_form.workorder_line_ids._records]), 5, 'Update the produce quantity should not change the components reserved quantity.') produce_form.qty_producing = 4 - self.assertEqual(len(produce_form.workorder_line_ids._records), 6, 'Update the produce quantity should change the components quantity.') + self.assertEqual(len(produce_form.workorder_line_ids._records), 4, 'Update the produce quantity should change the components quantity.') self.assertEqual(sum([x['qty_done'] for x in produce_form.workorder_line_ids._records]), 20, 'Update the produce quantity should change the components quantity.') + self.assertEqual(sum([x['qty_reserved'] for x in produce_form.workorder_line_ids._records]), 5, 'Update the produce quantity should not change the components reserved quantity.') + produce_form.qty_producing = 1 self.assertEqual(len(produce_form.workorder_line_ids._records), 2, 'Update the produce quantity should change the components quantity.') self.assertEqual(sum([x['qty_done'] for x in produce_form.workorder_line_ids._records]), 5, 'Update the produce quantity should change the components quantity.') + self.assertEqual(sum([x['qty_reserved'] for x in produce_form.workorder_line_ids._records]), 5, 'Update the produce quantity should not change the components reserved quantity.') + # try adding another product that doesn't belong to the BoM + with produce_form.workorder_line_ids.new() as line: + line.product_id = self.product_4 produce_wizard = produce_form.save() produce_wizard.do_produce() + def test_product_produce_7(self): + """ Add components in 2 differents sub location. Do not reserve the MO + and checks that the move line created takes stock from location that + contains needed raw materials. + """ + mo, bom, p_final, p1, p2 = self.generate_mo(qty_final=2) + self.assertEqual(len(mo), 1, 'MO should have been created') + + self.stock_location = self.env.ref('stock.stock_location_stock') + self.stock_shelf_1 = self.env.ref('stock.stock_location_components') + self.stock_shelf_2 = self.env.ref('stock.stock_location_14') + + self.env['stock.quant']._update_available_quantity(p1, self.stock_shelf_1, 3) + self.env['stock.quant']._update_available_quantity(p1, self.stock_location, 3) + self.env['stock.quant']._update_available_quantity(p1, self.stock_shelf_2, 2) + + self.env['stock.quant']._update_available_quantity(p2, self.stock_shelf_1, 1) + self.env['stock.quant']._update_available_quantity(p2, self.stock_shelf_2, 1) + + produce_form = Form(self.env['mrp.product.produce'].with_context({ + 'active_id': mo.id, + 'active_ids': [mo.id], + })) + produce_form.qty_producing = 1 + produce_wizard = produce_form.save() + + self.assertEqual(len(produce_wizard.workorder_line_ids), 2) + produce_wizard.do_produce() + + produce_form = Form(self.env['mrp.product.produce'].with_context({ + 'active_id': mo.id, + 'active_ids': [mo.id], + })) + produce_form.qty_producing = 1 + + produce_wizard = produce_form.save() + + self.assertEqual(len(produce_wizard.workorder_line_ids), 2) + produce_wizard.do_produce() + + mo.button_mark_done() + mo_move_line_p1 = mo.move_raw_ids[1].move_line_ids + self.assertEqual(sum(mo_move_line_p1.filtered(lambda ml: ml.location_id == self.stock_location).mapped('qty_done')), 3) + self.assertEqual(sum(mo_move_line_p1.filtered(lambda ml: ml.location_id == self.stock_shelf_1).mapped('qty_done')), 3) + self.assertEqual(sum(mo_move_line_p1.filtered(lambda ml: ml.location_id == self.stock_shelf_2).mapped('qty_done')), 2) + self.assertEqual(sum(mo.move_finished_ids.move_line_ids.mapped('qty_done')), 2) + + self.assertEqual(self.env['stock.quant']._gather(p1, self.stock_location, strict=True).quantity, 0) + self.assertEqual(self.env['stock.quant']._gather(p1, self.stock_shelf_1, strict=True).quantity, 0) + self.assertEqual(self.env['stock.quant']._gather(p1, self.stock_shelf_2, strict=True).quantity, 0) + + self.assertEqual(self.env['stock.quant']._gather(p2, self.stock_shelf_1, strict=True).quantity, 0) + self.assertEqual(self.env['stock.quant']._gather(p2, self.stock_shelf_2, strict=True).quantity, 0) + self.assertEqual(self.env['stock.quant']._gather(p_final, self.stock_location, strict=True).quantity, 2) + + def test_product_produce_8(self): + """ Produce more than reserved and planned. Check that produce wizard + only propose one line for product not reserved. + """ + mo, bom, p_final, p1, p2 = self.generate_mo(qty_final=2) + self.assertEqual(len(mo), 1, 'MO should have been created') + + self.stock_location = self.env.ref('stock.stock_location_stock') + + self.env['stock.quant']._update_available_quantity(p1, self.stock_location, 5) + self.env['stock.quant']._update_available_quantity(p2, self.stock_location, 2) + + mo.action_assign() + + produce_form = Form(self.env['mrp.product.produce'].with_context({ + 'active_id': mo.id, + 'active_ids': [mo.id], + })) + produce_form.qty_producing = 1 + produce_wizard = produce_form.save() + self.assertEqual(len(produce_wizard.workorder_line_ids), 2) + self.assertEqual(produce_wizard.workorder_line_ids.filtered(lambda l: l.product_id == p1).qty_reserved, 4) + self.assertEqual(produce_wizard.workorder_line_ids.filtered(lambda l: l.product_id == p2).qty_reserved, 1) + produce_wizard.do_produce() + + produce_form = Form(self.env['mrp.product.produce'].with_context({ + 'active_id': mo.id, + 'active_ids': [mo.id], + })) + produce_form.qty_producing = 1 + produce_wizard = produce_form.save() + # p1 1 1 1 + # p1 3 0 3 + # p2 1 1 1 + self.assertEqual(len(produce_wizard.workorder_line_ids), 3) + self.assertEqual(sum(produce_wizard.workorder_line_ids.filtered(lambda l: l.product_id == p1).mapped('qty_reserved')), 1) + self.assertEqual(produce_wizard.workorder_line_ids.filtered(lambda l: l.product_id == p1 and l.qty_reserved).qty_to_consume, 1) + self.assertEqual(produce_wizard.workorder_line_ids.filtered(lambda l: l.product_id == p1 and not l.qty_reserved).qty_to_consume, 3) + self.assertEqual(produce_wizard.workorder_line_ids.filtered(lambda l: l.product_id == p2).qty_reserved, 1) + + with Form(produce_wizard) as produce_form: + produce_form.qty_producing = 2 + # p1 1 1 1 + # p1 7 0 7 + # p2 1 1 1 + # p2 1 0 1 + self.assertEqual(len(produce_wizard.workorder_line_ids), 4) + self.assertEqual(sum(produce_wizard.workorder_line_ids.filtered(lambda l: l.product_id == p1).mapped('qty_reserved')), 1) + self.assertEqual(produce_wizard.workorder_line_ids.filtered(lambda l: l.product_id == p1 and l.qty_reserved).qty_to_consume, 1) + self.assertEqual(produce_wizard.workorder_line_ids.filtered(lambda l: l.product_id == p1 and not l.qty_reserved).qty_to_consume, 7) + self.assertEqual(sum(produce_wizard.workorder_line_ids.filtered(lambda l: l.product_id == p2).mapped('qty_reserved')), 1) + + produce_wizard.do_produce() + + mo.button_mark_done() + + self.assertEqual(self.env['stock.quant']._gather(p1, self.stock_location, strict=True).quantity, -7) + self.assertEqual(self.env['stock.quant']._gather(p2, self.stock_location, strict=True).quantity, -1) + self.assertEqual(self.env['stock.quant']._gather(p_final, self.stock_location, strict=True).quantity, 3) + def test_product_produce_uom(self): plastic_laminate = self.env.ref('mrp.product_product_plastic_laminate') bom = self.env.ref('mrp.mrp_bom_plastic_laminate') diff --git a/addons/mrp/tests/test_stock.py b/addons/mrp/tests/test_stock.py index da3db148b68..fc686a10347 100644 --- a/addons/mrp/tests/test_stock.py +++ b/addons/mrp/tests/test_stock.py @@ -7,6 +7,47 @@ from odoo.tests import Form class TestWarehouse(common.TestMrpCommon): + def setUp(self): + super(TestWarehouse, self).setUp() + + self.stock_location = self.env.ref('stock.stock_location_stock') + self.depot_location = self.env['stock.location'].create({ + 'name': 'Depot', + 'usage': 'internal', + 'location_id': self.stock_location.id, + }) + self.env["stock.putaway.rule"].create({ + "location_in_id": self.stock_location.id, + "location_out_id": self.depot_location.id, + 'category_id': self.env.ref('product.product_category_all').id, + }) + + self.laptop = self.env.ref("product.product_product_25") + graphics_card = self.env.ref("product.product_product_24") + unit = self.env.ref("uom.product_uom_unit") + mrp_routing = self.env.ref("mrp.mrp_routing_0") + + self.bom_laptop = self.env['mrp.bom'].create({ + 'product_tmpl_id': self.laptop.product_tmpl_id.id, + 'product_qty': 1, + 'product_uom_id': unit.id, + 'bom_line_ids': [(0, 0, { + 'product_id': graphics_card.id, + 'product_qty': 1, + 'product_uom_id': unit.id + })], + 'routing_id': mrp_routing.id + }) + + def new_mo_laptop(self): + form = Form(self.env['mrp.production']) + form.product_id = self.laptop + form.product_qty = 1 + form.bom_id = self.bom_laptop + p = form.save() + p.action_confirm() + p.action_assign() + return p def test_manufacturing_route(self): warehouse_1_stock_manager = self.warehouse_1.sudo(self.user_stock_manager) @@ -103,6 +144,71 @@ class TestWarehouse(common.TestMrpCommon): # scrap_move = production_3.move_raw_ids.filtered(lambda x: x.product_id == self.product_2 and x.scrapped) # self.assertTrue(scrap_move, "There are no any scrap move created for production order.") + def test_putaway_after_manufacturing_1(self): + """ This test checks a manufactured product without tracking will go to + location defined in putaway strategy. + """ + mo_laptop = self.new_mo_laptop() + + mo_laptop.button_plan() + workorder = mo_laptop.workorder_ids[0] + + workorder.button_start() + workorder.record_production() + mo_laptop.button_mark_done() + + # We check if the laptop go in the depot and not in the stock + move = mo_laptop.move_finished_ids + location_dest = move.move_line_ids.location_dest_id + self.assertEqual(location_dest.id, self.depot_location.id) + self.assertNotEqual(location_dest.id, self.stock_location.id) + + def test_putaway_after_manufacturing_2(self): + """ This test checks a tracked manufactured product will go to location + defined in putaway strategy. + """ + self.laptop.tracking = 'serial' + mo_laptop = self.new_mo_laptop() + + mo_laptop.button_plan() + workorder = mo_laptop.workorder_ids[0] + + workorder.button_start() + serial = self.env['stock.production.lot'].create({'product_id': self.laptop.id}) + workorder.final_lot_id = serial + workorder.record_production() + mo_laptop.button_mark_done() + + # We check if the laptop go in the depot and not in the stock + move = mo_laptop.move_finished_ids + location_dest = move.move_line_ids.location_dest_id + self.assertEqual(location_dest.id, self.depot_location.id) + self.assertNotEqual(location_dest.id, self.stock_location.id) + + def test_putaway_after_manufacturing_3(self): + """ This test checks a tracked manufactured product will go to location + defined in putaway strategy when the production is recorded with + product.produce wizard. + """ + self.laptop.tracking = 'serial' + mo_laptop = self.new_mo_laptop() + serial = self.env['stock.production.lot'].create({'product_id': self.laptop.id}) + + product_produce = self.env['mrp.product.produce'].with_context({ + 'active_id': mo_laptop.id, + 'active_ids': [mo_laptop.id], + }).create({ + "qty_producing": 1.0, + "final_lot_id": serial.id, + }) + product_produce.do_produce() + mo_laptop.button_mark_done() + + # We check if the laptop go in the depot and not in the stock + move = mo_laptop.move_finished_ids + location_dest = move.move_line_ids.location_dest_id + self.assertEqual(location_dest.id, self.depot_location.id) + self.assertNotEqual(location_dest.id, self.stock_location.id) class TestKitPicking(common.TestMrpCommon): def setUp(self): diff --git a/addons/note/i18n/note.pot b/addons/note/i18n/note.pot index bb74c6102fc..fc010726612 100644 --- a/addons/note/i18n/note.pot +++ b/addons/note/i18n/note.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:59+0000\n" -"PO-Revision-Date: 2019-01-16 07:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -97,7 +97,7 @@ msgstr "" #. module: note #: model:ir.model.fields,help:note.field_mail_activity_type__category -msgid "Categories may trigger specific behavior like opening calendar view" +msgid "Categories may trigger specific behavior like opening calendar view or automatically mark as done when a document is uploaded" msgstr "" #. module: note @@ -366,11 +366,6 @@ msgid "Number of unread messages" msgstr "" #. module: note -#: selection:mail.activity.type,category:0 -msgid "Other" -msgstr "" - -#. module: note #: selection:note.note,activity_state:0 msgid "Overdue" msgstr "" @@ -473,6 +468,11 @@ msgid "Stages of Users" msgstr "" #. module: note +#: selection:mail.activity.type,category:0 +msgid "Standard" +msgstr "" + +#. module: note #: model:ir.model.fields,help:note.field_note_note__activity_state msgid "Status based on activities\n" "Overdue: Due date is already passed\n" @@ -529,6 +529,11 @@ msgid "Unread Messages Counter" msgstr "" #. module: note +#: selection:mail.activity.type,category:0 +msgid "Upload Document" +msgstr "" + +#. module: note #: model:ir.model.fields,help:note.field_note_stage__sequence msgid "Used to order the note stages" msgstr "" diff --git a/addons/pad/i18n/pad.pot b/addons/pad/i18n/pad.pot index ced74a0f357..80fc5995784 100644 --- a/addons/pad/i18n/pad.pot +++ b/addons/pad/i18n/pad.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-21 13:17+0000\n" -"PO-Revision-Date: 2018-09-21 13:17+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -75,6 +75,11 @@ msgid "Pad Api Key *" msgstr "" #. module: pad +#: model:ir.model,name:pad.model_pad_common +msgid "Pad Common" +msgstr "" + +#. module: pad #: model:ir.model.fields,field_description:pad.field_res_company__pad_server msgid "Pad Server" msgstr "" @@ -85,7 +90,7 @@ msgid "Pad Server *" msgstr "" #. module: pad -#: code:addons/pad/models/pad.py:57 +#: code:addons/pad/models/pad.py:58 #, python-format msgid "Pad creation failed, either there is a problem with your pad server URL or with your connection." msgstr "" @@ -128,8 +133,3 @@ msgstr "" msgid "e.g. beta.primarypad.com" msgstr "" -#. module: pad -#: model:ir.model,name:pad.model_pad_common -msgid "pad.common" -msgstr "" - diff --git a/addons/partner_autocomplete/i18n/partner_autocomplete.pot b/addons/partner_autocomplete/i18n/partner_autocomplete.pot index 3e4b56c2e00..163027a04f7 100644 --- a/addons/partner_autocomplete/i18n/partner_autocomplete.pot +++ b/addons/partner_autocomplete/i18n/partner_autocomplete.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 13.0alpha1+e\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-11-21 11:55+0000\n" -"PO-Revision-Date: 2018-11-21 11:55+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -21,17 +21,6 @@ msgid "(Time Now)" msgstr "" #. module: partner_autocomplete -#: model_terms:ir.ui.view,arch_db:partner_autocomplete.res_config_settings_view_form -msgid "<i class=\"fa fa-arrow-right\"/>\n" -" Buy more credits" -msgstr "" - -#. module: partner_autocomplete -#: model_terms:ir.ui.view,arch_db:partner_autocomplete.res_config_settings_view_form -msgid "<i class=\"fa fa-exclamation-triangle text-warning\"/> &nbsp; You don't have credits to auto-complete companies' data anymore." -msgstr "" - -#. module: partner_autocomplete #: model_terms:ir.ui.view,arch_db:partner_autocomplete.additional_info_template msgid "<i class=\"fa fa-fw mr-2 fa-building text-primary\"/>\n" " <b>Company type:</b>" @@ -92,28 +81,19 @@ msgid "<i class=\"fa fa-fw mr-2 fa-users text-primary\"/>\n" msgstr "" #. module: partner_autocomplete -#: model_terms:ir.ui.view,arch_db:partner_autocomplete.res_config_settings_view_form -msgid "<span>&times;</span>" -msgstr "" - -#. module: partner_autocomplete #: model:ir.model.fields,field_description:partner_autocomplete.field_res_partner__additional_info +#: model:ir.model.fields,field_description:partner_autocomplete.field_res_users__additional_info msgid "Additional info" msgstr "" #. module: partner_autocomplete #. openerp-web -#: code:addons/partner_autocomplete/static/src/xml/partner_autocomplete.xml:18 +#: code:addons/partner_autocomplete/static/src/xml/partner_autocomplete.xml:21 #, python-format msgid "Buy more credits" msgstr "" #. module: partner_autocomplete -#: model_terms:ir.ui.view,arch_db:partner_autocomplete.res_config_settings_view_form -msgid "Close" -msgstr "" - -#. module: partner_autocomplete #: model:ir.model,name:partner_autocomplete.model_res_company msgid "Companies" msgstr "" @@ -121,6 +101,7 @@ msgstr "" #. module: partner_autocomplete #: model:ir.model.fields,field_description:partner_autocomplete.field_res_company__partner_gid #: model:ir.model.fields,field_description:partner_autocomplete.field_res_partner__partner_gid +#: model:ir.model.fields,field_description:partner_autocomplete.field_res_users__partner_gid msgid "Company database ID" msgstr "" @@ -181,7 +162,7 @@ msgstr "" #. module: partner_autocomplete #. openerp-web -#: code:addons/partner_autocomplete/static/src/js/partner_autocomplete_core.js:357 +#: code:addons/partner_autocomplete/static/src/js/partner_autocomplete_core.js:371 #, python-format msgid "Not enough credits for Partner Autocomplete" msgstr "" diff --git a/addons/payment/controllers/portal.py b/addons/payment/controllers/portal.py index 516eb8712a9..55a4d08e4b9 100644 --- a/addons/payment/controllers/portal.py +++ b/addons/payment/controllers/portal.py @@ -66,6 +66,10 @@ class PaymentProcessing(http.Controller): 'success': False, 'error': 'no_tx_found', } + + processed_tx = payment_transaction_ids.filtered('is_processed') + self.remove_payment_transaction(processed_tx) + # create the returned dictionnary result = { 'success': True, diff --git a/addons/payment/i18n/payment.pot b/addons/payment/i18n/payment.pot index b0bda2f60be..5897b1dd34c 100644 --- a/addons/payment/i18n/payment.pot +++ b/addons/payment/i18n/payment.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:59+0000\n" -"PO-Revision-Date: 2019-01-16 07:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -152,6 +152,7 @@ msgstr "" #: model_terms:payment.acquirer,cancel_msg:payment.payment_acquirer_ogone #: model_terms:payment.acquirer,cancel_msg:payment.payment_acquirer_paypal #: model_terms:payment.acquirer,cancel_msg:payment.payment_acquirer_payu +#: model_terms:payment.acquirer,cancel_msg:payment.payment_acquirer_payulatam #: model_terms:payment.acquirer,cancel_msg:payment.payment_acquirer_sips #: model_terms:payment.acquirer,cancel_msg:payment.payment_acquirer_stripe #: model_terms:payment.acquirer,cancel_msg:payment.payment_acquirer_transfer @@ -166,6 +167,7 @@ msgstr "" #: model_terms:payment.acquirer,done_msg:payment.payment_acquirer_ogone #: model_terms:payment.acquirer,done_msg:payment.payment_acquirer_paypal #: model_terms:payment.acquirer,done_msg:payment.payment_acquirer_payu +#: model_terms:payment.acquirer,done_msg:payment.payment_acquirer_payulatam #: model_terms:payment.acquirer,done_msg:payment.payment_acquirer_sips #: model_terms:payment.acquirer,done_msg:payment.payment_acquirer_stripe #: model_terms:payment.acquirer,done_msg:payment.payment_acquirer_transfer @@ -180,6 +182,7 @@ msgstr "" #: model_terms:payment.acquirer,error_msg:payment.payment_acquirer_ogone #: model_terms:payment.acquirer,error_msg:payment.payment_acquirer_paypal #: model_terms:payment.acquirer,error_msg:payment.payment_acquirer_payu +#: model_terms:payment.acquirer,error_msg:payment.payment_acquirer_payulatam #: model_terms:payment.acquirer,error_msg:payment.payment_acquirer_sips #: model_terms:payment.acquirer,error_msg:payment.payment_acquirer_stripe #: model_terms:payment.acquirer,error_msg:payment.payment_acquirer_transfer @@ -194,6 +197,7 @@ msgstr "" #: model_terms:payment.acquirer,pending_msg:payment.payment_acquirer_ogone #: model_terms:payment.acquirer,pending_msg:payment.payment_acquirer_paypal #: model_terms:payment.acquirer,pending_msg:payment.payment_acquirer_payu +#: model_terms:payment.acquirer,pending_msg:payment.payment_acquirer_payulatam #: model_terms:payment.acquirer,pending_msg:payment.payment_acquirer_sips #: model_terms:payment.acquirer,pending_msg:payment.payment_acquirer_stripe msgid "<span><i>Pending,</i> Your online payment has been successfully processed. But your order is not validated yet.</span>" @@ -229,13 +233,13 @@ msgid "A token is required to create a new payment transaction." msgstr "" #. module: payment -#: code:addons/payment/models/payment_acquirer.py:651 +#: code:addons/payment/models/payment_acquirer.py:649 #, python-format msgid "A transaction %s with %s initiated using %s credit card." msgstr "" #. module: payment -#: code:addons/payment/models/payment_acquirer.py:657 +#: code:addons/payment/models/payment_acquirer.py:655 #, python-format msgid "A transaction %s with %s initiated." msgstr "" @@ -452,7 +456,7 @@ msgid "Cannot set-up the payment" msgstr "" #. module: payment -#: code:addons/payment/controllers/portal.py:226 +#: code:addons/payment/controllers/portal.py:233 #, python-format msgid "Cannot setup the payment." msgstr "" @@ -703,7 +707,7 @@ msgstr "" #. module: payment #. openerp-web -#: code:addons/payment/static/src/js/payment_form.js:438 +#: code:addons/payment/static/src/js/payment_form.js:441 #, python-format msgid "Error: " msgstr "" @@ -861,7 +865,7 @@ msgid "Invoice(s)" msgstr "" #. module: payment -#: code:addons/payment/models/payment_acquirer.py:848 +#: code:addons/payment/models/payment_acquirer.py:853 #: model:ir.model.fields,field_description:payment.field_payment_transaction__invoice_ids #, python-format msgid "Invoices" @@ -1003,7 +1007,7 @@ msgid "Method" msgstr "" #. module: payment -#: code:addons/payment/models/payment_acquirer.py:470 +#: code:addons/payment/models/payment_acquirer.py:469 #, python-format msgid "Missing partner reference when trying to create a new payment token" msgstr "" @@ -1029,7 +1033,7 @@ msgid "Never" msgstr "" #. module: payment -#: code:addons/payment/wizards/payment_acquirer_onboarding_wizard.py:127 +#: code:addons/payment/wizards/payment_acquirer_onboarding_wizard.py:129 #, python-format msgid "No manual payment method could be found for this company. Please create one from the Payment Acquirer menu." msgstr "" @@ -1076,7 +1080,7 @@ msgstr "" #. module: payment #. openerp-web -#: code:addons/payment/static/src/js/payment_form.js:442 +#: code:addons/payment/static/src/js/payment_form.js:445 #, python-format msgid "Ok" msgstr "" @@ -1088,38 +1092,38 @@ msgid "Only administrators can access this data." msgstr "" #. module: payment -#: code:addons/payment/models/payment_acquirer.py:717 +#: code:addons/payment/models/payment_acquirer.py:718 #, python-format msgid "Only draft transaction can be authorized." msgstr "" #. module: payment -#: code:addons/payment/models/payment_acquirer.py:708 -#: code:addons/payment/models/payment_acquirer.py:769 +#: code:addons/payment/models/payment_acquirer.py:709 +#: code:addons/payment/models/payment_acquirer.py:770 #, python-format msgid "Only draft transaction can be processed." msgstr "" #. module: payment -#: code:addons/payment/models/payment_acquirer.py:757 +#: code:addons/payment/models/payment_acquirer.py:758 #, python-format msgid "Only draft/authorized transaction can be cancelled." msgstr "" #. module: payment -#: code:addons/payment/models/payment_acquirer.py:726 +#: code:addons/payment/models/payment_acquirer.py:727 #, python-format msgid "Only draft/authorized transaction can be posted." msgstr "" #. module: payment -#: code:addons/payment/models/payment_acquirer.py:1015 +#: code:addons/payment/models/payment_acquirer.py:1021 #, python-format msgid "Only transactions having the capture status can be captured." msgstr "" #. module: payment -#: code:addons/payment/models/payment_acquirer.py:1022 +#: code:addons/payment/models/payment_acquirer.py:1028 #, python-format msgid "Only transactions having the capture status can be voided." msgstr "" @@ -1171,6 +1175,12 @@ msgid "PayPal Email ID" msgstr "" #. module: payment +#: model:payment.acquirer,name:payment.payment_acquirer_payulatam +#: selection:payment.acquirer,provider:0 +msgid "PayUlatam" +msgstr "" + +#. module: payment #: model:payment.acquirer,name:payment.payment_acquirer_payu #: selection:payment.acquirer,provider:0 msgid "PayUmoney" @@ -1281,7 +1291,7 @@ msgid "Payment method set!" msgstr "" #. module: payment -#: code:addons/payment/controllers/portal.py:253 +#: code:addons/payment/controllers/portal.py:260 #, python-format msgid "Payment transaction failed." msgstr "" @@ -1601,7 +1611,7 @@ msgid "Thanks Message" msgstr "" #. module: payment -#: code:addons/payment/models/payment_acquirer.py:868 +#: code:addons/payment/models/payment_acquirer.py:873 #, python-format msgid "The %s payment acquirers are not allowed to manual capture mode!" msgstr "" @@ -1613,37 +1623,43 @@ msgid "The SEPA QR Code informations are not set correctly." msgstr "" #. module: payment -#: code:addons/payment/models/payment_acquirer.py:654 +#: code:addons/payment/models/payment_acquirer.py:652 #, python-format msgid "The customer has selected %s to pay this document." msgstr "" #. module: payment -#: code:addons/payment/models/payment_acquirer.py:671 +#: code:addons/payment/models/payment_acquirer.py:669 #, python-format msgid "The transaction %s with %s for %s has been authorized. Waiting for capture..." msgstr "" #. module: payment -#: code:addons/payment/models/payment_acquirer.py:676 +#: code:addons/payment/models/payment_acquirer.py:674 #, python-format msgid "The transaction %s with %s for %s has been cancelled with the following message: %s" msgstr "" #. module: payment -#: code:addons/payment/models/payment_acquirer.py:679 +#: code:addons/payment/models/payment_acquirer.py:680 #, python-format msgid "The transaction %s with %s for %s has been cancelled." msgstr "" #. module: payment -#: code:addons/payment/models/payment_acquirer.py:673 +#: code:addons/payment/models/payment_acquirer.py:671 #, python-format msgid "The transaction %s with %s for %s has been confirmed. The related payment is posted: %s" msgstr "" #. module: payment -#: code:addons/payment/models/payment_acquirer.py:669 +#: code:addons/payment/models/payment_acquirer.py:677 +#, python-format +msgid "The transaction %s with %s for %s has return failed with the following error message: %s" +msgstr "" + +#. module: payment +#: code:addons/payment/models/payment_acquirer.py:667 #, python-format msgid "The transaction %s with %s for %s is pending." msgstr "" @@ -1752,7 +1768,7 @@ msgid "Waiting for payment" msgstr "" #. module: payment -#: code:addons/payment/models/payment_acquirer.py:660 +#: code:addons/payment/models/payment_acquirer.py:658 #, python-format msgid "Waiting for payment confirmation..." msgstr "" @@ -1842,7 +1858,7 @@ msgid "You can click here to be redirected to the confirmation page." msgstr "" #. module: payment -#: code:addons/payment/wizards/payment_acquirer_onboarding_wizard.py:135 +#: code:addons/payment/wizards/payment_acquirer_onboarding_wizard.py:143 #, python-format msgid "You have to set a journal for your payment acquirer %s." msgstr "" @@ -1894,6 +1910,11 @@ msgid "You will be redirected to the Ingenico website after clicking on the paym msgstr "" #. module: payment +#: model_terms:payment.acquirer,pre_msg:payment.payment_acquirer_payulatam +msgid "You will be redirected to the PayUlatam website after clicking on the payment button." +msgstr "" + +#. module: payment #: model_terms:payment.acquirer,pre_msg:payment.payment_acquirer_payu msgid "You will be redirected to the PayUmoney website after clicking on the payment button." msgstr "" diff --git a/addons/payment/models/payment_acquirer.py b/addons/payment/models/payment_acquirer.py index fc7a69e4784..0f2ce5d222a 100644 --- a/addons/payment/models/payment_acquirer.py +++ b/addons/payment/models/payment_acquirer.py @@ -355,6 +355,7 @@ class PaymentAcquirer(models.Model): if values is None: values = {} + values.setdefault('return_url', '/payment/process') # reference and amount values.setdefault('reference', reference) amount = float_round(amount, 2) @@ -446,7 +447,6 @@ class PaymentAcquirer(models.Model): 'context': self._context, 'type': values.get('type') or 'form', }) - values.setdefault('return_url', False) _logger.info('payment.acquirer.render: <%s> values rendered for form payment:\n%s', self.provider, pprint.pformat(values)) return self.view_template_id.render(values, engine='ir.qweb') @@ -787,10 +787,13 @@ class PaymentTransaction(models.Model): def _cron_post_process_after_done(self): if not self: ten_minutes_ago = datetime.now() - relativedelta.relativedelta(minutes=10) + # we don't want to forever try to process a transaction that doesn't go through + retry_limit_date = datetime.now() - relativedelta.relativedelta(days=2) # we retrieve all the payment tx that need to be post processed self = self.search([('state', '=', 'done'), ('is_processed', '=', False), ('date', '<=', ten_minutes_ago), + ('date', '>=', retry_limit_date), ]) for tx in self: try: diff --git a/addons/payment/static/src/js/payment_processing.js b/addons/payment/static/src/js/payment_processing.js index 0ee3e934176..0fcfbc7ce81 100644 --- a/addons/payment/static/src/js/payment_processing.js +++ b/addons/payment/static/src/js/payment_processing.js @@ -84,14 +84,16 @@ odoo.define('payment.processing', function (require) { 'tx_cancel': [], 'tx_error': [], }; + + if (transactions.length > 0 && transactions[0].acquirer_provider == 'transfer') { + window.location = transactions[0].return_url; + return; + } + // group the transaction according to their state transactions.forEach(function (tx) { var key = 'tx_' + tx.state; if(key in render_values) { - if (tx.acquirer_provider === 'transfer') { - window.location = tx.return_url; - return; - } render_values[key].push(tx); } }); diff --git a/addons/payment_adyen/i18n/payment_adyen.pot b/addons/payment_adyen/i18n/payment_adyen.pot index eb17979d1ca..65f9eb49c33 100644 --- a/addons/payment_adyen/i18n/payment_adyen.pot +++ b/addons/payment_adyen/i18n/payment_adyen.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-18 09:49+0000\n" -"PO-Revision-Date: 2018-09-18 09:49+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -88,6 +88,11 @@ msgstr "" #. module: payment_adyen #: selection:payment.acquirer,provider:0 +msgid "PayUlatam" +msgstr "" + +#. module: payment_adyen +#: selection:payment.acquirer,provider:0 msgid "PayUmoney" msgstr "" diff --git a/addons/payment_authorize/i18n/payment_authorize.pot b/addons/payment_authorize/i18n/payment_authorize.pot index fbb5bde0a7f..45d6e205c10 100644 --- a/addons/payment_authorize/i18n/payment_authorize.pot +++ b/addons/payment_authorize/i18n/payment_authorize.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-21 13:17+0000\n" -"PO-Revision-Date: 2018-09-21 13:17+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -41,7 +41,7 @@ msgid "Authorize.net Profile ID" msgstr "" #. module: payment_authorize -#: code:addons/payment_authorize/models/payment.py:177 +#: code:addons/payment_authorize/models/payment.py:186 #, python-format msgid "Authorize: received data with missing reference (%s) or trans_id (%s) or fingerprint (%s)" msgstr "" @@ -83,7 +83,7 @@ msgid "If you don't have any account, please ask your salesperson to update your msgstr "" #. module: payment_authorize -#: code:addons/payment_authorize/models/payment.py:261 +#: code:addons/payment_authorize/models/payment.py:270 #, python-format msgid "Invalid token found: the Authorize profile is missing.Please make sure the token has a valid acquirer reference." msgstr "" @@ -100,6 +100,11 @@ msgstr "" #. module: payment_authorize #: selection:payment.acquirer,provider:0 +msgid "PayUlatam" +msgstr "" + +#. module: payment_authorize +#: selection:payment.acquirer,provider:0 msgid "PayUmoney" msgstr "" @@ -157,7 +162,7 @@ msgid "Stripe" msgstr "" #. module: payment_authorize -#: code:addons/payment_authorize/models/payment.py:365 +#: code:addons/payment_authorize/models/payment.py:374 #, python-format msgid "The Customer Profile creation in Authorize.NET failed." msgstr "" diff --git a/addons/payment_buckaroo/i18n/payment_buckaroo.pot b/addons/payment_buckaroo/i18n/payment_buckaroo.pot index e7bf7ab402a..32e9cdd1118 100644 --- a/addons/payment_buckaroo/i18n/payment_buckaroo.pot +++ b/addons/payment_buckaroo/i18n/payment_buckaroo.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-18 09:49+0000\n" -"PO-Revision-Date: 2018-09-18 09:49+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -72,6 +72,11 @@ msgstr "" #. module: payment_buckaroo #: selection:payment.acquirer,provider:0 +msgid "PayUlatam" +msgstr "" + +#. module: payment_buckaroo +#: selection:payment.acquirer,provider:0 msgid "PayUmoney" msgstr "" diff --git a/addons/payment_ogone/i18n/payment_ogone.pot b/addons/payment_ogone/i18n/payment_ogone.pot index 7098d8e651a..b25f4d9abab 100644 --- a/addons/payment_ogone/i18n/payment_ogone.pot +++ b/addons/payment_ogone/i18n/payment_ogone.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-21 13:17+0000\n" -"PO-Revision-Date: 2018-09-21 13:17+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -122,6 +122,11 @@ msgstr "" #. module: payment_ogone #: selection:payment.acquirer,provider:0 +msgid "PayUlatam" +msgstr "" + +#. module: payment_ogone +#: selection:payment.acquirer,provider:0 msgid "PayUmoney" msgstr "" diff --git a/addons/payment_paypal/i18n/payment_paypal.pot b/addons/payment_paypal/i18n/payment_paypal.pot index a4947af10b1..d34cc5e579a 100644 --- a/addons/payment_paypal/i18n/payment_paypal.pot +++ b/addons/payment_paypal/i18n/payment_paypal.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-18 09:49+0000\n" -"PO-Revision-Date: 2018-09-18 09:49+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -67,6 +67,11 @@ msgstr "" #. module: payment_paypal #: selection:payment.acquirer,provider:0 +msgid "PayUlatam" +msgstr "" + +#. module: payment_paypal +#: selection:payment.acquirer,provider:0 msgid "PayUmoney" msgstr "" diff --git a/addons/payment_payulatam/i18n/payment_payulatam.pot b/addons/payment_payulatam/i18n/payment_payulatam.pot new file mode 100644 index 00000000000..3061829421a --- /dev/null +++ b/addons/payment_payulatam/i18n/payment_payulatam.pot @@ -0,0 +1,120 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * payment_payulatam +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~12.2\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-03-20 14:19+0000\n" +"PO-Revision-Date: 2019-03-20 14:19+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_payulatam +#: selection:payment.acquirer,provider:0 +msgid "Adyen" +msgstr "" + +#. module: payment_payulatam +#: selection:payment.acquirer,provider:0 +msgid "Authorize.Net" +msgstr "" + +#. module: payment_payulatam +#: selection:payment.acquirer,provider:0 +msgid "Buckaroo" +msgstr "" + +#. module: payment_payulatam +#: selection:payment.acquirer,provider:0 +msgid "Manual Configuration" +msgstr "" + +#. module: payment_payulatam +#: selection:payment.acquirer,provider:0 +msgid "Ogone" +msgstr "" + +#. module: payment_payulatam +#: selection:payment.acquirer,provider:0 +msgid "PayUlatam" +msgstr "" + +#. module: payment_payulatam +#: model:ir.model.fields,field_description:payment_payulatam.field_payment_acquirer__payulatam_api_key +msgid "PayUlatam API Key" +msgstr "" + +#. module: payment_payulatam +#: model:ir.model.fields,field_description:payment_payulatam.field_payment_acquirer__payulatam_account_id +msgid "PayUlatam Account ID" +msgstr "" + +#. module: payment_payulatam +#: model:ir.model.fields,field_description:payment_payulatam.field_payment_acquirer__payulatam_merchant_id +msgid "PayUlatam Merchant ID" +msgstr "" + +#. module: payment_payulatam +#: code:addons/payment_payulatam/models/payment.py:91 +#, python-format +msgid "PayUlatam: received data for reference %s; multiple orders found" +msgstr "" + +#. module: payment_payulatam +#: code:addons/payment_payulatam/models/payment.py:88 +#, python-format +msgid "PayUlatam: received data for reference %s; no order found" +msgstr "" + +#. module: payment_payulatam +#: code:addons/payment_payulatam/models/payment.py:83 +#, python-format +msgid "PayUlatam: received data with missing reference (%s) or transaction id (%s) or sign (%s)" +msgstr "" + +#. module: payment_payulatam +#: selection:payment.acquirer,provider:0 +msgid "PayUmoney" +msgstr "" + +#. module: payment_payulatam +#: model:ir.model,name:payment_payulatam.model_payment_acquirer +msgid "Payment Acquirer" +msgstr "" + +#. module: payment_payulatam +#: model:ir.model,name:payment_payulatam.model_payment_transaction +msgid "Payment Transaction" +msgstr "" + +#. module: payment_payulatam +#: selection:payment.acquirer,provider:0 +msgid "Paypal" +msgstr "" + +#. module: payment_payulatam +#: model:ir.model.fields,field_description:payment_payulatam.field_payment_acquirer__provider +msgid "Provider" +msgstr "" + +#. module: payment_payulatam +#: selection:payment.acquirer,provider:0 +msgid "Sips" +msgstr "" + +#. module: payment_payulatam +#: selection:payment.acquirer,provider:0 +msgid "Stripe" +msgstr "" + +#. module: payment_payulatam +#: selection:payment.acquirer,provider:0 +msgid "Wire Transfer" +msgstr "" + diff --git a/addons/payment_payumoney/i18n/payment_payumoney.pot b/addons/payment_payumoney/i18n/payment_payumoney.pot index c6e72a5766e..32ff31bbce5 100644 --- a/addons/payment_payumoney/i18n/payment_payumoney.pot +++ b/addons/payment_payumoney/i18n/payment_payumoney.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-18 09:49+0000\n" -"PO-Revision-Date: 2018-09-18 09:49+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -52,6 +52,11 @@ msgstr "" #. module: payment_payumoney #: selection:payment.acquirer,provider:0 +msgid "PayUlatam" +msgstr "" + +#. module: payment_payumoney +#: selection:payment.acquirer,provider:0 msgid "PayUmoney" msgstr "" diff --git a/addons/payment_sips/i18n/payment_sips.pot b/addons/payment_sips/i18n/payment_sips.pot index a50d5c5dc27..86a86231c11 100644 --- a/addons/payment_sips/i18n/payment_sips.pot +++ b/addons/payment_sips/i18n/payment_sips.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-18 09:49+0000\n" -"PO-Revision-Date: 2018-09-18 09:49+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,13 +16,13 @@ msgstr "" "Plural-Forms: \n" #. module: payment_sips -#: code:addons/payment_sips/models/payment.py:164 +#: code:addons/payment_sips/models/payment.py:163 #, python-format msgid "; multiple order found" msgstr "" #. module: payment_sips -#: code:addons/payment_sips/models/payment.py:162 +#: code:addons/payment_sips/models/payment.py:161 #, python-format msgid "; no order found" msgstr "" @@ -43,13 +43,13 @@ msgid "Buckaroo" msgstr "" #. module: payment_sips -#: code:addons/payment_sips/models/payment.py:75 +#: code:addons/payment_sips/models/payment.py:76 #, python-format msgid "Currency not supported by Wordline" msgstr "" #. module: payment_sips -#: code:addons/payment_sips/models/payment.py:56 +#: code:addons/payment_sips/models/payment.py:57 #, python-format msgid "Incorrect payment acquirer provider" msgstr "" @@ -76,6 +76,11 @@ msgstr "" #. module: payment_sips #: selection:payment.acquirer,provider:0 +msgid "PayUlatam" +msgstr "" + +#. module: payment_sips +#: selection:payment.acquirer,provider:0 msgid "PayUmoney" msgstr "" @@ -115,7 +120,7 @@ msgid "Sips" msgstr "" #. module: payment_sips -#: code:addons/payment_sips/models/payment.py:160 +#: code:addons/payment_sips/models/payment.py:159 #, python-format msgid "Sips: received data for reference %s" msgstr "" diff --git a/addons/payment_stripe/i18n/payment_stripe.pot b/addons/payment_stripe/i18n/payment_stripe.pot index 1e70ca2a8ca..16b83b04500 100644 --- a/addons/payment_stripe/i18n/payment_stripe.pot +++ b/addons/payment_stripe/i18n/payment_stripe.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-21 13:17+0000\n" -"PO-Revision-Date: 2018-09-21 13:17+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -100,6 +100,11 @@ msgstr "" #. module: payment_stripe #: selection:payment.acquirer,provider:0 +msgid "PayUlatam" +msgstr "" + +#. module: payment_stripe +#: selection:payment.acquirer,provider:0 msgid "PayUmoney" msgstr "" diff --git a/addons/payment_transfer/i18n/payment_transfer.pot b/addons/payment_transfer/i18n/payment_transfer.pot index a0f7b40d60b..f13768d8440 100644 --- a/addons/payment_transfer/i18n/payment_transfer.pot +++ b/addons/payment_transfer/i18n/payment_transfer.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-18 09:49+0000\n" -"PO-Revision-Date: 2018-09-18 09:49+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -78,6 +78,11 @@ msgstr "" #. module: payment_transfer #: selection:payment.acquirer,provider:0 +msgid "PayUlatam" +msgstr "" + +#. module: payment_transfer +#: selection:payment.acquirer,provider:0 msgid "PayUmoney" msgstr "" diff --git a/addons/point_of_sale/i18n/point_of_sale.pot b/addons/point_of_sale/i18n/point_of_sale.pot index 70010dfd1e5..d91f022bf46 100644 --- a/addons/point_of_sale/i18n/point_of_sale.pot +++ b/addons/point_of_sale/i18n/point_of_sale.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:59+0000\n" -"PO-Revision-Date: 2019-01-16 07:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,8 +16,8 @@ msgstr "" "Plural-Forms: \n" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_order.py:951 -#: code:addons/point_of_sale/models/pos_order.py:963 +#: code:addons/point_of_sale/models/pos_order.py:985 +#: code:addons/point_of_sale/models/pos_order.py:1071 #, python-format msgid " REFUND" msgstr "" @@ -274,14 +274,14 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:2032 +#: code:addons/point_of_sale/static/src/js/screens.js:2057 #, python-format msgid "? Clicking \"Confirm\" will validate the payment." msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:1249 +#: code:addons/point_of_sale/static/src/js/screens.js:1279 #, python-format msgid "A Customer Name Is Required" msgstr "" @@ -361,7 +361,7 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:1882 +#: code:addons/point_of_sale/static/src/js/screens.js:1912 #, python-format msgid "Add Tip" msgstr "" @@ -446,7 +446,7 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/models.js:1235 +#: code:addons/point_of_sale/static/src/js/models.js:1243 #, python-format msgid "An error occurred when loading product prices. Make sure all pricelists are available in the POS." msgstr "" @@ -457,14 +457,14 @@ msgid "An internal identification of the point of sale." msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_session.py:161 +#: code:addons/point_of_sale/models/pos_session.py:157 #, python-format msgid "Another session is already opened for this point of sale." msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:2024 +#: code:addons/point_of_sale/static/src/js/screens.js:2049 #, python-format msgid "Are you sure that the customer wants to pay" msgstr "" @@ -570,6 +570,7 @@ msgstr "" #. openerp-web #: code:addons/point_of_sale/static/src/xml/pos.xml:387 #: code:addons/point_of_sale/static/src/xml/pos.xml:450 +#: model:ir.model.fields,field_description:point_of_sale.field_res_partner__barcode #: model_terms:ir.ui.view,arch_db:point_of_sale.report_userlabel #, python-format msgid "Barcode" @@ -647,7 +648,7 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:2013 +#: code:addons/point_of_sale/static/src/js/screens.js:2038 #, python-format msgid "Cannot return change without a cash payment method" msgstr "" @@ -663,7 +664,7 @@ msgid "Cash Box Out" msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_session.py:318 +#: code:addons/point_of_sale/models/pos_session.py:316 #: model:ir.model.fields,field_description:point_of_sale.field_pos_config__cash_control #, python-format msgid "Cash Control" @@ -680,7 +681,7 @@ msgid "Cash Register" msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_session.py:142 +#: code:addons/point_of_sale/models/pos_session.py:138 #, python-format msgid "Cash control can only be applied to cash journals." msgstr "" @@ -751,14 +752,14 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:1194 +#: code:addons/point_of_sale/static/src/js/screens.js:1224 #, python-format msgid "Change Customer" msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:1882 +#: code:addons/point_of_sale/static/src/js/screens.js:1912 #, python-format msgid "Change Tip" msgstr "" @@ -807,7 +808,7 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:2073 +#: code:addons/point_of_sale/static/src/js/screens.js:2109 #, python-format msgid "Check your internet connection and try again." msgstr "" @@ -979,7 +980,7 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:1358 +#: code:addons/point_of_sale/static/src/js/screens.js:1388 #, python-format msgid "Could Not Read Image" msgstr "" @@ -1060,7 +1061,7 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:1893 +#: code:addons/point_of_sale/static/src/js/screens.js:1923 #: code:addons/point_of_sale/static/src/xml/pos.xml:148 #: code:addons/point_of_sale/static/src/xml/pos.xml:152 #: code:addons/point_of_sale/static/src/xml/pos.xml:678 @@ -1083,8 +1084,8 @@ msgid "Customer Facing Display" msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_order.py:627 -#: code:addons/point_of_sale/models/pos_order.py:678 +#: code:addons/point_of_sale/models/pos_order.py:660 +#: code:addons/point_of_sale/models/pos_order.py:711 #, python-format msgid "Customer Invoice" msgstr "" @@ -1219,7 +1220,7 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:1197 +#: code:addons/point_of_sale/static/src/js/screens.js:1227 #, python-format msgid "Deselect Customer" msgstr "" @@ -1441,7 +1442,7 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:1995 +#: code:addons/point_of_sale/static/src/js/screens.js:2020 #, python-format msgid "Empty Order" msgstr "" @@ -1497,7 +1498,7 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:1284 +#: code:addons/point_of_sale/static/src/js/screens.js:1314 #, python-format msgid "Error: Could not Save Changes" msgstr "" @@ -1710,7 +1711,7 @@ msgid "In Progress" msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_order.py:609 +#: code:addons/point_of_sale/models/pos_order.py:642 #, python-format msgid "In order to delete a sale, it must be new or cancelled." msgstr "" @@ -1965,7 +1966,7 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/models.js:2425 +#: code:addons/point_of_sale/static/src/js/models.js:2442 #, python-format msgid "Lot/Serial Number(s) Required" msgstr "" @@ -2109,7 +2110,7 @@ msgid "Next Order" msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_order.py:1173 +#: code:addons/point_of_sale/models/pos_order.py:1231 #, python-format msgid "No Taxes" msgstr "" @@ -2132,6 +2133,13 @@ msgid "No orders found" msgstr "" #. module: point_of_sale +#: code:addons/point_of_sale/models/pos_session.py:188 +#, python-format +msgid "No payment method configured! \n" +"Either no Chart of Account is installed or no payment method is configured for this POS." +msgstr "" + +#. module: point_of_sale #: code:addons/point_of_sale/wizard/pos_open_statement.py:24 #, python-format msgid "No sequence defined on the journal" @@ -2144,7 +2152,7 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:2126 +#: code:addons/point_of_sale/static/src/js/screens.js:2162 #: code:addons/point_of_sale/static/src/xml/pos.xml:368 #, python-format msgid "None" @@ -2214,7 +2222,7 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:1344 +#: code:addons/point_of_sale/static/src/js/screens.js:1374 #, python-format msgid "Only web-compatible Image formats such as .png or .jpeg are supported" msgstr "" @@ -2308,8 +2316,8 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/models.js:1998 -#: code:addons/point_of_sale/static/src/js/models.js:2038 +#: code:addons/point_of_sale/static/src/js/models.js:2015 +#: code:addons/point_of_sale/static/src/js/models.js:2055 #, python-format msgid "Order " msgstr "" @@ -2355,7 +2363,7 @@ msgid "Order Sequence Number" msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_order.py:639 +#: code:addons/point_of_sale/models/pos_order.py:672 #, python-format msgid "Order is not paid." msgstr "" @@ -2425,7 +2433,6 @@ msgstr "" #. module: point_of_sale #: model:ir.model.fields,field_description:point_of_sale.field_digest_digest__kpi_pos_total -#: model_terms:ir.ui.view,arch_db:point_of_sale.view_partner_property_form msgid "POS Sales" msgstr "" @@ -2601,26 +2608,33 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:2023 +#: code:addons/point_of_sale/static/src/js/screens.js:2048 #, python-format msgid "Please Confirm Large Amount" msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/models.js:1910 +#: code:addons/point_of_sale/static/src/js/models.js:1927 #, python-format msgid "Please configure a payment method in your POS." msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_order.py:374 +#: code:addons/point_of_sale/models/pos_order.py:276 #, python-format msgid "Please define income account for this product: \"%s\" (id:%d)." msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_order.py:655 +#. openerp-web +#: code:addons/point_of_sale/static/src/js/screens.js:2097 +#, python-format +msgid "Please print the invoice from the backend" +msgstr "" + +#. module: point_of_sale +#: code:addons/point_of_sale/models/pos_order.py:688 #, python-format msgid "Please provide a partner for the sale." msgstr "" @@ -2634,7 +2648,7 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:2064 +#: code:addons/point_of_sale/static/src/js/screens.js:2089 #, python-format msgid "Please select the Customer" msgstr "" @@ -2656,11 +2670,17 @@ msgid "PoS Category" msgstr "" #. module: point_of_sale +#: model_terms:ir.ui.view,arch_db:point_of_sale.view_partner_property_form #: model:stock.picking.type,name:point_of_sale.picking_type_posout msgid "PoS Orders" msgstr "" #. module: point_of_sale +#: model_terms:ir.ui.view,arch_db:point_of_sale.view_partner_property_form +msgid "Point Of Sale" +msgstr "" + +#. module: point_of_sale #: model:ir.actions.act_window,name:point_of_sale.action_pos_config_kanban #: model:ir.actions.act_window,name:point_of_sale.action_pos_config_pos #: model:ir.model.fields,field_description:point_of_sale.field_pos_order__config_id @@ -2780,6 +2800,12 @@ msgid "Pos Config" msgstr "" #. module: point_of_sale +#: model:ir.model.fields,field_description:point_of_sale.field_res_partner__pos_order_ids +#: model:ir.model.fields,field_description:point_of_sale.field_res_users__pos_order_ids +msgid "Pos Order" +msgstr "" + +#. module: point_of_sale #: model:ir.model.fields,field_description:point_of_sale.field_res_partner__pos_order_count #: model:ir.model.fields,field_description:point_of_sale.field_res_users__pos_order_count msgid "Pos Order Count" @@ -2867,7 +2893,7 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:2214 +#: code:addons/point_of_sale/static/src/js/screens.js:2250 #: code:addons/point_of_sale/static/src/xml/pos.xml:395 #: code:addons/point_of_sale/static/src/xml/pos.xml:468 #: model:ir.model.fields,field_description:point_of_sale.field_pos_order__pricelist_id @@ -2937,14 +2963,14 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:1553 +#: code:addons/point_of_sale/static/src/js/screens.js:1583 #, python-format msgid "Printing is not supported on some android browsers" msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:1554 +#: code:addons/point_of_sale/static/src/js/screens.js:1584 #, python-format msgid "Printing is not supported on some android browsers due to no default printing protocol is available. It is possible to print your tickets by making use of an IoT Box." msgstr "" @@ -3167,7 +3193,7 @@ msgid "Resume" msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_order.py:972 +#: code:addons/point_of_sale/models/pos_order.py:1010 #: model_terms:ir.ui.view,arch_db:point_of_sale.view_pos_pos_form #, python-format msgid "Return Products" @@ -3286,20 +3312,20 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:2202 +#: code:addons/point_of_sale/static/src/js/screens.js:2238 #, python-format msgid "Select pricelist" msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:2137 +#: code:addons/point_of_sale/static/src/js/screens.js:2173 #, python-format msgid "Select tax" msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_order.py:263 +#: code:addons/point_of_sale/models/pos_order.py:343 #, python-format msgid "Selected orders do not have the same session!" msgstr "" @@ -3342,7 +3368,7 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:2077 +#: code:addons/point_of_sale/static/src/js/screens.js:2113 #, python-format msgid "Server Error" msgstr "" @@ -3387,7 +3413,7 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:1192 +#: code:addons/point_of_sale/static/src/js/screens.js:1222 #, python-format msgid "Set Customer" msgstr "" @@ -3658,8 +3684,8 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/models/pos_order.py:417 -#: code:addons/point_of_sale/static/src/js/screens.js:2156 +#: code:addons/point_of_sale/models/pos_order.py:319 +#: code:addons/point_of_sale/static/src/js/screens.js:2192 #: model:ir.model,name:point_of_sale.model_account_tax #, python-format msgid "Tax" @@ -3747,7 +3773,7 @@ msgid "Tendered" msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_order.py:356 +#: code:addons/point_of_sale/models/pos_order.py:433 #, python-format msgid "The POS order must have lines when calling this method" msgstr "" @@ -3784,7 +3810,7 @@ msgid "The invoice journal must be in the same currency as the Sales Journal or msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_session.py:284 +#: code:addons/point_of_sale/models/pos_session.py:282 #, python-format msgid "The journal type for your payment method should be bank or cash." msgstr "" @@ -3808,19 +3834,26 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:2067 +#: code:addons/point_of_sale/static/src/js/screens.js:2108 #, python-format msgid "The order could not be sent" msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:2078 +#: code:addons/point_of_sale/static/src/js/screens.js:2119 #, python-format msgid "The order could not be sent to the server due to an unknown error" msgstr "" #. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/js/screens.js:2098 +#, python-format +msgid "The order has been synchronized earlier. Please make the invoice from the backend for the order: " +msgstr "" + +#. module: point_of_sale #: model:ir.model.fields,help:point_of_sale.field_pos_config__iface_precompute_cash msgid "The payment input will behave similarily to bank payment input, and will be prefilled with the exact due amount." msgstr "" @@ -3853,7 +3886,7 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:1359 +#: code:addons/point_of_sale/static/src/js/screens.js:1389 #, python-format msgid "The provided file could not be read due to an unknown error" msgstr "" @@ -3882,7 +3915,7 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:2078 +#: code:addons/point_of_sale/static/src/js/screens.js:2114 #, python-format msgid "The server encountered an error while receiving your order." msgstr "" @@ -3923,7 +3956,7 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:2014 +#: code:addons/point_of_sale/static/src/js/screens.js:2039 #, python-format msgid "There is no cash payment method available in this point of sale to handle the change.\n" "\n" @@ -3937,20 +3970,20 @@ msgid "There is no cash register for this PoS Session" msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_order.py:906 +#: code:addons/point_of_sale/models/pos_order.py:936 #, python-format msgid "There is no receivable account defined to make payment for the partner: \"%s\" (id:%d)." msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_order.py:904 +#: code:addons/point_of_sale/models/pos_order.py:934 #, python-format msgid "There is no receivable account defined to make payment." msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:1996 +#: code:addons/point_of_sale/static/src/js/screens.js:2021 #, python-format msgid "There must be at least one product in your order before it can be validated" msgstr "" @@ -3961,6 +3994,11 @@ msgid "This adds the choice of a currency on pricelists." msgstr "" #. module: point_of_sale +#: sql_constraint:res.partner:0 +msgid "This barcode is already assigned to another contact. Please make sure you assign a unique barcode to this contact." +msgstr "" + +#. module: point_of_sale #: model:ir.model.fields,field_description:point_of_sale.field_account_cashbox_line__default_pos_id msgid "This cashbox line is used by default when opening or closing a balance for this point of sale" msgstr "" @@ -3986,7 +4024,7 @@ msgid "This field is there to pass the id of the pos user group to the point of msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_order.py:663 +#: code:addons/point_of_sale/models/pos_order.py:696 #, python-format msgid "This invoice has been created from the point of sale session: <a href=# data-oe-model=pos.order data-oe-id=%d>%s</a>" msgstr "" @@ -4031,7 +4069,7 @@ msgid "This tax is applied to any new product created in the catalog." msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_order.py:767 +#: code:addons/point_of_sale/models/pos_order.py:800 #, python-format msgid "This transfer has been created from the point of sale session: <a href=# data-oe-model=pos.order data-oe-id=%d>%s</a>" msgstr "" @@ -4071,7 +4109,7 @@ msgid "To record new orders, start a new session." msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_order.py:947 +#: code:addons/point_of_sale/models/pos_order.py:1001 #, python-format msgid "To return product(s), you need to open a session that will be used to register the refund." msgstr "" @@ -4135,7 +4173,7 @@ msgid "Total:" msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_order.py:453 +#: code:addons/point_of_sale/models/pos_order.py:464 #, python-format msgid "Trade Receivables" msgstr "" @@ -4146,7 +4184,7 @@ msgid "Type" msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_session.py:179 +#: code:addons/point_of_sale/models/pos_session.py:175 #, python-format msgid "Unable to open the session. You have to assign a sales journal to your point of sale." msgstr "" @@ -4185,14 +4223,14 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:2082 +#: code:addons/point_of_sale/static/src/js/screens.js:2118 #, python-format msgid "Unknown Error" msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:1343 +#: code:addons/point_of_sale/static/src/js/screens.js:1373 #, python-format msgid "Unsupported File Format" msgstr "" @@ -4208,6 +4246,11 @@ msgid "Use Existing Lots/Serial Numbers" msgstr "" #. module: point_of_sale +#: model:ir.model.fields,help:point_of_sale.field_res_partner__barcode +msgid "Use a barcode to identify this contact from the Point of Sale." +msgstr "" + +#. module: point_of_sale #: model_terms:ir.ui.view,arch_db:point_of_sale.pos_config_view_form msgid "Use a default specific tax regime" msgstr "" @@ -4348,20 +4391,20 @@ msgid "You can define another list of available currencies on the\n" msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_order.py:599 +#: code:addons/point_of_sale/models/pos_order.py:632 #, python-format msgid "You cannot change the partner of a POS order for which an invoice has already been issued." msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_session.py:34 +#: code:addons/point_of_sale/models/pos_session.py:30 #, python-format msgid "You cannot confirm all orders of this session, because they have not the 'paid' status.\n" "{reference} is in state {state}, total amount: {total}, paid: {paid}" msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_session.py:152 +#: code:addons/point_of_sale/models/pos_session.py:148 #, python-format msgid "You cannot create two active sessions with the same responsible." msgstr "" @@ -4374,7 +4417,7 @@ msgid "You cannot delete a product saleable in point of sale while a session is msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_session.py:300 +#: code:addons/point_of_sale/models/pos_session.py:298 #, python-format msgid "You cannot use the session of another user. This session is owned by %s. Please first close this one to use this point of sale." msgstr "" @@ -4386,26 +4429,26 @@ msgid "You have to define which payment method must be available in the point of msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_order.py:920 +#: code:addons/point_of_sale/models/pos_order.py:950 #, python-format msgid "You have to open at least one cashbox." msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_order.py:1067 +#: code:addons/point_of_sale/models/pos_order.py:1125 #, python-format msgid "You have to select a pricelist in the sale form !\n" "Please set one before choosing a product." msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_order.py:1081 +#: code:addons/point_of_sale/models/pos_order.py:1139 #, python-format msgid "You have to select a pricelist in the sale form." msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_session.py:27 +#: code:addons/point_of_sale/models/pos_session.py:24 #, python-format msgid "You have to set a Sale Journal for the POS:%s" msgstr "" @@ -4430,13 +4473,13 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:2065 +#: code:addons/point_of_sale/static/src/js/screens.js:2090 #, python-format msgid "You need to select the customer before you can invoice an order." msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_session.py:167 +#: code:addons/point_of_sale/models/pos_session.py:163 #, python-format msgid "You should assign a Point of Sale to your session." msgstr "" @@ -4450,13 +4493,13 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:1278 +#: code:addons/point_of_sale/static/src/js/screens.js:1308 #, python-format msgid "Your Internet connection is probably down." msgstr "" #. module: point_of_sale -#: code:addons/point_of_sale/models/pos_session.py:282 +#: code:addons/point_of_sale/models/pos_session.py:280 #, python-format msgid "Your ending balance is too different from the theoretical cash closing (%.2f), the maximum allowed is: %.2f. You can contact your manager to force it." msgstr "" @@ -4538,7 +4581,7 @@ msgstr "" #. module: point_of_sale #. openerp-web -#: code:addons/point_of_sale/static/src/js/screens.js:2028 +#: code:addons/point_of_sale/static/src/js/screens.js:2053 #, python-format msgid "for an order of" msgstr "" diff --git a/addons/point_of_sale/models/pos_order.py b/addons/point_of_sale/models/pos_order.py index 96dcc815c51..9fb3de41127 100644 --- a/addons/point_of_sale/models/pos_order.py +++ b/addons/point_of_sale/models/pos_order.py @@ -901,6 +901,7 @@ class PosOrder(models.Model): for pack_lot in pack_lots: lot_id, qty = pack_lot['lot_id'], pack_lot['qty'] self.env['stock.move.line'].create({ + 'picking_id': move.picking_id.id, 'move_id': move.id, 'product_id': move.product_id.id, 'product_uom_id': move.product_uom.id, diff --git a/addons/point_of_sale/static/src/css/customer_facing_display.css b/addons/point_of_sale/static/src/css/customer_facing_display.css index e8e97cf4c7e..2d572060342 100644 --- a/addons/point_of_sale/static/src/css/customer_facing_display.css +++ b/addons/point_of_sale/static/src/css/customer_facing_display.css @@ -35,6 +35,7 @@ body .pos-customer_facing_display { font-weight: 300; width: 100%; height: 100%; + padding: 0; -webkit-display: flex; -moz-display: flex; -ms-display: flex; diff --git a/addons/point_of_sale/static/src/css/pos.css b/addons/point_of_sale/static/src/css/pos.css index 8fefe02fa09..0e8fb74e92c 100644 --- a/addons/point_of_sale/static/src/css/pos.css +++ b/addons/point_of_sale/static/src/css/pos.css @@ -731,7 +731,7 @@ td { border-top-right-radius: 4px; } .pos .numpad button { - float: left; + float: left/*rtl:ignore*/; /* rtlcss forced to keep ltr */ height: 54px; width: 54px; font-weight: bold; @@ -2321,6 +2321,7 @@ td { margin-right: 3px; } .pos .popup-numpad { + direction: ltr/*rtl:ignore*/; /* rtlcss forced to keep ltr */ margin: 12px auto; text-align: center; width: 254px; diff --git a/addons/point_of_sale/static/src/scss/customer_facing_display.scss b/addons/point_of_sale/static/src/scss/customer_facing_display.scss index 766ac34cb1e..25e0a0bc324 100644 --- a/addons/point_of_sale/static/src/scss/customer_facing_display.scss +++ b/addons/point_of_sale/static/src/scss/customer_facing_display.scss @@ -95,6 +95,7 @@ body { font-weight: 300; width: 100%; height: 100%; + padding: 0; @include flex-display; @include flex-direction(row); diff --git a/addons/point_of_sale/views/point_of_sale.xml b/addons/point_of_sale/views/point_of_sale.xml index 9e07dff51bc..7d58d841fd1 100644 --- a/addons/point_of_sale/views/point_of_sale.xml +++ b/addons/point_of_sale/views/point_of_sale.xml @@ -6,9 +6,7 @@ <link rel="stylesheet" href="/point_of_sale/static/src/css/pos.css" id="pos-stylesheet"/> <link rel="stylesheet" href="/point_of_sale/static/src/css/keyboard.css"/> - <t t-if="request and request.env['res.lang'].search([('code', '=', request.env.lang)]).direction == 'rtl'"> - <link rel="stylesheet" type="text/less" href="/web/static/src/scss/fontawesome_overriden.scss"/> - </t> + <link rel="stylesheet" type="text/less" href="/web/static/src/scss/fontawesome_overriden.scss"/> <script type="text/javascript" src="/point_of_sale/static/lib/backbone/backbone.js"></script> <script type="text/javascript" src="/point_of_sale/static/lib/waitfont.js"></script> diff --git a/addons/portal/i18n/portal.pot b/addons/portal/i18n/portal.pot index 3503039236f..f85333792d8 100644 --- a/addons/portal/i18n/portal.pot +++ b/addons/portal/i18n/portal.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 08:00+0000\n" -"PO-Revision-Date: 2019-01-16 08:00+0000\n" +"POT-Creation-Date: 2019-03-20 13:51+0000\n" +"PO-Revision-Date: 2019-03-20 13:51+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -39,7 +39,7 @@ msgstr "" #. module: portal #: model_terms:ir.ui.view,arch_db:portal.record_pager -msgid "<i class=\"fa fa-chevron-right\" role=\"img\" aria-label=\"Next\" title=\"Previous\"/>" +msgid "<i class=\"fa fa-chevron-right\" role=\"img\" aria-label=\"Next\" title=\"Next\"/>" msgstr "" #. module: portal @@ -154,6 +154,13 @@ msgid "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"padding-t msgstr "" #. module: portal +#. openerp-web +#: code:addons/portal/static/src/js/portal_signature.js:47 +#, python-format +msgid "Accept & Sign" +msgstr "" + +#. module: portal #: model:ir.model.fields,field_description:portal.field_portal_mixin__access_warning #: model:ir.model.fields,field_description:portal.field_portal_share__access_warning msgid "Access warning" @@ -186,7 +193,7 @@ msgstr "" #. module: portal #. openerp-web -#: code:addons/portal/static/src/xml/portal_chatter.xml:26 +#: code:addons/portal/static/src/xml/portal_chatter.xml:31 #, python-format msgid "Avatar" msgstr "" @@ -198,7 +205,7 @@ msgid "Cancel" msgstr "" #. module: portal -#: code:addons/portal/controllers/portal.py:220 +#: code:addons/portal/controllers/portal.py:230 #, python-format msgid "Changing VAT number is not allowed once document(s) have been issued for your account. Please contact us directly for this operation." msgstr "" @@ -210,14 +217,7 @@ msgstr "" #. module: portal #. openerp-web -#: code:addons/portal/static/src/xml/portal_signature.xml:12 -#, python-format -msgid "Clear" -msgstr "" - -#. module: portal -#. openerp-web -#: code:addons/portal/static/src/xml/portal_signature.xml:27 +#: code:addons/portal/static/src/xml/portal_signature.xml:25 #, python-format msgid "Click here to see your document." msgstr "" @@ -294,13 +294,6 @@ msgstr "" #. module: portal #. openerp-web -#: code:addons/portal/static/src/xml/portal_signature.xml:14 -#, python-format -msgid "Draw your signature" -msgstr "" - -#. module: portal -#. openerp-web #: code:addons/portal/static/src/js/portal_sidebar.js:41 #, python-format msgid "Due in %d days" @@ -355,7 +348,7 @@ msgid "In Portal" msgstr "" #. module: portal -#: code:addons/portal/controllers/portal.py:201 +#: code:addons/portal/controllers/portal.py:211 #, python-format msgid "Invalid Email! Please enter a valid email address." msgstr "" @@ -389,7 +382,7 @@ msgstr "" #. module: portal #. openerp-web -#: code:addons/portal/static/src/xml/portal_chatter.xml:21 +#: code:addons/portal/static/src/xml/portal_chatter.xml:26 #, python-format msgid "Leave a comment" msgstr "" @@ -415,13 +408,19 @@ msgid "Message" msgstr "" #. module: portal +#: code:addons/portal/models/mail_thread.py:32 +#, python-format +msgid "Model %s does not support token signature, as it does not have %s field." +msgstr "" + +#. module: portal #: model_terms:ir.ui.view,arch_db:portal.my_account_link msgid "My Account" msgstr "" #. module: portal #. openerp-web -#: code:addons/portal/static/src/xml/portal_chatter.xml:92 +#: code:addons/portal/static/src/xml/portal_chatter.xml:100 #: model_terms:ir.ui.view,arch_db:portal.pager #, python-format msgid "Next" @@ -444,7 +443,7 @@ msgstr "" #. module: portal #. openerp-web -#: code:addons/portal/static/src/xml/portal_chatter.xml:39 +#: code:addons/portal/static/src/xml/portal_chatter.xml:44 #, python-format msgid "Oops! Something went wrong. Try to reload the page and log in." msgstr "" @@ -487,14 +486,14 @@ msgstr "" #. module: portal #. openerp-web -#: code:addons/portal/static/src/xml/portal_chatter.xml:84 +#: code:addons/portal/static/src/xml/portal_chatter.xml:92 #, python-format msgid "Previous" msgstr "" #. module: portal #. openerp-web -#: code:addons/portal/static/src/js/portal_chatter.js:109 +#: code:addons/portal/static/src/js/portal_chatter.js:171 #, python-format msgid "Published on %s" msgstr "" @@ -533,7 +532,7 @@ msgstr "" #. module: portal #. openerp-web -#: code:addons/portal/static/src/xml/portal_chatter.xml:42 +#: code:addons/portal/static/src/xml/portal_chatter.xml:47 #: model_terms:ir.ui.view,arch_db:portal.portal_share_wizard #, python-format msgid "Send" @@ -564,7 +563,7 @@ msgid "Some contacts have the same email as an existing portal user:" msgstr "" #. module: portal -#: code:addons/portal/controllers/portal.py:224 +#: code:addons/portal/controllers/portal.py:234 #, python-format msgid "Some required fields are empty." msgstr "" @@ -581,9 +580,9 @@ msgstr "" #. module: portal #. openerp-web -#: code:addons/portal/static/src/xml/portal_signature.xml:25 +#: code:addons/portal/static/src/xml/portal_signature.xml:22 #, python-format -msgid "Thank You !" +msgid "Thank You!" msgstr "" #. module: portal @@ -632,7 +631,7 @@ msgid "VAT Number" msgstr "" #. module: portal -#: code:addons/portal/models/portal_mixin.py:83 +#: code:addons/portal/models/portal_mixin.py:91 #, python-format msgid "View %s" msgstr "" @@ -640,8 +639,6 @@ msgstr "" #. module: portal #: model:ir.model.fields,field_description:portal.field_account_analytic_account__website_message_ids #: model:ir.model.fields,field_description:portal.field_calendar_event__website_message_ids -#: model:ir.model.fields,field_description:portal.field_event_event__website_message_ids -#: model:ir.model.fields,field_description:portal.field_event_registration__website_message_ids #: model:ir.model.fields,field_description:portal.field_fleet_vehicle__website_message_ids #: model:ir.model.fields,field_description:portal.field_fleet_vehicle_log_contract__website_message_ids #: model:ir.model.fields,field_description:portal.field_gamification_badge__website_message_ids @@ -649,6 +646,7 @@ msgstr "" #: model:ir.model.fields,field_description:portal.field_hr_department__website_message_ids #: model:ir.model.fields,field_description:portal.field_hr_employee__website_message_ids #: model:ir.model.fields,field_description:portal.field_hr_job__website_message_ids +#: model:ir.model.fields,field_description:portal.field_lunch_supplier__website_message_ids #: model:ir.model.fields,field_description:portal.field_mail_blacklist__website_message_ids #: model:ir.model.fields,field_description:portal.field_mail_channel__website_message_ids #: model:ir.model.fields,field_description:portal.field_mail_thread__website_message_ids @@ -664,8 +662,6 @@ msgstr "" #. module: portal #: model:ir.model.fields,help:portal.field_account_analytic_account__website_message_ids #: model:ir.model.fields,help:portal.field_calendar_event__website_message_ids -#: model:ir.model.fields,help:portal.field_event_event__website_message_ids -#: model:ir.model.fields,help:portal.field_event_registration__website_message_ids #: model:ir.model.fields,help:portal.field_fleet_vehicle__website_message_ids #: model:ir.model.fields,help:portal.field_fleet_vehicle_log_contract__website_message_ids #: model:ir.model.fields,help:portal.field_gamification_badge__website_message_ids @@ -673,6 +669,7 @@ msgstr "" #: model:ir.model.fields,help:portal.field_hr_department__website_message_ids #: model:ir.model.fields,help:portal.field_hr_employee__website_message_ids #: model:ir.model.fields,help:portal.field_hr_job__website_message_ids +#: model:ir.model.fields,help:portal.field_lunch_supplier__website_message_ids #: model:ir.model.fields,help:portal.field_mail_blacklist__website_message_ids #: model:ir.model.fields,help:portal.field_mail_channel__website_message_ids #: model:ir.model.fields,help:portal.field_mail_thread__website_message_ids @@ -692,7 +689,7 @@ msgstr "" #. module: portal #. openerp-web -#: code:addons/portal/static/src/xml/portal_chatter.xml:31 +#: code:addons/portal/static/src/xml/portal_chatter.xml:36 #, python-format msgid "Write a message..." msgstr "" @@ -711,7 +708,7 @@ msgstr "" #. module: portal #. openerp-web -#: code:addons/portal/static/src/xml/portal_chatter.xml:22 +#: code:addons/portal/static/src/xml/portal_chatter.xml:27 #, python-format msgid "You must be" msgstr "" @@ -740,10 +737,7 @@ msgid "Your Documents" msgstr "" #. module: portal -#. openerp-web -#: code:addons/portal/static/src/xml/portal_signature.xml:6 #: model_terms:ir.ui.view,arch_db:portal.portal_my_details -#, python-format msgid "Your Name" msgstr "" @@ -764,7 +758,7 @@ msgstr "" #. module: portal #. openerp-web -#: code:addons/portal/static/src/xml/portal_chatter.xml:56 +#: code:addons/portal/static/src/xml/portal_chatter.xml:64 #, python-format msgid "avatar" msgstr "" @@ -785,7 +779,7 @@ msgstr "" #. module: portal #. openerp-web -#: code:addons/portal/static/src/xml/portal_chatter.xml:22 +#: code:addons/portal/static/src/xml/portal_chatter.xml:27 #, python-format msgid "logged in" msgstr "" @@ -802,7 +796,7 @@ msgstr "" #. module: portal #. openerp-web -#: code:addons/portal/static/src/xml/portal_chatter.xml:22 +#: code:addons/portal/static/src/xml/portal_chatter.xml:27 #, python-format msgid "to post a comment." msgstr "" diff --git a/addons/portal/wizard/portal_wizard.py b/addons/portal/wizard/portal_wizard.py index 2f17441f451..8ac87a59ee6 100644 --- a/addons/portal/wizard/portal_wizard.py +++ b/addons/portal/wizard/portal_wizard.py @@ -87,7 +87,7 @@ class PortalWizardUser(models.TransientModel): partners_error_empty |= wizard_user.partner_id elif email in emails: partners_error_emails |= wizard_user.partner_id - user = self.env['res.users'].sudo().with_context(active_test=False).search([('login', '=', email)]) + user = self.env['res.users'].sudo().with_context(active_test=False).search([('login', '=ilike', email)]) if user: partners_error_user |= wizard_user.partner_id emails.append(email) diff --git a/addons/pos_cache/i18n/pos_cache.pot b/addons/pos_cache/i18n/pos_cache.pot index 7b9c03a10a2..1475543a01f 100644 --- a/addons/pos_cache/i18n/pos_cache.pot +++ b/addons/pos_cache/i18n/pos_cache.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-21 13:17+0000\n" -"PO-Revision-Date: 2018-09-21 13:17+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -91,6 +91,11 @@ msgid "PoS: refresh cache" msgstr "" #. module: pos_cache +#: model:ir.model,name:pos_cache.model_pos_cache +msgid "Point of Sale Cache" +msgstr "" + +#. module: pos_cache #: model:ir.model,name:pos_cache.model_pos_config msgid "Point of Sale Configuration" msgstr "" @@ -105,8 +110,3 @@ msgstr "" msgid "Product Fields" msgstr "" -#. module: pos_cache -#: model:ir.model,name:pos_cache.model_pos_cache -msgid "pos.cache" -msgstr "" - diff --git a/addons/product/i18n/product.pot b/addons/product/i18n/product.pot index eafd29ac418..0bfade4f67b 100644 --- a/addons/product/i18n/product.pot +++ b/addons/product/i18n/product.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:59+0000\n" -"PO-Revision-Date: 2019-01-16 07:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -32,19 +32,19 @@ msgid "# Products" msgstr "" #. module: product -#: code:addons/product/models/product_pricelist.py:470 +#: code:addons/product/models/product_pricelist.py:474 #, python-format msgid "%s %% discount" msgstr "" #. module: product -#: code:addons/product/models/product_pricelist.py:472 +#: code:addons/product/models/product_pricelist.py:476 #, python-format msgid "%s %% discount and %s surcharge" msgstr "" #. module: product -#: code:addons/product/models/product_template.py:377 +#: code:addons/product/models/product_template.py:381 #, python-format msgid "%s (copy)" msgstr "" @@ -55,6 +55,18 @@ msgid "1 year" msgstr "" #. module: product +#: model:ir.model.fields,help:product.field_product_product__image +#: model:ir.model.fields,help:product.field_product_template__image +msgid "1024px * 1024px" +msgstr "" + +#. module: product +#: model:ir.model.fields,help:product.field_product_product__image_medium +#: model:ir.model.fields,help:product.field_product_template__image_medium +msgid "128px * 128px" +msgstr "" + +#. module: product #: model:product.product,description_sale:product.product_product_4 #: model:product.product,description_sale:product.product_product_4b #: model:product.product,description_sale:product.product_product_4c @@ -69,6 +81,18 @@ msgid "2 year" msgstr "" #. module: product +#: model:ir.model.fields,help:product.field_product_product__image_large +#: model:ir.model.fields,help:product.field_product_template__image_large +msgid "256px * 256px" +msgstr "" + +#. module: product +#: model:ir.model.fields,help:product.field_product_product__image_small +#: model:ir.model.fields,help:product.field_product_template__image_small +msgid "64px * 64px" +msgstr "" + +#. module: product #: model_terms:ir.ui.view,arch_db:product.product_pricelist_view_kanban msgid "<i class=\"fa fa-money\" role=\"img\" aria-label=\"Currency\" title=\"Currency\"/>" msgstr "" @@ -86,13 +110,14 @@ msgid "<span class=\"o_stat_text\"> Products</span>" msgstr "" #. module: product -#: model_terms:ir.ui.view,arch_db:product.product_variant_easy_edit_view -msgid "<span>All general settings about this product are managed on</span>" +#: model_terms:ir.ui.view,arch_db:product.report_simple_barcode +#: model_terms:ir.ui.view,arch_db:product.report_simple_label +msgid "<span class=\"text-muted\">No barcode available</span>" msgstr "" #. module: product #: model_terms:ir.ui.view,arch_db:product.product_variant_easy_edit_view -msgid "<span>kg</span>" +msgid "<span>All general settings about this product are managed on</span>" msgstr "" #. module: product @@ -200,7 +225,7 @@ msgid "All" msgstr "" #. module: product -#: code:addons/product/models/product_pricelist.py:465 +#: code:addons/product/models/product_pricelist.py:469 #, python-format msgid "All Products" msgstr "" @@ -324,7 +349,8 @@ msgstr "" #. module: product #: model:ir.model.fields,field_description:product.field_product_product__image -msgid "Big-sized image" +#: model:ir.model.fields,field_description:product.field_product_template__image +msgid "Big-sized Image" msgstr "" #. module: product @@ -364,6 +390,18 @@ msgid "Can be Sold" msgstr "" #. module: product +#: model:ir.model.fields,field_description:product.field_product_product__can_image_be_zoomed +#: model:ir.model.fields,field_description:product.field_product_template__can_image_be_zoomed +msgid "Can image be zoomed" +msgstr "" + +#. module: product +#: model:ir.model.fields,field_description:product.field_product_product__can_image_raw_be_zoomed +#: model:ir.model.fields,field_description:product.field_product_template__can_image_raw_be_zoomed +msgid "Can image raw be zoomed" +msgstr "" + +#. module: product #: model_terms:ir.ui.view,arch_db:product.view_product_price_list msgid "Cancel" msgstr "" @@ -374,7 +412,7 @@ msgid "Category name" msgstr "" #. module: product -#: code:addons/product/models/product_pricelist.py:459 +#: code:addons/product/models/product_pricelist.py:463 #, python-format msgid "Category: %s" msgstr "" @@ -449,6 +487,12 @@ msgid "Conference Chair" msgstr "" #. module: product +#: model:product.product,description_sale:product.consu_delivery_02 +#: model:product.template,description_sale:product.consu_delivery_02_product_template +msgid "Conference room table" +msgstr "" + +#. module: product #: model:ir.model,name:product.model_res_config_settings msgid "Config Settings" msgstr "" @@ -500,6 +544,12 @@ msgid "Cost" msgstr "" #. module: product +#: model:ir.model.fields,field_description:product.field_product_product__cost_currency_id +#: model:ir.model.fields,field_description:product.field_product_template__cost_currency_id +msgid "Cost Currency" +msgstr "" + +#. module: product #: model:ir.model.fields,help:product.field_product_template__standard_price msgid "Cost used for stock valuation in standard price and as a first price to set in average/FIFO." msgstr "" @@ -746,13 +796,6 @@ msgid "Duration" msgstr "" #. module: product -#: model:product.product,description_sale:product.consu_delivery_03 -#: model:product.template,description_sale:product.consu_delivery_03_product_template -msgid "Dvorak keyboard\n" -"left-handed mouse" -msgstr "" - -#. module: product #: model:ir.model.fields,field_description:product.field_product_pricelist_item__date_end #: model:ir.model.fields,field_description:product.field_product_supplierinfo__date_end msgid "End Date" @@ -769,7 +812,7 @@ msgid "Ending valid for the pricelist item validation" msgstr "" #. module: product -#: code:addons/product/models/product.py:298 +#: code:addons/product/models/product.py:287 #, python-format msgid "Error! It is not allowed to choose more than one value for a given attribute." msgstr "" @@ -842,6 +885,12 @@ msgid "Four Person Desk" msgstr "" #. module: product +#: model:product.product,description_sale:product.consu_delivery_03 +#: model:product.template,description_sale:product.consu_delivery_03_product_template +msgid "Four person modern office workstation" +msgstr "" + +#. module: product #: model_terms:ir.ui.view,arch_db:product.product_template_search_view msgid "Future Activities" msgstr "" @@ -869,7 +918,7 @@ msgid "Global" msgstr "" #. module: product -#: code:addons/product/models/product_template.py:31 +#: code:addons/product/models/product_template.py:29 #, python-format msgid "Go to Internal Categories" msgstr "" @@ -948,39 +997,25 @@ msgid "If unchecked, it will allow you to hide the product without removing it." msgstr "" #. module: product -#: model:ir.model.fields,field_description:product.field_product_template__image -msgid "Image" -msgstr "" - -#. module: product -#: model:ir.model.fields,help:product.field_product_product__image -msgid "Image of the product variant (Big-sized image of product template if false). It is automatically resized as a 1024x1024px image, with aspect ratio preserved." -msgstr "" - -#. module: product -#: model:ir.model.fields,help:product.field_product_product__image_medium -msgid "Image of the product variant (Medium-sized image of product template if false)." -msgstr "" - -#. module: product -#: model:ir.model.fields,help:product.field_product_product__image_small -msgid "Image of the product variant (Small-sized image of product template if false)." +#: model:ir.model.fields,help:product.field_product_product__image_original +#: model:ir.model.fields,help:product.field_product_template__image_original +msgid "Image in its original size, as it was uploaded." msgstr "" #. module: product -#: code:addons/product/models/product_pricelist.py:353 +#: code:addons/product/models/product_pricelist.py:357 #, python-format msgid "Import Template for Pricelists" msgstr "" #. module: product -#: code:addons/product/models/product_template.py:608 +#: code:addons/product/models/product_template.py:1062 #, python-format msgid "Import Template for Products" msgstr "" #. module: product -#: code:addons/product/models/product.py:693 +#: code:addons/product/models/product.py:743 #, python-format msgid "Import Template for Vendor Pricelists" msgstr "" @@ -1063,6 +1098,12 @@ msgid "Large Meeting Table" msgstr "" #. module: product +#: model:ir.model.fields,field_description:product.field_product_product__image_large +#: model:ir.model.fields,field_description:product.field_product_template__image_large +msgid "Large-sized Image" +msgstr "" + +#. module: product #: model:ir.model.fields,field_description:product.field_product_attribute____last_update #: model:ir.model.fields,field_description:product.field_product_attribute_value____last_update #: model:ir.model.fields,field_description:product.field_product_category____last_update @@ -1183,12 +1224,7 @@ msgstr "" #. module: product #: model:ir.model.fields,field_description:product.field_product_product__image_medium #: model:ir.model.fields,field_description:product.field_product_template__image_medium -msgid "Medium-sized image" -msgstr "" - -#. module: product -#: model:ir.model.fields,help:product.field_product_template__image_medium -msgid "Medium-sized image of the product. It is automatically resized as a 128x128px image, with aspect ratio preserved, only when the image exceeds one of those sizes. Use this field in form views or some kanban views." +msgid "Medium-sized Image" msgstr "" #. module: product @@ -1324,6 +1360,12 @@ msgid "Only when the product is added to a sales order" msgstr "" #. module: product +#: model:ir.model.fields,field_description:product.field_product_product__image_original +#: model:ir.model.fields,field_description:product.field_product_template__image_original +msgid "Original Image" +msgstr "" + +#. module: product #: model_terms:ir.ui.view,arch_db:product.product_supplierinfo_form_view msgid "Other Information" msgstr "" @@ -1722,7 +1764,7 @@ msgid "Products Price Search" msgstr "" #. module: product -#: code:addons/product/models/product.py:479 +#: code:addons/product/models/product.py:500 #, python-format msgid "Products: " msgstr "" @@ -1787,6 +1829,36 @@ msgid "Quantity-5" msgstr "" #. module: product +#: model:ir.model.fields,field_description:product.field_product_product__image_raw_big +#: model:ir.model.fields,field_description:product.field_product_template__image_raw_big +msgid "Raw Big-sized Image" +msgstr "" + +#. module: product +#: model:ir.model.fields,field_description:product.field_product_product__image_raw_large +#: model:ir.model.fields,field_description:product.field_product_template__image_raw_large +msgid "Raw Large-sized Image" +msgstr "" + +#. module: product +#: model:ir.model.fields,field_description:product.field_product_product__image_raw_medium +#: model:ir.model.fields,field_description:product.field_product_template__image_raw_medium +msgid "Raw Medium-sized Image" +msgstr "" + +#. module: product +#: model:ir.model.fields,field_description:product.field_product_product__image_raw_original +#: model:ir.model.fields,field_description:product.field_product_template__image_raw_original +msgid "Raw Original Image" +msgstr "" + +#. module: product +#: model:ir.model.fields,field_description:product.field_product_product__image_raw_small +#: model:ir.model.fields,field_description:product.field_product_template__image_raw_small +msgid "Raw Small-sized Image" +msgstr "" + +#. module: product #: model:ir.model.fields,field_description:product.field_product_product__code msgid "Reference" msgstr "" @@ -1913,12 +1985,7 @@ msgstr "" #. module: product #: model:ir.model.fields,field_description:product.field_product_product__image_small #: model:ir.model.fields,field_description:product.field_product_template__image_small -msgid "Small-sized image" -msgstr "" - -#. module: product -#: model:ir.model.fields,help:product.field_product_template__image_small -msgid "Small-sized image of the product. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required." +msgid "Small-sized Image" msgstr "" #. module: product @@ -2003,6 +2070,26 @@ msgid "Supplier Pricelist" msgstr "" #. module: product +#: model:ir.model.fields,help:product.field_product_product__valid_archived_variant_ids +#: model:ir.model.fields,help:product.field_product_product__valid_existing_variant_ids +#: model:ir.model.fields,help:product.field_product_product__valid_product_attribute_ids +#: model:ir.model.fields,help:product.field_product_product__valid_product_attribute_value_ids +#: model:ir.model.fields,help:product.field_product_product__valid_product_attribute_value_wnva_ids +#: model:ir.model.fields,help:product.field_product_product__valid_product_attribute_wnva_ids +#: model:ir.model.fields,help:product.field_product_product__valid_product_template_attribute_line_ids +#: model:ir.model.fields,help:product.field_product_product__valid_product_template_attribute_line_wnva_ids +#: model:ir.model.fields,help:product.field_product_template__valid_archived_variant_ids +#: model:ir.model.fields,help:product.field_product_template__valid_existing_variant_ids +#: model:ir.model.fields,help:product.field_product_template__valid_product_attribute_ids +#: model:ir.model.fields,help:product.field_product_template__valid_product_attribute_value_ids +#: model:ir.model.fields,help:product.field_product_template__valid_product_attribute_value_wnva_ids +#: model:ir.model.fields,help:product.field_product_template__valid_product_attribute_wnva_ids +#: model:ir.model.fields,help:product.field_product_template__valid_product_template_attribute_line_ids +#: model:ir.model.fields,help:product.field_product_template__valid_product_template_attribute_line_wnva_ids +msgid "Technical compute" +msgstr "" + +#. module: product #: model:ir.model.fields,help:product.field_product_product__pricelist_id #: model:ir.model.fields,help:product.field_product_template__pricelist_id msgid "Technical field. Used for searching on pricelists, not stored in database." @@ -2019,7 +2106,7 @@ msgid "The computed price is expressed in the default Unit of Measure of the pro msgstr "" #. module: product -#: code:addons/product/models/product_template.py:323 +#: code:addons/product/models/product_template.py:331 #, python-format msgid "The default Unit of Measure and the purchase Unit of Measure must be in the same category." msgstr "" @@ -2035,7 +2122,7 @@ msgid "The minimal quantity to purchase from this vendor, expressed in the vendo msgstr "" #. module: product -#: code:addons/product/models/product_pricelist.py:451 +#: code:addons/product/models/product_pricelist.py:455 #, python-format msgid "The minimum margin should be lower than the maximum margin." msgstr "" @@ -2046,13 +2133,13 @@ msgid "The number of products under this category (Does not consider the childre msgstr "" #. module: product -#: code:addons/product/models/product_template.py:495 +#: code:addons/product/models/product_template.py:517 #, python-format msgid "The number of variants to generate is too high. You should either not generate variants for each combination or generate them on demand from the sales order. To do so, open the form view of attributes and change the mode of *Create Variants*." msgstr "" #. module: product -#: code:addons/product/models/product_attribute.py:56 +#: code:addons/product/models/product_attribute.py:101 #, python-format msgid "The operation cannot be completed:\n" "You are trying to delete an attribute value with a reference on a product variant." @@ -2064,28 +2151,42 @@ msgid "The price to purchase a product" msgstr "" #. module: product +#: code:addons/product/models/product_template.py:952 +#, python-format +msgid "The product template is archived so no combination is possible." +msgstr "" + +#. module: product #: model:ir.model.fields,help:product.field_product_product__lst_price msgid "The sale price is managed from the product template. Click on the 'Configure Variants' button to set the extra attribute prices." msgstr "" #. module: product -#: sql_constraint:product.attribute.value:0 -msgid "This attribute value already exists !" +#: code:addons/product/models/product_template.py:1019 +#, python-format +msgid "There are no possible combination." msgstr "" #. module: product -#: model:ir.model.fields,help:product.field_product_supplierinfo__product_uom -msgid "This comes from the product form." +#: code:addons/product/models/product_template.py:1014 +#, python-format +msgid "There are no remaining closest combination." msgstr "" #. module: product -#: model:ir.model.fields,help:product.field_product_product__image_variant -msgid "This field holds the image used as image for the product variant, limited to 1024x1024px." +#: code:addons/product/models/product_template.py:972 +#, python-format +msgid "There are no remaining possible combination." msgstr "" #. module: product -#: model:ir.model.fields,help:product.field_product_template__image -msgid "This field holds the image used as image for the product, limited to 1024x1024px." +#: sql_constraint:product.attribute.value:0 +msgid "This attribute value already exists !" +msgstr "" + +#. module: product +#: model:ir.model.fields,help:product.field_product_supplierinfo__product_uom +msgid "This comes from the product form." msgstr "" #. module: product @@ -2120,6 +2221,12 @@ msgid "This vendor's product name will be used when printing a request for quota msgstr "" #. module: product +#: model:product.product,description_sale:product.consu_delivery_01 +#: model:product.template,description_sale:product.consu_delivery_01_product_template +msgid "Three Seater Sofa with Lounger in Steel Grey Colour" +msgstr "" + +#. module: product #: model:product.product,name:product.consu_delivery_01 #: model:product.template,name:product.consu_delivery_01_product_template msgid "Three-Seat Sofa" @@ -2234,6 +2341,54 @@ msgid "Valid" msgstr "" #. module: product +#: model:ir.model.fields,field_description:product.field_product_product__valid_archived_variant_ids +#: model:ir.model.fields,field_description:product.field_product_template__valid_archived_variant_ids +msgid "Valid Archived Variants" +msgstr "" + +#. module: product +#: model:ir.model.fields,field_description:product.field_product_product__valid_existing_variant_ids +#: model:ir.model.fields,field_description:product.field_product_template__valid_existing_variant_ids +msgid "Valid Existing Variants" +msgstr "" + +#. module: product +#: model:ir.model.fields,field_description:product.field_product_product__valid_product_template_attribute_line_ids +#: model:ir.model.fields,field_description:product.field_product_template__valid_product_template_attribute_line_ids +msgid "Valid Product Attribute Lines" +msgstr "" + +#. module: product +#: model:ir.model.fields,field_description:product.field_product_product__valid_product_template_attribute_line_wnva_ids +#: model:ir.model.fields,field_description:product.field_product_template__valid_product_template_attribute_line_wnva_ids +msgid "Valid Product Attribute Lines Without No Variant Attributes" +msgstr "" + +#. module: product +#: model:ir.model.fields,field_description:product.field_product_product__valid_product_attribute_value_ids +#: model:ir.model.fields,field_description:product.field_product_template__valid_product_attribute_value_ids +msgid "Valid Product Attribute Values" +msgstr "" + +#. module: product +#: model:ir.model.fields,field_description:product.field_product_product__valid_product_attribute_value_wnva_ids +#: model:ir.model.fields,field_description:product.field_product_template__valid_product_attribute_value_wnva_ids +msgid "Valid Product Attribute Values Without No Variant Attributes" +msgstr "" + +#. module: product +#: model:ir.model.fields,field_description:product.field_product_product__valid_product_attribute_ids +#: model:ir.model.fields,field_description:product.field_product_template__valid_product_attribute_ids +msgid "Valid Product Attributes" +msgstr "" + +#. module: product +#: model:ir.model.fields,field_description:product.field_product_product__valid_product_attribute_wnva_ids +#: model:ir.model.fields,field_description:product.field_product_template__valid_product_attribute_wnva_ids +msgid "Valid Product Attributes Without No Variant Attributes" +msgstr "" + +#. module: product #: model_terms:ir.ui.view,arch_db:product.product_supplierinfo_form_view msgid "Validity" msgstr "" @@ -2257,11 +2412,6 @@ msgid "Variant Count" msgstr "" #. module: product -#: model:ir.model.fields,field_description:product.field_product_product__image_variant -msgid "Variant Image" -msgstr "" - -#. module: product #: model_terms:ir.ui.view,arch_db:product.product_variant_easy_edit_view msgid "Variant Information" msgstr "" @@ -2419,13 +2569,13 @@ msgid "You can assign pricelists to your customers or select one when creating a msgstr "" #. module: product -#: code:addons/product/models/product_pricelist.py:445 +#: code:addons/product/models/product_pricelist.py:449 #, python-format msgid "You cannot assign the Main Pricelist as Other Pricelist in PriceList Item" msgstr "" #. module: product -#: code:addons/product/models/product.py:54 +#: code:addons/product/models/product.py:57 #, python-format msgid "You cannot create recursive categories." msgstr "" @@ -2437,7 +2587,7 @@ msgid "You cannot define the decimal precision of 'Account' as greater than the msgstr "" #. module: product -#: code:addons/product/models/product_attribute.py:80 +#: code:addons/product/models/product_attribute.py:136 #, python-format msgid "You cannot use this attribute with the following value." msgstr "" @@ -2457,13 +2607,20 @@ msgstr "" #. module: product #: model_terms:ir.actions.act_window,help:product.product_normal_action #: model_terms:ir.actions.act_window,help:product.product_template_action -msgid "You must define a product for everything you purchase,\n" -" whether it's a physical product, a consumable or services." +msgid "You must define a product for everything you sell or purchase,\n" +" whether it's a storable product, a consumable or a service." msgstr "" #. module: product -#: model_terms:ir.actions.act_window,help:product.product_normal_action_sell #: model_terms:ir.actions.act_window,help:product.product_variant_action +msgid "You must define a product for everything you sell or purchase,\n" +" whether it's a storable product, a consumable or a service.\n" +" The product form contains information to simplify the sale process:\n" +" price, notes in the quotation, accounting data, procurement methods, etc." +msgstr "" + +#. module: product +#: model_terms:ir.actions.act_window,help:product.product_normal_action_sell msgid "You must define a product for everything you sell, whether it's a physical product,\n" " a consumable or a service you offer to customers.\n" " The product form contains information to simplify the sale process:\n" @@ -2471,7 +2628,7 @@ msgid "You must define a product for everything you sell, whether it's a physica msgstr "" #. module: product -#: code:addons/product/models/product_template.py:30 +#: code:addons/product/models/product_template.py:28 #, python-format msgid "You must define at least one product category in order to be able to create products." msgstr "" @@ -2503,25 +2660,13 @@ msgid "from" msgstr "" #. module: product -#: code:addons/product/models/product.py:633 -#: code:addons/product/models/product_template.py:962 +#: code:addons/product/models/product.py:611 +#: code:addons/product/models/product_template.py:1055 #, python-format msgid "product" msgstr "" #. module: product -#: model:product.product,description_sale:product.consu_delivery_02 -#: model:product.template,description_sale:product.consu_delivery_02_product_template -msgid "raid 1, 512ECC ram" -msgstr "" - -#. module: product -#: model:product.product,description_sale:product.consu_delivery_01 -#: model:product.template,description_sale:product.consu_delivery_01_product_template -msgid "raid 10, 2048ECC ram" -msgstr "" - -#. module: product #: model_terms:ir.ui.view,arch_db:product.view_partner_property_form msgid "the parent company" msgstr "" diff --git a/addons/product/models/product.py b/addons/product/models/product.py index d1f95da76b5..fa07dcd23c8 100644 --- a/addons/product/models/product.py +++ b/addons/product/models/product.py @@ -318,6 +318,8 @@ class ProductProduct(models.Model): # prefetched o2m have to be reloaded (because of active_test) # (eg. product.template: product_variant_ids) self.invalidate_cache() + # `_get_first_possible_variant_id` depends on variants active state + self.clear_caches() return res @api.multi diff --git a/addons/product/models/product_pricelist.py b/addons/product/models/product_pricelist.py index 5f40c360d23..de1fd231b8f 100644 --- a/addons/product/models/product_pricelist.py +++ b/addons/product/models/product_pricelist.py @@ -308,6 +308,7 @@ class Pricelist(models.Model): return pricelist.get_products_price( list(zip(**products_by_qty_by_partner))) + # DEPRECATED (Not used anymore, see d39d583b2) -> Remove me in master (saas12.3) def _get_partner_pricelist(self, partner_id, company_id=None): """ Retrieve the applicable pricelist for a given partner in a given company. @@ -317,34 +318,53 @@ class Pricelist(models.Model): res = self._get_partner_pricelist_multi([partner_id], company_id) return res[partner_id].id + def _get_partner_pricelist_multi_search_domain_hook(self): + return [] + + def _get_partner_pricelist_multi_filter_hook(self): + return self + def _get_partner_pricelist_multi(self, partner_ids, company_id=None): """ Retrieve the applicable pricelist for given partners in a given company. + It will return the first found pricelist in this order: + First, the pricelist of the specific property (res_id set), this one + is created when saving a pricelist on the partner form view. + Else, it will return the pricelist of the partner country group + Else, it will return the generic property (res_id not set), this one + is created on the company creation. + Else, it will return the first available pricelist + :param company_id: if passed, used for looking up properties, instead of current user's company :return: a dict {partner_id: pricelist} """ - Partner = self.env['res.partner'] + # `partner_ids` might be ID from inactive uers. We should use active_test + # as we will do a search() later (real case for website public user). + Partner = self.env['res.partner'].with_context(active_test=False) + Property = self.env['ir.property'].with_context(force_company=company_id or self.env.user.company_id.id) Pricelist = self.env['product.pricelist'] + pl_domain = self._get_partner_pricelist_multi_search_domain_hook() - # retrieve values of property + # if no specific property, try to find a fitting pricelist result = Property.get_multi('property_product_pricelist', Partner._name, partner_ids) - remaining_partner_ids = [pid for pid, val in result.items() if not val] + remaining_partner_ids = [pid for pid, val in result.items() if not val or + not val._get_partner_pricelist_multi_filter_hook()] if remaining_partner_ids: # get fallback pricelist when no pricelist for a given country pl_fallback = ( - Pricelist.search([('country_group_ids', '=', False)], limit=1) or + Pricelist.search(pl_domain + [('country_group_ids', '=', False)], limit=1) or Property.get('property_product_pricelist', 'res.partner') or - Pricelist.search([], limit=1) + Pricelist.search(pl_domain, limit=1) ) # group partners by country, and find a pricelist for each country domain = [('id', 'in', remaining_partner_ids)] groups = Partner.read_group(domain, ['country_id'], ['country_id']) for group in groups: country_id = group['country_id'] and group['country_id'][0] - pl = Pricelist.search([('country_group_ids.country_ids', '=', country_id)], limit=1) + pl = Pricelist.search(pl_domain + [('country_group_ids.country_ids', '=', country_id)], limit=1) pl = pl or pl_fallback for pid in Partner.search(group['__domain']).ids: result[pid] = pl diff --git a/addons/product/models/product_template.py b/addons/product/models/product_template.py index 56e817135ca..4ca5dee43a9 100644 --- a/addons/product/models/product_template.py +++ b/addons/product/models/product_template.py @@ -411,9 +411,23 @@ class ProductTemplate(models.Model): if (not products) or (limit and (len(templates) > limit)): break + searched_ids = set(templates.ids) + # some product.templates do not have product.products yet (dynamic variants configuration), + # we need to add the base _name_search to the results + # FIXME awa: this is really not performant at all but after discussing with the team + # we don't see another way to do it + if len(searched_ids) < limit: + searched_ids |= set([template_id[0] for template_id in + super(ProductTemplate, self)._name_search( + name, + args=args, + operator=operator, + limit=limit, + name_get_uid=name_get_uid)]) + # re-apply product.template order + name_get return super(ProductTemplate, self)._name_search( - '', args=[('id', 'in', list(set(templates.ids)))], + '', args=[('id', 'in', list(searched_ids))], operator='ilike', limit=limit, name_get_uid=name_get_uid) @api.multi @@ -736,6 +750,19 @@ class ProductTemplate(models.Model): self.ensure_one() if not parent_combination: return [] + + # Search for exclusions without attribute value. This means that the template is not + # compatible with the parent combination. If such an exclusion is found, it means that all + # attribute values are excluded. + if parent_combination: + exclusions = self.env['product.template.attribute.exclusion'].search([ + ('product_tmpl_id', '=', self.id), + ('value_ids', '=', False), + ('product_template_attribute_value_id', 'in', parent_combination.ids), + ], limit=1) + if exclusions: + return self.mapped('attribute_line_ids.product_template_value_ids').ids + return [ value_id for filter_line in parent_combination.mapped('exclude_for').filtered( diff --git a/addons/product/views/product_attribute_views.xml b/addons/product/views/product_attribute_views.xml index 0db1c369887..1be0135e03c 100644 --- a/addons/product/views/product_attribute_views.xml +++ b/addons/product/views/product_attribute_views.xml @@ -93,7 +93,7 @@ <field name="model">product.template.attribute.value</field> <field name="type">tree</field> <field name="arch" type="xml"> - <tree string="Attributes" create="0" delete="0" editable="bottom"> + <tree string="Attributes" create="0" delete="0"> <field name="attribute_id"/> <field name="name"/> <field name="price_extra"/> diff --git a/addons/product_expiry/data/product_expiry_data.xml b/addons/product_expiry/data/product_expiry_data.xml index 62d95fb701f..f0effeaaa77 100644 --- a/addons/product_expiry/data/product_expiry_data.xml +++ b/addons/product_expiry/data/product_expiry_data.xml @@ -10,7 +10,6 @@ <field name="res_model_id" ref="stock.model_stock_production_lot"/> <field name="icon">fa-tasks</field> <field name="delay_count">0</field> - <field name="is_master_data">True</field> </record> </odoo> diff --git a/addons/project/i18n/project.pot b/addons/project/i18n/project.pot index dfb9d0c8384..1b44de232e1 100644 --- a/addons/project/i18n/project.pot +++ b/addons/project/i18n/project.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:58+0000\n" -"PO-Revision-Date: 2019-01-16 07:58+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -52,8 +52,8 @@ msgid "% On" msgstr "" #. module: project -#: code:addons/project/models/project.py:284 -#: code:addons/project/models/project.py:606 +#: code:addons/project/models/project.py:291 +#: code:addons/project/models/project.py:607 #, python-format msgid "%s (copy)" msgstr "" @@ -65,14 +65,14 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/tour.js:91 +#: code:addons/project/static/src/js/tour.js:86 #, python-format msgid "<b>Assign the task</b> to someone. <i>You can create and invite a new user on the fly.</i>" msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/tour.js:102 +#: code:addons/project/static/src/js/tour.js:97 #, python-format msgid "<b>Click the save button</b> to apply your changes to the task." msgstr "" @@ -201,7 +201,7 @@ msgstr "" #: code:addons/project/models/project.py:122 #, python-format msgid "<p class=\"o_view_nocontent_smiling_face\">\n" -" Documents are attached to the tasks and issues of your project.</p><p>\n" +" Documents are attached to the tasks of your project.</p><p>\n" " Send messages or log internal notes with attachments to link\n" " documents to your project.\n" " </p>" @@ -350,7 +350,7 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:34 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:35 #, python-format msgid "Agile" msgstr "" @@ -393,7 +393,7 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:35 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:36 #, python-format msgid "Analysis" msgstr "" @@ -410,7 +410,7 @@ msgid "Assign to Me" msgstr "" #. module: project -#: model:ir.model.fields,field_description:project.field_report_project_task_user__date_start +#: model:ir.model.fields,field_description:project.field_report_project_task_user__date_assign #: model_terms:ir.ui.view,arch_db:project.view_task_project_user_search msgid "Assignation Date" msgstr "" @@ -489,7 +489,7 @@ msgstr "" #. module: project #. openerp-web #: code:addons/project/static/src/js/project_task_kanban_examples.js:29 -#: code:addons/project/static/src/js/project_task_kanban_examples.js:35 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:36 #, python-format msgid "Backlog" msgstr "" @@ -534,7 +534,7 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:61 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:67 #, python-format msgid "Brainstorm" msgstr "" @@ -596,19 +596,12 @@ msgstr "" #. openerp-web #: code:addons/project/static/src/js/tour.js:76 #, python-format -msgid "Click on a card to get the details of the task." -msgstr "" - -#. module: project -#. openerp-web -#: code:addons/project/static/src/js/tour.js:81 -#, python-format msgid "Click on the card to write more information about it and collaborate with your coworkers." msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/tour.js:86 +#: code:addons/project/static/src/js/tour.js:81 #, python-format msgid "Click on this button to modify the task." msgstr "" @@ -622,7 +615,7 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:68 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:77 #, python-format msgid "Communicate with customers on the task using the email gateway. Attach logo designs to the task, so that information flow from designers to the workers who print the t-shirt. Organize priorities amongst orders %s using the icon." msgstr "" @@ -654,7 +647,7 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:57 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:61 #, python-format msgid "Consulting" msgstr "" @@ -671,7 +664,7 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:64 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:72 #, python-format msgid "Copywriting" msgstr "" @@ -758,7 +751,7 @@ msgid "Current stage of this task" msgstr "" #. module: project -#: code:addons/project/models/project.py:861 +#: code:addons/project/models/project.py:863 #: model:ir.model.fields,field_description:project.field_project_project__partner_id #: model:ir.model.fields,field_description:project.field_project_task__partner_id #: model:ir.model.fields,field_description:project.field_report_project_task_user__partner_id @@ -770,15 +763,15 @@ msgid "Customer" msgstr "" #. module: project -#: code:addons/project/models/project.py:861 -#: code:addons/project/models/project.py:864 +#: code:addons/project/models/project.py:863 +#: code:addons/project/models/project.py:866 #, python-format msgid "Customer Email" msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:44 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:47 #, python-format msgid "Customer Feedback" msgstr "" @@ -811,7 +804,7 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:46 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:49 #, python-format msgid "Customers propose feedbacks by email; Odoo creates tasks automatically, and you can communicate on the task directly. Your managers decide which feedback is accepted %s and which feedback is moved to the \"Refused\" column." msgstr "" @@ -848,9 +841,9 @@ msgstr "" #. module: project #: model:ir.model.fields,help:project.field_project_project__privacy_visibility msgid "Defines the visibility of the tasks of the project:\n" -"- On invitation only: employees may only see the followed project and tasks.\n" -"- Visible by all employees: employees may see all project and tasks.\n" -"- Visible by following customers: employees may see everything. if website is activated, portal users may see project and tasks followed by.\n" +"- Visible by invited employees: employees may only see the followed project and tasks.\n" +"- Visible by employees: employees may see all project and tasks.\n" +"- Visible by portal users and employees: employees may see everything. Portal users may see project and tasks followed by.\n" " them or by someone of their company." msgstr "" @@ -875,7 +868,7 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:64 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:72 #, python-format msgid "Design" msgstr "" @@ -883,7 +876,7 @@ msgstr "" #. module: project #. openerp-web #: code:addons/project/static/src/js/project_task_kanban_examples.js:29 -#: code:addons/project/static/src/js/project_task_kanban_examples.js:35 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:36 #, python-format msgid "Development" msgstr "" @@ -895,7 +888,7 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:38 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:40 #, python-format msgid "Digital Marketing" msgstr "" @@ -930,11 +923,11 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:35 -#: code:addons/project/static/src/js/project_task_kanban_examples.js:39 -#: code:addons/project/static/src/js/project_task_kanban_examples.js:45 -#: code:addons/project/static/src/js/project_task_kanban_examples.js:58 -#: code:addons/project/static/src/js/project_task_kanban_examples.js:67 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:36 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:41 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:48 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:62 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:76 #: model:project.task.type,name:project.project_stage_2 #, python-format msgid "Done" @@ -942,7 +935,7 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:61 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:67 #, python-format msgid "Draft" msgstr "" @@ -969,7 +962,7 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:39 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:41 #, python-format msgid "Editing" msgstr "" @@ -1001,7 +994,7 @@ msgid "Ending Date" msgstr "" #. module: project -#: code:addons/project/models/project.py:613 +#: code:addons/project/models/project.py:614 #, python-format msgid "Error! You cannot create recursive hierarchy of task(s)." msgstr "" @@ -1013,7 +1006,7 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:40 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:42 #, python-format msgid "Everyone can propose ideas, and the Editor marks the best ones as %s. Attach all documents or links to the task directly, to have all information about a research centralized." msgstr "" @@ -1040,14 +1033,14 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:52 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:56 #, python-format msgid "Fill your Inbox easily with the email gateway. Periodically review your Inbox and schedule tasks by moving them to others columns. Every day, you review the \"This Week\" column to move important tasks \"Today\". Every Monday, you review the \"This Month\" column." msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:61 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:67 #, python-format msgid "Final Document" msgstr "" @@ -1102,7 +1095,7 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:50 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:54 #, python-format msgid "Getting Things Done (GTD)" msgstr "" @@ -1145,6 +1138,14 @@ msgid "Group By" msgstr "" #. module: project +#. openerp-web +#: code:addons/project/static/src/js/project_task_kanban_examples.js:68 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:73 +#, python-format +msgid "Handle your idea gahtering within Tasks of your new Project and discuss them in the chatter of the tasks. Use the %s and %s to signalize what is the current status of your Idea" +msgstr "" + +#. module: project #: model_terms:ir.ui.view,arch_db:project.portal_project_rating_progressbar msgid "Happy" msgstr "" @@ -1175,7 +1176,7 @@ msgid "How to get customer feedback?\n" msgstr "" #. module: project -#: code:addons/project/models/project.py:790 +#: code:addons/project/models/project.py:792 #, python-format msgid "I take it" msgstr "" @@ -1196,7 +1197,7 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:39 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:41 #, python-format msgid "Ideas" msgstr "" @@ -1235,9 +1236,14 @@ msgid "If the active field is set to False, it will allow you to hide the projec msgstr "" #. module: project +#: selection:project.task,priority:0 +msgid "Important" +msgstr "" + +#. module: project #. openerp-web #: code:addons/project/models/project.py:35 -#: code:addons/project/static/src/js/project_task_kanban_examples.js:58 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:62 #: model:project.task,legend_normal:project.project_task_1 #: model:project.task,legend_normal:project.project_task_10 #: model:project.task,legend_normal:project.project_task_11 @@ -1284,14 +1290,14 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:45 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:48 #, python-format msgid "In development" msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:51 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:55 #, python-format msgid "Inbox" msgstr "" @@ -1451,7 +1457,7 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:64 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:72 #, python-format msgid "Live" msgstr "" @@ -1463,20 +1469,19 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:67 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:76 #, python-format msgid "Logo Design" msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:51 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:55 #, python-format msgid "Long Term" msgstr "" #. module: project -#: selection:project.task,priority:0 #: selection:report.project.task.user,priority:0 msgid "Low" msgstr "" @@ -1493,6 +1498,13 @@ msgid "Main Attachments" msgstr "" #. module: project +#. openerp-web +#: code:addons/project/static/src/js/project_task_kanban_examples.js:63 +#, python-format +msgid "Manage the lifecycle of your project using the kanban view. Add newly acquired project, assign them and use the %s and %s to define if the project is ready for the next step." +msgstr "" + +#. module: project #: model:res.groups,name:project.group_project_manager msgid "Manager" msgstr "" @@ -1570,7 +1582,7 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:45 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:48 #: model_terms:ir.ui.view,arch_db:project.view_task_project_user_search #: model:project.task.type,name:project.project_stage_data_0 #, python-format @@ -1579,14 +1591,14 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:67 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:76 #, python-format msgid "New Orders" msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:58 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:62 #, python-format msgid "New Projects" msgstr "" @@ -1624,7 +1636,7 @@ msgid "Next Activity Type" msgstr "" #. module: project -#: code:addons/project/models/project.py:834 +#: code:addons/project/models/project.py:836 #, python-format msgid "No Subject" msgstr "" @@ -1725,23 +1737,11 @@ msgid "Odoo's project management allows you to manage the pipeline of your tasks msgstr "" #. module: project -#: selection:project.project,privacy_visibility:0 -msgid "On invitation only" -msgstr "" - -#. module: project #: selection:project.project,rating_status_period:0 msgid "Once a Month" msgstr "" #. module: project -#. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:30 -#, python-format -msgid "Once a task is specified, set it %s in the Specifications column, so that developers know they can pull it. If you work in sprints, use %s to mark tasks of the current sprint." -msgstr "" - -#. module: project #: model:ir.model.fields,field_description:project.field_digest_digest__kpi_project_task_opened msgid "Open Tasks" msgstr "" @@ -1807,7 +1807,7 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:64 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:72 #, python-format msgid "Page Ideas" msgstr "" @@ -1823,7 +1823,7 @@ msgid "Parent Record Thread ID" msgstr "" #. module: project -#: code:addons/project/models/project.py:901 +#: code:addons/project/models/project.py:903 #: model:ir.model.fields,field_description:project.field_project_task__parent_id #: model_terms:ir.ui.view,arch_db:project.view_task_form2 #, python-format @@ -1882,6 +1882,13 @@ msgid "Portal Access URL" msgstr "" #. module: project +#. openerp-web +#: code:addons/project/static/src/js/project_task_kanban_examples.js:30 +#, python-format +msgid "Prioritize Tasks by using the %s icon.%s Use the %s button to signalize to your colleagues that a task is ready for the next stage.%s Use the %s to signalize a problem or a need for discussion on a task." +msgstr "" + +#. module: project #: model:ir.model.fields,field_description:project.field_project_task__priority #: model:ir.model.fields,field_description:project.field_report_project_task_user__priority msgid "Priority" @@ -2011,6 +2018,11 @@ msgid "Rating" msgstr "" #. module: project +#: model:ir.model.fields,field_description:project.field_project_task__rating_avg +msgid "Rating Average" +msgstr "" + +#. module: project #: model:ir.model.fields,field_description:project.field_project_task_type__rating_template_id msgid "Rating Email Template" msgstr "" @@ -2067,7 +2079,7 @@ msgid "Ratings" msgstr "" #. module: project -#: code:addons/project/models/project.py:370 +#: code:addons/project/models/project.py:379 #, python-format msgid "Ratings of %s" msgstr "" @@ -2147,7 +2159,7 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:45 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:48 #, python-format msgid "Refused" msgstr "" @@ -2166,28 +2178,28 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:61 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:67 #, python-format msgid "Research" msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:60 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:66 #, python-format msgid "Research Project" msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:39 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:41 #, python-format msgid "Researching" msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:58 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:62 #, python-format msgid "Resources Allocation" msgstr "" @@ -2293,9 +2305,9 @@ msgid "Settings" msgstr "" #. module: project +#: model:ir.actions.act_window,name:project.portal_share_action #: model_terms:ir.ui.view,arch_db:project.edit_project #: model_terms:ir.ui.view,arch_db:project.view_project_kanban -#: model_terms:ir.ui.view,arch_db:project.view_task_form2 #: model_terms:ir.ui.view,arch_db:project.view_task_kanban msgid "Share" msgstr "" @@ -2382,11 +2394,6 @@ msgid "Start Date" msgstr "" #. module: project -#: model:ir.model.fields,field_description:project.field_project_task__date_start -msgid "Starting Date" -msgstr "" - -#. module: project #: model:ir.model.fields,help:project.field_project_task__activity_state msgid "Status based on activities\n" "Overdue: Due date is already passed\n" @@ -2420,7 +2427,7 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:66 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:75 #, python-format msgid "T-shirt Printing" msgstr "" @@ -2447,7 +2454,7 @@ msgid "Task" msgstr "" #. module: project -#: code:addons/project/models/project.py:598 +#: code:addons/project/models/project.py:599 #, python-format msgid "Task %s cannot have several subtask levels." msgstr "" @@ -2581,7 +2588,7 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:35 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:36 #, python-format msgid "Testing" msgstr "" @@ -2615,7 +2622,7 @@ msgid "The project cannot be shared with the recipient(s) because the privacy of msgstr "" #. module: project -#: code:addons/project/models/project.py:553 +#: code:addons/project/models/project.py:559 #, python-format msgid "The task cannot be shared with the recipient(s) because the privacy of the project is too restricted. Set the privacy of the project to 'Visible by following customers' in order to make it accessible by the recipient(s)." msgstr "" @@ -2655,14 +2662,14 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:51 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:55 #, python-format msgid "This Month" msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:51 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:55 #, python-format msgid "This Week" msgstr "" @@ -2718,7 +2725,7 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:67 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:76 #, python-format msgid "To Print" msgstr "" @@ -2731,7 +2738,7 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:51 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:55 #: selection:project.task,activity_state:0 #, python-format msgid "Today" @@ -2807,7 +2814,7 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/tour.js:107 +#: code:addons/project/static/src/js/tour.js:102 #, python-format msgid "Use the breadcrumbs to <b>go back to your tasks pipeline</b>." msgstr "" @@ -2829,17 +2836,22 @@ msgstr "" #. module: project #: selection:project.project,privacy_visibility:0 -msgid "Visible by all employees" +msgid "Visible by employees" +msgstr "" + +#. module: project +#: selection:project.project,privacy_visibility:0 +msgid "Visible by invited employees" msgstr "" #. module: project #: selection:project.project,privacy_visibility:0 -msgid "Visible by following customers" +msgid "Visible by portal users and employees" msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:36 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:37 #, python-format msgid "Waiting for the next stage: use %s and %s bullets." msgstr "" @@ -2865,7 +2877,7 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:63 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:71 #, python-format msgid "Website Redesign" msgstr "" @@ -2928,7 +2940,7 @@ msgstr "" #. module: project #. openerp-web -#: code:addons/project/static/src/js/project_task_kanban_examples.js:39 +#: code:addons/project/static/src/js/project_task_kanban_examples.js:41 #, python-format msgid "Writing" msgstr "" @@ -2990,7 +3002,7 @@ msgid "oe_kanban_text_red" msgstr "" #. module: project -#: code:addons/project/models/project.py:617 +#: code:addons/project/models/project.py:618 #, python-format msgid "task" msgstr "" diff --git a/addons/project/views/project_portal_templates.xml b/addons/project/views/project_portal_templates.xml index db82de63fe8..14498944913 100644 --- a/addons/project/views/project_portal_templates.xml +++ b/addons/project/views/project_portal_templates.xml @@ -238,7 +238,7 @@ <div class="row"> <div t-attf-class="col {{'col-lg-6' if not task.description else 'col-lg-12'}}"> <ul class="list-group"> - <a class="list-group-item list-group-item-action d-flex align-items-center oe_attachments py-1 px-2" t-foreach='task.attachment_ids' t-as='attachment' t-attf-href="/web/content/#{attachment.id}" target="_blank"> + <a class="list-group-item list-group-item-action d-flex align-items-center oe_attachments py-1 px-2" t-foreach='task.attachment_ids' t-as='attachment' t-attf-href="/web/content/#{attachment.id}" target="_blank" data-no-post-process=""> <div class='oe_attachment_embedded o_image o_image_small mr-2 mr-lg-3' t-att-title="attachment.name" t-att-data-mimetype="attachment.mimetype" t-attf-data-src="/web/image/#{attachment.id}/50x40"/> <div class='oe_attachment_name text-truncate'><t t-esc='attachment.name'/></div> </a> diff --git a/addons/project/views/rating_views.xml b/addons/project/views/rating_views.xml index cd505238467..09dd012de75 100644 --- a/addons/project/views/rating_views.xml +++ b/addons/project/views/rating_views.xml @@ -8,7 +8,6 @@ <field name="mode">primary</field> <field name="arch" type="xml"> <xpath expr="//filter[@name='resource']" position="after"> - <field name="parent_res_name"/> <filter string="Project" name="groupby_project" context="{'group_by': 'parent_res_name'}"/> </xpath> <xpath expr="/search" position="inside"> diff --git a/addons/project_timesheet_holidays/i18n/project_timesheet_holidays.pot b/addons/project_timesheet_holidays/i18n/project_timesheet_holidays.pot index 2c42fb44185..b4472f30176 100644 --- a/addons/project_timesheet_holidays/i18n/project_timesheet_holidays.pot +++ b/addons/project_timesheet_holidays/i18n/project_timesheet_holidays.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-21 13:17+0000\n" -"PO-Revision-Date: 2018-09-21 13:17+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -26,9 +26,9 @@ msgid "Analytic Lines" msgstr "" #. module: project_timesheet_holidays -#: code:addons/project_timesheet_holidays/models/hr_holidays.py:38 +#: code:addons/project_timesheet_holidays/models/hr_holidays.py:48 #, python-format -msgid "Both the internal project and task are required to generate timesheet for the leaves." +msgid "Both the internal project and task are required to generate timesheet for the time of. If you don't want timesheet, you must let empty internal project and task." msgstr "" #. module: project_timesheet_holidays @@ -44,7 +44,7 @@ msgstr "" #. module: project_timesheet_holidays #: model:ir.model.fields,help:project_timesheet_holidays.field_res_company__leave_timesheet_project_id #: model:ir.model.fields,help:project_timesheet_holidays.field_res_config_settings__leave_timesheet_project_id -msgid "Default project value for timesheet generated from leave type." +msgid "Default project value for timesheet generated from time off type." msgstr "" #. module: project_timesheet_holidays @@ -54,12 +54,11 @@ msgstr "" #. module: project_timesheet_holidays #: model:ir.model.fields,help:project_timesheet_holidays.field_hr_leave_type__timesheet_generate -msgid "If checked, when validating a leave, timesheet will be generated in the Vacation Project of the company." +msgid "If checked, when validating a time off, timesheet will be generated in the Vacation Project of the company." msgstr "" #. module: project_timesheet_holidays #: code:addons/project_timesheet_holidays/models/res_company.py:30 -#: model:ir.model.fields,field_description:project_timesheet_holidays.field_hr_leave_type__timesheet_project_id #: model:ir.model.fields,field_description:project_timesheet_holidays.field_res_company__leave_timesheet_project_id #: model:ir.model.fields,field_description:project_timesheet_holidays.field_res_config_settings__leave_timesheet_project_id #, python-format @@ -67,50 +66,52 @@ msgid "Internal Project" msgstr "" #. module: project_timesheet_holidays -#: model:ir.model.fields,field_description:project_timesheet_holidays.field_hr_leave_type__timesheet_task_id -msgid "Internal Task for timesheet" +#: model:ir.model.fields,field_description:project_timesheet_holidays.field_account_analytic_line__holiday_id +msgid "Leave Request" msgstr "" #. module: project_timesheet_holidays -#: model:ir.model,name:project_timesheet_holidays.model_hr_leave -msgid "Leave" +#: model:ir.model.fields,field_description:project_timesheet_holidays.field_hr_leave_type__timesheet_project_id +#: model_terms:ir.ui.view,arch_db:project_timesheet_holidays.res_config_settings_view_form +msgid "Project" msgstr "" #. module: project_timesheet_holidays -#: model:ir.model.fields,field_description:project_timesheet_holidays.field_account_analytic_line__holiday_id -msgid "Leave Request" +#: model_terms:ir.ui.view,arch_db:project_timesheet_holidays.res_config_settings_view_form +msgid "Task" msgstr "" #. module: project_timesheet_holidays -#: model:ir.model.fields,field_description:project_timesheet_holidays.field_res_company__leave_timesheet_task_id -#: model:ir.model.fields,field_description:project_timesheet_holidays.field_res_config_settings__leave_timesheet_task_id -msgid "Leave Task" +#: model:ir.model.fields,field_description:project_timesheet_holidays.field_hr_leave_type__timesheet_task_id +msgid "Task for timesheet" msgstr "" #. module: project_timesheet_holidays -#: model:ir.model,name:project_timesheet_holidays.model_hr_leave_type -msgid "Leave Type" +#: model:ir.model.fields,help:project_timesheet_holidays.field_hr_leave_type__timesheet_project_id +msgid "The project will contain the timesheet generated when a time off is validated." msgstr "" #. module: project_timesheet_holidays #: code:addons/project_timesheet_holidays/models/res_company.py:40 +#: model:ir.model,name:project_timesheet_holidays.model_hr_leave #, python-format -msgid "Leaves" +msgid "Time Off" msgstr "" #. module: project_timesheet_holidays -#: model_terms:ir.ui.view,arch_db:project_timesheet_holidays.res_config_settings_view_form -msgid "Project" +#: model:ir.model.fields,field_description:project_timesheet_holidays.field_res_company__leave_timesheet_task_id +#: model:ir.model.fields,field_description:project_timesheet_holidays.field_res_config_settings__leave_timesheet_task_id +msgid "Time Off Task" msgstr "" #. module: project_timesheet_holidays -#: model_terms:ir.ui.view,arch_db:project_timesheet_holidays.res_config_settings_view_form -msgid "Task" +#: model:ir.model,name:project_timesheet_holidays.model_hr_leave_type +msgid "Time Off Type" msgstr "" #. module: project_timesheet_holidays -#: model:ir.model.fields,help:project_timesheet_holidays.field_hr_leave_type__timesheet_project_id -msgid "The project will contain the timesheet generated when a leave is validated." +#: model_terms:ir.ui.view,arch_db:project_timesheet_holidays.hr_holiday_status_view_form_inherit +msgid "Timesheet" msgstr "" #. module: project_timesheet_holidays diff --git a/addons/purchase/i18n/purchase.pot b/addons/purchase/i18n/purchase.pot index f4e88da6e35..7b1576041ae 100644 --- a/addons/purchase/i18n/purchase.pot +++ b/addons/purchase/i18n/purchase.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:59+0000\n" -"PO-Revision-Date: 2019-01-16 07:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -402,7 +402,7 @@ msgid "Cancelled Purchase Order #" msgstr "" #. module: purchase -#: code:addons/purchase/models/purchase.py:558 +#: code:addons/purchase/models/purchase.py:568 #, python-format msgid "Cannot delete a purchase order line which is in state '%s'." msgstr "" @@ -432,7 +432,7 @@ msgid "Company Currency" msgstr "" #. module: purchase -#: code:addons/purchase/models/purchase.py:284 +#: code:addons/purchase/models/purchase.py:285 #, python-format msgid "Compose Email" msgstr "" @@ -623,7 +623,7 @@ msgid "Extended Filters" msgstr "" #. module: purchase -#: code:addons/purchase/models/purchase.py:540 +#: code:addons/purchase/models/purchase.py:550 #, python-format msgid "Extra line with %s " msgstr "" @@ -727,7 +727,7 @@ msgid "Import vendor pricelists" msgstr "" #. module: purchase -#: code:addons/purchase/models/purchase.py:165 +#: code:addons/purchase/models/purchase.py:166 #, python-format msgid "In order to delete a purchase order, you must cancel it first." msgstr "" @@ -977,11 +977,6 @@ msgid "No longer edit orders once confirmed" msgstr "" #. module: purchase -#: model:ir.model.fields,help:purchase.field_purchase_order_line__product_image -msgid "Non-stored related field to allow portal user to see the image of the product he has ordered" -msgstr "" - -#. module: purchase #: model_terms:ir.ui.view,arch_db:purchase.purchase_order_form msgid "Notes" msgstr "" @@ -1156,11 +1151,6 @@ msgid "Product Category" msgstr "" #. module: purchase -#: model:ir.model.fields,field_description:purchase.field_purchase_order_line__product_image -msgid "Product Image" -msgstr "" - -#. module: purchase #: model:ir.model.fields,field_description:purchase.field_purchase_report__unit_quantity msgid "Product Quantity" msgstr "" @@ -1237,7 +1227,7 @@ msgstr "" #. module: purchase #: code:addons/purchase/controllers/portal.py:63 -#: code:addons/purchase/models/purchase.py:281 +#: code:addons/purchase/models/purchase.py:282 #: model:ir.actions.report,name:purchase.action_report_purchase_order #: model:ir.model,name:purchase.model_purchase_order #: model:ir.model.fields,field_description:purchase.field_account_invoice_line__purchase_id @@ -1518,7 +1508,7 @@ msgid "Reporting" msgstr "" #. module: purchase -#: code:addons/purchase/models/purchase.py:279 +#: code:addons/purchase/models/purchase.py:280 #: model:ir.actions.report,name:purchase.report_purchase_quotation #: model_terms:ir.ui.view,arch_db:purchase.portal_my_purchase_order #: model_terms:ir.ui.view,arch_db:purchase.report_purchasequotation_document @@ -1666,6 +1656,11 @@ msgid "Supplier Currency" msgstr "" #. module: purchase +#: model:ir.model,name:purchase.model_product_supplierinfo +msgid "Supplier Pricelist" +msgstr "" + +#. module: purchase #: model:ir.model.fields,field_description:purchase.field_purchase_order_line__price_tax msgid "Tax" msgstr "" @@ -1734,13 +1729,13 @@ msgid "This note will show up on purchase orders." msgstr "" #. module: purchase -#: code:addons/purchase/models/account_invoice.py:156 +#: code:addons/purchase/models/account_invoice.py:157 #, python-format msgid "This vendor bill has been created from: %s" msgstr "" #. module: purchase -#: code:addons/purchase/models/account_invoice.py:170 +#: code:addons/purchase/models/account_invoice.py:171 #, python-format msgid "This vendor bill has been modified from: %s" msgstr "" @@ -1797,7 +1792,7 @@ msgid "Total amount" msgstr "" #. module: purchase -#: code:addons/purchase/models/purchase.py:340 +#: code:addons/purchase/models/purchase.py:341 #, python-format msgid "Unable to cancel this purchase order. You must first cancel the related vendor bills." msgstr "" @@ -1940,8 +1935,8 @@ msgid "Warning" msgstr "" #. module: purchase -#: code:addons/purchase/models/purchase.py:227 -#: code:addons/purchase/models/purchase.py:624 +#: code:addons/purchase/models/purchase.py:228 +#: code:addons/purchase/models/purchase.py:634 #, python-format msgid "Warning for %s" msgstr "" @@ -1985,13 +1980,13 @@ msgstr "" #. module: purchase #: model_terms:ir.actions.act_window,help:purchase.product_product_action -msgid "You must define a product for everything you purchase,\n" -" whether it's a physical product, a consumable or services." +msgid "You must define a product for everything you sell or purchase,\n" +" whether it's a storable product, a consumable or a service." msgstr "" #. module: purchase #: model_terms:ir.actions.act_window,help:purchase.product_normal_action_puchased -msgid "You must define a product for everything you purchase,\n" -" whether it's a physical product, a consumable or services." +msgid "You must define a product for everything you sell or purchase,\n" +" whether it's a storable product, a consumable or a service." msgstr "" diff --git a/addons/purchase/models/account_invoice.py b/addons/purchase/models/account_invoice.py index 4ac0a3a4156..eaa71775476 100644 --- a/addons/purchase/models/account_invoice.py +++ b/addons/purchase/models/account_invoice.py @@ -124,7 +124,6 @@ class AccountInvoice(models.Model): purchase_ids = self.invoice_line_ids.mapped('purchase_id') if purchase_ids: self.origin = ', '.join(purchase_ids.mapped('name')) - self.reference = ', '.join(purchase_ids.filtered('partner_ref').mapped('partner_ref')) or self.reference @api.onchange('partner_id', 'company_id') def _onchange_partner_id(self): diff --git a/addons/purchase/models/purchase.py b/addons/purchase/models/purchase.py index 1b640a30d62..4aa4100587d 100644 --- a/addons/purchase/models/purchase.py +++ b/addons/purchase/models/purchase.py @@ -413,6 +413,8 @@ class PurchaseOrder(models.Model): # Do not set an invoice_id if we want to create a new bill. if not create_bill: result['res_id'] = self.invoice_ids.id or False + result['context']['default_origin'] = self.name + result['context']['default_reference'] = self.partner_ref return result @api.multi diff --git a/addons/purchase/report/purchase_bill.py b/addons/purchase/report/purchase_bill.py index a16ff44b60c..036309e8e29 100644 --- a/addons/purchase/report/purchase_bill.py +++ b/addons/purchase/report/purchase_bill.py @@ -30,7 +30,7 @@ class PurchaseBillUnion(models.Model): id as vendor_bill_id, NULL as purchase_order_id FROM account_invoice WHERE - type='in_invoice' and state in ('open','in_payment','paid','cancel') + type='in_invoice' and COALESCE(number, '') != '' UNION SELECT -id, name, partner_ref, partner_id, date_order::date as date, amount_untaxed as amount, currency_id, company_id, diff --git a/addons/purchase/report/purchase_order_templates.xml b/addons/purchase/report/purchase_order_templates.xml index 4418b15b0a6..17162f934f9 100644 --- a/addons/purchase/report/purchase_order_templates.xml +++ b/addons/purchase/report/purchase_order_templates.xml @@ -2,7 +2,7 @@ <odoo> <template id="report_purchaseorder_document"> <t t-call="web.external_layout"> - <t t-set="o" t-value="o.with_context({'lang':o.partner_id.lang})"/> + <t t-set="o" t-value="o.with_context(lang=o.partner_id.lang)"/> <t t-set="address"> <div t-field="o.partner_id" t-options='{"widget": "contact", "fields": ["address", "name", "phone"], "no_marker": True, "phone_icons": True}'/> diff --git a/addons/purchase/report/purchase_quotation_templates.xml b/addons/purchase/report/purchase_quotation_templates.xml index e63e1a88198..eec1465e0ca 100644 --- a/addons/purchase/report/purchase_quotation_templates.xml +++ b/addons/purchase/report/purchase_quotation_templates.xml @@ -2,7 +2,7 @@ <odoo> <template id="report_purchasequotation_document"> <t t-call="web.external_layout"> - <t t-set="o" t-value="o.with_context({'lang':o.partner_id.lang})"/> + <t t-set="o" t-value="o.with_context(lang=o.partner_id.lang)"/> <t t-set="address"> <div t-field="o.partner_id" t-options='{"widget": "contact", "fields": ["address", "name", "phone"], "no_marker": True, "phone_icons": True}'/> diff --git a/addons/purchase_requisition_stock/i18n/purchase_requisition_stock.pot b/addons/purchase_requisition_stock/i18n/purchase_requisition_stock.pot new file mode 100644 index 00000000000..814aa6c51c9 --- /dev/null +++ b/addons/purchase_requisition_stock/i18n/purchase_requisition_stock.pot @@ -0,0 +1,72 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * purchase_requisition_stock +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~12.2\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-03-20 14:18+0000\n" +"PO-Revision-Date: 2019-03-20 14:18+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: purchase_requisition_stock +#: model:ir.model.fields,field_description:purchase_requisition_stock.field_purchase_requisition_line__move_dest_id +msgid "Downstream Move" +msgstr "" + +#. module: purchase_requisition_stock +#: model:ir.model,name:purchase_requisition_stock.model_stock_warehouse_orderpoint +msgid "Minimum Inventory Rule" +msgstr "" + +#. module: purchase_requisition_stock +#: model:ir.model.fields,field_description:purchase_requisition_stock.field_purchase_requisition__picking_type_id +msgid "Operation Type" +msgstr "" + +#. module: purchase_requisition_stock +#: model:ir.model,name:purchase_requisition_stock.model_procurement_group +msgid "Procurement Group" +msgstr "" + +#. module: purchase_requisition_stock +#: model:ir.model,name:purchase_requisition_stock.model_purchase_order +msgid "Purchase Order" +msgstr "" + +#. module: purchase_requisition_stock +#: model:ir.model,name:purchase_requisition_stock.model_purchase_requisition +msgid "Purchase Requisition" +msgstr "" + +#. module: purchase_requisition_stock +#: model:ir.model,name:purchase_requisition_stock.model_purchase_requisition_line +msgid "Purchase Requisition Line" +msgstr "" + +#. module: purchase_requisition_stock +#: model:ir.model.fields,field_description:purchase_requisition_stock.field_stock_move__requisition_line_ids +msgid "Requisition Line" +msgstr "" + +#. module: purchase_requisition_stock +#: model:ir.model,name:purchase_requisition_stock.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: purchase_requisition_stock +#: model:ir.model,name:purchase_requisition_stock.model_stock_rule +msgid "Stock Rule" +msgstr "" + +#. module: purchase_requisition_stock +#: model:ir.model.fields,field_description:purchase_requisition_stock.field_purchase_requisition__warehouse_id +msgid "Warehouse" +msgstr "" + diff --git a/addons/rating/i18n/rating.pot b/addons/rating/i18n/rating.pot index dd8ca76f32e..ac8c1ad4e21 100644 --- a/addons/rating/i18n/rating.pot +++ b/addons/rating/i18n/rating.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:59+0000\n" -"PO-Revision-Date: 2019-01-16 07:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -242,6 +242,7 @@ msgid "Rating" msgstr "" #. module: rating +#: model:ir.model.fields,field_description:rating.field_rating_mixin__rating_avg #: model_terms:ir.ui.view,arch_db:rating.rating_rating_view_graph #: model_terms:ir.ui.view,arch_db:rating.rating_rating_view_pivot msgid "Rating Average" diff --git a/addons/repair/i18n/repair.pot b/addons/repair/i18n/repair.pot index 5a30381eaf9..1677faa4865 100644 --- a/addons/repair/i18n/repair.pot +++ b/addons/repair/i18n/repair.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-21 13:18+0000\n" -"PO-Revision-Date: 2018-09-21 13:18+0000\n" +"POT-Creation-Date: 2019-03-20 13:51+0000\n" +"PO-Revision-Date: 2019-03-20 13:51+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -827,6 +827,12 @@ msgid "Repair Reference" msgstr "" #. module: repair +#: model:product.product,name:repair.product_service_order_repair +#: model:product.template,name:repair.product_service_order_repair_product_template +msgid "Repair Services" +msgstr "" + +#. module: repair #: code:addons/repair/models/repair.py:196 #, python-format msgid "Repair must be canceled in order to reset it to draft." @@ -1050,6 +1056,12 @@ msgid "Unit of Measure" msgstr "" #. module: repair +#: model:product.product,uom_name:repair.product_service_order_repair +#: model:product.template,uom_name:repair.product_service_order_repair_product_template +msgid "Unit(s)" +msgstr "" + +#. module: repair #: model:ir.model.fields,field_description:repair.field_repair_order__message_unread msgid "Unread Messages" msgstr "" diff --git a/addons/repair/report/repair_templates_repair_order.xml b/addons/repair/report/repair_templates_repair_order.xml index 1090b957ea2..0703fca3b55 100644 --- a/addons/repair/report/repair_templates_repair_order.xml +++ b/addons/repair/report/repair_templates_repair_order.xml @@ -4,7 +4,7 @@ <template id="report_repairorder"> <t t-set="o" t-value="doc"/> <t t-call="web.external_layout"> - <t t-set="o" t-value="o.with_context({'lang': o.partner_id.lang})" /> + <t t-set="o" t-value="o.with_context(lang=o.partner_id.lang)" /> <t t-set="information_block"> <strong t-if="o.address_id == o.partner_invoice_id">Invoice and shipping address:</strong> <div t-if="o.partner_invoice_id"> diff --git a/addons/resource/i18n/resource.pot b/addons/resource/i18n/resource.pot index 9b4eab0b59e..eca237ed425 100644 --- a/addons/resource/i18n/resource.pot +++ b/addons/resource/i18n/resource.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-21 13:17+0000\n" -"PO-Revision-Date: 2018-09-21 13:17+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,7 +16,7 @@ msgstr "" "Plural-Forms: \n" #. module: resource -#: code:addons/resource/models/resource.py:485 +#: code:addons/resource/models/resource.py:499 #, python-format msgid "%s (copy)" msgstr "" @@ -33,7 +33,7 @@ msgstr "" #. module: resource #: model:ir.model.fields,field_description:resource.field_resource_calendar__hours_per_day -msgid "Average hour per day" +msgid "Average Hour per Day" msgstr "" #. module: resource @@ -136,13 +136,13 @@ msgid "Friday" msgstr "" #. module: resource -#: code:addons/resource/models/resource.py:166 +#: code:addons/resource/models/resource.py:167 #, python-format -msgid "Friday Evening" +msgid "Friday Afternoon" msgstr "" #. module: resource -#: code:addons/resource/models/resource.py:165 +#: code:addons/resource/models/resource.py:166 #, python-format msgid "Friday Morning" msgstr "" @@ -150,7 +150,7 @@ msgstr "" #. module: resource #: model:ir.model.fields,field_description:resource.field_resource_calendar__global_leave_ids #: model_terms:ir.ui.view,arch_db:resource.resource_calendar_form -msgid "Global Leaves" +msgid "Global Time Off" msgstr "" #. module: resource @@ -181,7 +181,7 @@ msgstr "" #. module: resource #: model:ir.model.fields,help:resource.field_resource_calendar_leaves__resource_id -msgid "If empty, this is a generic holiday for the company. If a resource is set, the holiday/leave is only for this resource" +msgid "If empty, this is a generic time off for the company. If a resource is set, the time off is only for this resource" msgstr "" #. module: resource @@ -223,11 +223,6 @@ msgid "Last Updated on" msgstr "" #. module: resource -#: selection:resource.calendar.leaves,time_type:0 -msgid "Leave" -msgstr "" - -#. module: resource #: model_terms:ir.ui.view,arch_db:resource.view_resource_calendar_leaves_search msgid "Leave Date" msgstr "" @@ -239,12 +234,6 @@ msgid "Leave Detail" msgstr "" #. module: resource -#: model:ir.model.fields,field_description:resource.field_resource_calendar__leave_ids -#: model_terms:ir.ui.view,arch_db:resource.resource_calendar_form -msgid "Leaves" -msgstr "" - -#. module: resource #: selection:resource.resource,resource_type:0 msgid "Material" msgstr "" @@ -255,13 +244,13 @@ msgid "Monday" msgstr "" #. module: resource -#: code:addons/resource/models/resource.py:158 +#: code:addons/resource/models/resource.py:159 #, python-format -msgid "Monday Evening" +msgid "Monday Afternoon" msgstr "" #. module: resource -#: code:addons/resource/models/resource.py:157 +#: code:addons/resource/models/resource.py:158 #, python-format msgid "Monday Morning" msgstr "" @@ -297,6 +286,7 @@ msgid "Related user name for the resource to manage its access." msgstr "" #. module: resource +#: model:ir.model.fields,field_description:resource.field_resource_calendar_attendance__resource_id #: model:ir.model.fields,field_description:resource.field_resource_calendar_leaves__resource_id #: model:ir.model.fields,field_description:resource.field_resource_mixin__resource_id #: model:ir.model.fields,field_description:resource.field_resource_test__resource_id @@ -309,20 +299,20 @@ msgid "Resource" msgstr "" #. module: resource +#: model:ir.model,name:resource.model_resource_mixin +msgid "Resource Mixin" +msgstr "" + +#. module: resource #: model:ir.actions.act_window,name:resource.action_resource_calendar_leave_tree #: model:ir.actions.act_window,name:resource.resource_calendar_leaves_action_from_calendar #: model:ir.ui.menu,name:resource.menu_view_resource_calendar_leaves_search -msgid "Resource Leaves" +msgid "Resource Time Off" msgstr "" #. module: resource #: model:ir.model,name:resource.model_resource_calendar_leaves -msgid "Resource Leaves Detail" -msgstr "" - -#. module: resource -#: model:ir.model,name:resource.model_resource_mixin -msgid "Resource Mixin" +msgid "Resource Time Off Detail" msgstr "" #. module: resource @@ -352,7 +342,7 @@ msgstr "" #. module: resource #: model:ir.actions.act_window,name:resource.resource_calendar_resources_leaves -msgid "Resources Leaves" +msgid "Resources Time Off" msgstr "" #. module: resource @@ -373,7 +363,7 @@ msgstr "" #. module: resource #: model_terms:ir.ui.view,arch_db:resource.view_resource_calendar_leaves_search -msgid "Search Working Period Leaves" +msgid "Search Working Period Time Off" msgstr "" #. module: resource @@ -419,15 +409,15 @@ msgid "Test Resource Model" msgstr "" #. module: resource -#: code:addons/resource/models/resource.py:464 +#: code:addons/resource/models/resource.py:478 #, python-format msgid "The efficiency factor cannot be equal to 0." msgstr "" #. module: resource -#: code:addons/resource/models/resource.py:519 +#: code:addons/resource/models/resource.py:533 #, python-format -msgid "The start date of the leave must be earlier end date." +msgid "The start date of the time off must be earlier end date." msgstr "" #. module: resource @@ -449,18 +439,25 @@ msgid "Thursday" msgstr "" #. module: resource -#: code:addons/resource/models/resource.py:164 +#: code:addons/resource/models/resource.py:165 #, python-format -msgid "Thursday Evening" +msgid "Thursday Afternoon" msgstr "" #. module: resource -#: code:addons/resource/models/resource.py:163 +#: code:addons/resource/models/resource.py:164 #, python-format msgid "Thursday Morning" msgstr "" #. module: resource +#: model:ir.model.fields,field_description:resource.field_resource_calendar__leave_ids +#: model_terms:ir.ui.view,arch_db:resource.resource_calendar_form +#: selection:resource.calendar.leaves,time_type:0 +msgid "Time Off" +msgstr "" + +#. module: resource #: model:ir.model.fields,field_description:resource.field_resource_calendar_leaves__time_type msgid "Time Type" msgstr "" @@ -484,13 +481,13 @@ msgid "Tuesday" msgstr "" #. module: resource -#: code:addons/resource/models/resource.py:160 +#: code:addons/resource/models/resource.py:161 #, python-format -msgid "Tuesday Evening" +msgid "Tuesday Afternoon" msgstr "" #. module: resource -#: code:addons/resource/models/resource.py:159 +#: code:addons/resource/models/resource.py:160 #, python-format msgid "Tuesday Morning" msgstr "" @@ -517,20 +514,20 @@ msgid "Wednesday" msgstr "" #. module: resource -#: code:addons/resource/models/resource.py:162 +#: code:addons/resource/models/resource.py:163 #, python-format -msgid "Wednesday Evening" +msgid "Wednesday Afternoon" msgstr "" #. module: resource -#: code:addons/resource/models/resource.py:161 +#: code:addons/resource/models/resource.py:162 #, python-format msgid "Wednesday Morning" msgstr "" #. module: resource #: model:ir.model.fields,help:resource.field_resource_calendar_leaves__time_type -msgid "Whether this should be computed as a holiday or as work time (eg: formation)" +msgid "Whether this should be computed as a time off or as work time (eg: formation)" msgstr "" #. module: resource @@ -563,7 +560,7 @@ msgid "Working Hours" msgstr "" #. module: resource -#: code:addons/resource/models/resource.py:152 +#: code:addons/resource/models/resource.py:153 #, python-format msgid "Working Hours of %s" msgstr "" diff --git a/addons/sale/data/mail_data.xml b/addons/sale/data/mail_data.xml index 70db8f8c5d2..b39a793f83b 100644 --- a/addons/sale/data/mail_data.xml +++ b/addons/sale/data/mail_data.xml @@ -6,7 +6,6 @@ <field name="name">Order Upsell</field> <field name="icon">fa-line-chart</field> <field name="res_model_id" ref="sale.model_sale_order"/> - <field name="is_master_data">True</field> </record> <!-- Sale-related subtypes for messaging / Chatter --> diff --git a/addons/sale/i18n/sale.pot b/addons/sale/i18n/sale.pot index ca9e9a76a8e..e0bcf2e6c66 100644 --- a/addons/sale/i18n/sale.pot +++ b/addons/sale/i18n/sale.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:59+0000\n" -"PO-Revision-Date: 2019-01-16 07:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -27,7 +27,7 @@ msgstr "" #. module: sale #: model:mail.template,report_name:sale.email_template_edi_sale -msgid "${(object.name or '').replace('/','_')}${object.state == 'draft' and '_draft' or ''}" +msgid "${(object.name or '').replace('/','_')}" msgstr "" #. module: sale @@ -94,11 +94,6 @@ msgstr "" #. module: sale #: model_terms:ir.ui.view,arch_db:sale.sale_order_portal_template -msgid "<i class=\"fa fa-check\"/> Accept & Sign" -msgstr "" - -#. module: sale -#: model_terms:ir.ui.view,arch_db:sale.sale_order_portal_template msgid "<i class=\"fa fa-clock-o\" aria-title=\"Dates\" title=\"Dates\"/>" msgstr "" @@ -361,13 +356,13 @@ msgid "<strong>Your Reference:</strong>" msgstr "" #. module: sale -#: code:addons/sale/models/sale.py:805 +#: code:addons/sale/models/sale.py:818 #, python-format msgid "A journal must be specified of the acquirer %s." msgstr "" #. module: sale -#: code:addons/sale/models/sale.py:798 +#: code:addons/sale/models/sale.py:811 #, python-format msgid "A payment acquirer is required to create a transaction." msgstr "" @@ -378,13 +373,18 @@ msgid "A single sales price per product" msgstr "" #. module: sale -#: code:addons/sale/models/sale.py:769 +#: model:ir.model.fields,help:sale.field_sale_advance_payment_inv__advance_payment_method +msgid "A standard invoice is issued with all the order lines ready for invoicing, according to their invoicing policy (based on ordered or delivered quantity)." +msgstr "" + +#. module: sale +#: code:addons/sale/models/sale.py:782 #, python-format msgid "A transaction can't be linked to sales orders having different currencies." msgstr "" #. module: sale -#: code:addons/sale/models/sale.py:774 +#: code:addons/sale/models/sale.py:787 #, python-format msgid "A transaction can't be linked to sales orders having different partners." msgstr "" @@ -392,8 +392,8 @@ msgstr "" #. module: sale #: model_terms:ir.actions.act_window,help:sale.action_orders_upselling msgid "A typical example is the pre-paid hours of service,\n" -" where you want to sell extra hours to the customer\n" -" because the initial hours have already been used." +" when you want to sell extra hours because the initial\n" +" hours have already been used." msgstr "" #. module: sale @@ -412,6 +412,16 @@ msgid "Accept & Pay" msgstr "" #. module: sale +#: model_terms:ir.ui.view,arch_db:sale.sale_order_portal_template +msgid "Accept & Sign" +msgstr "" + +#. module: sale +#: model_terms:ir.ui.view,arch_db:sale.mail_notification_paynow_online +msgid "Accept and sign online" +msgstr "" + +#. module: sale #: model:ir.model.fields,field_description:sale.field_sale_order__access_warning msgid "Access warning" msgstr "" @@ -489,11 +499,6 @@ msgid "Add one" msgstr "" #. module: sale -#: model:ir.model.fields,field_description:sale.field_account_invoice__comment -msgid "Additional Information" -msgstr "" - -#. module: sale #: model:res.groups,name:sale.group_delivery_invoice_address msgid "Addresses in Sales Orders" msgstr "" @@ -613,7 +618,7 @@ msgstr "" #. module: sale #. openerp-web -#: code:addons/sale/static/src/js/product_configurator_controller.js:125 +#: code:addons/sale/static/src/js/product_configurator_controller.js:131 #, python-format msgid "Back" msgstr "" @@ -694,7 +699,7 @@ msgstr "" #. module: sale #. openerp-web -#: code:addons/sale/static/src/js/tour.js:41 +#: code:addons/sale/static/src/js/tour.js:39 #, python-format msgid "Click here to add some products or services to your quotation." msgstr "" @@ -790,7 +795,7 @@ msgstr "" #. module: sale #. openerp-web -#: code:addons/sale/static/src/js/product_configurator_controller.js:126 +#: code:addons/sale/static/src/js/product_configurator_controller.js:132 #, python-format msgid "Configure" msgstr "" @@ -812,7 +817,7 @@ msgstr "" #. module: sale #. openerp-web -#: code:addons/sale/static/src/js/product_configurator_controller.js:124 +#: code:addons/sale/static/src/js/product_configurator_controller.js:130 #: model_terms:ir.ui.view,arch_db:sale.view_order_form #, python-format msgid "Confirm" @@ -843,8 +848,9 @@ msgid "Coupons & Promotions" msgstr "" #. module: sale +#: model:ir.model.fields,field_description:sale.field_sale_advance_payment_inv__advance_payment_method #: model_terms:ir.ui.view,arch_db:sale.view_sale_advance_payment_inv -msgid "Create Invoices" +msgid "Create Invoice" msgstr "" #. module: sale @@ -864,7 +870,7 @@ msgstr "" #. module: sale #: model_terms:ir.ui.view,arch_db:sale.view_sale_advance_payment_inv -msgid "Create and View Invoices" +msgid "Create and View Invoice" msgstr "" #. module: sale @@ -948,6 +954,12 @@ msgid "Customer Entity" msgstr "" #. module: sale +#: model:ir.model.fields,field_description:sale.field_sale_report__industry_id +#: model_terms:ir.ui.view,arch_db:sale.view_order_product_search +msgid "Customer Industry" +msgstr "" + +#. module: sale #: model:ir.model.fields,help:sale.field_sale_order__access_url msgid "Customer Portal URL" msgstr "" @@ -958,6 +970,11 @@ msgid "Customer Reference" msgstr "" #. module: sale +#: model_terms:ir.ui.view,arch_db:sale.view_order_form +msgid "Customer Signature" +msgstr "" + +#. module: sale #: model:ir.model.fields,field_description:sale.field_sale_advance_payment_inv__deposit_taxes_id msgid "Customer Taxes" msgstr "" @@ -1000,6 +1017,11 @@ msgid "Date Order" msgstr "" #. module: sale +#: model:ir.model.fields,help:sale.field_sale_order__signed_on +msgid "Date of the signature." +msgstr "" + +#. module: sale #: model:ir.model.fields,help:sale.field_sale_order__create_date msgid "Date on which sales order is created." msgstr "" @@ -1015,6 +1037,11 @@ msgid "Date:" msgstr "" #. module: sale +#: model:ir.model.fields,field_description:sale.field_sale_advance_payment_inv__deduct_down_payments +msgid "Deduct down payments" +msgstr "" + +#. module: sale #: model_terms:ir.ui.view,arch_db:sale.res_config_settings_view_form msgid "Default Limit:" msgstr "" @@ -1031,16 +1058,6 @@ msgid "Default Quotation Validity (Days)" msgstr "" #. module: sale -#: model:ir.model.fields,field_description:sale.field_res_config_settings__use_sale_note -msgid "Default Terms & Conditions" -msgstr "" - -#. module: sale -#: model:ir.model.fields,field_description:sale.field_res_company__sale_note -msgid "Default Terms and Conditions" -msgstr "" - -#. module: sale #: model:ir.model.fields,help:sale.field_res_config_settings__deposit_default_product_id msgid "Default product used for payment advances" msgstr "" @@ -1056,7 +1073,7 @@ msgid "Delivered Manually" msgstr "" #. module: sale -#: code:addons/sale/models/sale.py:1054 +#: code:addons/sale/models/sale.py:1059 #: model:ir.model.fields,field_description:sale.field_sale_order_line__qty_delivered #: model_terms:ir.ui.view,arch_db:sale.view_order_form #, python-format @@ -1178,7 +1195,7 @@ msgid "Done" msgstr "" #. module: sale -#: code:addons/sale/wizard/sale_make_invoice_advance.py:87 +#: code:addons/sale/wizard/sale_make_invoice_advance.py:89 #, python-format msgid "Down Payment" msgstr "" @@ -1210,7 +1227,7 @@ msgid "Down payment (percentage)" msgstr "" #. module: sale -#: code:addons/sale/wizard/sale_make_invoice_advance.py:84 +#: code:addons/sale/wizard/sale_make_invoice_advance.py:86 #, python-format msgid "Down payment of %s%%" msgstr "" @@ -1267,7 +1284,7 @@ msgid "Extended Filters" msgstr "" #. module: sale -#: code:addons/sale/models/sale.py:1028 +#: code:addons/sale/models/sale.py:1033 #, python-format msgid "Extra line with %s " msgstr "" @@ -1352,6 +1369,11 @@ msgid "HTML Color Index" msgstr "" #. module: sale +#: model:ir.model.fields,field_description:sale.field_sale_advance_payment_inv__has_down_payments +msgid "Has down payments" +msgstr "" + +#. module: sale #: model:ir.model.fields,help:sale.field_product_attribute_value__html_color #: model:ir.model.fields,help:sale.field_product_template_attribute_value__html_color msgid "Here you can set a\n" @@ -1398,24 +1420,19 @@ msgid "If the sale is locked, you can not modify it anymore. However, you will s msgstr "" #. module: sale -#: code:addons/sale/controllers/portal.py:280 +#: code:addons/sale/controllers/portal.py:294 #, python-format msgid "If we store your payment information on our server, subscription payments will be made automatically." msgstr "" #. module: sale -#: model:ir.model.fields,help:sale.field_sale_order_line__product_image -msgid "Image of the product variant (Big-sized image of product template if false). It is automatically resized as a 1024x1024px image, with aspect ratio preserved." -msgstr "" - -#. module: sale -#: code:addons/sale/models/product_template.py:92 +#: code:addons/sale/models/product_template.py:163 #, python-format msgid "Import Template for Products" msgstr "" #. module: sale -#: code:addons/sale/models/product_template.py:95 +#: code:addons/sale/models/product_template.py:166 #, python-format msgid "Import Template for Products (with several prices)" msgstr "" @@ -1431,24 +1448,25 @@ msgid "Income Account" msgstr "" #. module: sale -#: model_terms:ir.ui.view,arch_db:sale.res_config_settings_view_form -msgid "Insert your terms & conditions here..." +#: code:addons/sale/controllers/portal.py:204 +#, python-format +msgid "Invalid order." msgstr "" #. module: sale -#: code:addons/sale/controllers/portal.py:198 +#: code:addons/sale/controllers/portal.py:218 #, python-format -msgid "Invalid order" +msgid "Invalid signature data." msgstr "" #. module: sale -#: code:addons/sale/models/sale.py:788 +#: code:addons/sale/models/sale.py:801 #, python-format msgid "Invalid token found! Token acquirer %s != %s" msgstr "" #. module: sale -#: code:addons/sale/models/sale.py:791 +#: code:addons/sale/models/sale.py:804 #, python-format msgid "Invalid token found! Token partner %s != %s" msgstr "" @@ -1459,7 +1477,7 @@ msgid "Invoice" msgstr "" #. module: sale -#: code:addons/sale/models/account_invoice.py:79 +#: code:addons/sale/models/account_invoice.py:73 #, python-format msgid "Invoice %s paid" msgstr "" @@ -1531,22 +1549,12 @@ msgid "Invoice what is ordered" msgstr "" #. module: sale -#: selection:sale.advance.payment.inv,advance_payment_method:0 -msgid "Invoiceable lines" -msgstr "" - -#. module: sale -#: selection:sale.advance.payment.inv,advance_payment_method:0 -msgid "Invoiceable lines (deduct down payments)" -msgstr "" - -#. module: sale #: selection:sale.report,state:0 msgid "Invoiced" msgstr "" #. module: sale -#: code:addons/sale/models/sale.py:1055 +#: code:addons/sale/models/sale.py:1060 #: model:ir.model.fields,field_description:sale.field_sale_order_line__qty_invoiced #: model_terms:ir.ui.view,arch_db:sale.view_order_form #, python-format @@ -1654,14 +1662,14 @@ msgid "Is true if the sales order line comes from an expense or a vendor bills" msgstr "" #. module: sale -#: code:addons/sale/models/sale.py:1077 +#: code:addons/sale/models/sale.py:1082 #, python-format msgid "It is forbidden to modify the following fields in a locked order:\n" "%s" msgstr "" #. module: sale -#: code:addons/sale/models/sale.py:661 +#: code:addons/sale/models/sale.py:674 #, python-format msgid "It is not allowed to confirm an order in the following states: %s" msgstr "" @@ -1860,10 +1868,10 @@ msgid "Name of the person that signed the SO." msgstr "" #. module: sale -#: code:addons/sale/models/sale.py:121 -#: code:addons/sale/models/sale.py:357 -#: code:addons/sale/models/sale.py:359 -#: code:addons/sale/models/sale.py:361 +#: code:addons/sale/models/sale.py:123 +#: code:addons/sale/models/sale.py:360 +#: code:addons/sale/models/sale.py:362 +#: code:addons/sale/models/sale.py:364 #: selection:sale.report,state:0 #, python-format msgid "New" @@ -1995,7 +2003,7 @@ msgstr "" #. module: sale #. openerp-web -#: code:addons/sale/static/src/js/tour.js:65 +#: code:addons/sale/static/src/js/tour.js:60 #, python-format msgid "Once your quotation is ready, you can save, print or send it by email." msgstr "" @@ -2027,6 +2035,14 @@ msgid "Only Integer Value should be valid." msgstr "" #. module: sale +#. openerp-web +#: code:addons/sale/static/src/js/tour.js:13 +#: code:addons/sale/static/src/js/tour.js:18 +#, python-format +msgid "Open Sales app to send your first quotation in a few clicks." +msgstr "" + +#. module: sale #: model_terms:ir.ui.view,arch_db:sale.optional_product_items msgid "Option not available" msgstr "" @@ -2065,8 +2081,8 @@ msgid "Order Count" msgstr "" #. module: sale -#: code:addons/sale/controllers/portal.py:51 -#: code:addons/sale/controllers/portal.py:103 +#: code:addons/sale/controllers/portal.py:53 +#: code:addons/sale/controllers/portal.py:105 #: model:ir.model.fields,field_description:sale.field_sale_order__date_order #: model:ir.model.fields,field_description:sale.field_sale_report__date #: model_terms:ir.ui.view,arch_db:sale.portal_my_orders @@ -2109,7 +2125,7 @@ msgid "Order Upsell" msgstr "" #. module: sale -#: code:addons/sale/controllers/portal.py:215 +#: code:addons/sale/controllers/portal.py:226 #, python-format msgid "Order signed by %s" msgstr "" @@ -2125,7 +2141,7 @@ msgid "Ordered Qty" msgstr "" #. module: sale -#: code:addons/sale/models/sale.py:1051 +#: code:addons/sale/models/sale.py:1056 #: model:ir.model.fields,field_description:sale.field_sale_order_line__product_uom_qty #: model_terms:ir.ui.view,arch_db:sale.view_order_form #, python-format @@ -2164,14 +2180,6 @@ msgid "Orders to Upsell" msgstr "" #. module: sale -#. openerp-web -#: code:addons/sale/static/src/js/tour.js:13 -#: code:addons/sale/static/src/js/tour.js:18 -#, python-format -msgid "Organize your sales activities with the <b>Sales Management app</b>." -msgstr "" - -#. module: sale #: model_terms:ir.ui.view,arch_db:sale.view_order_form msgid "Other Information" msgstr "" @@ -2202,7 +2210,7 @@ msgid "Partner Country" msgstr "" #. module: sale -#: code:addons/sale/controllers/portal.py:277 +#: code:addons/sale/controllers/portal.py:291 #, python-format msgid "Pay & Confirm" msgstr "" @@ -2224,6 +2232,11 @@ msgid "Pay now" msgstr "" #. module: sale +#: model_terms:ir.ui.view,arch_db:sale.mail_notification_paynow_online +msgid "Pay online" +msgstr "" + +#. module: sale #: model_terms:ir.ui.view,arch_db:sale.sale_order_portal_template msgid "Pay with" msgstr "" @@ -2305,13 +2318,13 @@ msgid "Planned" msgstr "" #. module: sale -#: code:addons/sale/models/sale.py:440 +#: code:addons/sale/models/sale.py:447 #, python-format msgid "Please define an accounting sales journal for this company." msgstr "" #. module: sale -#: code:addons/sale/models/sale.py:1312 +#: code:addons/sale/models/sale.py:1321 #, python-format msgid "Please define income account for this product: \"%s\" (id:%d) - or for its category: \"%s\"." msgstr "" @@ -2405,7 +2418,7 @@ msgstr "" #. module: sale #. openerp-web -#: code:addons/sale/static/src/js/tour.js:70 +#: code:addons/sale/static/src/js/tour.js:66 #, python-format msgid "Print this quotation to preview it." msgstr "" @@ -2461,7 +2474,6 @@ msgid "Product Category" msgstr "" #. module: sale -#: model:ir.model.fields,field_description:sale.field_sale_order_line__product_image #: model_terms:ir.ui.view,arch_db:sale.optional_product_items #: model_terms:ir.ui.view,arch_db:sale.product_configurator_configure #: model_terms:ir.ui.view,arch_db:sale.product_configurator_configure_optional_products @@ -2557,7 +2569,7 @@ msgid "Quantity:" msgstr "" #. module: sale -#: code:addons/sale/models/sale.py:252 +#: code:addons/sale/models/sale.py:255 #: model_terms:ir.ui.view,arch_db:sale.crm_team_salesteams_view_kanban #: model_terms:ir.ui.view,arch_db:sale.view_quotation_tree #: selection:sale.order,state:0 @@ -2615,7 +2627,7 @@ msgid "Quotation sent" msgstr "" #. module: sale -#: code:addons/sale/controllers/portal.py:159 +#: code:addons/sale/controllers/portal.py:161 #, python-format msgid "Quotation viewed by customer" msgstr "" @@ -2667,8 +2679,8 @@ msgid "Re-Invoice Policy visible" msgstr "" #. module: sale -#: code:addons/sale/controllers/portal.py:52 -#: code:addons/sale/controllers/portal.py:104 +#: code:addons/sale/controllers/portal.py:54 +#: code:addons/sale/controllers/portal.py:106 #, python-format msgid "Reference" msgstr "" @@ -2679,6 +2691,11 @@ msgid "Reference of the document that generated this sales order request." msgstr "" #. module: sale +#: selection:sale.advance.payment.inv,advance_payment_method:0 +msgid "Regular invoice" +msgstr "" + +#. module: sale #: model_terms:ir.ui.view,arch_db:sale.sale_order_portal_template msgid "Reject This Quotation" msgstr "" @@ -2721,7 +2738,7 @@ msgid "Request an online signature to confirm orders" msgstr "" #. module: sale -#: code:addons/sale/models/sale.py:349 +#: code:addons/sale/models/sale.py:352 #, python-format msgid "Requested date is too soon." msgstr "" @@ -2732,6 +2749,11 @@ msgid "Responsible User" msgstr "" #. module: sale +#: model:ir.model.fields,help:sale.field_crm_team__invoiced_target +msgid "Revenue target for the current month (untaxed total of confirmed invoices)." +msgstr "" + +#. module: sale #. openerp-web #: code:addons/sale/static/src/js/account_reconciliation.js:54 #, python-format @@ -2796,7 +2818,7 @@ msgid "Sales Advance Payment Invoice" msgstr "" #. module: sale -#: code:addons/sale/models/sales_team.py:108 +#: code:addons/sale/models/sales_team.py:107 #: model:ir.actions.act_window,name:sale.action_order_report_all #: model:ir.actions.act_window,name:sale.action_order_report_so_salesteam #: model:ir.actions.act_window,name:sale.report_all_channels_sales_action @@ -2828,7 +2850,7 @@ msgid "Sales Information" msgstr "" #. module: sale -#: code:addons/sale/models/sale.py:252 +#: code:addons/sale/models/sale.py:255 #: model:ir.model,name:sale.model_sale_order #: model:ir.model.fields,field_description:sale.field_res_partner__sale_order_ids #: model:ir.model.fields,field_description:sale.field_res_users__sale_order_ids @@ -2938,7 +2960,7 @@ msgid "Sales price" msgstr "" #. module: sale -#: code:addons/sale/models/sales_team.py:102 +#: code:addons/sale/models/sales_team.py:101 #, python-format msgid "Sales: Untaxed Total" msgstr "" @@ -2955,13 +2977,13 @@ msgid "Salesperson" msgstr "" #. module: sale -#: code:addons/sale/models/res_company.py:60 +#: code:addons/sale/models/res_company.py:59 #, python-format msgid "Sample Order Line" msgstr "" #. module: sale -#: code:addons/sale/models/res_company.py:57 +#: code:addons/sale/models/res_company.py:56 #, python-format msgid "Sample Product" msgstr "" @@ -2999,12 +3021,17 @@ msgstr "" #. module: sale #. openerp-web -#: code:addons/sale/static/src/js/tour.js:46 +#: code:addons/sale/static/src/js/tour.js:44 #, python-format msgid "Select a product, or create a new one on the fly." msgstr "" #. module: sale +#: model_terms:ir.ui.view,arch_db:sale.res_config_settings_view_form +msgid "Select specific invoice and delivery addresses" +msgstr "" + +#. module: sale #: model:ir.model.fields,help:sale.field_product_product__sale_line_warn #: model:ir.model.fields,help:sale.field_product_template__sale_line_warn #: model:ir.model.fields,help:sale.field_res_partner__sale_warn @@ -3085,11 +3112,6 @@ msgid "Set payments" msgstr "" #. module: sale -#: model_terms:ir.ui.view,arch_db:sale.res_config_settings_view_form -msgid "Set specific billing and shipping addresses" -msgstr "" - -#. module: sale #: model_terms:ir.ui.view,arch_db:sale.view_order_form msgid "Set to Quotation" msgstr "" @@ -3131,8 +3153,13 @@ msgid "Show margins on orders" msgstr "" #. module: sale -#: model_terms:ir.ui.view,arch_db:sale.res_config_settings_view_form -msgid "Show standard terms & conditions on orders" +#: model_terms:ir.ui.view,arch_db:sale.sale_order_portal_template +msgid "Sign & Pay" +msgstr "" + +#. module: sale +#: model_terms:ir.ui.view,arch_db:sale.mail_notification_paynow_online +msgid "Sign and pay online" msgstr "" #. module: sale @@ -3147,7 +3174,7 @@ msgid "Signature" msgstr "" #. module: sale -#: code:addons/sale/controllers/portal.py:203 +#: code:addons/sale/controllers/portal.py:209 #, python-format msgid "Signature is missing." msgstr "" @@ -3159,7 +3186,12 @@ msgstr "" #. module: sale #: model:ir.model.fields,field_description:sale.field_sale_order__signed_by -msgid "Signed by" +msgid "Signed By" +msgstr "" + +#. module: sale +#: model:ir.model.fields,field_description:sale.field_sale_order__signed_on +msgid "Signed On" msgstr "" #. module: sale @@ -3185,8 +3217,8 @@ msgid "Specific Email" msgstr "" #. module: sale -#: code:addons/sale/controllers/portal.py:53 -#: code:addons/sale/controllers/portal.py:105 +#: code:addons/sale/controllers/portal.py:55 +#: code:addons/sale/controllers/portal.py:107 #, python-format msgid "Stage" msgstr "" @@ -3253,11 +3285,6 @@ msgid "Subtotal" msgstr "" #. module: sale -#: model:ir.model.fields,help:sale.field_crm_team__invoiced_target -msgid "Target of invoice revenue for the current month. This is the amount the sales channel estimates to be able to invoice this month." -msgstr "" - -#. module: sale #: model:ir.model.fields,field_description:sale.field_sale_order__amount_by_group msgid "Tax amount by group" msgstr "" @@ -3286,11 +3313,6 @@ msgid "Tell us why you are refusing this quotation, this will help us improve ou msgstr "" #. module: sale -#: model:ir.model.fields,field_description:sale.field_res_config_settings__sale_note -msgid "Terms & Conditions" -msgstr "" - -#. module: sale #: model_terms:ir.ui.view,arch_db:sale.sale_order_portal_content msgid "Terms & Conditions" msgstr "" @@ -3306,19 +3328,19 @@ msgid "Terms and conditions... (note: you can setup default ones in the Configur msgstr "" #. module: sale -#: code:addons/sale/models/analytic.py:116 +#: code:addons/sale/models/analytic.py:117 #, python-format msgid "The Sales Order %s linked to the Analytic Account %s is cancelled. You cannot register an expense on a cancelled Sales Order." msgstr "" #. module: sale -#: code:addons/sale/models/analytic.py:115 +#: code:addons/sale/models/analytic.py:116 #, python-format msgid "The Sales Order %s linked to the Analytic Account %s is currently locked. You cannot register an expense on a locked Sales Order. Please create a new SO linked to this Analytic Account." msgstr "" #. module: sale -#: code:addons/sale/models/analytic.py:111 +#: code:addons/sale/models/analytic.py:112 #, python-format msgid "The Sales Order %s linked to the Analytic Account %s must be validated before registering expenses." msgstr "" @@ -3334,7 +3356,7 @@ msgid "The analytic account related to a sales order." msgstr "" #. module: sale -#: code:addons/sale/models/sale.py:350 +#: code:addons/sale/models/sale.py:353 #, python-format msgid "The commitment date is sooner than the expected date.You may be unable to honor the commitment date." msgstr "" @@ -3352,7 +3374,7 @@ msgid "The margin is computed as the sum of product sales prices minus the cost msgstr "" #. module: sale -#: code:addons/sale/controllers/portal.py:201 +#: code:addons/sale/controllers/portal.py:207 #, python-format msgid "The order is not in a state requiring customer signature." msgstr "" @@ -3380,7 +3402,7 @@ msgid "The rate of the currency to the currency of rate 1 applicable at the date msgstr "" #. module: sale -#: code:addons/sale/wizard/sale_make_invoice_advance.py:80 +#: code:addons/sale/wizard/sale_make_invoice_advance.py:82 #, python-format msgid "The value of the down payment amount must be positive." msgstr "" @@ -3408,25 +3430,19 @@ msgid "There are two ways to manage pricelists: 1) Multiple prices per product: msgstr "" #. module: sale -#: code:addons/sale/wizard/sale_make_invoice_advance.py:76 +#: code:addons/sale/wizard/sale_make_invoice_advance.py:78 #, python-format msgid "There is no income account defined for this product: \"%s\". You may have to install a chart of account from Accounting app, settings menu." msgstr "" #. module: sale -#: code:addons/sale/models/sale.py:539 -#: code:addons/sale/models/sale.py:544 +#: code:addons/sale/models/sale.py:546 +#: code:addons/sale/models/sale.py:551 #, python-format msgid "There is no invoiceable line. If a product has a Delivered quantities invoicing policy, please make sure that a quantity has been delivered." msgstr "" #. module: sale -#: model_terms:ir.actions.act_window,help:sale.action_orders_upselling -msgid "These are orders with products invoiced based on ordered quantities,\n" -" in the case you have delivered more than what was ordered." -msgstr "" - -#. module: sale #: model_terms:ir.ui.view,arch_db:sale.product_configurator_configure msgid "This combination does not exist." msgstr "" @@ -3570,7 +3586,7 @@ msgid "USPS Connector" msgstr "" #. module: sale -#: code:addons/sale/models/sale.py:728 +#: code:addons/sale/models/sale.py:741 #, python-format msgid "Uncategorized" msgstr "" @@ -3658,7 +3674,7 @@ msgid "Untaxed Total" msgstr "" #. module: sale -#: code:addons/sale/models/sale.py:392 +#: code:addons/sale/models/sale.py:397 #, python-format msgid "Upsell <a href='#' data-oe-model='%s' data-oe-id='%d'>%s</a> for customer <a href='#' data-oe-model='%s' data-oe-id='%s'>%s</a>" msgstr "" @@ -3671,14 +3687,14 @@ msgstr "" #. module: sale #. openerp-web -#: code:addons/sale/static/src/js/tour.js:75 +#: code:addons/sale/static/src/js/tour.js:71 #, python-format msgid "Use the breadcrumbs to <b>go back to preceeding screens</b>." msgstr "" #. module: sale #. openerp-web -#: code:addons/sale/static/src/js/tour.js:79 +#: code:addons/sale/static/src/js/tour.js:75 #, python-format msgid "Use this menu to access quotations, sales orders and customers." msgstr "" @@ -3715,7 +3731,7 @@ msgid "Warning" msgstr "" #. module: sale -#: code:addons/sale/models/sale.py:1411 +#: code:addons/sale/models/sale.py:1449 #, python-format msgid "Warning for %s" msgstr "" @@ -3742,11 +3758,6 @@ msgid "Website communication history" msgstr "" #. module: sale -#: model:ir.model.fields,field_description:sale.field_sale_advance_payment_inv__advance_payment_method -msgid "What do you want to invoice?" -msgstr "" - -#. module: sale #: selection:res.company,sale_onboarding_payment_method:0 msgid "Wire Transfer" msgstr "" @@ -3772,13 +3783,13 @@ msgid "You can find a customer by its Name, TIN, Email or Internal Reference." msgstr "" #. module: sale -#: code:addons/sale/models/sale.py:258 +#: code:addons/sale/models/sale.py:261 #, python-format msgid "You can not delete a sent quotation or a confirmed sales order. You must first cancel it." msgstr "" #. module: sale -#: code:addons/sale/models/sale.py:1485 +#: code:addons/sale/models/sale.py:1498 #, python-format msgid "You can not remove an order line once the sales order is confirmed.\n" "You should rather set the quantity to 0." @@ -3796,9 +3807,16 @@ msgid "You can set here the communication type that will appear on sales orders. msgstr "" #. module: sale +#: model_terms:ir.actions.act_window,help:sale.action_orders_upselling +msgid "You can upsell an order when you have delivered more quantities\n" +" than initially ordered, with an invoicing policy based on\n" +" ordered quantities." +msgstr "" + +#. module: sale #: model_terms:ir.actions.act_window,help:sale.product_template_action -msgid "You must define a product for everything you purchase,\n" -" whether it's a physical product, a consumable or services." +msgid "You must define a product for everything you sell or purchase,\n" +" whether it's a storable product, a consumable or a service." msgstr "" #. module: sale @@ -3856,7 +3874,7 @@ msgid "matching the communication of the bank statement line" msgstr "" #. module: sale -#: code:addons/sale/models/sale.py:96 +#: code:addons/sale/models/sale.py:98 #, python-format msgid "sale order" msgstr "" diff --git a/addons/sale/report/sale_report_templates.xml b/addons/sale/report/sale_report_templates.xml index 60757646486..b438cbd3db2 100644 --- a/addons/sale/report/sale_report_templates.xml +++ b/addons/sale/report/sale_report_templates.xml @@ -2,7 +2,7 @@ <odoo> <template id="report_saleorder_document"> <t t-call="web.external_layout"> - <t t-set="doc" t-value="doc.with_context({'lang':doc.partner_id.lang})" /> + <t t-set="doc" t-value="doc.with_context(lang=doc.partner_id.lang)" /> <t t-set="address"> <div t-field="doc.partner_id" t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}' /> diff --git a/addons/sale/views/sale_product_configurator_templates.xml b/addons/sale/views/sale_product_configurator_templates.xml index 6711dd2db8b..075a4f11751 100644 --- a/addons/sale/views/sale_product_configurator_templates.xml +++ b/addons/sale/views/sale_product_configurator_templates.xml @@ -152,7 +152,7 @@ <template id="optional_product_items"> <t t-foreach="product.optional_product_ids" t-as="product"> <t t-set="first_possible_combination" t-value="product._get_first_possible_combination(parent_combination)"/> - <t t-if="product._is_add_to_cart_possible()"> + <t t-if="product._is_add_to_cart_possible(parent_combination)"> <t t-set="combination_info" t-value="product._get_combination_info(first_possible_combination, add_qty=add_qty or 1, pricelist=pricelist)"/> <t t-set="product_variant" t-value="product.env['product.product'].browse(combination_info['product_id'])"/> diff --git a/addons/sale/wizard/sale_make_invoice_advance.py b/addons/sale/wizard/sale_make_invoice_advance.py index 9c5c64ec72a..e7a94413116 100644 --- a/addons/sale/wizard/sale_make_invoice_advance.py +++ b/addons/sale/wizard/sale_make_invoice_advance.py @@ -69,7 +69,7 @@ class SaleAdvancePaymentInv(models.TransientModel): account_id = False if self.product_id.id: - account_id = self.product_id.property_account_income_id.id or self.product_id.categ_id.property_account_income_categ_id.id + account_id = order.fiscal_position_id.map_account(self.product_id.property_account_income_id or self.product_id.categ_id.property_account_income_categ_id).id if not account_id: inc_acc = ir_property_obj.get('property_account_income_categ_id', 'product.category') account_id = order.fiscal_position_id.map_account(inc_acc).id if inc_acc else False diff --git a/addons/sale_crm/i18n/sale_crm.pot b/addons/sale_crm/i18n/sale_crm.pot index c76a425c70a..cf6a88c91e2 100644 --- a/addons/sale_crm/i18n/sale_crm.pot +++ b/addons/sale_crm/i18n/sale_crm.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-24 10:58+0000\n" -"PO-Revision-Date: 2018-12-24 10:58+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -22,7 +22,12 @@ msgstr "" #. module: sale_crm #: model_terms:ir.ui.view,arch_db:sale_crm.crm_case_form_view_oppor -msgid "<span class=\"o_stat_text\"> Quotation(s) </span>" +msgid "<span class=\"o_stat_text\"> Quotations </span>" +msgstr "" + +#. module: sale_crm +#: model_terms:ir.actions.act_window,help:sale_crm.sale_action_quotations +msgid "Create a new quotation" msgstr "" #. module: sale_crm @@ -61,11 +66,16 @@ msgid "New Quotation" msgstr "" #. module: sale_crm -#: model:ir.model.fields,field_description:sale_crm.field_crm_lead__sale_number +#: model:ir.model.fields,field_description:sale_crm.field_crm_lead__quotation_count msgid "Number of Quotations" msgstr "" #. module: sale_crm +#: model:ir.model.fields,field_description:sale_crm.field_crm_lead__sale_order_count +msgid "Number of Sale Orders" +msgstr "" + +#. module: sale_crm #: model:ir.model.fields,field_description:sale_crm.field_sale_order__opportunity_id msgid "Opportunity" msgstr "" diff --git a/addons/sale_management/i18n/sale_management.pot b/addons/sale_management/i18n/sale_management.pot index c7440b9baaf..ed77eb87ef9 100644 --- a/addons/sale_management/i18n/sale_management.pot +++ b/addons/sale_management/i18n/sale_management.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:59+0000\n" -"PO-Revision-Date: 2019-01-16 07:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -328,6 +328,11 @@ msgid "Quantity" msgstr "" #. module: sale_management +#: model_terms:ir.ui.view,arch_db:sale_management.sale_order_form_quote +msgid "Quantity:" +msgstr "" + +#. module: sale_management #: model:ir.model.fields,field_description:sale_management.field_res_config_settings__module_sale_quotation_builder msgid "Quotation Builder" msgstr "" @@ -477,6 +482,11 @@ msgid "Unit Price" msgstr "" #. module: sale_management +#: model_terms:ir.ui.view,arch_db:sale_management.sale_order_form_quote +msgid "Unit Price:" +msgstr "" + +#. module: sale_management #: model:ir.model.fields,field_description:sale_management.field_sale_order_template_line__product_uom_id msgid "Unit of Measure" msgstr "" @@ -495,7 +505,7 @@ msgid "Use templates to create polished, professional quotes in minutes.\n" msgstr "" #. module: sale_management -#: code:addons/sale_management/models/sale_order.py:178 +#: code:addons/sale_management/models/sale_order.py:193 #, python-format msgid "You cannot add options to a confirmed order." msgstr "" diff --git a/addons/sale_mrp/i18n/sale_mrp.pot b/addons/sale_mrp/i18n/sale_mrp.pot index 8d571645a59..56e270d0e71 100644 --- a/addons/sale_mrp/i18n/sale_mrp.pot +++ b/addons/sale_mrp/i18n/sale_mrp.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-18 09:49+0000\n" -"PO-Revision-Date: 2018-09-18 09:49+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -21,6 +21,12 @@ msgid "Invoice Line" msgstr "" #. module: sale_mrp +#: code:addons/sale_mrp/models/sale_mrp.py:88 +#, python-format +msgid "Not enough inventory!" +msgstr "" + +#. module: sale_mrp #: model:ir.model,name:sale_mrp.model_sale_order_line msgid "Sales Order Line" msgstr "" diff --git a/addons/sale_purchase/i18n/sale_purchase.pot b/addons/sale_purchase/i18n/sale_purchase.pot index c90873ce3e0..c20d494b56a 100644 --- a/addons/sale_purchase/i18n/sale_purchase.pot +++ b/addons/sale_purchase/i18n/sale_purchase.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-24 10:58+0000\n" -"PO-Revision-Date: 2018-12-24 10:58+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -46,6 +46,7 @@ msgid "Generated Purchase Lines" msgstr "" #. module: sale_purchase +#: model:ir.model.fields,help:sale_purchase.field_product_product__service_to_purchase #: model:ir.model.fields,help:sale_purchase.field_product_template__service_to_purchase msgid "If ticked, each time you sell this product through a SO, a RfQ is automatically created to buy the product. Tip: don't forget to set a vendor on the product." msgstr "" @@ -87,6 +88,7 @@ msgid "Product that is not a service can not create RFQ." msgstr "" #. module: sale_purchase +#: model:ir.model.fields,field_description:sale_purchase.field_product_product__service_to_purchase #: model:ir.model.fields,field_description:sale_purchase.field_product_template__service_to_purchase msgid "Purchase Automatically" msgstr "" diff --git a/addons/sale_quotation_builder/i18n/sale_quotation_builder.pot b/addons/sale_quotation_builder/i18n/sale_quotation_builder.pot index d52e5ef115a..01164947e1d 100644 --- a/addons/sale_quotation_builder/i18n/sale_quotation_builder.pot +++ b/addons/sale_quotation_builder/i18n/sale_quotation_builder.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-24 10:58+0000\n" -"PO-Revision-Date: 2018-12-24 10:58+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,6 +16,7 @@ msgstr "" "Plural-Forms: \n" #. module: sale_quotation_builder +#: model_terms:ir.ui.view,arch_db:sale_quotation_builder.sale_order_portal_content_inherit_sale_quotation_builder #: model_terms:ir.ui.view,arch_db:sale_quotation_builder.so_template msgid "&times;" msgstr "" @@ -41,6 +42,13 @@ msgid ":\n" msgstr "" #. module: sale_quotation_builder +#: model_terms:ir.ui.view,arch_db:sale_quotation_builder.sale_order_portal_content_inherit_sale_quotation_builder +msgid ":\n" +" this content will appear on the quotation only if this\n" +" product is not removed." +msgstr "" + +#. module: sale_quotation_builder #: model_terms:ir.ui.view,arch_db:sale_quotation_builder.so_template msgid "<strong>Template Header:</strong> this content\n" " will appear on all quotations using this\n" @@ -65,6 +73,7 @@ msgid "Back" msgstr "" #. module: sale_quotation_builder +#: model_terms:ir.ui.view,arch_db:sale_quotation_builder.sale_order_portal_content_inherit_sale_quotation_builder #: model_terms:ir.ui.view,arch_db:sale_quotation_builder.so_template msgid "Close" msgstr "" @@ -149,16 +158,19 @@ msgid "Product quality is the foundation we\n" msgstr "" #. module: sale_quotation_builder +#: model_terms:ir.ui.view,arch_db:sale_quotation_builder.sale_order_portal_content_inherit_sale_quotation_builder #: model_terms:ir.ui.view,arch_db:sale_quotation_builder.so_template msgid "Product:" msgstr "" #. module: sale_quotation_builder +#: model:ir.model.fields,field_description:sale_quotation_builder.field_product_product__quotation_description #: model:ir.model.fields,field_description:sale_quotation_builder.field_product_template__quotation_description msgid "Quotation Description" msgstr "" #. module: sale_quotation_builder +#: model:ir.model.fields,field_description:sale_quotation_builder.field_product_product__quotation_only_description #: model:ir.model.fields,field_description:sale_quotation_builder.field_product_template__quotation_only_description msgid "Quotation Only Description" msgstr "" @@ -199,12 +211,14 @@ msgid "Terms & Conditions" msgstr "" #. module: sale_quotation_builder +#: model:ir.model.fields,help:sale_quotation_builder.field_product_product__quotation_only_description #: model:ir.model.fields,help:sale_quotation_builder.field_product_template__quotation_only_description #: model:ir.model.fields,help:sale_quotation_builder.field_sale_order_template_line__website_description msgid "The quotation description (not used on eCommerce)" msgstr "" #. module: sale_quotation_builder +#: model:ir.model.fields,help:sale_quotation_builder.field_product_product__quotation_description #: model:ir.model.fields,help:sale_quotation_builder.field_product_template__quotation_description msgid "This field uses the Quotation Only Description if it is defined, otherwise it will try to read the eCommerce Description." msgstr "" diff --git a/addons/sale_stock/i18n/sale_stock.pot b/addons/sale_stock/i18n/sale_stock.pot index e1f6e5d65aa..88c02723edd 100644 --- a/addons/sale_stock/i18n/sale_stock.pot +++ b/addons/sale_stock/i18n/sale_stock.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:59+0000\n" -"PO-Revision-Date: 2019-01-16 07:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,7 +16,7 @@ msgstr "" "Plural-Forms: \n" #. module: sale_stock -#: code:addons/sale_stock/models/sale_order.py:273 +#: code:addons/sale_stock/models/sale_order.py:278 #, python-format msgid "\n" "There are %s %s available across all warehouses.\n" @@ -117,6 +117,11 @@ msgid "Apply specific rotues" msgstr "" #. module: sale_stock +#: selection:sale.order,picking_policy:0 +msgid "As soon as possible" +msgstr "" + +#. module: sale_stock #: model:ir.model.fields,help:sale_stock.field_stock_rules_report__so_route_ids msgid "Choose to apply SO lines specific routes." msgstr "" @@ -137,16 +142,6 @@ msgid "Config Settings" msgstr "" #. module: sale_stock -#: selection:sale.order,picking_policy:0 -msgid "Deliver all products at once" -msgstr "" - -#. module: sale_stock -#: selection:sale.order,picking_policy:0 -msgid "Deliver each product when available" -msgstr "" - -#. module: sale_stock #: model_terms:ir.ui.view,arch_db:sale_stock.view_order_form_inherit_sale_stock msgid "Delivery" msgstr "" @@ -246,7 +241,7 @@ msgid "Lot/Serial" msgstr "" #. module: sale_stock -#: code:addons/sale_stock/models/sale_order.py:418 +#: code:addons/sale_stock/models/sale_order.py:427 #, python-format msgid "Make To Order" msgstr "" @@ -284,7 +279,7 @@ msgid "Move forward expected delivery dates by" msgstr "" #. module: sale_stock -#: code:addons/sale_stock/models/sale_order.py:280 +#: code:addons/sale_stock/models/sale_order.py:285 #, python-format msgid "Not enough inventory!" msgstr "" @@ -295,7 +290,7 @@ msgid "Order-Specific Routes" msgstr "" #. module: sale_stock -#: code:addons/sale_stock/models/sale_order.py:294 +#: code:addons/sale_stock/models/sale_order.py:306 #, python-format msgid "Ordered quantity decreased!" msgstr "" @@ -464,7 +459,7 @@ msgid "This allows to apply a special route on sales order lines (e.g. dropshipp msgstr "" #. module: sale_stock -#: code:addons/sale_stock/models/sale_order.py:397 +#: code:addons/sale_stock/models/sale_order.py:407 #, python-format msgid "This product is packaged by %.2f %s. You should sell %.2f %s." msgstr "" @@ -486,12 +481,17 @@ msgid "Warehouse" msgstr "" #. module: sale_stock -#: code:addons/sale_stock/models/sale_order.py:396 +#: code:addons/sale_stock/models/sale_order.py:406 #, python-format msgid "Warning" msgstr "" #. module: sale_stock +#: selection:sale.order,picking_policy:0 +msgid "When all products are ready" +msgstr "" + +#. module: sale_stock #: model_terms:ir.ui.view,arch_db:sale_stock.res_config_settings_view_form_stock msgid "When to reserve sold products" msgstr "" @@ -502,20 +502,20 @@ msgid "When to start shipping" msgstr "" #. module: sale_stock -#: code:addons/sale_stock/models/sale_order.py:295 +#: code:addons/sale_stock/models/sale_order.py:307 #, python-format msgid "You are decreasing the ordered quantity! Do not forget to manually update the delivery order if needed." msgstr "" #. module: sale_stock -#: code:addons/sale_stock/models/sale_order.py:437 +#: code:addons/sale_stock/models/sale_order.py:447 #, python-format msgid "You cannot decrease the ordered quantity below the delivered quantity.\n" "Create a return first." msgstr "" #. module: sale_stock -#: code:addons/sale_stock/models/sale_order.py:269 +#: code:addons/sale_stock/models/sale_order.py:271 #, python-format msgid "You plan to sell %s %s of %s but you only have %s %s available in %s warehouse." msgstr "" diff --git a/addons/sale_timesheet/i18n/sale_timesheet.pot b/addons/sale_timesheet/i18n/sale_timesheet.pot index b262f5c5bc8..210d8755e7d 100644 --- a/addons/sale_timesheet/i18n/sale_timesheet.pot +++ b/addons/sale_timesheet/i18n/sale_timesheet.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-24 10:58+0000\n" -"PO-Revision-Date: 2018-12-24 10:58+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -157,7 +157,7 @@ msgid "At which rate timesheets will be billed:\n" msgstr "" #. module: sale_timesheet -#: code:addons/sale_timesheet/controllers/main.py:249 +#: code:addons/sale_timesheet/models/project_overview.py:241 #, python-format msgid "Before" msgstr "" @@ -238,8 +238,8 @@ msgid "Costs and Revenues" msgstr "" #. module: sale_timesheet -#: code:addons/sale_timesheet/controllers/main.py:355 -#: code:addons/sale_timesheet/controllers/main.py:362 +#: code:addons/sale_timesheet/models/project_overview.py:347 +#: code:addons/sale_timesheet/models/project_overview.py:354 #: model:ir.actions.act_window,name:sale_timesheet.project_project_action_multi_create_invoice #: model_terms:ir.ui.view,arch_db:sale_timesheet.project_create_invoice_view_form #, python-format @@ -275,7 +275,7 @@ msgid "Create Sales Order from Project" msgstr "" #. module: sale_timesheet -#: code:addons/sale_timesheet/controllers/main.py:344 +#: code:addons/sale_timesheet/models/project_overview.py:336 #: model:ir.actions.act_window,name:sale_timesheet.project_project_action_multi_create_sale_order #: model_terms:ir.ui.view,arch_db:sale_timesheet.project_create_sale_order_view_form #, python-format @@ -357,7 +357,7 @@ msgid "Don't create task" msgstr "" #. module: sale_timesheet -#: code:addons/sale_timesheet/controllers/main.py:249 +#: code:addons/sale_timesheet/models/project_overview.py:241 #: model:project.task.type,legend_done:sale_timesheet.project_stage_fixed #, python-format msgid "Done" @@ -464,7 +464,7 @@ msgid "Invoiced" msgstr "" #. module: sale_timesheet -#: code:addons/sale_timesheet/controllers/main.py:404 +#: code:addons/sale_timesheet/models/project_overview.py:417 #, python-format msgid "Invoices" msgstr "" @@ -540,6 +540,7 @@ msgid "Manually set quantities on order" msgstr "" #. module: sale_timesheet +#: model:ir.model.fields,help:sale_timesheet.field_product_product__service_type #: model:ir.model.fields,help:sale_timesheet.field_product_template__service_type msgid "Manually set quantities on order: Invoice based on the manually entered quantity, without creating an analytic account.\n" "Timesheets on contract: Invoice based on the tracked hours on the related timesheet.\n" @@ -562,7 +563,7 @@ msgid "My Project" msgstr "" #. module: sale_timesheet -#: code:addons/sale_timesheet/controllers/main.py:249 +#: code:addons/sale_timesheet/models/project_overview.py:241 #, python-format msgid "Name" msgstr "" @@ -579,15 +580,15 @@ msgid "No Billable" msgstr "" #. module: sale_timesheet -#: code:addons/sale_timesheet/controllers/main.py:208 +#: code:addons/sale_timesheet/models/project_overview.py:201 #, python-format msgid "No Sales Order" msgstr "" #. module: sale_timesheet -#: code:addons/sale_timesheet/controllers/main.py:170 -#: code:addons/sale_timesheet/controllers/main.py:178 -#: code:addons/sale_timesheet/controllers/main.py:190 +#: code:addons/sale_timesheet/models/project_overview.py:163 +#: code:addons/sale_timesheet/models/project_overview.py:171 +#: code:addons/sale_timesheet/models/project_overview.py:183 #, python-format msgid "No Sales Order Line" msgstr "" @@ -609,9 +610,7 @@ msgid "Non Billable Hours" msgstr "" #. module: sale_timesheet -#. openerp-web -#: code:addons/sale_timesheet/static/src/js/timesheet_plan.js:228 -#, python-format +#: model_terms:ir.ui.view,arch_db:sale_timesheet.timesheet_plan msgid "Non Billable Tasks" msgstr "" @@ -631,6 +630,7 @@ msgid "Number of timesheets" msgstr "" #. module: sale_timesheet +#: model:ir.model.fields,help:sale_timesheet.field_product_product__service_tracking #: model:ir.model.fields,help:sale_timesheet.field_product_template__service_tracking msgid "On Sales order confirmation, this product can generate a project and/or task. From those, you can track the service you are selling." msgstr "" @@ -651,10 +651,7 @@ msgid "Other costs" msgstr "" #. module: sale_timesheet -#. openerp-web -#: code:addons/sale_timesheet/static/src/js/timesheet_plan.js:33 -#: model:ir.actions.client,name:sale_timesheet.project_timesheet_action_client_timesheet_plan -#, python-format +#: model:ir.actions.act_window,name:sale_timesheet.project_timesheet_action_client_timesheet_plan msgid "Overview" msgstr "" @@ -700,9 +697,9 @@ msgid "Profitability Analysis" msgstr "" #. module: sale_timesheet -#: code:addons/sale_timesheet/controllers/main.py:373 -#: code:addons/sale_timesheet/controllers/main.py:424 +#: code:addons/sale_timesheet/models/project_overview.py:366 #: model:ir.model,name:sale_timesheet.model_project_project +#: model:ir.model.fields,field_description:sale_timesheet.field_product_product__project_id #: model:ir.model.fields,field_description:sale_timesheet.field_product_template__project_id #: model:ir.model.fields,field_description:sale_timesheet.field_project_create_invoice__project_id #: model:ir.model.fields,field_description:sale_timesheet.field_project_create_sale_order__project_id @@ -746,6 +743,7 @@ msgid "Project Sales line, employee mapping" msgstr "" #. module: sale_timesheet +#: model:ir.model.fields,field_description:sale_timesheet.field_product_product__project_template_id #: model:ir.model.fields,field_description:sale_timesheet.field_product_template__project_template_id msgid "Project Template" msgstr "" @@ -798,7 +796,7 @@ msgid "Ready for Next Stage" msgstr "" #. module: sale_timesheet -#: code:addons/sale_timesheet/controllers/main.py:249 +#: code:addons/sale_timesheet/models/project_overview.py:241 #, python-format msgid "Remaining" msgstr "" @@ -860,7 +858,7 @@ msgid "Sales Order item should generate a task and/or a project, depending on th msgstr "" #. module: sale_timesheet -#: code:addons/sale_timesheet/controllers/main.py:395 +#: code:addons/sale_timesheet/models/project_overview.py:405 #, python-format msgid "Sales Orders" msgstr "" @@ -886,11 +884,13 @@ msgid "Sales order to which the task is linked." msgstr "" #. module: sale_timesheet +#: model:ir.model.fields,help:sale_timesheet.field_product_product__project_id #: model:ir.model.fields,help:sale_timesheet.field_product_template__project_id msgid "Select a non billable project on which tasks can be created. This setting must be set for each company." msgstr "" #. module: sale_timesheet +#: model:ir.model.fields,help:sale_timesheet.field_product_product__project_template_id #: model:ir.model.fields,help:sale_timesheet.field_product_template__project_template_id msgid "Select a non billable project to be the skeleton of the new created project when selling the current product. Its stages and tasks will be duplicated." msgstr "" @@ -923,11 +923,13 @@ msgid "Service" msgstr "" #. module: sale_timesheet +#: model:ir.model.fields,field_description:sale_timesheet.field_product_product__service_policy #: model:ir.model.fields,field_description:sale_timesheet.field_product_template__service_policy msgid "Service Invoicing Policy" msgstr "" #. module: sale_timesheet +#: model:ir.model.fields,field_description:sale_timesheet.field_product_product__service_tracking #: model:ir.model.fields,field_description:sale_timesheet.field_product_template__service_tracking msgid "Service Tracking" msgstr "" @@ -948,7 +950,7 @@ msgid "Setup your time-based services" msgstr "" #. module: sale_timesheet -#: code:addons/sale_timesheet/controllers/main.py:249 +#: code:addons/sale_timesheet/models/project_overview.py:241 #, python-format msgid "Sold" msgstr "" @@ -980,8 +982,7 @@ msgid "Task generated by the sales order item" msgstr "" #. module: sale_timesheet -#: code:addons/sale_timesheet/controllers/main.py:385 -#: code:addons/sale_timesheet/controllers/main.py:447 +#: code:addons/sale_timesheet/models/project_overview.py:390 #: model:ir.model.fields,field_description:sale_timesheet.field_project_task_assign_sale__task_ids #: model:ir.model.fields,field_description:sale_timesheet.field_sale_order__tasks_count #: model_terms:ir.ui.view,arch_db:sale_timesheet.view_order_form_inherit_sale_timesheet @@ -1076,13 +1077,10 @@ msgid "Time by people" msgstr "" #. module: sale_timesheet -#. openerp-web -#: code:addons/sale_timesheet/static/src/js/timesheet_plan.js:134 #: model:ir.actions.act_window,name:sale_timesheet.action_timesheet_from_invoice #: model:ir.actions.act_window,name:sale_timesheet.timesheet_action_from_plan #: model:ir.actions.act_window,name:sale_timesheet.timesheet_action_plan_pivot #: model_terms:ir.ui.view,arch_db:sale_timesheet.timesheet_view_pivot_revenue -#, python-format msgid "Timesheet" msgstr "" @@ -1112,9 +1110,8 @@ msgid "Timesheet costs" msgstr "" #. module: sale_timesheet -#: code:addons/sale_timesheet/controllers/main.py:379 -#: code:addons/sale_timesheet/controllers/main.py:436 #: code:addons/sale_timesheet/models/account_invoice.py:26 +#: code:addons/sale_timesheet/models/project_overview.py:374 #: model:ir.model.fields,field_description:sale_timesheet.field_account_invoice__timesheet_ids #: model_terms:ir.ui.view,arch_db:sale_timesheet.account_invoice_view_form_inherit_sale_timesheet #: model_terms:ir.ui.view,arch_db:sale_timesheet.timesheet_plan @@ -1151,6 +1148,7 @@ msgid "Total amount to invoice on the sales order, including all items (services msgstr "" #. module: sale_timesheet +#: model:ir.model.fields,field_description:sale_timesheet.field_product_product__service_type #: model:ir.model.fields,field_description:sale_timesheet.field_product_template__service_type msgid "Track Service" msgstr "" @@ -1195,7 +1193,7 @@ msgid "Untaxed Re-invoiced Amount" msgstr "" #. module: sale_timesheet -#: code:addons/sale_timesheet/controllers/main.py:258 +#: code:addons/sale_timesheet/models/project_overview.py:250 #, python-format msgid "What is still to deliver based on sold hours and hours already done. Equals to sold hours - done hours." msgstr "" @@ -1224,14 +1222,34 @@ msgid "You can only apply this action from a project." msgstr "" #. module: sale_timesheet -#: code:addons/sale_timesheet/models/project.py:216 +#: code:addons/sale_timesheet/models/project.py:219 #, python-format msgid "You cannot link the order item %s - %s to this task because it is a re-invoiced expense." msgstr "" #. module: sale_timesheet -#: code:addons/sale_timesheet/models/project.py:229 +#: code:addons/sale_timesheet/models/project.py:232 #, python-format msgid "You have to unlink the task from the sale order item in order to delete it." msgstr "" +#. module: sale_timesheet +#: model_terms:ir.ui.view,arch_db:sale_timesheet.timesheet_plan +msgid "billable_fixed" +msgstr "" + +#. module: sale_timesheet +#: model_terms:ir.ui.view,arch_db:sale_timesheet.timesheet_plan +msgid "billable_time" +msgstr "" + +#. module: sale_timesheet +#: model_terms:ir.ui.view,arch_db:sale_timesheet.timesheet_plan +msgid "non_billable" +msgstr "" + +#. module: sale_timesheet +#: model_terms:ir.ui.view,arch_db:sale_timesheet.timesheet_plan +msgid "non_billable_project" +msgstr "" + diff --git a/addons/sale_timesheet/models/sale_order.py b/addons/sale_timesheet/models/sale_order.py index c31150685c6..542696fdcf7 100644 --- a/addons/sale_timesheet/models/sale_order.py +++ b/addons/sale_timesheet/models/sale_order.py @@ -73,7 +73,10 @@ class SaleOrder(models.Model): def _action_confirm(self): """ On SO confirmation, some lines should generate a task or a project. """ result = super(SaleOrder, self)._action_confirm() - self.mapped('order_line').sudo().with_context(default_company_id=self.company_id.id)._timesheet_service_generation() + self.mapped('order_line').sudo().with_context( + default_company_id=self.company_id.id, + force_company=self.company_id.id, + )._timesheet_service_generation() return result @api.multi diff --git a/addons/snailmail/i18n/snailmail.pot b/addons/snailmail/i18n/snailmail.pot index 372c565bbb4..c8ac8951309 100644 --- a/addons/snailmail/i18n/snailmail.pot +++ b/addons/snailmail/i18n/snailmail.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:59+0000\n" -"PO-Revision-Date: 2019-01-16 07:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,28 +16,72 @@ msgstr "" "Plural-Forms: \n" #. module: snailmail -#: model_terms:ir.ui.view,arch_db:snailmail.res_config_settings_view_form -msgid "<span class=\"fa fa-lg fa-building-o\" title=\"Values set here are company-specific.\"/>" +#. openerp-web +#: code:addons/snailmail/static/src/js/thread_widget.js:222 +#, python-format +msgid "<p>An unknown error occured. Please contact our <a href=\"https://www.odoo.com/help\" target=\"new\">support</a> for further assistance.</p>" msgstr "" #. module: snailmail -#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__activity_id -msgid "Activity" +#. openerp-web +#: code:addons/snailmail/static/src/js/thread_widget.js:190 +#, python-format +msgid "<p>The country to which you want to send the letter is not supported by our service.</p>" msgstr "" #. module: snailmail -#: code:addons/snailmail/models/snailmail_letter.py:268 +#. openerp-web +#: code:addons/snailmail/static/src/js/thread_widget.js:137 #, python-format -msgid "An error occured when sending the document by post.<br>Error: %s <br>Go to 'Configuration > Management > Snailmail Letters' to see all letters awaiting dispatch to Snailmail." +msgid "<p>The letter could not be sent due to insufficient credits on your IAP account.</p><div class= \"text-right\"><a class=\"btn btn-link buy_credits\" href=%s><i class= \"fa fa-arrow-right\"/> Buy credits</a></div>" msgstr "" #. module: snailmail -#: code:addons/snailmail/models/snailmail_letter.py:234 +#. openerp-web +#: code:addons/snailmail/static/src/js/thread_widget.js:205 +#, python-format +msgid "<p>You need credits on your IAP account to send a letter.</p><div class= \"text-right\"><a class=\"btn btn-link buy_credits\" href=%s><i class= \"fa fa-arrow-right\"/> Buy credits</a></div>" +msgstr "" + +#. module: snailmail +#: model:ir.model.fields,field_description:snailmail.field_res_company__snailmail_cover +#: model:ir.model.fields,field_description:snailmail.field_res_config_settings__snailmail_cover +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_format_error__snailmail_cover +#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_format_error +msgid "Add a Cover Page" +msgstr "" + +#. module: snailmail +#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_missing_required_fields +msgid "Address" +msgstr "" + +#. module: snailmail +#. openerp-web +#: code:addons/snailmail/static/src/js/mail_failure.js:21 +#, python-format +msgid "An error occured when sending a letter with Snailmail" +msgstr "" + +#. module: snailmail +#: code:addons/snailmail/models/snailmail_letter.py:320 +#, python-format +msgid "An error occured when sending the document by post.<br>Error: %s" +msgstr "" + +#. module: snailmail +#: code:addons/snailmail/models/snailmail_letter.py:273 #, python-format msgid "An unknown error happened. Please contact the support." msgstr "" #. module: snailmail +#: code:addons/snailmail/wizard/snailmail_letter_cancel.py:15 +#, python-format +msgid "Are you sure you want to discard %s snailmail delivery failures. You won't be able to re-send these letters later!" +msgstr "" + +#. module: snailmail #: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__attachment_id msgid "Attachment" msgstr "" @@ -48,6 +92,13 @@ msgid "Attachment Filename" msgstr "" #. module: snailmail +#. openerp-web +#: code:addons/snailmail/static/src/xml/thread.xml:27 +#, python-format +msgid "Awaiting Dispatch" +msgstr "" + +#. module: snailmail #: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__duplex msgid "Both side" msgstr "" @@ -58,23 +109,59 @@ msgid "Both sides" msgstr "" #. module: snailmail +#: selection:snailmail.letter,error_code:0 +msgid "CREDIT_ERROR" +msgstr "" + +#. module: snailmail +#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_cancel #: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_form msgid "Cancel" msgstr "" #. module: snailmail +#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_format_error +msgid "Cancel Letter" +msgstr "" + +#. module: snailmail +#. openerp-web +#: code:addons/snailmail/static/src/js/thread_widget.js:62 +#: code:addons/snailmail/static/src/js/thread_widget.js:81 +#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_missing_required_fields +#, python-format +msgid "Cancel letter" +msgstr "" + +#. module: snailmail +#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_cancel +#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_format_error +msgid "Cancel notification in failure" +msgstr "" + +#. module: snailmail +#. openerp-web +#: code:addons/snailmail/static/src/xml/thread.xml:23 #: selection:snailmail.letter,state:0 +#, python-format msgid "Canceled" msgstr "" #. module: snailmail -#: model_terms:ir.ui.view,arch_db:snailmail.res_config_settings_view_form -msgid "Choose the ink used to print documents" +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__city +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_missing_required_fields__city +#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_missing_required_fields +msgid "City" msgstr "" #. module: snailmail -#: model_terms:ir.ui.view,arch_db:snailmail.res_config_settings_view_form -msgid "Choose the layout to print documents" +#. openerp-web +#: code:addons/snailmail/static/src/js/thread_widget.js:63 +#: code:addons/snailmail/static/src/js/thread_widget.js:82 +#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_format_error +#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_missing_required_fields +#, python-format +msgid "Close" msgstr "" #. module: snailmail @@ -84,6 +171,12 @@ msgid "Color" msgstr "" #. module: snailmail +#: selection:mail.compose.message,message_type:0 +#: selection:mail.message,message_type:0 +msgid "Comment" +msgstr "" + +#. module: snailmail #: model:ir.model,name:snailmail.model_res_company msgid "Companies" msgstr "" @@ -104,17 +197,53 @@ msgid "Contact" msgstr "" #. module: snailmail +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__country_id +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_missing_required_fields__country_id +#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_missing_required_fields +msgid "Country" +msgstr "" + +#. module: snailmail +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__cover +msgid "Cover Page" +msgstr "" + +#. module: snailmail #: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__create_uid +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_cancel__create_uid +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_format_error__create_uid +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_missing_required_fields__create_uid msgid "Created by" msgstr "" #. module: snailmail #: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__create_date +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_cancel__create_date +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_format_error__create_date +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_missing_required_fields__create_date msgid "Created on" msgstr "" #. module: snailmail +#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_cancel +msgid "Discard delivery failures" +msgstr "" + +#. module: snailmail +#: model:ir.actions.act_window,name:snailmail.snailmail_letter_cancel_action +msgid "Discard snailmail delivery failures" +msgstr "" + +#. module: snailmail +#: model:ir.model,name:snailmail.model_snailmail_letter_cancel +msgid "Dismiss notification for resend by model" +msgstr "" + +#. module: snailmail #: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__display_name +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_cancel__display_name +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_format_error__display_name +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_missing_required_fields__display_name msgid "Display Name" msgstr "" @@ -130,21 +259,63 @@ msgid "Document ID" msgstr "" #. module: snailmail -#: selection:snailmail.letter,state:0 -msgid "Draft" +#: selection:mail.compose.message,message_type:0 +#: selection:mail.message,message_type:0 +msgid "Email" msgstr "" #. module: snailmail +#. openerp-web +#: code:addons/snailmail/static/src/xml/thread.xml:31 +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__error_code #: selection:snailmail.letter,state:0 +#, python-format msgid "Error" msgstr "" #. module: snailmail +#: selection:snailmail.letter,error_code:0 +msgid "FORMAT_ERROR" +msgstr "" + +#. module: snailmail +#. openerp-web +#: code:addons/snailmail/static/src/js/thread_widget.js:58 +#: code:addons/snailmail/static/src/js/thread_widget.js:78 +#: model:ir.actions.act_window,name:snailmail.snailmail_letter_missing_required_fields_action +#, python-format +msgid "Failed letter" +msgstr "" + +#. module: snailmail +#: model:ir.actions.act_window,name:snailmail.snailmail_letter_format_error_action +msgid "Format Error" +msgstr "" + +#. module: snailmail +#: model:ir.model,name:snailmail.model_snailmail_letter_format_error +msgid "Format Error Sending a Snailmail Letter" +msgstr "" + +#. module: snailmail +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_cancel__help_message +msgid "Help message" +msgstr "" + +#. module: snailmail #: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__id +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_cancel__id +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_format_error__id +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_missing_required_fields__id msgid "ID" msgstr "" #. module: snailmail +#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_cancel +msgid "If you want to re-send them, click Cancel now, then click on the notification and review them one by one by clicking on the red paper-plane next to each message." +msgstr "" + +#. module: snailmail #: selection:snailmail.letter,state:0 msgid "In Queue" msgstr "" @@ -156,31 +327,78 @@ msgstr "" #. module: snailmail #: model:ir.model.fields,field_description:snailmail.field_snailmail_letter____last_update +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_cancel____last_update +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_format_error____last_update +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_missing_required_fields____last_update msgid "Last Modified on" msgstr "" #. module: snailmail #: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__write_uid +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_cancel__write_uid +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_format_error__write_uid +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_missing_required_fields__write_uid msgid "Last Updated by" msgstr "" #. module: snailmail #: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__write_date +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_cancel__write_date +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_format_error__write_date +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_missing_required_fields__write_date msgid "Last Updated on" msgstr "" #. module: snailmail +#: model:ir.model.fields,field_description:snailmail.field_mail_compose_message__letter_ids +#: model:ir.model.fields,field_description:snailmail.field_mail_mail__letter_ids +#: model:ir.model.fields,field_description:snailmail.field_mail_message__letter_ids +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_missing_required_fields__letter_id +msgid "Letter" +msgstr "" + +#. module: snailmail +#: code:addons/snailmail/models/snailmail_letter.py:84 +#, python-format +msgid "Letter sent by post with Snailmail" +msgstr "" + +#. module: snailmail #: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_list msgid "Letters" msgstr "" #. module: snailmail +#: selection:snailmail.letter,error_code:0 +msgid "MISSING_REQUIRED_FIELDS" +msgstr "" + +#. module: snailmail +#: model:ir.model,name:snailmail.model_mail_message +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_format_error__message_id +msgid "Message" +msgstr "" + +#. module: snailmail +#: model:ir.model.fields,help:snailmail.field_mail_compose_message__message_type +#: model:ir.model.fields,help:snailmail.field_mail_mail__message_type +#: model:ir.model.fields,help:snailmail.field_mail_message__message_type +msgid "Message type: email for email message, notification for system message, comment for other messages such as user replies" +msgstr "" + +#. module: snailmail #: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__model +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_cancel__model msgid "Model" msgstr "" #. module: snailmail -#: code:addons/snailmail/models/snailmail_letter.py:230 +#: selection:snailmail.letter,error_code:0 +msgid "NO_PRICE_AVAILABLE" +msgstr "" + +#. module: snailmail +#: code:addons/snailmail/models/snailmail_letter.py:269 #, python-format msgid "One or more required fields are empty." msgstr "" @@ -191,14 +409,15 @@ msgid "Optional report to print and attach" msgstr "" #. module: snailmail -#: code:addons/snailmail/models/snailmail_letter.py:280 -#, python-format -msgid "Post letter: an error occured." +#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_format_error +msgid "Our service cannot read your letter due to its format.<br/>\n" +" Please modify the format of the template or update your settings\n" +" to automatically add a blank cover page to all letters." msgstr "" #. module: snailmail -#: model_terms:ir.ui.view,arch_db:snailmail.res_config_settings_view_form -msgid "Postal Printings" +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_missing_required_fields__partner_id +msgid "Partner" msgstr "" #. module: snailmail @@ -217,6 +436,13 @@ msgid "Qweb Field Contact" msgstr "" #. module: snailmail +#. openerp-web +#: code:addons/snailmail/static/src/js/thread_widget.js:61 +#, python-format +msgid "Re-send letter" +msgstr "" + +#. module: snailmail #: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__partner_id msgid "Recipient" msgstr "" @@ -237,7 +463,10 @@ msgid "Send Now" msgstr "" #. module: snailmail +#. openerp-web +#: code:addons/snailmail/static/src/xml/thread.xml:19 #: selection:snailmail.letter,state:0 +#, python-format msgid "Sent" msgstr "" @@ -247,6 +476,12 @@ msgid "Sent by" msgstr "" #. module: snailmail +#: selection:mail.compose.message,message_type:0 +#: selection:mail.message,message_type:0 +msgid "Snailmail" +msgstr "" + +#. module: snailmail #: model:ir.model,name:snailmail.model_snailmail_letter msgid "Snailmail Letter" msgstr "" @@ -258,6 +493,25 @@ msgid "Snailmail Letters" msgstr "" #. module: snailmail +#: model:ir.model.fields,field_description:snailmail.field_mail_compose_message__snailmail_status +#: model:ir.model.fields,field_description:snailmail.field_mail_mail__snailmail_status +#: model:ir.model.fields,field_description:snailmail.field_mail_message__snailmail_status +msgid "Snailmail Status" +msgstr "" + +#. module: snailmail +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__message_id +msgid "Snailmail Status Message" +msgstr "" + +#. module: snailmail +#: model:ir.model.fields,field_description:snailmail.field_mail_compose_message__snailmail_error +#: model:ir.model.fields,field_description:snailmail.field_mail_mail__snailmail_error +#: model:ir.model.fields,field_description:snailmail.field_mail_message__snailmail_error +msgid "Snailmail message in error" +msgstr "" + +#. module: snailmail #: model:ir.actions.server,name:snailmail.snailmail_print_ir_actions_server #: model:ir.cron,cron_name:snailmail.snailmail_print #: model:ir.cron,name:snailmail.snailmail_print @@ -265,44 +519,133 @@ msgid "Snailmail: process letters queue" msgstr "" #. module: snailmail +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__state_id +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_missing_required_fields__state_id +#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_missing_required_fields +msgid "State" +msgstr "" + +#. module: snailmail #: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__state msgid "Status" msgstr "" #. module: snailmail -#: code:addons/snailmail/models/snailmail_letter.py:232 +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__street +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_missing_required_fields__street +msgid "Street" +msgstr "" + +#. module: snailmail +#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_missing_required_fields +msgid "Street 2..." +msgstr "" + +#. module: snailmail +#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_missing_required_fields +msgid "Street..." +msgstr "" + +#. module: snailmail +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__street2 +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_missing_required_fields__street2 +msgid "Street2" +msgstr "" + +#. module: snailmail +#: selection:mail.compose.message,message_type:0 +#: selection:mail.message,message_type:0 +msgid "System notification" +msgstr "" + +#. module: snailmail +#: selection:snailmail.letter,error_code:0 +msgid "TRIAL_ERROR" +msgstr "" + +#. module: snailmail +#: code:addons/snailmail/models/snailmail_letter.py:291 +#, python-format +msgid "The address of the recipient is not complete" +msgstr "" + +#. module: snailmail +#: code:addons/snailmail/models/snailmail_letter.py:271 #, python-format msgid "The attachment of the letter could not be sent. Please check its content and contact the support if the problem persists." msgstr "" #. module: snailmail -#: code:addons/snailmail/models/snailmail_letter.py:228 +#: code:addons/snailmail/models/snailmail_letter.py:267 #, python-format msgid "The country of the partner is not covered by Snailmail." msgstr "" #. module: snailmail -#: code:addons/snailmail/models/snailmail_letter.py:261 +#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_missing_required_fields +msgid "The customer address is not complete. Update the address here and re-send the letter." +msgstr "" + +#. module: snailmail +#: code:addons/snailmail/models/snailmail_letter.py:315 #, python-format msgid "The document was correctly sent by post.<br>The tracking id is %ssend_id" msgstr "" #. module: snailmail +#: model:ir.model.fields,field_description:snailmail.field_mail_compose_message__message_type +#: model:ir.model.fields,field_description:snailmail.field_mail_mail__message_type +#: model:ir.model.fields,field_description:snailmail.field_mail_message__message_type +msgid "Type" +msgstr "" + +#. module: snailmail +#: selection:snailmail.letter,error_code:0 +msgid "UNKNOWN_ERROR" +msgstr "" + +#. module: snailmail +#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_format_error +msgid "Update Config and Re-send" +msgstr "" + +#. module: snailmail +#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_missing_required_fields +msgid "Update address and re-send" +msgstr "" + +#. module: snailmail +#: model:ir.model,name:snailmail.model_snailmail_letter_missing_required_fields +msgid "Update address of partner" +msgstr "" + +#. module: snailmail #: model:ir.model.fields,help:snailmail.field_snailmail_letter__state -msgid "When a letter is created, the status is 'Draft'.\n" +msgid "When a letter is created, the status is 'Pending'.\n" "If the letter is correctly sent, the status goes in 'Sent',\n" "If not, it will got in state 'Error' and the error message will be displayed in the field 'Error Message'." msgstr "" #. module: snailmail -#: code:addons/snailmail/models/snailmail_letter.py:226 +#: code:addons/snailmail/models/snailmail_letter.py:265 #, python-format msgid "You don't have an IAP account registered for this service.<br>Please go to <a href=%s target=\"new\">iap.odoo.com</a> to claim your free credits." msgstr "" #. module: snailmail -#: code:addons/snailmail/models/snailmail_letter.py:223 +#: code:addons/snailmail/models/snailmail_letter.py:262 #, python-format msgid "You don't have enough credits to perform this operation.<br>Please go to your <a href=%s target=\"new\">iap account</a>." msgstr "" +#. module: snailmail +#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_missing_required_fields +msgid "ZIP" +msgstr "" + +#. module: snailmail +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__zip +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_missing_required_fields__zip +msgid "Zip" +msgstr "" + diff --git a/addons/snailmail_account/i18n/snailmail_account.pot b/addons/snailmail_account/i18n/snailmail_account.pot index 8676a07d7be..c1f2645684f 100644 --- a/addons/snailmail_account/i18n/snailmail_account.pot +++ b/addons/snailmail_account/i18n/snailmail_account.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:59+0000\n" -"PO-Revision-Date: 2019-01-16 07:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,7 +16,7 @@ msgstr "" "Plural-Forms: \n" #. module: snailmail_account -#: code:addons/snailmail_account/wizard/account_invoice_send.py:93 +#: code:addons/snailmail_account/wizard/account_invoice_send.py:76 #, python-format msgid "%s of the selected invoice(s) had an invalid address and were not sent" msgstr "" @@ -35,12 +35,19 @@ msgstr "" #. module: snailmail_account #: model_terms:ir.ui.view,arch_db:snailmail_account.account_invoice_send_inherit_account_wizard_form msgid "<span class=\"text-danger\">\n" -" Incomplete customer address\n" +" The customer address is not complete.\n" " </span>" msgstr "" #. module: snailmail_account #: model_terms:ir.ui.view,arch_db:snailmail_account.account_invoice_send_inherit_account_wizard_form +msgid "<span class=\"text-danger\">\n" +" Some customer addresses are not complete.\n" +" </span>" +msgstr "" + +#. module: snailmail_account +#: model_terms:ir.ui.view,arch_db:snailmail_account.account_invoice_send_inherit_account_wizard_form msgid "<span> to: </span>" msgstr "" @@ -51,14 +58,7 @@ msgstr "" #. module: snailmail_account #: model:ir.model.fields,help:snailmail_account.field_account_invoice_send__snailmail_is_letter -msgid "Allows to send the document by snail mail (coventional posting delivery service)" -msgstr "" - -#. module: snailmail_account -#: code:addons/snailmail_account/wizard/account_invoice_send.py:89 -#, python-format -msgid "Cannot send by post to an incomplete address.\n" -" Please update the customer's address or uncheck 'Send by Post'." +msgid "Allows to send the document by Snailmail (coventional posting delivery service)" msgstr "" #. module: snailmail_account @@ -72,15 +72,16 @@ msgid "Config Settings" msgstr "" #. module: snailmail_account -#: code:addons/snailmail_account/wizard/account_invoice_send.py:85 -#: model:ir.model.fields,field_description:snailmail_account.field_account_invoice_send__invalid_addresses +#: code:addons/snailmail_account/wizard/account_invoice_send.py:75 +#: code:addons/snailmail_account/wizard/account_invoice_send.py:82 +#: model:ir.model.fields,field_description:snailmail_account.field_account_invoice_send__invalid_invoice_ids #, python-format msgid "Invalid Addresses" msgstr "" #. module: snailmail_account -#: model:ir.model.fields,field_description:snailmail_account.field_account_invoice_send__letter_ids -msgid "Letter" +#: model:ir.model.fields,field_description:snailmail_account.field_account_invoice_send__invalid_addresses +msgid "Invalid Addresses Count" msgstr "" #. module: snailmail_account @@ -89,28 +90,10 @@ msgid "Partner" msgstr "" #. module: snailmail_account -#: model_terms:ir.ui.view,arch_db:snailmail_account.res_config_settings_view_form -msgid "Print in Color" -msgstr "" - -#. module: snailmail_account -#: model_terms:ir.ui.view,arch_db:snailmail_account.res_config_settings_view_form -msgid "Print on Both Sides" -msgstr "" - -#. module: snailmail_account -#: model:ir.model.fields,field_description:snailmail_account.field_res_company__invoice_is_snailmail -msgid "Send by Letter by default" -msgstr "" - -#. module: snailmail_account #: model:ir.model.fields,field_description:snailmail_account.field_account_invoice_send__snailmail_is_letter -msgid "Send by Post" -msgstr "" - -#. module: snailmail_account +#: model:ir.model.fields,field_description:snailmail_account.field_res_company__invoice_is_snailmail #: model:ir.model.fields,field_description:snailmail_account.field_res_config_settings__invoice_is_snailmail -msgid "Send by Post with Snailmail" +msgid "Send by Post" msgstr "" #. module: snailmail_account @@ -126,6 +109,6 @@ msgstr "" #. module: snailmail_account #: model_terms:ir.ui.view,arch_db:snailmail_account.account_invoice_send_inherit_account_wizard_form -msgid "invoice(s) do not have a complete customer address" +msgid "invoices" msgstr "" diff --git a/addons/stock/i18n/stock.pot b/addons/stock/i18n/stock.pot index b3c81308372..025b4e19e03 100644 --- a/addons/stock/i18n/stock.pot +++ b/addons/stock/i18n/stock.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:58+0000\n" -"PO-Revision-Date: 2019-01-16 07:58+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,7 +16,7 @@ msgstr "" "Plural-Forms: \n" #. module: stock -#: code:addons/stock/models/stock_move.py:337 +#: code:addons/stock/models/stock_move.py:343 #, python-format msgid "\n" "\n" @@ -24,7 +24,7 @@ msgid "\n" msgstr "" #. module: stock -#: code:addons/stock/models/stock_move.py:338 +#: code:addons/stock/models/stock_move.py:344 #, python-format msgid "\n" "\n" @@ -32,25 +32,29 @@ msgid "\n" msgstr "" #. module: stock -#: code:addons/stock/models/stock_move.py:325 +#: code:addons/stock/models/stock_move.py:331 #, python-format msgid " (%s reserved)" msgstr "" #. module: stock -#: code:addons/stock/models/stock_move.py:328 +#: code:addons/stock/models/stock_move.py:334 #, python-format msgid " (reserved)" msgstr "" #. module: stock #: model:ir.model.fields,help:stock.field_stock_picking__state -msgid " * Draft: not confirmed yet and will not be scheduled until confirmed.\n" -" * Waiting Another Operation: waiting for another move to proceed before it becomes automatically available (e.g. in Make-To-Order flows).\n" -" * Waiting: if it is not ready to be sent because the required products could not be reserved.\n" -" * Ready: products are reserved and ready to be sent. If the shipping policy is 'As soon as possible' this happens as soon as anything is reserved.\n" -" * Done: has been processed, can't be modified or cancelled anymore.\n" -" * Cancelled: has been cancelled, can't be confirmed anymore." +msgid " * Draft: The transfer is not confirmed yet. Reservation doesn't apply.\n" +" * Waiting another operation: This transfer is waiting for another operation before being ready.\n" +" * Waiting: The transfer is waiting for the availability of some products.\n" +"(a) The shipping policy is \"As soon as possible\": no product could be reserved.\n" +"(b) The shipping policy is \"When all products are ready\": not all the products could be reserved.\n" +" * Ready: The transfer is ready to be processed.\n" +"(a) The shipping policy is \"As soon as possible\": at least one product has been reserved.\n" +"(b) The shipping policy is \"When all products are ready\": all product have been reserved.\n" +" * Done: The transfer has been processed.\n" +" * Cancelled: The transfer has been cancelled." msgstr "" #. module: stock @@ -65,7 +69,7 @@ msgid "%s use default source or destination locations fro msgstr "" #. module: stock -#: code:addons/stock/models/stock_warehouse.py:615 +#: code:addons/stock/models/stock_warehouse.py:642 #, python-format msgid "%s: Supply Product from %s" msgstr "" @@ -115,7 +119,7 @@ msgid "<br/>\n" msgstr "" #. module: stock -#: code:addons/stock/models/stock_rule.py:112 +#: code:addons/stock/models/stock_rule.py:111 #, python-format msgid "<br>A need is created in <b>%s</b> and a rule will be triggered to fulfill it." msgstr "" @@ -137,6 +141,12 @@ msgid "<i class=\"fa fa-ellipsis-v\" role=\"img\" aria-label=\"Manage\" title=\" msgstr "" #. module: stock +#: model_terms:ir.ui.view,arch_db:stock.report_picking +msgid "<i class=\"fa fa-exclamation-triangle\"/>\n" +" All products could not be reserved. Click on the \"Check Availability\" button to try to reserve products" +msgstr "" + +#. module: stock #: model_terms:ir.ui.view,arch_db:stock.report_mrp_line msgid "<i class=\"fa fa-fw fa-caret-right\" role=\"img\" aria-label=\"Unfold\" title=\"Unfold\"/>" msgstr "" @@ -336,7 +346,7 @@ msgid "A Pack" msgstr "" #. module: stock -#: code:addons/stock/models/stock_move_line.py:95 +#: code:addons/stock/models/stock_move_line.py:96 #, python-format msgid "A done move line should never have a reserved quantity." msgstr "" @@ -488,11 +498,6 @@ msgid "All products" msgstr "" #. module: stock -#: model_terms:ir.ui.view,arch_db:stock.report_picking -msgid "All products could not be reserved. Click on the \"Check Availability\" button to try to reserve products" -msgstr "" - -#. module: stock #: model:ir.model.fields,field_description:stock.field_stock_move__returned_move_ids msgid "All returned moves" msgstr "" @@ -563,16 +568,6 @@ msgid "Assign Owner" msgstr "" #. module: stock -#: model_terms:ir.ui.view,arch_db:stock.view_picking_form -msgid "Assign Partner" -msgstr "" - -#. module: stock -#: model_terms:ir.ui.view,arch_db:stock.view_picking_form -msgid "Assign the partner to the Operations. Use only if the partner is manually changed!" -msgstr "" - -#. module: stock #: model_terms:ir.ui.view,arch_db:stock.view_picking_internal_search msgid "Assigned Moves" msgstr "" @@ -648,7 +643,7 @@ msgid "Backorder creation" msgstr "" #. module: stock -#: code:addons/stock/models/stock_picking.py:72 +#: code:addons/stock/models/stock_picking.py:73 #, python-format msgid "Backorder exists" msgstr "" @@ -685,6 +680,11 @@ msgid "Barcode Scanner" msgstr "" #. module: stock +#: model:ir.actions.report,name:stock.label_transfer_template +msgid "Barcodes (ZPL)" +msgstr "" + +#. module: stock #: model:ir.model.fields,field_description:stock.field_res_config_settings__module_stock_picking_batch msgid "Batch Pickings" msgstr "" @@ -715,7 +715,7 @@ msgid "By Unique Serial Number" msgstr "" #. module: stock -#: code:addons/stock/models/stock_move.py:641 +#: code:addons/stock/models/stock_move.py:647 #, python-format msgid "By changing this quantity here, you accept the new quantity as complete: Odoo will not automatically generate a back order." msgstr "" @@ -742,7 +742,7 @@ msgid "Calendar View" msgstr "" #. module: stock -#: code:addons/stock/models/stock_warehouse.py:576 +#: code:addons/stock/models/stock_warehouse.py:603 #, python-format msgid "Can't find any customer or supplier location." msgstr "" @@ -785,7 +785,7 @@ msgid "Cancelled Moves" msgstr "" #. module: stock -#: code:addons/stock/models/stock_move.py:273 +#: code:addons/stock/models/stock_move.py:279 #, python-format msgid "Cannot set the done quantity from this stock move, work directly with the move lines." msgstr "" @@ -863,7 +863,7 @@ msgid "Choose a date to get the inventory at that date" msgstr "" #. module: stock -#: code:addons/stock/models/stock_picking.py:1024 +#: code:addons/stock/models/stock_picking.py:1034 #, python-format msgid "Choose destination location" msgstr "" @@ -1065,7 +1065,7 @@ msgid "Create Backorder" msgstr "" #. module: stock -#: code:addons/stock/models/stock_picking.py:776 +#: code:addons/stock/models/stock_picking.py:786 #, python-format msgid "Create Backorder?" msgstr "" @@ -1229,7 +1229,7 @@ msgid "Credit Card" msgstr "" #. module: stock -#: code:addons/stock/models/stock_warehouse.py:581 +#: code:addons/stock/models/stock_warehouse.py:608 #, python-format msgid "Cross-Dock" msgstr "" @@ -1265,7 +1265,7 @@ msgid "Current quantity of products.\n" msgstr "" #. module: stock -#: code:addons/stock/models/stock_picking.py:110 +#: code:addons/stock/models/stock_picking.py:111 #: model_terms:ir.ui.view,arch_db:stock.view_location_search #, python-format msgid "Customer" @@ -1331,6 +1331,11 @@ msgid "Date of Transfer" msgstr "" #. module: stock +#: model_terms:ir.ui.view,arch_db:stock.view_stock_level_forecast_filter +msgid "Day" +msgstr "" + +#. module: stock #: selection:stock.warehouse.orderpoint,lead_type:0 msgid "Day(s) to get the products" msgstr "" @@ -1444,25 +1449,25 @@ msgid "Deliver goods directly (1 step)" msgstr "" #. module: stock -#: code:addons/stock/models/stock_warehouse.py:582 +#: code:addons/stock/models/stock_warehouse.py:609 #, python-format msgid "Deliver in 1 step (ship)" msgstr "" #. module: stock -#: code:addons/stock/models/stock_warehouse.py:582 +#: code:addons/stock/models/stock_warehouse.py:609 #, python-format msgid "Deliver in 2 steps (pick + ship)" msgstr "" #. module: stock -#: code:addons/stock/models/stock_warehouse.py:583 +#: code:addons/stock/models/stock_warehouse.py:610 #, python-format msgid "Deliver in 3 steps (pick + pack + ship)" msgstr "" #. module: stock -#: code:addons/stock/models/product.py:334 +#: code:addons/stock/models/product.py:350 #, python-format msgid "Delivered Qty" msgstr "" @@ -1473,7 +1478,7 @@ msgid "Deliveries" msgstr "" #. module: stock -#: code:addons/stock/models/stock_warehouse.py:776 +#: code:addons/stock/models/stock_warehouse.py:803 #: model:stock.picking.type,name:stock.chi_picking_type_out #: model:stock.picking.type,name:stock.picking_type_out #, python-format @@ -1514,6 +1519,7 @@ msgstr "" #. module: stock #: model:ir.model.fields,field_description:stock.field_stock_move__name +#: model_terms:ir.ui.view,arch_db:stock.view_picking_form msgid "Description" msgstr "" @@ -1533,6 +1539,11 @@ msgid "Description for Receipts" msgstr "" #. module: stock +#: model:ir.model.fields,field_description:stock.field_stock_move__description_picking +msgid "Description of Picking" +msgstr "" + +#. module: stock #: model:ir.model.fields,field_description:stock.field_product_product__description_pickingout #: model:ir.model.fields,field_description:stock.field_product_template__description_pickingout msgid "Description on Delivery Orders" @@ -1551,6 +1562,11 @@ msgid "Description on Receptions" msgstr "" #. module: stock +#: model:ir.model.fields,field_description:stock.field_stock_move_line__description_picking +msgid "Description picking" +msgstr "" + +#. module: stock #: model_terms:ir.ui.view,arch_db:stock.report_picking msgid "Destination" msgstr "" @@ -1561,7 +1577,7 @@ msgid "Destination Address " msgstr "" #. module: stock -#: code:addons/stock/models/stock_rule.py:97 +#: code:addons/stock/models/stock_rule.py:96 #: model:ir.model.fields,field_description:stock.field_stock_move__location_dest_id #: model:ir.model.fields,field_description:stock.field_stock_picking__location_dest_id #: model:ir.model.fields,field_description:stock.field_stock_rule__location_id @@ -1603,7 +1619,7 @@ msgid "Destination route" msgstr "" #. module: stock -#: code:addons/stock/models/stock_move.py:466 +#: code:addons/stock/models/stock_move.py:472 #: model_terms:ir.ui.view,arch_db:stock.view_picking_form #, python-format msgid "Detailed Operations" @@ -1881,7 +1897,13 @@ msgid "Forecast quantity (computed as Quantity On Hand - Outgoing + Incoming)\n" msgstr "" #. module: stock -#: code:addons/stock/models/product.py:329 +#: model:ir.actions.act_window,name:stock.action_stock_level_forecast_report_all_product +#: model:ir.ui.menu,name:stock.menu_forecast_inventory +msgid "Forecasted Inventory" +msgstr "" + +#. module: stock +#: code:addons/stock/models/product.py:345 #: model:ir.model.fields,field_description:stock.field_product_template__virtual_available #: model:ir.model.fields,field_description:stock.field_stock_move__availability #, python-format @@ -1915,25 +1937,25 @@ msgid "Future Activities" msgstr "" #. module: stock -#: code:addons/stock/models/product.py:332 +#: code:addons/stock/models/product.py:348 #, python-format msgid "Future Deliveries" msgstr "" #. module: stock -#: code:addons/stock/models/product.py:337 +#: code:addons/stock/models/product.py:353 #, python-format msgid "Future P&L" msgstr "" #. module: stock -#: code:addons/stock/models/product.py:342 +#: code:addons/stock/models/product.py:358 #, python-format msgid "Future Productions" msgstr "" #. module: stock -#: code:addons/stock/models/product.py:324 +#: code:addons/stock/models/product.py:340 #, python-format msgid "Future Receipts" msgstr "" @@ -1954,11 +1976,6 @@ msgid "Give to the more specialized category, a higher priority to have them in msgstr "" #. module: stock -#: model_terms:ir.ui.view,arch_db:stock.view_stock_level_forecast_filter -msgid "Graph" -msgstr "" - -#. module: stock #: model_terms:ir.ui.view,arch_db:stock.search_product_lot_filter #: model_terms:ir.ui.view,arch_db:stock.stock_move_line_view_search #: model_terms:ir.ui.view,arch_db:stock.stock_scrap_search_view @@ -2184,7 +2201,7 @@ msgid "Immediate Transfer" msgstr "" #. module: stock -#: code:addons/stock/models/stock_picking.py:739 +#: code:addons/stock/models/stock_picking.py:749 #, python-format msgid "Immediate Transfer?" msgstr "" @@ -2245,7 +2262,7 @@ msgid "Initial Demand" msgstr "" #. module: stock -#: code:addons/stock/models/stock_warehouse.py:500 +#: code:addons/stock/models/stock_warehouse.py:508 #, python-format msgid "Input" msgstr "" @@ -2256,7 +2273,7 @@ msgid "Input Location" msgstr "" #. module: stock -#: code:addons/stock/models/stock_scrap.py:138 +#: code:addons/stock/models/stock_scrap.py:140 #, python-format msgid "Insufficient Quantity" msgstr "" @@ -2285,7 +2302,7 @@ msgid "Internal Reference" msgstr "" #. module: stock -#: code:addons/stock/models/stock_warehouse.py:801 +#: code:addons/stock/models/stock_warehouse.py:828 #: model:stock.picking.type,name:stock.picking_type_internal #, python-format msgid "Internal Transfers" @@ -2307,19 +2324,19 @@ msgid "Internal reference number in case it differs from the manufacturer's lot/ msgstr "" #. module: stock -#: code:addons/stock/models/product.py:253 +#: code:addons/stock/models/product.py:267 #, python-format msgid "Invalid domain left operand %s" msgstr "" #. module: stock -#: code:addons/stock/models/product.py:255 +#: code:addons/stock/models/product.py:269 #, python-format msgid "Invalid domain operator %s" msgstr "" #. module: stock -#: code:addons/stock/models/product.py:257 +#: code:addons/stock/models/product.py:271 #, python-format msgid "Invalid domain right operand %s" msgstr "" @@ -2664,7 +2681,7 @@ msgid "Last Updated on" msgstr "" #. module: stock -#: code:addons/stock/models/stock_picking.py:70 +#: code:addons/stock/models/stock_picking.py:71 #: model_terms:ir.ui.view,arch_db:stock.stock_picking_type_kanban #: model_terms:ir.ui.view,arch_db:stock.view_picking_internal_search #, python-format @@ -2841,6 +2858,11 @@ msgid "Lot/Serial Number (PDF)" msgstr "" #. module: stock +#: model:ir.actions.report,name:stock.label_lot_template +msgid "Lot/Serial Number (ZPL)" +msgstr "" + +#. module: stock #: model_terms:ir.ui.view,arch_db:stock.view_inventory_tree msgid "Lot/Serial Number Inventory" msgstr "" @@ -2892,7 +2914,7 @@ msgstr "" #. module: stock #: code:addons/stock/models/stock_warehouse.py:342 -#: code:addons/stock/models/stock_warehouse.py:685 +#: code:addons/stock/models/stock_warehouse.py:712 #, python-format msgid "Make To Order" msgstr "" @@ -3036,6 +3058,11 @@ msgid "Misc" msgstr "" #. module: stock +#: model_terms:ir.ui.view,arch_db:stock.view_stock_level_forecast_filter +msgid "Month" +msgstr "" + +#. module: stock #: model_terms:ir.actions.act_window,help:stock.action_picking_tree msgid "Most operations are prepared automatically by Odoo according\n" " to your preconfigured logistics rules, but you can also record\n" @@ -3154,8 +3181,8 @@ msgid "New" msgstr "" #. module: stock -#: code:addons/stock/models/stock_move_line.py:176 -#: code:addons/stock/models/stock_picking.py:613 +#: code:addons/stock/models/stock_move_line.py:179 +#: code:addons/stock/models/stock_picking.py:622 #, python-format msgid "New Move:" msgstr "" @@ -3219,7 +3246,7 @@ msgid "No inventory found" msgstr "" #. module: stock -#: code:addons/stock/models/stock_move_line.py:417 +#: code:addons/stock/models/stock_move_line.py:420 #, python-format msgid "No negative quantities allowed" msgstr "" @@ -3230,7 +3257,7 @@ msgid "No operation made on this lot." msgstr "" #. module: stock -#: code:addons/stock/models/stock_rule.py:306 +#: code:addons/stock/models/stock_rule.py:314 #, python-format msgid "No procurement rule found in location \"%s\" for product \"%s\".\n" " Check routes configuration." @@ -3243,7 +3270,7 @@ msgid "No products to return (only lines in Done state and not fully returned ye msgstr "" #. module: stock -#: code:addons/stock/models/stock_rule.py:173 +#: code:addons/stock/models/stock_rule.py:175 #, python-format msgid "No source location defined on stock rule: %s!" msgstr "" @@ -3273,7 +3300,7 @@ msgid "Notes" msgstr "" #. module: stock -#: code:addons/stock/models/stock_picking.py:563 +#: code:addons/stock/models/stock_picking.py:572 #, python-format msgid "Nothing to check the availability for." msgstr "" @@ -3314,7 +3341,7 @@ msgid "Number of unread messages" msgstr "" #. module: stock -#: code:addons/stock/models/stock_picking.py:74 +#: code:addons/stock/models/stock_picking.py:75 #, python-format msgid "OK" msgstr "" @@ -3367,7 +3394,7 @@ msgid "One product only" msgstr "" #. module: stock -#: code:addons/stock/models/stock_rule.py:98 +#: code:addons/stock/models/stock_rule.py:97 #: model:ir.model.fields,field_description:stock.field_stock_move__picking_type_id #: model:ir.model.fields,field_description:stock.field_stock_picking__picking_type_id #: model:ir.model.fields,field_description:stock.field_stock_picking_type__name @@ -3397,6 +3424,11 @@ msgid "Operation type (PDF)" msgstr "" #. module: stock +#: model:ir.actions.report,name:stock.label_picking_type +msgid "Operation type (ZPL)" +msgstr "" + +#. module: stock #: model:ir.model.fields,field_description:stock.field_stock_picking__move_line_ids #: model:ir.ui.menu,name:stock.menu_stock_warehouse_mgmt #: model_terms:ir.ui.view,arch_db:stock.res_config_settings_view_form @@ -3502,7 +3534,7 @@ msgid "Outgoing Shipments" msgstr "" #. module: stock -#: code:addons/stock/models/stock_warehouse.py:502 +#: code:addons/stock/models/stock_warehouse.py:520 #, python-format msgid "Output" msgstr "" @@ -3557,7 +3589,7 @@ msgid "Owner of the quants" msgstr "" #. module: stock -#: code:addons/stock/models/product.py:339 +#: code:addons/stock/models/product.py:355 #, python-format msgid "P&L Qty" msgstr "" @@ -3570,7 +3602,7 @@ msgid "PRINT" msgstr "" #. module: stock -#: code:addons/stock/models/stock_warehouse.py:784 +#: code:addons/stock/models/stock_warehouse.py:811 #: model:ir.model.fields,field_description:stock.field_stock_inventory_line__package_id #, python-format msgid "Pack" @@ -3605,6 +3637,11 @@ msgid "Package Barcode (PDF)" msgstr "" #. module: stock +#: model:ir.actions.report,name:stock.label_package_template +msgid "Package Barcode (ZPL)" +msgstr "" + +#. module: stock #: model:ir.actions.report,name:stock.action_report_quant_package_barcode msgid "Package Barcode with Content" msgstr "" @@ -3685,7 +3722,7 @@ msgid "Packing Location" msgstr "" #. module: stock -#: code:addons/stock/models/stock_warehouse.py:503 +#: code:addons/stock/models/stock_warehouse.py:526 #, python-format msgid "Packing Zone" msgstr "" @@ -3735,7 +3772,7 @@ msgid "Physical Inventories by Date" msgstr "" #. module: stock -#: code:addons/stock/models/stock_warehouse.py:793 +#: code:addons/stock/models/stock_warehouse.py:820 #: model:ir.model.fields,field_description:stock.field_stock_backorder_confirmation__pick_ids #: model:ir.model.fields,field_description:stock.field_stock_immediate_transfer__pick_ids #, python-format @@ -3748,6 +3785,7 @@ msgid "Pick Type" msgstr "" #. module: stock +#: model:ir.model.fields,field_description:stock.field_report_stock_forecast__picking_id #: model:ir.model.fields,field_description:stock.field_stock_overprocessed_transfer__picking_id #: model:ir.model.fields,field_description:stock.field_stock_package_destination__picking_id #: model:ir.model.fields,field_description:stock.field_stock_package_level__picking_id @@ -3808,11 +3846,6 @@ msgid "Pickings that are late on scheduled time" msgstr "" #. module: stock -#: model_terms:ir.ui.view,arch_db:stock.view_stock_level_forecast_filter -msgid "Pivot" -msgstr "" - -#. module: stock #: selection:stock.picking,activity_state:0 #: selection:stock.production.lot,activity_state:0 msgid "Planned" @@ -3824,7 +3857,7 @@ msgid "Planned Transfer" msgstr "" #. module: stock -#: code:addons/stock/models/stock_picking.py:711 +#: code:addons/stock/models/stock_picking.py:721 #, python-format msgid "Please add some items to move." msgstr "" @@ -3923,7 +3956,7 @@ msgid "Produce Line" msgstr "" #. module: stock -#: code:addons/stock/models/product.py:344 +#: code:addons/stock/models/product.py:360 #, python-format msgid "Produced Qty" msgstr "" @@ -3955,11 +3988,18 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:stock.stock_move_line_view_search #: model_terms:ir.ui.view,arch_db:stock.stock_scrap_search_view #: model_terms:ir.ui.view,arch_db:stock.view_move_search +#: model_terms:ir.ui.view,arch_db:stock.view_stock_level_forecast_filter msgid "Product" msgstr "" #. module: stock -#: code:addons/stock/models/stock_location.py:207 +#: model:ir.actions.report,name:stock.label_barcode_product_product +#: model:ir.actions.report,name:stock.label_barcode_product_template +msgid "Product Barcode (ZPL)" +msgstr "" + +#. module: stock +#: code:addons/stock/models/stock_location.py:211 #: model:ir.model.fields,field_description:stock.field_stock_location_route__categ_ids #: model:ir.ui.menu,name:stock.menu_product_category_config_stock #: model_terms:ir.ui.view,arch_db:stock.stock_location_route_form_view @@ -3975,6 +4015,12 @@ msgid "Product Category" msgstr "" #. module: stock +#: model:ir.actions.report,name:stock.label_product_product +#: model:ir.actions.report,name:stock.label_product_template +msgid "Product Label (ZPL)" +msgstr "" + +#. module: stock #: model_terms:ir.ui.view,arch_db:stock.search_product_lot_filter msgid "Product Lots" msgstr "" @@ -4003,6 +4049,11 @@ msgid "Product Moves (Stock Move Line)" msgstr "" #. module: stock +#: model:ir.actions.report,name:stock.label_product_packaging +msgid "Product Packaging (ZPL)" +msgstr "" + +#. module: stock #: model:ir.ui.menu,name:stock.menu_product_packagings #: model_terms:ir.ui.view,arch_db:stock.res_config_settings_view_form msgid "Product Packagings" @@ -4076,7 +4127,7 @@ msgid "Production Location" msgstr "" #. module: stock -#: code:addons/stock/models/stock_location.py:197 +#: code:addons/stock/models/stock_location.py:201 #: code:addons/stock/wizard/stock_quantity_history.py:29 #: model:ir.actions.act_window,name:stock.act_product_location_open #: model:ir.actions.act_window,name:stock.product_template_action_product @@ -4091,7 +4142,7 @@ msgid "Products" msgstr "" #. module: stock -#: code:addons/stock/models/product.py:312 +#: code:addons/stock/models/product.py:328 #, python-format msgid "Products: " msgstr "" @@ -4185,7 +4236,7 @@ msgid "Qty Multiple must be greater than or equal to zero." msgstr "" #. module: stock -#: code:addons/stock/models/stock_warehouse.py:501 +#: code:addons/stock/models/stock_warehouse.py:514 #, python-format msgid "Quality Control" msgstr "" @@ -4255,7 +4306,7 @@ msgid "Quantity cannot be negative." msgstr "" #. module: stock -#: code:addons/stock/models/stock_move.py:640 +#: code:addons/stock/models/stock_move.py:646 #, python-format msgid "Quantity decreased!" msgstr "" @@ -4351,7 +4402,7 @@ msgid "Receipt Route" msgstr "" #. module: stock -#: code:addons/stock/models/stock_warehouse.py:768 +#: code:addons/stock/models/stock_warehouse.py:795 #: model:stock.picking.type,name:stock.chi_picking_type_in #: model:stock.picking.type,name:stock.picking_type_in #, python-format @@ -4374,25 +4425,25 @@ msgid "Receive goods in input, then quality and then stock (3 steps)" msgstr "" #. module: stock -#: code:addons/stock/models/stock_warehouse.py:580 +#: code:addons/stock/models/stock_warehouse.py:607 #, python-format msgid "Receive in 1 step (stock)" msgstr "" #. module: stock -#: code:addons/stock/models/stock_warehouse.py:580 +#: code:addons/stock/models/stock_warehouse.py:607 #, python-format msgid "Receive in 2 steps (input + stock)" msgstr "" #. module: stock -#: code:addons/stock/models/stock_warehouse.py:581 +#: code:addons/stock/models/stock_warehouse.py:608 #, python-format msgid "Receive in 3 steps (input + quality + stock)" msgstr "" #. module: stock -#: code:addons/stock/models/product.py:326 +#: code:addons/stock/models/product.py:342 #, python-format msgid "Received Qty" msgstr "" @@ -4404,6 +4455,7 @@ msgstr "" #. module: stock #: model:ir.model.fields,field_description:stock.field_procurement_group__name +#: model:ir.model.fields,field_description:stock.field_report_stock_forecast__reference #: model:ir.model.fields,field_description:stock.field_stock_move__reference #: model:ir.model.fields,field_description:stock.field_stock_move_line__reference #: model:ir.model.fields,field_description:stock.field_stock_picking__name @@ -4725,7 +4777,7 @@ msgid "Scheduled time for the first part of the shipment to be processed. Settin msgstr "" #. module: stock -#: code:addons/stock/models/stock_picking.py:1088 +#: code:addons/stock/models/stock_picking.py:1098 #: model:ir.model,name:stock.model_stock_scrap #: model:ir.model.fields,field_description:stock.field_stock_move__scrap_ids #: model:ir.model.fields,field_description:stock.field_stock_warn_insufficient_qty_scrap__scrap_id @@ -4832,31 +4884,31 @@ msgid "Sequence" msgstr "" #. module: stock -#: code:addons/stock/models/stock_warehouse.py:819 +#: code:addons/stock/models/stock_warehouse.py:846 #, python-format msgid "Sequence in" msgstr "" #. module: stock -#: code:addons/stock/models/stock_warehouse.py:839 +#: code:addons/stock/models/stock_warehouse.py:866 #, python-format msgid "Sequence internal" msgstr "" #. module: stock -#: code:addons/stock/models/stock_warehouse.py:824 +#: code:addons/stock/models/stock_warehouse.py:851 #, python-format msgid "Sequence out" msgstr "" #. module: stock -#: code:addons/stock/models/stock_warehouse.py:829 +#: code:addons/stock/models/stock_warehouse.py:856 #, python-format msgid "Sequence packing" msgstr "" #. module: stock -#: code:addons/stock/models/stock_warehouse.py:834 +#: code:addons/stock/models/stock_warehouse.py:861 #, python-format msgid "Sequence picking" msgstr "" @@ -5029,7 +5081,7 @@ msgid "Source Document" msgstr "" #. module: stock -#: code:addons/stock/models/stock_rule.py:96 +#: code:addons/stock/models/stock_rule.py:95 #: model:ir.model.fields,field_description:stock.field_stock_move__location_id #: model:ir.model.fields,field_description:stock.field_stock_picking__location_id #: model:ir.model.fields,field_description:stock.field_stock_rule__location_src_id @@ -5113,7 +5165,7 @@ msgid "Status based on activities\n" msgstr "" #. module: stock -#: code:addons/stock/models/stock_warehouse.py:499 +#: code:addons/stock/models/stock_warehouse.py:502 #, python-format msgid "Stock" msgstr "" @@ -5130,6 +5182,7 @@ msgstr "" #. module: stock #: model_terms:ir.ui.view,arch_db:stock.stock_inventory_line_tree +#: model_terms:ir.ui.view,arch_db:stock.view_stock_level_forecast_tree msgid "Stock Inventory Lines" msgstr "" @@ -5141,7 +5194,6 @@ msgstr "" #. module: stock #: model_terms:ir.ui.view,arch_db:stock.view_stock_level_forecast_filter -#: model_terms:ir.ui.view,arch_db:stock.view_stock_level_forecast_graph #: model_terms:ir.ui.view,arch_db:stock.view_stock_level_forecast_pivot msgid "Stock Level forecast" msgstr "" @@ -5382,7 +5434,7 @@ msgid "The 'Manual Operation' value will create a stock move after the current o msgstr "" #. module: stock -#: code:addons/stock/models/stock_picking.py:846 +#: code:addons/stock/models/stock_picking.py:856 #, python-format msgid "The backorder <a href=# data-oe-model=stock.picking data-oe-id=%d>%s</a> has been created." msgstr "" @@ -5413,7 +5465,7 @@ msgid "The expected date of the created transfer will be computed based on this msgstr "" #. module: stock -#: code:addons/stock/models/stock_move_line.py:81 +#: code:addons/stock/models/stock_move_line.py:82 #, python-format msgid "The move line a a different company than its move" msgstr "" @@ -5452,14 +5504,14 @@ msgid "The product" msgstr "" #. module: stock -#: code:addons/stock/models/stock_move_line.py:386 +#: code:addons/stock/models/stock_move_line.py:389 #, python-format msgid "The quantity done for the product \"%s\" doesn't respect the rounding precision defined on the unit of measure \"%s\". Please change the quantity done or the rounding precision of your unit of measure." msgstr "" #. module: stock -#: code:addons/stock/models/stock_move.py:280 -#: code:addons/stock/models/stock_move_line.py:89 +#: code:addons/stock/models/stock_move.py:286 +#: code:addons/stock/models/stock_move_line.py:90 #, python-format msgid "The requested operation cannot be processed because of a programming error setting the `product_qty` field instead of the `product_uom_qty`." msgstr "" @@ -5531,6 +5583,11 @@ msgid "Theoretical Quantity" msgstr "" #. module: stock +#: model_terms:ir.actions.act_window,help:stock.action_stock_level_forecast_report_all_product +msgid "There is nothing to forecast yet." +msgstr "" + +#. module: stock #: model_terms:ir.actions.act_window,help:stock.stock_move_line_action msgid "There's no product move yet" msgstr "" @@ -5577,13 +5634,13 @@ msgid "This is used to correct the product quantities you have in stock." msgstr "" #. module: stock -#: code:addons/stock/models/stock_location.py:85 +#: code:addons/stock/models/stock_location.py:86 #, python-format msgid "This location's usage cannot be changed to view as it contains products." msgstr "" #. module: stock -#: code:addons/stock/models/stock_move_line.py:75 +#: code:addons/stock/models/stock_move_line.py:76 #, python-format msgid "This lot %s is incompatible with this product %s" msgstr "" @@ -5888,7 +5945,7 @@ msgid "Unity of measure" msgstr "" #. module: stock -#: code:addons/stock/models/stock_picking.py:907 +#: code:addons/stock/models/stock_picking.py:917 #, python-format msgid "Unknow stream." msgstr "" @@ -5956,7 +6013,7 @@ msgid "Update Qty On Hand" msgstr "" #. module: stock -#: code:addons/stock/models/product.py:565 +#: code:addons/stock/models/product.py:581 #, python-format msgid "Update quantity on hand" msgstr "" @@ -6133,7 +6190,7 @@ msgid "Warehouse view location" msgstr "" #. module: stock -#: code:addons/stock/models/stock_warehouse.py:869 +#: code:addons/stock/models/stock_warehouse.py:896 #, python-format msgid "Warehouse's Routes" msgstr "" @@ -6159,8 +6216,8 @@ msgid "Warn Insufficient Scrap Quantity" msgstr "" #. module: stock -#: code:addons/stock/models/stock_move_line.py:136 -#: code:addons/stock/models/stock_move_line.py:148 +#: code:addons/stock/models/stock_move_line.py:139 +#: code:addons/stock/models/stock_move_line.py:151 #: selection:res.partner,picking_warn:0 #, python-format msgid "Warning" @@ -6172,7 +6229,7 @@ msgid "Warning on the Picking" msgstr "" #. module: stock -#: code:addons/stock/models/product.py:305 +#: code:addons/stock/models/product.py:321 #, python-format msgid "Warning!" msgstr "" @@ -6200,6 +6257,11 @@ msgid "Website communication history" msgstr "" #. module: stock +#: model_terms:ir.ui.view,arch_db:stock.view_stock_level_forecast_filter +msgid "Week" +msgstr "" + +#. module: stock #: selection:barcode.rule,type:0 msgid "Weighted Product" msgstr "" @@ -6225,13 +6287,13 @@ msgid "When checked, the route will be selectable on the Product Category. It w msgstr "" #. module: stock -#: code:addons/stock/models/stock_rule.py:114 +#: code:addons/stock/models/stock_rule.py:113 #, python-format msgid "When products are needed in <b>%s</b>, <br/> <b>%s</b> are created from <b>%s</b> to fulfill the need." msgstr "" #. module: stock -#: code:addons/stock/models/stock_rule.py:115 +#: code:addons/stock/models/stock_rule.py:114 #, python-format msgid "When products arrive in <b>%s</b>, <br/> <b>%s</b> are created to send them in <b>%s</b>." msgstr "" @@ -6285,7 +6347,7 @@ msgid "You are trying to put products going to different locations into the same msgstr "" #. module: stock -#: code:addons/stock/models/stock_move.py:665 +#: code:addons/stock/models/stock_move.py:671 #, python-format msgid "You are using a unit of measure smaller than the one you are using in order to stock your product. This can lead to rounding problem on reserved quantity. You should use the smaller unit of measure possible in order to valuate your stock or change its rounding precision to a smaller value (example: 0.00001)." msgstr "" @@ -6304,19 +6366,19 @@ msgid "You can delete lines to ignore some products." msgstr "" #. module: stock -#: code:addons/stock/models/product.py:547 +#: code:addons/stock/models/product.py:563 #, python-format msgid "You can not change the type of a product that is currently reserved on a stock move. If you need to change the type, you should first unreserve the stock move." msgstr "" #. module: stock -#: code:addons/stock/models/stock_move_line.py:347 +#: code:addons/stock/models/stock_move_line.py:350 #, python-format msgid "You can not delete product moves if the picking is done. You can only correct the done quantities." msgstr "" #. module: stock -#: code:addons/stock/models/stock_move_line.py:154 +#: code:addons/stock/models/stock_move_line.py:157 #, python-format msgid "You can not enter negative quantities." msgstr "" @@ -6328,43 +6390,43 @@ msgid "You can only adjust storable products." msgstr "" #. module: stock -#: code:addons/stock/models/stock_move.py:1148 +#: code:addons/stock/models/stock_move.py:1167 #, python-format msgid "You can only delete draft moves." msgstr "" #. module: stock -#: code:addons/stock/models/stock_move_line.py:147 +#: code:addons/stock/models/stock_move_line.py:150 #, python-format msgid "You can only process 1.0 %s of products with unique serial number." msgstr "" #. module: stock -#: code:addons/stock/models/stock_location.py:106 +#: code:addons/stock/models/stock_location.py:107 #, python-format msgid "You cannot archive the location %s as it is used by your warehouse %s" msgstr "" #. module: stock -#: code:addons/stock/models/stock_move.py:1011 +#: code:addons/stock/models/stock_move.py:1027 #, python-format msgid "You cannot cancel a stock move that has been set to 'Done'." msgstr "" #. module: stock -#: code:addons/stock/models/stock_location.py:96 +#: code:addons/stock/models/stock_location.py:97 #, python-format msgid "You cannot change the location type or its use as a scrap location as there are products reserved in this location. Please unreserve the products first." msgstr "" #. module: stock -#: code:addons/stock/models/product.py:650 +#: code:addons/stock/models/product.py:666 #, python-format msgid "You cannot change the ratio of this unit of mesure as some products with this UoM have already been moved or are currently reserved." msgstr "" #. module: stock -#: code:addons/stock/models/product.py:538 +#: code:addons/stock/models/product.py:554 #, python-format msgid "You cannot change the unit of measure as there are already stock moves for this product. If you want to change the unit of measure, you should rather archive this product and create a new one." msgstr "" @@ -6388,13 +6450,13 @@ msgid "You cannot have two inventory adjustments in state 'In Progress' with the msgstr "" #. module: stock -#: code:addons/stock/models/stock_move.py:1133 +#: code:addons/stock/models/stock_move.py:1151 #, python-format msgid "You cannot move the same package content more than once in the same transfer or split the same package into two location." msgstr "" #. module: stock -#: code:addons/stock/models/stock_move.py:335 +#: code:addons/stock/models/stock_move.py:341 #, python-format msgid "You cannot perform the move because the unit of measure has a different category as the product unit of measure." msgstr "" @@ -6407,13 +6469,13 @@ msgid "You cannot set a negative product quantity in an inventory line:\n" msgstr "" #. module: stock -#: code:addons/stock/models/stock_move.py:1179 +#: code:addons/stock/models/stock_move.py:1198 #, python-format msgid "You cannot split a draft move. It needs to be confirmed first." msgstr "" #. module: stock -#: code:addons/stock/models/stock_move.py:1175 +#: code:addons/stock/models/stock_move.py:1194 #, python-format msgid "You cannot split a stock move that has been set to 'Done'." msgstr "" @@ -6425,20 +6487,20 @@ msgid "You cannot take products from or deliver products to a location of type \ msgstr "" #. module: stock -#: code:addons/stock/models/stock_move.py:497 +#: code:addons/stock/models/stock_move.py:503 #, python-format msgid "You cannot unreserve a stock move that has been set to 'Done'." msgstr "" #. module: stock -#: code:addons/stock/models/stock_move_line.py:129 -#: code:addons/stock/models/stock_move_line.py:133 +#: code:addons/stock/models/stock_move_line.py:132 +#: code:addons/stock/models/stock_move_line.py:136 #, python-format msgid "You cannot use the same serial number twice. Please correct the serial numbers encoded." msgstr "" #. module: stock -#: code:addons/stock/models/stock_picking.py:719 +#: code:addons/stock/models/stock_picking.py:729 #, python-format msgid "You cannot validate a transfer if no quantites are reserved nor done. To force the transfer, switch in edit more and encode the done quantities." msgstr "" @@ -6467,25 +6529,25 @@ msgid "You have processed more than what was initially\n" msgstr "" #. module: stock -#: code:addons/stock/models/product.py:306 +#: code:addons/stock/models/product.py:322 #, python-format msgid "You have products in stock that have no lot number. You can assign serial numbers by doing an inventory. " msgstr "" #. module: stock -#: code:addons/stock/models/stock_picking.py:891 +#: code:addons/stock/models/stock_picking.py:901 #, python-format msgid "You have to define a groupby and sorted method and pass them as arguments." msgstr "" #. module: stock -#: code:addons/stock/models/stock_warehouse.py:953 +#: code:addons/stock/models/stock_warehouse.py:980 #, python-format msgid "You have to select a product unit of measure that is in the same category than the default unit of measure of the product" msgstr "" #. module: stock -#: code:addons/stock/models/stock_location.py:129 +#: code:addons/stock/models/stock_location.py:130 #, python-format msgid "You have to set a name for this location." msgstr "" @@ -6509,14 +6571,14 @@ msgid "You must define a warehouse for the company: %s." msgstr "" #. module: stock -#: code:addons/stock/models/stock_picking.py:1071 +#: code:addons/stock/models/stock_picking.py:1081 #, python-format msgid "You must first set the quantity you will put in the pack." msgstr "" #. module: stock -#: code:addons/stock/models/stock_move_line.py:415 -#: code:addons/stock/models/stock_picking.py:733 +#: code:addons/stock/models/stock_move_line.py:418 +#: code:addons/stock/models/stock_picking.py:743 #, python-format msgid "You need to supply a Lot/Serial number for product %s." msgstr "" @@ -6528,14 +6590,14 @@ msgid "You still have ongoing operations for picking type msgstr "" #. module: stock -#: code:addons/stock/models/product.py:396 -#: code:addons/stock/models/product.py:540 +#: code:addons/stock/models/product.py:412 +#: code:addons/stock/models/product.py:556 #, python-format msgid "You still have some active reordering rules on this product. Please archive or delete them first." msgstr "" #. module: stock -#: code:addons/stock/models/stock_location.py:114 +#: code:addons/stock/models/stock_location.py:115 #, python-format msgid "You still have some product in locations %s" msgstr "" diff --git a/addons/stock/models/stock_move.py b/addons/stock/models/stock_move.py index e8e6ecce0e4..2cc264a9058 100644 --- a/addons/stock/models/stock_move.py +++ b/addons/stock/models/stock_move.py @@ -1025,10 +1025,12 @@ class StockMove(models.Model): def _action_cancel(self): if any(move.state == 'done' for move in self): raise UserError(_('You cannot cancel a stock move that has been set to \'Done\'.')) - for move in self: - if move.state == 'cancel': - continue - move._do_unreserve() + moves_to_cancel = self.filtered(lambda m: m.state != 'cancel') + # self cannot contain moves that are either cancelled or done, therefore we can safely + # unlink all associated move_line_ids + moves_to_cancel._do_unreserve() + + for move in moves_to_cancel: siblings_states = (move.move_dest_ids.mapped('move_orig_ids') - move).mapped('state') if move.propagate: # only cancel the next move if all my siblings are also cancelled @@ -1261,8 +1263,10 @@ class StockMove(models.Model): @param qty: quantity in the UoM of move.product_uom """ for ml in self.move_line_ids: - # Convert move line qty into move uom ml_qty = ml.product_uom_qty - ml.qty_done + if float_compare(ml_qty, 0, precision_rounding=ml.product_uom_id.rounding) <= 0: + continue + # Convert move line qty into move uom if ml.product_uom_id != self.product_uom: ml_qty = ml.product_uom_id._compute_quantity(ml_qty, self.product_uom, round=False) @@ -1279,9 +1283,9 @@ class StockMove(models.Model): taken_qty = ml.product_uom_id._compute_quantity(ml_qty, self.product_uom, round=False) qty -= taken_qty - if float_compare(qty, 0.0, precision_rounding=self.product_uom.rounding) <= 0: + if float_compare(qty, 0.0, precision_rounding=self.product_uom.rounding) <= 0: break - if float_compare(qty, 0.0, precision_rounding=self.product_uom.rounding) > 0: + if float_compare(qty, 0.0, precision_rounding=self.product_uom.rounding) > 0: vals = self._prepare_move_line_vals(quantity=0) vals['qty_done'] = qty ml = self.env['stock.move.line'].create(vals) diff --git a/addons/stock/models/stock_traceability.py b/addons/stock/models/stock_traceability.py index 2a30571b539..b1345bed60f 100644 --- a/addons/stock/models/stock_traceability.py +++ b/addons/stock/models/stock_traceability.py @@ -81,10 +81,11 @@ class MrpStockReport(models.TransientModel): res_model = '' ref = '' res_id = False - if move_line.picking_id: + picking_id = move_line.picking_id or move_line.move_id.picking_id + if picking_id: res_model = 'stock.picking' - res_id = move_line.picking_id.id - ref = move_line.picking_id.name + res_id = picking_id.id + ref = picking_id.name elif move_line.move_id.inventory_id: res_model = 'stock.inventory' res_id = move_line.move_id.inventory_id.id diff --git a/addons/stock/report/report_deliveryslip.xml b/addons/stock/report/report_deliveryslip.xml index a6958d6d14d..500e8901899 100644 --- a/addons/stock/report/report_deliveryslip.xml +++ b/addons/stock/report/report_deliveryslip.xml @@ -4,7 +4,7 @@ <template id="report_delivery_document"> <t t-call="web.html_container"> <t t-call="web.external_layout"> - <t t-set="o" t-value="o.with_context({'lang':o.partner_id.lang})" /> + <t t-set="o" t-value="o.with_context(lang=o.partner_id.lang)" /> <t t-set="partner" t-value="o.partner_id or (o.move_lines and o.move_lines[0].partner_id) or False"/> <t t-if="partner" name="partner_header"> <t t-set="address"> diff --git a/addons/stock/report/report_stockpicking_operations.xml b/addons/stock/report/report_stockpicking_operations.xml index 09715938ca3..290186686c3 100644 --- a/addons/stock/report/report_stockpicking_operations.xml +++ b/addons/stock/report/report_stockpicking_operations.xml @@ -146,7 +146,7 @@ </thead> <tbody> <tr t-foreach="o.package_level_ids.sorted(key=lambda p: p.package_id.name)" t-as="package"> - <t t-set="package" t-value="package.with_context({'picking_id':o.id})" /> + <t t-set="package" t-value="package.with_context(picking_id=o.id)" /> <td><span t-field="package.package_id.name"/></td> <td><img t-att-src="'/report/barcode/?type=%s&value=%s&width=%s&height=%s' % ('Code128', package.package_id.name, 600, 100)" style="width:300px ;height:50px" alt="Barcode"/></td> <td><span t-field="package.location_id"/></td> diff --git a/addons/stock_account/i18n/stock_account.pot b/addons/stock_account/i18n/stock_account.pot index 9ea10684fda..08afe53b1e3 100644 --- a/addons/stock_account/i18n/stock_account.pot +++ b/addons/stock_account/i18n/stock_account.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:59+0000\n" -"PO-Revision-Date: 2019-01-16 07:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,8 +16,8 @@ msgstr "" "Plural-Forms: \n" #. module: stock_account -#: code:addons/stock_account/models/product.py:95 -#: code:addons/stock_account/models/product.py:101 +#: code:addons/stock_account/models/product.py:96 +#: code:addons/stock_account/models/product.py:102 #, python-format msgid "%s changed cost from %s to %s - %s" msgstr "" @@ -80,13 +80,13 @@ msgid "Cancel" msgstr "" #. module: stock_account -#: code:addons/stock_account/models/stock.py:510 +#: code:addons/stock_account/models/stock.py:512 #, python-format msgid "Cannot find a stock input account for the product %s. You must define one on the product category, or on the location, before processing this operation." msgstr "" #. module: stock_account -#: code:addons/stock_account/models/stock.py:512 +#: code:addons/stock_account/models/stock.py:514 #, python-format msgid "Cannot find a stock output account for the product %s. You must define one on the product category, or on the location, before processing this operation." msgstr "" @@ -109,7 +109,7 @@ msgid "Change Standard Price" msgstr "" #. module: stock_account -#: code:addons/stock_account/models/product.py:371 +#: code:addons/stock_account/models/product.py:393 #, python-format msgid "Changing your cost method is an important change that will impact your inventory valuation. Are you sure you want to make that change?" msgstr "" @@ -125,7 +125,7 @@ msgid "Config Settings" msgstr "" #. module: stock_account -#: code:addons/stock_account/models/stock.py:587 +#: code:addons/stock_account/models/stock.py:589 #, python-format msgid "Configuration error. Please configure the price difference account on the product or its category to process this operation." msgstr "" @@ -219,6 +219,9 @@ msgid "Inventory Locations" msgstr "" #. module: stock_account +#: code:addons/stock_account/__init__.py:26 +#: code:addons/stock_account/__init__.py:31 +#: code:addons/stock_account/models/account_chart_template.py:15 #: code:addons/stock_account/wizard/stock_quantity_history.py:25 #: model:ir.actions.act_window,name:stock_account.action_stock_inventory_valuation #: model:ir.actions.act_window,name:stock_account.product_valuation_action @@ -282,7 +285,7 @@ msgid "Manual: The accounting entries to value the inventory are not posted auto msgstr "" #. module: stock_account -#: code:addons/stock_account/models/product.py:77 +#: code:addons/stock_account/models/product.py:78 #, python-format msgid "No difference between the standard price and the new price." msgstr "" @@ -299,6 +302,7 @@ msgstr "" #. module: stock_account #: model:ir.model,name:stock_account.model_product_product +#: model_terms:ir.ui.view,arch_db:stock_account.view_inventory_valuation_search msgid "Product" msgstr "" @@ -384,11 +388,7 @@ msgid "Stock Input Account" msgstr "" #. module: stock_account -#: code:addons/stock_account/__init__.py:26 -#: code:addons/stock_account/__init__.py:31 -#: code:addons/stock_account/models/account_chart_template.py:15 #: model:ir.model.fields,field_description:stock_account.field_product_category__property_stock_journal -#, python-format msgid "Stock Journal" msgstr "" @@ -430,31 +430,36 @@ msgid "Stock Valuation Account (Outgoing)" msgstr "" #. module: stock_account -#: code:addons/stock_account/models/product.py:353 +#: model:ir.model.fields,field_description:stock_account.field_product_product__stock_value_currency_id +msgid "Stock Value Currency" +msgstr "" + +#. module: stock_account +#: code:addons/stock_account/models/product.py:375 #, python-format msgid "The Stock Input and/or Output accounts cannot be the same than the Stock Valuation account." msgstr "" #. module: stock_account -#: code:addons/stock_account/models/stock.py:536 +#: code:addons/stock_account/models/stock.py:538 #, python-format msgid "The cost of %s is currently equal to 0. Change the cost or the configuration of your product to avoid an incorrect valuation." msgstr "" #. module: stock_account -#: code:addons/stock_account/models/stock.py:359 +#: code:addons/stock_account/models/stock.py:364 #, python-format msgid "The move lines are not in a consistent state: some are entering and other are leaving the company." msgstr "" #. module: stock_account -#: code:addons/stock_account/models/stock.py:370 +#: code:addons/stock_account/models/stock.py:375 #, python-format msgid "The move lines are not in a consistent states: they are doing an intercompany in a single step while they should go through the intercompany transit location." msgstr "" #. module: stock_account -#: code:addons/stock_account/models/stock.py:368 +#: code:addons/stock_account/models/stock.py:373 #, python-format msgid "The move lines are not in a consistent states: they do not share the same origin or destination company." msgstr "" @@ -498,7 +503,7 @@ msgid "Valuation" msgstr "" #. module: stock_account -#: code:addons/stock_account/models/product.py:195 +#: code:addons/stock_account/models/product.py:217 #, python-format msgid "Valuation at date" msgstr "" @@ -511,7 +516,7 @@ msgid "Value" msgstr "" #. module: stock_account -#: code:addons/stock_account/models/product.py:370 +#: code:addons/stock_account/models/product.py:392 #, python-format msgid "Warning" msgstr "" @@ -537,14 +542,14 @@ msgid "When real-time inventory valuation is enabled on a product, this account msgstr "" #. module: stock_account -#: code:addons/stock_account/models/stock.py:508 +#: code:addons/stock_account/models/stock.py:510 #, python-format msgid "You don't have any stock journal defined on your product category, check if you have installed a chart of accounts." msgstr "" #. module: stock_account -#: code:addons/stock_account/models/product.py:79 -#: code:addons/stock_account/models/stock.py:514 +#: code:addons/stock_account/models/product.py:80 +#: code:addons/stock_account/models/stock.py:516 #, python-format msgid "You don't have any stock valuation account defined on your product category. You must define one before processing this operation." msgstr "" diff --git a/addons/stock_account/models/stock.py b/addons/stock_account/models/stock.py index d8ae0e23b76..f7ccabb3089 100644 --- a/addons/stock_account/models/stock.py +++ b/addons/stock_account/models/stock.py @@ -383,7 +383,7 @@ class StockMove(models.Model): tmpl_dict = defaultdict(lambda: 0.0) # adapt standard price on incomming moves if the product cost_method is 'average' std_price_update = {} - for move in self.filtered(lambda move: move.location_id.usage in ('supplier', 'production') and move.product_id.cost_method == 'average'): + for move in self.filtered(lambda move: move._is_in() and move.product_id.cost_method == 'average'): product_tot_qty_available = move.product_id.qty_available + tmpl_dict[move.product_id.id] rounding = move.product_id.uom_id.rounding diff --git a/addons/stock_account/tests/test_stockvaluation.py b/addons/stock_account/tests/test_stockvaluation.py index 55d3e241ec6..73158ecb4b5 100644 --- a/addons/stock_account/tests/test_stockvaluation.py +++ b/addons/stock_account/tests/test_stockvaluation.py @@ -2662,6 +2662,57 @@ class TestStockValuation(TransactionCase): self.assertAlmostEqual(self.product1.standard_price, 14.0) + def test_average_perpetual_8(self): + """ Receive 1@10, then dropship 1@20, finally return the dropship. Dropship should not + impact the price. + """ + self.product1.product_tmpl_id.cost_method = 'average' + + move1 = self.env['stock.move'].create({ + 'name': 'IN 1@10', + 'location_id': self.supplier_location.id, + 'location_dest_id': self.stock_location.id, + 'product_id': self.product1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 1, + 'price_unit': 10, + }) + move1._action_confirm() + move1.quantity_done = 1 + move1._action_done() + + self.assertAlmostEqual(self.product1.standard_price, 10) + + move2 = self.env['stock.move'].create({ + 'name': 'IN 1@20', + 'location_id': self.supplier_location.id, + 'location_dest_id': self.customer_location.id, + 'product_id': self.product1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 1, + 'price_unit': 20, + }) + move2._action_confirm() + move2.quantity_done = 1 + move2._action_done() + + self.assertAlmostEqual(self.product1.standard_price, 10.0) + + move3 = self.env['stock.move'].create({ + 'name': 'IN 1@20', + 'location_id': self.customer_location.id, + 'location_dest_id': self.supplier_location.id, + 'product_id': self.product1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 1, + 'price_unit': 20, + }) + move3._action_confirm() + move3.quantity_done = 1 + move3._action_done() + + self.assertAlmostEqual(self.product1.standard_price, 10.0) + def test_average_negative_1(self): """ Test edit in the past. Receive 10, send 20, edit the second move to only send 10. """ diff --git a/addons/stock_landed_costs/views/product_views.xml b/addons/stock_landed_costs/views/product_views.xml index 3d71a3097f6..c52baf03822 100644 --- a/addons/stock_landed_costs/views/product_views.xml +++ b/addons/stock_landed_costs/views/product_views.xml @@ -7,11 +7,16 @@ <field name="inherit_id" ref="purchase.view_product_supplier_inherit"/> <field name="arch" type="xml"> <xpath expr="//group[@name='inventory']" position="inside"> - <group string="Inventory Valuation" name="inventory_valuation"> - <field name="landed_cost_ok" class="oe_inline" attrs="{'invisible':[('type', 'not in', ['product', 'consu', 'service'])]}"/> - <field name="split_method" attrs="{'invisible':['|', ('landed_cost_ok', '=' ,False), ('type', 'not in', ['product', 'consu', 'service'])]}"/> + <group string="Inventory Valuation" name="inventory_valuation" invisible="1"> + <field name="split_method" invisible="1"/> </group> </xpath> + <div name="options" position="inside"> + <div attrs="{'invisible':[('type', 'not in', ['product', 'consu', 'service'])]}"> + <field name="landed_cost_ok"/> + <label for="landed_cost_ok"/> + </div> + </div> </field> </record> </data> diff --git a/addons/survey/controllers/main.py b/addons/survey/controllers/main.py index 446caf6a55e..320b0659ef9 100644 --- a/addons/survey/controllers/main.py +++ b/addons/survey/controllers/main.py @@ -367,7 +367,7 @@ class Survey(http.Controller): return {} survey_sudo, answer_sudo = access_data['survey_sudo'], access_data['answer_sudo'] - if not survey_sudo._has_attempts_left(answer_sudo.partner_id, answer_sudo.email, answer_sudo.invite_token): + if not answer_sudo.test_entry and not survey_sudo._has_attempts_left(answer_sudo.partner_id, answer_sudo.email, answer_sudo.invite_token): # prevent cheating with users creating multiple 'user_input' before their last attempt return {} @@ -509,7 +509,7 @@ class Survey(http.Controller): # filter_finish: boolean => only finished surveys or not # - @http.route(['/survey/<int:survey_id>/get_certification'], type='http', auth='user', methods=['POST'], website=True) + @http.route(['/survey/<int:survey_id>/get_certification'], type='http', auth='user', methods=['GET'], website=True) def survey_get_certification(self, survey_id, **kwargs): """ The certification document can be downloaded as long as the user has succeeded the certification """ survey = request.env['survey.survey'].sudo().search([ diff --git a/addons/survey/data/mail_template_data.xml b/addons/survey/data/mail_template_data.xml index 222d1fbae11..94bc68b6016 100644 --- a/addons/survey/data/mail_template_data.xml +++ b/addons/survey/data/mail_template_data.xml @@ -40,7 +40,6 @@ <field name="name">Certification: Send by email</field> <field name="model_id" ref="survey.model_survey_user_input"/> <field name="email_to">${(object.partner_id.email_formatted or object.email) |safe}</field> - <field name="partner_to">${object.partner_id.id}</field> <field name="subject">Certification: ${object.survey_id.display_name}</field> <field name="report_template" ref="certification_report"/> <field name="report_name">Certification Document</field> diff --git a/addons/survey/i18n/survey.pot b/addons/survey/i18n/survey.pot index 432b9284c38..3ae6acc925c 100644 --- a/addons/survey/i18n/survey.pot +++ b/addons/survey/i18n/survey.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 08:00+0000\n" -"PO-Revision-Date: 2019-01-16 08:00+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,24 +16,39 @@ msgstr "" "Plural-Forms: \n" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.survey_page_tree -msgid "#Questions" +#: code:addons/survey/models/survey_survey.py:186 +#, python-format +msgid "%s (copy)" msgstr "" #. module: survey -#: model:mail.template,subject:survey.email_template_survey -msgid "${object.title}: Survey" +#: model_terms:ir.ui.view,arch_db:survey.page +msgid "&times;" msgstr "" #. module: survey -#: code:addons/survey/models/survey_survey.py:91 -#, python-format -msgid "%s (copy)" +#: model_terms:ir.ui.view,arch_db:survey.survey_header +msgid "00:00" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.page -msgid "&times;" +#: model:survey.label,value:survey.vendor_certification_page_2_question_1_choice_4 +msgid "100$" +msgstr "" + +#. module: survey +#: model:survey.label,value:survey.vendor_certification_page_2_question_1_choice_1 +msgid "20$" +msgstr "" + +#. module: survey +#: model:survey.label,value:survey.vendor_certification_page_2_question_1_choice_5 +msgid "200$" +msgstr "" + +#. module: survey +#: model:survey.label,value:survey.vendor_certification_page_2_question_1_choice_6 +msgid "300$" msgstr "" #. module: survey @@ -42,22 +57,73 @@ msgid "403: Forbidden" msgstr "" #. module: survey +#: model:survey.label,value:survey.vendor_certification_page_2_question_1_choice_2 +msgid "50$" +msgstr "" + +#. module: survey +#: model:survey.label,value:survey.vendor_certification_page_2_question_1_choice_3 +msgid "80$" +msgstr "" + +#. module: survey +#: model:mail.template,body_html:survey.mail_template_certification +msgid "<?xml version=\"1.0\"?>\n" +"<div style=\"background:#F0F0F0;color:#515166;padding:10px 0px;font-family:Arial,Helvetica,sans-serif;font-size:14px;\">\n" +" <table style=\"width:600px;margin:5px auto;\">\n" +" <tbody>\n" +" <tr><td>\n" +" <!-- We use the logo of the company that created the survey (to handle multi company cases) -->\n" +" <a href=\"/\"><img src=\"/logo.png?company=${object.survey_id.create_uid.company_id.id}\" style=\"vertical-align:baseline;max-width:100px;\"/></a>\n" +" </td><td style=\"text-align:right;vertical-align:middle;\">\n" +" Certification: ${object.survey_id.display_name}\n" +" </td></tr>\n" +" </tbody>\n" +" </table>\n" +" <table style=\"width:600px;margin:0px auto;background:white;border:1px solid #e1e1e1;\">\n" +" <tbody>\n" +" <tr><td style=\"padding:15px 20px 10px 20px;\">\n" +" <p>Dear <span>${object.partner_id.name or 'participant'}</span></p>\n" +" <p>\n" +" Here is, in attachment, your certification document for\n" +" <strong>${object.survey_id.display_name}</strong>\n" +" </p>\n" +" <p>Congratulations for succeeding the test!</p>\n" +" </td></tr>\n" +" </tbody>\n" +" </table>\n" +" </div>\n" +" " +msgstr "" + +#. module: survey #: model_terms:ir.ui.view,arch_db:survey.result msgid "<b>Question </b>" msgstr "" #. module: survey -#: model:mail.template,body_html:survey.email_template_survey +#: model:mail.template,body_html:survey.mail_template_user_input_invite msgid "<div style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n" " <p style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n" -" Hello<br/><br/>\n" -" We are conducting a survey, and your response would be appreciated.\n" +" Dear ${object.partner_id.name or 'participant'}<br/><br/>\n" +" % if object.survey_id.certificate:\n" +" You have been invited to take a new certification.\n" +" % else:\n" +" We are conducting a survey and your response would be appreciated.\n" +" % endif\n" " <div style=\"margin: 16px 0px 16px 0px;\">\n" -" <a href=\"__URL__\" style=\"background-color: #875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: #fff; border-radius: 5px; font-size:13px;\">\n" -" Start Survey\n" +" <a href=\"${('%s?answer_token=%s' % (object.survey_id.public_url, object.token)) | safe}\" style=\"background-color: #875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: #fff; border-radius: 5px; font-size:13px;\">\n" +" % if object.survey_id.certificate:\n" +" Start Certification\n" +" % else:\n" +" Start Survey\n" +" % endif\n" " </a>\n" " </div>\n" -" Thanks for your participation!\n" +" % if object.deadline:\n" +" Please answer the survey for ${format_date(object.deadline)}.<br/><br/>\n" +" % endif\n" +" Thank you for your participation.\n" " </p>\n" "</div>\n" " " @@ -115,6 +181,12 @@ msgid "<i class=\"fa fa-dot-circle-o fa-lg\"/> answer" msgstr "" #. module: survey +#: model_terms:ir.ui.view,arch_db:survey.sfinished +msgid "<i class=\"fa fa-fw fa-trophy\" role=\"img\" aria-label=\"Download certification\" title=\"Download certification\"/>\n" +" Download certification" +msgstr "" + +#. module: survey #: model_terms:ir.ui.view,arch_db:survey.result_number msgid "<i class=\"fa fa-list-alt\"/>\n" " All Data" @@ -153,6 +225,11 @@ msgid "<i class=\"fa fa-times\"/> Clear All Filters" msgstr "" #. module: survey +#: model_terms:ir.ui.view,arch_db:survey.survey_form +msgid "<span attrs=\"{'invisible': [('is_time_limited', '=', False)]}\"> minutes</span>" +msgstr "" + +#. module: survey #: model_terms:ir.ui.view,arch_db:survey.result msgid "<span class=\"badge badge-primary only_left_radius filter-all\">All surveys</span><span class=\"badge badge-secondary only_right_radius filter-finished\">Finished surveys</span>" msgstr "" @@ -194,19 +271,31 @@ msgstr "" #. module: survey #: model_terms:ir.ui.view,arch_db:survey.result -msgid "<span style=\"font-size:1.5em;\" class=\"fa fa-bar-chart-o float-right \" role=\"img\" aria-label=\"Chart\" title=\"Chart\"/>" +msgid "<span>Correct answer</span>:" +msgstr "" + +#. module: survey +#: model_terms:ir.ui.view,arch_db:survey.result +msgid "<span>Correct answers</span>:" +msgstr "" + +#. module: survey +#: model_terms:ir.ui.view,arch_db:survey.sfinished +msgid "<span>Number of attemps left</span>:" +msgstr "" + +#. module: survey +#: model_terms:ir.ui.view,arch_db:survey.survey_init +msgid "<span>Time limit for this survey: </span>" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.no_result -msgid "<span>\n" -" <i style=\"font-size:1.8em\" class=\"fa fa-users float-right\" role=\"img\" aria-label=\"No answer\" title=\"No answer\"/>\n" -" </span>\n" -" Sorry, No one answered this survey yet" +#: model_terms:ir.ui.view,arch_db:survey.certification_report_view +msgid "<strong>Date of Certification:</strong>" msgstr "" #. module: survey -#: code:addons/survey/models/survey_question.py:299 +#: code:addons/survey/models/survey_question.py:389 #, python-format msgid "A label must be attached to only one question." msgstr "" @@ -217,12 +306,22 @@ msgid "A length must be positive!" msgstr "" #. module: survey +#: model:survey.label,value:survey.vendor_certification_page_2_question_3_choice_4 +msgid "A little bit overpriced" +msgstr "" + +#. module: survey #: model:ir.model.fields,help:survey.field_survey_survey__description msgid "A long description of the purpose of the survey" msgstr "" #. module: survey -#: model:ir.model.fields,help:survey.field_survey_label__quizz_mark +#: model:survey.label,value:survey.vendor_certification_page_2_question_3_choice_5 +msgid "A lot overpriced" +msgstr "" + +#. module: survey +#: model:ir.model.fields,help:survey.field_survey_label__answer_score msgid "A positive score indicates a correct choice; a negative or null score indicates a wrong answer" msgstr "" @@ -237,11 +336,28 @@ msgid "A token must be unique!" msgstr "" #. module: survey -#: model:survey.page,title:survey.survey_feedback_p2 +#: model:survey.question,question:survey.survey_feedback_p2 +#: model:survey.question,title:survey.survey_feedback_p2 msgid "About our ecommerce" msgstr "" #. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_invite__survey_access_mode +#: model:ir.model.fields,field_description:survey.field_survey_survey__access_mode +msgid "Access Mode" +msgstr "" + +#. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_survey__access_token +msgid "Access Token" +msgstr "" + +#. module: survey +#: sql_constraint:survey.survey:0 +msgid "Access token should be unique" +msgstr "" + +#. module: survey #: model:ir.model.fields,field_description:survey.field_survey_survey__message_needaction msgid "Action Needed" msgstr "" @@ -272,23 +388,38 @@ msgid "Add a new survey" msgstr "" #. module: survey +#: model_terms:ir.ui.view,arch_db:survey.survey_form +msgid "Add a question" +msgstr "" + +#. module: survey +#: model_terms:ir.ui.view,arch_db:survey.survey_form +msgid "Add a section" +msgstr "" + +#. module: survey #: model_terms:ir.ui.view,arch_db:survey.survey_invite_view_form msgid "Add existing contacts..." msgstr "" #. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_invite__emails +msgid "Additional emails" +msgstr "" + +#. module: survey #: model:survey.label,value:survey.survey_feedback_p2_q2_col3 msgid "Agree" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.survey_question_form -msgid "Allow Comments" +#: selection:survey.survey,questions_selection:0 +msgid "All questions" msgstr "" #. module: survey -#: model:ir.model.fields,help:survey.field_survey_page__description -msgid "An introductory text to your page" +#: model_terms:ir.ui.view,arch_db:survey.survey_question_form +msgid "Allow Comments" msgstr "" #. module: survey @@ -302,18 +433,29 @@ msgid "Answer Choices" msgstr "" #. module: survey +#: model_terms:ir.ui.view,arch_db:survey.result_choice +msgid "Answer Score" +msgstr "" + +#. module: survey #: model:ir.model.fields,field_description:survey.field_survey_user_input__input_type #: model:ir.model.fields,field_description:survey.field_survey_user_input_line__answer_type msgid "Answer Type" msgstr "" #. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_invite__deadline +msgid "Answer deadline" +msgstr "" + +#. module: survey #: model_terms:ir.ui.view,arch_db:survey.result msgid "Answered" msgstr "" #. module: survey #: model:ir.actions.act_window,name:survey.action_survey_user_input +#: model:ir.actions.act_window,name:survey.action_survey_user_input_notest #: model:ir.model.fields,field_description:survey.field_survey_question__user_input_line_ids #: model:ir.model.fields,field_description:survey.field_survey_user_input__user_input_line_ids #: model:ir.ui.menu,name:survey.menu_survey_type_form1 @@ -323,6 +465,11 @@ msgid "Answers" msgstr "" #. module: survey +#: selection:survey.survey,access_mode:0 +msgid "Anyone with the link" +msgstr "" + +#. module: survey #: model_terms:ir.ui.view,arch_db:survey.survey_survey_view_search msgid "Archived" msgstr "" @@ -348,13 +495,18 @@ msgid "Author of the message." msgstr "" #. module: survey +#: model:ir.model.fields,help:survey.field_survey_survey__certification_mail_template_id +msgid "Automated email sent to the user when he succeeds the certification, containing his certification document." +msgstr "" + +#. module: survey #: model:ir.model,name:survey.model_ir_autovacuum msgid "Automatic Vacuum" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.back -msgid "Back to Survey" +#: model:survey.label,value:survey.vendor_certification_page_2_question_2_choice_3 +msgid "Cabinet with Doors" msgstr "" #. module: survey @@ -363,6 +515,78 @@ msgid "Cancel" msgstr "" #. module: survey +#: model_terms:ir.ui.view,arch_db:survey.survey_form +msgid "Candidates" +msgstr "" + +#. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_survey__category +#: model_terms:ir.ui.view,arch_db:survey.survey_survey_view_search +msgid "Category" +msgstr "" + +#. module: survey +#: model:ir.model.fields,help:survey.field_survey_survey__category +msgid "Category is used to know in which context the survey is used. Various apps may define their own categories when they use survey like jobs recruitment or employee appraisal surveys." +msgstr "" + +#. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_survey__certificate +msgid "Certificate" +msgstr "" + +#. module: survey +#: model_terms:ir.ui.view,arch_db:survey.survey_kanban +msgid "Certification" +msgstr "" + +#. module: survey +#: model:mail.template,report_name:survey.mail_template_certification +msgid "Certification Document" +msgstr "" + +#. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_survey__certification_mail_template_id +msgid "Certification Email Template" +msgstr "" + +#. module: survey +#: model:mail.template,subject:survey.mail_template_certification +msgid "Certification: ${object.survey_id.display_name}" +msgstr "" + +#. module: survey +#: model:ir.actions.report,name:survey.certification_report +msgid "Certifications" +msgstr "" + +#. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_survey__certified_count +#: model_terms:ir.ui.view,arch_db:survey.survey_form +msgid "Certified" +msgstr "" + +#. module: survey +#: model_terms:ir.ui.view,arch_db:survey.certification_report_view +msgid "Certifies that" +msgstr "" + +#. module: survey +#: model:survey.label,value:survey.vendor_certification_page_1_question_2_choice_1 +msgid "Chair floor protection" +msgstr "" + +#. module: survey +#: model_terms:ir.ui.view,arch_db:survey.result +msgid "Chart" +msgstr "" + +#. module: survey +#: model:ir.model.fields,help:survey.field_survey_survey__is_attempts_limited +msgid "Check this option if you want to limit the number of attempts per user" +msgstr "" + +#. module: survey #: model_terms:ir.ui.view,arch_db:survey.survey_question_form msgid "Choices" msgstr "" @@ -373,14 +597,8 @@ msgid "Choose..." msgstr "" #. module: survey -#: code:addons/survey/models/survey_survey.py:79 -#, python-format -msgid "Click here to start survey" -msgstr "" - -#. module: survey +#: model_terms:ir.ui.view,arch_db:survey.back #: model_terms:ir.ui.view,arch_db:survey.page -#: model_terms:ir.ui.view,arch_db:survey.survey_invite_view_form msgid "Close" msgstr "" @@ -392,6 +610,7 @@ msgstr "" #. module: survey #: model_terms:ir.ui.view,arch_db:survey.survey_kanban +#: model:survey.label,value:survey.vendor_certification_page_1_question_3_choice_1 msgid "Color" msgstr "" @@ -421,7 +640,7 @@ msgid "Company name" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.survey_tree +#: model:ir.model.fields,field_description:survey.field_survey_survey__answer_done_count #: model_terms:ir.ui.view,arch_db:survey.survey_user_input_search #: selection:survey.user_input,state:0 msgid "Completed" @@ -433,11 +652,21 @@ msgid "Compose Email" msgstr "" #. module: survey +#: model:survey.label,value:survey.vendor_certification_page_1_question_2_choice_3 +msgid "Conference chair" +msgstr "" + +#. module: survey #: model:ir.ui.menu,name:survey.menu_surveys_configuration msgid "Configuration" msgstr "" #. module: survey +#: model_terms:ir.ui.view,arch_db:survey.sfinished +msgid "Congratulations, you have passed the test!" +msgstr "" + +#. module: survey #: model_terms:ir.ui.view,arch_db:survey.survey_question_form msgid "Constraints" msgstr "" @@ -448,23 +677,18 @@ msgid "Contents" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.survey_invite_view_form -msgid "Copy and paste the HTML code below to add this web link to any webpage." -msgstr "" - -#. module: survey -#: model_terms:ir.ui.view,arch_db:survey.survey_invite_view_form -msgid "Copy, paste and share the web link below to your audience." +#: model_terms:ir.ui.view,arch_db:survey.layout +msgid "Copyright &copy;" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.layout -msgid "Copyright &copy;" +#: model:survey.label,value:survey.vendor_certification_page_2_question_2_choice_1 +msgid "Corner Desk Right Sit" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_user_input_line__date_create -msgid "Create Date" +#: model:survey.label,value:survey.vendor_certification_page_2_question_3_choice_3 +msgid "Correctly priced" msgstr "" #. module: survey @@ -475,7 +699,6 @@ msgstr "" #. module: survey #: model:ir.model.fields,field_description:survey.field_survey_invite__create_uid #: model:ir.model.fields,field_description:survey.field_survey_label__create_uid -#: model:ir.model.fields,field_description:survey.field_survey_page__create_uid #: model:ir.model.fields,field_description:survey.field_survey_question__create_uid #: model:ir.model.fields,field_description:survey.field_survey_stage__create_uid #: model:ir.model.fields,field_description:survey.field_survey_survey__create_uid @@ -487,7 +710,6 @@ msgstr "" #. module: survey #: model:ir.model.fields,field_description:survey.field_survey_invite__create_date #: model:ir.model.fields,field_description:survey.field_survey_label__create_date -#: model:ir.model.fields,field_description:survey.field_survey_page__create_date #: model:ir.model.fields,field_description:survey.field_survey_question__create_date #: model:ir.model.fields,field_description:survey.field_survey_stage__create_date #: model:ir.model.fields,field_description:survey.field_survey_survey__create_date @@ -497,8 +719,49 @@ msgid "Created on" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_user_input__date_create -msgid "Creation Date" +#: code:addons/survey/models/survey_survey.py:243 +#, python-format +msgid "Creating test token is not allowed for you." +msgstr "" + +#. module: survey +#: code:addons/survey/models/survey_survey.py:257 +#, python-format +msgid "Creating token for anybody else than employees is not allowed for internal surveys." +msgstr "" + +#. module: survey +#: code:addons/survey/models/survey_survey.py:246 +#, python-format +msgid "Creating token for archived surveys is not allowed." +msgstr "" + +#. module: survey +#: code:addons/survey/models/survey_survey.py:248 +#, python-format +msgid "Creating token for closed surveys is not allowed." +msgstr "" + +#. module: survey +#: code:addons/survey/models/survey_survey.py:252 +#: code:addons/survey/models/survey_survey.py:255 +#, python-format +msgid "Creating token for external people is not allowed for surveys requesting authentication." +msgstr "" + +#. module: survey +#: model_terms:ir.ui.view,arch_db:survey.survey_invite_view_form +msgid "Customers will receive a new token and be able to completely retake the survey." +msgstr "" + +#. module: survey +#: model_terms:ir.ui.view,arch_db:survey.survey_invite_view_form +msgid "Customers will receive the same token." +msgstr "" + +#. module: survey +#: model:survey.label,value:survey.vendor_certification_page_1_question_2_choice_5 +msgid "Customizable Lamp" msgstr "" #. module: survey @@ -513,23 +776,24 @@ msgid "Date answer" msgstr "" #. module: survey -#: model:ir.model.fields,help:survey.field_survey_user_input__deadline -msgid "Date by which the person can open the survey and submit answers" +#: selection:survey.question,question_type:0 +#: selection:survey.user_input_line,answer_type:0 +msgid "Datetime" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_user_input__deadline -msgid "Deadline" +#: model:ir.model.fields,field_description:survey.field_survey_user_input_line__value_datetime +msgid "Datetime answer" msgstr "" #. module: survey -#: model:ir.model.fields,help:survey.field_survey_invite__date_deadline -msgid "Deadline to which the invitation to respond for this survey is valid. If the field is empty, the invitation is still valid." +#: model:ir.model.fields,help:survey.field_survey_user_input__deadline +msgid "Datetime until customer can open the survey and submit answers" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_invite__date_deadline -msgid "Deadline to which the invitation to respond is valid" +#: model:ir.model.fields,field_description:survey.field_survey_user_input__deadline +msgid "Deadline" msgstr "" #. module: survey @@ -538,15 +802,20 @@ msgid "Delete" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_page__description #: model:ir.model.fields,field_description:survey.field_survey_question__description #: model:ir.model.fields,field_description:survey.field_survey_survey__description +#: model_terms:ir.ui.view,arch_db:survey.survey_form msgid "Description" msgstr "" #. module: survey #: model_terms:ir.actions.act_window,help:survey.action_survey_form -msgid "Design easily your survey, send invitations to answer by email and analyse answers." +msgid "Design easily your survey, send invitations to answer by email and analyze answers." +msgstr "" + +#. module: survey +#: model:survey.label,value:survey.vendor_certification_page_2_question_2_choice_2 +msgid "Desk Combination" msgstr "" #. module: survey @@ -562,7 +831,6 @@ msgstr "" #. module: survey #: model:ir.model.fields,field_description:survey.field_survey_invite__display_name #: model:ir.model.fields,field_description:survey.field_survey_label__display_name -#: model:ir.model.fields,field_description:survey.field_survey_page__display_name #: model:ir.model.fields,field_description:survey.field_survey_question__display_name #: model:ir.model.fields,field_description:survey.field_survey_stage__display_name #: model:ir.model.fields,field_description:survey.field_survey_survey__display_name @@ -577,16 +845,39 @@ msgid "Display mode" msgstr "" #. module: survey +#: model:ir.model.fields,help:survey.field_survey_question__display_mode +msgid "Display mode of simple choice questions." +msgstr "" + +#. module: survey +#: model:survey.question,question:survey.vendor_certification_page_1_question_1 +#: model:survey.question,title:survey.vendor_certification_page_1_question_1 +msgid "Do we sell Acoustic Bloc Screens?" +msgstr "" + +#. module: survey #: model:survey.question,question:survey.survey_feedback_p2_q3 +#: model:survey.question,title:survey.survey_feedback_p2_q3 msgid "Do you have any other comments, questions, or concerns ?" msgstr "" #. module: survey +#: model:survey.question,question:survey.vendor_certification_page_1_question_5 +#: model:survey.question,title:survey.vendor_certification_page_1_question_5 +msgid "Do you think we have missing products in our catalog? (not rated)" +msgstr "" + +#. module: survey #: model:survey.stage,name:survey.stage_draft msgid "Draft" msgstr "" #. module: survey +#: model:survey.label,value:survey.vendor_certification_page_1_question_2_choice_4 +msgid "Drawer" +msgstr "" + +#. module: survey #: model_terms:ir.ui.view,arch_db:survey.survey_kanban msgid "Dropdown menu" msgstr "" @@ -607,13 +898,18 @@ msgid "Edit Survey" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.survey_user_input_search -msgid "Email" +#: model_terms:ir.ui.view,arch_db:survey.back +msgid "Edit Survey." msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_survey__email_template_id -msgid "Email Template" +#: model_terms:ir.ui.view,arch_db:survey.survey_void +msgid "Edit in backend" +msgstr "" + +#. module: survey +#: model_terms:ir.ui.view,arch_db:survey.survey_user_input_search +msgid "Email" msgstr "" #. module: survey @@ -622,13 +918,28 @@ msgid "Email address of the sender." msgstr "" #. module: survey +#: model_terms:ir.ui.view,arch_db:survey.survey_form +msgid "Enable back button" +msgstr "" + +#. module: survey #: model:ir.model.fields,field_description:survey.field_survey_question__constr_error_msg msgid "Error message" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_invite__partner_ids -msgid "Existing contacts" +#: model:ir.model.fields,field_description:survey.field_survey_invite__existing_partner_ids +msgid "Existing Partner" +msgstr "" + +#. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_invite__existing_emails +msgid "Existing emails" +msgstr "" + +#. module: survey +#: model:survey.label,value:survey.vendor_certification_page_1_question_2_choice_2 +msgid "Fanta" msgstr "" #. module: survey @@ -677,39 +988,70 @@ msgid "From" msgstr "" #. module: survey -#: model:survey.page,title:survey.survey_feedback_p1 +#: model:survey.question,question:survey.survey_feedback_p1 +#: model:survey.question,title:survey.survey_feedback_p1 msgid "General information" msgstr "" #. module: survey +#: selection:survey.survey,category:0 +msgid "Generic Survey" +msgstr "" + +#. module: survey #: model:survey.label,value:survey.survey_feedback_p2_q1_sug4 msgid "Good value for money" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.survey_page_search #: model_terms:ir.ui.view,arch_db:survey.survey_question_search #: model_terms:ir.ui.view,arch_db:survey.survey_response_line_search +#: model_terms:ir.ui.view,arch_db:survey.survey_survey_view_search #: model_terms:ir.ui.view,arch_db:survey.survey_user_input_search msgid "Group By" msgstr "" #. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_invite__existing_mode +#: model_terms:ir.ui.view,arch_db:survey.survey_invite_view_form +msgid "Handle existing" +msgstr "" + +#. module: survey +#: model:survey.label,value:survey.vendor_certification_page_1_question_3_choice_2 +msgid "Height" +msgstr "" + +#. module: survey #: model:survey.label,value:survey.survey_feedback_p2_q1_sug1 msgid "High quality" msgstr "" #. module: survey #: model:survey.question,question:survey.survey_feedback_p1_q3 +#: model:survey.question,title:survey.survey_feedback_p1_q3 msgid "How frequently do you buy products online ?" msgstr "" #. module: survey #: model:survey.question,question:survey.survey_feedback_p1_q4 +#: model:survey.question,title:survey.survey_feedback_p1_q4 msgid "How many times did you order products on our website ?" msgstr "" #. module: survey +#: model:survey.question,question:survey.vendor_certification_page_1_question_4 +#: model:survey.question,title:survey.vendor_certification_page_1_question_4 +msgid "How many versions of the Corner Desk do we have?" +msgstr "" + +#. module: survey +#: model:survey.question,question:survey.vendor_certification_page_2_question_1 +#: model:survey.question,title:survey.vendor_certification_page_2_question_1 +msgid "How much do we sell our Cable Management Box?" +msgstr "" + +#. module: survey #: model:survey.label,value:survey.survey_feedback_p2_q2_row5 msgid "I have added products to my wishlist" msgstr "" @@ -717,7 +1059,6 @@ msgstr "" #. module: survey #: model:ir.model.fields,field_description:survey.field_survey_invite__id #: model:ir.model.fields,field_description:survey.field_survey_label__id -#: model:ir.model.fields,field_description:survey.field_survey_page__id #: model:ir.model.fields,field_description:survey.field_survey_question__id #: model:ir.model.fields,field_description:survey.field_survey_stage__id #: model:ir.model.fields,field_description:survey.field_survey_survey__id @@ -752,25 +1093,49 @@ msgid "If checked, users can go back to previous pages." msgstr "" #. module: survey +#: model:ir.model.fields,help:survey.field_survey_invite__survey_users_login_required +#: model:ir.model.fields,help:survey.field_survey_survey__users_login_required +msgid "If checked, users have to login before answering even with a valid token." +msgstr "" + +#. module: survey #: model:ir.model.fields,help:survey.field_survey_stage__closed #: model:ir.model.fields,help:survey.field_survey_survey__is_closed msgid "If closed, people won't be able to answer to surveys in this column." msgstr "" #. module: survey -#: code:addons/survey/models/survey_question.py:83 +#: code:addons/survey/models/survey_question.py:106 +#: model:survey.question,comments_message:survey.survey_feedback_p1 #: model:survey.question,comments_message:survey.survey_feedback_p1_q1 #: model:survey.question,comments_message:survey.survey_feedback_p1_q2 #: model:survey.question,comments_message:survey.survey_feedback_p1_q3 #: model:survey.question,comments_message:survey.survey_feedback_p1_q4 +#: model:survey.question,comments_message:survey.survey_feedback_p2 #: model:survey.question,comments_message:survey.survey_feedback_p2_q1 #: model:survey.question,comments_message:survey.survey_feedback_p2_q2 #: model:survey.question,comments_message:survey.survey_feedback_p2_q3 +#: model:survey.question,comments_message:survey.vendor_certification_page_1 +#: model:survey.question,comments_message:survey.vendor_certification_page_1_question_1 +#: model:survey.question,comments_message:survey.vendor_certification_page_1_question_2 +#: model:survey.question,comments_message:survey.vendor_certification_page_1_question_3 +#: model:survey.question,comments_message:survey.vendor_certification_page_1_question_4 +#: model:survey.question,comments_message:survey.vendor_certification_page_1_question_5 +#: model:survey.question,comments_message:survey.vendor_certification_page_2 +#: model:survey.question,comments_message:survey.vendor_certification_page_2_question_1 +#: model:survey.question,comments_message:survey.vendor_certification_page_2_question_2 +#: model:survey.question,comments_message:survey.vendor_certification_page_2_question_3 #, python-format msgid "If other, please specify:" msgstr "" #. module: survey +#: model:ir.model.fields,help:survey.field_survey_question__questions_selection +#: model:ir.model.fields,help:survey.field_survey_survey__questions_selection +msgid "If randomized is selected, add the number of random questions next to the section." +msgstr "" + +#. module: survey #: model_terms:ir.ui.view,arch_db:survey.sfinished msgid "If you wish, you can" msgstr "" @@ -786,12 +1151,6 @@ msgid "In progress" msgstr "" #. module: survey -#: code:addons/survey/wizard/survey_invite.py:99 -#, python-format -msgid "Incorrect Email Address: %s" -msgstr "" - -#. module: survey #: model:survey.label,value:survey.survey_feedback_p2_q1_sug7 msgid "Ineffective" msgstr "" @@ -802,8 +1161,30 @@ msgid "Input must be an email" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.survey_tree -msgid "Invitations sent" +#: selection:survey.user_input,input_type:0 +msgid "Invitation" +msgstr "" + +#. module: survey +#: model_terms:ir.ui.view,arch_db:survey.survey_form +msgid "Invitations" +msgstr "" + +#. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_survey__invite_count +#: model_terms:ir.ui.view,arch_db:survey.survey_form +#: model_terms:ir.ui.view,arch_db:survey.survey_user_input_search +msgid "Invite" +msgstr "" + +#. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_user_input__invite_token +msgid "Invite token" +msgstr "" + +#. module: survey +#: selection:survey.survey,access_mode:0 +msgid "Invited people only" msgstr "" #. module: survey @@ -812,13 +1193,28 @@ msgid "Is Follower" msgstr "" #. module: survey +#: model_terms:ir.ui.view,arch_db:survey.survey_survey_view_search +msgid "Is a certification?" +msgstr "" + +#. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_label__is_correct +msgid "Is a correct answer" +msgstr "" + +#. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_question__is_page +msgid "Is a page?" +msgstr "" + +#. module: survey #: model:ir.model.fields,field_description:survey.field_survey_survey__is_closed msgid "Is closed" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_survey__designed -msgid "Is designed?" +#: model:ir.model.fields,field_description:survey.field_survey_user_input__is_time_limit_reached +msgid "Is time limit reached?" msgstr "" #. module: survey @@ -838,9 +1234,23 @@ msgid "Labels" msgstr "" #. module: survey +#: model:ir.model.fields,help:survey.field_survey_question__labels_ids_2 +msgid "Labels used for proposed choices: rows of matrix" +msgstr "" + +#. module: survey +#: model:ir.model.fields,help:survey.field_survey_question__labels_ids +msgid "Labels used for proposed choices: simple choice, multiple choice and columns of matrix" +msgstr "" + +#. module: survey +#: model:survey.label,value:survey.vendor_certification_page_2_question_2_choice_4 +msgid "Large Desk" +msgstr "" + +#. module: survey #: model:ir.model.fields,field_description:survey.field_survey_invite____last_update #: model:ir.model.fields,field_description:survey.field_survey_label____last_update -#: model:ir.model.fields,field_description:survey.field_survey_page____last_update #: model:ir.model.fields,field_description:survey.field_survey_question____last_update #: model:ir.model.fields,field_description:survey.field_survey_stage____last_update #: model:ir.model.fields,field_description:survey.field_survey_survey____last_update @@ -852,7 +1262,6 @@ msgstr "" #. module: survey #: model:ir.model.fields,field_description:survey.field_survey_invite__write_uid #: model:ir.model.fields,field_description:survey.field_survey_label__write_uid -#: model:ir.model.fields,field_description:survey.field_survey_page__write_uid #: model:ir.model.fields,field_description:survey.field_survey_question__write_uid #: model:ir.model.fields,field_description:survey.field_survey_stage__write_uid #: model:ir.model.fields,field_description:survey.field_survey_survey__write_uid @@ -864,7 +1273,6 @@ msgstr "" #. module: survey #: model:ir.model.fields,field_description:survey.field_survey_invite__write_date #: model:ir.model.fields,field_description:survey.field_survey_label__write_date -#: model:ir.model.fields,field_description:survey.field_survey_page__write_date #: model:ir.model.fields,field_description:survey.field_survey_question__write_date #: model:ir.model.fields,field_description:survey.field_survey_stage__write_date #: model:ir.model.fields,field_description:survey.field_survey_survey__write_date @@ -875,7 +1283,7 @@ msgstr "" #. module: survey #: model:ir.model.fields,field_description:survey.field_survey_user_input__last_displayed_page_id -msgid "Last displayed page" +msgid "Last displayed question/page" msgstr "" #. module: survey @@ -884,17 +1292,23 @@ msgid "Late Activities" msgstr "" #. module: survey -#: selection:survey.user_input,input_type:0 -msgid "Link" +#: model:ir.model.fields,field_description:survey.field_survey_survey__questions_layout +msgid "Layout" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_invite__multi_email -msgid "List of emails" +#: model:survey.label,value:survey.vendor_certification_page_1_question_3_choice_4 +msgid "Legs" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_survey__auth_required +#: model:ir.model.fields,field_description:survey.field_survey_survey__is_attempts_limited +msgid "Limited number of attempts" +msgstr "" + +#. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_invite__survey_users_login_required +#: model:ir.model.fields,field_description:survey.field_survey_survey__users_login_required #: model_terms:ir.ui.view,arch_db:survey.auth_required msgid "Login required" msgstr "" @@ -922,7 +1336,7 @@ msgstr "" #. module: survey #: selection:survey.user_input,input_type:0 -msgid "Manually" +msgid "Manual" msgstr "" #. module: survey @@ -947,6 +1361,11 @@ msgstr "" #. module: survey #: sql_constraint:survey.question:0 +msgid "Max datetime cannot be smaller than min datetime!" +msgstr "" + +#. module: survey +#: sql_constraint:survey.question:0 msgid "Max length cannot be smaller than min length!" msgstr "" @@ -961,6 +1380,11 @@ msgid "Maximum Date" msgstr "" #. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_question__validation_max_datetime +msgid "Maximum Datetime" +msgstr "" + +#. module: survey #: model:ir.model.fields,field_description:survey.field_survey_question__validation_length_max msgid "Maximum Text Length" msgstr "" @@ -991,6 +1415,11 @@ msgid "Minimum Date" msgstr "" #. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_question__validation_min_datetime +msgid "Minimum Datetime" +msgstr "" + +#. module: survey #: model:ir.model.fields,field_description:survey.field_survey_question__validation_length_min msgid "Minimum Text Length" msgstr "" @@ -1001,6 +1430,12 @@ msgid "Minimum value" msgstr "" #. module: survey +#: code:addons/survey/controllers/main.py:628 +#, python-format +msgid "Missed" +msgstr "" + +#. module: survey #: selection:survey.question,question_type:0 msgid "Multiple Lines Text Box" msgstr "" @@ -1036,6 +1471,11 @@ msgid "My Activities" msgstr "" #. module: survey +#: model:survey.survey,title:survey.vendor_certification +msgid "MyCompany Vendor Certification" +msgstr "" + +#. module: survey #: model:ir.model.fields,field_description:survey.field_survey_stage__name msgid "Name" msgstr "" @@ -1046,6 +1486,11 @@ msgid "New" msgstr "" #. module: survey +#: selection:survey.invite,existing_mode:0 +msgid "New invite" +msgstr "" + +#. module: survey #: model:ir.model.fields,field_description:survey.field_survey_survey__activity_date_deadline msgid "Next Activity Deadline" msgstr "" @@ -1066,8 +1511,19 @@ msgid "Next page" msgstr "" #. module: survey -#: model_terms:ir.actions.act_window,help:survey.action_survey_page_form -msgid "No pages found" +#: model_terms:ir.ui.view,arch_db:survey.page +msgid "Next question" +msgstr "" + +#. module: survey +#: model:survey.label,value:survey.vendor_certification_page_1_question_1_choice_1 +msgid "No" +msgstr "" + +#. module: survey +#: code:addons/survey/models/survey_survey.py:259 +#, python-format +msgid "No attempts left." msgstr "" #. module: survey @@ -1076,6 +1532,11 @@ msgid "No questions found" msgstr "" #. module: survey +#: selection:survey.survey,scoring_type:0 +msgid "No scoring" +msgstr "" + +#. module: survey #: model_terms:ir.actions.act_window,help:survey.action_survey_label_form msgid "No survey labels found" msgstr "" @@ -1086,22 +1547,12 @@ msgid "No user input lines found" msgstr "" #. module: survey -#: model_terms:ir.actions.act_window,help:survey.action_selected_survey_user_input #: model_terms:ir.actions.act_window,help:survey.action_survey_user_input +#: model_terms:ir.actions.act_window,help:survey.action_survey_user_input_notest msgid "Nobody has replied to your surveys yet" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.notopen -msgid "Not open" -msgstr "" - -#. module: survey -#: model_terms:ir.ui.view,arch_db:survey.nopages -msgid "Not ready" -msgstr "" - -#. module: survey #: selection:survey.user_input,state:0 msgid "Not started yet" msgstr "" @@ -1117,14 +1568,19 @@ msgid "Number of Actions" msgstr "" #. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_survey__attempts_limit +msgid "Number of attempts" +msgstr "" + +#. module: survey #: model:ir.model.fields,field_description:survey.field_survey_question__column_nb #: model_terms:ir.ui.view,arch_db:survey.survey_question_form msgid "Number of columns" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_survey__tot_comp_survey -msgid "Number of completed surveys" +#: model:survey.label,value:survey.vendor_certification_page_1_question_3_choice_5 +msgid "Number of drawers" msgstr "" #. module: survey @@ -1143,16 +1599,6 @@ msgid "Number of messages with delivery error" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_survey__tot_sent_survey -msgid "Number of sent surveys" -msgstr "" - -#. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_survey__tot_start_survey -msgid "Number of started surveys" -msgstr "" - -#. module: survey #: model:ir.model.fields,help:survey.field_survey_survey__message_unread_counter msgid "Number of unread messages" msgstr "" @@ -1178,6 +1624,11 @@ msgid "Odoo" msgstr "" #. module: survey +#: model:survey.label,value:survey.vendor_certification_page_2_question_2_choice_5 +msgid "Office Chair Black" +msgstr "" + +#. module: survey #: model:survey.label,value:survey.survey_feedback_p1_q3_sug1 msgid "Once a day" msgstr "" @@ -1203,6 +1654,21 @@ msgid "One choice per row" msgstr "" #. module: survey +#: selection:survey.survey,questions_layout:0 +msgid "One page per question" +msgstr "" + +#. module: survey +#: selection:survey.survey,questions_layout:0 +msgid "One page per section" +msgstr "" + +#. module: survey +#: selection:survey.survey,questions_layout:0 +msgid "One page with all the questions" +msgstr "" + +#. module: survey #: model_terms:ir.ui.view,arch_db:survey.survey_form #: model_terms:ir.ui.view,arch_db:survey.survey_question_form msgid "Options" @@ -1234,29 +1700,13 @@ msgid "Overpriced" msgstr "" #. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_question__page_id #: model:ir.model.fields,field_description:survey.field_survey_user_input_line__page_id -#: model_terms:ir.ui.view,arch_db:survey.page -#: model_terms:ir.ui.view,arch_db:survey.survey_page_search -#: model_terms:ir.ui.view,arch_db:survey.survey_question_search msgid "Page" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_page__title -#: model_terms:ir.ui.view,arch_db:survey.survey_page_form -msgid "Page Title" -msgstr "" - -#. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_page__sequence -msgid "Page number" -msgstr "" - -#. module: survey -#: model:ir.actions.act_window,name:survey.act_survey_pages -#: model:ir.actions.act_window,name:survey.action_survey_page_form #: model:ir.model.fields,field_description:survey.field_survey_survey__page_ids -#: model:ir.ui.menu,name:survey.menu_survey_page_form1 msgid "Pages" msgstr "" @@ -1271,14 +1721,25 @@ msgid "Partially completed" msgstr "" #. module: survey +#: model:mail.template,subject:survey.mail_template_user_input_invite +msgid "Participate to ${object.survey_id.title} survey" +msgstr "" + +#. module: survey #: model:ir.model.fields,field_description:survey.field_survey_user_input__partner_id #: model_terms:ir.ui.view,arch_db:survey.survey_user_input_search msgid "Partner" msgstr "" #. module: survey -#: model:survey.stage,name:survey.stage_permanent -msgid "Permanent" +#: code:addons/survey/controllers/main.py:624 +#, python-format +msgid "Passed" +msgstr "" + +#. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_survey__passing_score +msgid "Passing score (%)" msgstr "" #. module: survey @@ -1287,7 +1748,7 @@ msgid "Planned" msgstr "" #. module: survey -#: code:addons/survey/wizard/survey_invite.py:256 +#: code:addons/survey/wizard/survey_invite.py:260 #, python-format msgid "Please enter at least one valid recipient." msgstr "" @@ -1298,96 +1759,120 @@ msgid "Poor quality" msgstr "" #. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_user_input__question_ids +msgid "Predefined Questions" +msgstr "" + +#. module: survey #: model_terms:ir.ui.view,arch_db:survey.page msgid "Previous page" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.survey_form -msgid "Print Survey" +#: model_terms:ir.ui.view,arch_db:survey.page +msgid "Previous question" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.survey_user_input_form -msgid "Print These Answers" +#: model:survey.question,question:survey.vendor_certification_page_2 +#: model:survey.question,title:survey.vendor_certification_page_2 +msgid "Prices" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_survey__print_url -msgid "Print link" +#: model_terms:ir.ui.view,arch_db:survey.survey_form +#: model_terms:ir.ui.view,arch_db:survey.survey_user_input_form +msgid "Print" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_invite__public_url_html -msgid "Public HTML web link" +#: model:survey.question,question:survey.vendor_certification_page_1 +#: model:survey.question,title:survey.vendor_certification_page_1 +msgid "Products" msgstr "" #. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_invite__survey_url #: model:ir.model.fields,field_description:survey.field_survey_survey__public_url msgid "Public link" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_survey__public_url_html -msgid "Public link (html version)" +#: model:ir.model.fields,field_description:survey.field_survey_label__question_id +#: model:ir.model.fields,field_description:survey.field_survey_question__question +#: model:ir.model.fields,field_description:survey.field_survey_user_input_line__question_id +#: model_terms:ir.ui.view,arch_db:survey.survey_label_search +#: model_terms:ir.ui.view,arch_db:survey.survey_question_search +msgid "Question" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_user_input__print_url -msgid "Public link to the empty survey" +#: model:ir.model.fields,field_description:survey.field_survey_label__question_id_2 +msgid "Question 2" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_user_input__result_url -msgid "Public link to the survey results" +#: model_terms:ir.ui.view,arch_db:survey.survey_question_form +msgid "Question name" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_invite__public_url -msgid "Public url" +#: model:ir.actions.act_window,name:survey.action_survey_question_form +#: model:ir.model.fields,field_description:survey.field_survey_question__question_ids +#: model:ir.model.fields,field_description:survey.field_survey_survey__question_ids +#: model:ir.ui.menu,name:survey.menu_survey_question_form1 +#: model_terms:ir.ui.view,arch_db:survey.survey_form +msgid "Questions" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_label__question_id -#: model:ir.model.fields,field_description:survey.field_survey_user_input_line__question_id -#: model_terms:ir.ui.view,arch_db:survey.survey_label_search -#: model_terms:ir.ui.view,arch_db:survey.survey_question_search -msgid "Question" +#: model:ir.model.fields,field_description:survey.field_survey_user_input__quizz_passed +msgid "Quizz Passed" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_label__question_id_2 -msgid "Question 2" +#: model_terms:ir.ui.view,arch_db:survey.survey_user_input_search +msgid "Quizz passed" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_question__question -#: model_terms:ir.ui.view,arch_db:survey.survey_question_form -msgid "Question Name" +#: selection:survey.question,display_mode:0 +msgid "Radio Buttons" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.survey_question_form -msgid "Question name" +#: model:ir.model.fields,field_description:survey.field_survey_question__random_questions_count +msgid "Random questions count" msgstr "" #. module: survey -#: model:ir.actions.act_window,name:survey.act_survey_page_question -#: model:ir.actions.act_window,name:survey.act_survey_question -#: model:ir.actions.act_window,name:survey.action_survey_question_form -#: model:ir.model.fields,field_description:survey.field_survey_page__question_ids -#: model:ir.ui.menu,name:survey.menu_survey_question_form1 -msgid "Questions" +#: selection:survey.survey,questions_selection:0 +msgid "Randomized per section" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_survey__quizz_mode -msgid "Quizz Mode" +#: model:ir.model.fields,field_description:survey.field_survey_invite__partner_ids +msgid "Recipients" msgstr "" #. module: survey -#: selection:survey.question,display_mode:0 -msgid "Radio Buttons" +#: selection:survey.survey,category:0 +msgid "Recruitment" +msgstr "" + +#. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_invite__existing_text +msgid "Resend Comment" +msgstr "" + +#. module: survey +#: model_terms:ir.ui.view,arch_db:survey.survey_user_input_form +msgid "Resend Invitation" +msgstr "" + +#. module: survey +#: selection:survey.invite,existing_mode:0 +msgid "Resend invite" msgstr "" #. module: survey @@ -1396,8 +1881,13 @@ msgid "Responsible User" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_survey__result_url -msgid "Results link" +#: model_terms:ir.ui.view,arch_db:survey.result +msgid "Results Overview" +msgstr "" + +#. module: survey +#: model_terms:ir.ui.view,arch_db:survey.sfinished +msgid "Retry" msgstr "" #. module: survey @@ -1431,38 +1921,49 @@ msgid "Rows of the Matrix" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.survey_invite_view_form -msgid "Save as a new template" +#: model:ir.model.fields,field_description:survey.field_survey_user_input__quizz_score +msgid "Score (%)" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.survey_invite_view_form -msgid "Save as new template" +#: model:ir.model.fields,field_description:survey.field_survey_label__answer_score +msgid "Score for this choice" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_user_input__quizz_score -msgid "Score for the quiz" +#: model:ir.model.fields,field_description:survey.field_survey_user_input_line__answer_score +msgid "Score given for this choice" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_label__quizz_mark -msgid "Score for this choice" +#: model:ir.model.fields,field_description:survey.field_survey_survey__scoring_type +#: model:ir.model.fields,field_description:survey.field_survey_user_input__scoring_type +msgid "Scoring" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_user_input_line__quizz_mark -msgid "Score given for this choice" +#: model_terms:ir.ui.view,arch_db:survey.survey_form +msgid "Scoring Informations" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.survey_label_search -msgid "Search Label" +#: model:ir.model.fields,field_description:survey.field_survey_question__scoring_type +msgid "Scoring Type" +msgstr "" + +#. module: survey +#: selection:survey.survey,scoring_type:0 +msgid "Scoring with answers at the end" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.survey_page_search -msgid "Search Page" +#: selection:survey.survey,scoring_type:0 +msgid "Scoring without answers at the end" +msgstr "" + +#. module: survey +#: model_terms:ir.ui.view,arch_db:survey.survey_label_search +msgid "Search Label" msgstr "" #. module: survey @@ -1481,59 +1982,63 @@ msgid "Search User input lines" msgstr "" #. module: survey -#: selection:survey.question,display_mode:0 -msgid "Selection Box" +#: model_terms:ir.ui.view,arch_db:survey.survey_question_form +msgid "Section name" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.survey_invite_view_form -msgid "Send" +#: model:ir.model.fields,field_description:survey.field_survey_survey__question_and_page_ids +msgid "Sections and Questions" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.survey_user_input_form -msgid "Send Invitation Again" +#: model:survey.question,question:survey.vendor_certification_page_1_question_3 +#: model:survey.question,title:survey.vendor_certification_page_1_question_3 +msgid "Select all the available customizations for our Customizable Desk" msgstr "" #. module: survey -#: selection:survey.invite,public:0 -msgid "Send by email the public web link to your audience." +#: model:survey.question,question:survey.vendor_certification_page_1_question_2 +#: model:survey.question,title:survey.vendor_certification_page_1_question_2 +msgid "Select all the existing products" msgstr "" #. module: survey -#: selection:survey.invite,public:0 -msgid "Send private invitation to your audience (only one response per recipient and per invitation)." +#: model:survey.question,question:survey.vendor_certification_page_2_question_2 +#: model:survey.question,title:survey.vendor_certification_page_2_question_2 +msgid "Select all the the products that sell for 100$ or more" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_question__sequence -#: model:ir.model.fields,field_description:survey.field_survey_stage__sequence -msgid "Sequence" +#: model:ir.model.fields,field_description:survey.field_survey_question__questions_selection +#: model:ir.model.fields,field_description:survey.field_survey_survey__questions_selection +msgid "Selection" msgstr "" #. module: survey -#: sql_constraint:survey.stage:0 -msgid "Sequence number MUST be a natural" +#: selection:survey.question,display_mode:0 +msgid "Selection Box" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.survey_kanban -msgid "Share &amp; Invite" +#: model_terms:ir.ui.view,arch_db:survey.survey_invite_view_form +msgid "Send" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.survey_form -msgid "Share and invite by email" +#: model:ir.model.fields,field_description:survey.field_survey_question__sequence +#: model:ir.model.fields,field_description:survey.field_survey_stage__sequence +msgid "Sequence" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_invite__public -msgid "Share options" +#: sql_constraint:survey.stage:0 +msgid "Sequence number MUST be a natural" msgstr "" #. module: survey -#: selection:survey.invite,public:0 -msgid "Share the public web link to your audience." +#: model_terms:ir.ui.view,arch_db:survey.survey_kanban +msgid "Share &amp; Invite" msgstr "" #. module: survey @@ -1558,6 +2063,12 @@ msgid "Skipped" msgstr "" #. module: survey +#: code:addons/survey/wizard/survey_invite.py:112 +#, python-format +msgid "Some emails you just entered are incorrect: %s" +msgstr "" + +#. module: survey #: model_terms:ir.ui.view,arch_db:survey.page msgid "Something went wrong while contacting survey server. <strong class=\"text-danger\">Your answers have probably not been recorded.</strong> Try refreshing." msgstr "" @@ -1568,6 +2079,11 @@ msgid "Sorry, No one answered this question." msgstr "" #. module: survey +#: model_terms:ir.ui.view,arch_db:survey.result +msgid "Sorry, no one answered this survey yet." +msgstr "" + +#. module: survey #: model:ir.model.fields,field_description:survey.field_survey_survey__stage_id #: model_terms:ir.ui.view,arch_db:survey.survey_stage_form msgid "Stage" @@ -1575,11 +2091,21 @@ msgstr "" #. module: survey #: model_terms:ir.ui.view,arch_db:survey.survey_init +msgid "Start Certification" +msgstr "" + +#. module: survey +#: model_terms:ir.ui.view,arch_db:survey.survey_init msgid "Start Survey" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.survey_tree +#: model:ir.model.fields,field_description:survey.field_survey_user_input__start_datetime +msgid "Start date and time" +msgstr "" + +#. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_survey__answer_count msgid "Started" msgstr "" @@ -1612,6 +2138,16 @@ msgid "Submit survey" msgstr "" #. module: survey +#: model_terms:ir.ui.view,arch_db:survey.result +msgid "Success rate:" +msgstr "" + +#. module: survey +#: model_terms:ir.ui.view,arch_db:survey.certification_report_view +msgid "Successfully achieved" +msgstr "" + +#. module: survey #: model:ir.model.fields,field_description:survey.field_survey_user_input_line__value_suggested msgid "Suggested answer" msgstr "" @@ -1629,12 +2165,10 @@ msgstr "" #. module: survey #: model:ir.model,name:survey.model_survey_survey #: model:ir.model.fields,field_description:survey.field_survey_invite__survey_id -#: model:ir.model.fields,field_description:survey.field_survey_page__survey_id #: model:ir.model.fields,field_description:survey.field_survey_question__survey_id #: model:ir.model.fields,field_description:survey.field_survey_user_input__survey_id #: model:ir.model.fields,field_description:survey.field_survey_user_input_line__survey_id #: model_terms:ir.ui.view,arch_db:survey.survey_form -#: model_terms:ir.ui.view,arch_db:survey.survey_page_search #: model_terms:ir.ui.view,arch_db:survey.survey_question_search #: model_terms:ir.ui.view,arch_db:survey.survey_response_line_search #: model_terms:ir.ui.view,arch_db:survey.survey_survey_view_search @@ -1660,13 +2194,6 @@ msgid "Survey Label" msgstr "" #. module: survey -#: model:ir.model,name:survey.model_survey_page -#: model_terms:ir.ui.view,arch_db:survey.survey_page_form -#: model_terms:ir.ui.view,arch_db:survey.survey_page_tree -msgid "Survey Page" -msgstr "" - -#. module: survey #: model:ir.model,name:survey.model_survey_question #: model_terms:ir.ui.view,arch_db:survey.survey_question_form #: model_terms:ir.ui.view,arch_db:survey.survey_question_tree @@ -1699,11 +2226,6 @@ msgid "Survey User Input lines" msgstr "" #. module: survey -#: model:ir.actions.act_window,name:survey.action_selected_survey_user_input -msgid "Survey User input" -msgstr "" - -#. module: survey #: model_terms:ir.ui.view,arch_db:survey.survey_user_input_form #: model_terms:ir.ui.view,arch_db:survey.survey_user_input_tree msgid "Survey User inputs" @@ -1715,11 +2237,6 @@ msgid "Survey filter" msgstr "" #. module: survey -#: model:ir.model.fields,field_description:survey.field_survey_question__page_id -msgid "Survey page" -msgstr "" - -#. module: survey #: model:ir.actions.server,name:survey.survey_action_server_clean_test_answers msgid "Survey: Clean test answers" msgstr "" @@ -1732,6 +2249,7 @@ msgid "Surveys" msgstr "" #. module: survey +#: model_terms:ir.ui.view,arch_db:survey.survey_form #: model_terms:ir.ui.view,arch_db:survey.survey_kanban msgid "Test" msgstr "" @@ -1747,8 +2265,18 @@ msgid "Test Entry" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.survey_form -msgid "Test Survey" +#: model_terms:survey.question,description:survey.vendor_certification_page_2 +msgid "Test your knowledge of our prices." +msgstr "" + +#. module: survey +#: model_terms:survey.question,description:survey.vendor_certification_page_1 +msgid "Test your knowledge of your products!" +msgstr "" + +#. module: survey +#: model_terms:survey.survey,description:survey.vendor_certification +msgid "Test your vendor skills!." msgstr "" #. module: survey @@ -1772,22 +2300,39 @@ msgid "Thanks Message" msgstr "" #. module: survey -#: code:addons/survey/models/survey_user.py:152 +#: code:addons/survey/models/survey_user.py:198 #, python-format msgid "The answer must be in the right type" msgstr "" #. module: survey -#: code:addons/survey/models/survey_question.py:97 +#: code:addons/survey/models/survey_question.py:119 +#: model:survey.question,validation_error_msg:survey.survey_feedback_p1 #: model:survey.question,validation_error_msg:survey.survey_feedback_p1_q1 #: model:survey.question,validation_error_msg:survey.survey_feedback_p1_q2 #: model:survey.question,validation_error_msg:survey.survey_feedback_p1_q3 #: model:survey.question,validation_error_msg:survey.survey_feedback_p1_q4 +#: model:survey.question,validation_error_msg:survey.survey_feedback_p2 #: model:survey.question,validation_error_msg:survey.survey_feedback_p2_q1 #: model:survey.question,validation_error_msg:survey.survey_feedback_p2_q2 #: model:survey.question,validation_error_msg:survey.survey_feedback_p2_q3 +#: model:survey.question,validation_error_msg:survey.vendor_certification_page_1 +#: model:survey.question,validation_error_msg:survey.vendor_certification_page_1_question_1 +#: model:survey.question,validation_error_msg:survey.vendor_certification_page_1_question_2 +#: model:survey.question,validation_error_msg:survey.vendor_certification_page_1_question_3 +#: model:survey.question,validation_error_msg:survey.vendor_certification_page_1_question_4 +#: model:survey.question,validation_error_msg:survey.vendor_certification_page_1_question_5 +#: model:survey.question,validation_error_msg:survey.vendor_certification_page_2 +#: model:survey.question,validation_error_msg:survey.vendor_certification_page_2_question_1 +#: model:survey.question,validation_error_msg:survey.vendor_certification_page_2_question_2 +#: model:survey.question,validation_error_msg:survey.vendor_certification_page_2_question_3 #, python-format -msgid "The answer you entered has an invalid format." +msgid "The answer you entered is not valid." +msgstr "" + +#. module: survey +#: sql_constraint:survey.survey:0 +msgid "The attempts limit needs to be a positive number if the survey has a limited number of attempts." msgstr "" #. module: survey @@ -1796,9 +2341,21 @@ msgid "The checkout process is clear and secure" msgstr "" #. module: survey -#: code:addons/survey/wizard/survey_invite.py:233 +#: code:addons/survey/wizard/survey_invite.py:85 #, python-format -msgid "The content of the text don't contain '__URL__'. __URL__ is automaticaly converted into the special url of the survey." +msgid "The following customers have already received an invite" +msgstr "" + +#. module: survey +#: code:addons/survey/wizard/survey_invite.py:91 +#, python-format +msgid "The following emails have already received an invite" +msgstr "" + +#. module: survey +#: code:addons/survey/wizard/survey_invite.py:136 +#, python-format +msgid "The following recipients have no user account: %s. You should create user accounts for them or allow external signup in configuration." msgstr "" #. module: survey @@ -1812,33 +2369,59 @@ msgid "The page you were looking for could not be authorized." msgstr "" #. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_survey__is_time_limited +msgid "The survey is limited in time" +msgstr "" + +#. module: survey +#: sql_constraint:survey.survey:0 +msgid "The time limit needs to be a positive number if the survey is time limited." +msgstr "" + +#. module: survey #: model:survey.label,value:survey.survey_feedback_p2_q2_row3 msgid "The tool to compare the products is useful to make a choice" msgstr "" #. module: survey -#: code:addons/survey/models/survey_question.py:156 +#: code:addons/survey/controllers/main.py:531 +#, python-format +msgid "The user has not succeeded the certification" +msgstr "" + +#. module: survey +#: model:ir.model.fields,help:survey.field_survey_question__column_nb +msgid "These options refer to col-xx-[12|6|4|3|2] classes in Bootstrap for dropdown-based simple and multiple choice questions." +msgstr "" + +#. module: survey +#: code:addons/survey/models/survey_question.py:181 #: code:addons/survey/tests/test_survey.py:99 #, python-format msgid "This answer must be an email address" msgstr "" #. module: survey -#: code:addons/survey/models/survey_question.py:200 +#: model_terms:ir.ui.view,arch_db:survey.back +msgid "This is a test survey." +msgstr "" + +#. module: survey +#: code:addons/survey/models/survey_question.py:229 #: code:addons/survey/tests/test_survey.py:47 #, python-format msgid "This is not a date" msgstr "" #. module: survey -#: code:addons/survey/models/survey_question.py:177 +#: code:addons/survey/models/survey_question.py:202 #: code:addons/survey/tests/test_survey.py:74 #, python-format msgid "This is not a number" msgstr "" #. module: survey -#: model:ir.model.fields,help:survey.field_survey_invite__multi_email +#: model:ir.model.fields,help:survey.field_survey_invite__emails msgid "This list of emails of recipients will not be converted in contacts. Emails must be separated by commas, semicolons or newline." msgstr "" @@ -1848,31 +2431,43 @@ msgid "This message will be displayed when survey is completed" msgstr "" #. module: survey -#: code:addons/survey/models/survey_user.py:139 +#: code:addons/survey/models/survey_user.py:185 #, python-format msgid "This question cannot be unanswered or skipped." msgstr "" #. module: survey -#: code:addons/survey/models/survey_question.py:101 +#: code:addons/survey/models/survey_question.py:122 +#: model:survey.question,constr_error_msg:survey.survey_feedback_p1 #: model:survey.question,constr_error_msg:survey.survey_feedback_p1_q1 #: model:survey.question,constr_error_msg:survey.survey_feedback_p1_q2 #: model:survey.question,constr_error_msg:survey.survey_feedback_p1_q3 #: model:survey.question,constr_error_msg:survey.survey_feedback_p1_q4 +#: model:survey.question,constr_error_msg:survey.survey_feedback_p2 #: model:survey.question,constr_error_msg:survey.survey_feedback_p2_q1 #: model:survey.question,constr_error_msg:survey.survey_feedback_p2_q2 #: model:survey.question,constr_error_msg:survey.survey_feedback_p2_q3 +#: model:survey.question,constr_error_msg:survey.vendor_certification_page_1 +#: model:survey.question,constr_error_msg:survey.vendor_certification_page_1_question_1 +#: model:survey.question,constr_error_msg:survey.vendor_certification_page_1_question_2 +#: model:survey.question,constr_error_msg:survey.vendor_certification_page_1_question_3 +#: model:survey.question,constr_error_msg:survey.vendor_certification_page_1_question_4 +#: model:survey.question,constr_error_msg:survey.vendor_certification_page_1_question_5 +#: model:survey.question,constr_error_msg:survey.vendor_certification_page_2 +#: model:survey.question,constr_error_msg:survey.vendor_certification_page_2_question_1 +#: model:survey.question,constr_error_msg:survey.vendor_certification_page_2_question_2 +#: model:survey.question,constr_error_msg:survey.vendor_certification_page_2_question_3 #, python-format msgid "This question requires an answer." msgstr "" #. module: survey -#: model_terms:survey.page,description:survey.survey_feedback_p1 +#: model_terms:survey.question,description:survey.survey_feedback_p1 msgid "This section is about general informations about you. Answering them helps qualifying your answers." msgstr "" #. module: survey -#: model_terms:survey.page,description:survey.survey_feedback_p2 +#: model_terms:survey.question,description:survey.survey_feedback_p2 msgid "This section is about our eCommerce experience itself." msgstr "" @@ -1883,13 +2478,19 @@ msgid "This survey allows you to give a feedback about your experience with our msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.nopages -msgid "This survey has no pages by now!" +#: code:addons/survey/wizard/survey_invite.py:100 +#, python-format +msgid "This survey does not allow external people to participate. You should create user accounts or update survey access mode accordingly." +msgstr "" + +#. module: survey +#: model_terms:ir.ui.view,arch_db:survey.survey_void +msgid "This survey has no question defined currently.<br/>" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.notopen -msgid "This survey is not open. Thank you for your interest!" +#: model_terms:ir.ui.view,arch_db:survey.survey_expired +msgid "This survey is now closed. Thank you for your interest !" msgstr "" #. module: survey @@ -1898,6 +2499,17 @@ msgid "This survey is open only to registered people. Please" msgstr "" #. module: survey +#: model_terms:ir.ui.view,arch_db:survey.survey_form +msgid "Time limit" +msgstr "" + +#. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_survey__time_limit +msgid "Time limit (minutes)" +msgstr "" + +#. module: survey +#: model:ir.model.fields,field_description:survey.field_survey_question__title #: model:ir.model.fields,field_description:survey.field_survey_survey__title #: model_terms:ir.ui.view,arch_db:survey.survey_survey_view_search msgid "Title" @@ -1944,12 +2556,22 @@ msgid "Types of answers" msgstr "" #. module: survey -#: code:addons/survey/wizard/survey_invite.py:33 +#: code:addons/survey/wizard/survey_invite.py:25 #, python-format msgid "Unable to post message, please configure the sender's email address." msgstr "" #. module: survey +#: model:survey.label,value:survey.vendor_certification_page_2_question_3_choice_2 +msgid "Underpriced" +msgstr "" + +#. module: survey +#: model_terms:ir.ui.view,arch_db:survey.sfinished +msgid "Unfortunately, you have failed the test." +msgstr "" + +#. module: survey #: model:survey.label,value:survey.survey_feedback_p2_q1_sug3 msgid "Unique" msgstr "" @@ -1971,13 +2593,17 @@ msgstr "" #. module: survey #: model:ir.model.fields,field_description:survey.field_survey_invite__template_id -#: model_terms:ir.ui.view,arch_db:survey.survey_invite_view_form msgid "Use template" msgstr "" #. module: survey #: model:ir.model.fields,help:survey.field_survey_question__description -msgid "Use this field to add additional explanations about your question" +msgid "Use this field to add additional explanations about your question" +msgstr "" + +#. module: survey +#: model:ir.model.fields,help:survey.field_survey_question__random_questions_count +msgid "Used on randomized sections to take X random questions from all the questions of that section." msgstr "" #. module: survey @@ -2014,11 +2640,6 @@ msgid "User Responses" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.survey_form -msgid "User can come back in the previous page" -msgstr "" - -#. module: survey #: model_terms:ir.ui.view,arch_db:survey.survey_user_input_line_form msgid "User input line details" msgstr "" @@ -2034,8 +2655,8 @@ msgid "Users can go back" msgstr "" #. module: survey -#: model:ir.model.fields,help:survey.field_survey_survey__auth_required -msgid "Users with a public link will be requested to login before taking part to the survey" +#: model:ir.model.fields,field_description:survey.field_survey_survey__users_can_signup +msgid "Users can signup" msgstr "" #. module: survey @@ -2049,8 +2670,8 @@ msgid "Validation Error message" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.survey_user_input_form -msgid "View Results" +#: model:survey.label,value:survey.vendor_certification_page_2_question_3_choice_1 +msgid "Very underpriced" msgstr "" #. module: survey @@ -2074,49 +2695,75 @@ msgid "Website communication history" msgstr "" #. module: survey +#: model:survey.question,question:survey.vendor_certification_page_2_question_3 +#: model:survey.question,title:survey.vendor_certification_page_2_question_3 +msgid "What do you think about our prices (not rated)?" +msgstr "" + +#. module: survey #: model:survey.question,question:survey.survey_feedback_p2_q2 +#: model:survey.question,title:survey.survey_feedback_p2_q2 msgid "What do your think about our new eCommerce ?" msgstr "" #. module: survey #: model:survey.question,question:survey.survey_feedback_p1_q2 +#: model:survey.question,title:survey.survey_feedback_p1_q2 msgid "When is your date of birth ?" msgstr "" #. module: survey #: model:survey.question,question:survey.survey_feedback_p1_q1 +#: model:survey.question,title:survey.survey_feedback_p1_q1 msgid "Where do you live ?" msgstr "" #. module: survey #: model:survey.question,question:survey.survey_feedback_p2_q1 +#: model:survey.question,title:survey.survey_feedback_p2_q1 msgid "Which of the following words would you use to describe our products ?" msgstr "" #. module: survey +#: model:survey.label,value:survey.vendor_certification_page_1_question_3_choice_3 +msgid "Width" +msgstr "" + +#. module: survey #: model_terms:ir.ui.view,arch_db:survey.survey_question_form msgid "YYYY-MM-DD\n" " <i class=\"fa fa-calendar fa-2x\" role=\"img\" aria-label=\"Calendar\" title=\"Calendar\"/>" msgstr "" #. module: survey +#: model_terms:ir.ui.view,arch_db:survey.survey_question_form +msgid "YYYY-MM-DD hh:mm:ss\n" +" <i class=\"fa fa-calendar fa-2x\" role=\"img\" aria-label=\"Calendar\" title=\"Calendar\"/>" +msgstr "" + +#. module: survey +#: model:survey.label,value:survey.vendor_certification_page_1_question_1_choice_2 +msgid "Yes" +msgstr "" + +#. module: survey #: model_terms:ir.actions.act_window,help:survey.action_survey_form msgid "You can create surveys for different purposes: customer opinion, services feedback, recruitment interviews, employee's periodical evaluations, marketing campaigns, etc." msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.survey_invite_view_form -msgid "You can share your survey web public link and/or send private invitations to your audience. People can answer once per invitation, and whenever they want with the public web link (in this case, the \"Login Required\" setting must be disabled)." +#: sql_constraint:survey.survey:0 +msgid "You can only create certifications for surveys that have a scoring mechanism." msgstr "" #. module: survey -#: code:addons/survey/models/survey_survey.py:284 +#: code:addons/survey/models/survey_survey.py:455 #, python-format msgid "You cannot send an invitation for a survey that has no questions." msgstr "" #. module: survey -#: code:addons/survey/models/survey_survey.py:287 +#: code:addons/survey/models/survey_survey.py:458 #, python-format msgid "You cannot send invitations for closed surveys." msgstr "" @@ -2142,18 +2789,18 @@ msgid "log in" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.page -msgid "of" +#: model_terms:ir.ui.view,arch_db:survey.sfinished +msgid "review your answers" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.sfinished -msgid "points." +#: model_terms:ir.ui.view,arch_db:survey.survey_expired +msgid "survey expired" msgstr "" #. module: survey -#: model_terms:ir.ui.view,arch_db:survey.sfinished -msgid "review your answers" +#: model_terms:ir.ui.view,arch_db:survey.survey_void +msgid "survey is void" msgstr "" #. module: survey diff --git a/addons/survey/models/survey_survey.py b/addons/survey/models/survey_survey.py index deb6978d0f7..335e175d439 100644 --- a/addons/survey/models/survey_survey.py +++ b/addons/survey/models/survey_survey.py @@ -398,7 +398,7 @@ class Survey(models.Model): result_summary = {'answers': answers, 'rows': rows, 'result': res, 'comments': comments} # Calculate and return statistics for free_text, textbox, date - if question.question_type in ['free_text', 'textbox', 'date']: + if question.question_type in ['free_text', 'textbox', 'date', 'datetime']: result_summary = [] for input_line in input_lines: if not(current_filters) or input_line.user_input_id.id in current_filters: diff --git a/addons/survey/static/src/js/survey.js b/addons/survey/static/src/js/survey.js index b055c8beb89..a2b5ab66a6f 100644 --- a/addons/survey/static/src/js/survey.js +++ b/addons/survey/static/src/js/survey.js @@ -135,19 +135,11 @@ if(!the_form.length) { var date_fields = $form.find('div.date > input.form-control'); for (var i=0; i < date_fields.length; i++) { var el = date_fields[i]; - var moment_date = el.value !== '' ? field_utils.parse.date(el.value) : ''; - if (moment_date) { - moment_date.toJSON = function () { - if ($(el).closest('.input-group.date').data('questiontype') === 'datetime') { - return this.clone().utc().format('YYYY-MM-DD hh:mm:ss'); - } - else { - return this.clone().format('YYYY-MM-DD'); - } - }; - } + var questiontype = $(el).closest('.input-group.date').data('questiontype'); + var moment_date = questiontype === 'datetime' ? field_utils.parse.datetime(el.value, null, {timezone: true}) : field_utils.parse.date(el.value); + var field_obj = _.findWhere(formData, {'name': el.name}); - field_obj.value = JSON.parse(JSON.stringify(moment_date)); + field_obj.value = moment_date ? moment_date.toJSON() : ''; } $('.js_errzone').html("").hide(); }, diff --git a/addons/survey/views/survey_templates.xml b/addons/survey/views/survey_templates.xml index cbef0daac68..d702466cd75 100644 --- a/addons/survey/views/survey_templates.xml +++ b/addons/survey/views/survey_templates.xml @@ -29,6 +29,15 @@ <div>You scored <t t-esc="answer.quizz_score" />%</div> <t t-if="answer.quizz_passed"> <div>Congratulations, you have passed the test!</div> + + <div t-if="survey.certificate" class="mt16 mb16"> + <a role="button" + class="btn btn-primary btn-lg" + t-att-href="'/survey/%s/get_certification' % survey.id"> + <i class="fa fa-fw fa-trophy" role="img" aria-label="Download certification" title="Download certification"/> + Download certification + </a> + </div> </t> <t t-else=""> <div>Unfortunately, you have failed the test.</div> @@ -586,7 +595,7 @@ <t t-if="question.description"> <div class="text-muted oe_no_empty" t-field="question.description" /> </t> - <t t-if="question.question_type in ['textbox', 'free_text', 'date']"> + <t t-if="question.question_type in ['textbox', 'free_text', 'date', 'datetime']"> <t t-call="survey.result_text"></t> </t> <t t-if="question.question_type in ['simple_choice', 'multiple_choice']"> @@ -637,6 +646,11 @@ <a t-att-href="'/survey/print/%s?answer_token=%s' % (user_input.survey_id.access_token, user_input.user_input_id.token)" t-field="user_input.value_date"></a><br/> </td> </t> + <t t-if="question.question_type == 'datetime'"> + <td> + <a t-att-href="'/survey/print/%s?answer_token=%s' % (user_input.survey_id.access_token, user_input.user_input_id.token)" t-field="user_input.value_datetime"></a><br/> + </td> + </t> </tr> </tbody> </table> diff --git a/addons/survey/views/survey_user_views.xml b/addons/survey/views/survey_user_views.xml index 6970442d8b9..8a39f8ced84 100644 --- a/addons/survey/views/survey_user_views.xml +++ b/addons/survey/views/survey_user_views.xml @@ -170,6 +170,7 @@ <field name="value_text" colspan='2' attrs="{'invisible': [('answer_type','!=','text')]}"/> <field name="value_number" colspan='2' attrs="{'invisible': [('answer_type','!=','number')]}"/> <field name="value_date" colspan='2' attrs="{'invisible': [('answer_type','!=','date')]}"/> + <field name="value_datetime" colspan='2' attrs="{'invisible': [('answer_type','!=','datetime')]}"/> <field name="value_free_text" colspan='2' attrs="{'invisible': [('answer_type','!=','free_text')]}"/> <field name="value_suggested_row" colspan='2' /> <field name="value_suggested" colspan='2' attrs="{'invisible': [('answer_type','!=','suggestion')]}"/> diff --git a/addons/test_mail/tests/test_discuss.py b/addons/test_mail/tests/test_discuss.py index 3f27a20f4b0..f182e7f6a55 100644 --- a/addons/test_mail/tests/test_discuss.py +++ b/addons/test_mail/tests/test_discuss.py @@ -96,6 +96,20 @@ class TestNotifications(BaseFunctionalTest, MockEmails): body='Test', message_type='comment', subtype='mail.mt_comment', partner_ids=[self.user_employee.partner_id.id]) + def test_inactive_follower(self): + # In some case odoobot is follower of a record. + # Even if it shouldn't be the case, we want to be sure that odoobot is not notified + self.test_record._message_subscribe(self.user_employee.partner_id.ids) + with self.assertNotifications(partner_employee=(1, 'inbox', 'unread')): + self.test_record.message_post( + body='Test', message_type='comment', subtype='mail.mt_comment') + self.user_employee.active = False + # at this point, partner is still active and would receive an email notification + self.user_employee.partner_id._write({'active': False}) + with self.assertNotifications(partner_employee=(0, '', '')): + self.test_record.message_post( + body='Test', message_type='comment', subtype='mail.mt_comment') + def test_set_message_done_user(self): with self.assertNotifications(partner_employee=(0, '', '')): message = self.test_record.message_post( diff --git a/addons/test_mail/tests/test_mail_gateway.py b/addons/test_mail/tests/test_mail_gateway.py index 9a8d9e6411f..1a796b07501 100644 --- a/addons/test_mail/tests/test_mail_gateway.py +++ b/addons/test_mail/tests/test_mail_gateway.py @@ -486,14 +486,18 @@ class TestMailgateway(BaseFunctionalTest, MockEmails): @mute_logger('odoo.addons.mail.models.mail_thread', 'odoo.models', 'odoo.addons.mail.models.mail_mail') def test_private_discussion(self): """ Testing private discussion between partners. """ - msg1_pids = [self.env.user.partner_id.id, self.partner_1.id] + self.partner_2 = self.env['res.partner'].with_context(BaseFunctionalTest._test_context).create({ + 'name': 'Admin', + 'email': 'admin@agrolait.com', + }) + msg1_pids = [self.partner_1.id, self.partner_2.id] # Do: Raoul writes to Bert and Administrator, with a model specific by parameter that should not be taken into account msg1 = self.env['mail.thread'].sudo(self.user_employee).message_post(partner_ids=msg1_pids, subtype='mail.mt_comment', model='mail.test') # Test: message recipients msg = self.env['mail.message'].browse(msg1.id) - self.assertEqual(msg.partner_ids, self.env.user.partner_id | self.partner_1, + self.assertEqual(msg.partner_ids, self.partner_2 | self.partner_1, 'message_post: private discussion: incorrect recipients') self.assertEqual(msg.model, False, 'message_post: private discussion: parameter model not correctly ignored when having no res_id') @@ -510,7 +514,7 @@ class TestMailgateway(BaseFunctionalTest, MockEmails): # Test: message recipients self.assertEqual(msg2.author_id, self.partner_1, 'message_post: private discussion: wrong author through mailgateway based on email') - self.assertEqual(msg2.partner_ids, self.user_employee.partner_id | self.env.user.partner_id, + self.assertEqual(msg2.partner_ids, self.user_employee.partner_id | self.partner_2, 'message_post: private discussion: incorrect recipients when replying') # Do: Bert replies through chatter (is a customer) @@ -518,9 +522,9 @@ class TestMailgateway(BaseFunctionalTest, MockEmails): # Test: message recipients msg = self.env['mail.message'].browse(msg3.id) - self.assertEqual(msg.partner_ids, self.user_employee.partner_id | self.env.user.partner_id, + self.assertEqual(msg.partner_ids, self.user_employee.partner_id | self.partner_2, 'message_post: private discussion: incorrect recipients when replying') - self.assertEqual(msg.needaction_partner_ids, self.user_employee.partner_id | self.env.user.partner_id, + self.assertEqual(msg.needaction_partner_ids, self.user_employee.partner_id | self.partner_2, 'message_post: private discussion: incorrect notified recipients when replying') @mute_logger('odoo.addons.mail.models.mail_thread', 'odoo.models', 'odoo.addons.mail.models.mail_mail') diff --git a/addons/test_website/tests/test_reset_views.py b/addons/test_website/tests/test_reset_views.py index 047b1abe3cd..b5f1d845bac 100644 --- a/addons/test_website/tests/test_reset_views.py +++ b/addons/test_website/tests/test_reset_views.py @@ -51,7 +51,8 @@ class TestWebsiteResetViews(odoo.tests.HttpCase): def test_02_reset_specific_view_controller(self): total_views = self.View.search_count([('type', '=', 'qweb')]) # Trigger COW then break the QWEB XML on it - break_view(self.test_view.with_context(website_id=1)) + # `t-att-data="not.exist"` will test the case where exception.html contains branding + break_view(self.test_view.with_context(website_id=1), to='<p t-att-data="not.exist" />') self.assertEqual(total_views + 1, self.View.search_count([('type', '=', 'qweb')]), "Missing COW view") self.fix_it('/test_view') diff --git a/addons/utm/i18n/utm.pot b/addons/utm/i18n/utm.pot index 8efadf9d58c..671e9873e25 100644 --- a/addons/utm/i18n/utm.pot +++ b/addons/utm/i18n/utm.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-24 10:58+0000\n" -"PO-Revision-Date: 2018-12-24 10:58+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -132,7 +132,7 @@ msgstr "" #. module: utm #: model:utm.source,name:utm.utm_source_mailing -msgid "Lead Newsletter" +msgid "Lead Recall" msgstr "" #. module: utm diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index b61855de052..379838fc7d0 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -1118,6 +1118,7 @@ class Binary(http.Controller): 'res_model': model, 'res_id': int(id) }) + attachment._post_add_create() except Exception: args.append({'error': _("Something horrible happened")}) _logger.exception("Fail to upload attachment %s" % ufile.filename) diff --git a/addons/web/i18n/web.pot b/addons/web/i18n/web.pot index 73151002274..c492c516f9a 100644 --- a/addons/web/i18n/web.pot +++ b/addons/web/i18n/web.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:59+0000\n" -"PO-Revision-Date: 2019-01-16 07:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -17,14 +17,14 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/calendar/calendar_model.js:520 +#: code:addons/web/static/src/js/views/calendar/calendar_model.js:523 #, python-format msgid " [Me]" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:239 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:232 #, python-format msgid " and " msgstr "" @@ -39,14 +39,13 @@ msgstr "" #. module: web #. openerp-web #: code:addons/web/static/src/js/fields/field_utils.js:285 -#: code:addons/web/static/src/js/views/kanban/kanban_column.js:157 #, python-format msgid " records" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:662 +#: code:addons/web/static/src/xml/base.xml:660 #, python-format msgid "# Code editor" msgstr "" @@ -54,7 +53,7 @@ msgstr "" #. module: web #. openerp-web #: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:111 -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:362 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:355 #, python-format msgid "%(field)s %(operator)s" msgstr "" @@ -166,15 +165,15 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:305 +#: code:addons/web/static/src/xml/base.xml:304 #, python-format msgid "(change)" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:515 -#: code:addons/web/static/src/xml/base.xml:544 +#: code:addons/web/static/src/xml/base.xml:513 +#: code:addons/web/static/src/xml/base.xml:542 #, python-format msgid "(count)" msgstr "" @@ -229,7 +228,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/chrome/action_manager.js:541 +#: code:addons/web/static/src/js/chrome/action_manager.js:538 #, python-format msgid "A popup window has been blocked. You may need to change your browser settings to allow popup windows for this page." msgstr "" @@ -243,14 +242,14 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:639 +#: code:addons/web/static/src/xml/base.xml:637 #, python-format msgid "ALL" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:640 +#: code:addons/web/static/src/xml/base.xml:638 #, python-format msgid "ANY" msgstr "" @@ -271,7 +270,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1531 +#: code:addons/web/static/src/xml/base.xml:1571 #, python-format msgid "Access to all Enterprise Apps" msgstr "" @@ -291,32 +290,42 @@ msgid "Action ID:" msgstr "" #. module: web +#: model:ir.model,name:web.model_ir_actions_act_window_view +msgid "Action Window View" +msgstr "" + +#. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:2117 +#: code:addons/web/static/src/js/fields/basic_fields.js:2113 #, python-format msgid "Activate" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:255 +#: code:addons/web/static/src/xml/base.xml:254 #, python-format msgid "Activate Assets Debugging" msgstr "" #. module: web #. openerp-web +#: code:addons/web/static/src/js/fields/basic_fields.js:2112 #: code:addons/web/static/src/js/fields/basic_fields.js:2116 #: code:addons/web/static/src/js/fields/basic_fields.js:2120 -#: code:addons/web/static/src/js/fields/basic_fields.js:2124 #, python-format msgid "Active" msgstr "" #. module: web +#: selection:ir.actions.act_window.view,view_mode:0 +msgid "Activity" +msgstr "" + +#. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/relational_fields.js:803 -#: code:addons/web/static/src/xml/base.xml:1374 +#: code:addons/web/static/src/js/fields/relational_fields.js:831 +#: code:addons/web/static/src/xml/base.xml:1414 #: code:addons/web/static/src/xml/kanban.xml:56 #: code:addons/web/static/src/xml/kanban.xml:73 #, python-format @@ -332,14 +341,14 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1136 +#: code:addons/web/static/src/xml/base.xml:1176 #, python-format msgid "Add Custom Filter" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1121 +#: code:addons/web/static/src/xml/base.xml:1161 #, python-format msgid "Add Custom Group" msgstr "" @@ -353,7 +362,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1140 +#: code:addons/web/static/src/xml/base.xml:1180 #, python-format msgid "Add a condition" msgstr "" @@ -367,7 +376,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:623 +#: code:addons/web/static/src/xml/base.xml:621 #, python-format msgid "Add branch" msgstr "" @@ -381,86 +390,101 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:647 +#: code:addons/web/static/src/xml/base.xml:645 #, python-format msgid "Add filter" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:707 +#: code:addons/web/static/src/xml/base.xml:705 #, python-format msgid "Add new value" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:622 +#: code:addons/web/static/src/xml/base.xml:620 #, python-format msgid "Add node" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:708 +#: code:addons/web/static/src/xml/base.xml:706 #, python-format msgid "Add tag" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:2039 +#: code:addons/web/static/src/js/fields/basic_fields.js:2035 #, python-format msgid "Add to Favorites" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:382 +#: code:addons/web/static/src/xml/base.xml:380 #, python-format msgid "Add..." msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/relational_fields.js:1589 +#: code:addons/web/static/src/js/fields/relational_fields.js:1617 #, python-format msgid "Add: " msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1219 +#: code:addons/web/static/src/js/fields/signature.js:41 +#, python-format +msgid "Adopt Your Signature" +msgstr "" + +#. module: web +#. openerp-web +#: code:addons/web/static/src/js/fields/signature.js:47 +#, python-format +msgid "Adopt and Sign" +msgstr "" + +#. module: web +#. openerp-web +#: code:addons/web/static/src/xml/base.xml:1259 #, python-format msgid "Advanced Search..." msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/core/dialog.js:315 +#: code:addons/web/static/src/js/core/dialog.js:319 #, python-format msgid "Alert" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:629 -#: code:addons/web/static/src/xml/base.xml:634 +#: code:addons/web/static/src/xml/base.xml:627 +#: code:addons/web/static/src/xml/base.xml:632 +#: code:addons/web/static/src/xml/kanban.xml:212 #, python-format msgid "All" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/calendar/calendar_model.js:402 -#: code:addons/web/static/src/js/views/calendar/calendar_renderer.js:397 +#: code:addons/web/static/src/js/views/calendar/calendar_model.js:405 +#: code:addons/web/static/src/js/views/calendar/calendar_renderer.js:404 #, python-format msgid "All day" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:501 +#: code:addons/web/static/src/xml/base.xml:499 #, python-format msgid "All users" msgstr "" @@ -503,32 +527,32 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1536 +#: code:addons/web/static/src/xml/base.xml:1576 #, python-format msgid "And more" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:630 -#: code:addons/web/static/src/xml/base.xml:635 +#: code:addons/web/static/src/xml/base.xml:628 +#: code:addons/web/static/src/xml/base.xml:633 #, python-format msgid "Any" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1130 -#: code:addons/web/static/src/xml/base.xml:1138 -#: code:addons/web/static/src/xml/base.xml:1213 +#: code:addons/web/static/src/xml/base.xml:1170 +#: code:addons/web/static/src/xml/base.xml:1178 +#: code:addons/web/static/src/xml/base.xml:1253 #, python-format msgid "Apply" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:2121 -#: code:addons/web/static/src/js/views/list/list_controller.js:162 +#: code:addons/web/static/src/js/fields/basic_fields.js:2117 +#: code:addons/web/static/src/js/views/list/list_controller.js:156 #, python-format msgid "Archive" msgstr "" @@ -542,28 +566,28 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:2120 +#: code:addons/web/static/src/js/fields/basic_fields.js:2116 #, python-format msgid "Archived" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/kanban/kanban_column.js:374 +#: code:addons/web/static/src/js/views/kanban/kanban_column.js:381 #, python-format msgid "Are you sure that you want to archive all the records from this column?" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/list/list_controller.js:164 +#: code:addons/web/static/src/js/views/list/list_controller.js:158 #, python-format msgid "Are you sure that you want to archive all the selected records?" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/kanban/kanban_column.js:312 +#: code:addons/web/static/src/js/views/kanban/kanban_column.js:319 #, python-format msgid "Are you sure that you want to remove this column ?" msgstr "" @@ -577,7 +601,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/basic/basic_controller.js:322 +#: code:addons/web/static/src/js/views/basic/basic_controller.js:334 #: code:addons/web/static/src/js/views/calendar/calendar_controller.js:345 #, python-format msgid "Are you sure you want to delete this record ?" @@ -585,29 +609,38 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1038 +#: code:addons/web/static/src/xml/base.xml:1079 #, python-format msgid "Attach" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:355 +#: code:addons/web/static/src/xml/base.xml:354 #, python-format msgid "Attachment :" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1370 +#: code:addons/web/static/src/xml/base.xml:1022 +#: code:addons/web/static/src/xml/name_and_signature.xml:61 +#, python-format +msgid "Auto" +msgstr "" + +#. module: web +#. openerp-web +#: code:addons/web/static/src/xml/base.xml:1410 #, python-format msgid "Available fields" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1499 -#: code:addons/web/static/src/xml/kanban.xml:161 +#: code:addons/web/static/src/xml/base.xml:1539 +#: code:addons/web/static/src/xml/kanban.xml:166 +#: code:addons/web/static/src/xml/kanban.xml:191 #: code:addons/web/static/src/xml/web_calendar.xml:53 #: code:addons/web/static/src/xml/web_calendar.xml:56 #, python-format @@ -616,7 +649,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:522 +#: code:addons/web/static/src/xml/base.xml:520 #, python-format msgid "Bar Chart" msgstr "" @@ -628,41 +661,35 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1153 +#: code:addons/web/static/src/xml/base.xml:1193 #, python-format msgid "Based On" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:257 +#: code:addons/web/static/src/xml/base.xml:256 #, python-format msgid "Become Superuser" msgstr "" #. module: web -#: code:addons/web/controllers/main.py:1509 +#: code:addons/web/controllers/main.py:1524 #, python-format msgid "Binary fields can not be exported to Excel unless their content is base64-encoded. That does not seem to be the case for %s." msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:962 +#: code:addons/web/static/src/xml/base.xml:960 +#: code:addons/web/static/src/xml/base.xml:1013 #, python-format msgid "Binary file" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/colorpicker.xml:35 -#, python-format -msgid "Blue" -msgstr "" - -#. module: web -#. openerp-web -#: code:addons/web/static/src/xml/base.xml:1535 +#: code:addons/web/static/src/xml/base.xml:1575 #, python-format msgid "Bugfixes guarantee" msgstr "" @@ -683,14 +710,22 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/core/utils.js:131 +#: code:addons/web/static/src/xml/base.xml:1028 +#: code:addons/web/static/src/xml/name_and_signature.xml:104 +#, python-format +msgid "By clicking Adopt and Sign, I agree that the chosen signature/initials will be a valid electronic representation of my hand-written signature/initials for all purposes when it is used on documents, including legally binding contracts." +msgstr "" + +#. module: web +#. openerp-web +#: code:addons/web/static/src/js/core/utils.js:332 #, python-format msgid "Bytes,Kb,Mb,Gb,Tb,Pb,Eb,Zb,Yb" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1315 +#: code:addons/web/static/src/xml/base.xml:1355 #, python-format msgid "CLEAR" msgstr "" @@ -698,6 +733,7 @@ msgstr "" #. module: web #. openerp-web #: code:addons/web/static/src/js/views/calendar/calendar_view.js:22 +#: selection:ir.actions.act_window.view,view_mode:0 #, python-format msgid "Calendar" msgstr "" @@ -711,14 +747,15 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/core/dialog.js:329 -#: code:addons/web/static/src/js/core/dialog.js:382 +#: code:addons/web/static/src/js/core/dialog.js:333 +#: code:addons/web/static/src/js/core/dialog.js:386 #: code:addons/web/static/src/js/fields/relational_fields.js:65 +#: code:addons/web/static/src/js/fields/signature.js:50 #: code:addons/web/static/src/js/fields/upgrade_fields.js:75 -#: code:addons/web/static/src/js/services/crash_manager.js:204 +#: code:addons/web/static/src/js/services/crash_manager.js:217 #: code:addons/web/static/src/js/views/calendar/calendar_quick_create.js:56 -#: code:addons/web/static/src/js/views/kanban/kanban_column.js:306 -#: code:addons/web/static/src/js/views/view_dialogs.js:361 +#: code:addons/web/static/src/js/views/kanban/kanban_column.js:313 +#: code:addons/web/static/src/js/views/view_dialogs.js:376 #: code:addons/web/static/src/xml/base.xml:179 #, python-format msgid "Cancel" @@ -726,23 +763,23 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/graph/graph_renderer.js:111 +#: code:addons/web/static/src/js/views/graph/graph_renderer.js:112 #, python-format msgid "Cannot render chart with mode : " msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/kanban/kanban_record.js:414 +#: code:addons/web/static/src/js/views/kanban/kanban_record.js:428 #, python-format msgid "Card color: %s" msgstr "" #. module: web #. openerp-web -#: code:addons/web/controllers/main.py:809 -#: code:addons/web/controllers/main.py:811 -#: code:addons/web/controllers/main.py:823 +#: code:addons/web/controllers/main.py:794 +#: code:addons/web/controllers/main.py:796 +#: code:addons/web/controllers/main.py:808 #: code:addons/web/static/src/js/widgets/change_password.js:27 #: code:addons/web/static/src/xml/base.xml:178 #, python-format @@ -758,49 +795,57 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/widgets/colorpicker.js:35 +#: code:addons/web/static/src/xml/base.xml:944 +#: code:addons/web/static/src/xml/base.xml:984 +#: code:addons/web/static/src/xml/base.xml:1058 +#: code:addons/web/static/src/xml/name_and_signature.xml:71 #, python-format -msgid "Choose" +msgid "Clear" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:946 -#: code:addons/web/static/src/xml/base.xml:986 -#: code:addons/web/static/src/xml/base.xml:1017 +#: code:addons/web/static/src/xml/base.xml:251 #, python-format -msgid "Clear" +msgid "Clear Events" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:252 +#: code:addons/web/static/src/xml/base.xml:1020 #, python-format -msgid "Clear Events" +msgid "Clear Signature" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:2125 -#: code:addons/web/static/src/js/tools/debug_manager.js:490 +#: code:addons/web/static/src/js/fields/basic_fields.js:2121 +#: code:addons/web/static/src/js/tools/debug_manager.js:494 #: code:addons/web/static/src/js/views/calendar/calendar_controller.js:356 -#: code:addons/web/static/src/js/views/view_dialogs.js:113 +#: code:addons/web/static/src/js/views/view_dialogs.js:114 #: code:addons/web/static/src/js/widgets/data_export.js:212 #: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:24 -#: code:addons/web/static/src/xml/base.xml:750 +#: code:addons/web/static/src/xml/base.xml:748 #, python-format msgid "Close" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:2124 +#: code:addons/web/static/src/js/fields/basic_fields.js:2120 #, python-format msgid "Closed" msgstr "" #. module: web #. openerp-web +#: code:addons/web/static/src/xml/kanban.xml:177 +#, python-format +msgid "Column" +msgstr "" + +#. module: web +#. openerp-web #: code:addons/web/static/src/xml/kanban.xml:54 #, python-format msgid "Column title" @@ -808,14 +853,14 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1195 +#: code:addons/web/static/src/xml/base.xml:1235 #, python-format msgid "Compare To" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:475 +#: code:addons/web/static/src/xml/base.xml:473 #, python-format msgid "Condition:" msgstr "" @@ -829,22 +874,22 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/core/dialog.js:341 -#: code:addons/web/static/src/js/core/dialog.js:391 +#: code:addons/web/static/src/js/core/dialog.js:345 +#: code:addons/web/static/src/js/core/dialog.js:395 #, python-format msgid "Confirmation" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/chrome/abstract_web_client.js:338 +#: code:addons/web/static/src/js/chrome/abstract_web_client.js:342 #, python-format msgid "Connection lost" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/chrome/abstract_web_client.js:352 +#: code:addons/web/static/src/js/chrome/abstract_web_client.js:356 #, python-format msgid "Connection restored" msgstr "" @@ -873,16 +918,16 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:1347 -#: code:addons/web/static/src/js/services/crash_manager.js:129 +#: code:addons/web/static/src/js/fields/basic_fields.js:1349 +#: code:addons/web/static/src/js/services/crash_manager.js:142 #, python-format msgid "Copied !" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:966 -#: code:addons/web/static/src/xml/base.xml:971 +#: code:addons/web/static/src/xml/base.xml:964 +#: code:addons/web/static/src/xml/base.xml:969 #, python-format msgid "Copy Text" msgstr "" @@ -896,21 +941,22 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/core/ajax.js:372 +#: code:addons/web/static/src/js/core/ajax.js:298 #, python-format msgid "Could not connect to the server" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:1579 +#: code:addons/web/static/src/js/fields/basic_fields.js:1575 +#: code:addons/web/static/src/js/fields/signature.js:207 #, python-format msgid "Could not display the selected image." msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/core/utils.js:450 +#: code:addons/web/static/src/js/core/utils.js:664 #, python-format msgid "Could not serialize XML" msgstr "" @@ -921,8 +967,8 @@ msgstr "" #: code:addons/web/static/src/js/views/graph/graph_view.js:53 #: code:addons/web/static/src/js/views/pivot/pivot_view.js:49 #: code:addons/web/static/src/js/views/pivot/pivot_view.js:61 -#: code:addons/web/static/src/xml/base.xml:518 -#: code:addons/web/static/src/xml/base.xml:547 +#: code:addons/web/static/src/xml/base.xml:516 +#: code:addons/web/static/src/xml/base.xml:545 #, python-format msgid "Count" msgstr "" @@ -932,24 +978,25 @@ msgstr "" #: code:addons/web/static/src/js/fields/relational_fields.js:44 #: code:addons/web/static/src/js/views/calendar/calendar_controller.js:262 #: code:addons/web/static/src/js/views/calendar/calendar_quick_create.js:45 -#: code:addons/web/static/src/js/views/kanban/kanban_controller.js:408 -#: code:addons/web/static/src/js/views/view_dialogs.js:367 -#: code:addons/web/static/src/xml/base.xml:393 -#: code:addons/web/static/src/xml/base.xml:413 +#: code:addons/web/static/src/js/views/kanban/kanban_controller.js:483 +#: code:addons/web/static/src/js/views/view_dialogs.js:382 +#: code:addons/web/static/src/xml/base.xml:391 +#: code:addons/web/static/src/xml/base.xml:411 #, python-format msgid "Create" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/form/form_controller.js:628 +#: code:addons/web/static/src/js/views/form/form_controller.js:640 +#: code:addons/web/static/src/js/views/view_dialogs.js:151 #, python-format msgid "Create " msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/relational_fields.js:520 +#: code:addons/web/static/src/js/fields/relational_fields.js:542 #, python-format msgid "Create \"<strong>%s</strong>\"" msgstr "" @@ -970,7 +1017,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/relational_fields.js:534 +#: code:addons/web/static/src/js/fields/relational_fields.js:556 #, python-format msgid "Create and Edit..." msgstr "" @@ -984,7 +1031,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/relational_fields.js:563 +#: code:addons/web/static/src/js/fields/relational_fields.js:591 #, python-format msgid "Create: " msgstr "" @@ -1003,7 +1050,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:360 +#: code:addons/web/static/src/xml/base.xml:359 #, python-format msgid "Created by :" msgstr "" @@ -1015,29 +1062,29 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:314 +#: code:addons/web/static/src/xml/base.xml:313 #, python-format msgid "Creation Date:" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:310 +#: code:addons/web/static/src/xml/base.xml:309 #, python-format msgid "Creation User:" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:929 +#: code:addons/web/static/src/xml/base.xml:927 #, python-format msgid "Current state" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/kanban/kanban_record.js:29 -#: code:addons/web/static/src/xml/base.xml:877 +#: code:addons/web/static/src/js/views/kanban/kanban_record.js:28 +#: code:addons/web/static/src/xml/base.xml:875 #: code:addons/web/static/src/xml/kanban.xml:88 #, python-format msgid "Dark blue" @@ -1045,8 +1092,8 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/kanban/kanban_record.js:26 -#: code:addons/web/static/src/xml/base.xml:874 +#: code:addons/web/static/src/js/views/kanban/kanban_record.js:25 +#: code:addons/web/static/src/xml/base.xml:872 #: code:addons/web/static/src/xml/kanban.xml:85 #, python-format msgid "Dark purple" @@ -1059,8 +1106,8 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:30 -#: code:addons/web/static/src/xml/base.xml:565 +#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:31 +#: code:addons/web/static/src/xml/base.xml:563 #: code:addons/web/static/src/xml/web_calendar.xml:80 #, python-format msgid "Day" @@ -1068,14 +1115,14 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:2117 +#: code:addons/web/static/src/js/fields/basic_fields.js:2113 #, python-format msgid "Deactivate" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:458 +#: code:addons/web/static/src/xml/base.xml:456 #, python-format msgid "Default:" msgstr "" @@ -1084,10 +1131,10 @@ msgstr "" #. openerp-web #: code:addons/web/static/src/js/views/calendar/calendar_controller.js:343 #: code:addons/web/static/src/js/views/form/form_controller.js:186 -#: code:addons/web/static/src/js/views/list/list_controller.js:176 -#: code:addons/web/static/src/xml/base.xml:863 -#: code:addons/web/static/src/xml/base.xml:1267 -#: code:addons/web/static/src/xml/base.xml:1416 +#: code:addons/web/static/src/js/views/list/list_controller.js:170 +#: code:addons/web/static/src/xml/base.xml:861 +#: code:addons/web/static/src/xml/base.xml:1307 +#: code:addons/web/static/src/xml/base.xml:1456 #: code:addons/web/static/src/xml/kanban.xml:24 #, python-format msgid "Delete" @@ -1095,7 +1142,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:621 +#: code:addons/web/static/src/xml/base.xml:619 #, python-format msgid "Delete node" msgstr "" @@ -1109,14 +1156,14 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:371 +#: code:addons/web/static/src/xml/base.xml:370 #, python-format msgid "Delete this attachment" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1059 +#: code:addons/web/static/src/xml/base.xml:1099 #, python-format msgid "Delete this file" msgstr "" @@ -1130,13 +1177,11 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/view_dialogs.js:113 -#: code:addons/web/static/src/js/widgets/colorpicker.js:36 +#: code:addons/web/static/src/js/views/view_dialogs.js:114 #: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:31 -#: code:addons/web/static/src/xml/base.xml:400 -#: code:addons/web/static/src/xml/base.xml:423 +#: code:addons/web/static/src/xml/base.xml:398 +#: code:addons/web/static/src/xml/base.xml:421 #: code:addons/web/static/src/xml/kanban.xml:75 -#: code:addons/web/static/src/xml/report.xml:18 #, python-format msgid "Discard" msgstr "" @@ -1162,7 +1207,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/calendar/calendar_renderer.js:148 +#: code:addons/web/static/src/js/views/calendar/calendar_renderer.js:150 #, python-format msgid "Do you really want to delete this filter from favorites ?" msgstr "" @@ -1174,7 +1219,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1509 +#: code:addons/web/static/src/xml/base.xml:1549 #, python-format msgid "Documentation" msgstr "" @@ -1182,7 +1227,7 @@ msgstr "" #. module: web #. openerp-web #: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:36 -#: code:addons/web/static/src/xml/base.xml:608 +#: code:addons/web/static/src/xml/base.xml:606 #, python-format msgid "Domain" msgstr "" @@ -1210,15 +1255,23 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:553 +#: code:addons/web/static/src/xml/base.xml:551 #, python-format msgid "Download xls" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:594 -#: code:addons/web/static/src/xml/base.xml:1519 +#: code:addons/web/static/src/xml/base.xml:1021 +#: code:addons/web/static/src/xml/name_and_signature.xml:56 +#, python-format +msgid "Draw" +msgstr "" + +#. module: web +#. openerp-web +#: code:addons/web/static/src/xml/base.xml:592 +#: code:addons/web/static/src/xml/base.xml:1559 #, python-format msgid "Dropdown menu" msgstr "" @@ -1234,38 +1287,37 @@ msgstr "" #. openerp-web #: code:addons/web/static/src/js/views/calendar/calendar_controller.js:337 #: code:addons/web/static/src/js/views/calendar/calendar_quick_create.js:50 -#: code:addons/web/static/src/xml/base.xml:409 -#: code:addons/web/static/src/xml/base.xml:945 +#: code:addons/web/static/src/xml/base.xml:407 +#: code:addons/web/static/src/xml/base.xml:943 #: code:addons/web/static/src/xml/kanban.xml:74 -#: code:addons/web/static/src/xml/report.xml:14 #, python-format msgid "Edit" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:263 +#: code:addons/web/static/src/xml/base.xml:262 #, python-format msgid "Edit Action" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/kanban/kanban_column.js:325 +#: code:addons/web/static/src/js/views/kanban/kanban_column.js:332 #, python-format msgid "Edit Column" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:286 +#: code:addons/web/static/src/xml/base.xml:285 #, python-format msgid "Edit ControlPanelView" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:615 +#: code:addons/web/static/src/xml/base.xml:613 #, python-format msgid "Edit Domain" msgstr "" @@ -1279,7 +1331,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:283 +#: code:addons/web/static/src/xml/base.xml:282 #, python-format msgid "Edit View:" msgstr "" @@ -1303,7 +1355,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/services/crash_manager.js:132 +#: code:addons/web/static/src/js/services/crash_manager.js:145 #: code:addons/web/static/src/js/views/control_panel/search/add_new_favorite_menu.js:75 #: code:addons/web/static/src/js/views/control_panel/search/add_new_favorite_menu.js:83 #, python-format @@ -1311,56 +1363,49 @@ msgid "Error" msgstr "" #. module: web -#: code:addons/web/controllers/main.py:813 +#: code:addons/web/controllers/main.py:798 #, python-format msgid "Error, password not changed !" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/kanban.xml:62 +#: code:addons/web/static/src/xml/kanban.xml:59 #, python-format msgid "Esc to discard" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/calendar/calendar_model.js:529 +#: code:addons/web/static/src/js/views/calendar/calendar_model.js:532 #, python-format msgid "Everybody's calendars" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/calendar/calendar_model.js:529 +#: code:addons/web/static/src/js/views/calendar/calendar_model.js:532 #, python-format msgid "Everything" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/kanban.xml:60 -#, python-format -msgid "Examples" -msgstr "" - -#. module: web -#. openerp-web -#: code:addons/web/static/src/xml/base.xml:552 +#: code:addons/web/static/src/xml/base.xml:550 #, python-format msgid "Expand all" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1396 +#: code:addons/web/static/src/xml/base.xml:1436 #, python-format msgid "Expand parents" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/list/list_controller.js:157 +#: code:addons/web/static/src/js/views/list/list_controller.js:151 #, python-format msgid "Export" msgstr "" @@ -1374,7 +1419,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1363 +#: code:addons/web/static/src/xml/base.xml:1403 #, python-format msgid "Export Format:" msgstr "" @@ -1388,8 +1433,8 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/controllers/main.py:1273 -#: code:addons/web/controllers/main.py:1276 +#: code:addons/web/controllers/main.py:1288 +#: code:addons/web/controllers/main.py:1291 #: code:addons/web/static/src/js/widgets/data_export.js:482 #, python-format msgid "External ID" @@ -1397,14 +1442,14 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:836 +#: code:addons/web/static/src/xml/base.xml:834 #, python-format msgid "External link" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1313 +#: code:addons/web/static/src/xml/base.xml:1353 #, python-format msgid "FILTER" msgstr "" @@ -1439,29 +1484,29 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/tools/debug_manager.js:527 -#: code:addons/web/static/src/xml/base.xml:281 +#: code:addons/web/static/src/js/tools/debug_manager.js:531 +#: code:addons/web/static/src/xml/base.xml:280 #, python-format msgid "Fields View Get" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1382 +#: code:addons/web/static/src/xml/base.xml:1422 #, python-format msgid "Fields to export" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:1458 +#: code:addons/web/static/src/js/fields/basic_fields.js:1450 #, python-format msgid "File Upload" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:1438 +#: code:addons/web/static/src/js/fields/basic_fields.js:1431 #, python-format msgid "File upload" msgstr "" @@ -1489,7 +1534,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:551 +#: code:addons/web/static/src/xml/base.xml:549 #, python-format msgid "Flip axis" msgstr "" @@ -1503,7 +1548,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:766 +#: code:addons/web/static/src/xml/base.xml:764 #, python-format msgid "Followed by" msgstr "" @@ -1520,29 +1565,49 @@ msgstr "" #. module: web #. openerp-web #: code:addons/web/static/src/js/views/form/form_view.js:18 +#: selection:ir.actions.act_window.view,view_mode:0 #, python-format msgid "Form" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/filter_menu.js:141 +#: code:addons/web/static/src/js/views/qweb/qweb_view.js:175 +#, python-format +msgid "Freedom View" +msgstr "" + +#. module: web +#. openerp-web +#: code:addons/web/static/src/js/views/control_panel/search/filter_menu.js:139 #, python-format msgid "From %s To %s" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/kanban/kanban_record.js:30 -#: code:addons/web/static/src/xml/base.xml:878 +#: code:addons/web/static/src/xml/name_and_signature.xml:43 +#, python-format +msgid "Full Name" +msgstr "" + +#. module: web +#. openerp-web +#: code:addons/web/static/src/js/views/kanban/kanban_record.js:29 +#: code:addons/web/static/src/xml/base.xml:876 #: code:addons/web/static/src/xml/kanban.xml:89 #, python-format msgid "Fushia" msgstr "" #. module: web +#: selection:ir.actions.act_window.view,view_mode:0 +msgid "Gantt" +msgstr "" + +#. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1528 +#: code:addons/web/static/src/xml/base.xml:1568 #, python-format msgid "Get this feature and much more with Odoo Enterprise!" msgstr "" @@ -1564,15 +1629,15 @@ msgstr "" #. module: web #. openerp-web #: code:addons/web/static/src/js/views/graph/graph_view.js:23 +#: selection:ir.actions.act_window.view,view_mode:0 #, python-format msgid "Graph" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/kanban/kanban_record.js:31 -#: code:addons/web/static/src/xml/base.xml:879 -#: code:addons/web/static/src/xml/colorpicker.xml:31 +#: code:addons/web/static/src/js/views/kanban/kanban_record.js:30 +#: code:addons/web/static/src/xml/base.xml:877 #: code:addons/web/static/src/xml/kanban.xml:90 #, python-format msgid "Green" @@ -1594,7 +1659,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/graph/graph_renderer.js:214 +#: code:addons/web/static/src/js/views/graph/graph_renderer.js:222 #, python-format msgid "Grouped" msgstr "" @@ -1606,56 +1671,49 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:887 +#: code:addons/web/static/src/xml/base.xml:885 #, python-format msgid "Hide in Kanban" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:439 +#: code:addons/web/static/src/xml/base.xml:437 #, python-format msgid "Hit DOWN to navigate to the list below" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:446 +#: code:addons/web/static/src/xml/base.xml:444 #, python-format msgid "Hit ENTER to" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:438 +#: code:addons/web/static/src/xml/base.xml:436 #, python-format msgid "Hit ENTER to CREATE" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:430 +#: code:addons/web/static/src/xml/base.xml:428 #, python-format msgid "Hit ENTER to SAVE" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:431 +#: code:addons/web/static/src/xml/base.xml:429 #, python-format msgid "Hit ESCAPE to DISCARD" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/colorpicker.xml:41 -#, python-format -msgid "Hue" -msgstr "" - -#. module: web -#. openerp-web -#: code:addons/web/static/src/js/core/dialog.js:357 +#: code:addons/web/static/src/js/core/dialog.js:361 #, python-format msgid "I am sure about this." msgstr "" @@ -1667,44 +1725,45 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:293 +#: code:addons/web/static/src/xml/base.xml:292 #, python-format msgid "ID:" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:1579 -#: code:addons/web/static/src/js/fields/basic_fields.js:1905 +#: code:addons/web/static/src/js/fields/basic_fields.js:1575 +#: code:addons/web/static/src/js/fields/basic_fields.js:1901 +#: code:addons/web/static/src/js/fields/signature.js:207 #, python-format msgid "Image" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:2116 +#: code:addons/web/static/src/js/fields/basic_fields.js:2112 #, python-format msgid "Inactive" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/graph/graph_renderer.js:263 -#: code:addons/web/static/src/js/views/graph/graph_renderer.js:278 +#: code:addons/web/static/src/js/views/graph/graph_renderer.js:270 +#: code:addons/web/static/src/js/views/graph/graph_renderer.js:285 #, python-format msgid "Invalid data" msgstr "" #. module: web -#: code:addons/web/controllers/main.py:707 -#: code:addons/web/controllers/main.py:721 +#: code:addons/web/controllers/main.py:692 +#: code:addons/web/controllers/main.py:706 #, python-format msgid "Invalid database name. Only alphanumerical characters, underscore, hyphen and dot are allowed." msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:613 +#: code:addons/web/static/src/xml/base.xml:611 #, python-format msgid "Invalid domain" msgstr "" @@ -1712,14 +1771,14 @@ msgstr "" #. module: web #. openerp-web #: code:addons/web/static/src/js/widgets/model_field_selector.js:427 -#: code:addons/web/static/src/xml/base.xml:744 +#: code:addons/web/static/src/xml/base.xml:742 #, python-format msgid "Invalid field chain" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/graph/graph_renderer.js:110 +#: code:addons/web/static/src/js/views/graph/graph_renderer.js:111 #, python-format msgid "Invalid mode for chart" msgstr "" @@ -1740,20 +1799,21 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/kanban/kanban_view.js:17 +#: code:addons/web/static/src/js/views/kanban/kanban_view.js:19 +#: selection:ir.actions.act_window.view,view_mode:0 #, python-format msgid "Kanban" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/chrome/user_menu.js:125 +#: code:addons/web/static/src/js/chrome/user_menu.js:123 #, python-format msgid "Keyboard Shortcuts" msgstr "" #. module: web -#: code:addons/web/controllers/main.py:830 +#: code:addons/web/controllers/main.py:815 #, python-format msgid "Languages" msgstr "" @@ -1774,6 +1834,13 @@ msgstr "" #. module: web #. openerp-web +#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:14 +#, python-format +msgid "Last 5 Years" +msgstr "" + +#. module: web +#. openerp-web #: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:11 #, python-format msgid "Last 7 Days" @@ -1786,14 +1853,14 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:21 +#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:22 #, python-format msgid "Last Month" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:22 +#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:23 #, python-format msgid "Last Quarter" msgstr "" @@ -1810,43 +1877,43 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:20 +#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:21 #, python-format msgid "Last Week" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:23 +#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:24 #, python-format msgid "Last Year" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:322 +#: code:addons/web/static/src/xml/base.xml:321 #, python-format msgid "Latest Modification Date:" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:318 +#: code:addons/web/static/src/xml/base.xml:317 #, python-format msgid "Latest Modification by:" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:258 +#: code:addons/web/static/src/xml/base.xml:257 #, python-format msgid "Leave the Developer Tools" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/kanban/kanban_record.js:25 -#: code:addons/web/static/src/xml/base.xml:873 +#: code:addons/web/static/src/js/views/kanban/kanban_record.js:24 +#: code:addons/web/static/src/xml/base.xml:871 #: code:addons/web/static/src/xml/kanban.xml:84 #, python-format msgid "Light blue" @@ -1854,23 +1921,24 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/colorpicker.xml:49 +#: code:addons/web/static/src/xml/base.xml:521 #, python-format -msgid "Lightness %" +msgid "Line Chart" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:523 +#: code:addons/web/static/src/js/views/list/list_view.js:21 #, python-format -msgid "Line Chart" +msgid "List" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/list/list_view.js:21 +#: code:addons/web/static/src/xml/base.xml:1023 +#: code:addons/web/static/src/xml/name_and_signature.xml:66 #, python-format -msgid "List" +msgid "Load" msgstr "" #. module: web @@ -1896,8 +1964,8 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1072 -#: code:addons/web/static/src/xml/base.xml:1429 +#: code:addons/web/static/src/xml/base.xml:1112 +#: code:addons/web/static/src/xml/base.xml:1469 #, python-format msgid "Loading, please wait..." msgstr "" @@ -1905,9 +1973,9 @@ msgstr "" #. module: web #. openerp-web #: code:addons/web/static/src/js/core/misc.js:13 -#: code:addons/web/static/src/js/fields/relational_fields.js:144 -#: code:addons/web/static/src/js/fields/relational_fields.js:230 -#: code:addons/web/static/src/xml/base.xml:1422 +#: code:addons/web/static/src/js/fields/relational_fields.js:145 +#: code:addons/web/static/src/js/fields/relational_fields.js:231 +#: code:addons/web/static/src/xml/base.xml:1462 #, python-format msgid "Loading..." msgstr "" @@ -1924,7 +1992,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1514 +#: code:addons/web/static/src/xml/base.xml:1554 #, python-format msgid "Log out" msgstr "" @@ -1953,7 +2021,7 @@ msgstr "" #. module: web #. openerp-web #: code:addons/web/static/src/js/tools/debug_manager.js:364 -#: code:addons/web/static/src/xml/base.xml:278 +#: code:addons/web/static/src/xml/base.xml:277 #, python-format msgid "Manage Attachments" msgstr "" @@ -1966,28 +2034,28 @@ msgstr "" #. module: web #. openerp-web #: code:addons/web/static/src/js/tools/debug_manager.js:300 -#: code:addons/web/static/src/xml/base.xml:266 +#: code:addons/web/static/src/xml/base.xml:265 #, python-format msgid "Manage Filters" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:646 +#: code:addons/web/static/src/xml/base.xml:644 #, python-format msgid "Match" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:653 +#: code:addons/web/static/src/xml/base.xml:651 #, python-format msgid "Match records with" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:651 +#: code:addons/web/static/src/xml/base.xml:649 #, python-format msgid "Match records with the following rule:" msgstr "" @@ -2001,16 +2069,16 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:510 -#: code:addons/web/static/src/xml/base.xml:539 +#: code:addons/web/static/src/xml/base.xml:508 +#: code:addons/web/static/src/xml/base.xml:537 #, python-format msgid "Measures" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/kanban/kanban_record.js:28 -#: code:addons/web/static/src/xml/base.xml:876 +#: code:addons/web/static/src/js/views/kanban/kanban_record.js:27 +#: code:addons/web/static/src/xml/base.xml:874 #: code:addons/web/static/src/xml/kanban.xml:87 #, python-format msgid "Medium blue" @@ -2018,7 +2086,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/tools/debug_manager.js:390 +#: code:addons/web/static/src/js/tools/debug_manager.js:394 #, python-format msgid "Metadata (%s)" msgstr "" @@ -2039,14 +2107,14 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1533 +#: code:addons/web/static/src/xml/base.xml:1573 #, python-format msgid "Mobile support" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:365 +#: code:addons/web/static/src/xml/base.xml:364 #, python-format msgid "Modified by :" msgstr "" @@ -2061,8 +2129,8 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:32 -#: code:addons/web/static/src/xml/base.xml:567 +#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:33 +#: code:addons/web/static/src/xml/base.xml:565 #: code:addons/web/static/src/xml/web_calendar.xml:82 #, python-format msgid "Month" @@ -2070,50 +2138,50 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/form/form_renderer.js:411 -#: code:addons/web/static/src/xml/base.xml:913 +#: code:addons/web/static/src/js/views/form/form_renderer.js:399 +#: code:addons/web/static/src/xml/base.xml:911 #, python-format msgid "More" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1378 +#: code:addons/web/static/src/xml/base.xml:1418 #, python-format msgid "Move Down" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1377 +#: code:addons/web/static/src/xml/base.xml:1417 #, python-format msgid "Move Up" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1513 +#: code:addons/web/static/src/xml/base.xml:1553 #, python-format msgid "My Odoo.com account" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:641 +#: code:addons/web/static/src/xml/base.xml:639 #, python-format msgid "NONE" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1433 +#: code:addons/web/static/src/xml/base.xml:1473 #, python-format msgid "Name:" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/basic/basic_model.js:671 +#: code:addons/web/static/src/js/views/basic/basic_model.js:672 #, python-format msgid "New" msgstr "" @@ -2127,15 +2195,15 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1532 +#: code:addons/web/static/src/xml/base.xml:1572 #, python-format msgid "New design" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1468 -#: code:addons/web/static/src/xml/base.xml:1469 +#: code:addons/web/static/src/xml/base.xml:1508 +#: code:addons/web/static/src/xml/base.xml:1509 #: code:addons/web/static/src/xml/web_calendar.xml:77 #, python-format msgid "Next" @@ -2150,7 +2218,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:301 +#: code:addons/web/static/src/xml/base.xml:300 #, python-format msgid "No Update:" msgstr "" @@ -2164,7 +2232,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/kanban/kanban_record.js:21 +#: code:addons/web/static/src/js/views/kanban/kanban_record.js:20 #: code:addons/web/static/src/xml/kanban.xml:80 #, python-format msgid "No color" @@ -2172,16 +2240,16 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/graph/graph_renderer.js:116 -#: code:addons/web/static/src/js/views/graph/graph_renderer.js:312 -#: code:addons/web/static/src/xml/base.xml:582 +#: code:addons/web/static/src/js/views/graph/graph_renderer.js:117 +#: code:addons/web/static/src/js/views/graph/graph_renderer.js:319 +#: code:addons/web/static/src/xml/base.xml:580 #, python-format msgid "No data to display" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/tools/debug_manager.js:374 +#: code:addons/web/static/src/js/tools/debug_manager.js:378 #, python-format msgid "No metadata available" msgstr "" @@ -2195,28 +2263,36 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/relational_fields.js:540 +#: code:addons/web/static/src/js/fields/relational_fields.js:562 #, python-format msgid "No results to show..." msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:631 +#: code:addons/web/static/src/xml/base.xml:629 #, python-format msgid "None" msgstr "" #. module: web +#: code:addons/web/models/models.py:197 +#: code:addons/web/models/models.py:202 +#: code:addons/web/models/models.py:209 +#, python-format +msgid "Not Set" +msgstr "" + +#. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:933 +#: code:addons/web/static/src/xml/base.xml:931 #, python-format msgid "Not active state" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:937 +#: code:addons/web/static/src/xml/base.xml:935 #, python-format msgid "Not active state, click to change it" msgstr "" @@ -2246,8 +2322,8 @@ msgstr "" #. module: web #. openerp-web #: code:addons/web/static/src/js/chrome/abstract_web_client.js:202 -#: code:addons/web/static/src/js/chrome/abstract_web_client.js:210 -#: code:addons/web/static/src/js/services/crash_manager.js:157 +#: code:addons/web/static/src/js/chrome/abstract_web_client.js:214 +#: code:addons/web/static/src/js/services/crash_manager.js:170 #, python-format msgid "Odoo Client Error" msgstr "" @@ -2261,29 +2337,29 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/services/crash_manager.js:115 +#: code:addons/web/static/src/js/services/crash_manager.js:128 #, python-format msgid "Odoo Error" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/services/crash_manager.js:216 +#: code:addons/web/static/src/js/services/crash_manager.js:229 #, python-format msgid "Odoo Session Expired" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/services/crash_manager.js:105 -#: code:addons/web/static/src/js/services/crash_manager.js:198 +#: code:addons/web/static/src/js/services/crash_manager.js:118 +#: code:addons/web/static/src/js/services/crash_manager.js:211 #, python-format msgid "Odoo Warning" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:2133 +#: code:addons/web/static/src/js/fields/basic_fields.js:2129 #, python-format msgid "Off" msgstr "" @@ -2291,11 +2367,11 @@ msgstr "" #. module: web #. openerp-web #: code:addons/web/static/src/js/core/dialog.js:64 -#: code:addons/web/static/src/js/core/dialog.js:304 -#: code:addons/web/static/src/js/core/dialog.js:323 -#: code:addons/web/static/src/js/core/dialog.js:375 -#: code:addons/web/static/src/js/views/kanban/kanban_column.js:301 -#: code:addons/web/static/src/xml/base.xml:1406 +#: code:addons/web/static/src/js/core/dialog.js:308 +#: code:addons/web/static/src/js/core/dialog.js:327 +#: code:addons/web/static/src/js/core/dialog.js:379 +#: code:addons/web/static/src/js/views/kanban/kanban_column.js:308 +#: code:addons/web/static/src/xml/base.xml:1446 #, python-format msgid "Ok" msgstr "" @@ -2309,7 +2385,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:2132 +#: code:addons/web/static/src/js/fields/basic_fields.js:2128 #, python-format msgid "On" msgstr "" @@ -2323,7 +2399,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:2356 +#: code:addons/web/static/src/js/fields/basic_fields.js:2352 #, python-format msgid "Only Integer Value should be valid." msgstr "" @@ -2335,36 +2411,41 @@ msgid "Only employee can access this database. Please contact the administrator. msgstr "" #. module: web -#. openerp-web -#: code:addons/web/static/src/xml/base.xml:494 +#: code:addons/web/models/models.py:139 #, python-format -msgid "Only you" +msgid "Only types %(supported_types)s are supported for category (found type %(field_type)s)" +msgstr "" + +#. module: web +#: code:addons/web/models/models.py:176 +#, python-format +msgid "Only types %(supported_types)s are supported for filter (found type %(field_type)s)" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/colorpicker.xml:55 +#: code:addons/web/static/src/xml/base.xml:492 #, python-format -msgid "Opacity %" +msgid "Only you" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:2125 +#: code:addons/web/static/src/js/fields/basic_fields.js:2121 #, python-format msgid "Open" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:238 +#: code:addons/web/static/src/xml/base.xml:237 #, python-format msgid "Open Developer Tools" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:248 +#: code:addons/web/static/src/xml/base.xml:247 #, python-format msgid "Open View" msgstr "" @@ -2399,18 +2480,19 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/relational_fields.js:640 +#: code:addons/web/static/src/js/fields/relational_fields.js:668 #: code:addons/web/static/src/js/views/calendar/calendar_controller.js:323 -#: code:addons/web/static/src/js/views/form/form_controller.js:628 -#: code:addons/web/static/src/js/views/form/form_controller.js:650 +#: code:addons/web/static/src/js/views/form/form_controller.js:640 +#: code:addons/web/static/src/js/views/form/form_controller.js:662 +#: code:addons/web/static/src/js/views/view_dialogs.js:151 #, python-format msgid "Open: " msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/kanban/kanban_record.js:23 -#: code:addons/web/static/src/xml/base.xml:871 +#: code:addons/web/static/src/js/views/kanban/kanban_record.js:22 +#: code:addons/web/static/src/xml/base.xml:869 #: code:addons/web/static/src/xml/kanban.xml:82 #, python-format msgid "Orange" @@ -2442,28 +2524,21 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/widgets/colorpicker.js:33 -#, python-format -msgid "Pick a color" -msgstr "" - -#. module: web -#. openerp-web -#: code:addons/web/static/src/xml/base.xml:524 +#: code:addons/web/static/src/xml/base.xml:522 #, python-format msgid "Pie Chart" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/graph/graph_renderer.js:279 +#: code:addons/web/static/src/js/views/graph/graph_renderer.js:286 #, python-format msgid "Pie chart cannot display all zero numbers.. Try to change your domain to display positive results" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/graph/graph_renderer.js:264 +#: code:addons/web/static/src/js/views/graph/graph_renderer.js:271 #, python-format msgid "Pie chart cannot mix positive and negative numbers. Try to change your domain to only display positive results" msgstr "" @@ -2471,6 +2546,7 @@ msgstr "" #. module: web #. openerp-web #: code:addons/web/static/src/js/views/pivot/pivot_view.js:23 +#: selection:ir.actions.act_window.view,view_mode:0 #, python-format msgid "Pivot" msgstr "" @@ -2505,7 +2581,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1488 +#: code:addons/web/static/src/xml/base.xml:1528 #, python-format msgid "Please update translations of :" msgstr "" @@ -2524,7 +2600,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1512 +#: code:addons/web/static/src/xml/base.xml:1552 #, python-format msgid "Preferences" msgstr "" @@ -2551,7 +2627,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:748 +#: code:addons/web/static/src/xml/base.xml:746 #: code:addons/web/static/src/xml/web_calendar.xml:75 #, python-format msgid "Previous" @@ -2559,14 +2635,14 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:41 +#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:42 #, python-format msgid "Previous Period" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:42 +#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:43 #, python-format msgid "Previous Year" msgstr "" @@ -2581,17 +2657,22 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/kanban/kanban_record.js:32 -#: code:addons/web/static/src/xml/base.xml:880 +#: code:addons/web/static/src/js/views/kanban/kanban_record.js:31 +#: code:addons/web/static/src/xml/base.xml:878 #: code:addons/web/static/src/xml/kanban.xml:91 #, python-format msgid "Purple" msgstr "" #. module: web +#: selection:ir.actions.act_window.view,view_mode:0 +msgid "QWeb" +msgstr "" + +#. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:33 -#: code:addons/web/static/src/xml/base.xml:568 +#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:34 +#: code:addons/web/static/src/xml/base.xml:566 #, python-format msgid "Quarter" msgstr "" @@ -2604,22 +2685,28 @@ msgid "Quick add" msgstr "" #. module: web +#. openerp-web +#: code:addons/web/static/src/js/fields/relational_fields.js:526 +#, python-format +msgid "Quick search: %s" +msgstr "" + +#. module: web #: model:ir.model,name:web.model_ir_qweb_field_image msgid "Qweb Field Image" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1170 +#: code:addons/web/static/src/xml/base.xml:1210 #, python-format msgid "Range" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/kanban/kanban_record.js:22 -#: code:addons/web/static/src/xml/base.xml:870 -#: code:addons/web/static/src/xml/colorpicker.xml:27 +#: code:addons/web/static/src/js/views/kanban/kanban_record.js:21 +#: code:addons/web/static/src/xml/base.xml:868 #: code:addons/web/static/src/xml/kanban.xml:81 #, python-format msgid "Red" @@ -2627,7 +2714,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:256 +#: code:addons/web/static/src/xml/base.xml:255 #, python-format msgid "Regenerate Assets Bundles" msgstr "" @@ -2641,7 +2728,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:781 +#: code:addons/web/static/src/xml/base.xml:779 #, python-format msgid "Relation to follow" msgstr "" @@ -2655,30 +2742,30 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/view_dialogs.js:147 -#: code:addons/web/static/src/xml/base.xml:1236 -#: code:addons/web/static/src/xml/base.xml:1375 +#: code:addons/web/static/src/js/views/view_dialogs.js:160 +#: code:addons/web/static/src/xml/base.xml:1276 +#: code:addons/web/static/src/xml/base.xml:1415 #, python-format msgid "Remove" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1376 +#: code:addons/web/static/src/xml/base.xml:1416 #, python-format msgid "Remove All" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:2039 +#: code:addons/web/static/src/js/fields/basic_fields.js:2035 #, python-format msgid "Remove from Favorites" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:703 +#: code:addons/web/static/src/xml/base.xml:701 #, python-format msgid "Remove tag" msgstr "" @@ -2704,98 +2791,97 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/services/crash_manager.js:227 +#: code:addons/web/static/src/js/services/crash_manager.js:240 #, python-format msgid "Request timeout" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:2121 +#: code:addons/web/static/src/js/fields/basic_fields.js:2117 #, python-format msgid "Restore" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:247 +#: code:addons/web/static/src/xml/base.xml:246 #, python-format msgid "Run Click Everywhere Test" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:246 +#: code:addons/web/static/src/xml/base.xml:245 #, python-format msgid "Run JS Mobile Tests" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:245 +#: code:addons/web/static/src/xml/base.xml:244 #, python-format msgid "Run JS Tests" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1318 +#: code:addons/web/static/src/xml/base.xml:1358 #, python-format msgid "SEE RESULT" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/kanban/kanban_record.js:27 -#: code:addons/web/static/src/xml/base.xml:875 -#: code:addons/web/static/src/xml/kanban.xml:86 +#: code:addons/web/static/src/js/fields/signature.js:181 #, python-format -msgid "Salmon pink" +msgid "SIGNATURE" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/colorpicker.xml:45 +#: code:addons/web/static/src/js/views/kanban/kanban_record.js:26 +#: code:addons/web/static/src/xml/base.xml:873 +#: code:addons/web/static/src/xml/kanban.xml:86 #, python-format -msgid "Saturation %" +msgid "Salmon pink" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/view_dialogs.js:127 +#: code:addons/web/static/src/js/views/view_dialogs.js:128 #: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:28 -#: code:addons/web/static/src/xml/base.xml:397 -#: code:addons/web/static/src/xml/base.xml:419 -#: code:addons/web/static/src/xml/base.xml:1338 -#: code:addons/web/static/src/xml/report.xml:17 +#: code:addons/web/static/src/xml/base.xml:395 +#: code:addons/web/static/src/xml/base.xml:417 +#: code:addons/web/static/src/xml/base.xml:1378 #, python-format msgid "Save" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/view_dialogs.js:127 +#: code:addons/web/static/src/js/views/view_dialogs.js:128 #, python-format msgid "Save & Close" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/view_dialogs.js:136 +#: code:addons/web/static/src/js/views/view_dialogs.js:137 #, python-format msgid "Save & New" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:1641 +#: code:addons/web/static/src/js/fields/basic_fields.js:1637 #, python-format msgid "Save As..." msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1324 +#: code:addons/web/static/src/xml/base.xml:1364 #, python-format msgid "Save Current Search" msgstr "" @@ -2809,35 +2895,35 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1406 +#: code:addons/web/static/src/xml/base.xml:1446 #, python-format msgid "Save as:" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/tools/debug_manager.js:491 +#: code:addons/web/static/src/js/tools/debug_manager.js:495 #, python-format msgid "Save default" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1382 +#: code:addons/web/static/src/xml/base.xml:1422 #, python-format msgid "Save fields list" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1409 +#: code:addons/web/static/src/xml/base.xml:1449 #, python-format msgid "Saved exports:" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1555 +#: code:addons/web/static/src/xml/base.xml:1595 #, python-format msgid "Search" msgstr "" @@ -2858,21 +2944,21 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/relational_fields.js:496 +#: code:addons/web/static/src/js/fields/relational_fields.js:503 #, python-format msgid "Search More..." msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1223 +#: code:addons/web/static/src/xml/base.xml:1263 #, python-format msgid "Search..." msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/relational_fields.js:563 +#: code:addons/web/static/src/js/fields/relational_fields.js:591 #, python-format msgid "Search: " msgstr "" @@ -2886,11 +2972,18 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/view_dialogs.js:374 -#: code:addons/web/static/src/xml/base.xml:984 -#: code:addons/web/static/src/xml/base.xml:985 -#: code:addons/web/static/src/xml/base.xml:1015 -#: code:addons/web/static/src/xml/base.xml:1016 +#: code:addons/web/static/src/xml/kanban.xml:61 +#, python-format +msgid "See examples" +msgstr "" + +#. module: web +#. openerp-web +#: code:addons/web/static/src/js/views/view_dialogs.js:389 +#: code:addons/web/static/src/xml/base.xml:982 +#: code:addons/web/static/src/xml/base.xml:983 +#: code:addons/web/static/src/xml/base.xml:1056 +#: code:addons/web/static/src/xml/base.xml:1057 #, python-format msgid "Select" msgstr "" @@ -2902,7 +2995,14 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:617 +#: code:addons/web/static/src/xml/base.xml:1019 +#, python-format +msgid "Select Signature Style" +msgstr "" + +#. module: web +#. openerp-web +#: code:addons/web/static/src/xml/base.xml:615 #, python-format msgid "Select a model to add a filter." msgstr "" @@ -2916,7 +3016,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:2831 +#: code:addons/web/static/src/js/fields/basic_fields.js:2827 #, python-format msgid "Selected records" msgstr "" @@ -2930,14 +3030,14 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/tools/debug_manager.js:488 +#: code:addons/web/static/src/js/tools/debug_manager.js:492 #, python-format msgid "Set Default" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:275 +#: code:addons/web/static/src/xml/base.xml:274 #, python-format msgid "Set Defaults" msgstr "" @@ -2951,7 +3051,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1335 +#: code:addons/web/static/src/xml/base.xml:1375 #, python-format msgid "Share with all users" msgstr "" @@ -2978,7 +3078,7 @@ msgid "Size:" msgstr "" #. module: web -#: code:addons/web/controllers/main.py:1139 +#: code:addons/web/controllers/main.py:1123 #, python-format msgid "Something horrible happened" msgstr "" @@ -2992,7 +3092,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/graph/graph_renderer.js:215 +#: code:addons/web/static/src/js/views/graph/graph_renderer.js:223 #, python-format msgid "Stacked" msgstr "" @@ -3013,28 +3113,43 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/web_calendar.xml:96 +#: code:addons/web/static/src/xml/name_and_signature.xml:76 +#, python-format +msgid "Style" +msgstr "" + +#. module: web +#. openerp-web +#: code:addons/web/static/src/xml/base.xml:1031 +#: code:addons/web/static/src/xml/name_and_signature.xml:96 +#, python-format +msgid "Styles" +msgstr "" + +#. module: web +#. openerp-web +#: code:addons/web/static/src/xml/web_calendar.xml:98 #, python-format msgid "Summary:" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1510 +#: code:addons/web/static/src/xml/base.xml:1550 #, python-format msgid "Support" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:2134 +#: code:addons/web/static/src/js/fields/basic_fields.js:2130 #, python-format msgid "Switch Off" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:2135 +#: code:addons/web/static/src/js/fields/basic_fields.js:2131 #, python-format msgid "Switch On" msgstr "" @@ -3062,7 +3177,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:267 +#: code:addons/web/static/src/xml/base.xml:266 #, python-format msgid "Technical Translation" msgstr "" @@ -3090,103 +3205,103 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:1641 +#: code:addons/web/static/src/js/fields/basic_fields.js:1637 #, python-format msgid "The field is empty, there's nothing to save !" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/basic/basic_controller.js:426 +#: code:addons/web/static/src/js/views/basic/basic_controller.js:438 #: code:addons/web/static/src/js/widgets/attach_document.js:65 #, python-format msgid "The following fields are invalid:" msgstr "" #. module: web -#: code:addons/web/controllers/main.py:811 +#: code:addons/web/controllers/main.py:796 #, python-format msgid "The new password and its confirmation must be identical." msgstr "" #. module: web -#: code:addons/web/controllers/main.py:822 +#: code:addons/web/controllers/main.py:807 #, python-format msgid "The old password you provided is incorrect, your password was not changed." msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/services/crash_manager.js:228 +#: code:addons/web/static/src/js/services/crash_manager.js:241 #, python-format msgid "The operation was interrupted. This usually means that the current operation is taking too much time." msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/basic/basic_controller.js:75 +#: code:addons/web/static/src/js/views/basic/basic_controller.js:79 #, python-format msgid "The record has been modified, your changes will be discarded. Do you want to proceed?" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:1437 +#: code:addons/web/static/src/js/fields/basic_fields.js:1430 #, python-format msgid "The selected file exceed the maximum file size of %s." msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/relational_fields.js:1658 +#: code:addons/web/static/src/js/fields/relational_fields.js:1686 #, python-format msgid "The type of the field '%s' must be a many2many field with a relation to 'ir.attachment' model." msgstr "" #. module: web -#: code:addons/web/controllers/main.py:1484 +#: code:addons/web/controllers/main.py:1499 #, python-format msgid "There are too many rows (%s rows, limit: 65535) to export as Excel 97-2003 (.xls) format. Consider splitting the export." msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:1458 +#: code:addons/web/static/src/js/fields/basic_fields.js:1450 #, python-format msgid "There was a problem while uploading your file" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:16 +#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:17 #, python-format msgid "This Month" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:17 +#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:18 #, python-format msgid "This Quarter" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:15 +#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:16 #, python-format msgid "This Week" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:18 +#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:19 #, python-format msgid "This Year" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/widgets/date_picker.js:180 +#: code:addons/web/static/src/js/widgets/date_picker.js:181 #, python-format msgid "This date is on the future. Make sure it is what you expected." msgstr "" @@ -3200,6 +3315,13 @@ msgstr "" #. module: web #. openerp-web +#: code:addons/web/static/src/xml/name_and_signature.xml:89 +#, python-format +msgid "This file is invalid. Please select an image." +msgstr "" + +#. module: web +#. openerp-web #: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:87 #, python-format msgid "This filter is global and will be removed for everybody if you continue." @@ -3217,7 +3339,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1149 +#: code:addons/web/static/src/xml/base.xml:1189 #, python-format msgid "Time Ranges" msgstr "" @@ -3231,36 +3353,41 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:14 +#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:15 #: code:addons/web/static/src/xml/web_calendar.xml:76 -#: code:addons/web/static/src/xml/web_calendar.xml:89 +#: code:addons/web/static/src/xml/web_calendar.xml:90 #, python-format msgid "Today" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:251 +#: code:addons/web/static/src/xml/base.xml:250 #, python-format msgid "Toggle Timelines" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/pivot/pivot_model.js:622 -#: code:addons/web/static/src/js/views/pivot/pivot_model.js:770 +#: code:addons/web/static/src/js/views/pivot/pivot_model.js:642 +#: code:addons/web/static/src/js/views/pivot/pivot_model.js:790 #, python-format msgid "Total" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/chrome/abstract_web_client.js:212 +#: code:addons/web/static/src/js/chrome/abstract_web_client.js:216 #, python-format msgid "Traceback:" msgstr "" #. module: web +#: selection:ir.actions.act_window.view,view_mode:0 +msgid "Tree" +msgstr "" + +#. module: web #. openerp-web #: code:addons/web/static/src/js/fields/field_utils.js:62 #, python-format @@ -3269,7 +3396,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:584 +#: code:addons/web/static/src/xml/base.xml:582 #, python-format msgid "Try to add some records, or make sure\n" " that there is at least one measure and no active filter in the search bar." @@ -3277,14 +3404,14 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/graph/graph_renderer.js:117 +#: code:addons/web/static/src/js/views/graph/graph_renderer.js:118 #, python-format msgid "Try to add some records, or make sure that there is no active filter in the search bar." msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/chrome/abstract_web_client.js:339 +#: code:addons/web/static/src/js/chrome/abstract_web_client.js:343 #, python-format msgid "Trying to reconnect..." msgstr "" @@ -3305,7 +3432,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/list/list_controller.js:170 +#: code:addons/web/static/src/js/views/list/list_controller.js:164 #, python-format msgid "Unarchive" msgstr "" @@ -3319,15 +3446,15 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/calendar/calendar_model.js:578 -#: code:addons/web/static/src/js/views/graph/graph_renderer.js:341 -#: code:addons/web/static/src/js/views/graph/graph_renderer.js:523 +#: code:addons/web/static/src/js/views/calendar/calendar_model.js:581 +#: code:addons/web/static/src/js/views/graph/graph_renderer.js:348 +#: code:addons/web/static/src/js/views/graph/graph_renderer.js:534 #: code:addons/web/static/src/js/views/kanban/kanban_column.js:77 #: code:addons/web/static/src/js/views/kanban/kanban_column.js:80 -#: code:addons/web/static/src/js/views/kanban/kanban_renderer_mobile.js:183 +#: code:addons/web/static/src/js/views/kanban/kanban_renderer_mobile.js:294 #: code:addons/web/static/src/js/views/list/list_renderer.js:436 #: code:addons/web/static/src/js/views/list/list_renderer.js:439 -#: code:addons/web/static/src/js/views/pivot/pivot_model.js:1078 +#: code:addons/web/static/src/js/views/pivot/pivot_model.js:1094 #, python-format msgid "Undefined" msgstr "" @@ -3376,7 +3503,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1356 +#: code:addons/web/static/src/xml/base.xml:1396 #, python-format msgid "Update data (import-compatible export)" msgstr "" @@ -3390,60 +3517,60 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1540 +#: code:addons/web/static/src/xml/base.xml:1580 #, python-format msgid "Upgrade to enterprise" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1534 +#: code:addons/web/static/src/xml/base.xml:1574 #, python-format msgid "Upgrade to future versions" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:984 -#: code:addons/web/static/src/xml/base.xml:1015 +#: code:addons/web/static/src/xml/base.xml:982 +#: code:addons/web/static/src/xml/base.xml:1056 #, python-format msgid "Upload your file" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/relational_fields.js:1822 +#: code:addons/web/static/src/js/fields/relational_fields.js:1850 #, python-format msgid "Uploading Error" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:948 -#: code:addons/web/static/src/xml/base.xml:988 -#: code:addons/web/static/src/xml/base.xml:1014 -#: code:addons/web/static/src/xml/base.xml:1070 +#: code:addons/web/static/src/xml/base.xml:946 +#: code:addons/web/static/src/xml/base.xml:986 +#: code:addons/web/static/src/xml/base.xml:1055 +#: code:addons/web/static/src/xml/base.xml:1110 #, python-format msgid "Uploading..." msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1331 +#: code:addons/web/static/src/xml/base.xml:1371 #, python-format msgid "Use by default" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1350 +#: code:addons/web/static/src/xml/base.xml:1390 #, python-format msgid "Use data in a spreadsheet (export all data)" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1335 +#: code:addons/web/static/src/xml/base.xml:1375 #, python-format msgid "Users" msgstr "" @@ -3457,36 +3584,49 @@ msgstr "" #. module: web #. openerp-web +#: code:addons/web/static/src/js/views/pivot/pivot_model.js:240 +#: code:addons/web/static/src/js/views/pivot/pivot_renderer.js:177 +#, python-format +msgid "Variation" +msgstr "" + +#. module: web +#. openerp-web #: code:addons/web/static/src/js/tools/debug_manager.js:287 -#: code:addons/web/static/src/xml/base.xml:265 +#: code:addons/web/static/src/xml/base.xml:264 #, python-format msgid "View Fields" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:277 +#: code:addons/web/static/src/xml/base.xml:276 #, python-format msgid "View Metadata" msgstr "" #. module: web +#: model:ir.model.fields,field_description:web.field_ir_actions_act_window_view__view_mode +msgid "View Type" +msgstr "" + +#. module: web #. openerp-web -#: code:addons/web/static/src/js/chrome/action_manager.js:544 +#: code:addons/web/static/src/js/chrome/action_manager.js:541 #: code:addons/web/static/src/js/chrome/action_manager_report.js:69 #: code:addons/web/static/src/js/services/crash_manager.js:13 #: code:addons/web/static/src/js/services/crash_manager.js:14 -#: code:addons/web/static/src/js/views/basic/basic_controller.js:78 +#: code:addons/web/static/src/js/views/basic/basic_controller.js:82 #: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:92 #: code:addons/web/static/src/js/views/list/list_renderer.js:353 -#: code:addons/web/static/src/xml/base.xml:613 +#: code:addons/web/static/src/xml/base.xml:611 #, python-format msgid "Warning" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/widgets/attach_document.js:87 +#: code:addons/web/static/src/js/widgets/attach_document.js:90 #, python-format msgid "Warning : You have to save first before attaching a file." msgstr "" @@ -3514,8 +3654,8 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:31 -#: code:addons/web/static/src/xml/base.xml:566 +#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:32 +#: code:addons/web/static/src/xml/base.xml:564 #: code:addons/web/static/src/xml/web_calendar.xml:81 #, python-format msgid "Week" @@ -3530,7 +3670,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:1346 +#: code:addons/web/static/src/xml/base.xml:1386 #, python-format msgid "What do you want to do?" msgstr "" @@ -3557,30 +3697,30 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/fields/basic_fields.js:2356 +#: code:addons/web/static/src/js/fields/basic_fields.js:2352 #, python-format msgid "Wrong value entered!" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:297 +#: code:addons/web/static/src/xml/base.xml:296 #, python-format msgid "XML ID:" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:34 -#: code:addons/web/static/src/xml/base.xml:569 +#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:35 +#: code:addons/web/static/src/xml/base.xml:567 #, python-format msgid "Year" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/kanban/kanban_record.js:24 -#: code:addons/web/static/src/xml/base.xml:872 +#: code:addons/web/static/src/js/views/kanban/kanban_record.js:23 +#: code:addons/web/static/src/xml/base.xml:870 #: code:addons/web/static/src/xml/kanban.xml:83 #, python-format msgid "Yellow" @@ -3596,14 +3736,14 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:19 +#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:20 #, python-format msgid "Yesterday" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/chrome/abstract_web_client.js:353 +#: code:addons/web/static/src/js/chrome/abstract_web_client.js:357 #, python-format msgid "You are back online" msgstr "" @@ -3623,7 +3763,7 @@ msgid "You cannot follow relations for this field chain construction" msgstr "" #. module: web -#: code:addons/web/controllers/main.py:809 +#: code:addons/web/controllers/main.py:794 #, python-format msgid "You cannot leave any password empty." msgstr "" @@ -3651,7 +3791,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/services/crash_manager.js:216 +#: code:addons/web/static/src/js/services/crash_manager.js:229 #, python-format msgid "Your Odoo session expired. Please refresh the current web page." msgstr "" @@ -3665,7 +3805,15 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/kanban/kanban_record.js:246 +#: code:addons/web/static/src/js/widgets/name_and_signature.js:451 +#: code:addons/web/static/src/xml/name_and_signature.xml:44 +#, python-format +msgid "Your name" +msgstr "" + +#. module: web +#. openerp-web +#: code:addons/web/static/src/js/views/kanban/kanban_record.js:256 #, python-format msgid "[No widget %s]" msgstr "" @@ -3707,7 +3855,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:646 +#: code:addons/web/static/src/xml/base.xml:644 #, python-format msgid "all records" msgstr "" @@ -3743,16 +3891,16 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:283 -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:312 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:276 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:305 #, python-format msgid "greater than" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:285 -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:314 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:278 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:307 #, python-format msgid "greater than or equal to" msgstr "" @@ -3766,31 +3914,45 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:304 -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:339 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:297 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:332 #: code:addons/web/static/src/js/widgets/domain_selector.js:863 -#: code:addons/web/static/src/xml/base.xml:734 +#: code:addons/web/static/src/xml/base.xml:732 #, python-format msgid "is" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:196 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:187 #, python-format msgid "is after" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:197 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:189 +#, python-format +msgid "is after or equal to" +msgstr "" + +#. module: web +#. openerp-web +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:188 #, python-format msgid "is before" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:198 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:190 +#, python-format +msgid "is before or equal to" +msgstr "" + +#. module: web +#. openerp-web +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:191 #, python-format msgid "is between" msgstr "" @@ -3798,23 +3960,23 @@ msgstr "" #. module: web #. openerp-web #: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:169 -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:194 -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:281 -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:310 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:185 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:274 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:303 #, python-format msgid "is equal to" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:358 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:351 #, python-format msgid "is false" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:340 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:333 #: code:addons/web/static/src/js/widgets/domain_selector.js:864 #, python-format msgid "is not" @@ -3830,9 +3992,9 @@ msgstr "" #. module: web #. openerp-web #: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:170 -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:195 -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:282 -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:311 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:186 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:275 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:304 #, python-format msgid "is not equal to" msgstr "" @@ -3840,10 +4002,10 @@ msgstr "" #. module: web #. openerp-web #: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:172 -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:200 -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:288 -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:317 -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:342 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:193 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:281 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:310 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:335 #: code:addons/web/static/src/js/widgets/domain_selector.js:37 #, python-format msgid "is not set" @@ -3852,10 +4014,10 @@ msgstr "" #. module: web #. openerp-web #: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:171 -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:199 -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:287 -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:316 -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:341 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:192 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:280 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:309 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:334 #: code:addons/web/static/src/js/widgets/domain_selector.js:36 #, python-format msgid "is set" @@ -3863,22 +4025,22 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:357 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:350 #, python-format msgid "is true" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/core/utils.js:113 +#: code:addons/web/static/src/js/core/utils.js:304 #, python-format msgid "kMGTPE" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:284 -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:313 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:277 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:306 #, python-format msgid "less than" msgstr "" @@ -3892,15 +4054,15 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:286 -#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:315 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:279 +#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:308 #, python-format msgid "less than or equal to" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:736 +#: code:addons/web/static/src/xml/base.xml:734 #, python-format msgid "not" msgstr "" @@ -3935,14 +4097,14 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:655 +#: code:addons/web/static/src/xml/base.xml:653 #, python-format msgid "of the following rules:" msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:670 +#: code:addons/web/static/src/xml/base.xml:668 #, python-format msgid "of:" msgstr "" @@ -3951,8 +4113,8 @@ msgstr "" #. openerp-web #: code:addons/web/static/src/js/views/control_panel/search/search_facet.js:95 #: code:addons/web/static/src/js/views/control_panel/search/search_facet.js:97 -#: code:addons/web/static/src/xml/base.xml:727 -#: code:addons/web/static/src/xml/base.xml:1257 +#: code:addons/web/static/src/xml/base.xml:725 +#: code:addons/web/static/src/xml/base.xml:1297 #, python-format msgid "or" msgstr "" @@ -3966,7 +4128,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:611 +#: code:addons/web/static/src/xml/base.xml:609 #, python-format msgid "record(s)" msgstr "" @@ -3980,7 +4142,7 @@ msgstr "" #. module: web #. openerp-web -#: code:addons/web/static/src/xml/base.xml:736 +#: code:addons/web/static/src/xml/base.xml:734 #, python-format msgid "set" msgstr "" diff --git a/addons/web/models/models.py b/addons/web/models/models.py index 2a404c58df0..12e6a422507 100644 --- a/addons/web/models/models.py +++ b/addons/web/models/models.py @@ -146,7 +146,7 @@ class Base(models.AbstractModel): fields.append(parent_name) return { 'parent_field': parent_name, - 'values': Comodel.search_read([], fields), + 'values': Comodel.with_context(hierarchical_naming=False).search_read([], fields), } @api.model diff --git a/addons/web/static/lib/qweb/qweb2.js b/addons/web/static/lib/qweb/qweb2.js index 72e65f985a8..5126138bc36 100644 --- a/addons/web/static/lib/qweb/qweb2.js +++ b/addons/web/static/lib/qweb/qweb2.js @@ -173,7 +173,7 @@ var QWeb2 = { new_dict[as_first] = index === 0; new_dict[as_last] = index + 1 === size; new_dict[as_parity] = (index % 2 == 1 ? 'odd' : 'even'); - if (cur.constructor === Object) { + if (cur && cur.constructor === Object) { this.extend(new_dict, cur); } new_dict[as] = cur; diff --git a/addons/web/static/src/js/fields/relational_fields.js b/addons/web/static/src/js/fields/relational_fields.js index 15b7975aa42..ef916d31ff7 100644 --- a/addons/web/static/src/js/fields/relational_fields.js +++ b/addons/web/static/src/js/fields/relational_fields.js @@ -21,6 +21,7 @@ var dialogs = require('web.view_dialogs'); var core = require('web.core'); var data = require('web.data'); var Dialog = require('web.Dialog'); +var KanbanRecord = require('web.KanbanRecord'); var KanbanRenderer = require('web.KanbanRenderer'); var ListRenderer = require('web.ListRenderer'); var Pager = require('web.Pager'); @@ -1407,6 +1408,59 @@ var FieldX2Many = AbstractField.extend({ }, }); +var One2ManyKanbanRecord = KanbanRecord.extend({ + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * Apply same logic as in the ListRenderer: buttons with type="object" + * are disabled for no saved yet records, as calling the python method + * with no id would make no sense. + * + * To avoid to expose this logic inside all Kanban views, we define + * a specific KanbanRecord Class for the One2many case. + * + * This could be refactored to prevent from duplicating this logic in + * list and kanban views. + * + * @private + */ + _postProcessObjectButtons: function () { + var self = this; + // if the res_id is defined, it's already correctly handled by the Kanban record global event click + if (!this.state.res_id) { + this.$('.oe_kanban_action[data-type=object]').each(function (index, button) { + var $button = $(button); + if ($button.attr('warn')) { + $button.on('click', function (e) { + e.stopPropagation(); + self.do_warn(_t('Warning'), _t('Please click on the "save" button first.')); + }); + } else { + $button.attr('disabled', 'disabled'); + } + }); + } + }, + /** + * @override + * @private + */ + _render: function () { + var self = this; + return this._super.apply(this, arguments).then(function () { + self._postProcessObjectButtons(); + }); + }, +}); + +var One2ManyKanbanRenderer = KanbanRenderer.extend({ + config: _.extend({}, KanbanRenderer.prototype.config, { + KanbanRecord: One2ManyKanbanRecord, + }), +}); + var FieldOne2Many = FieldX2Many.extend({ className: 'o_field_one2many', supportedFieldTypes: ['one2many'], @@ -1461,6 +1515,16 @@ var FieldOne2Many = FieldX2Many.extend({ //-------------------------------------------------------------------------- /** + * @override + * @private + */ + _getRenderer: function () { + if (this.view.arch.tag === 'kanban') { + return One2ManyKanbanRenderer; + } + return this._super.apply(this, arguments); + }, + /** * Overrides to only render the buttons if the 'create' action is available. * * @override diff --git a/addons/web/static/src/js/views/basic/basic_model.js b/addons/web/static/src/js/views/basic/basic_model.js index 95b6d439ec1..de7fd93d59b 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -3647,6 +3647,7 @@ var BasicModel = AbstractModel.extend({ var res_id, value; var res_ids = params.res_ids || []; var data = params.data || (type === 'record' ? {} : []); + var context = params.context; if (type === 'record') { res_id = params.res_id || (params.data && params.data.id); if (res_id) { @@ -3654,6 +3655,9 @@ var BasicModel = AbstractModel.extend({ } else { res_id = _.uniqueId('virtual_'); } + // it doesn't make sense for a record datapoint to have those keys + // besides, it will mess up x2m and actions down the line + context = _.omit(context, ['orderedBy', 'group_by']); } else { var isValueArray = params.value instanceof Array; res_id = isValueArray ? params.value[0] : undefined; @@ -3671,7 +3675,7 @@ var BasicModel = AbstractModel.extend({ _domains: {}, _rawChanges: {}, aggregateValues: params.aggregateValues || {}, - context: params.context, + context: context, count: params.count || res_ids.length, data: data, domain: params.domain || [], diff --git a/addons/web/static/src/js/views/field_manager_mixin.js b/addons/web/static/src/js/views/field_manager_mixin.js index 99aabc6e66d..b02743593a6 100644 --- a/addons/web/static/src/js/views/field_manager_mixin.js +++ b/addons/web/static/src/js/views/field_manager_mixin.js @@ -52,6 +52,8 @@ var FieldManagerMixin = { if (event.data.force_save) { return self.model.save(dataPointID).then(function () { return self._confirmSave(dataPointID); + }, function /* on_failure */ () { + return self._rejectSave(dataPointID); }); } else if (options.notifyChange !== false) { return self._confirmChange(dataPointID, result, event); @@ -84,6 +86,19 @@ var FieldManagerMixin = { _confirmSave: function (id) { return Promise.resolve(); }, + /** + * This method will be called whenever a save has been triggered by a change + * and has failed. For example, when a statusbar button is clicked in a + * readonly form view. + * + * @abstract + * @private + * @param {string} id The basicModel ID for the saved record + * @returns {Deferred} + */ + _rejectSave: function (id) { + return Promise.resolve(); + }, //-------------------------------------------------------------------------- // Handlers diff --git a/addons/web/static/src/js/views/form/form_controller.js b/addons/web/static/src/js/views/form/form_controller.js index 5616a5099bc..9997e144ca3 100644 --- a/addons/web/static/src/js/views/form/form_controller.js +++ b/addons/web/static/src/js/views/form/form_controller.js @@ -375,6 +375,19 @@ var FormController = BasicController.extend({ this._super(state); }, /** + * Overrides to reload the form when saving failed in readonly (e.g. after + * a change on a widget like priority or statusbar). + * + * @override + * @private + */ + _rejectSave: function () { + if (this.mode === 'readonly') { + return this.reload(); + } + return this._super.apply(this, arguments); + }, + /** * Calls unfreezeOrder when changing the mode. * Also, when there is a change of mode, the tracking of last activated * field is reset, so that the following field activation process starts diff --git a/addons/web/static/src/js/views/form/form_renderer.js b/addons/web/static/src/js/views/form/form_renderer.js index 97ab575cbc3..98f971a0c05 100644 --- a/addons/web/static/src/js/views/form/form_renderer.js +++ b/addons/web/static/src/js/views/form/form_renderer.js @@ -390,7 +390,7 @@ var FormRenderer = BasicRenderer.extend({ var visible_buttons = buttons_partition[1]; // Get the unfolded buttons according to window size - var nb_buttons = [2, 2, 4, 6][config.device.size_class] || 7; + var nb_buttons = self._renderButtonBoxNbButtons(); var unfolded_buttons = visible_buttons.slice(0, nb_buttons).concat(invisible_buttons); // Get the folded buttons @@ -432,6 +432,13 @@ var FormRenderer = BasicRenderer.extend({ return $result; }, /** + * @private + * @returns {integer} + */ + _renderButtonBoxNbButtons: function () { + return [2, 2, 4, 6][config.device.size_class] || 7; + }, + /** * @private * @param {Object} node * @returns {jQueryElement} diff --git a/addons/web/static/src/js/views/kanban/kanban_record.js b/addons/web/static/src/js/views/kanban/kanban_record.js index 116de142b0c..212a19a2eae 100644 --- a/addons/web/static/src/js/views/kanban/kanban_record.js +++ b/addons/web/static/src/js/views/kanban/kanban_record.js @@ -182,24 +182,30 @@ var KanbanRecord = Widget.extend({ */ _getImageURL: function (model, field, id, cache, options) { options = options || {}; + id = (_.isArray(id) ? id[0] : id) || false; + field = options.preview_image || field; + var isCurrentRecord = this.modelName === model && this.recordData.id === id; var url; - if (this.record[field] && this.record[field].raw_value && !utils.is_bin_size(this.record[field].raw_value)) { + if (isCurrentRecord && this.record[field] && this.record[field].raw_value && !utils.is_bin_size(this.record[field].raw_value)) { // Use magic-word technique for detecting image type url = 'data:image/' + this.file_type_magic_word[this.record[field].raw_value[0]] + ';base64,' + this.record[field].raw_value; - } else if (this.record[field] && ! this.record[field].raw_value) { + } else if (!model || !field || !id || (isCurrentRecord && this.record[field] && !this.record[field].raw_value)) { url = "/web/static/src/img/placeholder.png"; } else { - if (_.isArray(id)) { id = id[0]; } - if (!id) { id = undefined; } - if (options.preview_image) - field = options.preview_image; - var unique = this.record.__last_update && this.record.__last_update.value.replace(/[^0-9]/g, ''); var session = this.getSession(); - url = session.url('/web/image', { model: model, field: field, id: id, unique: unique }); + var params = { + model: model, + field: field, + id: id + }; + if (isCurrentRecord) { + params.unique = this.record.__last_update && this.record.__last_update.value.replace(/[^0-9]/g, ''); + } if (cache !== undefined) { // Set the cache duration in seconds. - url += '&cache=' + parseInt(cache, 10); + params.cache = parseInt(cache, 10); } + url = session.url('/web/image', params); } return url; }, diff --git a/addons/web/static/src/js/views/pivot/pivot_model.js b/addons/web/static/src/js/views/pivot/pivot_model.js index 989eaa448a9..e28a5baed61 100644 --- a/addons/web/static/src/js/views/pivot/pivot_model.js +++ b/addons/web/static/src/js/views/pivot/pivot_model.js @@ -316,12 +316,18 @@ var PivotModel = AbstractModel.extend({ return { has_data: false, colGroupBys: this.data.main_col.root.groupbys, + // colGroupBys: this.data.main_col.groupbys, + // colGroupBys: this.data.colGroupBys, rowGroupBys: this.data.main_row.root.groupbys, + // rowGroupBys: this.data.main_row.groupbys, + // rowGroupBys: this.data.groupedBy, measures: this.data.measures, }; } return { colGroupBys: this.data.main_col.root.groupbys, + // colGroupBys: this.data.main_col.groupbys, + // colGroupBys: this.data.colGroupBys, context: this.data.context, domain: this.data.domain, compare: this.data.compare, @@ -332,6 +338,8 @@ var PivotModel = AbstractModel.extend({ measures: this.data.measures, rows: !isRaw && this._computeRows(), rowGroupBys: this.data.main_row.root.groupbys, + // rowGroupBys: this.data.main_row.groupbys, + // rowGroupBys: this.data.groupedBy, sortedColumn: this.data.sorted_column, }; }, @@ -440,12 +448,10 @@ var PivotModel = AbstractModel.extend({ // if we don't have the key 'groupBy' in params. In that case, // we want to have the full open state for the groupbys. self._updateTree(old_row.root, self.data.main_row.root); - self._updateMainGroupBys(old_row, self.data.main_row); } if (!('pivot_column_groupby' in (params.context || {}))) { self._updateTree(old_col.root, self.data.main_col.root); - self._updateMainGroupBys(old_col, self.data.main_col); } }); }, @@ -985,7 +991,8 @@ var PivotModel = AbstractModel.extend({ }); var index = 0; - var rowGroupBys = !_.isEmpty(this.data.groupedBy) ? this.data.groupedBy : this.initialRowGroupBys; + var rowGroupBys = !_.isEmpty(this.data.groupedBy) ? this.data.groupedBy : this.initialRowGroupBys.slice(); + this.data.groupedBy = rowGroupBys; var colGroupBys = this.data.colGroupBys; var dataPoint, row, col, attrs, cell_value; var main_row_header, main_col_header; @@ -1118,19 +1125,6 @@ var PivotModel = AbstractModel.extend({ } }, /** - * Updates the groupBys that the main[row | col] holds - * - * @private - * @param {Object} old: The main abstract header before reload - * @param {Object} main: The main abstract header after reload - * - */ - _updateMainGroupBys: function (old, main) { - var new_groupby_length = this._getHeaderDepth(main.root) - 1; - var new_groupby_list = old.root.groupbys.slice(0, new_groupby_length); - main.root.groupbys = new_groupby_list; - }, - /** * @param {Object} old_tree * @param {Object} new_tree */ diff --git a/addons/web/static/src/scss/fontawesome_overriden.scss b/addons/web/static/src/scss/fontawesome_overriden.scss index 5fde7a750cd..a234dbc9f81 100644 --- a/addons/web/static/src/scss/fontawesome_overriden.scss +++ b/addons/web/static/src/scss/fontawesome_overriden.scss @@ -1,36 +1,38 @@ // This is rtl language specific fix // It will override the font awesome symbols and flip them 180 degree -.fa { - &.fa-align-right, - &.fa-align-left, - &.fa-chevron-right, - &.fa-chevron-left, - &.fa-arrow-right, - &.fa-arrow-left, - &.fa-hand-o-right, - &.fa-hand-o-left, - &.fa-arrow-circle-right, - &.fa-arrow-circle-left, - &.fa-caret-right, - &.fa-caret-left, - &.fa-rotate-right, - &.fa-rotate-left, - &.fa-angle-double-right, - &.fa-angle-double-left, - &.fa-angle-right, - &.fa-angle-left, - &.fa-quote-right, - &.fa-quote-left, - &.fa-chevron-circle-right, - &.fa-chevron-circle-left, - &.fa-long-arrow-right, - &.fa-long-arrow-left, - &.fa-toggle-right, - &.fa-toggle-left, - &.fa-caret-square-o-right, - &.fa-arrow-circle-o-left, - &.fa-arrow-circle-o-right, - &.fa-caret-square-o-left { - transform: rotate(180deg); +.o_rtl { + .fa { + &.fa-align-right, + &.fa-align-left, + &.fa-chevron-right, + &.fa-chevron-left, + &.fa-arrow-right, + &.fa-arrow-left, + &.fa-hand-o-right, + &.fa-hand-o-left, + &.fa-arrow-circle-right, + &.fa-arrow-circle-left, + &.fa-caret-right, + &.fa-caret-left, + &.fa-rotate-right, + &.fa-rotate-left, + &.fa-angle-double-right, + &.fa-angle-double-left, + &.fa-angle-right, + &.fa-angle-left, + &.fa-quote-right, + &.fa-quote-left, + &.fa-chevron-circle-right, + &.fa-chevron-circle-left, + &.fa-long-arrow-right, + &.fa-long-arrow-left, + &.fa-toggle-right, + &.fa-toggle-left, + &.fa-caret-square-o-right, + &.fa-arrow-circle-o-left, + &.fa-arrow-circle-o-right, + &.fa-caret-square-o-left { + transform: rotate(180deg); + } } -} +}
\ No newline at end of file diff --git a/addons/web/static/src/scss/form_view.scss b/addons/web/static/src/scss/form_view.scss index 812e6cbd6cc..99430bd0eed 100644 --- a/addons/web/static/src/scss/form_view.scss +++ b/addons/web/static/src/scss/form_view.scss @@ -570,6 +570,9 @@ &.o_form_readonly .o_field_widget .o_list_view .o_row_handle { display: none; // Hide the handler in non-edit mode } + .o_field_widget.o_readonly_modifier .o_list_view .o_row_handle { + display: none; // Hide the handler on readonly fields + } // Attachments .oe_attachment { diff --git a/addons/web/static/src/scss/kanban_view.scss b/addons/web/static/src/scss/kanban_view.scss index b9abdb14d48..c1b05807ddf 100644 --- a/addons/web/static/src/scss/kanban_view.scss +++ b/addons/web/static/src/scss/kanban_view.scss @@ -101,7 +101,7 @@ .oe_kanban_bottom_left, .oe_kanban_bottom_right { display: flex; align-items: center; - height: 20px; + min-height: 20px; } .oe_kanban_bottom_left { flex: 1 1 auto; diff --git a/addons/web/static/src/scss/search_view_mobile.scss b/addons/web/static/src/scss/search_view_mobile.scss index c3c264649ea..dd72aaae83b 100644 --- a/addons/web/static/src/scss/search_view_mobile.scss +++ b/addons/web/static/src/scss/search_view_mobile.scss @@ -7,7 +7,7 @@ padding: 0; width: 100%; background-color: white; - z-index: 1000; + z-index: $zindex-modal; overflow: auto; .o_mobile_search_header { height: 46px; @@ -89,7 +89,6 @@ right: 0; padding: 15px; font-size: 17px; - z-index: 1000; } } } diff --git a/addons/web/static/tests/fields/basic_fields_tests.js b/addons/web/static/tests/fields/basic_fields_tests.js index a7d3582b5ca..9308823801b 100644 --- a/addons/web/static/tests/fields/basic_fields_tests.js +++ b/addons/web/static/tests/fields/basic_fields_tests.js @@ -346,9 +346,9 @@ QUnit.module('basic_fields', { res_id: 2, }); - assert.strictEqual(form.$('.o_stat_text.o_not_hover:contains(Production Environment)').length, 1, + assert.containsOnce(form, ".o_stat_text.o_not_hover:contains(Production Environment)", "button should contain correct string"); - assert.strictEqual(form.$('.o_stat_text.o_hover:contains(Switch to test environment)').length, 1, + assert.containsOnce(form, ".o_stat_text.o_hover:contains(Switch to test environment)", "button should display correct string when hovering"); form.destroy(); }); diff --git a/addons/web/static/tests/fields/relational_fields/field_one2many_tests.js b/addons/web/static/tests/fields/relational_fields/field_one2many_tests.js index c29bf4f1ec9..be2cad2f1f9 100644 --- a/addons/web/static/tests/fields/relational_fields/field_one2many_tests.js +++ b/addons/web/static/tests/fields/relational_fields/field_one2many_tests.js @@ -4,7 +4,9 @@ odoo.define('web.field_one_to_many_tests', function (require) { var AbstractField = require('web.AbstractField'); var concurrency = require('web.concurrency'); var FormView = require('web.FormView'); +var KanbanRecord = require('web.KanbanRecord'); var ListRenderer = require('web.ListRenderer'); +var NotificationService = require('web.NotificationService'); var relationalFields = require('web.relational_fields'); var testUtils = require('web.test_utils'); var fieldUtils = require('web.field_utils'); @@ -5412,6 +5414,145 @@ QUnit.module('fields', {}, function () { form.destroy(); }); + QUnit.test('one2many field with virtual ids with kanban button', async function (assert) { + assert.expect(25); + + testUtils.mock.patch(KanbanRecord, { + init: function () { + this._super.apply(this, arguments); + this._onKanbanActionClicked = this.__proto__._onKanbanActionClicked; + }, + }); + + this.data.partner.records[0].p = [4]; + + var form = await createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: '<form>' + + '<field name="p" mode="kanban">' + + '<kanban>' + + '<templates>' + + '<field name="foo"/>' + + '<t t-name="kanban-box">' + + '<div>' + + '<span><t t-esc="record.foo.value"/></span>' + + '<button type="object" class="btn btn-link fa fa-shopping-cart" name="button_warn" string="button_warn" warn="warn" />' + + '<button type="object" class="btn btn-link fa fa-shopping-cart" name="button_disabled" string="button_disabled" />' + + '</div>' + + '</t>' + + '</templates>' + + '</kanban>' + + '</field>' + + '</form>', + archs: { + 'partner,false,form': '<form><field name="foo"/></form>', + }, + res_id: 1, + services: { + notification: NotificationService.extend({ + notify: function (params) { + assert.step(params.type); + } + }), + }, + intercepts: { + execute_action: function (event) { + assert.step(event.data.action_data.name + '_' + event.data.env.model + '_' + event.data.env.currentID); + event.data.on_success(); + }, + }, + }); + + // 1. Define all css selector + var oKanbanView = '.o_field_widget .o_kanban_view'; + var oKanbanRecordActive = oKanbanView + ' .o_kanban_record:not(.o_kanban_ghost)'; + var oAllKanbanButton = oKanbanRecordActive + ' button[data-type="object"]'; + var btn1 = oKanbanRecordActive + ':nth-child(1) button[data-type="object"]'; + var btn2 = oKanbanRecordActive + ':nth-child(2) button[data-type="object"]'; + var btn1Warn = btn1 + '[data-name="button_warn"]'; + var btn1Disabled = btn1 + '[data-name="button_disabled"]'; + var btn2Warn = btn2 + '[data-name="button_warn"]'; + var btn2Disabled = btn2 + '[data-name="button_disabled"]'; + + // check if we already have one kanban card + assert.containsOnce(form, oKanbanView, "should have one inner kanban view for the one2many field"); + assert.containsOnce(form, oKanbanRecordActive, "should have one kanban records yet"); + + // we have 2 buttons + assert.containsN(form, oAllKanbanButton, 2, "should have 2 buttons type object"); + + // disabled ? + assert.containsNone(form, oAllKanbanButton + '[disabled]', "should not have button type object disabled"); + + // click on the button + await testUtils.dom.click(form.$(btn1Disabled)); + await testUtils.dom.click(form.$(btn1Warn)); + + // switch to edit mode + await testUtils.form.clickEdit(form); + + // click on existing buttons + await testUtils.dom.click(form.$(btn1Disabled)); + await testUtils.dom.click(form.$(btn1Warn)); + + // create new kanban + await testUtils.dom.click(form.$('.o_field_widget .o-kanban-button-new')); + + // save & close the modal + assert.strictEqual($('.modal-content input.o_field_widget').val(), 'My little Foo Value', + "should already have the default value for field foo"); + await testUtils.dom.click($('.modal-content .btn-primary').first()); + + // check new item + assert.containsN(form, oAllKanbanButton, 4, "should have 4 buttons type object"); + assert.containsN(form, btn1, 2, "should have 2 buttons type object in area 1"); + assert.containsN(form, btn2, 2, "should have 2 buttons type object in area 2"); + assert.containsOnce(form, oAllKanbanButton + '[disabled]', "should have 1 button type object disabled"); + + assert.strictEqual(form.$(btn2Disabled).attr('disabled'), 'disabled', 'Should have a button type object disabled in area 2'); + assert.strictEqual(form.$(btn2Warn).attr('disabled'), undefined, 'Should have a button type object not disabled in area 2'); + assert.strictEqual(form.$(btn2Warn).attr('warn'), 'warn', 'Should have a button type object with warn attr in area 2'); + + // click all buttons + await testUtils.dom.click(form.$(btn1Disabled)); + await testUtils.dom.click(form.$(btn1Warn)); + await testUtils.dom.click(form.$(btn2Disabled)); + await testUtils.dom.click(form.$(btn2Warn)); + + // save the form + await testUtils.form.clickSave(form); + + assert.containsNone(form, oAllKanbanButton + '[disabled]', "should not have button type object disabled after save"); + + // click all buttons + await testUtils.dom.click(form.$(btn1Disabled)); + await testUtils.dom.click(form.$(btn1Warn)); + await testUtils.dom.click(form.$(btn2Disabled)); + await testUtils.dom.click(form.$(btn2Warn)); + + assert.verifySteps([ + "button_disabled_partner_4", + "button_warn_partner_4", + + "button_disabled_partner_4", + "button_warn_partner_4", + + "button_disabled_partner_4", + "button_warn_partner_4", + "warning", // warn btn8 + + "button_disabled_partner_4", + "button_warn_partner_4", + "button_disabled_partner_8", + "button_warn_partner_8" + ], "should have triggered theses 11 clicks event"); + + testUtils.mock.unpatch(KanbanRecord); + form.destroy(); + }); + QUnit.test('focusing fields in one2many list', async function (assert) { assert.expect(2); diff --git a/addons/web/static/tests/fields/relational_fields_tests.js b/addons/web/static/tests/fields/relational_fields_tests.js index e8d89aaf00d..1641dfa0730 100644 --- a/addons/web/static/tests/fields/relational_fields_tests.js +++ b/addons/web/static/tests/fields/relational_fields_tests.js @@ -361,6 +361,43 @@ QUnit.module('relational_fields', { form.destroy(); }); + QUnit.test('embedded readonly one2many with handle widget', async function (assert) { + assert.expect(4); + + this.data.partner.records[0].turtles = [1, 2, 3]; + + var form = await createView({ + View: FormView, + model: 'partner', + data: this.data, + arch:'<form string="Partners">' + + '<sheet>' + + '<field name="turtles" readonly="1">' + + '<tree editable="top">' + + '<field name="turtle_int" widget="handle"/>' + + '<field name="turtle_foo"/>' + + '</tree>' + + '</field>' + + '</sheet>' + + '</form>', + res_id: 1, + }); + + assert.strictEqual(form.$('.o_row_handle').length, 3, + "there should be 3 handles (one for each row)"); + assert.strictEqual(form.$('.o_row_handle:visible').length, 0, + "the handles should be hidden in readonly mode"); + + await testUtils.form.clickEdit(form); + + assert.strictEqual(form.$('.o_row_handle').length, 3, + "the handles should still be there"); + assert.strictEqual(form.$('.o_row_handle:visible').length, 0, + "the handles should still be hidden (on readonly fields)"); + + form.destroy(); + }); + QUnit.test('delete a record while adding another one in a multipage', async function (assert) { // in a many2one with at least 2 pages, add a new line. Delete the line above it. // (the onchange makes it so that the virtualID is inserted in the middle of the currentResIDs.) diff --git a/addons/web/static/tests/views/form_tests.js b/addons/web/static/tests/views/form_tests.js index 96d36d8eec9..059bf453be2 100644 --- a/addons/web/static/tests/views/form_tests.js +++ b/addons/web/static/tests/views/form_tests.js @@ -6132,6 +6132,66 @@ QUnit.module('Views', { form.destroy(); }); + QUnit.test('form view is not broken if save failed in readonly mode on field changed', async function (assert) { + assert.expect(10); + + var failFlag = false; + + var form = await createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: '<form>' + + '<header><field name="trululu" widget="statusbar" clickable="True"/></header>' + + '</form>', + res_id: 1, + mockRPC: function (route, args) { + if (args.method === 'write') { + assert.step('write'); + if (failFlag) { + return Promise.reject(); + } + } else if (args.method === 'read') { + assert.step('read'); + } + return this._super.apply(this, arguments); + }, + }); + + var $selectedState = form.$('.o_statusbar_status button[data-value="4"]'); + assert.ok($selectedState.hasClass('btn-primary') && $selectedState.hasClass('disabled'), + "selected status should be btn-primary and disabled"); + + failFlag = true; + var $clickableState = form.$('.o_statusbar_status button[data-value="1"]'); + await testUtils.dom.click($clickableState); + + var $lastActiveState = form.$('.o_statusbar_status button[data-value="4"]'); + $selectedState = form.$('.o_statusbar_status button.btn-primary'); + assert.strictEqual($selectedState[0], $lastActiveState[0], + "selected status is AAA record after save fail"); + + failFlag = false; + $clickableState = form.$('.o_statusbar_status button[data-value="1"]'); + await testUtils.dom.click($clickableState); + + var $lastClickedState = form.$('.o_statusbar_status button[data-value="1"]'); + $selectedState = form.$('.o_statusbar_status button.btn-primary'); + assert.strictEqual($selectedState[0], $lastClickedState[0], + "last clicked status should be active"); + + assert.verifySteps([ + 'read', + 'write', // fails + 'read', // must reload when saving fails + 'write', // works + 'read', // must reload when saving works + 'read', // fixme: this read should not be necessary + ]); + + form.destroy(); + }); + QUnit.test('support password attribute', async function (assert) { assert.expect(3); @@ -6933,6 +6993,50 @@ QUnit.module('Views', { form.destroy(); }); + QUnit.test('Form view from ordered, grouped list view correct context', async function (assert) { + assert.expect(10); + this.data.partner.records[0].timmy = [12]; + + var form = await createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: '<form>' + + '<field name="foo"/>' + + '<field name="timmy"/>' + + '</form>', + archs: { + 'partner_type,false,list': + '<tree>' + + '<field name="name"/>' + + '</tree>', + }, + viewOptions: { + // Simulates coming from a list view with a groupby and filter + context: { + orderedBy: [{name: 'foo', asc:true}], + group_by: ['foo'], + } + }, + res_id: 1, + mockRPC: function (route, args) { + assert.step(args.model + ":" + args.method); + if (args.method === 'read') { + assert.ok(args.kwargs.context, 'context is present'); + assert.notOk('orderedBy' in args.kwargs.context, + 'orderedBy not in context'); + assert.notOk('group_by' in args.kwargs.context, + 'group_by not in context'); + } + return this._super.apply(this, arguments); + } + }); + + assert.verifySteps(['partner_type:load_views', 'partner:read', 'partner_type:read']); + + form.destroy(); + }); + QUnit.test('edition in form view on a "noCache" model', async function (assert) { assert.expect(5); diff --git a/addons/web/static/tests/views/kanban_tests.js b/addons/web/static/tests/views/kanban_tests.js index fbe4acff674..4cb99e17314 100644 --- a/addons/web/static/tests/views/kanban_tests.js +++ b/addons/web/static/tests/views/kanban_tests.js @@ -4898,7 +4898,7 @@ QUnit.module('Views', { } }); - QUnit.test('test displaying image (URL)', async function (assert) { + QUnit.test('test displaying image (URL, image field not set)', async function (assert) { assert.expect(1); var kanban = await createView({ @@ -4950,6 +4950,39 @@ QUnit.module('Views', { kanban.destroy(); }); + QUnit.test('test displaying image (for another record)', async function (assert) { + assert.expect(2); + + var kanban = await createView({ + View: KanbanView, + model: 'partner', + data: this.data, + arch: '<kanban class="o_kanban_test">' + + '<field name="id"/>' + + '<field name="image"/>' + + '<templates><t t-name="kanban-box"><div>' + + '<img t-att-src="kanban_image(\'partner\', \'image\', 1)"/>' + + '</div></t></templates>' + + '</kanban>', + mockRPC: function (route, args) { + if (route === 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACAA==') { + assert.ok("The view's image should have been fetched."); + return Promise.resolve(); + } + return this._super.apply(this, arguments); + }, + }); + + // the field image is set, but we request the image for a specific id + // -> for the record matching the ID, the base64 should be returned + // -> for all the other records, the image should be displayed by url + var imageOnRecord = kanban.$('img[data-src*="/web/image"][data-src*="&id=1"]'); + assert.strictEqual(imageOnRecord.length, this.data.partner.records.length - 1, + "display image by url when requested for another record"); + + kanban.destroy(); + }); + QUnit.test('check if the view destroys all widgets and instances', async function (assert) { assert.expect(1); diff --git a/addons/web/static/tests/views/pivot_tests.js b/addons/web/static/tests/views/pivot_tests.js index c0b46be3733..acd8b11b635 100644 --- a/addons/web/static/tests/views/pivot_tests.js +++ b/addons/web/static/tests/views/pivot_tests.js @@ -950,7 +950,7 @@ QUnit.module('Views', { var reloadParams = { context: {}, }; - pivot.reload(reloadParams); + await pivot.reload(reloadParams); assert.deepEqual(pivot.getOwnedQueryParams(), { context: { @@ -1111,14 +1111,14 @@ QUnit.module('Views', { pivot.$('.o_field_selection .dropdown-item[data-field=customer]').click(); // Set a domain - pivot.update({domain: [['product_id', '=', 41]]}); + await pivot.update({domain: [['product_id', '=', 41]]}); var expectedContext = {pivot_column_groupby: ['customer'], pivot_measures: ['__count'], pivot_row_groupby: []}; // Check that column groupbys were not lost - assert.deepEqual(pivot.getContext(), expectedContext, + assert.deepEqual(pivot.getOwnedQueryParams(), {context: expectedContext}, 'Column groupby not lost after first reload'); // Set a column groupby @@ -1126,14 +1126,46 @@ QUnit.module('Views', { pivot.$('.o_field_selection .dropdown-item[data-field=product_id]').click(); // Set a domain - pivot.update({domain: [['product_id', '=', 37]]}); + await pivot.update({domain: [['product_id', '=', 37]]}); + + expectedContext = {pivot_column_groupby: ['customer', 'product_id'], + pivot_measures: ['__count'], + pivot_row_groupby: []}; + + assert.deepEqual(pivot.getOwnedQueryParams(), {context: expectedContext}, + 'Column groupby not lost after second reload'); + + pivot.destroy(); + }); + + QUnit.skip('Empty results keep groupbys', async function (assert) { + assert.expect(2); + + var pivot = await createView({ + View: PivotView, + model: "partner", + data: this.data, + arch: '<pivot/>', + }); + + // Set a column groupby + pivot.$('thead .o_pivot_header_cell_closed').click(); + pivot.$('.o_field_selection .dropdown-item[data-field=customer]').click(); + + // Set a domain for empty results + await pivot.update({domain: [['id', '=', false]]}); - var expectedContext = {pivot_column_groupby: ['customer', 'product_id'], + var expectedContext = {pivot_column_groupby: ['customer'], pivot_measures: ['__count'], pivot_row_groupby: []}; + assert.deepEqual(pivot.getOwnedQueryParams(), {context: expectedContext}, + 'Column groupby not lost after empty results'); - assert.deepEqual(pivot.getContext(), expectedContext, - 'Column groupby not lost after second reload'); + // Set a domain for not empty results + await pivot.update({domain: [['product_id', '=', 37]]}); + + assert.deepEqual(pivot.getOwnedQueryParams(), {context: expectedContext}, + 'Column groupby not lost after reload after empty results'); pivot.destroy(); }); diff --git a/addons/web/views/webclient_templates.xml b/addons/web/views/webclient_templates.xml index 764084dd0ac..eda7ee2d855 100644 --- a/addons/web/views/webclient_templates.xml +++ b/addons/web/views/webclient_templates.xml @@ -63,9 +63,7 @@ <link rel="stylesheet" type="text/scss" href="/web/static/src/scss/keyboard.scss"/> <link rel="stylesheet" type="text/scss" href="/web/static/src/scss/name_and_signature.scss"/> - <t t-if="request and request.env['res.lang'].search([('code', '=', request.env.lang)]).direction == 'rtl'"> - <link rel="stylesheet" type="text/less" href="/web/static/src/scss/fontawesome_overriden.scss"/> - </t> + <link rel="stylesheet" type="text/less" href="/web/static/src/scss/fontawesome_overriden.scss"/> <script type="text/javascript" src="/web/static/lib/es6-promise/es6-promise-polyfill.js"></script> <script type="text/javascript" src="/web/static/lib/unhandled-rejection-polyfill/unhandled-rejection-polyfill.js"></script> diff --git a/addons/web_editor/i18n/web_editor.pot b/addons/web_editor/i18n/web_editor.pot index 4b7d946f994..06569a7a49c 100644 --- a/addons/web_editor/i18n/web_editor.pot +++ b/addons/web_editor/i18n/web_editor.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-24 10:58+0000\n" -"PO-Revision-Date: 2018-12-24 10:58+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -17,42 +17,49 @@ msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:35 +#: code:addons/web_editor/static/src/xml/ace.xml:55 +#, python-format +msgid "×" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:50 #, python-format msgid "'Alt tag' specifies an alternate text for an image, if the image cannot be displayed (slow connection, missing image, screen reader ...)." msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:44 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:59 #, python-format msgid "'Title tag' is shown as a tooltip when you hover the picture." msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:36 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:51 #, python-format msgid "(ALT Tag)" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:45 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:60 #, python-format msgid "(TITLE Tag)" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:209 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:246 #, python-format msgid "(URL or Embed)" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1029 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:47 #, python-format msgid "(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)" msgstr "" @@ -64,35 +71,35 @@ msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/widgets/ace.js:574 +#: code:addons/web_editor/static/src/js/common/ace.js:630 #, python-format msgid "A server error occured. Please check you correctly signed in and that the file you are saving is correctly formatted." msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:218 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:255 #, python-format msgid "Accepts" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1079 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:115 #, python-format msgid "Action" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/widgets/widgets.js:1150 +#: code:addons/web_editor/static/src/js/wysiwyg/widgets/media_dialog.js:36 #, python-format msgid "Add" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/widgets/widgets.js:647 +#: code:addons/web_editor/static/src/js/wysiwyg/widgets/media.js:607 #, python-format msgid "Add as document" msgstr "" @@ -104,71 +111,112 @@ msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:130 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:62 +#, python-format +msgid "Add column left" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:63 +#, python-format +msgid "Add column right" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:147 #, python-format msgid "Add document" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/widgets/widgets.js:647 -#: code:addons/web_editor/static/src/xml/editor.xml:131 +#: code:addons/web_editor/static/src/js/wysiwyg/widgets/media.js:607 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:148 #, python-format msgid "Add image" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1064 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:60 +#, python-format +msgid "Add row above" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:61 +#, python-format +msgid "Add row below" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/media.js:562 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:97 #, python-format msgid "Align center" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1063 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:96 #, python-format msgid "Align left" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1065 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:98 #, python-format msgid "Align right" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:100 +#: code:addons/web_editor/static/src/xml/ace.xml:37 +#, python-format +msgid "All SCSS Files" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:116 #, python-format msgid "All attachments have been loaded" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:118 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:135 #, python-format msgid "Alternate Upload" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/widgets/widgets.js:601 +#: code:addons/web_editor/static/src/js/wysiwyg/widgets/media.js:562 #, python-format msgid "Are you sure you want to delete this file ?" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:348 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:386 #, python-format msgid "Aspect Ratio" msgstr "" #. module: web_editor +#: model:ir.model,name:web_editor.model_web_editor_assets +msgid "Assets Utils" +msgstr "" + +#. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:387 +#: code:addons/web_editor/static/src/xml/editor.xml:15 #, python-format msgid "Assign a focal point that will always be visible" msgstr "" @@ -185,21 +233,28 @@ msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:212 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:249 #, python-format msgid "Attention" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:222 +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/media.js:903 +#, python-format +msgid "Auto" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:259 #, python-format msgid "Autoplay" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1070 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:104 #: code:addons/web_editor/static/src/xml/snippets.xml:28 #, python-format msgid "Background Color" @@ -207,157 +262,234 @@ msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/snippets.options.js:972 +#: code:addons/web_editor/static/src/js/wysiwyg_snippets/snippets.options.js:978 #, python-format msgid "Background Image Sizing" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:428 +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/font.js:527 +#, python-format +msgid "Background color" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/xml/editor.xml:56 #, python-format msgid "Background height" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:440 +#: code:addons/web_editor/static/src/xml/editor.xml:68 #, python-format msgid "Background position" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:466 +#: code:addons/web_editor/static/src/xml/editor.xml:94 #, python-format msgid "Background repeat" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:414 +#: code:addons/web_editor/static/src/xml/editor.xml:42 #, python-format msgid "Background size" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:417 +#: code:addons/web_editor/static/src/xml/editor.xml:45 #, python-format msgid "Background width" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/snippets.editor.js:255 +#: code:addons/web_editor/static/src/js/wysiwyg_snippets/snippets.editor.js:286 #, python-format msgid "Block" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:990 +#: code:addons/web_editor/static/src/xml/wysiwyg_colorpicker.xml:65 +#, python-format +msgid "Blue" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:9 #, python-format msgid "Bold" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/widgets/ace.js:834 +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/codeview.js:32 +#, python-format +msgid "Cannot edit HTML" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/common/ace.js:899 #, python-format msgid "Careful !" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:136 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:140 +#, python-format +msgid "Change current block's format as H1" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:141 +#, python-format +msgid "Change current block's format as H2" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:142 +#, python-format +msgid "Change current block's format as H3" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:143 +#, python-format +msgid "Change current block's format as H4" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:144 +#, python-format +msgid "Change current block's format as H5" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:145 #, python-format -msgid "Center" +msgid "Change current block's format as H6" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/widgets/widgets.js:81 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:139 +#, python-format +msgid "Change current block's format as a paragraph(P tag)" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/widgets/alt_dialog.js:24 #, python-format msgid "Change media description and tooltip" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:211 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:248 #, python-format msgid "Checked" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1077 -#: code:addons/web_editor/static/src/js/editor/translator.js:56 -#: code:addons/web_editor/static/src/js/widgets/widgets.js:1626 -#: code:addons/web_editor/static/src/xml/ace.xml:36 +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/bullet.js:16 +#, python-format +msgid "Checklist" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/widgets/colorpicker_dialog.js:35 +#, python-format +msgid "Choose" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:130 +#, python-format +msgid "Clean a style" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:113 +#: code:addons/web_editor/static/src/js/wysiwyg/widgets/crop_dialog.js:52 +#: code:addons/web_editor/static/src/xml/ace.xml:43 #, python-format msgid "Close" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1041 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:75 #, python-format msgid "Code" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1057 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:90 #, python-format msgid "Code View" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:295 +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/font.js:526 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:333 #, python-format msgid "Color" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/snippets.editor.js:253 +#: code:addons/web_editor/static/src/js/wysiwyg_snippets/snippets.editor.js:284 #, python-format msgid "Column" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:82 +#: code:addons/web_editor/static/src/xml/wysiwyg_colorpicker.xml:18 #, python-format msgid "Common colors" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:382 +#: code:addons/web_editor/static/src/xml/editor.xml:10 #, python-format msgid "Contain" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/translator.xml:7 -#, python-format -msgid "Content to translate" -msgstr "" - -#. module: web_editor -#. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:215 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:252 #, python-format msgid "Copy-paste your URL or embed code here" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:381 +#: code:addons/web_editor/static/src/xml/editor.xml:9 #, python-format msgid "Cover" msgstr "" @@ -374,24 +506,30 @@ msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:201 -#: code:addons/web_editor/static/src/js/widgets/widgets.js:1624 +#: code:addons/web_editor/static/src/js/wysiwyg/widgets/crop_dialog.js:50 #, python-format msgid "Crop Image" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:383 +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/media.js:904 +#, python-format +msgid "Crop image" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/xml/editor.xml:11 #, python-format msgid "Custom" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1069 +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/font.js:525 #, python-format -msgid "Custom Color" +msgid "Custom color" msgstr "" #. module: web_editor @@ -403,75 +541,105 @@ msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:218 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:255 #, python-format msgid "Dailymotion" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/summernote.js:2034 -#: code:addons/web_editor/static/src/xml/editor.xml:286 +#: code:addons/web_editor/static/src/js/wysiwyg/wysiwyg.js:271 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:324 #, python-format msgid "Default" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:467 +#: code:addons/web_editor/static/src/xml/editor.xml:95 #, python-format msgid "Define if/how the background image will be repeated" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:211 -#: code:addons/web_editor/static/src/xml/editor.xml:35 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:65 +#, python-format +msgid "Delete column" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:64 +#, python-format +msgid "Delete row" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:66 +#, python-format +msgid "Delete table" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:50 #, python-format msgid "Description" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/snippets.options.js:976 -#: code:addons/web_editor/static/src/js/widgets/widgets.js:38 -#: code:addons/web_editor/static/src/js/widgets/widgets.js:1633 -#: code:addons/web_editor/static/src/xml/editor.xml:12 +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/media.js:911 +#, python-format +msgid "Description:" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/widgets/colorpicker_dialog.js:36 +#: code:addons/web_editor/static/src/js/wysiwyg/widgets/crop_dialog.js:59 +#: code:addons/web_editor/static/src/js/wysiwyg/widgets/dialog.js:25 +#: code:addons/web_editor/static/src/js/wysiwyg_snippets/snippets.options.js:982 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:180 #, python-format msgid "Discard" msgstr "" #. module: web_editor +#: model:ir.model.fields,field_description:web_editor.field_web_editor_assets__display_name #: model:ir.model.fields,field_description:web_editor.field_web_editor_converter_test_sub__display_name msgid "Display Name" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:57 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:72 #, python-format msgid "Document" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1081 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:117 #, python-format msgid "Document Style" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:967 +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/link.js:351 +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/media.js:121 #, python-format msgid "Double-click to edit" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1010 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:33 #, python-format -msgid "Drag an image here" +msgid "Drag image or text here" msgstr "" #. module: web_editor @@ -483,6 +651,20 @@ msgstr "" #. module: web_editor #. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:34 +#, python-format +msgid "Drop image or Text" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/dropzone.js:171 +#, python-format +msgid "Dropping is prohibited in this area." +msgstr "" + +#. module: web_editor +#. openerp-web #: code:addons/web_editor/static/src/xml/snippets.xml:19 #, python-format msgid "Duplicate Container" @@ -490,115 +672,122 @@ msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:192 -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1019 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:53 #, python-format msgid "Edit" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/widgets/ace.js:97 +#: code:addons/web_editor/static/src/js/common/ace.js:97 #, python-format msgid "Expected " msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1002 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:118 +#, python-format +msgid "Extra keys" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/xml/ace.xml:20 +#: code:addons/web_editor/static/src/xml/ace.xml:31 #, python-format -msgid "File / Image" +msgid "Filter" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:290 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:328 #, python-format msgid "Flat" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:365 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:403 #, python-format msgid "Flip Horizontal" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:366 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:404 #, python-format msgid "Flip Vertical" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1007 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:26 #, python-format msgid "Float Left" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1009 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:28 #, python-format msgid "Float None" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1008 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:27 #, python-format msgid "Float Right" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1071 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:14 #, python-format -msgid "Font Color" +msgid "Font Family" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:998 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:18 #, python-format -msgid "Font Family" +msgid "Font Size" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:999 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:105 #, python-format -msgid "Font Size" +msgid "Foreground Color" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/ace.xml:43 +#: code:addons/web_editor/static/src/xml/ace.xml:49 #, python-format msgid "Format" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/widgets/widgets.js:1610 +#: code:addons/web_editor/static/src/js/wysiwyg/widgets/crop_dialog.js:36 #, python-format msgid "Free" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1056 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:89 #, python-format msgid "Full Screen" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/backend.xml:21 +#: code:addons/web_editor/static/src/xml/wysiwyg_colorpicker.xml:61 #, python-format -msgid "Fullscreen" +msgid "Green" msgstr "" #. module: web_editor @@ -608,243 +797,280 @@ msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1043 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:76 #, python-format msgid "Header 1" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1044 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:77 #, python-format msgid "Header 2" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1045 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:78 #, python-format msgid "Header 3" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1046 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:79 #, python-format msgid "Header 4" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1047 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:80 #, python-format msgid "Header 5" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1048 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:81 #, python-format msgid "Header 6" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1055 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:88 #, python-format msgid "Help" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/translator.xml:5 -#, python-format -msgid "Here are the visuals used to help you translate efficiently:" -msgstr "" - -#. module: web_editor -#. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:237 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:274 #, python-format msgid "Hide Dailymotion logo" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:234 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:271 #, python-format msgid "Hide Youtube logo" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:231 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:268 #, python-format msgid "Hide fullscreen button" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:228 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:265 #, python-format msgid "Hide player controls" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:240 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:277 #, python-format msgid "Hide sharing button" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:443 +#: code:addons/web_editor/static/src/xml/editor.xml:71 #, python-format msgid "Horizontal" msgstr "" #. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/xml/wysiwyg_colorpicker.xml:71 +#, python-format +msgid "Hue" +msgstr "" + +#. module: web_editor +#: model:ir.model.fields,field_description:web_editor.field_web_editor_assets__id #: model:ir.model.fields,field_description:web_editor.field_web_editor_converter_test_sub__id msgid "ID" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/editor.js:126 +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/media.js:1131 #, python-format -msgid "If you discard the current edition, all unsaved changes will be lost. You can cancel to return to the edition mode." +msgid "Icon size" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/widgets/ace.js:833 +#: code:addons/web_editor/static/src/xml/ace.xml:52 +#, python-format +msgid "If you edit and save this file, you will never receive updates anymore unless you reset your customizations." +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/common/ace.js:898 #, python-format msgid "If you reset this file, all your customizations will be lost as it will be reverted to the default file." msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:339 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:377 #, python-format msgid "If you want to crop it, please first download it from the original source and upload it in Odoo." msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:56 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:71 #, python-format msgid "Image" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1012 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:38 #, python-format msgid "Image URL" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/translator.xml:10 +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/dropzone.js:187 #, python-format -msgid "In this mode, you can only translate texts. To change the structure of the page, you must edit the master page.\n" -" Each modification on the master page is automatically applied to all translated versions." +msgid "Images are the only file types that can be dropped." msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/ace.xml:31 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:95 #, python-format -msgid "Include All SCSS Files" +msgid "Indent" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/ace.xml:22 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:138 #, python-format -msgid "Include Asset Bundles" +msgid "Indent current paragraph" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1062 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:69 #, python-format -msgid "Indent" +msgid "Insert Horizontal Rule" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1035 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:22 #, python-format -msgid "Insert Horizontal Rule" +msgid "Insert Image" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1003 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:51 #, python-format -msgid "Insert Image" +msgid "Insert Link" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1017 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:121 #, python-format -msgid "Insert Link" +msgid "Insert Paragraph" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1027 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:45 #, python-format msgid "Insert Video" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:218 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:146 +#, python-format +msgid "Insert horizontal rule" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:255 #, python-format msgid "Instagram" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/snippets.editor.js:1067 +#: code:addons/web_editor/static/src/js/wysiwyg_snippets/snippets.editor.js:1199 #, python-format msgid "Install" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:991 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:10 #, python-format msgid "Italic" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1066 +#: code:addons/web_editor/static/src/xml/ace.xml:12 +#, python-format +msgid "JS" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/common/ace.js:389 +#, python-format +msgid "JS file: %s" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:99 #, python-format msgid "Justify full" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1076 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:112 #, python-format msgid "Keyboard shortcuts" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:150 -#: code:addons/web_editor/static/src/xml/editor.xml:278 +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/link.js:282 +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/link.js:422 +#, python-format +msgid "Label" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/media.js:902 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:316 #, python-format msgid "Large" msgstr "" #. module: web_editor +#: model:ir.model.fields,field_description:web_editor.field_web_editor_assets____last_update #: model:ir.model.fields,field_description:web_editor.field_web_editor_converter_test_sub____last_update msgid "Last Modified on" msgstr "" @@ -861,70 +1087,97 @@ msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:997 +#: code:addons/web_editor/static/src/xml/wysiwyg_colorpicker.xml:79 +#, python-format +msgid "Lightness %" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:13 #, python-format msgid "Line Height" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1016 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:50 #, python-format msgid "Link" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:261 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:299 #, python-format msgid "Link Label" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/widgets/widgets.js:1342 +#: code:addons/web_editor/static/src/js/wysiwyg/widgets/link_dialog.js:31 #, python-format msgid "Link to" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:98 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:114 #, python-format msgid "Load more..." msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:225 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:262 #, python-format msgid "Loop" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:149 -#: code:addons/web_editor/static/src/xml/editor.xml:277 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:36 +#, python-format +msgid "Maximum file size" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:37 +#, python-format +msgid "Maximum file size exceeded." +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/media.js:902 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:315 #, python-format msgid "Medium" msgstr "" #. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:103 +#, python-format +msgid "More Color" +msgstr "" + +#. module: web_editor #: model:ir.model.fields,field_description:web_editor.field_web_editor_converter_test_sub__name msgid "Name" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:469 +#: code:addons/web_editor/static/src/xml/editor.xml:97 #, python-format msgid "No repeat" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:147 -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1073 +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/media.js:902 #: code:addons/web_editor/static/src/xml/snippets.xml:30 #, python-format msgid "None" @@ -932,102 +1185,164 @@ msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1039 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:73 #, python-format msgid "Normal" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/snippets.options.js:975 -#: code:addons/web_editor/static/src/js/editor/translator.js:98 +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/dropzone.js:171 +#, python-format +msgid "Not a dropzone" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg_snippets/snippets.options.js:981 #, python-format msgid "Ok" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/translator.js:97 +#: code:addons/web_editor/static/src/xml/ace.xml:35 #, python-format -msgid "Ok, never show me this again" +msgid "Only Custom SCSS Files" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1022 -#: code:addons/web_editor/static/src/xml/editor.xml:316 +#: code:addons/web_editor/static/src/xml/ace.xml:36 +#, python-format +msgid "Only Page SCSS Files" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/xml/ace.xml:24 +#, python-format +msgid "Only Views" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/xml/wysiwyg_colorpicker.xml:85 +#, python-format +msgid "Opacity %" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:56 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:354 #, python-format msgid "Open in new window" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1052 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:85 #, python-format msgid "Ordered list" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1061 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:40 +#, python-format +msgid "Original" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:94 #, python-format msgid "Outdent" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:287 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:125 +#, python-format +msgid "Outdent (when at the start of a line)" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:137 +#, python-format +msgid "Outdent current paragraph" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:325 #, python-format msgid "Outline" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:289 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:327 #, python-format msgid "Outline-Rounded" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:154 +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/media.js:901 #, python-format msgid "Padding" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1060 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:93 #, python-format msgid "Paragraph" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1080 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:116 #, python-format msgid "Paragraph formatting" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:58 +#: code:addons/web_editor/static/src/js/wysiwyg/widgets/colorpicker_dialog.js:33 +#, python-format +msgid "Pick a color" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:73 #, python-format msgid "Pictogram" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:246 -#: code:addons/web_editor/static/src/xml/editor.xml:324 -#: code:addons/web_editor/static/src/xml/editor.xml:326 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:21 +#, python-format +msgid "Picture" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:283 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:362 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:364 #, python-format msgid "Preview" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1040 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:74 #, python-format msgid "Quote" msgstr "" @@ -1114,23 +1429,30 @@ msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.js:344 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:102 #, python-format -msgid "Readonly field" +msgid "Recent Color" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1085 +#: code:addons/web_editor/static/src/xml/wysiwyg_colorpicker.xml:57 +#, python-format +msgid "Red" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:151 #, python-format msgid "Redo" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:196 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:123 #, python-format -msgid "Remove" +msgid "Redoes the last command" msgstr "" #. module: web_editor @@ -1142,105 +1464,113 @@ msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:996 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:12 #, python-format msgid "Remove Font Style" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1013 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:39 #, python-format msgid "Remove Image" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:401 +#: code:addons/web_editor/static/src/xml/editor.xml:29 #, python-format msgid "Repeat" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:470 +#: code:addons/web_editor/static/src/xml/editor.xml:98 #, python-format msgid "Repeat both" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:471 +#: code:addons/web_editor/static/src/xml/editor.xml:99 #, python-format msgid "Repeat x" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:472 +#: code:addons/web_editor/static/src/xml/editor.xml:100 #, python-format msgid "Repeat y" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/ace.xml:42 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:108 +#: code:addons/web_editor/static/src/xml/ace.xml:48 #, python-format msgid "Reset" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:369 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:407 #, python-format msgid "Reset Image" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/widgets/ace.js:490 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:109 +#, python-format +msgid "Reset to default" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/common/ace.js:533 #, python-format msgid "Reseting views is not supported yet" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1004 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:23 #, python-format msgid "Resize Full" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1005 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:24 #, python-format msgid "Resize Half" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1006 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:25 #, python-format msgid "Resize Quarter" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:361 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:399 #, python-format msgid "Rotate Left" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:362 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:400 #, python-format msgid "Rotate Right" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:288 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:326 #, python-format msgid "Rounded" msgstr "" @@ -1254,25 +1584,38 @@ msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/widgets/ace.js:364 +#: code:addons/web_editor/static/src/js/common/ace.js:386 #, python-format msgid "SCSS file: %s" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/widgets/widgets.js:37 -#: code:addons/web_editor/static/src/js/widgets/widgets.js:1629 -#: code:addons/web_editor/static/src/xml/ace.xml:35 -#: code:addons/web_editor/static/src/xml/editor.xml:13 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:154 +#, python-format +msgid "SPECIAL CHARACTERS" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/xml/wysiwyg_colorpicker.xml:75 +#, python-format +msgid "Saturation %" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/widgets/crop_dialog.js:55 +#: code:addons/web_editor/static/src/js/wysiwyg/widgets/dialog.js:20 +#: code:addons/web_editor/static/src/xml/ace.xml:42 #, python-format msgid "Save" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:74 #: code:addons/web_editor/static/src/xml/snippets.xml:44 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:90 #, python-format msgid "Search" msgstr "" @@ -1286,21 +1629,21 @@ msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:143 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:160 #, python-format msgid "Search a document" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:182 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:219 #, python-format msgid "Search a pictogram" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:144 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:161 #, python-format msgid "Search an image" msgstr "" @@ -1314,150 +1657,271 @@ msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/widgets/widgets.js:1149 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:155 +#, python-format +msgid "Select Special characters" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/widgets/media_dialog.js:35 #, python-format msgid "Select a Media" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1011 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:172 +#, python-format +msgid "Select a Picture" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:35 #, python-format msgid "Select from files" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/widgets/ace.js:572 +#: code:addons/web_editor/static/src/js/common/ace.js:628 #, python-format msgid "Server error" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:441 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:126 +#, python-format +msgid "Set a bold style" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:127 +#, python-format +msgid "Set a italic style" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:129 +#, python-format +msgid "Set a strikethrough style" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:128 +#, python-format +msgid "Set a underline style" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:132 +#, python-format +msgid "Set center align" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:134 +#, python-format +msgid "Set full align" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:131 +#, python-format +msgid "Set left align" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:133 +#, python-format +msgid "Set right align" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/xml/editor.xml:69 #, python-format msgid "Set the starting position of the background image." msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:415 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:107 +#, python-format +msgid "Set transparent" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/xml/editor.xml:43 #, python-format msgid "Sets the width and height of the background image in percent of the parent element." msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:161 +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/media.js:907 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:30 +#, python-format +msgid "Shape: Circle" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:32 +#, python-format +msgid "Shape: None" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/media.js:906 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:29 #, python-format -msgid "Shadow" +msgid "Shape: Rounded" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:273 +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/media.js:908 +#, python-format +msgid "Shape: Shadow" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/media.js:909 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:31 +#, python-format +msgid "Shape: Thumbnail" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:147 +#, python-format +msgid "Show Link Dialog" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:311 #, python-format msgid "Size" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:148 -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1042 -#: code:addons/web_editor/static/src/xml/editor.xml:276 +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/media.js:902 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:314 #, python-format msgid "Small" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:169 +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/media.js:1132 #, python-format msgid "Spin" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:993 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:15 #, python-format msgid "Strikethrough" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1038 -#: code:addons/web_editor/static/src/xml/editor.xml:283 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:72 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:321 #, python-format msgid "Style" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:994 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:16 #, python-format msgid "Subscript" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:995 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:17 #, python-format msgid "Superscript" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1032 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:124 +#, python-format +msgid "Tab" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:59 #, python-format msgid "Table" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/widgets/ace.js:362 +#: code:addons/web_editor/static/src/js/common/ace.js:383 #, python-format msgid "Template ID: %s" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1078 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:114 #, python-format msgid "Text formatting" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1020 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:54 #, python-format msgid "Text to display" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:135 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:152 #, python-format msgid "The URL does not contain any image. The file will be added in the document section." msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:136 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:153 #, python-format msgid "The URL does not seem to work" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:134 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:151 #, python-format msgid "The URL seems valid" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:165 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:202 #, python-format msgid "The image could not be deleted because it is used in the\n" " following pages or views:" @@ -1465,94 +1929,100 @@ msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/widgets/widgets.js:1085 +#: code:addons/web_editor/static/src/js/wysiwyg/widgets/media.js:1051 #, python-format msgid "The provided url does not reference any supported video" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/widgets/widgets.js:1079 +#: code:addons/web_editor/static/src/js/wysiwyg/widgets/media.js:1045 #, python-format msgid "The provided url is not valid" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:74 +#: code:addons/web_editor/static/src/xml/wysiwyg_colorpicker.xml:14 #, python-format msgid "Theme colors" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/editor.js:86 -#: code:addons/web_editor/static/src/js/editor/translator.js:181 -#, python-format -msgid "This document is not saved!" -msgstr "" - -#. module: web_editor -#. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:153 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:190 #, python-format msgid "This file is a public view attachment" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:154 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:191 #, python-format msgid "This file is attached to the current record" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:337 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:375 #, python-format msgid "This image is an external image" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:338 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:376 #, python-format msgid "This type of image is not supported for cropping." msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1021 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:55 #, python-format msgid "To what URL should this link go?" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:44 +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/bullet.js:17 #, python-format -msgid "Tooltip" +msgid "Toggle checkbox list" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/backend.xml:12 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:136 #, python-format -msgid "Translate" +msgid "Toggle ordered list" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:135 +#, python-format +msgid "Toggle unordered list" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:59 +#, python-format +msgid "Tooltip" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/translator.js:54 +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/transform.js:78 #, python-format -msgid "Translate Attribute" +msgid "Transform the picture (click twice to reset transformation)" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/translator.xml:8 +#: code:addons/web_editor/static/src/xml/backend.xml:6 #, python-format -msgid "Translated content" +msgid "Translate" msgstr "" #. module: web_editor @@ -1562,113 +2032,127 @@ msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/translator.js:95 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:106 #, python-format -msgid "Translation Info" +msgid "Transparent" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1072 +#: code:addons/web_editor/static/src/xml/wysiwyg_colorpicker.xml:16 #, python-format -msgid "Transparent" +msgid "Transparent colors" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:267 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:305 #, python-format msgid "URL or Email" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:992 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:11 #, python-format msgid "Underline" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1084 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:150 #, python-format msgid "Undo" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/widgets/ace.js:90 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:122 +#, python-format +msgid "Undoes the last command" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/js/common/ace.js:90 #, python-format msgid "Unexpected " msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1018 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:52 #, python-format msgid "Unlink" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1051 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:84 #, python-format msgid "Unordered list" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:113 +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/dropzone.js:187 +#, python-format +msgid "Unsupported file type" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:130 #, python-format msgid "Upload a document" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:114 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:131 #, python-format msgid "Upload an image" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:121 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:138 #, python-format msgid "Upload image without optimization" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:454 +#: code:addons/web_editor/static/src/xml/editor.xml:82 #, python-format msgid "Vertical" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1025 -#: code:addons/web_editor/static/src/xml/editor.xml:59 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:43 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:74 #, python-format msgid "Video" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1026 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:44 #, python-format msgid "Video Link" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:1028 +#: code:addons/web_editor/static/src/js/wysiwyg/translation.js:46 #, python-format -msgid "Video URL?" +msgid "Video URL" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:208 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:245 #, python-format msgid "Video code" msgstr "" @@ -1680,14 +2164,21 @@ msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:218 +#: code:addons/web_editor/static/src/xml/ace.xml:25 +#, python-format +msgid "Views and Assets bundles" +msgstr "" + +#. module: web_editor +#. openerp-web +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:255 #, python-format msgid "Vimeo" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:218 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:255 #, python-format msgid "Vine.co" msgstr "" @@ -1712,66 +2203,67 @@ msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:151 +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/media.js:902 #, python-format msgid "Xl" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/translator.xml:4 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:255 #, python-format -msgid "You are about to enter the translation mode." +msgid "Youku" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:218 +#: code:addons/web_editor/static/src/js/wysiwyg/plugin/codeview.js:31 #, python-format -msgid "Youku" +msgid "Your code contains JINJA conditions.\n" +"Remove them to return to WYSIWYG HTML edition." msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:218 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:255 #, python-format msgid "Youtube" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:357 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:395 #, python-format msgid "Zoom In" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:358 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:396 #, python-format msgid "Zoom Out" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:218 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:255 #, python-format msgid "and" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:420 -#: code:addons/web_editor/static/src/xml/editor.xml:431 -#: code:addons/web_editor/static/src/xml/editor.xml:446 -#: code:addons/web_editor/static/src/xml/editor.xml:457 +#: code:addons/web_editor/static/src/xml/editor.xml:48 +#: code:addons/web_editor/static/src/xml/editor.xml:59 +#: code:addons/web_editor/static/src/xml/editor.xml:74 +#: code:addons/web_editor/static/src/xml/editor.xml:85 #, python-format msgid "auto" msgstr "" #. module: web_editor #. openerp-web -#: code:addons/web_editor/static/src/xml/editor.xml:218 +#: code:addons/web_editor/static/src/xml/wysiwyg.xml:255 #, python-format msgid "videos" msgstr "" diff --git a/addons/web_editor/static/src/js/wysiwyg_snippets/snippets.options.js b/addons/web_editor/static/src/js/wysiwyg_snippets/snippets.options.js index 7ab6ea205d8..5c7a41ae8f3 100644 --- a/addons/web_editor/static/src/js/wysiwyg_snippets/snippets.options.js +++ b/addons/web_editor/static/src/js/wysiwyg_snippets/snippets.options.js @@ -132,7 +132,7 @@ var SnippetOption = Widget.extend({ * @param {jQuery} $opt - the related DOMElement option */ selectClass: function (previewMode, value, $opt) { - var $group = $opt && $opt.closest('.dropdown-submenu'); + var $group = $opt && $opt.parents('.dropdown-submenu').last(); if (!$group || !$group.length) { $group = this.$el; } @@ -295,13 +295,29 @@ var SnippetOption = Widget.extend({ }) .addClass('active'); - _processSelectClassElements(this.$el); + // Get submenus which are not inside submenus + var $submenus = this.$el.find('.dropdown-submenu') + .addBack('.dropdown-submenu') + .not('.dropdown-submenu .dropdown-submenu'); - function _processSelectClassElements($el) { + // Add unique active class for each submenu active item + _.each($submenus, function (submenu) { + var $elements = _getSelectClassElements($(submenu)); + _processSelectClassElements($elements); + }); + + // Add unique active class for out-of-submenu active item + var $externalElements = _getSelectClassElements(this.$el) + .not('.dropdown-submenu *, .dropdown-submenu'); + _processSelectClassElements($externalElements); + + function _getSelectClassElements($el) { + return $el.find('[data-select-class]') + .addBack('[data-select-class]'); + } + function _processSelectClassElements($elements) { var maxNbClasses = -1; - $el.find('[data-select-class]') - .addBack('[data-select-class]') - .removeClass('active') + $elements.removeClass('active') .filter(function () { var className = $(this).data('selectClass'); var nbClasses = className ? className.split(' ').length : 0; diff --git a/addons/web_editor/static/src/scss/web_editor.backend.scss b/addons/web_editor/static/src/scss/web_editor.backend.scss index 83062313b20..af2398bc98e 100644 --- a/addons/web_editor/static/src/scss/web_editor.backend.scss +++ b/addons/web_editor/static/src/scss/web_editor.backend.scss @@ -1,5 +1,6 @@ .oe_form_field_html { position: relative; + word-wrap: break-word; .note-editable { min-height: 180px; @@ -23,7 +24,6 @@ margin: 0; padding: 0; border: 0; - word-wrap: break-word; ul > li > p { margin: 0px; } diff --git a/addons/web_unsplash/i18n/web_unsplash.pot b/addons/web_unsplash/i18n/web_unsplash.pot index ae3226ca9cb..09349e16b81 100644 --- a/addons/web_unsplash/i18n/web_unsplash.pot +++ b/addons/web_unsplash/i18n/web_unsplash.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-24 10:59+0000\n" -"PO-Revision-Date: 2018-12-24 10:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -99,6 +99,11 @@ msgid "Please check your internet connection or contact administrator." msgstr "" #. module: web_unsplash +#: model:ir.model,name:web_unsplash.model_ir_qweb_field_image +msgid "Qweb Field Image" +msgstr "" + +#. module: web_unsplash #. openerp-web #: code:addons/web_unsplash/static/src/xml/unsplash_image_widget.xml:17 #, python-format diff --git a/addons/website/i18n/website.pot b/addons/website/i18n/website.pot index c5e74f6a5e1..c4a9e439806 100644 --- a/addons/website/i18n/website.pot +++ b/addons/website/i18n/website.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:58+0000\n" -"PO-Revision-Date: 2019-01-16 07:58+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/editor/snippets.options.js:1129 +#: code:addons/website/static/src/js/editor/snippets.options.js:1161 #, python-format msgid " Add Images" msgstr "" @@ -29,8 +29,8 @@ msgid "\" alert with a" msgstr "" #. module: website -#: code:addons/website/models/website.py:332 -#: code:addons/website/models/website.py:398 +#: code:addons/website/models/website.py:325 +#: code:addons/website/models/website.py:391 #, python-format msgid "%s (id:%s)" msgstr "" @@ -71,6 +71,11 @@ msgid "' did not match any pages." msgstr "" #. module: website +#: model_terms:ir.ui.view,arch_db:website.500 +msgid "(!!! This view will be removed )" +msgstr "" + +#. module: website #. openerp-web #: code:addons/website/static/src/xml/website.pageProperties.xml:33 #, python-format @@ -235,19 +240,26 @@ msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/tours/banner.js:74 +#: code:addons/website/static/src/js/tours/banner.js:99 #, python-format msgid "<b>Install a contact form</b> to improve this page." msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/tours/banner.js:79 +#: code:addons/website/static/src/js/tours/banner.js:104 #, python-format msgid "<b>Install new apps</b> to get more features. Let's install the <i>'Contact form'</i> app." msgstr "" #. module: website +#. openerp-web +#: code:addons/website/static/src/js/tours/banner.js:79 +#, python-format +msgid "<b>That's it!</b><p>Your page is all set to go live. Click the <b>Publish</b> button to publish it on the website.</p>" +msgstr "" + +#. module: website #: model_terms:ir.ui.view,arch_db:website.s_carousel msgid "<font style=\"background-color: rgb(255, 255, 255);\">Good writing is simple, but not simplistic.</font>" msgstr "" @@ -304,6 +316,11 @@ msgid "<i class=\"fa fa-align-left\"/>Alignment" msgstr "" #. module: website +#: model_terms:ir.ui.view,arch_db:website.snippet_options +msgid "<i class=\"fa fa-anchor\"/>Anchor Name" +msgstr "" + +#. module: website #: model_terms:ir.ui.view,arch_db:website.res_config_settings_view_form msgid "<i class=\"fa fa-arrow-right\"/>\n" " Create a Google Project and Get a Key" @@ -559,9 +576,23 @@ msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/tours/banner.js:54 +#: code:addons/website/static/src/js/tours/banner.js:57 +#, python-format +msgid "<p><b>Click here</b> to create a new page.</p>" +msgstr "" + +#. module: website +#. openerp-web +#: code:addons/website/static/src/js/tours/banner.js:53 +#, python-format +msgid "<p><b>Your homepage is live.</b></p><p>Let's add a new page for your site.</p>" +msgstr "" + +#. module: website +#. openerp-web +#: code:addons/website/static/src/js/tours/banner.js:61 #, python-format -msgid "<p><b>That's it.</b> Your homepage is live.</p><p>Continue adding more pages to your site or edit this page to make it even more awesome.</p>" +msgid "<p>Enter a title for the page.</p>" msgstr "" #. module: website @@ -764,7 +795,7 @@ msgstr "" #. module: website #: model_terms:ir.ui.view,arch_db:website.s_three_columns -msgid "Adapt these three columns to fit you design need. To duplicate, delete or move columns, select the column and use the top icons to perform your action." +msgid "Adapt these three columns to fit your design need. To duplicate, delete or move columns, select the column and use the top icons to perform your action." msgstr "" #. module: website @@ -810,7 +841,7 @@ msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/tours/banner.js:50 +#: code:addons/website/static/src/js/tours/banner.js:49 #, python-format msgid "After having checked how it looks on mobile, <b>close the preview</b>." msgstr "" @@ -860,6 +891,20 @@ msgid "Analyze the efficiency of your marketing campaigns by using trackable UTM msgstr "" #. module: website +#. openerp-web +#: code:addons/website/static/src/js/editor/snippets.options.js:1494 +#, python-format +msgid "Anchor Name" +msgstr "" + +#. module: website +#. openerp-web +#: code:addons/website/static/src/xml/website.editor.xml:94 +#, python-format +msgid "Anchor name" +msgstr "" + +#. module: website #: model:ir.actions.act_window,name:website.action_website_add_features #: model:ir.ui.menu,name:website.menu_website_add_features msgid "Apps" @@ -888,6 +933,11 @@ msgid "Are you sure you want to delete this page ?" msgstr "" #. module: website +#: model:ir.model,name:website.model_web_editor_assets +msgid "Assets Utils" +msgstr "" + +#. module: website #: model:ir.model,name:website.model_ir_attachment msgid "Attachment" msgstr "" @@ -919,9 +969,7 @@ msgid "Background" msgstr "" #. module: website -#. openerp-web -#: code:addons/website/static/src/xml/website.editor.xml:42 -#, python-format +#: model_terms:ir.ui.view,arch_db:website.theme_customize msgid "Background colors" msgstr "" @@ -1003,6 +1051,15 @@ msgid "CDN Filters" msgstr "" #. module: website +#: model:ir.model.fields,field_description:website.field_res_partner__can_publish +#: model:ir.model.fields,field_description:website.field_res_users__can_publish +#: model:ir.model.fields,field_description:website.field_website_page__can_publish +#: model:ir.model.fields,field_description:website.field_website_published_mixin__can_publish +#: model:ir.model.fields,field_description:website.field_website_published_multi_mixin__can_publish +msgid "Can publish" +msgstr "" + +#. module: website #. openerp-web #: code:addons/website/static/src/js/backend/dashboard.js:105 #: code:addons/website/static/src/js/menu/new_content.js:286 @@ -1052,6 +1109,13 @@ msgid "Change Icons" msgstr "" #. module: website +#. openerp-web +#: code:addons/website/static/src/js/editor/wysiwyg_multizone.js:144 +#, python-format +msgid "Changes you made may not be saved." +msgstr "" + +#. module: website #: model:ir.model.fields,field_description:website.field_website_page__field_parent msgid "Child Field" msgstr "" @@ -1073,6 +1137,13 @@ msgid "Choose a vibrant image and write an inspiring paragraph about it.<br/> It msgstr "" #. module: website +#. openerp-web +#: code:addons/website/static/src/xml/website.editor.xml:92 +#, python-format +msgid "Choose an anchor name" +msgstr "" + +#. module: website #: model_terms:ir.ui.view,arch_db:website.theme_customize msgid "Choose an image" msgstr "" @@ -1093,6 +1164,11 @@ msgid "Choose your layout" msgstr "" #. module: website +#: model_terms:ir.ui.view,arch_db:website.theme_customize +msgid "Choose your nav bar" +msgstr "" + +#. module: website #: model_terms:ir.ui.view,arch_db:website.snippet_options msgid "Circle" msgstr "" @@ -1111,6 +1187,21 @@ msgstr "" #. module: website #. openerp-web +#: code:addons/website/static/src/js/tours/banner.js:65 +#, python-format +msgid "Click on <b>Continue</b> to create the page." +msgstr "" + +#. module: website +#. openerp-web +#: code:addons/website/static/src/js/tours/banner.js:41 +#: code:addons/website/static/src/js/tours/banner.js:75 +#, python-format +msgid "Click the <b>Save</b> button." +msgstr "" + +#. module: website +#. openerp-web #: code:addons/website/static/src/xml/website.seo.xml:137 #, python-format msgid "Click to choose more images" @@ -1133,6 +1224,7 @@ msgstr "" #. module: website #. openerp-web +#: code:addons/website/static/src/js/editor/wysiwyg_multizone_translate.js:20 #: code:addons/website/static/src/xml/website.gallery.xml:55 #: model_terms:ir.ui.view,arch_db:website.500 #: model_terms:ir.ui.view,arch_db:website.show_website_info @@ -1200,6 +1292,14 @@ msgid "Confirmation" msgstr "" #. module: website +#. openerp-web +#: code:addons/website/static/src/js/backend/dashboard.js:88 +#: code:addons/website/static/src/xml/website.backend.xml:40 +#, python-format +msgid "Connect Google Analytics" +msgstr "" + +#. module: website #: model_terms:ir.ui.view,arch_db:website.footer_custom msgid "Connect with us" msgstr "" @@ -1243,7 +1343,14 @@ msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/menu/content.js:430 +#: code:addons/website/static/src/xml/translator.xml:7 +#, python-format +msgid "Content to translate" +msgstr "" + +#. module: website +#. openerp-web +#: code:addons/website/static/src/js/menu/content.js:435 #: code:addons/website/static/src/xml/website.xml:26 #, python-format msgid "Continue" @@ -1257,7 +1364,7 @@ msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/menu/content.js:372 +#: code:addons/website/static/src/js/menu/content.js:376 #, python-format msgid "Create Menu" msgstr "" @@ -1312,27 +1419,23 @@ msgid "Customize" msgstr "" #. module: website -#: model_terms:ir.ui.view,arch_db:website.user_navbar -msgid "Customize Theme" -msgstr "" - -#. module: website #. openerp-web -#: code:addons/website/static/src/js/tours/banner.js:32 +#: code:addons/website/static/src/js/widgets/theme.js:124 +#: model_terms:ir.ui.view,arch_db:website.user_navbar #, python-format -msgid "Customize any block through this menu. Try to change the background of the banner." +msgid "Customize Theme" msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/widgets/theme.js:32 +#: code:addons/website/static/src/js/tours/banner.js:31 #, python-format -msgid "Customize this theme" +msgid "Customize any block through this menu. Try to change the background color of this block." msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/menu/edit.js:87 +#: code:addons/website/static/src/js/menu/edit.js:113 #, python-format msgid "DRAG BUILDING BLOCKS HERE" msgstr "" @@ -1399,8 +1502,8 @@ msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/menu/content.js:60 -#: code:addons/website/static/src/js/menu/content.js:937 +#: code:addons/website/static/src/js/menu/content.js:59 +#: code:addons/website/static/src/js/menu/content.js:952 #, python-format msgid "Delete Page" msgstr "" @@ -1414,7 +1517,7 @@ msgstr "" #. module: website #: model_terms:ir.ui.view,arch_db:website.s_three_columns -msgid "Delete the above image or replace it with a picture that illustrates your message. Click on the picture to change it's <em>rounded corner</em> style." +msgid "Delete the above image or replace it with a picture that illustrates your message. Click on the picture to change its <em>rounded corner</em> style." msgstr "" #. module: website @@ -1460,8 +1563,10 @@ msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/menu/content.js:47 -#: code:addons/website/static/src/js/menu/seo.js:619 +#: code:addons/website/static/src/js/editor/snippets.options.js:1518 +#: code:addons/website/static/src/js/menu/content.js:46 +#: code:addons/website/static/src/js/menu/seo.js:629 +#: code:addons/website/static/src/xml/website.editor.xml:17 #, python-format msgid "Discard" msgstr "" @@ -1566,7 +1671,7 @@ msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/tours/banner.js:36 +#: code:addons/website/static/src/js/tours/banner.js:35 #, python-format msgid "Drag another block in your page, below the cover." msgstr "" @@ -1579,6 +1684,13 @@ msgid "Drag the <i>Cover</i> block and drop it in your page." msgstr "" #. module: website +#. openerp-web +#: code:addons/website/static/src/js/tours/banner.js:69 +#, python-format +msgid "Drag the block and drop it in your new page." +msgstr "" + +#. module: website #: model_terms:ir.ui.view,arch_db:website.bs_debug_page_ir_ui_view #: model_terms:website.page,arch_db:website.bs_debug_page msgid "Dropdown" @@ -1608,7 +1720,7 @@ msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/menu/content.js:459 +#: code:addons/website/static/src/js/menu/content.js:464 #: model_terms:ir.ui.view,arch_db:website.user_navbar #, python-format msgid "Edit Menu" @@ -1690,6 +1802,7 @@ msgstr "" #. module: website #: model_terms:ir.ui.view,arch_db:website.http_error_debug +#: model_terms:ir.ui.view,arch_db:website.theme_customize msgid "Error" msgstr "" @@ -1718,8 +1831,9 @@ msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/widgets/theme.js:74 -#: code:addons/website/static/src/js/widgets/theme.js:78 +#: code:addons/website/static/src/js/widgets/theme.js:186 +#: code:addons/website/static/src/js/widgets/theme.js:189 +#: model_terms:ir.ui.view,arch_db:website.theme_customize #, python-format msgid "Extra Color" msgstr "" @@ -1834,10 +1948,20 @@ msgstr "" #. module: website #: model_terms:ir.ui.view,arch_db:website.theme_customize +msgid "Font Size" +msgstr "" + +#. module: website +#: model_terms:ir.ui.view,arch_db:website.theme_customize msgid "Fonts" msgstr "" #. module: website +#: model_terms:ir.ui.view,arch_db:website.theme_customize +msgid "Footer" +msgstr "" + +#. module: website #: model_terms:ir.ui.view,arch_db:website.res_config_settings_view_form msgid "Force your user to create an account per website" msgstr "" @@ -1888,7 +2012,7 @@ msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/menu/content.js:51 +#: code:addons/website/static/src/js/menu/content.js:50 #, python-format msgid "Go To Page" msgstr "" @@ -1915,9 +2039,9 @@ msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/tours/banner.js:46 +#: code:addons/website/static/src/js/tours/banner.js:45 #, python-format -msgid "Good Job! You created your first page. Let's check how this page looks like on <b>mobile devices</b>." +msgid "Good Job! You have designed your homepage. Let's check how this page looks like on <b>mobile devices</b>." msgstr "" #. module: website @@ -1926,10 +2050,7 @@ msgid "Good copy starts with understanding how your product or service helps you msgstr "" #. module: website -#. openerp-web -#: code:addons/website/static/src/js/backend/dashboard.js:88 #: model:ir.model.fields,field_description:website.field_res_config_settings__has_google_analytics -#, python-format msgid "Google Analytics" msgstr "" @@ -2029,7 +2150,7 @@ msgstr "" #. module: website #: model_terms:ir.ui.view,arch_db:website.user_navbar -msgid "HTML/CSS Editor" +msgid "HTML/CSS/JS Editor" msgstr "" #. module: website @@ -2055,42 +2176,55 @@ msgstr "" #. module: website #: model_terms:ir.ui.view,arch_db:website.bs_debug_page_ir_ui_view +#: model_terms:ir.ui.view,arch_db:website.theme_customize #: model_terms:website.page,arch_db:website.bs_debug_page msgid "Headings 1" msgstr "" #. module: website #: model_terms:ir.ui.view,arch_db:website.bs_debug_page_ir_ui_view +#: model_terms:ir.ui.view,arch_db:website.theme_customize #: model_terms:website.page,arch_db:website.bs_debug_page msgid "Headings 2" msgstr "" #. module: website #: model_terms:ir.ui.view,arch_db:website.bs_debug_page_ir_ui_view +#: model_terms:ir.ui.view,arch_db:website.theme_customize #: model_terms:website.page,arch_db:website.bs_debug_page msgid "Headings 3" msgstr "" #. module: website #: model_terms:ir.ui.view,arch_db:website.bs_debug_page_ir_ui_view +#: model_terms:ir.ui.view,arch_db:website.theme_customize #: model_terms:website.page,arch_db:website.bs_debug_page msgid "Headings 4" msgstr "" #. module: website #: model_terms:ir.ui.view,arch_db:website.bs_debug_page_ir_ui_view +#: model_terms:ir.ui.view,arch_db:website.theme_customize #: model_terms:website.page,arch_db:website.bs_debug_page msgid "Headings 5" msgstr "" #. module: website #: model_terms:ir.ui.view,arch_db:website.bs_debug_page_ir_ui_view +#: model_terms:ir.ui.view,arch_db:website.theme_customize #: model_terms:website.page,arch_db:website.bs_debug_page msgid "Headings 6" msgstr "" #. module: website #. openerp-web +#: code:addons/website/static/src/xml/translator.xml:5 +#, python-format +msgid "Here are the visuals used to help you translate efficiently:" +msgstr "" + +#. module: website +#. openerp-web #: code:addons/website/static/src/xml/website.facebook_page.xml:42 #, python-format msgid "Hide Cover Photo" @@ -2112,6 +2246,13 @@ msgstr "" #. module: website #. openerp-web +#: code:addons/website/static/src/xml/website.editor.xml:77 +#, python-format +msgid "Hint: Type '/' to link to an existing page and '#' to an anchor." +msgstr "" + +#. module: website +#. openerp-web #: code:addons/website/static/src/xml/website.contentMenu.xml:13 #: model_terms:ir.ui.view,arch_db:website.500 #: model_terms:ir.ui.view,arch_db:website.bs_debug_page_ir_ui_view @@ -2213,11 +2354,26 @@ msgid "If this view is inherited,\n" msgstr "" #. module: website +#. openerp-web +#: code:addons/website/static/src/js/editor/editor_menu.js:82 +#, python-format +msgid "If you discard the current edition, all unsaved changes will be lost. You can cancel to return to the edition mode." +msgstr "" + +#. module: website #: model_terms:ir.ui.view,arch_db:website.one_page_line msgid "In main menu" msgstr "" #. module: website +#. openerp-web +#: code:addons/website/static/src/xml/translator.xml:10 +#, python-format +msgid "In this mode, you can only translate texts. To change the structure of the page, you must edit the master page.\n" +" Each modification on the master page is automatically applied to all translated versions." +msgstr "" + +#. module: website #: code:addons/website/controllers/backend.py:54 #, python-format msgid "Incorrect Client ID / Key" @@ -2233,6 +2389,11 @@ msgid "Indexed" msgstr "" #. module: website +#: model_terms:ir.ui.view,arch_db:website.theme_customize +msgid "Info" +msgstr "" + +#. module: website #: model_terms:ir.ui.view,arch_db:website.show_website_info msgid "Information about the" msgstr "" @@ -2318,6 +2479,8 @@ msgid "Is Visible" msgstr "" #. module: website +#: model:ir.model.fields,field_description:website.field_res_partner__is_published +#: model:ir.model.fields,field_description:website.field_res_users__is_published #: model:ir.model.fields,field_description:website.field_website_page__is_published #: model:ir.model.fields,field_description:website.field_website_published_mixin__is_published #: model:ir.model.fields,field_description:website.field_website_published_multi_mixin__is_published @@ -2333,7 +2496,7 @@ msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/content/website_root.js:270 +#: code:addons/website/static/src/js/content/website_root.js:352 #, python-format msgid "It might be possible to edit the relevant items or fix the issue in <a href=\"%s\">the classic Odoo interface</a>" msgstr "" @@ -2505,13 +2668,6 @@ msgid "Link button" msgstr "" #. module: website -#. openerp-web -#: code:addons/website/static/src/xml/website.backend.xml:40 -#, python-format -msgid "Link my Analytics Account" -msgstr "" - -#. module: website #: model_terms:ir.ui.view,arch_db:website.res_config_settings_view_form msgid "LinkedIn" msgstr "" @@ -2529,7 +2685,8 @@ msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/menu/seo.js:51 +#: code:addons/website/static/src/js/menu/seo.js:50 +#: code:addons/website/static/src/xml/website.editor.xml:84 #, python-format msgid "Loading..." msgstr "" @@ -2540,14 +2697,27 @@ msgid "Local Events" msgstr "" #. module: website +#: model_terms:ir.ui.view,arch_db:website.theme_customize +msgid "Logo" +msgstr "" + +#. module: website +#: model_terms:ir.ui.view,arch_db:website.theme_customize +msgid "Logo Height" +msgstr "" + +#. module: website +#: model_terms:ir.ui.view,arch_db:website.theme_customize +msgid "Main Layout" +msgstr "" + +#. module: website #: model:ir.model.fields,field_description:website.field_website__menu_id msgid "Main Menu" msgstr "" #. module: website -#. openerp-web -#: code:addons/website/static/src/xml/website.editor.xml:34 -#, python-format +#: model_terms:ir.ui.view,arch_db:website.theme_customize msgid "Main colors" msgstr "" @@ -2598,7 +2768,7 @@ msgid "Meet the Executive Team" msgstr "" #. module: website -#: code:addons/website/models/website.py:338 +#: code:addons/website/models/website.py:331 #: model:ir.model.fields,field_description:website.field_website_menu__name #: model_terms:ir.ui.view,arch_db:website.user_navbar #, python-format @@ -2607,14 +2777,15 @@ msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/menu/content.js:386 +#: code:addons/website/static/src/js/menu/content.js:392 #, python-format msgid "Menu Label" msgstr "" #. module: website -#: code:addons/website/models/website.py:340 +#: code:addons/website/models/website.py:333 #: model:ir.ui.menu,name:website.menu_website_menu_list +#: model_terms:ir.ui.view,arch_db:website.theme_customize #, python-format msgid "Menus" msgstr "" @@ -2743,6 +2914,11 @@ msgid "Name and favicon of your website" msgstr "" #. module: website +#: model_terms:ir.ui.view,arch_db:website.theme_customize +msgid "Nav Bar" +msgstr "" + +#. module: website #: model_terms:ir.ui.view,arch_db:website.bs_debug_page_ir_ui_view #: model_terms:ir.ui.view,arch_db:website.theme_customize #: model_terms:website.page,arch_db:website.bs_debug_page @@ -2761,7 +2937,7 @@ msgstr "" #. module: website #: model_terms:ir.ui.view,arch_db:website.user_navbar -msgid "New Channel" +msgid "New Course" msgstr "" #. module: website @@ -2780,6 +2956,11 @@ msgid "New Job Offer" msgstr "" #. module: website +#: model_terms:ir.ui.view,arch_db:website.user_navbar +msgid "New Livechat Channel" +msgstr "" + +#. module: website #. openerp-web #: code:addons/website/static/src/js/menu/new_content.js:78 #: model_terms:ir.ui.view,arch_db:website.user_navbar @@ -2793,11 +2974,6 @@ msgid "New Product" msgstr "" #. module: website -#: model_terms:ir.ui.view,arch_db:website.user_navbar -msgid "New Slide" -msgstr "" - -#. module: website #: model:ir.model.fields,field_description:website.field_website_menu__new_window msgid "New Window" msgstr "" @@ -2923,6 +3099,20 @@ msgstr "" #. module: website #. openerp-web +#: code:addons/website/static/src/js/editor/editor_menu_translate.js:29 +#, python-format +msgid "Ok" +msgstr "" + +#. module: website +#. openerp-web +#: code:addons/website/static/src/js/editor/editor_menu_translate.js:28 +#, python-format +msgid "Ok, never show me this again" +msgstr "" + +#. module: website +#. openerp-web #: code:addons/website/static/src/xml/website.backend.xml:5 #, python-format msgid "On Website" @@ -2959,7 +3149,7 @@ msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/menu/seo.js:616 +#: code:addons/website/static/src/js/menu/seo.js:626 #: model_terms:ir.ui.view,arch_db:website.user_navbar #, python-format msgid "Optimize SEO" @@ -3013,8 +3203,8 @@ msgid "Outline" msgstr "" #. module: website -#: code:addons/website/models/website.py:308 -#: code:addons/website/models/website.py:372 +#: code:addons/website/models/website.py:301 +#: code:addons/website/models/website.py:365 #: model:ir.model,name:website.model_website_page #: model:ir.model.fields,field_description:website.field_ir_ui_view__page_ids #: model:ir.model.fields,field_description:website.field_website_page__page_ids @@ -3023,18 +3213,25 @@ msgid "Page" msgstr "" #. module: website -#: code:addons/website/models/website.py:315 +#: code:addons/website/models/website.py:308 #, python-format msgid "Page <b>%s</b> contains a link to this page" msgstr "" #. module: website -#: code:addons/website/models/website.py:379 +#: code:addons/website/models/website.py:372 #, python-format msgid "Page <b>%s</b> is calling this file" msgstr "" #. module: website +#. openerp-web +#: code:addons/website/static/src/xml/website.editor.xml:81 +#, python-format +msgid "Page Anchor" +msgstr "" + +#. module: website #: model:ir.model.fields,field_description:website.field_website_page__website_indexed msgid "Page Indexed" msgstr "" @@ -3048,7 +3245,7 @@ msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/menu/content.js:68 +#: code:addons/website/static/src/js/menu/content.js:67 #: model_terms:ir.ui.view,arch_db:website.user_navbar #, python-format msgid "Page Properties" @@ -3076,8 +3273,8 @@ msgid "Page URL" msgstr "" #. module: website -#: code:addons/website/models/website.py:310 -#: code:addons/website/models/website.py:374 +#: code:addons/website/models/website.py:303 +#: code:addons/website/models/website.py:367 #: model:ir.ui.menu,name:website.menu_website_pages_list #: model_terms:ir.ui.view,arch_db:website.user_navbar #, python-format @@ -3151,6 +3348,11 @@ msgid "Previous" msgstr "" #. module: website +#: model_terms:ir.ui.view,arch_db:website.theme_customize +msgid "Primary" +msgstr "" + +#. module: website #: model_terms:ir.ui.view,arch_db:website.s_comparisons msgid "Professional" msgstr "" @@ -3190,13 +3392,6 @@ msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/tours/banner.js:42 -#, python-format -msgid "Publish your page by clicking on the <b>Save</b> button." -msgstr "" - -#. module: website -#. openerp-web #: code:addons/website/static/src/js/backend/button.js:37 #: model_terms:ir.ui.view,arch_db:website.publish_management #: model_terms:ir.ui.view,arch_db:website.publish_short @@ -3238,6 +3433,13 @@ msgid "Read more" msgstr "" #. module: website +#. openerp-web +#: code:addons/website/static/src/js/editor/wysiwyg_multizone.js:185 +#, python-format +msgid "Readonly field" +msgstr "" + +#. module: website #: model:ir.model,name:website.model_ir_rule msgid "Record Rule" msgstr "" @@ -3276,12 +3478,6 @@ msgid "References" msgstr "" #. module: website -#: model:ir.model.fields,field_description:website.field_res_partner__website_id -#: model:ir.model.fields,field_description:website.field_res_users__website_id -msgid "Registration Website" -msgstr "" - -#. module: website #: model_terms:ir.ui.view,arch_db:website.website_pages_form_view msgid "Related Menu Items" msgstr "" @@ -3311,6 +3507,13 @@ msgid "Rename Page To:" msgstr "" #. module: website +#. openerp-web +#: code:addons/website/static/src/xml/website.editor.xml:70 +#, python-format +msgid "Reset" +msgstr "" + +#. module: website #: model_terms:ir.ui.view,arch_db:website.500 msgid "Reset selected templates" msgstr "" @@ -3321,6 +3524,8 @@ msgid "Reset templates" msgstr "" #. module: website +#: model:ir.model.fields,help:website.field_res_partner__website_id +#: model:ir.model.fields,help:website.field_res_users__website_id #: model:ir.model.fields,help:website.field_website_multi_mixin__website_id #: model:ir.model.fields,help:website.field_website_page__website_id #: model:ir.model.fields,help:website.field_website_published_multi_mixin__website_id @@ -3373,8 +3578,11 @@ msgstr "" #. module: website #. openerp-web #: code:addons/website/static/src/js/backend/dashboard.js:95 -#: code:addons/website/static/src/js/menu/content.js:46 -#: code:addons/website/static/src/js/menu/seo.js:618 +#: code:addons/website/static/src/js/editor/snippets.options.js:1500 +#: code:addons/website/static/src/js/menu/content.js:45 +#: code:addons/website/static/src/js/menu/seo.js:628 +#: code:addons/website/static/src/xml/website.editor.xml:18 +#: code:addons/website/static/src/xml/website.editor.xml:69 #, python-format msgid "Save" msgstr "" @@ -3412,13 +3620,18 @@ msgid "Second list of Features" msgstr "" #. module: website +#: model_terms:ir.ui.view,arch_db:website.theme_customize +msgid "Secondary" +msgstr "" + +#. module: website #: model_terms:ir.ui.view,arch_db:website.s_image_text msgid "Section Subtitle" msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/menu/content.js:429 +#: code:addons/website/static/src/js/menu/content.js:434 #, python-format msgid "Select a Menu" msgstr "" @@ -3576,13 +3789,13 @@ msgid "Something else here" msgstr "" #. module: website -#: code:addons/website/controllers/main.py:224 +#: code:addons/website/controllers/main.py:225 #, python-format msgid "Sort by Name" msgstr "" #. module: website -#: code:addons/website/controllers/main.py:223 +#: code:addons/website/controllers/main.py:224 #, python-format msgid "Sort by Url" msgstr "" @@ -3615,10 +3828,8 @@ msgid "Start your journey" msgstr "" #. module: website -#. openerp-web -#: code:addons/website/static/src/xml/website.editor.xml:54 -#, python-format -msgid "State colors" +#: model_terms:ir.ui.view,arch_db:website.theme_customize +msgid "Status colors" msgstr "" #. module: website @@ -3634,6 +3845,11 @@ msgid "Storytelling is powerful.<br/> It draws readers in and engages them." msgstr "" #. module: website +#: model_terms:ir.ui.view,arch_db:website.theme_customize +msgid "Success" +msgstr "" + +#. module: website #: model_terms:ir.ui.view,arch_db:website.user_navbar msgid "TRANSLATE" msgstr "" @@ -3661,20 +3877,20 @@ msgid "Tell what's the value for the <br/>customer for this feature." msgstr "" #. module: website -#: code:addons/website/models/website.py:324 -#: code:addons/website/models/website.py:391 +#: code:addons/website/models/website.py:317 +#: code:addons/website/models/website.py:384 #, python-format msgid "Template" msgstr "" #. module: website -#: code:addons/website/models/website.py:330 +#: code:addons/website/models/website.py:323 #, python-format msgid "Template <b>%s (id:%s)</b> contains a link to this page" msgstr "" #. module: website -#: code:addons/website/models/website.py:397 +#: code:addons/website/models/website.py:390 #, python-format msgid "Template <b>%s (id:%s)</b> is calling this file" msgstr "" @@ -3685,8 +3901,8 @@ msgid "Template fallback" msgstr "" #. module: website -#: code:addons/website/models/website.py:326 -#: code:addons/website/models/website.py:393 +#: code:addons/website/models/website.py:319 +#: code:addons/website/models/website.py:386 #, python-format msgid "Templates" msgstr "" @@ -3697,9 +3913,12 @@ msgid "Terms of service" msgstr "" #. module: website -#. openerp-web -#: code:addons/website/static/src/xml/website.editor.xml:48 -#, python-format +#: model_terms:ir.ui.view,arch_db:website.theme_customize +msgid "Text" +msgstr "" + +#. module: website +#: model_terms:ir.ui.view,arch_db:website.theme_customize msgid "Text colors" msgstr "" @@ -3710,13 +3929,27 @@ msgid "The Google Analytics Client ID or Key you entered seems incorrect." msgstr "" #. module: website +#. openerp-web +#: code:addons/website/static/src/xml/website.editor.xml:97 +#, python-format +msgid "The chosen name already exists" +msgstr "" + +#. module: website +#. openerp-web +#: code:addons/website/static/src/xml/website.editor.xml:96 +#, python-format +msgid "The chosen name is not valid (use only a-Z A-Z 0-9 - _)" +msgstr "" + +#. module: website #: model_terms:ir.ui.view,arch_db:website.res_config_settings_view_form msgid "The company this website belongs to" msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/menu/seo.js:205 +#: code:addons/website/static/src/js/menu/seo.js:210 #: code:addons/website/static/src/xml/website.seo.xml:69 #, python-format msgid "The description will be generated by search engines based on page content unless you specify one." @@ -3724,7 +3957,7 @@ msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/menu/seo.js:548 +#: code:addons/website/static/src/js/menu/seo.js:559 #, python-format msgid "The description will be generated by social media based on page content unless you specify one." msgstr "" @@ -3740,6 +3973,8 @@ msgid "The following error was raised in the website controller" msgstr "" #. module: website +#: model:ir.model.fields,help:website.field_res_partner__website_url +#: model:ir.model.fields,help:website.field_res_users__website_url #: model:ir.model.fields,help:website.field_website_page__website_url #: model:ir.model.fields,help:website.field_website_published_mixin__website_url #: model:ir.model.fields,help:website.field_website_published_multi_mixin__website_url @@ -3850,7 +4085,7 @@ msgid "This page does not exist, but you can create it as you are administrator msgstr "" #. module: website -#: code:addons/website/models/website.py:343 +#: code:addons/website/models/website.py:336 #, python-format msgid "This page is in the menu <b>%s</b>" msgstr "" @@ -3882,7 +4117,7 @@ msgstr "" #. module: website #: model_terms:ir.ui.view,arch_db:website.s_three_columns -msgid "To add a fourth column, reduce the size of these three columns using the right icon of each block. Then, duplicate one of the column to create a new one as a copy." +msgid "To add a fourth column, reduce the size of these three columns using the right icon of each block. Then, duplicate one of the columns to create a new one as a copy." msgstr "" #. module: website @@ -3914,13 +4149,13 @@ msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/menu/content.js:424 +#: code:addons/website/static/src/js/menu/content.js:429 #, python-format msgid "Top Menu" msgstr "" #. module: website -#: code:addons/website/models/website.py:187 +#: code:addons/website/models/website.py:185 #, python-format msgid "Top Menu for Website %s" msgstr "" @@ -3947,9 +4182,23 @@ msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/editor/rte.summernote.js:17 +#: code:addons/website/static/src/js/editor/wysiwyg_multizone_translate.js:18 +#, python-format +msgid "Translate Attribute" +msgstr "" + +#. module: website +#. openerp-web +#: code:addons/website/static/src/xml/translator.xml:8 #, python-format -msgid "Transform the picture (click twice to reset transformation)" +msgid "Translated content" +msgstr "" + +#. module: website +#. openerp-web +#: code:addons/website/static/src/js/editor/editor_menu_translate.js:26 +#, python-format +msgid "Translation Info" msgstr "" #. module: website @@ -4183,6 +4432,8 @@ msgid "Visible" msgstr "" #. module: website +#: model:ir.model.fields,field_description:website.field_res_partner__website_published +#: model:ir.model.fields,field_description:website.field_res_users__website_published #: model:ir.model.fields,field_description:website.field_website_page__website_published #: model:ir.model.fields,field_description:website.field_website_published_mixin__website_published #: model:ir.model.fields,field_description:website.field_website_published_multi_mixin__website_published @@ -4199,6 +4450,7 @@ msgstr "" #. module: website #. openerp-web #: code:addons/website/static/src/xml/website.facebook_page.xml:60 +#: model_terms:ir.ui.view,arch_db:website.theme_customize #, python-format msgid "Warning" msgstr "" @@ -4230,6 +4482,8 @@ msgstr "" #: model:ir.model,name:website.model_website #: model:ir.model.fields,field_description:website.field_ir_attachment__website_id #: model:ir.model.fields,field_description:website.field_ir_ui_view__website_id +#: model:ir.model.fields,field_description:website.field_res_partner__website_id +#: model:ir.model.fields,field_description:website.field_res_users__website_id #: model:ir.model.fields,field_description:website.field_website_menu__website_id #: model:ir.model.fields,field_description:website.field_website_multi_mixin__website_id #: model:ir.model.fields,field_description:website.field_website_page__website_id @@ -4329,6 +4583,8 @@ msgstr "" #. module: website #: model:ir.model.fields,field_description:website.field_ir_attachment__website_url +#: model:ir.model.fields,field_description:website.field_res_partner__website_url +#: model:ir.model.fields,field_description:website.field_res_users__website_url #: model:ir.model.fields,field_description:website.field_website_page__website_url #: model:ir.model.fields,field_description:website.field_website_published_mixin__website_url #: model:ir.model.fields,field_description:website.field_website_published_multi_mixin__website_url @@ -4433,6 +4689,13 @@ msgid "Write what the customer would like to know, <br/>not what you want to sho msgstr "" #. module: website +#. openerp-web +#: code:addons/website/static/src/xml/translator.xml:4 +#, python-format +msgid "You are about to enter the translation mode." +msgstr "" + +#. module: website #: model_terms:ir.ui.view,arch_db:website.s_features_grid msgid "You can edit colors and background to highlight features." msgstr "" @@ -4454,6 +4717,12 @@ msgid "You do not have sufficient rights to perform that action." msgstr "" #. module: website +#: code:addons/website/models/mixins.py:181 +#, python-format +msgid "You do not have the rights to publish/unpublish" +msgstr "" + +#. module: website #. openerp-web #: code:addons/website/static/src/xml/website.backend.xml:50 #, python-format @@ -4462,7 +4731,7 @@ msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/menu/seo.js:417 +#: code:addons/website/static/src/js/menu/seo.js:422 #, python-format msgid "You have hidden this page from search results. It won't be indexed by search engines." msgstr "" @@ -4507,14 +4776,14 @@ msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/menu/seo.js:393 +#: code:addons/website/static/src/js/menu/seo.js:398 #, python-format msgid "Your description looks too long." msgstr "" #. module: website #. openerp-web -#: code:addons/website/static/src/js/menu/seo.js:395 +#: code:addons/website/static/src/js/menu/seo.js:400 #, python-format msgid "Your description looks too short." msgstr "" diff --git a/addons/website/models/ir_http.py b/addons/website/models/ir_http.py index e449bea5e42..b5809926cdc 100644 --- a/addons/website/models/ir_http.py +++ b/addons/website/models/ir_http.py @@ -42,6 +42,23 @@ def sitemap_qs2dom(qs, route, field='name'): return dom +def get_request_website(): + """ Return the website set on `request` if called in a frontend context + (website=True on route). + This method can typically be used to check if we are in the frontend. + + This method is easy to mock during python tests to simulate frontend + context, rather than mocking every method accessing request.website. + + Don't import directly the method or it won't be mocked during tests, do: + ``` + from odoo.addons.website.models import ir_http + my_var = ir_http.get_request_website() + ``` + """ + return request and getattr(request, 'website', False) or False + + class Http(models.AbstractModel): _inherit = 'ir.http' @@ -233,6 +250,7 @@ class Http(models.AbstractModel): if code == 500: logger.error("500 Internal Server Error:\n\n%s", values['traceback']) View = env["ir.ui.view"] + values['views'] = View if 'qweb_exception' in values: if 'load could not load template' in exception.args: # When t-calling an inexisting template, we don't have reference to @@ -250,22 +268,25 @@ class Http(models.AbstractModel): except: exception_template = exception.name view = View._view_obj(exception_template) - et = etree.fromstring(view.with_context(inherit_branding=False).read_combined(['arch'])['arch']) - node = et.xpath(exception.path) - line = node is not None and etree.tostring(node[0], encoding='unicode') - # line = exception.html # FALSE -> contains branding <div t-att-data="request.browse('ok')"/> - if line: - # If QWebException occurs in a child view, the parent view is raised - values['editable'] = request.uid and request.website.is_publisher() - values['views'] = View._views_get(exception_template).filtered( - lambda v: line in v.arch - ) - else: + if exception.html in view.arch: values['views'] = view + else: + # There might be 2 cases where the exception code can't be found + # in the view, either the error is in a child view or the code + # contains branding (<div t-att-data="request.browse('ok')"/>). + et = etree.fromstring(view.with_context(inherit_branding=False).read_combined(['arch'])['arch']) + node = et.xpath(exception.path) + line = node is not None and etree.tostring(node[0], encoding='unicode') + if line: + values['views'] = View._views_get(exception_template).filtered( + lambda v: line in v.arch + ) # Keep only views that we can reset values['views'] = values['views'].filtered( lambda view: view._get_original_view().arch_fs or 'oe_structure' in view.key ) + # Needed to show reset template on translated pages (`_prepare_qcontext` will set it for main lang) + values['editable'] = request.uid and request.website.is_publisher() elif code == 403: logger.warn("403 Forbidden:\n\n%s", values['traceback']) try: diff --git a/addons/website/models/ir_rule.py b/addons/website/models/ir_rule.py index ba5e07128ee..a11ddef1e53 100644 --- a/addons/website/models/ir_rule.py +++ b/addons/website/models/ir_rule.py @@ -1,5 +1,6 @@ # coding: utf-8 from odoo import api, models +from odoo.addons.website.models import ir_http class IrRule(models.Model): @@ -8,7 +9,14 @@ class IrRule(models.Model): @api.model def _eval_context(self): res = super(IrRule, self)._eval_context() - res['website_id'] = self.env['website'].get_current_website().id + + # We need is_frontend to avoid showing website's company items in backend + # (that could be different than current company). We can't use + # `get_current_website(falback=False)` as it could also return a website + # in backend (if domain set & match).. + is_frontend = ir_http.get_request_website() + Website = self.env['website'] + res['website'] = is_frontend and Website.get_current_website() or Website return res def _compute_domain_keys(self): diff --git a/addons/website/models/ir_ui_view.py b/addons/website/models/ir_ui_view.py index c4dc9182906..a396b676940 100644 --- a/addons/website/models/ir_ui_view.py +++ b/addons/website/models/ir_ui_view.py @@ -290,7 +290,7 @@ class View(models.Model): """ self.ensure_one() domain = [('key', '=', self.key), ('model_data_id', '!=', None)] - return self.search(domain, limit=1) # Useless limit has multiple xmlid should not be possible + return self.with_context(active_test=False).search(domain, limit=1) # Useless limit has multiple xmlid should not be possible @api.multi def render(self, values=None, engine='ir.qweb', minimal_qcontext=False): diff --git a/addons/website/static/src/js/editor/snippets.options.js b/addons/website/static/src/js/editor/snippets.options.js index be97a42f96c..de4507c0ff0 100644 --- a/addons/website/static/src/js/editor/snippets.options.js +++ b/addons/website/static/src/js/editor/snippets.options.js @@ -640,11 +640,11 @@ var FacebookPageDialog = weWidgets.Dialog.extend({ */ _renderPreview: function () { var self = this; - var match = this.fbData.href.match(/^(?:https?:\/\/)?(?:www\.)?(?:fb|facebook)\.com\/(\w+)/); + var match = this.fbData.href.match(/^(?:https?:\/\/)?(?:www\.)?(?:fb|facebook)\.com\/(?:([\w.]+)|[^/?#]+-([0-9]{15,16}))(?:$|[\/?# ])/); if (match) { // Check if the page exists on Facebook or not $.ajax({ - url: 'https://graph.facebook.com/' + match[1] + '/picture', + url: 'https://graph.facebook.com/' + (match[2] || match[1]) + '/picture', statusCode: { 200: function () { self._toggleWarning(true); diff --git a/addons/website/static/src/js/editor/wysiwyg_multizone.js b/addons/website/static/src/js/editor/wysiwyg_multizone.js index 4d29e1f3567..4509816c30e 100644 --- a/addons/website/static/src/js/editor/wysiwyg_multizone.js +++ b/addons/website/static/src/js/editor/wysiwyg_multizone.js @@ -331,7 +331,7 @@ var WysiwygMultizone = Wysiwyg.extend({ var data = this._super(); var res_id = $editable.data('oe-id'); var res_model = $editable.data('oe-model'); - if (!$editable.data('oe-model')) { + if (!$editable.data('oe-model') && $('html').data('editable')) { var object = $('html').data('main-object'); res_model = object.split('(')[0]; res_id = +object.split('(')[1].split(',')[0]; diff --git a/addons/website/static/src/js/tours/restricted_editor.js b/addons/website/static/src/js/tours/restricted_editor.js new file mode 100644 index 00000000000..10f24291be8 --- /dev/null +++ b/addons/website/static/src/js/tours/restricted_editor.js @@ -0,0 +1,17 @@ +odoo.define("website.tour.restricted_editor", function (require) { +"use strict"; + +var tour = require("web_tour.tour"); + +tour.register("restricted_editor", { + test: true, + url: "/", +}, [{ + trigger: 'a[data-action=edit]', + content: "Click \"EDIT\" button of website as Restricted Editor", + extra_trigger: ".homepage", +}, { + trigger: '#oe_snippets.o_loaded', + content: "Check that the snippets loaded properly", +}]); +}); diff --git a/addons/website/static/src/scss/website.editor.ui.scss b/addons/website/static/src/scss/website.editor.ui.scss index 353be1efed1..422ac472f82 100644 --- a/addons/website/static/src/scss/website.editor.ui.scss +++ b/addons/website/static/src/scss/website.editor.ui.scss @@ -112,6 +112,7 @@ flex: 1 1 auto; .ace_gutter { + display: block !important; // display even with aria-hidden cursor: ew-resize; .ace_gutter-cell.o_error { diff --git a/addons/website/static/src/scss/website.wysiwyg.scss b/addons/website/static/src/scss/website.wysiwyg.scss index bed3805eb02..a4d8cea8729 100644 --- a/addons/website/static/src/scss/website.wysiwyg.scss +++ b/addons/website/static/src/scss/website.wysiwyg.scss @@ -531,7 +531,7 @@ body.editor_enable { height: $o-navbar-height; .btn { - height: $o-navbar-height; + height: $o-navbar-height !important; // force this because of themes } } @@ -554,87 +554,88 @@ body.editor_enable { .wysiwyg_multizone.note-popover, .wysiwyg_multizone.note-editor>.note-toolbar-wrapper .note-toolbar { - background-color: $o-we-color-dark; + // force this because of themes + background-color: $o-we-color-dark !important; .btn { - background-color: $o-we-color-dark; - color: $o-we-color-text-normal; - border: none; - padding: 0.0625rem 0.3125rem !important; // force this because of themes + background-color: $o-we-color-dark !important; + color: $o-we-color-text-normal !important; + border: none !important; + padding: 0.0625rem 0.3125rem !important; >.fa { - color: $o-we-color-text-normal; + color: $o-we-color-text-normal !important; } &:hover { - color: $o-we-color-text-light; + color: $o-we-color-text-light !important; >.fa { - color: $o-we-color-text-light; + color: $o-we-color-text-light !important; } } &.active { - background-color: $o-we-color-dark; - color: $o-we-color-text-light; + background-color: $o-we-color-dark !important; + color: $o-we-color-text-light !important; >.fa { - color: $o-we-color-text-light; + color: $o-we-color-text-light !important; } } } >.btn-group { - margin-top: 0; + margin-top: 0 !important; &.show, .btn-group.show { .dropdown-toggle { - border-top: 2px solid white; - background-color: $o-we-color-darker; - color: white; - box-shadow: none; + border-top: 2px solid white !important; + background-color: $o-we-color-darker !important; + color: white !important; + box-shadow: none !important; >.fa, >span { - color: white; + color: white !important; } } } } .dropdown-menu { - margin: 0; - border-radius: 0; - background-color: $o-we-color-darker; - color: $o-we-color-text-normal; - white-space: normal; + margin: 0 !important; + border-radius: 0 !important; + background-color: $o-we-color-darker !important; + color: $o-we-color-text-normal !important; + white-space: normal !important; .dropdown-item { - width: 100%; - color: $o-we-color-text-light; + width: 100% !important; + color: $o-we-color-text-light !important; >.fa { - color: $o-we-color-text-light; + color: $o-we-color-text-light !important; } &:hover { - background-color: $o-we-tab-active-bg; - color: white; + background-color: $o-we-tab-active-bg !important; + color: white !important; >.fa { - color: white; + color: white !important; } } } } .note-para .dropdown-menu { - min-width: 147px; + min-width: 147px !important; } .note-style .dropdown-item * { - color: $o-we-color-text-light; + color: $o-we-color-text-light !important; } } } diff --git a/addons/website/tests/test_ui.py b/addons/website/tests/test_ui.py index da501da384a..d73a525e791 100644 --- a/addons/website/tests/test_ui.py +++ b/addons/website/tests/test_ui.py @@ -46,3 +46,15 @@ class TestUi(odoo.tests.HttpCase): def test_02_admin_tour_banner(self): self.phantom_js("/", "odoo.__DEBUG__.services['web_tour.tour'].run('banner')", "odoo.__DEBUG__.services['web_tour.tour'].tours.banner.ready", login='admin') + + def test_03_restricted_editor(self): + self.restricted_editor = self.env['res.users'].create({ + 'name': 'Restricted Editor', + 'login': 'restricted', + 'password': 'restricted', + 'groups_id': [(6, 0, [ + self.ref('base.group_user'), + self.ref('website.group_website_publisher') + ])] + }) + self.phantom_js("/", "odoo.__DEBUG__.services['web_tour.tour'].run('restricted_editor')", "odoo.__DEBUG__.services['web_tour.tour'].tours.restricted_editor.ready", login='restricted') diff --git a/addons/website/views/website_templates.xml b/addons/website/views/website_templates.xml index 5317f490ea8..82c3c2c0549 100644 --- a/addons/website/views/website_templates.xml +++ b/addons/website/views/website_templates.xml @@ -122,6 +122,7 @@ <script type="text/javascript" src="/website/static/src/js/tours/banner.js"/> <script type="text/javascript" src="/website/static/src/js/tours/customize.js"/> + <script type="text/javascript" src="/website/static/src/js/tours/restricted_editor.js"/> <script type="text/javascript" src="/website/static/src/js/tours/rte.js"/> <script type="text/javascript" src="/website/static/src/js/widgets/ace.js"/> diff --git a/addons/website/views/website_views.xml b/addons/website/views/website_views.xml index 5a067e59bcf..a8e69029094 100644 --- a/addons/website/views/website_views.xml +++ b/addons/website/views/website_views.xml @@ -13,6 +13,7 @@ <field name="type">ir.actions.act_window</field> <field name="res_model">ir.module.module</field> <field name="view_mode">kanban,tree,form</field> + <field name="domain">['!', ('name', '=like', 'theme_%')]</field> <field name="context" eval="{'search_default_category_id': ref('base.module_category_website')}"/> </record> diff --git a/addons/website_blog/i18n/website_blog.pot b/addons/website_blog/i18n/website_blog.pot index 2741e294217..99969a43ea8 100644 --- a/addons/website_blog/i18n/website_blog.pot +++ b/addons/website_blog/i18n/website_blog.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 08:00+0000\n" -"PO-Revision-Date: 2019-01-16 08:00+0000\n" +"POT-Creation-Date: 2019-03-20 13:51+0000\n" +"PO-Revision-Date: 2019-03-20 13:51+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -383,6 +383,11 @@ msgid "Building your company's website and selling your products online easy." msgstr "" #. module: website_blog +#: model:ir.model.fields,field_description:website_blog.field_blog_post__can_publish +msgid "Can publish" +msgstr "" + +#. module: website_blog #: model:ir.model.fields,field_description:website_blog.field_blog_tag__category_id msgid "Category" msgstr "" diff --git a/addons/website_blog/static/src/js/website_blog.js b/addons/website_blog/static/src/js/website_blog.js index 70c55ab95cc..27c78e7b471 100644 --- a/addons/website_blog/static/src/js/website_blog.js +++ b/addons/website_blog/static/src/js/website_blog.js @@ -98,7 +98,7 @@ publicWidget.registry.websiteBlog = publicWidget.Widget.extend({ url = 'https://plus.google.com/share?url=' + window.location.href; } } else { - var blogPost = $element.parents('[name="blogPost"]'); + var blogPost = $element.parents('[name="blog_post"]'); var blogPostTitle = blogPost.find('.o_blog_post_title').html() || ''; var blogArticleLink = blogPost.find('.o_blog_post_title').parent('a').attr('href'); if ($element.hasClass('o_twitter')) { diff --git a/addons/website_blog/views/website_blog_templates.xml b/addons/website_blog/views/website_blog_templates.xml index 8e92cab712e..8c5724945d7 100644 --- a/addons/website_blog/views/website_blog_templates.xml +++ b/addons/website_blog/views/website_blog_templates.xml @@ -207,7 +207,7 @@ <template id="opt_blog_post_grid_layout" name="Grid view" customize_show="True" active="False" inherit_id="website_blog.blog_post_short"> <xpath expr="//div[@id='main_column']" position="attributes"> - <attribute name="class" separator=" " add="d-flex" /> + <attribute name="class" separator=" " add="d-flex flex-wrap" /> </xpath> <xpath expr="//div[@name='blog_post']" position="attributes"> <attribute name="class" add="col-md-5 o_grid" separator=" "/> diff --git a/addons/website_crm_partner_assign/i18n/website_crm_partner_assign.pot b/addons/website_crm_partner_assign/i18n/website_crm_partner_assign.pot index 53fda82e2a0..de6ed34875e 100644 --- a/addons/website_crm_partner_assign/i18n/website_crm_partner_assign.pot +++ b/addons/website_crm_partner_assign/i18n/website_crm_partner_assign.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:59+0000\n" -"PO-Revision-Date: 2019-01-16 07:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -55,7 +55,7 @@ msgstr "" #. module: website_crm_partner_assign #: model_terms:ir.ui.view,arch_db:website_crm_partner_assign.portal_my_opportunity -msgid "<small class=\"mr-2\"><b>Stage:</b></small>" +msgid "<small class=\"mr-2 mt-1 float-left\"><b>Stage:</b></small>" msgstr "" #. module: website_crm_partner_assign @@ -144,7 +144,7 @@ msgstr "" #. module: website_crm_partner_assign #: model_terms:ir.ui.view,arch_db:website_crm_partner_assign.portal_my_opportunity -msgid "<strong class=\"col-12 col-sm-4\">Deadline</strong>" +msgid "<strong class=\"col-12 col-sm-4\">Expected Closing</strong>" msgstr "" #. module: website_crm_partner_assign @@ -352,6 +352,11 @@ msgid "Campaign" msgstr "" #. module: website_crm_partner_assign +#: model:ir.model.fields,field_description:website_crm_partner_assign.field_res_partner_grade__can_publish +msgid "Can publish" +msgstr "" + +#. module: website_crm_partner_assign #: model_terms:ir.ui.view,arch_db:website_crm_partner_assign.crm_lead_forward_to_partner_form #: model_terms:ir.ui.view,arch_db:website_crm_partner_assign.portal_my_lead #: model_terms:ir.ui.view,arch_db:website_crm_partner_assign.portal_my_opportunities @@ -472,11 +477,6 @@ msgid "Date Review" msgstr "" #. module: website_crm_partner_assign -#: model_terms:ir.ui.view,arch_db:website_crm_partner_assign.portal_my_opportunity -msgid "Deadline:" -msgstr "" - -#. module: website_crm_partner_assign #: model_terms:ir.ui.view,arch_db:website_crm_partner_assign.portal_my_opportunities msgid "Description" msgstr "" @@ -531,6 +531,11 @@ msgid "Expected Closing" msgstr "" #. module: website_crm_partner_assign +#: model_terms:ir.ui.view,arch_db:website_crm_partner_assign.portal_my_opportunity +msgid "Expected Closing:" +msgstr "" + +#. module: website_crm_partner_assign #: code:addons/website_crm_partner_assign/controllers/main.py:112 #, python-format msgid "Expected Revenue" @@ -1236,11 +1241,6 @@ msgid "on" msgstr "" #. module: website_crm_partner_assign -#: model_terms:ir.ui.view,arch_db:website_crm_partner_assign.portal_my_opportunities -msgid "or" -msgstr "" - -#. module: website_crm_partner_assign #: model_terms:ir.ui.view,arch_db:website_crm_partner_assign.index msgid "reference(s)" msgstr "" diff --git a/addons/website_customer/i18n/website_customer.pot b/addons/website_customer/i18n/website_customer.pot index 86b554a7227..3058f9751ee 100644 --- a/addons/website_customer/i18n/website_customer.pot +++ b/addons/website_customer/i18n/website_customer.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 08:00+0000\n" -"PO-Revision-Date: 2019-01-16 08:00+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -48,6 +48,11 @@ msgid "Bootstrap class to customize the color" msgstr "" #. module: website_customer +#: model:ir.model.fields,field_description:website_customer.field_res_partner_tag__can_publish +msgid "Can publish" +msgstr "" + +#. module: website_customer #: model:ir.model.fields,field_description:website_customer.field_res_partner_tag__name msgid "Category Name" msgstr "" diff --git a/addons/website_event/controllers/main.py b/addons/website_event/controllers/main.py index 1174f91d40e..0280dbd71c7 100644 --- a/addons/website_event/controllers/main.py +++ b/addons/website_event/controllers/main.py @@ -181,7 +181,10 @@ class WebsiteEventController(http.Controller): def event_register(self, event, **post): if not event.can_access_from_current_website(): raise werkzeug.exceptions.NotFound() - + if not request.context.get('pricelist'): + pricelist = request.website.get_current_pricelist() + if pricelist: + event = event.with_context(pricelist=pricelist.id) values = { 'event': event, 'main_object': event, diff --git a/addons/website_event/i18n/website_event.pot b/addons/website_event/i18n/website_event.pot index 6dd6a4c930e..f71a32e96ec 100644 --- a/addons/website_event/i18n/website_event.pot +++ b/addons/website_event/i18n/website_event.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 08:00+0000\n" -"PO-Revision-Date: 2019-01-16 08:00+0000\n" +"POT-Creation-Date: 2019-03-20 13:51+0000\n" +"PO-Revision-Date: 2019-03-20 13:51+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -52,58 +52,57 @@ msgid "<b>Upcoming Events</b>" msgstr "" #. module: website_event -#: model_terms:ir.ui.view,arch_db:website_event.event_description_full -msgid "<br/>\n" -" <i class=\"fa fa-clock-o\"/> To" -msgstr "" - -#. module: website_event #: model_terms:ir.ui.view,arch_db:website_event.registration_template msgid "<em><i class=\"fa fa-plus-circle\" role=\"img\" aria-label=\"Create\" title=\"Create\"/>\n" " Configure and Launch Event Registration</em>" msgstr "" #. module: website_event -#: model_terms:ir.ui.view,arch_db:website_event.event_details #: model_terms:ir.ui.view,arch_db:website_event.index +msgid "<i class=\"fa fa-clock-o text-primary mx-1\" role=\"img\" aria-label=\"Start date\" title=\"Start date\"/>" +msgstr "" + +#. module: website_event +#: model_terms:ir.ui.view,arch_db:website_event.event_details #: model_terms:ir.ui.view,arch_db:website_event.registration_complete -msgid "<i class=\"fa fa-clock-o\" role=\"img\" aria-label=\"Start date\" title=\"Start date\"/>" +msgid "<i class=\"fa fa-clock-o text-primary\" role=\"img\" aria-label=\"Start date\" title=\"Start date\"/>" msgstr "" #. module: website_event #: model_terms:ir.ui.view,arch_db:website_event.event_description_full -msgid "<i class=\"fa fa-clock-o\"/> From" +msgid "<i class=\"fa fa-clock-o\"/>\n" +" <span>From</span>" msgstr "" #. module: website_event -#: model_terms:ir.ui.view,arch_db:website_event.country_events_list -msgid "<i class=\"fa fa-cloud\" title=\"It is an online event\" role=\"img\" aria-label=\"It is an online event\"/>" +#: model_terms:ir.ui.view,arch_db:website_event.event_description_full +msgid "<i class=\"fa fa-clock-o\"/>\n" +" <span>To</span>" msgstr "" #. module: website_event -#: model_terms:ir.ui.view,arch_db:website_event.registration_complete -msgid "<i class=\"fa fa-envelope\" role=\"img\" aria-label=\"Email\" title=\"Email\"/>" +#: model_terms:ir.ui.view,arch_db:website_event.country_events_list +msgid "<i class=\"fa fa-cloud\" title=\"It is an online event\" role=\"img\" aria-label=\"It is an online event\"/>" msgstr "" #. module: website_event -#: model_terms:ir.ui.view,arch_db:website_event.country_events -msgid "<i class=\"fa fa-flag fa-5x text-muted\" title=\"Local Events\" role=\"img\" aria-label=\"Local Events\"/>" +#: model_terms:ir.ui.view,arch_db:website_event.registration_complete +msgid "<i class=\"fa fa-envelope text-primary\" role=\"img\" aria-label=\"Email\" title=\"Email\"/>" msgstr "" #. module: website_event -#: model_terms:ir.ui.view,arch_db:website_event.event_right_country_event -msgid "<i class=\"fa fa-flag fa-5x\"/>\n" -" Events from Your Country" +#: model_terms:ir.ui.view,arch_db:website_event.s_country_events +msgid "<i class=\"fa fa-flag\"/> Events from Your Country" msgstr "" #. module: website_event #: model_terms:ir.ui.view,arch_db:website_event.registration_complete -msgid "<i class=\"fa fa-fw fa-arrow-right\"/>Add to Google Calendar" +msgid "<i class=\"fa fa-fw fa-calendar\"/> Add to Google Calendar" msgstr "" #. module: website_event #: model_terms:ir.ui.view,arch_db:website_event.registration_complete -msgid "<i class=\"fa fa-fw fa-arrow-right\"/>Add to iCal/Outlook" +msgid "<i class=\"fa fa-fw fa-calendar\"/> Add to iCal/Outlook" msgstr "" #. module: website_event @@ -113,23 +112,25 @@ msgstr "" #. module: website_event #: model_terms:ir.ui.view,arch_db:website_event.registration_complete -msgid "<i class=\"fa fa-phone\" role=\"img\" aria-label=\"Phone\" title=\"Phone\"/>" +msgid "<i class=\"fa fa-phone text-primary \" role=\"img\" aria-label=\"Phone\" title=\"Phone\"/>" msgstr "" #. module: website_event #: model_terms:ir.ui.view,arch_db:website_event.index -msgid "<i class=\"fa fa-tag\" role=\"img\" aria-label=\"Event type\" title=\"Event type\"/>" +#: model_terms:ir.ui.view,arch_db:website_event.registration_complete +msgid "<i class=\"fa fa-ticket\" role=\"img\" aria-label=\"Event type\" title=\"Event type\"/>" msgstr "" #. module: website_event #: model_terms:ir.ui.view,arch_db:website_event.registration_complete -msgid "<i class=\"fa fa-user\" role=\"img\" aria-label=\"Name\" title=\"Name\"/>" +msgid "<i class=\"fa fa-user text-primary\" role=\"img\" aria-label=\"Name\" title=\"Name\"/>" msgstr "" #. module: website_event -#: model_terms:ir.ui.view,arch_db:website_event.index -#: model_terms:ir.ui.view,arch_db:website_event.registration_complete -msgid "<i>to</i>" +#: model_terms:ir.ui.view,arch_db:website_event.event_right_quotes +msgid "<i>Write here a quote from one of your attendees.\n" +" It gives confidence in your\n" +" events.</i>" msgstr "" #. module: website_event @@ -138,13 +139,14 @@ msgid "<small>Author</small>" msgstr "" #. module: website_event -#: model_terms:ir.ui.view,arch_db:website_event.country_events_list -msgid "<span class=\"badge badge-danger\" role=\"img\" aria-label=\"Attention: not published\" title=\"Not published\"><i class=\"fa fa-ban\"/></span>" +#: model_terms:ir.ui.view,arch_db:website_event.index +#: model_terms:ir.ui.view,arch_db:website_event.registration_complete +msgid "<small>to</small>" msgstr "" #. module: website_event -#: model_terms:ir.ui.view,arch_db:website_event.country_events -msgid "<span class=\"oe_snippet_thumbnail_title\">Local Events</span>" +#: model_terms:ir.ui.view,arch_db:website_event.country_events_list +msgid "<span class=\"badge badge-danger\" role=\"img\" aria-label=\"Attention: not published\" title=\"Not published\"><i class=\"fa fa-ban\"/></span>" msgstr "" #. module: website_event @@ -198,7 +200,7 @@ msgstr "" #. module: website_event #: model_terms:ir.ui.view,arch_db:website_event.registration_attendee_details -msgid "<strong>Phone</strong> <span class=\"text-muted\">(Optional)</span>" +msgid "<strong>Phone <small>(optional)</small></strong>" msgstr "" #. module: website_event @@ -240,7 +242,7 @@ msgstr "" #. module: website_event #: model_terms:ir.ui.view,arch_db:website_event.registration_attendee_details -msgid "Cancel Registration" +msgid "Cancel" msgstr "" #. module: website_event @@ -284,7 +286,7 @@ msgstr "" #. module: website_event #: model_terms:ir.ui.view,arch_db:website_event.registration_attendee_details -msgid "Continue" +msgid "Continue Registration" msgstr "" #. module: website_event @@ -396,11 +398,6 @@ msgid "Events" msgstr "" #. module: website_event -#: model_terms:ir.ui.view,arch_db:website_event.country_events -msgid "Events in visitor's country" -msgstr "" - -#. module: website_event #: model_terms:ir.ui.view,arch_db:website_event.country_events_list msgid "Events:" msgstr "" @@ -417,7 +414,7 @@ msgid "Google Maps" msgstr "" #. module: website_event -#: code:addons/website_event/models/event.py:70 +#: code:addons/website_event/models/event.py:61 #, python-format msgid "Introduction" msgstr "" @@ -433,7 +430,7 @@ msgid "Is published" msgstr "" #. module: website_event -#: code:addons/website_event/models/event.py:71 +#: code:addons/website_event/models/event.py:62 #, python-format msgid "Location" msgstr "" @@ -475,12 +472,6 @@ msgid "Next month" msgstr "" #. module: website_event -#: code:addons/website_event/models/event.py:150 -#, python-format -msgid "No date has been specified for the event, no file will be generated." -msgstr "" - -#. module: website_event #: model_terms:ir.ui.view,arch_db:website_event.index msgid "No event found" msgstr "" @@ -504,7 +495,7 @@ msgstr "" #. module: website_event #: model_terms:ir.ui.view,arch_db:website_event.index -msgid "Organized by:" +msgid "Organized by" msgstr "" #. module: website_event @@ -546,7 +537,7 @@ msgstr "" #. module: website_event #. openerp-web -#: code:addons/website_event/static/src/js/website_event.js:55 +#: code:addons/website_event/static/src/js/website_event.js:37 #, python-format msgid "Please select at least one ticket." msgstr "" @@ -582,7 +573,7 @@ msgid "Reference" msgstr "" #. module: website_event -#: code:addons/website_event/models/event.py:72 +#: code:addons/website_event/models/event.py:63 #, python-format msgid "Register" msgstr "" @@ -636,7 +627,7 @@ msgstr "" #. module: website_event #: model_terms:ir.ui.view,arch_db:website_event.registration_attendee_details -msgid "Ticket Type #" +msgid "Ticket Type:" msgstr "" #. module: website_event @@ -646,13 +637,13 @@ msgid "Today" msgstr "" #. module: website_event -#: model_terms:ir.ui.view,arch_db:website_event.index -msgid "Use the top menu <i>'Content'</i> to create your first event." +#: model_terms:ir.ui.view,arch_db:website_event.layout +msgid "Toggle navigation" msgstr "" #. module: website_event -#: model_terms:ir.ui.view,arch_db:website_event.event_description_full -msgid "Visualize on Google Maps" +#: model_terms:ir.ui.view,arch_db:website_event.index +msgid "Use the top menu <i>'Content'</i> to create your first event." msgstr "" #. module: website_event @@ -681,13 +672,6 @@ msgid "Where" msgstr "" #. module: website_event -#: model_terms:ir.ui.view,arch_db:website_event.event_right_quotes -msgid "Write here a quote from one of your attendees.\n" -" It gives confidence in your\n" -" events." -msgstr "" - -#. module: website_event #: model_terms:ir.ui.view,arch_db:website_event.registration_complete msgid "Your registration" msgstr "" diff --git a/addons/website_event/views/event_templates.xml b/addons/website_event/views/event_templates.xml index c334aa2ed24..a66521e3290 100644 --- a/addons/website_event/views/event_templates.xml +++ b/addons/website_event/views/event_templates.xml @@ -309,7 +309,7 @@ <template id="event_description_full"> <t t-call="website_event.event_details"> - <div class="col-lg-9"> + <div class="col"> <div t-if="event.state == 'done' or not registrable" class="alert alert-info" role="status">Registration for this event is now closed</div> <t t-if="event.state != 'done' and registrable" t-call="website_event.registration_template"/> <div class="clearfix"/> @@ -332,7 +332,7 @@ </li> </ul> </div> - <div class="col-lg-3 css_noprint"> + <div class="col-lg-4 css_noprint"> <div class="clearfix"/> <t t-if="not event.is_online"> <div class="card bg-secondary" t-if="event.address_id"> @@ -343,7 +343,7 @@ <img t-att-src="event.google_map_img()" width="100%%" alt="Google Maps"/> </a> </t> - <h4 t-field="event.address_id" class="text-secondary font-weight-bold" t-options='{ + <div t-field="event.address_id" class="text-secondary font-weight-bold" t-options='{ "widget": "contact", "fields": ["name"] }'/> @@ -361,17 +361,19 @@ <div class="card bg-secondary my-3"> <h4 class="card-header">When</h4> <div class="card-body"> - <span class="font-weight-bold small">From</span> + <i class="fa fa-clock-o"/> + <span>From</span> <span t-field="event.with_context(tz=event.date_tz).date_begin" t-options='{"hide_seconds":"True"}'/> <hr/> - <span class="font-weight-bold small">To</span> + <i class="fa fa-clock-o"/> + <span>To</span> <span t-field="event.with_context(tz=event.date_tz).date_end" t-options='{"hide_seconds":"True"}'/> </div> </div> <div class="card bg-secondary my-3" t-if="event.organizer_id"> <h4 class="card-header">Organizer</h4> <div class="card-body"> - <h4 t-field="event.organizer_id" class="text-secondary font-weight-bold"/> + <div t-field="event.organizer_id" class="text-secondary font-weight-bold"/> <div itemprop="location" t-field="event.organizer_id" t-options='{ "widget": "contact", "fields": ["phone", "mobile", "email"] diff --git a/addons/website_event_sale/i18n/website_event_sale.pot b/addons/website_event_sale/i18n/website_event_sale.pot index 48320c60ec2..88ceb42bc02 100644 --- a/addons/website_event_sale/i18n/website_event_sale.pot +++ b/addons/website_event_sale/i18n/website_event_sale.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-24 10:58+0000\n" -"PO-Revision-Date: 2018-12-24 10:58+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -31,6 +31,18 @@ msgid "<span>left</span>" msgstr "" #. module: website_event_sale +#: code:addons/website_event_sale/models/product_pricelist.py:16 +#, python-format +msgid "A pricelist item with a positive min. quantity cannot be applied to this event tickets product." +msgstr "" + +#. module: website_event_sale +#: code:addons/website_event_sale/models/product_pricelist.py:13 +#, python-format +msgid "A pricelist item with a positive min. quantity will not be applied to the event tickets products." +msgstr "" + +#. module: website_event_sale #: model:ir.model.fields,field_description:website_event_sale.field_product_product__event_ticket_ids msgid "Event Tickets" msgstr "" @@ -46,6 +58,11 @@ msgid "Only" msgstr "" #. module: website_event_sale +#: model:ir.model,name:website_event_sale.model_product_pricelist_item +msgid "Pricelist Item" +msgstr "" + +#. module: website_event_sale #: model:ir.model,name:website_event_sale.model_product_product msgid "Product" msgstr "" @@ -100,6 +117,12 @@ msgid "Ticket" msgstr "" #. module: website_event_sale +#: code:addons/website_event_sale/models/product_pricelist.py:20 +#, python-format +msgid "Warning" +msgstr "" + +#. module: website_event_sale #: model:ir.model,name:website_event_sale.model_website msgid "Website" msgstr "" diff --git a/addons/website_event_track/i18n/website_event_track.pot b/addons/website_event_track/i18n/website_event_track.pot index 9e4e0e392b7..8449cf21d29 100644 --- a/addons/website_event_track/i18n/website_event_track.pot +++ b/addons/website_event_track/i18n/website_event_track.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-08 06:49+0000\n" -"PO-Revision-Date: 2018-10-08 06:49+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -163,7 +163,7 @@ msgid "Advanced reporting" msgstr "" #. module: website_event_track -#: code:addons/website_event_track/models/event.py:97 +#: code:addons/website_event_track/models/event.py:94 #, python-format msgid "Agenda" msgstr "" @@ -215,6 +215,11 @@ msgid "Call for Proposals" msgstr "" #. module: website_event_track +#: model:ir.model.fields,field_description:website_event_track.field_event_track__can_publish +msgid "Can publish" +msgstr "" + +#. module: website_event_track #: model:ir.model.fields,field_description:website_event_track.field_event_track_stage__is_cancel msgid "Canceled Stage" msgstr "" @@ -1047,7 +1052,7 @@ msgid "Talk Introduction" msgstr "" #. module: website_event_track -#: code:addons/website_event_track/models/event.py:102 +#: code:addons/website_event_track/models/event.py:99 #, python-format msgid "Talk Proposals" msgstr "" @@ -1058,7 +1063,7 @@ msgid "Talk Title" msgstr "" #. module: website_event_track -#: code:addons/website_event_track/models/event.py:96 +#: code:addons/website_event_track/models/event.py:93 #, python-format msgid "Talks" msgstr "" diff --git a/addons/website_forum/controllers/main.py b/addons/website_forum/controllers/main.py index f31b59e430f..ed2cb30df2e 100644 --- a/addons/website_forum/controllers/main.py +++ b/addons/website_forum/controllers/main.py @@ -3,6 +3,7 @@ import json import lxml import requests +import logging import werkzeug.exceptions import werkzeug.urls import werkzeug.wrappers @@ -15,6 +16,8 @@ from odoo.addons.website.models.ir_http import sitemap_qs2dom from odoo.addons.website_profile.controllers.main import WebsiteProfile from odoo.http import request +_logger = logging.getLogger(__name__) + class WebsiteForum(WebsiteProfile): _post_per_page = 10 @@ -26,8 +29,6 @@ class WebsiteForum(WebsiteProfile): values.update({ 'header': kwargs.get('header', dict()), 'searches': kwargs.get('searches', dict()), - 'validation_email_sent': request.session.get('validation_email_sent', False), - 'validation_email_done': request.session.get('validation_email_done', False), }) if kwargs.get('forum'): values['forum'] = kwargs.get('forum') @@ -37,32 +38,21 @@ class WebsiteForum(WebsiteProfile): # User and validation # -------------------------------------------------- - + # TODO DBE : Those 3 are deprecated. To remove in v13. @http.route('/forum/send_validation_email', type='json', auth='user', website=True) - def send_validation_email(self, forum_id=None, **kwargs): - if request.env.uid != request.website.user_id.id: - request.env.user._send_forum_validation_email(forum_id=forum_id) - request.session['validation_email_sent'] = True - return True + def send_forum_validation_email(self, forum_id=None, **kwargs): + _logger.warning("The method send_forum_validation_email() is deprecated and should be removed in v13.") + return self.send_forum_validation_email(forum_id=forum_id, **kwargs) @http.route('/forum/validate_email', type='http', auth='public', website=True, sitemap=False) - def validate_email(self, token, id, email, forum_id=None, **kwargs): - if forum_id: - try: - forum_id = int(forum_id) - except ValueError: - forum_id = None - done = request.env['res.users'].sudo().browse(int(id)).process_forum_validation_token(token, email, forum_id=forum_id)[0] - if done: - request.session['validation_email_done'] = True - if forum_id: - return request.redirect("/forum/%s" % int(forum_id)) - return request.redirect('/forum') + def forum_validate_email(self, token, user_id, email, forum_id=None, **kwargs): + _logger.warning("The method forum_validate_email() is deprecated and should be removed in v13.") + return self.forum_validate_email(token=token, user_id=user_id, email=email, forum_id=forum_id, **kwargs) @http.route('/forum/validate_email/close', type='json', auth='public', website=True) - def validate_email_done(self): - request.session['validation_email_done'] = False - return True + def forum_validate_email_done(self, **kwargs): + _logger.warning("The method forum_validate_email_done() is deprecated and should be removed in v13.") + return self.validate_email_done(**kwargs) # Forum # -------------------------------------------------- @@ -550,6 +540,7 @@ class WebsiteForum(WebsiteProfile): # Profile # ----------------------------------- + @http.route(['/forum/<model("forum.forum"):forum>/user/<int:user_id>'], type='http', auth="public", website=True) def view_user_forum_profile(self, forum, user_id, **post): return werkzeug.utils.redirect('/profile/user/' + str(user_id) + '?forum_id=' + str(forum.id)) diff --git a/addons/website_forum/data/forum_data.xml b/addons/website_forum/data/forum_data.xml index fe5fb2b8ea2..4196804495a 100644 --- a/addons/website_forum/data/forum_data.xml +++ b/addons/website_forum/data/forum_data.xml @@ -129,107 +129,5 @@ <field name="reason_type">offensive</field> </record> - <!-- Email template for email validation (for karma purpose) --> - <record id="validation_email" model="mail.template"> - <field name="name">Forum: Email Verification</field> - <field name="model_id" ref="base.model_res_users"/> - <field name="subject">${object.company_id.name} Forums validation</field> - <field name="email_from">${('<%s>' % (object.env.user.company_id.email or user.email)) | safe}</field> - <field name="email_to">${object.email|safe}</field> - <field name="body_html" type="html"> -<table border="0" cellpadding="0" cellspacing="0" style="padding-top: 16px; background-color: #F1F1F1; color: #454748; width: 100%; border-collapse:separate;"><tr><td align="center"> -<table border="0" cellpadding="0" cellspacing="0" width="590" style="padding: 16px; background-color: white; color: #454748; border-collapse:separate;"> -<tbody> - <!-- HEADER --> - <tr> - <td align="center" style="min-width: 590px;"> - <table border="0" cellpadding="0" cellspacing="0" width="590" style="min-width: 590px; background-color: white; padding: 0px 8px 0px 8px; border-collapse:separate;"> - <tr> - <td valign="middle"> - <span style="font-size: 10px;">Your Forum</span><br/> - <span style="font-size: 20px; font-weight: bold;"> - ${object.company_id.name} Forum validation - </span> - </td> - <td valign="middle" align="right"> - <img src="/logo.png?company=${user.company_id.id}" style="padding: 0px; margin: 0px; height: auto; width: 80px;" alt="${user.company_id.name}"/> - </td> - </tr> - <tr> - <td colspan="2" style="text-align:center;"> - <hr width="100%" style="background-color:rgb(204,204,204);border:medium none;clear:both;display:block;font-size:0px;min-height:1px;line-height:0; margin:16px 0px 16px 0px;"/> - </td> - </tr> - </table> - </td> - </tr> - <!-- CONTENT --> - <tr> - <td align="center" style="min-width: 590px;"> - <table border="0" cellpadding="0" cellspacing="0" width="590" style="min-width: 590px; background-color: white; padding: 0px 8px 0px 8px; border-collapse:separate;"> - <tr> - <td valign="top" style="font-size: 13px;"> - <p style="margin: 0px; padding: 0px; font-size: 13px;"> - Hello ${object.name},<br /><br /> - You have been invited to validate your email in order to get access to "${object.company_id.name}" Q/A Forums. - To validate your email, please click on the following link: - <div style="margin: 16px 0px 16px 0px;"> - <a href="${ctx.get('token_url')}" - style="background-color: #875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: #fff; border-radius: 5px; font-size:13px;"> - Validate my account - </a> - </div> - Thanks for your participation! - </p> - </td> - </tr> - <tr> - <td style="text-align:center;"> - <hr width="100%" style="background-color:rgb(204,204,204);border:medium none;clear:both;display:block;font-size:0px;min-height:1px;line-height:0; margin: 16px 0px 16px 0px;"/> - </td> - </tr> - </table> - </td> - </tr> - <!-- FOOTER --> - <tr> - <td align="center" style="min-width: 590px;"> - <table border="0" cellpadding="0" cellspacing="0" width="590" style=" font-family: 'Verdana Regular'; color: #454748; min-width: 590px; background-color: white; font-size: 11px; padding: 0px 8px 0px 8px; border-collapse:separate;"> - <tr> - <td valign="middle" align="left"> - ${user.company_id.name} - </td> - <td valign="middle" align="right" style="opacity: 0.7;"> - ${user.company_id.phone} - % if user.company_id.email: - | <a href="'mailto:%s' % ${user.company_id.email}" style="text-decoration:none; color: #454748;"> - ${user.company_id.email} - </a> - % endif - % if user.company_id.website: - | <a href="${user.company_id.website}" style="text-decoration:none; color: #454748;"> - ${user.company_id.website} - </a> - % endif - </td> - </tr> - </table> - </td> - </tr> -</tbody> -</table> -</td></tr> -<!-- POWERED BY --> -<tr><td align="center" style="min-width: 590px;"> - <table border="0" cellpadding="0" cellspacing="0" width="590" style="min-width: 590px; background-color: #F1F1F1; color: #454748; padding: 8px; border-collapse:separate;"> - <tr><td style="text-align: center; font-size: 13px;"> - Powered by <a target="_blank" href="https://www.odoo.com?utm_source=db&utm_medium=forum" style="color: #875A7B;">Odoo</a> - </td></tr> - </table> -</td></tr> -</table> - </field> - </record> - </data> </odoo> diff --git a/addons/website_forum/i18n/website_forum.pot b/addons/website_forum/i18n/website_forum.pot index 33c786b5065..931ed63a407 100644 --- a/addons/website_forum/i18n/website_forum.pot +++ b/addons/website_forum/i18n/website_forum.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 08:00+0000\n" -"PO-Revision-Date: 2019-01-16 08:00+0000\n" +"POT-Creation-Date: 2019-03-20 13:51+0000\n" +"PO-Revision-Date: 2019-03-20 13:51+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,21 +16,11 @@ msgstr "" "Plural-Forms: \n" #. module: website_forum -#: model:mail.template,subject:website_forum.validation_email -msgid "${object.company_id.name} Forums validation" -msgstr "" - -#. module: website_forum #: model_terms:ir.ui.view,arch_db:website_forum.tag msgid "&nbsp;" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.header -msgid "&times;" -msgstr "" - -#. module: website_forum #: model_terms:ir.ui.view,arch_db:website_forum.view_forum_forum_form msgid "(Un)archiving a forum automatically (un)archives its posts. Do you want to proceed?" msgstr "" @@ -66,56 +56,6 @@ msgid "65% more chance to get an\n" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.user_detail_full -msgid "<b class=\"text-muted\">Badges</b>" -msgstr "" - -#. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.user_detail_full -msgid "<b class=\"text-muted\">Bio</b>" -msgstr "" - -#. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.user_detail_full -msgid "<b class=\"text-muted\">Contribution</b>" -msgstr "" - -#. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.user_detail_full -msgid "<b class=\"text-muted\">Introduction</b>" -msgstr "" - -#. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.user_detail_full -msgid "<b class=\"text-muted\">Karma</b>" -msgstr "" - -#. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.user_detail_full -msgid "<b class=\"text-muted\">Votes</b>" -msgstr "" - -#. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.user_detail_full -msgid "<b class=\"text-primary\">Last connection</b>" -msgstr "" - -#. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.user_detail_full -msgid "<b class=\"text-primary\">Location</b>" -msgstr "" - -#. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.user_detail_full -msgid "<b class=\"text-primary\">Member since</b>" -msgstr "" - -#. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.user_detail_full -msgid "<b class=\"text-primary\">Website</b>" -msgstr "" - -#. module: website_forum #: model_terms:ir.ui.view,arch_db:website_forum.display_post_question_block #: model_terms:ir.ui.view,arch_db:website_forum.post_description_full msgid "<b> [Closed]</b>" @@ -140,26 +80,6 @@ msgid "<b>About This Community</b>" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.edit_profile -msgid "<b>Biography</b>" -msgstr "" - -#. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.edit_profile -msgid "<b>City</b>" -msgstr "" - -#. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.edit_profile -msgid "<b>Country</b>" -msgstr "" - -#. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.edit_profile -msgid "<b>Email</b>" -msgstr "" - -#. module: website_forum #: model_terms:ir.ui.view,arch_db:website_forum.header msgid "<b>Keep Informed</b>" msgstr "" @@ -170,16 +90,6 @@ msgid "<b>Moderation Tools</b>" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.user_badges -msgid "<b>No badge yet!</b><br/>" -msgstr "" - -#. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.user_votes -msgid "<b>No vote given by you yet!</b>" -msgstr "" - -#. module: website_forum #: model_terms:ir.ui.view,arch_db:website_forum.post_answer msgid "<b>Please try to give a substantial answer.</b> If you wanted to comment on the question or answer, just\n" " <b>use the commenting tool.</b> Please remember that you can always <b>revise your answers</b>\n" @@ -188,21 +98,6 @@ msgid "<b>Please try to give a substantial answer.</b> If you wanted to comment msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.edit_profile -msgid "<b>Public profile</b>" -msgstr "" - -#. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.edit_profile -msgid "<b>Real name</b>" -msgstr "" - -#. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.edit_profile -msgid "<b>Website</b>" -msgstr "" - -#. module: website_forum #: model_terms:ir.ui.view,arch_db:website_forum.faq msgid "<b>Why can other people edit my questions/answers?</b> <i class=\"fa fa-caret-down float-right\"/>" msgstr "" @@ -295,7 +190,7 @@ msgstr "" #. module: website_forum #: model_terms:ir.ui.view,arch_db:website_forum.post_description_full -msgid "<i class=\" fa fa-reply\"/> <b>Reply</b>" +msgid "<i class=\" fa fa-comment-o\"/> <b>Comment</b>" msgstr "" #. module: website_forum @@ -314,7 +209,7 @@ msgid "<i class=\"fa fa-check-circle text-success\"/> <b class=\"text-success\"> msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.header +#: model_terms:ir.ui.view,arch_db:website_forum.forum_nav_header msgid "<i class=\"fa fa-cog\" role=\"img\" aria-label=\"Dropdown menu\" title=\"Dropdown menu\"/>" msgstr "" @@ -336,8 +231,8 @@ msgid "<i class=\"fa fa-flag\"/> Country" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.edit_profile -msgid "<i class=\"fa fa-pencil fa-1g float-sm-none float-md-left\" title=\"Edit\"/>" +#: model_terms:ir.ui.view,arch_db:website_forum.post_description_full +msgid "<i class=\"fa fa-reply\"/> <b>Reply</b>" msgstr "" #. module: website_forum @@ -351,46 +246,23 @@ msgid "<i class=\"fa fa-share-alt\"/> <b>Share</b>" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.user_detail_full +#: model_terms:ir.ui.view,arch_db:website_forum.user_profile_content msgid "<i class=\"fa fa-thumbs-down text-danger ml-3\" role=\"img\" aria-label=\"Negative votes\" title=\"Negative votes\"/>" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.user_detail_full +#: model_terms:ir.ui.view,arch_db:website_forum.user_profile_content msgid "<i class=\"fa fa-thumbs-up text-success\" role=\"img\" aria-label=\"Positive votes\" title=\"Positive votes\"/>" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.user_detail_full -#: model_terms:ir.ui.view,arch_db:website_forum.users -msgid "<i class=\"fa fa-trophy badge-bronze ml16\" role=\"img\" aria-label=\"Bronze badge\" title=\"Bronze badge\"/>" -msgstr "" - -#. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.user_detail_full -#: model_terms:ir.ui.view,arch_db:website_forum.users -msgid "<i class=\"fa fa-trophy badge-gold\" role=\"img\" aria-label=\"Gold badge\" title=\"Gold badge\"/>" -msgstr "" - -#. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.user_detail_full -#: model_terms:ir.ui.view,arch_db:website_forum.users -msgid "<i class=\"fa fa-trophy badge-silver ml16\" role=\"img\" aria-label=\"Silver badge\" title=\"Silver badge\"/>" -msgstr "" - -#. module: website_forum #: model_terms:ir.ui.view,arch_db:website_forum.moderation_queue msgid "<i class=\"fa fa-user\"/> User" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.badge -msgid "<i class=\"text-muted\"> awarded users</i>" -msgstr "" - -#. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.user_badges -msgid "<i class=\"text-muted\">awarded users</i>" +#: model_terms:ir.ui.view,arch_db:website_forum.user_profile_content +msgid "<small class=\"font-weight-bold\">Votes</small>" msgstr "" #. module: website_forum @@ -411,6 +283,16 @@ msgid "<span class=\"fa fa-trophy badge-silver ml-2\" role=\"img\" aria-label=\" msgstr "" #. module: website_forum +#: model_terms:ir.ui.view,arch_db:website_forum.user_profile_content +msgid "<span class=\"font-weight-bold\">No answer posted yet.</span>" +msgstr "" + +#. module: website_forum +#: model_terms:ir.ui.view,arch_db:website_forum.user_profile_content +msgid "<span class=\"font-weight-bold\">No question posted yet.</span>" +msgstr "" + +#. module: website_forum #: model_terms:ir.ui.view,arch_db:website_forum.post_description_full msgid "<span class=\"text-muted\">(only one answer per question is allowed)</span>" msgstr "" @@ -438,101 +320,6 @@ msgid "<span>By </span>" msgstr "" #. module: website_forum -#: model:mail.template,body_html:website_forum.validation_email -msgid "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"padding-top: 16px; background-color: #F1F1F1; color: #454748; width: 100%; border-collapse:separate;\"><tr><td align=\"center\">\n" -"<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"590\" style=\"padding: 16px; background-color: white; color: #454748; border-collapse:separate;\">\n" -"<tbody>\n" -" <!-- HEADER -->\n" -" <tr>\n" -" <td align=\"center\" style=\"min-width: 590px;\">\n" -" <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"590\" style=\"min-width: 590px; background-color: white; padding: 0px 8px 0px 8px; border-collapse:separate;\">\n" -" <tr>\n" -" <td valign=\"middle\">\n" -" <span style=\"font-size: 10px;\">Your Forum</span><br/>\n" -" <span style=\"font-size: 20px; font-weight: bold;\">\n" -" ${object.company_id.name} Forum validation\n" -" </span>\n" -" </td>\n" -" <td valign=\"middle\" align=\"right\">\n" -" <img src=\"/logo.png?company=${user.company_id.id}\" style=\"padding: 0px; margin: 0px; height: auto; width: 80px;\" alt=\"${user.company_id.name}\"/>\n" -" </td>\n" -" </tr>\n" -" <tr>\n" -" <td colspan=\"2\" style=\"text-align:center;\">\n" -" <hr width=\"100%\" style=\"background-color:rgb(204,204,204);border:medium none;clear:both;display:block;font-size:0px;min-height:1px;line-height:0; margin:16px 0px 16px 0px;\"/>\n" -" </td>\n" -" </tr>\n" -" </table>\n" -" </td>\n" -" </tr>\n" -" <!-- CONTENT -->\n" -" <tr>\n" -" <td align=\"center\" style=\"min-width: 590px;\">\n" -" <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"590\" style=\"min-width: 590px; background-color: white; padding: 0px 8px 0px 8px; border-collapse:separate;\">\n" -" <tr>\n" -" <td valign=\"top\" style=\"font-size: 13px;\">\n" -" <p style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n" -" Hello ${object.name},<br/><br/>\n" -" You have been invited to validate your email in order to get access to \"${object.company_id.name}\" Q/A Forums.\n" -" To validate your email, please click on the following link:\n" -" <div style=\"margin: 16px 0px 16px 0px;\">\n" -" <a href=\"${ctx.get('token_url')}\" style=\"background-color: #875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: #fff; border-radius: 5px; font-size:13px;\">\n" -" Validate my account\n" -" </a>\n" -" </div>\n" -" Thanks for your participation!\n" -" </p>\n" -" </td>\n" -" </tr>\n" -" <tr>\n" -" <td style=\"text-align:center;\">\n" -" <hr width=\"100%\" style=\"background-color:rgb(204,204,204);border:medium none;clear:both;display:block;font-size:0px;min-height:1px;line-height:0; margin: 16px 0px 16px 0px;\"/>\n" -" </td>\n" -" </tr>\n" -" </table>\n" -" </td>\n" -" </tr>\n" -" <!-- FOOTER -->\n" -" <tr>\n" -" <td align=\"center\" style=\"min-width: 590px;\">\n" -" <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"590\" style=\" font-family: 'Verdana Regular'; color: #454748; min-width: 590px; background-color: white; font-size: 11px; padding: 0px 8px 0px 8px; border-collapse:separate;\">\n" -" <tr>\n" -" <td valign=\"middle\" align=\"left\">\n" -" ${user.company_id.name}\n" -" </td>\n" -" <td valign=\"middle\" align=\"right\" style=\"opacity: 0.7;\">\n" -" ${user.company_id.phone}\n" -" % if user.company_id.email:\n" -" | <a href=\"'mailto:%s' % ${user.company_id.email}\" style=\"text-decoration:none; color: #454748;\">\n" -" ${user.company_id.email}\n" -" </a>\n" -" % endif\n" -" % if user.company_id.website:\n" -" | <a href=\"${user.company_id.website}\" style=\"text-decoration:none; color: #454748;\">\n" -" ${user.company_id.website}\n" -" </a>\n" -" % endif\n" -" </td>\n" -" </tr>\n" -" </table>\n" -" </td>\n" -" </tr>\n" -"</tbody>\n" -"</table>\n" -"</td></tr>\n" -"<!-- POWERED BY -->\n" -"<tr><td align=\"center\" style=\"min-width: 590px;\">\n" -" <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"590\" style=\"min-width: 590px; background-color: #F1F1F1; color: #454748; padding: 8px; border-collapse:separate;\">\n" -" <tr><td style=\"text-align: center; font-size: 13px;\">\n" -" Powered by <a target=\"_blank\" href=\"https://www.odoo.com?utm_source=db&utm_medium=forum\" style=\"color: #875A7B;\">Odoo</a>\n" -" </td></tr>\n" -" </table>\n" -"</td></tr>\n" -"</table>\n" -" " -msgstr "" - -#. module: website_forum #: model_terms:ir.ui.view,arch_db:website_forum.forum_post_template_new_answer msgid "A new answer on" msgstr "" @@ -590,13 +377,18 @@ msgid "Active" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.user_detail_full +#: model_terms:ir.ui.view,arch_db:website_forum.user_profile_content +msgid "Activities" +msgstr "" + +#. module: website_forum +#: model_terms:ir.ui.view,arch_db:website_forum.user_profile_content msgid "Activity" msgstr "" #. module: website_forum #. openerp-web -#: code:addons/website_forum/static/src/js/website_forum.editor.js:45 +#: code:addons/website_forum/static/src/js/website_forum.editor.js:44 #, python-format msgid "Add to menu" msgstr "" @@ -607,7 +399,7 @@ msgid "After posting the user will be proposed to share its question or answer o msgstr "" #. module: website_forum -#: code:addons/website_forum/controllers/main.py:199 +#: code:addons/website_forum/controllers/main.py:179 #: model_terms:ir.ui.view,arch_db:website_forum.forum_index #, python-format msgid "All" @@ -625,7 +417,7 @@ msgid "Answer" msgstr "" #. module: website_forum -#: code:addons/website_forum/models/forum.py:484 +#: code:addons/website_forum/models/forum.py:469 #: model:mail.message.subtype,description:website_forum.mt_answer_edit #: model:mail.message.subtype,name:website_forum.mt_answer_edit #, python-format @@ -706,7 +498,7 @@ msgstr "" #: model:ir.model.fields,field_description:website_forum.field_forum_post__child_ids #: model_terms:ir.ui.view,arch_db:website_forum.display_post_question_block #: model_terms:ir.ui.view,arch_db:website_forum.post_description_full -#: model_terms:ir.ui.view,arch_db:website_forum.user_detail_full +#: model_terms:ir.ui.view,arch_db:website_forum.user_profile_content #: model_terms:ir.ui.view,arch_db:website_forum.view_forum_post_form #: model_terms:ir.ui.view,arch_db:website_forum.view_forum_post_search msgid "Answers" @@ -820,38 +612,18 @@ msgid "Back to" msgstr "" #. module: website_forum -#: code:addons/website_forum/controllers/main.py:338 -#: code:addons/website_forum/controllers/main.py:406 +#: code:addons/website_forum/controllers/main.py:318 +#: code:addons/website_forum/controllers/main.py:386 #, python-format msgid "Bad Request" msgstr "" #. module: website_forum -#: model:ir.model.fields,field_description:website_forum.field_res_users__badge_ids -#: model_terms:ir.ui.view,arch_db:website_forum.badge -#: model_terms:ir.ui.view,arch_db:website_forum.header -#: model_terms:ir.ui.view,arch_db:website_forum.user_detail_full +#: model_terms:ir.ui.view,arch_db:website_forum.forum_nav_header msgid "Badges" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.users -msgid "Badges:" -msgstr "" - -#. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.badge -msgid "Besides gaining reputation with your questions and answers,\n" -" you receive badges for being especially helpful. Badges\n" -" appear on your profile page, and your posts." -msgstr "" - -#. module: website_forum -#: model:ir.model.fields,field_description:website_forum.field_res_users__bronze_badge -msgid "Bronze badges count" -msgstr "" - -#. module: website_forum #: model:ir.model.fields,field_description:website_forum.field_forum_post__bump_date msgid "Bumped on" msgstr "" @@ -939,11 +711,6 @@ msgid "Change question tags" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.user_badges -msgid "Check available badges" -msgstr "" - -#. module: website_forum #: model:ir.model.fields,help:website_forum.field_forum_forum__allow_bump msgid "Check this box to display a popup for posts older than 10 days without any given answer. The popup will offer to share it on social networks. When shared, a question is bumped at the top of the forum." msgstr "" @@ -955,11 +722,6 @@ msgid "Chief Commentator" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.edit_profile -msgid "Clear" -msgstr "" - -#. module: website_forum #. openerp-web #: code:addons/website_forum/static/src/js/website_tour_forum.js:24 #, python-format @@ -974,11 +736,6 @@ msgid "Click here to accept this answer." msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.header -msgid "Click here to send a verification email allowing you to participate to the forum." -msgstr "" - -#. module: website_forum #: model_terms:ir.ui.view,arch_db:website_forum.new_question msgid "Click to get bad question samples" msgstr "" @@ -1004,7 +761,6 @@ msgstr "" #. module: website_forum #: selection:forum.post,state:0 -#: model_terms:ir.ui.view,arch_db:website_forum.header #: model_terms:ir.ui.view,arch_db:website_forum.post_description_full #: model_terms:ir.ui.view,arch_db:website_forum.tag msgid "Close" @@ -1096,11 +852,6 @@ msgid "Completed own biography" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.header -msgid "Congratulations! Your email has just been validated. You may now participate to our forums." -msgstr "" - -#. module: website_forum #: model:ir.model.fields,field_description:website_forum.field_forum_post__content #: model_terms:ir.ui.view,arch_db:website_forum.view_forum_post_search msgid "Content" @@ -1142,11 +893,6 @@ msgid "Correct answer or answer accepted" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.edit_profile -msgid "Country..." -msgstr "" - -#. module: website_forum #: model:ir.model.fields,field_description:website_forum.field_forum_post_vote__create_date #: model:ir.model.fields,field_description:website_forum.field_res_users__create_date msgid "Create Date" @@ -1245,7 +991,7 @@ msgid "Description" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.header +#: model_terms:ir.ui.view,arch_db:website_forum.forum_nav_header msgid "Design Welcome Message" msgstr "" @@ -1277,18 +1023,12 @@ msgid "Downvote" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.edit_profile #: model_terms:ir.ui.view,arch_db:website_forum.post_answers #: model_terms:ir.ui.view,arch_db:website_forum.post_description_full msgid "Edit" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.edit_profile -msgid "Edit Profile" -msgstr "" - -#. module: website_forum #: model_terms:ir.ui.view,arch_db:website_forum.post_description_full msgid "Edit Your Answer" msgstr "" @@ -1319,11 +1059,6 @@ msgid "Edit your Post" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.user_detail_full -msgid "Edit<i class=\"fa fa-angle-right ml-2\"/>" -msgstr "" - -#. module: website_forum #: model:gamification.badge,name:website_forum.badge_7 #: model:gamification.challenge,name:website_forum.challenge_editor #: model:gamification.challenge.line,name:website_forum.line_editor @@ -1402,7 +1137,7 @@ msgid "Favourite Question (5)" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.user_detail_full +#: model_terms:ir.ui.view,arch_db:website_forum.user_profile_content msgid "Favourite Questions" msgstr "" @@ -1464,7 +1199,7 @@ msgid "Followed" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.user_detail_full +#: model_terms:ir.ui.view,arch_db:website_forum.user_profile_content msgid "Followed Questions" msgstr "" @@ -1506,12 +1241,6 @@ msgid "Forum" msgstr "" #. module: website_forum -#: model:ir.model.fields,field_description:website_forum.field_gamification_badge__level -#: model:ir.model.fields,field_description:website_forum.field_gamification_badge_user__level -msgid "Forum Badge Level" -msgstr "" - -#. module: website_forum #: model_terms:ir.ui.view,arch_db:website_forum.res_users_view_form_preference #: model_terms:ir.ui.view,arch_db:website_forum.view_users_form_forum msgid "Forum Karma" @@ -1519,7 +1248,7 @@ msgstr "" #. module: website_forum #. openerp-web -#: code:addons/website_forum/static/src/js/website_forum.editor.js:34 +#: code:addons/website_forum/static/src/js/website_forum.editor.js:33 #: model:ir.model.fields,field_description:website_forum.field_forum_forum__name #, python-format msgid "Forum Name" @@ -1538,7 +1267,7 @@ msgid "Forum Posts" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.header +#: model_terms:ir.ui.view,arch_db:website_forum.forum_nav_header msgid "Forum Settings" msgstr "" @@ -1555,21 +1284,11 @@ msgid "Forums" msgstr "" #. module: website_forum -#: model:ir.model,name:website_forum.model_gamification_badge -msgid "Gamification Badge" -msgstr "" - -#. module: website_forum #: model:ir.model,name:website_forum.model_gamification_challenge msgid "Gamification Challenge" msgstr "" #. module: website_forum -#: model:ir.model,name:website_forum.model_gamification_badge_user -msgid "Gamification User Badge" -msgstr "" - -#. module: website_forum #. openerp-web #: code:addons/website_forum/static/src/js/website_tour_forum.js:33 #, python-format @@ -1577,11 +1296,6 @@ msgid "Give your question title." msgstr "" #. module: website_forum -#: model:ir.model.fields,field_description:website_forum.field_res_users__gold_badge -msgid "Gold badges count" -msgstr "" - -#. module: website_forum #: model:gamification.badge,name:website_forum.badge_a_3 #: model:gamification.challenge,name:website_forum.challenge_good_answer msgid "Good Answer" @@ -1758,24 +1472,18 @@ msgid "Is the author's biography visible from his post" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.header -msgid "It appears your email has not been verified." +#: code:addons/website_forum/models/forum.py:897 +#, python-format +msgid "It is not allowed to modify someone else's vote." msgstr "" #. module: website_forum -#: code:addons/website_forum/models/forum.py:867 -#: code:addons/website_forum/models/forum.py:887 +#: code:addons/website_forum/models/forum.py:894 #, python-format msgid "It is not allowed to vote for its own post." msgstr "" #. module: website_forum -#: model:ir.model.fields,field_description:website_forum.field_res_users__karma -#: model_terms:ir.ui.view,arch_db:website_forum.user_detail_full -msgid "Karma" -msgstr "" - -#. module: website_forum #: model_terms:ir.ui.view,arch_db:website_forum.view_forum_forum_form msgid "Karma Gains" msgstr "" @@ -1935,7 +1643,7 @@ msgstr "" #. module: website_forum #. openerp-web -#: code:addons/website_forum/static/src/js/website_forum.editor.js:33 +#: code:addons/website_forum/static/src/js/website_forum.editor.js:32 #, python-format msgid "New Forum" msgstr "" @@ -1950,7 +1658,7 @@ msgstr "" #. module: website_forum #: selection:forum.forum,default_order:0 #: model_terms:ir.ui.view,arch_db:website_forum.forum_index -#: model_terms:ir.ui.view,arch_db:website_forum.header +#: model_terms:ir.ui.view,arch_db:website_forum.forum_nav_header msgid "Newest" msgstr "" @@ -1973,17 +1681,39 @@ msgid "Nice Question" msgstr "" #. module: website_forum +#: model_terms:ir.ui.view,arch_db:website_forum.display_activities +msgid "No activities yet!" +msgstr "" + +#. module: website_forum #: model_terms:ir.ui.view,arch_db:website_forum.forum_all msgid "No forum post yet." msgstr "" #. module: website_forum +#: model_terms:ir.ui.view,arch_db:website_forum.user_votes +msgid "No vote given by you yet!" +msgstr "" + +#. module: website_forum #: model:ir.model.fields,field_description:website_forum.field_forum_forum__karma_dofollow msgid "Nofollow links" msgstr "" #. module: website_forum -#: code:addons/website_forum/models/forum.py:474 +#: code:addons/website_forum/models/forum.py:802 +#, python-format +msgid "Not enough karma to comment" +msgstr "" + +#. module: website_forum +#: code:addons/website_forum/models/forum.py:583 +#, python-format +msgid "Not enough karma to refuse a post" +msgstr "" + +#. module: website_forum +#: code:addons/website_forum/models/forum.py:459 #, python-format msgid "Not enough karma to retag." msgstr "" @@ -2101,7 +1831,7 @@ msgid "Pending" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.header +#: model_terms:ir.ui.view,arch_db:website_forum.forum_nav_header msgid "People" msgstr "" @@ -2116,11 +1846,6 @@ msgid "Please enter a descriptive question (should finish by a '?')" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.edit_profile -msgid "Please enter a valid email address in order to receive notifications from answers or comments." -msgstr "" - -#. module: website_forum #: model:gamification.badge,name:website_forum.badge_q_1 #: model:gamification.challenge,name:website_forum.challenge_popular_question msgid "Popular Question" @@ -2194,7 +1919,7 @@ msgid "Posted 100 comments" msgstr "" #. module: website_forum -#: code:addons/website_forum/models/forum.py:422 +#: code:addons/website_forum/models/forum.py:407 #, python-format msgid "Posting answer on a [Deleted] or [Closed] question is not possible." msgstr "" @@ -2206,11 +1931,6 @@ msgid "Posts" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.user_detail_full -msgid "Profile" -msgstr "" - -#. module: website_forum #: model_terms:ir.ui.view,arch_db:website_forum.new_question msgid "Provide enough details and, if possible, give an example." msgstr "" @@ -2245,7 +1965,7 @@ msgid "Question" msgstr "" #. module: website_forum -#: code:addons/website_forum/models/forum.py:487 +#: code:addons/website_forum/models/forum.py:472 #: model:mail.message.subtype,description:website_forum.mt_question_edit #: model:mail.message.subtype,name:website_forum.mt_question_edit #, python-format @@ -2283,7 +2003,7 @@ msgid "Question set as favorite by 5 users" msgstr "" #. module: website_forum -#: code:addons/website_forum/controllers/main.py:339 +#: code:addons/website_forum/controllers/main.py:319 #, python-format msgid "Question should not be empty." msgstr "" @@ -2310,13 +2030,18 @@ msgstr "" #. module: website_forum #: model_terms:ir.ui.view,arch_db:website_forum.forum_index -#: model_terms:ir.ui.view,arch_db:website_forum.user_detail_full +#: model_terms:ir.ui.view,arch_db:website_forum.user_profile_content #: model_terms:ir.ui.view,arch_db:website_forum.view_forum_post_search msgid "Questions" msgstr "" #. module: website_forum -#: code:addons/website_forum/models/forum.py:505 +#: model:ir.ui.menu,name:website_forum.menu_forum_rank_global +msgid "Ranks" +msgstr "" + +#. module: website_forum +#: code:addons/website_forum/models/forum.py:490 #, python-format msgid "Re: %s" msgstr "" @@ -2379,7 +2104,7 @@ msgid "Reopen" msgstr "" #. module: website_forum -#: code:addons/website_forum/controllers/main.py:339 +#: code:addons/website_forum/controllers/main.py:319 #, python-format msgid "Reply should not be empty." msgstr "" @@ -2396,8 +2121,12 @@ msgid "Restrict publishing to this website." msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.404 #: model_terms:ir.ui.view,arch_db:website_forum.private_profile +msgid "Return to the forum." +msgstr "" + +#. module: website_forum +#: model_terms:ir.ui.view,arch_db:website_forum.404 msgid "Return to the question list." msgstr "" @@ -2427,18 +2156,12 @@ msgid "Scholar" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.users -msgid "Search" -msgstr "" - -#. module: website_forum #: model_terms:ir.ui.view,arch_db:website_forum.view_forum_post_search msgid "Search in Post" msgstr "" #. module: website_forum #: model_terms:ir.ui.view,arch_db:website_forum.moderation_queue -#: model_terms:ir.ui.view,arch_db:website_forum.users msgid "Search..." msgstr "" @@ -2506,34 +2229,29 @@ msgid "Sharing Options" msgstr "" #. module: website_forum -#: model:ir.model.fields,field_description:website_forum.field_res_users__silver_badge -msgid "Silver badges count" -msgstr "" - -#. module: website_forum #. openerp-web -#: code:addons/website_forum/static/src/js/website_forum.js:173 +#: code:addons/website_forum/static/src/js/website_forum.js:188 #, python-format msgid "Sorry you must be logged in to perform this action" msgstr "" #. module: website_forum #. openerp-web -#: code:addons/website_forum/static/src/js/website_forum.js:272 +#: code:addons/website_forum/static/src/js/website_forum.js:287 #, python-format msgid "Sorry you must be logged to flag a post" msgstr "" #. module: website_forum #. openerp-web -#: code:addons/website_forum/static/src/js/website_forum.js:332 +#: code:addons/website_forum/static/src/js/website_forum.js:347 #, python-format msgid "Sorry you must be logged to vote" msgstr "" #. module: website_forum #. openerp-web -#: code:addons/website_forum/static/src/js/website_forum.js:387 +#: code:addons/website_forum/static/src/js/website_forum.js:402 #, python-format msgid "Sorry, anonymous users cannot choose correct answer." msgstr "" @@ -2545,7 +2263,7 @@ msgstr "" #. module: website_forum #. openerp-web -#: code:addons/website_forum/static/src/js/website_forum.js:327 +#: code:addons/website_forum/static/src/js/website_forum.js:342 #, python-format msgid "Sorry, you cannot vote for your own posts" msgstr "" @@ -2556,7 +2274,7 @@ msgid "Sort by" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.header +#: model_terms:ir.ui.view,arch_db:website_forum.forum_nav_header msgid "Spam" msgstr "" @@ -2614,6 +2332,7 @@ msgstr "" #: model:ir.model.fields,field_description:website_forum.field_forum_post__tag_ids #: model_terms:ir.ui.view,arch_db:website_forum.edit_post #: model_terms:ir.ui.view,arch_db:website_forum.forum_index +#: model_terms:ir.ui.view,arch_db:website_forum.forum_nav_header #: model_terms:ir.ui.view,arch_db:website_forum.header #: model_terms:ir.ui.view,arch_db:website_forum.new_question #: model_terms:ir.ui.view,arch_db:website_forum.tag @@ -2670,7 +2389,7 @@ msgid "This community is for professionals and enthusiasts of our products and s msgstr "" #. module: website_forum -#: code:addons/website_forum/models/forum.py:50 +#: code:addons/website_forum/models/forum.py:35 #: model:forum.forum,description:website_forum.forum_help #, python-format msgid "This community is for professionals and enthusiasts of our products and services. Share and discuss the best content and new marketing ideas, build your professional profile and become a better marketer together." @@ -2688,14 +2407,14 @@ msgstr "" #. module: website_forum #. openerp-web -#: code:addons/website_forum/static/src/js/website_forum.js:287 +#: code:addons/website_forum/static/src/js/website_forum.js:302 #, python-format msgid "This post can not be flagged" msgstr "" #. module: website_forum #. openerp-web -#: code:addons/website_forum/static/src/js/website_forum.js:279 +#: code:addons/website_forum/static/src/js/website_forum.js:294 #, python-format msgid "This post is already flagged" msgstr "" @@ -2706,11 +2425,6 @@ msgid "This post is currently awaiting moderation and not yet published... Do yo msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.private_profile -msgid "This profile is private!" -msgstr "" - -#. module: website_forum #: model:ir.model.fields,field_description:website_forum.field_forum_post__name msgid "Title" msgstr "" @@ -2722,7 +2436,7 @@ msgid "Title must not be empty" msgstr "" #. module: website_forum -#: code:addons/website_forum/controllers/main.py:407 +#: code:addons/website_forum/controllers/main.py:387 #, python-format msgid "Title should not be empty." msgstr "" @@ -2743,7 +2457,7 @@ msgid "Total Votes" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.header +#: model_terms:ir.ui.view,arch_db:website_forum.forum_nav_header msgid "Trending" msgstr "" @@ -2782,11 +2496,6 @@ msgid "Unread Messages Counter" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.edit_profile -msgid "Update" -msgstr "" - -#. module: website_forum #: model:ir.model.fields,field_description:website_forum.field_forum_post__write_date msgid "Update on" msgstr "" @@ -2852,11 +2561,6 @@ msgid "View" msgstr "" #. module: website_forum -#: model_terms:ir.ui.view,arch_db:website_forum.header -msgid "View Your Badges" -msgstr "" - -#. module: website_forum #: model_terms:ir.ui.view,arch_db:website_forum.display_post_question_block msgid "Views" msgstr "" @@ -2867,8 +2571,13 @@ msgid "Vote" msgstr "" #. module: website_forum +#: sql_constraint:forum.post.vote:0 +msgid "Vote already exists !" +msgstr "" + +#. module: website_forum #: model:ir.model.fields,field_description:website_forum.field_forum_post__vote_ids -#: model_terms:ir.ui.view,arch_db:website_forum.user_detail_full +#: model_terms:ir.ui.view,arch_db:website_forum.user_profile_content msgid "Votes" msgstr "" @@ -2899,6 +2608,11 @@ msgid "Website / Forum" msgstr "" #. module: website_forum +#: selection:gamification.challenge,category:0 +msgid "Website / Slides" +msgstr "" + +#. module: website_forum #: model:ir.model.fields,field_description:website_forum.field_forum_forum__website_message_ids #: model:ir.model.fields,field_description:website_forum.field_forum_post__website_message_ids #: model:ir.model.fields,field_description:website_forum.field_forum_tag__website_message_ids @@ -2957,7 +2671,7 @@ msgid "You already have one pending post.<br/>\n" msgstr "" #. module: website_forum -#: code:addons/website_forum/models/forum.py:412 +#: code:addons/website_forum/models/forum.py:397 #, python-format msgid "You cannot create recursive forum posts." msgstr "" @@ -2968,7 +2682,7 @@ msgid "You cannot post an empty answer" msgstr "" #. module: website_forum -#: code:addons/website_forum/models/forum.py:930 +#: code:addons/website_forum/models/forum.py:940 #, python-format msgid "You don't have enough karma to create a new Tag." msgstr "" @@ -3004,11 +2718,6 @@ msgid "bad examples" msgstr "" #. module: website_forum -#: selection:gamification.badge,level:0 -msgid "bronze" -msgstr "" - -#. module: website_forum #: model_terms:ir.ui.view,arch_db:website_forum.post_description_full msgid "by" msgstr "" @@ -3099,11 +2808,6 @@ msgid "for reason:" msgstr "" #. module: website_forum -#: selection:gamification.badge,level:0 -msgid "gold" -msgstr "" - -#. module: website_forum #: model_terms:ir.ui.view,arch_db:website_forum.new_question msgid "good examples" msgstr "" @@ -3155,7 +2859,7 @@ msgstr "" #. module: website_forum #. openerp-web -#: code:addons/website_forum/static/src/js/website_forum.js:171 +#: code:addons/website_forum/static/src/js/website_forum.js:186 #, python-format msgid "karma is required to perform this action. You can earn karma by having your answers upvoted by the community." msgstr "" @@ -3208,11 +2912,6 @@ msgid "racist and hate speech" msgstr "" #. module: website_forum -#: selection:gamification.badge,level:0 -msgid "silver" -msgstr "" - -#. module: website_forum #: model:forum.post.reason,name:website_forum.reason_8 msgid "spam or advertising" msgstr "" diff --git a/addons/website_forum/models/forum.py b/addons/website_forum/models/forum.py index 68d48b8534f..03b45d6bf17 100644 --- a/addons/website_forum/models/forum.py +++ b/addons/website_forum/models/forum.py @@ -4,7 +4,6 @@ import logging import math import re -import uuid from datetime import datetime from odoo.addons.gamification.models.gamification_karma_rank import KarmaError @@ -21,15 +20,6 @@ class Forum(models.Model): _description = 'Forum' _inherit = ['mail.thread', 'website.seo.metadata', 'website.multi.mixin'] - @api.model_cr - def init(self): - """ Add forum uuid for user email validation. - - TDE TODO: move me somewhere else, auto_init ? """ - forum_uuids = self.env['ir.config_parameter'].search([('key', '=', 'website_forum.uuid')]) - if not forum_uuids: - forum_uuids.set_param('website_forum.uuid', str(uuid.uuid4())) - @api.model def _get_default_faq(self): with misc.file_open('website_forum/data/forum_default_faq.html', 'r') as f: @@ -590,7 +580,7 @@ class Post(models.Model): @api.one def refuse(self): if not self.can_moderate: - raise KarmaError('Not enough karma to refuse a post') + raise KarmaError(_('Not enough karma to refuse a post')) self.moderator_id = self.env.user return True @@ -809,7 +799,7 @@ class Post(models.Model): self.ensure_one() if not self.can_comment: - raise KarmaError('Not enough karma to comment') + raise KarmaError(_('Not enough karma to comment')) if not kwargs.get('record_name') and self.parent_id: kwargs['record_name'] = self.parent_id.name return super(Post, self).message_post(message_type=message_type, **kwargs) diff --git a/addons/website_forum/models/res_users.py b/addons/website_forum/models/res_users.py index 43791f3538c..67326175ac9 100644 --- a/addons/website_forum/models/res_users.py +++ b/addons/website_forum/models/res_users.py @@ -32,57 +32,6 @@ class Users(models.Model): domain = [('parent_id', '=', False), ('state', '=', 'pending'), ('create_uid', '=', user.id)] user.forum_waiting_posts_count = Post.search_count(domain) - @api.model - def _generate_forum_token(self, user_id, email): - """Return a token for email validation. This token is valid for the day - and is a hash based on a (secret) uuid generated by the forum module, - the user_id, the email and currently the day (to be updated if necessary). """ - forum_uuid = self.env['ir.config_parameter'].sudo().get_param('website_forum.uuid') - return hashlib.sha256((u'%s-%s-%s-%s' % ( - datetime.now().replace(hour=0, minute=0, second=0, microsecond=0), - forum_uuid, - user_id, - email - )).encode('utf-8')).hexdigest() - - @api.one - def _send_forum_validation_email(self, forum_id=None): - if not self.email: - return False - token = self._generate_forum_token(self.id, self.email) - activation_template = self.env.ref('website_forum.validation_email') - if activation_template: - params = { - 'token': token, - 'id': self.id, - 'email': self.email} - if forum_id: - params['forum_id'] = forum_id - base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url') - token_url = base_url + '/forum/validate_email?%s' % urls.url_encode(params) - with self._cr.savepoint(): - activation_template.sudo().with_context(token_url=token_url).send_mail( - self.id, force_send=True, raise_exception=True) - return True - - @api.one - def process_forum_validation_token(self, token, email, forum_id=None, context=None): - validation_token = self._generate_forum_token(self.id, email) - if token == validation_token and self.karma == 0: - karma = 3 - forum = None - if forum_id: - forum = self.env['forum.forum'].browse(forum_id) - else: - forum_ids = self.env['forum.forum'].search([], limit=1) - if forum_ids: - forum = forum_ids[0] - if forum: - # karma gained: karma to ask a question and have 2 downvotes - karma = forum.karma_ask + (-2 * forum.karma_gen_question_downvote) - return self.write({'karma': karma}) - return False - # Wrapper for call_kw with inherits @api.multi def open_website_url(self): diff --git a/addons/website_forum/static/src/js/website_forum.js b/addons/website_forum/static/src/js/website_forum.js index cdc49881a5b..42e3340e0ac 100644 --- a/addons/website_forum/static/src/js/website_forum.js +++ b/addons/website_forum/static/src/js/website_forum.js @@ -6,6 +6,7 @@ var Wysiwyg = require('web_editor.wysiwyg.root'); var publicWidget = require('web.public.widget'); var session = require('web.session'); var qweb = core.qweb; +var WebsiteProfile = require('website_profile.website_profile'); var _t = core._t; @@ -29,8 +30,6 @@ publicWidget.registry.websiteForum = publicWidget.Widget.extend({ 'click .favourite_question': '_onFavoriteQuestionClick', 'click .comment_delete': '_onDeleteCommentClick', 'click .notification_close': '_onCloseNotificationClick', - 'click .send_validation_email': '_onSendValidationEmailClick', - 'click .validated_email_close': '_onCloseValidatedEmailClick', 'click .js_close_intro': '_onCloseIntroClick', }, @@ -469,32 +468,6 @@ publicWidget.registry.websiteForum = publicWidget.Widget.extend({ * @private * @param {Event} ev */ - _onSendValidationEmailClick: function (ev) { - ev.preventDefault(); - var $link = $(ev.currentTarget); - this._rpc({ - route: '/forum/send_validation_email', - params: { - forum_id: $link.attr('forum-id'), - }, - }).then(function (data) { - if (data) { - $('button.validation_email_close').click(); - } - }); - }, - /** - * @private - */ - _onCloseValidatedEmailClick: function () { - this._rpc({ - route: '/forum/validate_email/close', - }); - }, - /** - * @private - * @param {Event} ev - */ _onCloseIntroClick: function (ev) { ev.preventDefault(); document.cookie = 'forum_welcome_message = false'; @@ -579,4 +552,5 @@ publicWidget.registry.websiteForumSpam = publicWidget.Widget.extend({ }); }, }); + }); diff --git a/addons/website_forum/views/website_forum.xml b/addons/website_forum/views/website_forum.xml index 482a7d9541b..de04744ffb9 100644 --- a/addons/website_forum/views/website_forum.xml +++ b/addons/website_forum/views/website_forum.xml @@ -52,22 +52,12 @@ <div id="wrap" t-attf-class="container #{website_forum_action}"> <div class="row"> - <div class="col o_left_forum_container mb16 mt16"> - <div t-if="not validation_email_sent and not is_public_user and user.karma == 0" class="alert alert-danger alert-dismissable" role="alert"> - <button type="button" class="close validation_email_close" data-dismiss="alert" aria-label="Close">&times;</button> - <div> - <p> - It appears your email has not been verified. - <a class="send_validation_email" href="#" t-att-forum-id="forum.id">Click here to send a verification email allowing you to participate to the forum.</a> - </p> - </div> - </div> - <div t-if="validation_email_done" class="alert alert-success alert-dismissable" role="status"> - <button type="button" class="close validated_email_close" data-dismiss="alert" aria-label="Close">&times;</button> - <div> - <p>Congratulations! Your email has just been validated. You may now participate to our forums.</p> - </div> - </div> + <div class="o_wprofile_email_validation_container mb16 mt16"> + <t t-call="website_profile.email_validation_banner"> + <t t-set="redirect_url" t-value="'/forum/%s' % forum.id"/> + <t t-set="send_validation_email_message" t-value="'Click here to send a verification email allowing you to participate to the forum.'"/> + <t t-set="additional_validated_email_message" t-value="' You may now participate to our forums.'"/> + </t> <t t-raw="0"/> </div> <t t-if="not is_profile_page"> @@ -171,7 +161,7 @@ t-attf-class="nav-link #{searches.get('tags') and 'active' or ''}">Tags</a> </li> <li class="nav-item"> - <a t-attf-href="/profile/badge?category=forum" + <a t-attf-href="/profile/ranks_badges?badge_category=forum" t-attf-class="nav-link #{searches.get('badges') and 'active' or ''}">Badges</a> </li> <li class="nav-item" t-if="user.karma >= forum.karma_moderate"> diff --git a/addons/website_gengo/i18n/website_gengo.pot b/addons/website_gengo/i18n/website_gengo.pot index 41b28b0a452..591a67b87e8 100644 --- a/addons/website_gengo/i18n/website_gengo.pot +++ b/addons/website_gengo/i18n/website_gengo.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.2\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-22 14:11+0000\n" -"PO-Revision-Date: 2018-03-22 14:11+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -17,42 +17,42 @@ msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:144 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:120 #, python-format msgid "- Enable if you using testing account" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:138 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:114 #, python-format msgid "- Jobs are Automatically Approved by Gengo." msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:118 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:94 #, python-format msgid "1. Go To your" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:119 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:95 #, python-format msgid "2. Then paste generated keys in given form" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:29 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:18 #, python-format msgid "Already translated content" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:137 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:113 #, python-format msgid "Auto Approve Translation" msgstr "" @@ -65,49 +65,52 @@ msgid "Auto Translate" msgstr "" #. module: website_gengo +#: model:ir.model,name:website_gengo.model_base_gengo_translations +msgid "Base Gengo Translations" +msgstr "" + +#. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:67 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:43 #, python-format msgid "By Machine (Free)" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:48 -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:76 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:52 #, python-format msgid "Cancel" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:14 -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:61 -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:88 -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:102 -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:113 -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:153 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:38 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:65 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:78 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:90 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:129 #, python-format msgid "Close" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:23 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:12 #, python-format msgid "Content to translate or you can post them to" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/js/website_gengo.js:88 +#: code:addons/website_gengo/static/src/js/website_gengo.js:90 #, python-format msgid "Could not Post translation" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/js/website_gengo.js:195 +#: code:addons/website_gengo/static/src/js/website_gengo.js:206 #, python-format msgid "Could not submit ! Try Again" msgstr "" @@ -121,156 +124,119 @@ msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:43 -#, python-format -msgid "Do not show this dialog later." -msgstr "" - -#. module: website_gengo -#. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:24 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:13 #, python-format msgid "Gengo" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:114 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:89 #, python-format msgid "Gengo API is not configured" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:94 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:70 #, python-format msgid "Gengo Dashboard" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:94 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:70 #, python-format msgid "Gengo Statistics" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:118 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:94 #, python-format msgid "Gengo account" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:20 -#, python-format -msgid "Here are the visuals used to help you translate efficiently:" -msgstr "" - -#. module: website_gengo -#. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:34 -#, python-format -msgid "In this mode, you can translate texts or post texts to Gengo for translation.\n" -" To change the structure of the page, you must edit the\n" -" master page." -msgstr "" - -#. module: website_gengo -#. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:47 -#, python-format -msgid "Ok" -msgstr "" - -#. module: website_gengo -#. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:132 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:108 #, python-format msgid "Paste private key here" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:125 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:101 #, python-format msgid "Paste public key here" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:75 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:51 #, python-format msgid "Post" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:130 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:106 #, python-format msgid "Private key" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:69 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:45 #, python-format msgid "Pro - $" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:123 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:99 #, python-format msgid "Public key" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:143 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:119 #, python-format msgid "Sandbox" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:62 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:37 #, python-format msgid "Select Gengo Translation Service Level" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:68 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:44 #, python-format msgid "Standard - $" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:117 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:93 #, python-format msgid "Steps for configure Gengo" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:152 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:128 #, python-format msgid "Submit" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:15 -#, python-format -msgid "Translate this page" -msgstr "" - -#. module: website_gengo -#. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:98 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:74 #, python-format msgid "Translated words" msgstr "" @@ -284,21 +250,21 @@ msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:26 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:15 #, python-format msgid "Translation in process (Gengo)" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:89 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:64 #, python-format msgid "Translator statistics for this page" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:70 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:46 #, python-format msgid "Ultra - $" msgstr "" @@ -312,47 +278,35 @@ msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:97 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:73 #, python-format msgid "Words in progress" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:96 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:72 #, python-format msgid "Words posted for translate" msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:19 -#, python-format -msgid "You are about to enter the translation mode." -msgstr "" - -#. module: website_gengo -#. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:118 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:94 #, python-format msgid "and generate API Keys." msgstr "" #. module: website_gengo -#: model:ir.model,name:website_gengo.model_base_gengo_translations -msgid "base.gengo.translations" -msgstr "" - -#. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:24 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:13 #, python-format msgid "for translation." msgstr "" #. module: website_gengo #. openerp-web -#: code:addons/website_gengo/static/src/xml/website.gengo.xml:93 +#: code:addons/website_gengo/static/src/xml/website.gengo.xml:69 #, python-format msgid "new words found on this page." msgstr "" diff --git a/addons/website_links/static/src/js/test_ui_flow.js b/addons/website_links/static/src/js/test_ui_flow.js new file mode 100644 index 00000000000..11872441308 --- /dev/null +++ b/addons/website_links/static/src/js/test_ui_flow.js @@ -0,0 +1,84 @@ +odoo.define('website_links.website_links_tour', function (require) { +'use strict'; + +var tour = require("web_tour.tour"); + +tour.register('website_links_tour', { + test: true, + url: '/r', +}, + [ + // 1. Create a tracked URL + { + content: "check that existing links are shown", + trigger: '#o_website_links_recent_links .btn_shorten_url_clipboard', + run: function () {}, // it's a check + }, + { + content: "fill the form and submit it", + trigger: '#o_website_links_link_tracker_form input#url', + run: function () { + var url = window.location.host + '/aboutus'; + $('#o_website_links_link_tracker_form input#url').val(url); + $('.o_website_links_utm_forms input#campaign-select').val(1).change(); + $('.o_website_links_utm_forms input#channel-select').val(1).change(); + $('.o_website_links_utm_forms input#source-select').val(1).change(); + $('#btn_shorten_url').click(); + }, + }, + // 2. Visit it + { + content: "check that link was created and visit it", + // Depending of the speed of `requests.get` from `_get_title_from_url`, + // the link name will either be "About us" (page title) or + // "http://url/aboutus" (page url). + extra_trigger: '#o_website_links_recent_links .truncate_text:first():contains("About us"), #o_website_links_recent_links .truncate_text:first():contains("aboutus")', + trigger: '#o_website_links_link_tracker_form #generated_tracked_link:contains("/r/")', + run: function () { + window.location.href = $('#generated_tracked_link').text(); + }, + }, + { + content: "check that we landed on correct page with correct query strings", + trigger: '.s_title h1:containsExact("About us")', + run: function () { + var expectedUrl = "/aboutus?utm_campaign=Sale&utm_source=Search+engine&utm_medium=Website"; + if (window.location.pathname + window.location.search !== expectedUrl) { + console.error("The link was not correctly created."); + } + window.location.href = '/r'; + }, + }, + // 3. Check that counter got incremented and charts are correctly displayed + { + content: "filter recently used links", + trigger: '#filter-recently-used-links', + }, + { + content: "visit link stats page", + trigger: '#o_website_links_recent_links a:containsExact("Stats"):first', + }, + { + content: "check click number and ensure graphs are initialized", + extra_trigger: '.website_links_click_chart .title:contains("1 clicks")', + trigger: '.nvd3.nv-pieChart', + run: function () {}, // it's a check + }, + { + content: "click on Last Month tab", + trigger: '.o_website_links_chart .graph-tabs a:contains("Last Month")', + }, + { + content: "ensure tab is correctly resized", + trigger: '.nvd3.nv-lineChart', + run: function () { + var width = $('#last_month_charts .nvd3.nv-lineChart .nv-background rect').width(); + if (width < 50) { + console.error("The graphs are probably not resized on tab change."); + } + }, + }, + ] +); + +}); diff --git a/addons/website_links/static/src/js/website_links.js b/addons/website_links/static/src/js/website_links.js index fd637079512..7ebb60c0c2c 100644 --- a/addons/website_links/static/src/js/website_links.js +++ b/addons/website_links/static/src/js/website_links.js @@ -7,7 +7,6 @@ var publicWidget = require('web.public.widget'); var _t = core._t; var SelectBox = publicWidget.Widget.extend({ - xmlDependencies: ['/website_links/static/src/xml/recent_link.xml'], events: { 'change': '_onChange', }, @@ -106,6 +105,7 @@ var SelectBox = publicWidget.Widget.extend({ var RecentLinkBox = publicWidget.Widget.extend({ template: 'website_links.RecentLink', + xmlDependencies: ['/website_links/static/src/xml/recent_link.xml'], events: { 'click .btn_shorten_url_clipboard': '_toggleCopyButton', 'click .o_website_links_edit_code': '_editCode', @@ -459,6 +459,7 @@ publicWidget.registry.websiteLinks = publicWidget.Widget.extend({ * @param {Event} ev */ _onFormSubmit: function (ev) { + var self = this; ev.preventDefault(); if ($('#btn_shorten_url').hasClass('btn-copy')) { @@ -510,7 +511,7 @@ publicWidget.registry.websiteLinks = publicWidget.Widget.extend({ $('#generated_tracked_link').html(link.short_url); $('#generated_tracked_link').css('display', 'inline'); - this.recentLinks._addLink(link); + self.recentLinks._addLink(link); // Clean URL and UTM selects $('#campaign-select').select2('val', ''); 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 d4604f1718e..4d72e8e2cf7 100644 --- a/addons/website_links/static/src/js/website_links_charts.js +++ b/addons/website_links/static/src/js/website_links_charts.js @@ -188,6 +188,7 @@ publicWidget.registry.websiteLinksCharts = publicWidget.Widget.extend({ $('#all_time_charts').prepend(_t("There is no data to show")); $('#last_month_charts').prepend(_t("There is no data to show")); $('#last_week_charts').prepend(_t("There is no data to show")); + return; } var formattedClicksByDay = {}; @@ -202,27 +203,27 @@ publicWidget.registry.websiteLinksCharts = publicWidget.Widget.extend({ // Process all time line chart data var now = moment(); - self.charts.all_time_bar = new BarChart(beginDate, now, formattedClicksByDay); + self.charts.all_time_bar = new BarChart(this, beginDate, now, formattedClicksByDay); self.charts.all_time_bar.attachTo($('#all_time_clicks_chart')); // Process month line chart data beginDate = moment().subtract(30, 'days'); - self.charts.last_month_bar = new BarChart(beginDate, now, formattedClicksByDay); + self.charts.last_month_bar = new BarChart(this, beginDate, now, formattedClicksByDay); self.charts.last_month_bar.attachTo($('#last_month_clicks_chart')); // Process week line chart data beginDate = moment().subtract(7, 'days'); - self.charts.last_week_bar = new BarChart(beginDate, now, formattedClicksByDay); + self.charts.last_week_bar = new BarChart(this, beginDate, now, formattedClicksByDay); self.charts.last_week_bar.attachTo($('#last_week_clicks_chart')); // Process pie charts - self.charts.all_time_pie = new PieChart(_clicksByCountry); + self.charts.all_time_pie = new PieChart(this, _clicksByCountry); self.charts.all_time_pie.attachTo($('#all_time_countries_charts')); - self.charts.last_month_pie = new PieChart(_lastMonthClicksByCountry); + self.charts.last_month_pie = new PieChart(this, _lastMonthClicksByCountry); self.charts.last_month_pie.attachTo($('#last_month_countries_charts')); - self.charts.last_week_pie = new PieChart(_lastWeekClicksByCountry); + self.charts.last_week_pie = new PieChart(this, _lastWeekClicksByCountry); self.charts.last_week_pie.attachTo($('#last_week_countries_charts')); var rowWidth = $('#all_time_countries_charts').parent().width(); @@ -310,7 +311,11 @@ publicWidget.registry.websiteLinksCharts = publicWidget.Widget.extend({ _onGraphTabClick: function (ev) { ev.preventDefault(); $('.graph-tabs li a').tab('show'); - _.chain(this.charts).pluck('chart').invoke('update'); // Force NVD3 to redraw the chart + + setTimeout(function () { + // Force NVD3 to redraw the chart + window.dispatchEvent(new Event('resize')); + }, 0); }, /** * @private diff --git a/addons/website_links/tests/__init__.py b/addons/website_links/tests/__init__.py new file mode 100644 index 00000000000..1e046233e6c --- /dev/null +++ b/addons/website_links/tests/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import test_ui diff --git a/addons/website_links/tests/test_ui.py b/addons/website_links/tests/test_ui.py new file mode 100644 index 00000000000..6a8e317eab1 --- /dev/null +++ b/addons/website_links/tests/test_ui.py @@ -0,0 +1,16 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +import odoo.tests + + +@odoo.tests.common.tagged('post_install', '-at_install') +class TestUi(odoo.tests.HttpCase): + + def test_01_test_ui(self): + self.env['link.tracker'].create({ + 'campaign_id': 2, + 'medium_id': 2, + 'source_id': 2, + 'url': self.env["ir.config_parameter"].sudo().get_param("web.base.url") + '/contactus', + }) + self.phantom_js("/", "odoo.__DEBUG__.services['web_tour.tour'].run('website_links_tour')", "odoo.__DEBUG__.services['web_tour.tour'].tours.website_links_tour.ready", login="admin") diff --git a/addons/website_links/views/website_links_template.xml b/addons/website_links/views/website_links_template.xml index d69bddf7d63..626ec232e53 100644 --- a/addons/website_links/views/website_links_template.xml +++ b/addons/website_links/views/website_links_template.xml @@ -6,6 +6,7 @@ <script type="text/javascript" src="/website_links/static/src/js/website_links.js"/> <script type="text/javascript" src="/website_links/static/src/js/website_links_code_editor.js"/> <script type="text/javascript" src="/website_links/static/src/js/website_links_charts.js"/> + <script type="text/javascript" src="/website_links/static/src/js/test_ui_flow.js"/> <link rel="stylesheet" type="text/css" href="/website_links/static/src/css/website_links.css"/> </xpath> </template> @@ -86,7 +87,7 @@ </div> <h2 class="o_page_header">Your tracked links - <small class="float-right d-none d-md-block mt16" id="filters"> + <small class="float-right d-none d-md-block" id="filters"> <ul class="nav nav-tabs nav-tabs-inline graph-tabs" role="tablist"> <li class="nav-item"><a aria-controls="filter-newest-links" href="#" class="nav-link active" id="filter-newest-links" role="tab" data-toggle="tab">Newest</a></li> <li class="nav-item"><a aria-controls="filter-most-clicked-links" href="#" class="nav-link" id="filter-most-clicked-links" role="tab" data-toggle="tab">Most Clicked</a></li> diff --git a/addons/website_profile/__manifest__.py b/addons/website_profile/__manifest__.py index 1214d3f03e8..fbb57d126fd 100644 --- a/addons/website_profile/__manifest__.py +++ b/addons/website_profile/__manifest__.py @@ -12,6 +12,7 @@ 'gamification' ], 'data': [ + 'data/profile_data.xml', 'views/gamification_badge_views.xml', 'views/website_profile.xml', 'security/ir.model.access.csv', diff --git a/addons/website_profile/controllers/main.py b/addons/website_profile/controllers/main.py index 4d0e58efbe8..9c6d31c2efc 100644 --- a/addons/website_profile/controllers/main.py +++ b/addons/website_profile/controllers/main.py @@ -6,6 +6,7 @@ import werkzeug import werkzeug.exceptions import werkzeug.urls import werkzeug.wrappers +import math from odoo import http, modules, tools from odoo.http import request @@ -13,8 +14,9 @@ from odoo.osv import expression class WebsiteProfile(http.Controller): - PAGER_MAX_PAGE = 5 - + _users_per_page = 30 + _pager_max_pages = 5 + # Profile # --------------------------------------------------- @@ -57,6 +59,8 @@ class WebsiteProfile(http.Controller): values = { 'user': request.env.user, 'is_public_user': request.website.is_public_user(), + 'validation_email_sent': request.session.get('validation_email_sent', False), + 'validation_email_done': request.session.get('validation_email_done', False), } values.update(kwargs) return values @@ -111,8 +115,9 @@ class WebsiteProfile(http.Controller): user = self._check_user_profile_access(user_id) if not user: return request.render("website_profile.private_profile") + values = self._prepare_user_values(**post) params = self._prepare_user_profile_parameters(**post) - values = self._prepare_user_profile_values(user, **params) + values.update(self._prepare_user_profile_values(user, **params)) return request.render("website_profile.user_profile_main", values) # Edit Profile @@ -158,48 +163,45 @@ class WebsiteProfile(http.Controller): return werkzeug.utils.redirect("/profile/user/%d?%s" % (user.id, kwargs['url_param'])) else: return werkzeug.utils.redirect("/profile/user/%d" % user.id) - # Ranks - # --------------------------------------------------- - @http.route('/profile/ranks', type='http', auth="public", website=True) - def ranks(self, **kwargs): - Rank = request.env['gamification.karma.rank'] - ranks = Rank.sudo().search([]) - ranks = ranks.sorted(key=lambda b: b.karma_min) - values = { - 'ranks': ranks, - 'user': request.env.user, - } - return request.render("website_profile.rank_main", values) - # Badges + # Ranks and Badges # --------------------------------------------------- def _prepare_badges_domain(self, **kwargs): """ Hook for other modules to restrict the badges showed on profile page, depending of the context """ domain = [('website_published', '=', True)] - if 'category' in kwargs: - domain = expression.AND([[('challenge_ids.category', '=', kwargs.get('category'))], domain]) + if 'badge_category' in kwargs: + domain = expression.AND([[('challenge_ids.category', '=', kwargs.get('badge_category'))], domain]) return domain - @http.route('/profile/badge', type='http', auth="public", website=True) - def badges(self, **kwargs): + @http.route('/profile/ranks_badges', type='http', auth="public", website=True) + def view_ranks_badges(self, **kwargs): + ranks = [] + if 'badge_category' not in kwargs: + Rank = request.env['gamification.karma.rank'] + ranks = Rank.sudo().search([], order='karma_min DESC') + Badge = request.env['gamification.badge'] badges = Badge.sudo().search(self._prepare_badges_domain(**kwargs)) badges = sorted(badges, key=lambda b: b.stat_count_distinct, reverse=True) values = self._prepare_user_values(searches={'badges': True}) + values.update({ + 'ranks': ranks, 'badges': badges, + 'user': request.env.user, }) - return request.render("website_profile.badge_main", values) + return request.render("website_profile.rank_badge_main", values) # All Users Page # --------------------------------------------------- - def _prepare_all_users_values(self, user, position): + def _prepare_all_users_values(self, user): return { - 'position': position, + 'position': user.karma_position, 'id': user.id, 'name': user.name, + 'company_name': user.company_id.name, 'rank': user.rank_id.name, 'karma': user.karma, 'badge_count': len(user.badge_ids), @@ -211,26 +213,45 @@ class WebsiteProfile(http.Controller): User = request.env['res.users'] dom = [('karma', '>', 1), ('website_published', '=', True)] - # Get the Top 3 users - top3_users = User.sudo().search(dom, limit=3, order='karma DESC') - top3_user_values = [self._prepare_all_users_values(user, position+1) for position, user in enumerate(top3_users)] + # Searches + search_term = searches.get('search') + if search_term: + dom = expression.AND([['|', ('name', 'ilike', search_term), ('company_id.name', 'ilike', search_term)], dom]) - # Get the other users - if top3_users: - dom += [('id', 'not in', top3_users.ids)] - step = 30 user_count = User.sudo().search_count(dom) - pager = request.website.pager(url="/profile/users", total=user_count, page=page, step=step, scope=step) + page_count = math.ceil(user_count / self._users_per_page) + pager = request.website.pager(url="/profile/users", total=user_count, page=page, step=self._users_per_page, + scope=page_count if page_count < self._pager_max_pages else self._pager_max_pages) - if searches.get('user'): - dom += [('name', 'ilike', searches.get('user'))] + users = User.sudo().search(dom, limit=self._users_per_page, offset=pager['offset'], order='karma DESC') + user_values = [self._prepare_all_users_values(user) for user in users] - users = User.sudo().search(dom, limit=step, offset=pager['offset'], order='karma DESC') - - user_values = [self._prepare_all_users_values(user, position + 4 + ((page-1) * step)) for position, user in enumerate(users)] values = { - 'top3_users': top3_user_values, - 'users': user_values, + 'top3_users': user_values[:3] if not search_term and page == 1 else None, + 'users': user_values[3:] if not search_term and page == 1 else user_values, 'pager': pager } return request.render("website_profile.users_page_main", values) + + # User and validation + # -------------------------------------------------- + + @http.route('/profile/send_validation_email', type='json', auth='user', website=True) + def send_validation_email(self, **kwargs): + if request.env.uid != request.website.user_id.id: + request.env.user._send_profile_validation_email(**kwargs) + request.session['validation_email_sent'] = True + return True + + @http.route('/profile/validate_email', type='http', auth='public', website=True, sitemap=False) + def validate_email(self, token, user_id, email, **kwargs): + done = request.env['res.users'].sudo().browse(int(user_id))._process_profile_validation_token(token, email) + if done: + request.session['validation_email_done'] = True + url = kwargs.get('redirect_url', '/') + return request.redirect(url) + + @http.route('/profile/validate_email/close', type='json', auth='public', website=True) + def validate_email_done(self, **kwargs): + request.session['validation_email_done'] = False + return True diff --git a/addons/website_profile/data/profile_data.xml b/addons/website_profile/data/profile_data.xml new file mode 100644 index 00000000000..5331fa23e8e --- /dev/null +++ b/addons/website_profile/data/profile_data.xml @@ -0,0 +1,106 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <data noupdate="1"> + + <!-- Email template for email validation (for karma purpose) --> + <record id="validation_email" model="mail.template"> + <field name="name">Profile: Email Verification</field> + <field name="model_id" ref="base.model_res_users"/> + <field name="subject">${object.company_id.name} Profile validation</field> + <field name="email_from">${('<%s>' % (object.env.user.company_id.email or user.email)) | safe}</field> + <field name="email_to">${object.email|safe}</field> + <field name="body_html" type="html"> +<table border="0" cellpadding="0" cellspacing="0" style="padding-top: 16px; background-color: #F1F1F1; color: #454748; width: 100%; border-collapse:separate;"><tr><td align="center"> +<table border="0" cellpadding="0" cellspacing="0" width="590" style="padding: 16px; background-color: white; color: #454748; border-collapse:separate;"> +<tbody> + <!-- HEADER --> + <tr> + <td align="center" style="min-width: 590px;"> + <table border="0" cellpadding="0" cellspacing="0" width="590" style="min-width: 590px; background-color: white; padding: 0px 8px 0px 8px; border-collapse:separate;"> + <tr> + <td valign="middle"> + <span style="font-size: 20px; font-weight: bold;"> + ${object.company_id.name} Profile validation + </span> + </td> + <td valign="middle" align="right"> + <img src="/logo.png?company=${user.company_id.id}" style="padding: 0px; margin: 0px; height: auto; width: 80px;" alt="${user.company_id.name}"/> + </td> + </tr> + <tr> + <td colspan="2" style="text-align:center;"> + <hr width="100%" style="background-color:rgb(204,204,204);border:medium none;clear:both;display:block;font-size:0px;min-height:1px;line-height:0; margin:16px 0px 16px 0px;"/> + </td> + </tr> + </table> + </td> + </tr> + <!-- CONTENT --> + <tr> + <td align="center" style="min-width: 590px;"> + <table border="0" cellpadding="0" cellspacing="0" width="590" style="min-width: 590px; background-color: white; padding: 0px 8px 0px 8px; border-collapse:separate;"> + <tr> + <td valign="top" style="font-size: 13px;"> + <p style="margin: 0px; padding: 0px; font-size: 13px;"> + Hello ${object.name},<br /><br /> + You have been invited to validate your email in order to get access to "${object.company_id.name}" website. + To validate your email, please click on the following link: + <div style="margin: 16px 0px 16px 0px;"> + <a href="${ctx.get('token_url')}" + style="background-color: #875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: #fff; border-radius: 5px; font-size:13px;"> + Validate my account + </a> + </div> + Thanks for your participation! + </p> + </td> + </tr> + <tr> + <td style="text-align:center;"> + <hr width="100%" style="background-color:rgb(204,204,204);border:medium none;clear:both;display:block;font-size:0px;min-height:1px;line-height:0; margin: 16px 0px 16px 0px;"/> + </td> + </tr> + </table> + </td> + </tr> + <!-- FOOTER --> + <tr> + <td align="center" style="min-width: 590px;"> + <table border="0" cellpadding="0" cellspacing="0" width="590" style=" font-family: 'Verdana Regular'; color: #454748; min-width: 590px; background-color: white; font-size: 11px; padding: 0px 8px 0px 8px; border-collapse:separate;"> + <tr> + <td valign="middle" align="left"> + ${user.company_id.name} + </td> + <td valign="middle" align="right" style="opacity: 0.7;"> + ${user.company_id.phone} + % if user.company_id.email: + | <a href="'mailto:%s' % ${user.company_id.email}" style="text-decoration:none; color: #454748;"> + ${user.company_id.email} + </a> + % endif + % if user.company_id.website: + | <a href="${user.company_id.website}" style="text-decoration:none; color: #454748;"> + ${user.company_id.website} + </a> + % endif + </td> + </tr> + </table> + </td> + </tr> +</tbody> +</table> +</td></tr> +<!-- POWERED BY --> +<tr><td align="center" style="min-width: 590px;"> + <table border="0" cellpadding="0" cellspacing="0" width="590" style="min-width: 590px; background-color: #F1F1F1; color: #454748; padding: 8px; border-collapse:separate;"> + <tr><td style="text-align: center; font-size: 13px;"> + Powered by <a target="_blank" href="https://www.odoo.com?utm_source=db&utm_medium=forum" style="color: #875A7B;">Odoo</a> + </td></tr> + </table> +</td></tr> +</table> + </field> + </record> + </data> +</odoo> diff --git a/addons/website_profile/i18n/website_profile.pot b/addons/website_profile/i18n/website_profile.pot new file mode 100644 index 00000000000..7237f491fd4 --- /dev/null +++ b/addons/website_profile/i18n/website_profile.pot @@ -0,0 +1,425 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_profile +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~12.2\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-03-20 14:19+0000\n" +"PO-Revision-Date: 2019-03-20 14:19+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: website_profile +#: model:mail.template,subject:website_profile.validation_email +msgid "${object.company_id.name} Profile validation" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.email_validation_banner +msgid "&times;" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_profile_header +msgid "(not verified)" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.rank_badge_main +msgid ". Collect points on the forum or on the eLearning platform. Those points will make you reach new ranks." +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_profile_content +msgid "40%" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_badges +msgid "<i class=\"fa fa-arrow-right mr-1\"/>Check all available badges" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_badges +msgid "<i class=\"fa fa-arrow-right\"/> Check available badges" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_profile_edit_content +msgid "<i class=\"fa fa-pencil fa-1g float-sm-none float-md-left\" title=\"Edit\"/>" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_profile_header +msgid "<i class=\"fa fa-pencil mr-1\"/>EDIT" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_profile_header +msgid "<i class=\"fa fa-pencil mr-2\"/>EDIT PROFILE" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.badge_content +msgid "<i class=\"text-muted\"> awarded users</i>" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_profile_content +msgid "<small class=\"font-weight-bold mr-2\">Rank:</small>" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_profile_content +msgid "<small class=\"font-weight-bold mt-1\">Next rank:</small>" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_profile_content +msgid "<small class=\"font-weight-bold\">Badges</small>" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_profile_content +msgid "<small class=\"font-weight-bold\">Joined</small>" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_profile_edit_content +msgid "<span class=\"font-weight-bold\">Biography</span>" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_profile_edit_content +msgid "<span class=\"font-weight-bold\">City</span>" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_profile_edit_content +msgid "<span class=\"font-weight-bold\">Country</span>" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_profile_edit_content +msgid "<span class=\"font-weight-bold\">Email</span>" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_profile_edit_content +msgid "<span class=\"font-weight-bold\">Public profile</span>" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_profile_edit_content +msgid "<span class=\"font-weight-bold\">Real name</span>" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_profile_edit_content +msgid "<span class=\"font-weight-bold\">Website</span>" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.all_user_card +msgid "<span class=\"text-muted small font-weight-bold\">Badges</span>" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.all_user_card +msgid "<span class=\"text-muted small font-weight-bold\">XP</span>" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.top3_user_card +msgid "<span class=\"text-muted\">Badges</span>" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.top3_user_card +msgid "<span class=\"text-muted\">XP</span>" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.email_validation_banner +msgid "<span id=\"email_validated_message\">Congratulations! Your email has just been validated.</span>" +msgstr "" + +#. module: website_profile +#: model:mail.template,body_html:website_profile.validation_email +msgid "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"padding-top: 16px; background-color: #F1F1F1; color: #454748; width: 100%; border-collapse:separate;\"><tr><td align=\"center\">\n" +"<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"590\" style=\"padding: 16px; background-color: white; color: #454748; border-collapse:separate;\">\n" +"<tbody>\n" +" <!-- HEADER -->\n" +" <tr>\n" +" <td align=\"center\" style=\"min-width: 590px;\">\n" +" <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"590\" style=\"min-width: 590px; background-color: white; padding: 0px 8px 0px 8px; border-collapse:separate;\">\n" +" <tr>\n" +" <td valign=\"middle\">\n" +" <span style=\"font-size: 20px; font-weight: bold;\">\n" +" ${object.company_id.name} Profile validation\n" +" </span>\n" +" </td>\n" +" <td valign=\"middle\" align=\"right\">\n" +" <img src=\"/logo.png?company=${user.company_id.id}\" style=\"padding: 0px; margin: 0px; height: auto; width: 80px;\" alt=\"${user.company_id.name}\"/>\n" +" </td>\n" +" </tr>\n" +" <tr>\n" +" <td colspan=\"2\" style=\"text-align:center;\">\n" +" <hr width=\"100%\" style=\"background-color:rgb(204,204,204);border:medium none;clear:both;display:block;font-size:0px;min-height:1px;line-height:0; margin:16px 0px 16px 0px;\"/>\n" +" </td>\n" +" </tr>\n" +" </table>\n" +" </td>\n" +" </tr>\n" +" <!-- CONTENT -->\n" +" <tr>\n" +" <td align=\"center\" style=\"min-width: 590px;\">\n" +" <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"590\" style=\"min-width: 590px; background-color: white; padding: 0px 8px 0px 8px; border-collapse:separate;\">\n" +" <tr>\n" +" <td valign=\"top\" style=\"font-size: 13px;\">\n" +" <p style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n" +" Hello ${object.name},<br/><br/>\n" +" You have been invited to validate your email in order to get access to \"${object.company_id.name}\" website.\n" +" To validate your email, please click on the following link:\n" +" <div style=\"margin: 16px 0px 16px 0px;\">\n" +" <a href=\"${ctx.get('token_url')}\" style=\"background-color: #875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: #fff; border-radius: 5px; font-size:13px;\">\n" +" Validate my account\n" +" </a>\n" +" </div>\n" +" Thanks for your participation!\n" +" </p>\n" +" </td>\n" +" </tr>\n" +" <tr>\n" +" <td style=\"text-align:center;\">\n" +" <hr width=\"100%\" style=\"background-color:rgb(204,204,204);border:medium none;clear:both;display:block;font-size:0px;min-height:1px;line-height:0; margin: 16px 0px 16px 0px;\"/>\n" +" </td>\n" +" </tr>\n" +" </table>\n" +" </td>\n" +" </tr>\n" +" <!-- FOOTER -->\n" +" <tr>\n" +" <td align=\"center\" style=\"min-width: 590px;\">\n" +" <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"590\" style=\" font-family: 'Verdana Regular'; color: #454748; min-width: 590px; background-color: white; font-size: 11px; padding: 0px 8px 0px 8px; border-collapse:separate;\">\n" +" <tr>\n" +" <td valign=\"middle\" align=\"left\">\n" +" ${user.company_id.name}\n" +" </td>\n" +" <td valign=\"middle\" align=\"right\" style=\"opacity: 0.7;\">\n" +" ${user.company_id.phone}\n" +" % if user.company_id.email:\n" +" | <a href=\"'mailto:%s' % ${user.company_id.email}\" style=\"text-decoration:none; color: #454748;\">\n" +" ${user.company_id.email}\n" +" </a>\n" +" % endif\n" +" % if user.company_id.website:\n" +" | <a href=\"${user.company_id.website}\" style=\"text-decoration:none; color: #454748;\">\n" +" ${user.company_id.website}\n" +" </a>\n" +" % endif\n" +" </td>\n" +" </tr>\n" +" </table>\n" +" </td>\n" +" </tr>\n" +"</tbody>\n" +"</table>\n" +"</td></tr>\n" +"<!-- POWERED BY -->\n" +"<tr><td align=\"center\" style=\"min-width: 590px;\">\n" +" <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"590\" style=\"min-width: 590px; background-color: #F1F1F1; color: #454748; padding: 8px; border-collapse:separate;\">\n" +" <tr><td style=\"text-align: center; font-size: 13px;\">\n" +" Powered by <a target=\"_blank\" href=\"https://www.odoo.com?utm_source=db&utm_medium=forum\" style=\"color: #875A7B;\">Odoo</a>\n" +" </td></tr>\n" +" </table>\n" +"</td></tr>\n" +"</table>\n" +" " +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_profile_content +msgid "About" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.users_page_header +msgid "All Users" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.badge_content +#: model_terms:ir.ui.view,arch_db:website_profile.user_profile_content +msgid "Badges" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.badge_content +msgid "Besides gaining reputation with your questions and answers,\n" +" you receive badges for being especially helpful.<br class=\"d-none d-lg-inline-block\"/>Badges\n" +" appear on your profile page, and your posts." +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_profile_content +msgid "Biography" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_profile_edit_content +msgid "Clear" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.email_validation_banner +msgid "Close" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_profile_edit_content +msgid "Country..." +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_profile_edit_content +msgid "Edit" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_profile_edit_content +msgid "Edit Profile" +msgstr "" + +#. module: website_profile +#: model:ir.model,name:website_profile.model_gamification_badge +msgid "Gamification Badge" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.users_page_header +msgid "Home" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.rank_badge_main +msgid "How do I earn badges?" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.rank_badge_main +msgid "How do I score more points?" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.email_validation_banner +msgid "It appears your email has not been verified." +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.rank_badge_main +msgid "Keep learning with" +msgstr "" + +#. module: website_profile +#: model:ir.model.fields,field_description:website_profile.field_website__karma_profile_min +msgid "Minimal karma to see other user's profile" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_profile_content +msgid "More info" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_badges +msgid "No badge yet" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_profile_edit_content +msgid "Please enter a valid email address in order to receive notifications from answers or comments." +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.rank_badge_main +msgid "Rank badge" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.rank_badge_main +msgid "Ranks" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.private_profile +msgid "Return to the website." +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.users_page_header +msgid "Search" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.users_page_header +msgid "Search in Users" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.private_profile +msgid "This profile is private!" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.user_profile_edit_content +msgid "Update" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.top3_user_card +msgid "User rank" +msgstr "" + +#. module: website_profile +#: model:ir.model,name:website_profile.model_res_users +#: model_terms:ir.ui.view,arch_db:website_profile.users_page_header +msgid "Users" +msgstr "" + +#. module: website_profile +#: model:ir.model,name:website_profile.model_website +msgid "Website" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.rank_badge_main +msgid "When you finish a course or reach milestones, you're awarded badges." +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.rank_badge_main +msgid "You can score more points by answering quizzes at the end of each course content. Points can also be earned on the forum. Follow this link to the guidelines of the forum." +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.users_page_header +msgid "breadcrumb" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.rank_badge_main +msgid "point" +msgstr "" + +#. module: website_profile +#: model_terms:ir.ui.view,arch_db:website_profile.profile_next_rank_card +msgid "xp" +msgstr "" + diff --git a/addons/website_profile/models/__init__.py b/addons/website_profile/models/__init__.py index c26e78d1255..e5d082ad113 100644 --- a/addons/website_profile/models/__init__.py +++ b/addons/website_profile/models/__init__.py @@ -3,3 +3,4 @@ from . import gamification_badge from . import website +from . import res_users diff --git a/addons/website_profile/models/res_users.py b/addons/website_profile/models/res_users.py new file mode 100644 index 00000000000..5bf49be0a78 --- /dev/null +++ b/addons/website_profile/models/res_users.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +import hashlib +import uuid + +from datetime import datetime +from werkzeug import urls +from odoo import api, models + +VALIDATION_KARMA_GAIN = 3 + + +class Users(models.Model): + _inherit = 'res.users' + + @api.model + def _generate_profile_token(self, user_id, email): + """Return a token for email validation. This token is valid for the day + and is a hash based on a (secret) uuid generated by the forum module, + the user_id, the email and currently the day (to be updated if necessary). """ + profile_uuid = self.env['ir.config_parameter'].sudo().get_param('website_profile.uuid') + if not profile_uuid: + profile_uuid = str(uuid.uuid4()) + self.env['ir.config_parameter'].sudo().set_param('website_profile.uuid', profile_uuid) + return hashlib.sha256((u'%s-%s-%s-%s' % ( + datetime.now().replace(hour=0, minute=0, second=0, microsecond=0), + profile_uuid, + user_id, + email + )).encode('utf-8')).hexdigest() + + def _send_profile_validation_email(self, **kwargs): + if not self.email: + return False + token = self._generate_profile_token(self.id, self.email) + activation_template = self.env.ref('website_profile.validation_email') + if activation_template: + params = { + 'token': token, + 'user_id': self.id, + 'email': self.email + } + params.update(kwargs) + base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url') + token_url = base_url + '/profile/validate_email?%s' % urls.url_encode(params) + with self._cr.savepoint(): + activation_template.sudo().with_context(token_url=token_url).send_mail( + self.id, force_send=True, raise_exception=True) + return True + + @api.multi + def _process_profile_validation_token(self, token, email): + self.ensure_one() + validation_token = self._generate_profile_token(self.id, email) + if token == validation_token and self.karma == 0: + return self.write({'karma': VALIDATION_KARMA_GAIN}) + return False diff --git a/addons/website_profile/static/src/js/website_profile.js b/addons/website_profile/static/src/js/website_profile.js new file mode 100644 index 00000000000..b1638f4b30e --- /dev/null +++ b/addons/website_profile/static/src/js/website_profile.js @@ -0,0 +1,45 @@ +odoo.define('website_profile.website_profile', function (require) { +'use strict'; + +var publicWidget = require('web.public.widget'); +publicWidget.registry.websiteProfile = publicWidget.Widget.extend({ + selector: '.o_wprofile_email_validation_container', + read_events: { + 'click .send_validation_email': '_onSendValidationEmailClick', + 'click .validated_email_close': '_onCloseValidatedEmailClick', + }, + + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + /** + * @private + * @param {Event} ev + */ + _onSendValidationEmailClick: function (ev) { + ev.preventDefault(); + var self = this; + var $element = $(ev.currentTarget); + this._rpc({ + route: '/profile/send_validation_email', + params: {'redirect_url': $element.data('redirect_url')}, + }).then(function (data) { + if (data) { + self.$('button.validation_email_close').click(); + } + }); + }, + + /** + * @private + */ + _onCloseValidatedEmailClick: function () { + this._rpc({ + route: '/profile/validate_email/close', + }); + }, +}); + +return publicWidget.registry.websiteProfile; + +}); diff --git a/addons/website_profile/static/src/scss/website_profile.scss b/addons/website_profile/static/src/scss/website_profile.scss index 224b46b1c84..ad1771c5d62 100644 --- a/addons/website_profile/static/src/scss/website_profile.scss +++ b/addons/website_profile/static/src/scss/website_profile.scss @@ -1,5 +1,5 @@ $owprofile-color-bg: desaturate(map-get($grays, "200"), 80%); -$owprofile-tabs-height: 37px; +$owprofile-tabs-height: 36px; .o_wprofile_wrap { background-color: $owprofile-color-bg; @@ -118,10 +118,25 @@ $owprofile-tabs-height: 37px; } // All Users Page -.o_wprofile_all_users_header { - @include media-breakpoint-up(sm) { - min-height: 200px; - margin-bottom: -60px; +.o_wprofile_all_users_nav { + border-width: 1px 0; + + &, .o_wprofile_course_nav_search { + background-color: rgba(white, 0.05); + border-color: rgba(white, 0.1); + border-style: solid; + } + + .o_wprofile_course_nav_search { + border-width: 0 1px; + } + + .breadcrumb-item.active a, .breadcrumb-item a:hover { + color: white; + } + + .breadcrumb-item a, .breadcrumb-item + .breadcrumb-item::before, .o_wprofile_course_nav_search input::placeholder { + color: rgba(white, 0.8); } } diff --git a/addons/website_profile/views/website_profile.xml b/addons/website_profile/views/website_profile.xml index 2a108ef8906..1a457a19958 100644 --- a/addons/website_profile/views/website_profile.xml +++ b/addons/website_profile/views/website_profile.xml @@ -4,8 +4,79 @@ <xpath expr="link[last()]" position="after"> <link rel="stylesheet" type="text/scss" href="/website_profile/static/src/scss/website_profile.scss"/> </xpath> + <xpath expr="script[last()]" position="after"> + <script type="text/javascript" src="/website_profile/static/src/js/website_profile.js"/> + </xpath> </template> + <!-- Sub nav --> + <template id="user_profile_sub_nav" name="User profile subnav"> + <div class="o_wprofile_all_users_nav"> + <div class="container"> + <div class="row align-items-center justify-content-between"> + <!-- Desktop Mode --> + <nav aria-label="breadcrumb" class="col d-none d-md-flex"> + <ol class="breadcrumb bg-transparent mb-0 pl-0 py-0"> + <li class="breadcrumb-item"> + <a t-att-href="home_url or '/'">Home</a> + </li> + <li t-attf-class="breadcrumb-item #{'active' if not view_user else ''}"> + <a href="/profile/users">Users</a> + </li> + <li t-if="view_user" class="breadcrumb-item active"> + <a><t t-esc="view_user"/></a> + </li> + </ol> + </nav> + + <div class="col d-none d-md-flex flex-row align-items-center justify-content-end"> + <!-- search --> + <form t-attf-action="/profile/users" role="search" method="get"> + <div class="input-group o_wprofile_course_nav_search ml-1 position-relative"> + <span class="input-group-prepend"> + <button class="btn btn-link text-white rounded-0 pr-1" type="submit" aria-label="Search" title="Search"> + <i class="fa fa-search"></i> + </button> + </span> + <input type="text" class="form-control border-0 rounded-0 bg-transparent text-white" name="search" placeholder="Search users"/> + </div> + </form> + </div> + + <!-- Mobile Mode --> + <div class="col d-md-none py-1"> + <div class="btn-group w-100 position-relative" role="group" aria-label="Mobile sub-nav"> + <div class="btn-group w-100 ml-2"> + <a class="btn bg-black-25 text-white dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Nav</a> + + <ul class="dropdown-menu"> + <a class="dropdown-item" t-att-href="home_url or '/'">Home</a> + <a class="dropdown-item" href="/profile/users">└ Users</a> + <a t-if="view_user" class="dropdown-item">└ <t t-esc="view_user"/></a> + </ul> + </div> + + <div class="btn-group ml-1 position-static mr-2"> + <a class="btn bg-black-25 text-white dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-search"></i></a> + <div class="dropdown-menu dropdown-menu-right w-100" style="right: 10px;"> + <form class="px-3" t-attf-action="/profile/users" role="search" method="get"> + <div class="input-group"> + <input type="text" class="form-control" name="search" placeholder="Search courses"/> + <span class="input-group-append"> + <button class="btn btn-primary" type="submit" aria-label="Search" title="Search"> + <i class="fa fa-search"/> + </button> + </span> + </div> + </form> + </div> + </div> + </div> + </div> + </div> + </div> + </div> + </template> <!-- Single User Profile Page @@ -123,14 +194,18 @@ </template> <template id="user_profile_header" name="Profile Page Header"> - <div class="o_wprofile_header o_wprofile_gradient position-relative text-white pb-3 pb-md-0 pt-2 pt-md-5"> - <div class="container"> + <div class="o_wprofile_header o_wprofile_gradient position-relative text-white"> + <t t-call="website_profile.user_profile_sub_nav"> + <t t-set="view_user"><t t-esc="user.name"/></t> + </t> + + <div class="container pb-3 pb-md-0 pt-2 pt-md-5"> <div class="row"> <!-- ==== Header Left ==== --> <div class="col-12 col-md-4 col-lg-3"> <div t-attf-class="d-flex align-items-start #{'justify-content-between' if (request.env.user == user) else 'justify-content-around' }"> <div class="o_wprofile_pict d-inline-block mb-3 mb-md-0" t-attf-style="background-image:url(/web/image/res.users/#{user.id}/image)"/> - <a class="btn btn-primary d-inline-block d-md-none" t-if="request.env.user == user" t-attf-href="/profile/edit?url_param=#{edit_button_url_param}"> + <a class="btn btn-primary d-inline-block d-md-none" t-if="request.env.user == user and validation_email_done" t-attf-href="/profile/edit?url_param=#{edit_button_url_param}"> <i class="fa fa-pencil mr-1"/>EDIT </a> </div> @@ -139,8 +214,10 @@ <!-- ==== Header Right ==== --> <div class="col-12 col-md-8 col-lg-9 d-flex flex-column"> <div class="d-flex justify-content-between align-items-start"> - <h1 class="o_card_people_name" t-field="user.name"/> - <a class="btn btn-primary d-none d-md-inline-block" t-if="request.env.user == user" t-attf-href="/profile/edit?url_param=#{edit_button_url_param}"> + <h1 class="o_card_people_name"> + <span t-field="user.name"/><small t-if="user.karma == 0"> (not verified)</small> + </h1> + <a class="btn btn-primary d-none d-md-inline-block" t-if="request.env.user == user and validation_email_done" t-attf-href="/profile/edit?url_param=#{edit_button_url_param}"> <i class="fa fa-pencil mr-2"/>EDIT PROFILE </a> </div> @@ -164,17 +241,17 @@ </template> <template id="user_profile_content" name="Profile Page Content"> - <div class="o_wprofile_content container"> + <div class="container"> <div class="row"> <!-- ========== SIDEBAR ========== --> <div class="col-12 col-md-4 col-lg-3 mt-3 mt-md-0"> <div class="bg-white px-3 py-2 py-md-3 mb-3 mb-md-5"> - <div class="o_wprofile_sidebar_top d-flex justify-content-between"> + <div class="d-flex justify-content-between"> <div t-if="user.rank_id" class="d-flex align-items-center"> <small class="font-weight-bold mr-2">Rank:</small> <img t-attf-src="/web/image/gamification.karma.rank/#{user.rank_id.id}/image_small" height="16" alt="" class="mr-1"/> - <a href="/profile/ranks" t-field="user.rank_id"/> + <a href="/profile/ranks_badges" t-field="user.rank_id"/> </div> <button class="btn btn-sm d-md-none bg-white border" type="button" data-toggle="collapse" data-target="#o_wprofile_sidebar_collapse" aria-expanded="false" aria-controls="o_wprofile_sidebar_collapse">More info</button> </div> @@ -212,6 +289,12 @@ </ul> <div class="tab-content py-4 o_wprofile_tabs_content mb-4" id="profile_extra_info_tabcontent"> <div role="tabpanel" class="tab-pane active" id="profile_tab_content_about"> + <div class="o_wprofile_email_validation_container mb16 mt16"> + <t t-call="website_profile.email_validation_banner"> + <t t-set="redirect_url" t-value="'/profile/user/%s' % user.id"/> + <t t-set="send_validation_email_message" t-value="'Click here to send a verification email.'"/> + </t> + </div> <div id="profile_about_badge" class="mb32"> <h5 class="border-bottom pb-1">Badges</h5> <t t-call="website_profile.user_badges"></t> @@ -277,18 +360,18 @@ <p class="text-muted">No badge yet</p> </div> <div class="text-right"> - <a t-if="not user.badge_ids and badge_category" t-attf-href="/profile/badge?category=#{badge_category}"><i class="fa fa-arrow-right"/> Check available badges</a> - <a t-else="" href="/profile/badge" class="btn btn-link btn-sm"><i class="fa fa-arrow-right mr-1"/>Check all available badges</a> + <a t-if="not user.badge_ids and badge_category" t-attf-href="/profile/ranks_badges?badge_category=#{badge_category}"><i class="fa fa-arrow-right"/> Check available badges</a> + <a t-else="" href="/profile/ranks_badges" class="btn btn-link btn-sm"><i class="fa fa-arrow-right mr-1"/>Check all available badges</a> </div> </template> - <!-- About Rank Page --> - <template id="rank_main" name="Ranks Page"> + <!-- About Ranks and badges Page --> + <template id="rank_badge_main" name="Ranks Page"> <t t-call="website.layout"> <div class="container mb32 mt48"> - <div class="row justify-content-between"> - <div class="col-12 col-md-6"> - <h1>Ranks & Badges</h1> + <div class="row justify-content-between" t-if="ranks"> + <div class="col-12 col-md-6 col-lg-5"> + <h1>Ranks</h1> <p class="lead mb-4">Keep learning with <t t-esc="user.company_id.name"/>. Collect points on the forum or on the eLearning platform. Those points will make you reach new ranks.</p> <h5>How do I earn badges?</h5> <p>When you finish a course or reach milestones, you're awarded badges.</p> @@ -296,64 +379,55 @@ <p>You can score more points by answering quizzes at the end of each course content. Points can also be earned on the forum. Follow this link to the guidelines of the forum.</p> </div> <div class="col-12 col-md-5 col-lg-4"> - <t t-call="website_profile.rank_content"/> - </div> - </div> - </div> - </t> - </template> - - <template id="rank_content" name="Rank Page content"> - <h5 class="text-muted my-2">Ranks</h5> - <div class="row flex-column"> - <t t-foreach="ranks" t-as="rank"> - <t t-set="order_inverse" t-value="6 - rank.id"/> - - <div t-attf-class="col order-#{order_inverse}"> - <div class="media align-items-center py-2 border-top"> - <img height="50" t-attf-src="/web/image/gamification.karma.rank/#{rank.id}/image" class="mr-2" alt="Rank badge"/> - <div class="media-body"> - <h5 class="mt-0 mb-0" t-field="rank.name"/> - <span class="badge badge-success"><span t-field="rank.karma_min"/></span> point<span t-if="rank.karma_min">s</span> + <div class="card"> + <div class="card-header border-bottom-0">Ranks</div> + <ul class="list-group list-group-flush"> + <t t-foreach="ranks" t-as="rank"> + <li t-attf-class="list-group-item"> + <div class="media align-items-center"> + <img height="40" t-attf-src="/web/image/gamification.karma.rank/#{rank.id}/image" class="mr-2" alt="Rank badge"/> + <div class="media-body"> + <h5 class="mt-0 mb-0" t-field="rank.name"/> + <span class="badge badge-success"><span t-field="rank.karma_min"/></span> point<span t-if="rank.karma_min">s</span> + </div> + </div> + </li> + </t> + </ul> </div> </div> </div> - </t> - </div> - </template> - - <!-- About Badge Page --> - <template id="badge_main" name="Badges Page"> - <t t-call="website.layout"> - <div class="container mb32 mt48"> - <t t-call="website_profile.badge_content"> - </t> + <t t-call="website_profile.badge_content"/> </div> </t> </template> <template id="badge_content" name="Badges Page content"> - <h1>Badges</h1> - <p class="lead"> - Besides gaining reputation with your questions and answers, - you receive badges for being especially helpful.<br/>Badges - appear on your profile page, and your posts. - </p> - <table class="table table-sm mt32 mb64"> - <tr t-foreach="badges" t-as="badge"> - <td class="align-middle"> - <img t-attf-src="/website_profile/static/src/img/badge_#{badge.level}.svg" class="my-1" style="height:2.5em" alt=""/> - <h6 t-field="badge.name" class="d-inline my-0"/> - </td> - <td class="align-middle d-none d-md-table-cell"> - <b t-esc="badge.stat_count_distinct"/> - <i class="text-muted"> awarded users</i> - </td> - <td class="align-middle"> - <span t-field="badge.description"/> - </td> - </tr> - </table> + <div class="row"> + <div class="col-12"> + <h1 class="mt-4 mt-lg-2">Badges</h1> + <p class="lead"> + Besides gaining reputation with your questions and answers, + you receive badges for being especially helpful.<br class="d-none d-lg-inline-block"/>Badges + appear on your profile page, and your posts. + </p> + </div> + </div> + <table class="table table-sm mb64"> + <tr t-foreach="badges" t-as="badge"> + <td class="align-middle"> + <img t-attf-src="/website_profile/static/src/img/badge_#{badge.level}.svg" class="my-1" style="height:2.5em" t-att-alt="badge.level"/> + <h6 t-field="badge.name" class="d-inline my-0"/> + </td> + <td class="align-middle d-none d-md-table-cell"> + <b t-esc="badge.stat_count_distinct"/> + <i class="text-muted"> awarded users</i> + </td> + <td class="align-middle"> + <span t-field="badge.description"/> + </td> + </tr> + </table> </template> <!--Private profile--> @@ -381,9 +455,10 @@ </template> <template id="users_page_header" name="Users Page Header"> - <div class="o_wprofile_all_users_header o_wprofile_gradient text-white"> + <div class="o_wprofile_all_users_header o_wprofile_gradient mb-n5 pb-5"> + <t t-call="website_profile.user_profile_sub_nav"/> <div class="container"> - <h1 class="py-5">All Users</h1> + <h1 class="py-4 text-white">All Users</h1> </div> </div> </template> @@ -463,4 +538,22 @@ </ul> </template> + <template id="email_validation_banner"> + <t t-set="send_alert_classes" t-value="send_alert_classes if send_alert_classes else 'alert alert-danger alert-dismissable'"/> + <t t-set="done_alert_classes" t-value="done_alert_classes if done_alert_classes else 'alert alert-success alert-dismissable'"/> + + <div t-if="not validation_email_sent and not is_public_user and user.karma == 0" t-att-class="send_alert_classes" role="alert"> + <button type="button" class="close validation_email_close" data-dismiss="alert" aria-label="Close">&times;</button> + It appears your email has not been verified.<br/> + <a class="send_validation_email alert-link" href="#" t-att-data-redirect_url="redirect_url"> + <span t-esc="send_validation_email_message"/> + </a> + </div> + <div t-if="validation_email_done" t-att-class="done_alert_classes" role="status"> + <button type="button" class="close validated_email_close" data-dismiss="alert" aria-label="Close">&times;</button> + <span id="email_validated_message">Congratulations! Your email has just been validated.</span> + <span t-esc="additional_validated_email_message"/> + </div> + </template> + </data></odoo> diff --git a/addons/website_rating/i18n/website_rating.pot b/addons/website_rating/i18n/website_rating.pot index ca342998221..546b606556e 100644 --- a/addons/website_rating/i18n/website_rating.pot +++ b/addons/website_rating/i18n/website_rating.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-18 09:49+0000\n" -"PO-Revision-Date: 2018-09-18 09:49+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -17,70 +17,79 @@ msgstr "" #. module: website_rating #. openerp-web -#: code:addons/website_rating/static/src/xml/website_mail.xml:24 +#: code:addons/website_rating/static/src/xml/portal_chatter.xml:10 #, python-format -msgid "Average" +msgid "#{widget.options['force_submit_url'] ? widget.options['force_submit_url'] : '/mail/chatter_post'}" msgstr "" #. module: website_rating #. openerp-web -#: code:addons/website_rating/static/src/xml/website_mail.xml:34 +#: code:addons/website_rating/static/src/xml/portal_chatter.xml:82 #, python-format -msgid "Details" +msgid "×" msgstr "" #. module: website_rating #. openerp-web -#: code:addons/website_rating/static/src/xml/website_mail.xml:69 +#: code:addons/website_rating/static/src/xml/portal_chatter.xml:62 +#: code:addons/website_rating/static/src/xml/portal_chatter.xml:77 #, python-format -msgid "Five stars on five" +msgid "Add a review" msgstr "" #. module: website_rating #. openerp-web -#: code:addons/website_rating/static/src/xml/website_mail.xml:68 +#: code:addons/website_rating/static/src/xml/website_mail.xml:24 #, python-format -msgid "Four stars on five" +msgid "Average" +msgstr "" + +#. module: website_rating +#. openerp-web +#: code:addons/website_rating/static/src/xml/website_mail.xml:34 +#, python-format +msgid "Details" msgstr "" #. module: website_rating #. openerp-web #: code:addons/website_rating/static/src/xml/website_mail.xml:13 +#: code:addons/website_rating/static/src/xml/website_mail.xml:73 #, python-format msgid "Half a star" msgstr "" #. module: website_rating #. openerp-web -#: code:addons/website_rating/static/src/js/website_mail.js:43 +#: code:addons/website_rating/static/src/js/website_mail.js:52 #, python-format msgid "I don't like it" msgstr "" #. module: website_rating #. openerp-web -#: code:addons/website_rating/static/src/js/website_mail.js:42 +#: code:addons/website_rating/static/src/js/website_mail.js:51 #, python-format msgid "I hate it" msgstr "" #. module: website_rating #. openerp-web -#: code:addons/website_rating/static/src/js/website_mail.js:45 +#: code:addons/website_rating/static/src/js/website_mail.js:54 #, python-format msgid "I like it" msgstr "" #. module: website_rating #. openerp-web -#: code:addons/website_rating/static/src/js/website_mail.js:46 +#: code:addons/website_rating/static/src/js/website_mail.js:55 #, python-format msgid "I love it" msgstr "" #. module: website_rating #. openerp-web -#: code:addons/website_rating/static/src/js/website_mail.js:44 +#: code:addons/website_rating/static/src/js/website_mail.js:53 #, python-format msgid "It's okay" msgstr "" @@ -92,16 +101,18 @@ msgstr "" #. module: website_rating #. openerp-web -#: code:addons/website_rating/static/src/xml/website_mail.xml:10 +#: code:addons/website_rating/static/src/xml/portal_chatter.xml:59 +#: code:addons/website_rating/static/src/xml/portal_chatter.xml:74 #, python-format -msgid "One star" +msgid "Modify your review" msgstr "" #. module: website_rating #. openerp-web -#: code:addons/website_rating/static/src/xml/website_mail.xml:65 +#: code:addons/website_rating/static/src/xml/website_mail.xml:10 +#: code:addons/website_rating/static/src/xml/website_mail.xml:70 #, python-format -msgid "One star on five" +msgid "One star" msgstr "" #. module: website_rating @@ -122,22 +133,15 @@ msgid "Remove selection" msgstr "" #. module: website_rating -#. openerp-web -#: code:addons/website_rating/static/src/xml/website_mail.xml:67 -#, python-format -msgid "Three stars on five" +#: model:ir.model.fields,help:website_rating.field_rating_rating__website_published +msgid "Visible on the website as a comment" msgstr "" #. module: website_rating #. openerp-web -#: code:addons/website_rating/static/src/xml/website_mail.xml:66 +#: code:addons/website_rating/static/src/xml/portal_chatter.xml:54 #, python-format -msgid "Two stars on five" -msgstr "" - -#. module: website_rating -#: model:ir.model.fields,help:website_rating.field_rating_rating__website_published -msgid "Visible on the website as a comment" +msgid "ratings)" msgstr "" #. module: website_rating diff --git a/addons/website_rating/static/src/js/website_mail.js b/addons/website_rating/static/src/js/website_mail.js index 4faa0fbb306..aa55f6f6680 100644 --- a/addons/website_rating/static/src/js/website_mail.js +++ b/addons/website_rating/static/src/js/website_mail.js @@ -315,7 +315,7 @@ var RatingPopupComposer = publicWidget.Widget.extend({ 'res_model': false, 'res_id': false, 'pid': 0, - 'display_composer': !session.is_website_user, + 'display_composer': options['disable_composer'] ? false : !session.is_website_user, 'display_rating': true, 'csrf_token': odoo.csrf_token, 'user_id': session.user_id, diff --git a/addons/website_rating/static/src/xml/portal_chatter.xml b/addons/website_rating/static/src/xml/portal_chatter.xml index e331c0393cc..5d0395c099b 100644 --- a/addons/website_rating/static/src/xml/portal_chatter.xml +++ b/addons/website_rating/static/src/xml/portal_chatter.xml @@ -44,17 +44,17 @@ It can alse be used to modify a message --> <t t-name="website_rating.PopupComposer"> - <div class="row align-items-center"> - <div class="col"> + <div class="d-flex flex-wrap align-items-center"> + <div class="text-nowrap"> <t t-call="website_rating.rating_stars_static"> <t t-set="val" t-value="widget.rating_avg || 0"/> <t t-set="inline_mode" t-value="true"/> </t> <t t-if="widget.rating_total"> - <small class="font-weight-bold">(<t t-esc="widget.rating_total"/> ratings)</small> + <small>(<t t-esc="widget.rating_total"/> ratings)</small> </t> </div> - <button t-if="widget.options['display_composer']" type="button" class="btn btn-primary col" data-toggle="modal" data-target="#ratingpopupcomposer"> + <button t-if="widget.options['display_composer']" type="button" class="btn btn-sm btn-primary mx-3" data-toggle="modal" data-target="#ratingpopupcomposer"> <t t-if="widget.options['display_composer']"> <t t-if="widget.options['default_message_id']"> Modify your review diff --git a/addons/website_rating/static/src/xml/website_mail.xml b/addons/website_rating/static/src/xml/website_mail.xml index d4e8dd83218..fc1c00cb7a9 100644 --- a/addons/website_rating/static/src/xml/website_mail.xml +++ b/addons/website_rating/static/src/xml/website_mail.xml @@ -13,7 +13,7 @@ <i class="fa fa-star-half-o" role="img" aria-label="Half a star" title="Half a star"></i> </t> <t t-foreach="_.range(0, empty_star)" t-as="num" role="img" t-attf-aria-label="#{empty_star} on 5" t-attf-title="#{empty_star} on 5"> - <i class="fa fa-star-o"></i> + <i class="fa fa-star text-black-25"></i> </t> </div> </t> @@ -73,7 +73,7 @@ <i class="fa fa-star-half-o" role="img" aria-label="Half a star" title="Half a star"></i> </t> <t t-foreach="_.range(0, empty_star)" t-as="num" role="img" t-attf-aria-label="#{empty_star} on 5" t-attf-title="#{empty_star} on 5"> - <i class="fa fa-star-o"></i> + <i class="fa fa-star-o text-black-25"></i> </t> </div> <div class="rate_text"> diff --git a/addons/website_rating/views/website_rating_templates.xml b/addons/website_rating/views/website_rating_templates.xml index 8ce20495b32..36bd88a1186 100644 --- a/addons/website_rating/views/website_rating_templates.xml +++ b/addons/website_rating/views/website_rating_templates.xml @@ -30,7 +30,7 @@ <i class="fa fa-star-half-o" role="img"></i> </t> <t t-foreach="range(0, empty_star)" t-as="num" role="img"> - <i class="fa fa-star-o"></i> + <i class="fa fa-star text-black-25"></i> </t> <t t-if="rating_count"> (<t t-esc="rating_count"/>) @@ -61,7 +61,8 @@ t-att-data-default_message="default_message" t-att-data-default_message_id="default_message_id" t-att-data-default_rating_value="default_rating_value" - t-att-data-force_submit_url="force_submit_url"> + t-att-data-force_submit_url="force_submit_url" + t-att-data-disable_composer="disable_composer"> </div> </template> diff --git a/addons/website_sale/__init__.py b/addons/website_sale/__init__.py index 5e8764bb37f..03800bab040 100644 --- a/addons/website_sale/__init__.py +++ b/addons/website_sale/__init__.py @@ -1,7 +1,19 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. - +from odoo import api, SUPERUSER_ID from . import controllers from . import models from . import wizard from . import report + + +def uninstall_hook(cr, registry): + ''' Need to reenable the `product` pricelist multi-company rule that were + disabled to be 'overriden' for multi-website purpose + ''' + env = api.Environment(cr, SUPERUSER_ID, {}) + pl_rule = env.ref('product.product_pricelist_comp_rule', raise_if_not_found=False) + pl_item_rule = env.ref('product.product_pricelist_item_comp_rule', raise_if_not_found=False) + multi_company_rules = pl_rule or env['ir.rule'] + multi_company_rules += pl_item_rule or env['ir.rule'] + multi_company_rules.write({'active': True}) diff --git a/addons/website_sale/__manifest__.py b/addons/website_sale/__manifest__.py index 91ce59ec5eb..b07dc32747b 100644 --- a/addons/website_sale/__manifest__.py +++ b/addons/website_sale/__manifest__.py @@ -30,4 +30,5 @@ 'qweb': ['static/src/xml/*.xml'], 'installable': True, 'application': True, + 'uninstall_hook': 'uninstall_hook', } diff --git a/addons/website_sale/data/data.xml b/addons/website_sale/data/data.xml index 4c56e978edb..7d70a0b45eb 100644 --- a/addons/website_sale/data/data.xml +++ b/addons/website_sale/data/data.xml @@ -37,7 +37,7 @@ <record model="product.pricelist" id="product.list0"> <field name="selectable" eval="False" /> - <field name="website_id" ref="website.default_website" /> + <field name="website_id" eval="False"/> </record> </data> <data> diff --git a/addons/website_sale/data/demo.xml b/addons/website_sale/data/demo.xml index 293e1563e12..49b94a1701b 100644 --- a/addons/website_sale/data/demo.xml +++ b/addons/website_sale/data/demo.xml @@ -224,7 +224,6 @@ <record model="product.pricelist" id="product.list0"> <field name="selectable" eval="True" /> - <field name="website_id" ref="website.default_website" /> <field name="sequence">3</field> <field name="currency_id" ref="base.USD"/> </record> diff --git a/addons/website_sale/i18n/website_sale.pot b/addons/website_sale/i18n/website_sale.pot index 674584678fa..ff700b10b6c 100644 --- a/addons/website_sale/i18n/website_sale.pot +++ b/addons/website_sale/i18n/website_sale.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 07:59+0000\n" -"PO-Revision-Date: 2019-01-16 07:59+0000\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2019-03-20 13:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -38,8 +38,18 @@ msgid ",\n" msgstr "" #. module: website_sale -#: model_terms:ir.ui.view,arch_db:website_sale.cart_summary -msgid "/shop/payment" +#: model_terms:ir.ui.view,arch_db:website_sale.address +msgid "/shop/address" +msgstr "" + +#. module: website_sale +#: model:ir.model.fields,help:website_sale.field_product_image__image +msgid "1024px * 1024px" +msgstr "" + +#. module: website_sale +#: model:ir.model.fields,help:website_sale.field_product_image__image_medium +msgid "128px * 128px" msgstr "" #. module: website_sale @@ -48,6 +58,11 @@ msgid "2 year" msgstr "" #. module: website_sale +#: model:ir.model.fields,help:website_sale.field_product_image__image_large +msgid "256px * 256px" +msgstr "" + +#. module: website_sale #: model_terms:ir.ui.view,arch_db:website_sale.product msgid "30-day money-back guarantee<br/>\n" " Free Shipping in U.S.<br/>\n" @@ -55,6 +70,11 @@ msgid "30-day money-back guarantee<br/>\n" msgstr "" #. module: website_sale +#: model:ir.model.fields,help:website_sale.field_product_image__image_small +msgid "64px * 64px" +msgstr "" + +#. module: website_sale #: model:mail.template,body_html:website_sale.mail_template_sale_cart_recovery msgid "<?xml version=\"1.0\"?>\n" "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"padding-top: 16px; background-color: #F1F1F1; font-family:Verdana, Arial,sans-serif; color: #454748; width: 100%; border-collapse:separate;\"><tr><td align=\"center\">\n" @@ -92,7 +112,7 @@ msgid "<?xml version=\"1.0\"?>\n" " <table width=\"100%\">\n" " <tr>\n" " <td style=\"padding: 10px; width:150px;\">\n" -" <img src=\"/web/image/product.product/${line.product_id.id}/image\" height=\"100px\" width=\"100px\" alt=\"Product image\"/>\n" +" <img src=\"/web/image/product.product/${line.product_id.id}/image_medium\" height=\"100px\" width=\"100px\" alt=\"Product image\"/>\n" " </td>\n" " <td>\n" " <strong>${line.product_id.display_name}</strong><br/>${line.name}\n" @@ -106,7 +126,7 @@ msgid "<?xml version=\"1.0\"?>\n" " <hr/>\n" " % endif\n" " <div style=\"text-align: center; margin: 16px 0px 16px 0px; font-size: 14px;\">\n" -" <a href=\"/shop/cart?access_token=${object.access_token}\" target=\"_blank\" style=\"background-color: #875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: #fff; border-radius: 5px; font-size:13px;\">\n" +" <a href=\"${object.get_base_url()}/shop/cart?access_token=${object.access_token}\" target=\"_blank\" style=\"background-color: #875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: #fff; border-radius: 5px; font-size:13px;\">\n" " Resume order\n" " </a>\n" " </div>\n" @@ -244,9 +264,8 @@ msgid "<span class=\"fa fa-chevron-down fa-border float-right\" role=\"img\" ari msgstr "" #. module: website_sale -#: model_terms:ir.ui.view,arch_db:website_sale.product #: model_terms:ir.ui.view,arch_db:website_sale.shop_product_carousel -msgid "<span class=\"fa fa-chevron-left\" role=\"img\" aria-label=\"Previous\" title=\"Previous\"/>" +msgid "<span class=\"fa fa-chevron-left p-2\" role=\"img\" aria-label=\"Previous\" title=\"Previous\"/>" msgstr "" #. module: website_sale @@ -267,9 +286,8 @@ msgid "<span class=\"fa fa-chevron-left\"/> Previous" msgstr "" #. module: website_sale -#: model_terms:ir.ui.view,arch_db:website_sale.product #: model_terms:ir.ui.view,arch_db:website_sale.shop_product_carousel -msgid "<span class=\"fa fa-chevron-right\" role=\"img\" aria-label=\"Next\" title=\"Next\"/>" +msgid "<span class=\"fa fa-chevron-right p-2\" role=\"img\" aria-label=\"Next\" title=\"Next\"/>" msgstr "" #. module: website_sale @@ -408,6 +426,11 @@ msgid "Abandoned carts are all carts left unconfirmed by website visitors. You c msgstr "" #. module: website_sale +#: model_terms:ir.ui.view,arch_db:website_sale.product_image_view_kanban +msgid "Acceptable file size" +msgstr "" + +#. module: website_sale #: model:ir.model.fields,help:website_sale.field_product_product__accessory_product_ids #: model:ir.model.fields,help:website_sale.field_product_template__accessory_product_ids msgid "Accessories show up when the customerreviews the cart before payment (cross-sell strategy)." @@ -556,6 +579,11 @@ msgid "Best Sellers" msgstr "" #. module: website_sale +#: model:ir.model.fields,field_description:website_sale.field_product_image__image +msgid "Big-sized Image" +msgstr "" + +#. module: website_sale #: model_terms:ir.ui.view,arch_db:website_sale.confirmation #: model_terms:ir.ui.view,arch_db:website_sale.payment msgid "Billing" @@ -587,6 +615,16 @@ msgid "Cabinets" msgstr "" #. module: website_sale +#: model:ir.model.fields,field_description:website_sale.field_product_image__can_image_be_zoomed +msgid "Can image be zoomed" +msgstr "" + +#. module: website_sale +#: model:ir.model.fields,field_description:website_sale.field_product_image__can_image_raw_be_zoomed +msgid "Can image raw be zoomed" +msgstr "" + +#. module: website_sale #. openerp-web #: code:addons/website_sale/static/src/xml/website_sale_dashboard.xml:14 #, python-format @@ -690,14 +728,14 @@ msgstr "" #. module: website_sale #. openerp-web -#: code:addons/website_sale/static/src/js/website_sale_tour_shop.js:28 +#: code:addons/website_sale/static/src/js/website_sale_tour_shop.js:24 #, python-format msgid "Click on <em>Continue</em> to create the product." msgstr "" #. module: website_sale #. openerp-web -#: code:addons/website_sale/static/src/js/website_sale_tour_shop.js:63 +#: code:addons/website_sale/static/src/js/website_sale_tour_shop.js:60 #, python-format msgid "Click on this button so your customers can see it." msgstr "" @@ -940,7 +978,7 @@ msgstr "" #. module: website_sale #. openerp-web -#: code:addons/website_sale/static/src/js/website_sale_tour_shop.js:38 +#: code:addons/website_sale/static/src/js/website_sale_tour_shop.js:35 #, python-format msgid "Double click here to set an image describing your product." msgstr "" @@ -952,7 +990,7 @@ msgstr "" #. module: website_sale #. openerp-web -#: code:addons/website_sale/static/src/js/website_sale_tour_shop.js:53 +#: code:addons/website_sale/static/src/js/website_sale_tour_shop.js:50 #, python-format msgid "Drag this website block and drop it in your page." msgstr "" @@ -984,7 +1022,7 @@ msgstr "" #. module: website_sale #. openerp-web -#: code:addons/website_sale/static/src/js/website_sale_tour_shop.js:32 +#: code:addons/website_sale/static/src/js/website_sale_tour_shop.js:29 #, python-format msgid "Edit the price of this product by clicking on the amount." msgstr "" @@ -1011,7 +1049,7 @@ msgstr "" #. module: website_sale #. openerp-web -#: code:addons/website_sale/static/src/js/website_sale_tour_shop.js:24 +#: code:addons/website_sale/static/src/js/website_sale_tour_shop.js:20 #, python-format msgid "Enter a name for your new product" msgstr "" @@ -1023,13 +1061,21 @@ msgid "Error ! You cannot create recursive categories." msgstr "" #. module: website_sale +#: model_terms:ir.ui.view,arch_db:website_sale.extra_info_option +msgid "Extra Info" +msgstr "" + +#. module: website_sale +#: model:ir.model.fields,field_description:website_sale.field_product_product__product_template_image_ids +#: model:ir.model.fields,field_description:website_sale.field_product_template__product_template_image_ids #: model_terms:ir.ui.view,arch_db:website_sale.product_template_form_view -msgid "Extra Images" +msgid "Extra Product Images" msgstr "" #. module: website_sale -#: model_terms:ir.ui.view,arch_db:website_sale.extra_info_option -msgid "Extra Info" +#: model:ir.model.fields,field_description:website_sale.field_product_product__product_variant_image_ids +#: model_terms:ir.ui.view,arch_db:website_sale.product_product_view_form_easy_inherit_website_sale +msgid "Extra Variant Images" msgstr "" #. module: website_sale @@ -1085,6 +1131,11 @@ msgid "HTTP Routing" msgstr "" #. module: website_sale +#: model_terms:ir.ui.view,arch_db:website_sale.product_image_view_kanban +msgid "Huge file size. The image should be optimized/reduced." +msgstr "" + +#. module: website_sale #: model_terms:ir.ui.view,arch_db:website_sale.payment_sale_note msgid "I agree to the" msgstr "" @@ -1108,7 +1159,6 @@ msgid "If your website or mobile apps allows users to create content and make th msgstr "" #. module: website_sale -#: model:ir.model.fields,field_description:website_sale.field_product_image__image #: model:ir.model.fields,field_description:website_sale.field_product_public_category__image msgid "Image" msgstr "" @@ -1119,9 +1169,8 @@ msgid "Image Name" msgstr "" #. module: website_sale -#: model:ir.model.fields,field_description:website_sale.field_product_product__product_image_ids -#: model:ir.model.fields,field_description:website_sale.field_product_template__product_image_ids -msgid "Images" +#: model:ir.model.fields,help:website_sale.field_product_image__image_original +msgid "Image in its original size, as it was uploaded." msgstr "" #. module: website_sale @@ -1130,7 +1179,7 @@ msgid "Installs the \"Website Delivery Information\" application" msgstr "" #. module: website_sale -#: code:addons/website_sale/controllers/main.py:527 +#: code:addons/website_sale/controllers/main.py:554 #, python-format msgid "Invalid Email! Please enter a valid email address." msgstr "" @@ -1162,7 +1211,7 @@ msgid "Issue invoices to customers" msgstr "" #. module: website_sale -#: code:addons/website_sale/models/sale_order.py:165 +#: code:addons/website_sale/models/sale_order.py:180 #, python-format msgid "It is forbidden to modify a sales order which is not in draft status." msgstr "" @@ -1183,6 +1232,11 @@ msgid "Lamps" msgstr "" #. module: website_sale +#: model:ir.model.fields,field_description:website_sale.field_product_image__image_large +msgid "Large-sized Image" +msgstr "" + +#. module: website_sale #: model:ir.model.fields,field_description:website_sale.field_product_image____last_update #: model:ir.model.fields,field_description:website_sale.field_product_public_category____last_update #: model:ir.model.fields,field_description:website_sale.field_product_style____last_update @@ -1224,14 +1278,14 @@ msgstr "" #. module: website_sale #. openerp-web -#: code:addons/website_sale/static/src/js/website_sale_tour_shop.js:15 +#: code:addons/website_sale/static/src/js/website_sale_tour_shop.js:11 #, python-format msgid "Let's create your first product." msgstr "" #. module: website_sale #. openerp-web -#: code:addons/website_sale/static/src/js/website_sale_tour_shop.js:67 +#: code:addons/website_sale/static/src/js/website_sale_tour_shop.js:64 #, python-format msgid "Let's now take a look at your administration dashboard to get your eCommerce website ready in no time." msgstr "" @@ -1257,6 +1311,11 @@ msgid "Manage promotion & coupon programs" msgstr "" #. module: website_sale +#: model:ir.model.fields,field_description:website_sale.field_product_image__image_medium +msgid "Medium-sized Image" +msgstr "" + +#. module: website_sale #: model:ir.model.fields,field_description:website_sale.field_product_public_category__image_medium msgid "Medium-sized image" msgstr "" @@ -1310,7 +1369,7 @@ msgstr "" #. module: website_sale #. openerp-web -#: code:addons/website_sale/controllers/main.py:1000 +#: code:addons/website_sale/controllers/main.py:1027 #: code:addons/website_sale/static/src/js/website_sale.editor.js:30 #, python-format msgid "New Product" @@ -1376,7 +1435,7 @@ msgstr "" #. module: website_sale #. openerp-web -#: code:addons/website_sale/static/src/js/website_sale_tour_shop.js:58 +#: code:addons/website_sale/static/src/js/website_sale_tour_shop.js:55 #, python-format msgid "Once you click on <b>Save</b>, your product is updated." msgstr "" @@ -1403,13 +1462,18 @@ msgstr "" #. module: website_sale #. openerp-web -#: code:addons/website_sale/static/src/js/website_sale_tour_shop.js:71 +#: code:addons/website_sale/static/src/js/website_sale_tour_shop.js:68 #, python-format msgid "Open your website app here." msgstr "" #. module: website_sale -#: code:addons/website_sale/models/sale_order.py:235 +#: model_terms:ir.ui.view,arch_db:website_sale.product_image_view_kanban +msgid "Optimization required! Reduce the image size or increase your compression settings." +msgstr "" + +#. module: website_sale +#: code:addons/website_sale/models/sale_order.py:294 #, python-format msgid "Option for:" msgstr "" @@ -1420,7 +1484,7 @@ msgid "Option not available" msgstr "" #. module: website_sale -#: code:addons/website_sale/models/sale_order.py:237 +#: code:addons/website_sale/models/sale_order.py:296 #, python-format msgid "Option:" msgstr "" @@ -1493,6 +1557,11 @@ msgid "Orders/Day" msgstr "" #. module: website_sale +#: model:ir.model.fields,field_description:website_sale.field_product_image__image_original +msgid "Original Image" +msgstr "" + +#. module: website_sale #: model:ir.model.fields,field_description:website_sale.field_product_public_category__parent_id msgid "Parent Category" msgstr "" @@ -1680,7 +1749,7 @@ msgid "Product Image" msgstr "" #. module: website_sale -#: model_terms:ir.ui.view,arch_db:website_sale.product_template_form_view +#: model_terms:ir.ui.view,arch_db:website_sale.product_image_view_kanban #: model_terms:ir.ui.view,arch_db:website_sale.view_product_image_form msgid "Product Images" msgstr "" @@ -1707,10 +1776,16 @@ msgstr "" #. module: website_sale #: model:ir.model,name:website_sale.model_product_template +#: model:ir.model.fields,field_description:website_sale.field_product_image__product_tmpl_id msgid "Product Template" msgstr "" #. module: website_sale +#: model:ir.model.fields,field_description:website_sale.field_product_image__product_variant_id +msgid "Product Variant" +msgstr "" + +#. module: website_sale #: model:ir.ui.menu,name:website_sale.product_catalog_variants msgid "Product Variants" msgstr "" @@ -1785,18 +1860,38 @@ msgid "Quantity" msgstr "" #. module: website_sale -#: model_terms:ir.ui.view,arch_db:website_sale.view_sales_order_filter_ecommerce_abondand -msgid "Recovery Email Sent" +#: model:ir.model.fields,field_description:website_sale.field_product_image__image_raw_big +msgid "Raw Big-sized Image" +msgstr "" + +#. module: website_sale +#: model:ir.model.fields,field_description:website_sale.field_product_image__image_raw_large +msgid "Raw Large-sized Image" +msgstr "" + +#. module: website_sale +#: model:ir.model.fields,field_description:website_sale.field_product_image__image_raw_medium +msgid "Raw Medium-sized Image" +msgstr "" + +#. module: website_sale +#: model:ir.model.fields,field_description:website_sale.field_product_image__image_raw_original +msgid "Raw Original Image" +msgstr "" + +#. module: website_sale +#: model:ir.model.fields,field_description:website_sale.field_product_image__image_raw_small +msgid "Raw Small-sized Image" msgstr "" #. module: website_sale #: model_terms:ir.ui.view,arch_db:website_sale.view_sales_order_filter_ecommerce_abondand -msgid "Recovery Email to Send" +msgid "Recovery Email Sent" msgstr "" #. module: website_sale -#: model:ir.model.fields,field_description:website_sale.field_product_image__product_tmpl_id -msgid "Related Product" +#: model_terms:ir.ui.view,arch_db:website_sale.view_sales_order_filter_ecommerce_abondand +msgid "Recovery Email to Send" msgstr "" #. module: website_sale @@ -1822,6 +1917,11 @@ msgid "Restrict publishing to this website." msgstr "" #. module: website_sale +#: model_terms:ir.ui.view,arch_db:website_sale.payment +msgid "Return to Cart" +msgstr "" + +#. module: website_sale #: model_terms:ir.ui.view,arch_db:website_sale.404 msgid "Return to the product list." msgstr "" @@ -1915,7 +2015,7 @@ msgstr "" #. module: website_sale #. openerp-web -#: code:addons/website_sale/static/src/js/website_sale_tour_shop.js:20 +#: code:addons/website_sale/static/src/js/website_sale_tour_shop.js:16 #, python-format msgid "Select <b>New Product</b> to create it and manage its properties to boost your sales." msgstr "" @@ -1963,7 +2063,9 @@ msgid "Send a recovery email when a cart is abandoned" msgstr "" #. module: website_sale +#: model:ir.model.fields,field_description:website_sale.field_product_image__sequence #: model:ir.model.fields,field_description:website_sale.field_product_public_category__sequence +#: model_terms:ir.ui.view,arch_db:website_sale.view_product_image_form msgid "Sequence" msgstr "" @@ -2055,6 +2157,11 @@ msgid "Size Y" msgstr "" #. module: website_sale +#: model:ir.model.fields,field_description:website_sale.field_product_image__image_small +msgid "Small-sized Image" +msgstr "" + +#. module: website_sale #: model:ir.model.fields,field_description:website_sale.field_product_public_category__image_small msgid "Small-sized image" msgstr "" @@ -2073,7 +2180,7 @@ msgid "Sold" msgstr "" #. module: website_sale -#: code:addons/website_sale/controllers/main.py:545 +#: code:addons/website_sale/controllers/main.py:572 #, python-format msgid "Some required fields are empty." msgstr "" @@ -2187,13 +2294,13 @@ msgid "The SEPA QR Code informations are not set correctly." msgstr "" #. module: website_sale -#: code:addons/website_sale/models/sale_order.py:198 +#: code:addons/website_sale/models/sale_order.py:204 #, python-format msgid "The given combination does not exist therefore it cannot be added to cart." msgstr "" #. module: website_sale -#: code:addons/website_sale/models/sale_order.py:184 +#: code:addons/website_sale/models/sale_order.py:190 #, python-format msgid "The given product does not exist therefore it cannot be added to cart." msgstr "" @@ -2324,7 +2431,7 @@ msgstr "" #. module: website_sale #. openerp-web -#: code:addons/website_sale/static/src/js/website_sale_tour_shop.js:45 +#: code:addons/website_sale/static/src/js/website_sale_tour_shop.js:42 #, python-format msgid "Upload a file from your local library." msgstr "" diff --git a/addons/website_sale/models/product.py b/addons/website_sale/models/product.py index c1086108f73..54eb4bce462 100644 --- a/addons/website_sale/models/product.py +++ b/addons/website_sale/models/product.py @@ -3,6 +3,7 @@ from odoo import api, fields, models, tools, _ from odoo.addons import decimal_precision as dp +from odoo.addons.website.models import ir_http from odoo.tools.translate import html_translate from odoo.osv import expression @@ -19,14 +20,17 @@ class ProductPricelist(models.Model): _inherit = "product.pricelist" def _default_website(self): - return self.env['website'].search([], limit=1) + """ Find the first company's website, if there is one. """ + company_id = self.env.user.company_id.id + domain = [('company_id', '=', company_id)] + return self.env['website'].search(domain, limit=1) - website_id = fields.Many2one('website', string="website", default=_default_website) + website_id = fields.Many2one('website', string="Website", default=_default_website) code = fields.Char(string='E-commerce Promotional Code', groups="base.group_user") selectable = fields.Boolean(help="Allow the end user to choose this price list") def clear_cache(self): - # website._get_pl() is cached to avoid to recompute at each request the + # website._get_pl_partner_order() is cached to avoid to recompute at each request the # list of available pricelists. So, we need to invalidate the cache when # we change the config of website price list to force to recompute. website = self.env['website'] @@ -50,6 +54,56 @@ class ProductPricelist(models.Model): self.clear_cache() return res + def _get_partner_pricelist_multi_search_domain_hook(self): + domain = super(ProductPricelist, self)._get_partner_pricelist_multi_search_domain_hook() + website = ir_http.get_request_website() + if website: + domain += self._get_website_pricelists_domain(website.id) + return domain + + def _get_partner_pricelist_multi_filter_hook(self): + res = super(ProductPricelist, self)._get_partner_pricelist_multi_filter_hook() + website = ir_http.get_request_website() + if website: + res = res.filtered(lambda pl: pl._is_available_on_website(website.id)) + return res + + @api.multi + def _is_available_on_website(self, website_id): + """ To be able to be used on a website, a pricelist should either: + - Have its `website_id` set to current website (specific pricelist). + - Have no `website_id` set and should be `selectable` (generic pricelist) + or should have a `code` (generic promotion). + + Note: A pricelist without a website_id, not selectable and without a + code is a backend pricelist. + + Change in this method should be reflected in `_get_website_pricelists_domain`. + """ + self.ensure_one() + return self.website_id.id == website_id or (not self.website_id and (self.selectable or self.code)) + + def _get_website_pricelists_domain(self, website_id): + ''' Check above `_is_available_on_website` for explanation. + Change in this method should be reflected in `_is_available_on_website`. + ''' + return [ + '|', ('website_id', '=', website_id), + '&', ('website_id', '=', False), + '|', ('selectable', '=', True), ('code', '!=', False), + ] + + def _get_partner_pricelist_multi(self, partner_ids, company_id=None): + ''' If `property_product_pricelist` is read from website, we should use + the website's company and not the user's one. + Passing a `company_id` to super will avoid using the current user's + company. + ''' + website = ir_http.get_request_website() + if not company_id and website: + company_id = website.company_id.id + return super(ProductPricelist, self)._get_partner_pricelist_multi(partner_ids, company_id) + class ProductPublicCategory(models.Model): _name = "product.public.category" diff --git a/addons/website_sale/models/res_partner.py b/addons/website_sale/models/res_partner.py index 8a9980240c7..7bfa8911180 100644 --- a/addons/website_sale/models/res_partner.py +++ b/addons/website_sale/models/res_partner.py @@ -2,7 +2,7 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo import api, fields, models -from odoo.http import request +from odoo.addons.website.models import ir_http class ResPartner(models.Model): @@ -16,10 +16,11 @@ class ResPartner(models.Model): for partner in self: is_public = any([u._is_public() for u in partner.with_context(active_test=False).user_ids]) - if request and hasattr(request, 'website') and not is_public: + website = ir_http.get_request_website() + if website and not is_public: partner.last_website_so_id = SaleOrder.search([ ('partner_id', '=', partner.id), - ('website_id', '=', request.website.id), + ('website_id', '=', website.id), ('state', '=', 'draft'), ], order='write_date desc', limit=1) else: diff --git a/addons/website_sale/models/sale_order.py b/addons/website_sale/models/sale_order.py index adf71d95eec..0d95368a223 100644 --- a/addons/website_sale/models/sale_order.py +++ b/addons/website_sale/models/sale_order.py @@ -68,7 +68,7 @@ class SaleOrder(models.Model): # is_abandoned domain possibilities if (operator not in expression.NEGATIVE_TERM_OPERATORS and value) or (operator in expression.NEGATIVE_TERM_OPERATORS and not value): return abandoned_domain - return expression.distribute_not(abandoned_domain) # negative domain + return expression.distribute_not(['!'] + abandoned_domain) # negative domain @api.multi def _cart_find_product_line(self, product_id=None, line_id=None, **kwargs): @@ -286,14 +286,14 @@ class SaleOrder(models.Model): order_line.write(values) - # link a product to the sales order - if kwargs.get('linked_line_id'): - linked_line = SaleOrderLineSudo.browse(kwargs['linked_line_id']) - order_line.write({ - 'linked_line_id': linked_line.id, - 'name': order_line.name + "\n" + _("Option for:") + ' ' + linked_line.product_id.display_name, - }) - linked_line.write({"name": linked_line.name + "\n" + _("Option:") + ' ' + order_line.product_id.display_name}) + # link a product to the sales order + if kwargs.get('linked_line_id'): + linked_line = SaleOrderLineSudo.browse(kwargs['linked_line_id']) + order_line.write({ + 'linked_line_id': linked_line.id, + 'name': order_line.name + "\n" + _("Option for:") + ' ' + linked_line.product_id.display_name, + }) + linked_line.write({"name": linked_line.name + "\n" + _("Option:") + ' ' + order_line.product_id.display_name}) option_lines = self.order_line.filtered(lambda l: l.linked_line_id.id == order_line.id) for option_line_id in option_lines: diff --git a/addons/website_sale/models/website.py b/addons/website_sale/models/website.py index 11bdba05079..6344a0bdd87 100644 --- a/addons/website_sale/models/website.py +++ b/addons/website_sale/models/website.py @@ -6,6 +6,7 @@ import logging from odoo import api, fields, models, tools from odoo.http import request +from odoo.addons.website.models import ir_http _logger = logging.getLogger(__name__) @@ -41,7 +42,12 @@ class Website(models.Model): @api.one def _compute_pricelist_ids(self): - self.pricelist_ids = self.env["product.pricelist"].search([("website_id", "=", self.id)]) + """ Return the pricelists that can be used directly or indirectly on + the website. + """ + Pricelist = self.env["product.pricelist"] + domain = Pricelist._get_website_pricelists_domain(self.id) + self.pricelist_ids = Pricelist.search(domain) @api.multi def _compute_pricelist_id(self): @@ -64,57 +70,77 @@ class Website(models.Model): :param int order_pl: the current cart pricelist :returns: list of pricelist ids """ + def _check_show_visible(pl): + """ If `show_visible` is True, we will only show the pricelist if + one of this condition is met: + - The pricelist is `selectable`. + - The pricelist is either the currently used pricelist or the + current cart pricelist, we should consider it as available even if + it might not be website compliant (eg: it is not selectable anymore, + it is a backend pricelist, it is not active anymore..). + """ + return (not show_visible or pl.selectable or pl.id in (current_pl, order_pl)) + + # Note: 1. pricelists from all_pl are already website compliant (went through + # `_get_website_pricelists_domain`) + # 2. do not read `property_product_pricelist` here as `_get_pl_partner_order` + # is cached and the result of this method will be impacted by that field value. + # Pass it through `partner_pl` parameter instead to invalidate the cache. + + # If there is a GeoIP country, find a pricelist for it + self.ensure_one() pricelists = self.env['product.pricelist'] if country_code: for cgroup in self.env['res.country.group'].search([('country_ids.code', '=', country_code)]): - for group_pricelists in cgroup.pricelist_ids: - if not show_visible or group_pricelists.selectable or group_pricelists.id in (current_pl, order_pl): - pricelists |= group_pricelists + pricelists |= cgroup.pricelist_ids.filtered( + lambda pl: pl._is_available_on_website(self.id) and _check_show_visible(pl) + ) - partner = self.env.user.partner_id - is_public = self.user_id.id == self.env.user.id - if not is_public and (not pricelists or (partner_pl or partner.property_product_pricelist.id) != website_pl): - if partner.property_product_pricelist.website_id: - pricelists |= partner.property_product_pricelist + # no GeoIP or no pricelist for this country + if not country_code or not pricelists: + pricelists |= all_pl.filtered(lambda pl: _check_show_visible(pl)) - if not pricelists: # no pricelist for this country, or no GeoIP - pricelists |= all_pl.filtered(lambda pl: not show_visible or pl.selectable or pl.id in (current_pl, order_pl)) - if not show_visible and not country_code: - pricelists |= all_pl.filtered(lambda pl: pl.sudo().code) + # if logged in, add partner pl (which is `property_product_pricelist`, might not be website compliant) + is_public = self.user_id.id == self.env.user.id + if not is_public: + pricelists |= pricelists.browse(partner_pl).filtered(lambda pl: pl._is_available_on_website(self.id) and _check_show_visible(pl)) # This method is cached, must not return records! See also #8795 return pricelists.ids + # DEPRECATED (Not used anymore) -> Remove me in master (saas12.3) def _get_pl(self, country_code, show_visible, website_pl, current_pl, all_pl): pl_ids = self._get_pl_partner_order(country_code, show_visible, website_pl, current_pl, all_pl) return self.env['product.pricelist'].browse(pl_ids) - def get_pricelist_available(self, show_visible=False): - + def _get_pricelist_available(self, req, show_visible=False): """ Return the list of pricelists that can be used on website for the current user. Country restrictions will be detected with GeoIP (if installed). :param bool show_visible: if True, we don't display pricelist where selectable is False (Eg: Code promo) :returns: pricelist recordset """ - website = request and hasattr(request, 'website') and request.website or None + website = ir_http.get_request_website() if not website: if self.env.context.get('website_id'): website = self.browse(self.env.context['website_id']) else: # In the weird case we are coming from the backend (https://github.com/odoo/odoo/issues/20245) website = len(self) == 1 and self or self.search([], limit=1) - isocountry = request and request.session.geoip and request.session.geoip.get('country_code') or False + isocountry = req and req.session.geoip and req.session.geoip.get('country_code') or False partner = self.env.user.partner_id last_order_pl = partner.last_website_so_id.pricelist_id - partner_pl = partner.property_product_pricelist + partner_pl = partner.sudo(user=self.env.user).property_product_pricelist pricelists = website._get_pl_partner_order(isocountry, show_visible, website.user_id.sudo().partner_id.property_product_pricelist.id, - request and request.session.get('website_sale_current_pl') or None, + req and req.session.get('website_sale_current_pl') or None, website.pricelist_ids, partner_pl=partner_pl and partner_pl.id or None, order_pl=last_order_pl and last_order_pl.id or None) return self.env['product.pricelist'].browse(pricelists) + def get_pricelist_available(self, show_visible=False): + return self._get_pricelist_available(request, show_visible) + def is_pricelist_available(self, pl_id): """ Return a boolean to specify if a specific pricelist can be manually set on the website. Warning: It check only if pricelist is in the 'selectable' pricelists or the current pricelist. @@ -237,7 +263,7 @@ class Website(models.Model): # TODO cache partner_id session pricelist = self.env['product.pricelist'].browse(pricelist_id).sudo() so_data = self._prepare_sale_order_values(partner, pricelist) - sale_order = self.env['sale.order'].sudo().create(so_data) + sale_order = self.env['sale.order'].with_context(force_company=request.website.company_id.id).sudo().create(so_data) # set fiscal position if request.website.partner_id.id != partner.id: diff --git a/addons/website_sale/security/website_sale.xml b/addons/website_sale/security/website_sale.xml index e86ddcda5e6..b859c0e2d05 100644 --- a/addons/website_sale/security/website_sale.xml +++ b/addons/website_sale/security/website_sale.xml @@ -39,6 +39,31 @@ <field name="implied_ids" eval="[(4, ref('sale.group_delivery_invoice_address'))]"/> </record> - + <!-- + Multi-company/Multi-website compliant: + We can't add a condition on domain_force without losing `product` + ir.rule domain_force. It is better to disabled them to be able to + reenable them on `website_sale` uninstall. + Don't override domain_force or we will need to hardcode the original + domain in `uninstall_hook` rather than just reenabling records. + --> + <record id="product.product_pricelist_comp_rule" model="ir.rule"> + <field name="active" eval="False"/> + </record> + <record id="product.product_pricelist_item_comp_rule" model="ir.rule"> + <field name="active" eval="False"/> + </record> + <record id="product_pricelist_comp_rule" model="ir.rule"> + <field name="name">product pricelist company rule</field> + <field name="model_id" ref="product.model_product_pricelist"/> + <field name="global" eval="True"/> + <field name="domain_force">[('company_id','in',(False,user.company_id.id,website.company_id.id))]</field> + </record> + <record id="product_pricelist_item_comp_rule" model="ir.rule"> + <field name="name">product pricelist item company rule</field> + <field name="model_id" ref="product.model_product_pricelist_item"/> + <field name="global" eval="True"/> + <field name="domain_force">[('company_id','in',(False,user.company_id.id,website.company_id.id))]</field> + </record> </odoo> diff --git a/addons/website_sale/static/src/js/website_sale_tour_shop_mail.js b/addons/website_sale/static/src/js/website_sale_tour_shop_mail.js index d699db43189..445513924bb 100644 --- a/addons/website_sale/static/src/js/website_sale_tour_shop_mail.js +++ b/addons/website_sale/static/src/js/website_sale_tour_shop_mail.js @@ -71,8 +71,19 @@ tour.register('shop_mail', { extra_trigger: '.o_statusbar_status .btn-primary:contains("Sales Order")', }, { + content: "Open recipients dropdown", + trigger: '.o_field_many2one[name="partner_ids"] .ui-autocomplete-input', + run: 'click', + }, + { + content: "Select azure interior", + trigger: '.ui-menu-item a:contains(Interior24)', + in_modal: false, + }, + { content: "click Send email", trigger: '.btn[name="action_send_mail"]', + extra_trigger: '.o_badge_text:contains("Azure")', }, { content: "wait mail to be sent, and go see it", diff --git a/addons/website_sale/tests/test_website_sale_pricelist.py b/addons/website_sale/tests/test_website_sale_pricelist.py index a9a5c4981b5..eb3b9d5d1f6 100644 --- a/addons/website_sale/tests/test_website_sale_pricelist.py +++ b/addons/website_sale/tests/test_website_sale_pricelist.py @@ -4,7 +4,25 @@ try: from unittest.mock import patch except ImportError: from mock import patch -from odoo.tests.common import TransactionCase +from odoo.tests.common import HttpCase, TransactionCase + +''' /!\/!\ +Calling `get_pricelist_available` after setting `property_product_pricelist` on +a partner will not work as expected. That field will change the output of +`get_pricelist_available` but modifying it will not invalidate the cache. +Thus, tests should not do: + + self.env.user.partner_id.property_product_pricelist = my_pricelist + pls = self.get_pricelist_available() + self.assertEqual(...) + self.env.user.partner_id.property_product_pricelist = another_pricelist + pls = self.get_pricelist_available() + self.assertEqual(...) + +as `_get_pl_partner_order` cache won't be invalidate between the calls, output +won't be the one expected and tests will actually not test anything. +Try to keep one call to `get_pricelist_available` by test method. +''' class TestWebsitePriceList(TransactionCase): @@ -47,14 +65,14 @@ class TestWebsitePriceList(TransactionCase): self.addCleanup(patcher.stop) def get_pl(self, show, current_pl, country): - pls = self.website._get_pl( + pl_ids = self.website._get_pl_partner_order( country, show, self.website.pricelist_id.id, current_pl, self.website.pricelist_ids ) - return pls + return self.env['product.pricelist'].browse(pl_ids) def test_get_pricelist_available_show(self): show = True @@ -125,3 +143,291 @@ class TestWebsitePriceList(TransactionCase): pls = self.get_pl(show, current_pl, country) self.assertEquals(len(set(pls.mapped('name')) & set(result)), len(pls), 'Test failed for %s (%s %s vs %s %s)' % (country, len(pls), pls.mapped('name'), len(result), result)) + + +def simulate_frontend_context(self, website_id=1): + # Mock this method will be enough to simulate frontend context in most methods + def get_request_website(): + return self.env['website'].browse(website_id) + patcher = patch('odoo.addons.website.models.ir_http.get_request_website', wraps=get_request_website) + patcher.start() + self.addCleanup(patcher.stop) + + +class DotDict(dict): + """dot.notation access to dictionary attributes""" + def __getattr__(*args): + val = dict.get(*args) + return DotDict(val) if type(val) is dict else val + + +class TestWebsitePriceListAvailable(TransactionCase): + # This is enough to avoid a mock (request.session/website do not exist during test) + def get_pricelist_available(self, show_visible=False, website_id=1, country_code=None, website_sale_current_pl=None): + request = DotDict({ + 'website': self.env['website'].browse(website_id), + 'session': { + 'geoip': { + 'country_code': country_code, + }, + 'website_sale_current_pl': website_sale_current_pl, + }, + }) + return self.env['website']._get_pricelist_available(request, show_visible) + + def setUp(self): + super(TestWebsitePriceListAvailable, self).setUp() + Pricelist = self.env['product.pricelist'] + Website = self.env['website'] + + # Set up 2 websites + self.website = Website.browse(1) + self.website2 = Website.create({'name': 'Website 2'}) + + # Remove existing pricelists and create new ones + Pricelist.search([]).write({'active': False}) + self.backend_pl = Pricelist.create({ + 'name': 'Backend Pricelist', + 'website_id': False, + }) + self.generic_pl_select = Pricelist.create({ + 'name': 'Generic Selectable Pricelist', + 'selectable': True, + 'website_id': False, + }) + self.generic_pl_code = Pricelist.create({ + 'name': 'Generic Code Pricelist', + 'code': 'GENERICCODE', + 'website_id': False, + }) + self.generic_pl_code_select = Pricelist.create({ + 'name': 'Generic Code Selectable Pricelist', + 'code': 'GENERICCODESELECT', + 'selectable': True, + 'website_id': False, + }) + self.w1_pl = Pricelist.create({ + 'name': 'Website 1 Pricelist', + 'website_id': self.website.id, + }) + self.w1_pl_select = Pricelist.create({ + 'name': 'Website 1 Pricelist Selectable', + 'website_id': self.website.id, + 'selectable': True, + }) + self.w1_pl_code = Pricelist.create({ + 'name': 'Website 1 Pricelist Code', + 'website_id': self.website.id, + 'code': 'W1CODE', + }) + self.w1_pl_code_select = Pricelist.create({ + 'name': 'Website 1 Pricelist Code Selectable', + 'website_id': self.website.id, + 'code': 'W1CODESELECT', + 'selectable': True, + }) + self.w2_pl = Pricelist.create({ + 'name': 'Website 2 Pricelist', + 'website_id': self.website2.id, + }) + + simulate_frontend_context(self) + + def test_get_pricelist_available(self): + # all_pl = self.backend_pl + self.generic_pl_select + self.generic_pl_code + self.generic_pl_code_select + self.w1_pl + self.w1_pl_select + self.w1_pl_code + self.w1_pl_code_select + self.w2_pl + + # Test get all available pricelists + pls_to_return = self.generic_pl_select + self.generic_pl_code + self.generic_pl_code_select + self.w1_pl + self.w1_pl_select + self.w1_pl_code + self.w1_pl_code_select + pls = self.get_pricelist_available() + self.assertEqual(pls, pls_to_return, "Every pricelist having the correct website_id set or (no website_id but a code or selectable) should be returned") + + # Test get all available and visible pricelists + pls_to_return = self.generic_pl_select + self.generic_pl_code_select + self.w1_pl_select + self.w1_pl_code_select + pls = self.get_pricelist_available(show_visible=True) + self.assertEqual(pls, pls_to_return, "Only selectable pricelists website compliant (website_id False or current website) should be returned") + + def test_property_product_pricelist_for_inactive_partner(self): + # `_get_partner_pricelist_multi` should consider inactive users when searching for pricelists. + # Real case if for public user. His `property_product_pricelist` need to be set as it is passed + # through `_get_pl_partner_order` as the `website_pl` when searching for available pricelists + # for active users. + public_partner = self.env.ref('base.public_partner') + self.assertFalse(public_partner.active, "Ensure public partner is inactive (purpose of this test)") + pl = public_partner.property_product_pricelist + self.assertEqual(len(pl), 1, "Inactive partner should still get a `property_product_pricelist`") + + +class TestWebsitePriceListAvailableGeoIP(TestWebsitePriceListAvailable): + def setUp(self): + super(TestWebsitePriceListAvailableGeoIP, self).setUp() + # clean `property_product_pricelist` for partner for this test (clean setup) + self.env['ir.property'].search([('res_id', '=', 'res.partner,%s' % self.env.user.partner_id.id)]).unlink() + + # set different country groups on pricelists + c_EUR = self.env.ref('base.europe') + c_BENELUX = self.env.ref('website_sale.benelux') + self.BE = self.env.ref('base.be') + NL = self.env.ref('base.nl') + c_BE = self.env['res.country.group'].create({'name': 'Belgium', 'country_ids': [(6, 0, [self.BE.id])]}) + c_NL = self.env['res.country.group'].create({'name': 'Netherlands', 'country_ids': [(6, 0, [NL.id])]}) + + (self.backend_pl + self.generic_pl_select + self.generic_pl_code + self.w1_pl_select).write({'country_group_ids': [(6, 0, [c_BE.id])]}) + (self.generic_pl_code_select + self.w1_pl + self.w2_pl).write({'country_group_ids': [(6, 0, [c_BENELUX.id])]}) + (self.w1_pl_code).write({'country_group_ids': [(6, 0, [c_EUR.id])]}) + (self.w1_pl_code_select).write({'country_group_ids': [(6, 0, [c_NL.id])]}) + + # pricelist | selectable | website | code | country group | + # ----------------------------------------------------------------------| + # backend_pl | | | | BE | + # generic_pl_select | V | | | BE | + # generic_pl_code | | | V | BE | + # generic_pl_code_select | V | | V | BENELUX | + # w1_pl | | 1 | | BENELUX | + # w1_pl_select | V | 1 | | BE | + # w1_pl_code | | 1 | V | EUR | + # w1_pl_code_select | V | 1 | V | NL | + # w2_pl | | 2 | | BENELUX | + + # available pl for website 1 for GeoIP BE (anything except website 2, backend and NL) + self.website1_be_pl = self.generic_pl_select + self.generic_pl_code + self.w1_pl_select + self.generic_pl_code_select + self.w1_pl + self.w1_pl_code + + def test_get_pricelist_available_geoip(self): + # Test get all available pricelists with geoip and no partner pricelist (ir.property) + + # property_product_pricelist will also be returned in the available pricelists + self.website1_be_pl += self.env.user.partner_id.property_product_pricelist + + pls = self.get_pricelist_available(country_code=self.BE.code) + self.assertEqual(pls, self.website1_be_pl, "Only pricelists for BE and accessible on website should be returned, and the partner pl") + + def test_get_pricelist_available_geoip2(self): + # Test get all available pricelists with geoip and a partner pricelist (ir.property) not website compliant + self.env.user.partner_id.property_product_pricelist = self.backend_pl + pls = self.get_pricelist_available(country_code=self.BE.code) + self.assertEqual(pls, self.website1_be_pl, "Only pricelists for BE and accessible on website should be returned as partner pl is not website compliant") + + def test_get_pricelist_available_geoip3(self): + # Test get all available pricelists with geoip and a partner pricelist (ir.property) website compliant (but not geoip compliant) + self.env.user.partner_id.property_product_pricelist = self.w1_pl_code_select + self.website1_be_pl += self.env.user.partner_id.property_product_pricelist + pls = self.get_pricelist_available(country_code=self.BE.code) + self.assertEqual(pls, self.website1_be_pl, "Only pricelists for BE and accessible on website should be returned, plus the partner pricelist as it is website compliant") + + def test_get_pricelist_available_geoip4(self): + # Test get all available with geoip and visible pricelists + promo pl + pls_to_return = self.generic_pl_select + self.w1_pl_select + self.generic_pl_code_select + # property_product_pricelist will also be returned in the available pricelists + pls_to_return += self.env.user.partner_id.property_product_pricelist + + current_pl = self.w1_pl_code + pls = self.get_pricelist_available(country_code=self.BE.code, show_visible=True, website_sale_current_pl=current_pl.id) + self.assertEqual(pls, pls_to_return + current_pl, "Only pricelists for BE, accessible en website and selectable should be returned. It should also return the applied promo pl") + + +class TestWebsitePriceListHttp(HttpCase): + def test_get_pricelist_available_multi_company(self): + ''' Test that the `property_product_pricelist` of `res.partner` is not + computed as SUPERUSER_ID. + Indeed, `property_product_pricelist` is a _compute that ends up + doing a search on `product.pricelist` that woule bypass the + pricelist multi-company `ir.rule`. Then it would return pricelists + from another company and the code would raise an access error when + reading that `property_product_pricelist`. + ''' + test_company = self.env['res.company'].create({'name': 'Test Company'}) + self.env['product.pricelist'].create({ + 'name': 'Backend Pricelist For "Test Company"', + 'website_id': False, + 'company_id': test_company.id, + 'sequence': 1, + }) + + self.authenticate('portal', 'portal') + r = self.url_open('/shop') + self.assertEqual(r.status_code, 200, "The page should not raise an access error because of reading pricelists from other companies") + + +class TestWebsitePriceListMultiCompany(TransactionCase): + def setUp(self): + ''' Create a basic multi-company pricelist environment: + - Set up 2 companies with their own company-restricted pricelist each. + - Add demo user in those 2 companies + - For each company, add that company pricelist to the demo user partner. + - Set website's company to company 2 + - Demo user will still be in company 1 + ''' + super(TestWebsitePriceListMultiCompany, self).setUp() + + self.demo_user = self.env.ref('base.user_demo') + + # Create and add demo user to 2 companies + self.company1 = self.demo_user.company_id + self.company2 = self.env['res.company'].create({'name': 'Test Company'}) + self.demo_user.company_ids += self.company2 + # Set company2 as current company for demo user + self.website = self.env['website'].browse(1) + self.website.company_id = self.company2 + + # Create a company pricelist for each company and set it to demo user + self.c1_pl = self.env['product.pricelist'].create({ + 'name': 'Company 1 Pricelist', + 'company_id': self.company1.id, + }) + self.c2_pl = self.env['product.pricelist'].create({ + 'name': 'Company 2 Pricelist', + 'company_id': self.company2.id, + 'website_id': False, + }) + self.demo_user.partner_id.property_product_pricelist = self.c1_pl + # Switch env.user company to create ir.property in company2 + self.env.user.company_id = self.company2 + self.demo_user.partner_id.property_product_pricelist = self.c2_pl + + # Ensure everything was done correctly + self.assertEqual(self.demo_user.partner_id.with_context(force_company=self.company1.id).property_product_pricelist, self.c1_pl) + self.assertEqual(self.demo_user.partner_id.with_context(force_company=self.company2.id).property_product_pricelist, self.c2_pl) + irp1 = self.env['ir.property'].search([ + ('name', '=', 'property_product_pricelist'), + ('company_id', '=', self.company1.id), + ('res_id', '=', 'res.partner,%s' % self.demo_user.partner_id.id), + ('value_reference', '=', 'product.pricelist,%s' % self.c1_pl.id), + ]) + irp2 = self.env['ir.property'].search([ + ('name', '=', 'property_product_pricelist'), + ('company_id', '=', self.company2.id), + ('res_id', '=', 'res.partner,%s' % self.demo_user.partner_id.id), + ('value_reference', '=', 'product.pricelist,%s' % self.c2_pl.id), + ]) + self.assertEqual(len(irp1 + irp2), 2, "Ensure there is an `ir.property` for demo partner for every company, and that the pricelist is the company specific one.") + simulate_frontend_context(self) + # ---------------------------------- IR.PROPERTY ------------------------------------- + # id | name | res_id | company_id | value_reference + # ------------------------------------------------------------------------------------ + # 1 | 'property_product_pricelist' | | 1 | product.pricelist,1 + # 2 | 'property_product_pricelist' | | 2 | product.pricelist,2 + # 3 | 'property_product_pricelist' | res.partner,8 | 1 | product.pricelist,10 + # 4 | 'property_product_pricelist' | res.partner,8 | 2 | product.pricelist,11 + + def test_property_product_pricelist_multi_company(self): + ''' Test that the `property_product_pricelist` of `res.partner` is read + for the company of the website and not the current user company. + This is the case if the user visit a website for which the company + is not the same as its user's company. + + Here, as demo user (company1), we will visit website1 (company2). + It should return the ir.property for demo user for company2 and not + for the company1 as we should get the website's company pricelist + and not the demo user's current company pricelist. + ''' + # First check: It should return ir.property,4 as company_id is + # website.company_id and not env.user.company_id + company_id = self.website.company_id.id + partner = self.demo_user.partner_id.with_context(force_company=company_id) + demo_pl = partner.property_product_pricelist + self.assertEqual(demo_pl, self.c2_pl) + + # Second thing to check: It should not error in read right access error + # Indeed, the ir.rule for pricelists rights about company should allow to + # also read a pricelist from another company if that company is the one + # from the currently visited website. + self.env(user=self.env.ref('base.user_demo'))['product.pricelist'].browse(demo_pl.id).name diff --git a/addons/website_sale/views/product_views.xml b/addons/website_sale/views/product_views.xml index 1afe4f9b9fc..07833ec6b63 100644 --- a/addons/website_sale/views/product_views.xml +++ b/addons/website_sale/views/product_views.xml @@ -179,7 +179,7 @@ <field name="arch" type="xml"> <field name='currency_id' position='after'> <field name="selectable"/> - <field name="website_id" options="{'no_create': True}" string="Allow to use on " placeholder="None website"/> + <field name="website_id" options="{'no_create': True}" /> </field> </field> </record> diff --git a/addons/website_sale/views/templates.xml b/addons/website_sale/views/templates.xml index 8c643c918e2..3d4cd01eda4 100644 --- a/addons/website_sale/views/templates.xml +++ b/addons/website_sale/views/templates.xml @@ -592,7 +592,7 @@ <span itemprop="price" style="display:none;" t-esc="combination_info['price']"/> <span itemprop="priceCurrency" style="display:none;" t-esc="website.currency_id.name"/> </h4> - <h4 class="css_non_editable_mode_hidden decimal_precision" t-att-data-precision="str(product.currency_id.decimal_places)"> + <h4 class="css_non_editable_mode_hidden decimal_precision" t-att-data-precision="str(website.currency_id.decimal_places)"> <span t-field="product.list_price" t-options='{ "widget": "monetary", @@ -1574,8 +1574,7 @@ <span t-else="">An error occured while processing your payment. Please try again or contact your administrator.</span> </t> <t t-if="payment_tx_id.state == 'authorized'"> - <span t-if="payment_tx_id.acquirer_id.auth_msg" t-raw="payment_tx_id.acquirer_id.auth_msg"/> - <span t-else="">Your payment has been authorized.</span> + <span>Your payment has been authorized.</span> </t> </div> <div t-if="payment_tx_id.acquirer_id.post_msg" class="card-body"> diff --git a/addons/website_sale_comparison/controllers/main.py b/addons/website_sale_comparison/controllers/main.py index 9b833777b7b..f6cb6cfc0fe 100644 --- a/addons/website_sale_comparison/controllers/main.py +++ b/addons/website_sale_comparison/controllers/main.py @@ -23,7 +23,7 @@ class WebsiteSaleProductComparison(WebsiteSale): for var in product.product_tmpl_id._get_valid_product_template_attribute_lines(): cat_name = var.attribute_id.category_id.name or _('Uncategorized') att_name = var.attribute_id.name - if not product.attribute_value_ids: # create_variant = False + if not var.attribute_id.create_variant: continue res.setdefault(cat_name, OrderedDict()).setdefault(att_name, [' - '] * len(products)) val = product.attribute_value_ids.filtered(lambda x: x.attribute_id == var.attribute_id) diff --git a/addons/website_sale_delivery/i18n/website_sale_delivery.pot b/addons/website_sale_delivery/i18n/website_sale_delivery.pot index 28153371e59..bd9b81c3dee 100644 --- a/addons/website_sale_delivery/i18n/website_sale_delivery.pot +++ b/addons/website_sale_delivery/i18n/website_sale_delivery.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-24 10:58+0000\n" -"PO-Revision-Date: 2018-12-24 10:58+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -89,23 +89,13 @@ msgstr "" #. module: website_sale_delivery #. openerp-web -#: code:addons/website_sale_delivery/static/src/js/website_sale_delivery.js:54 +#: code:addons/website_sale_delivery/static/src/js/website_sale_delivery.js:56 #: model_terms:ir.ui.view,arch_db:website_sale_delivery.payment_delivery_methods #, python-format msgid "Free" msgstr "" #. module: website_sale_delivery -#: model:ir.model.fields,help:website_sale_delivery.field_sale_order__has_delivery -msgid "Has an order line set for delivery" -msgstr "" - -#. module: website_sale_delivery -#: model:ir.model.fields,field_description:website_sale_delivery.field_sale_order__has_delivery -msgid "Has delivery" -msgstr "" - -#. module: website_sale_delivery #: code:addons/website_sale_delivery/controllers/main.py:44 #, python-format msgid "No shipping method is available for your current order and shipping address. Please contact us for more information." @@ -148,11 +138,6 @@ msgid "USPS Delivery Methods" msgstr "" #. module: website_sale_delivery -#: model:ir.model.fields,field_description:website_sale_delivery.field_delivery_carrier__website_published -msgid "Visible on current website" -msgstr "" - -#. module: website_sale_delivery #: model_terms:ir.ui.view,arch_db:website_sale_delivery.res_config_settings_view_form msgid "bpost Delivery Methods" msgstr "" diff --git a/addons/website_sale_digital/i18n/website_sale_digital.pot b/addons/website_sale_digital/i18n/website_sale_digital.pot index 4b3d54f8546..a76bce12dc6 100644 --- a/addons/website_sale_digital/i18n/website_sale_digital.pot +++ b/addons/website_sale_digital/i18n/website_sale_digital.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-08 06:49+0000\n" -"PO-Revision-Date: 2018-10-08 06:49+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -35,6 +35,7 @@ msgstr "" #. module: website_sale_digital #: model:ir.model.fields,field_description:website_sale_digital.field_ir_attachment__product_downloadable +#: model:ir.model.fields,field_description:website_sale_digital.field_mrp_document__product_downloadable msgid "Downloadable from product portal" msgstr "" @@ -74,8 +75,3 @@ msgstr "" msgid "eBook: Office Renovation for Dummies" msgstr "" -#. module: website_sale_digital -#: model:product.template,weight_uom_name:website_sale_digital.product_1 -msgid "kg" -msgstr "" - diff --git a/addons/website_sale_link_tracker/i18n/website_sale_link_tracker.pot b/addons/website_sale_link_tracker/i18n/website_sale_link_tracker.pot index f53e90d2628..cd622427ae4 100644 --- a/addons/website_sale_link_tracker/i18n/website_sale_link_tracker.pot +++ b/addons/website_sale_link_tracker/i18n/website_sale_link_tracker.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-24 10:58+0000\n" -"PO-Revision-Date: 2018-12-24 10:58+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -50,7 +50,7 @@ msgstr "" #. module: website_sale_link_tracker #: model:utm.source,name:website_sale_link_tracker.utm_source_sale_order_0 -msgid "Sale Newsletter" +msgid "Sale Promotion 1" msgstr "" #. module: website_sale_link_tracker diff --git a/addons/website_sale_slides/i18n/website_sale_slides.pot b/addons/website_sale_slides/i18n/website_sale_slides.pot new file mode 100644 index 00000000000..12702b8c413 --- /dev/null +++ b/addons/website_sale_slides/i18n/website_sale_slides.pot @@ -0,0 +1,84 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_sale_slides +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~12.2\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-03-20 14:19+0000\n" +"PO-Revision-Date: 2019-03-20 14:19+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: website_sale_slides +#: model_terms:ir.ui.view,arch_db:website_sale_slides.course_sidebar +msgid "<span class=\"cta-title text_small_caps\">Buy Course</span>" +msgstr "" + +#. module: website_sale_slides +#: model_terms:ir.ui.view,arch_db:website_sale_slides.course_sidebar +msgid "<span class=\"cta-title text_small_caps\">Course Not Buyable</span>" +msgstr "" + +#. module: website_sale_slides +#: model:ir.model.fields,help:website_sale_slides.field_slide_channel__enroll +msgid "Condition to enroll: everyone, on invite, on payment (sale bridge)." +msgstr "" + +#. module: website_sale_slides +#: model:product.product,name:website_sale_slides.product_course +#: model:product.template,name:website_sale_slides.product_course_product_template +msgid "DIY Furniture Course" +msgstr "" + +#. module: website_sale_slides +#: model:ir.model.fields,field_description:website_sale_slides.field_slide_channel__enroll +msgid "Enroll Policy" +msgstr "" + +#. module: website_sale_slides +#: selection:slide.channel,enroll:0 +msgid "Invite" +msgstr "" + +#. module: website_sale_slides +#: selection:slide.channel,enroll:0 +msgid "On payment" +msgstr "" + +#. module: website_sale_slides +#: model:ir.model.fields,field_description:website_sale_slides.field_slide_channel__product_id +msgid "Product" +msgstr "" + +#. module: website_sale_slides +#: sql_constraint:slide.channel:0 +msgid "Product is required for on payment channels." +msgstr "" + +#. module: website_sale_slides +#: selection:slide.channel,enroll:0 +msgid "Public" +msgstr "" + +#. module: website_sale_slides +#: model:ir.model,name:website_sale_slides.model_sale_order +msgid "Sales Order" +msgstr "" + +#. module: website_sale_slides +#: model:ir.model,name:website_sale_slides.model_slide_channel +msgid "Slide Channel" +msgstr "" + +#. module: website_sale_slides +#: model:product.product,uom_name:website_sale_slides.product_course +#: model:product.template,uom_name:website_sale_slides.product_course_product_template +msgid "Unit(s)" +msgstr "" + diff --git a/addons/website_sale_stock/i18n/website_sale_stock.pot b/addons/website_sale_stock/i18n/website_sale_stock.pot index 44757808624..11ae6e9e5dc 100644 --- a/addons/website_sale_stock/i18n/website_sale_stock.pot +++ b/addons/website_sale_stock/i18n/website_sale_stock.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-24 10:58+0000\n" -"PO-Revision-Date: 2018-12-24 10:58+0000\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 13:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -22,6 +22,7 @@ msgid "<strong>Warning!</strong>" msgstr "" #. module: website_sale_stock +#: model:ir.model.fields,help:website_sale_stock.field_product_product__inventory_availability #: model:ir.model.fields,help:website_sale_stock.field_product_template__inventory_availability msgid "Adds an inventory availability status on the web product page." msgstr "" @@ -32,6 +33,7 @@ msgid "Availability" msgstr "" #. module: website_sale_stock +#: model:ir.model.fields,field_description:website_sale_stock.field_product_product__available_threshold #: model:ir.model.fields,field_description:website_sale_stock.field_product_template__available_threshold #: model:ir.model.fields,field_description:website_sale_stock.field_res_config_settings__available_threshold msgid "Availability Threshold" @@ -48,6 +50,7 @@ msgid "Config Settings" msgstr "" #. module: website_sale_stock +#: model:ir.model.fields,field_description:website_sale_stock.field_product_product__custom_message #: model:ir.model.fields,field_description:website_sale_stock.field_product_template__custom_message msgid "Custom Message" msgstr "" @@ -80,6 +83,7 @@ msgid "Inventory" msgstr "" #. module: website_sale_stock +#: model:ir.model.fields,field_description:website_sale_stock.field_product_product__inventory_availability #: model:ir.model.fields,field_description:website_sale_stock.field_product_template__inventory_availability #: model:ir.model.fields,field_description:website_sale_stock.field_res_config_settings__inventory_availability msgid "Inventory Availability" diff --git a/addons/website_sale_wishlist/static/src/js/website_sale_tour_wishlist.js b/addons/website_sale_wishlist/static/src/js/website_sale_tour_wishlist.js index 9357b8118ab..cdfb5f30f98 100644 --- a/addons/website_sale_wishlist/static/src/js/website_sale_tour_wishlist.js +++ b/addons/website_sale_wishlist/static/src/js/website_sale_tour_wishlist.js @@ -1,6 +1,7 @@ odoo.define('website_sale_wishlist.tour', function (require) { 'use strict'; +var rpc = require('web.rpc'); var tour = require("web_tour.tour"); tour.register('shop_wishlist', { @@ -123,6 +124,220 @@ tour.register('shop_wishlist', { trigger: ":not(:has(.my_wish_quantity:visible))", run: function() {}, }, + // Test dynamic attributes + { + content: "Create a product with dynamic attribute and its values.", + trigger: 'body', + run: function () { + rpc.query({ + model: 'product.attribute', + method: 'create', + args: [{ + 'name': "color", + 'type': 'color', + 'create_variant': 'dynamic' + }], + }).then(function (attributeId) { + return rpc.query({ + model: 'product.template', + method: 'create', + args: [{ + 'name': "Bottle", + 'is_published': true, + 'attribute_line_ids': [[0, 0, { + 'attribute_id': attributeId, + 'value_ids': [ + [0, 0, { + 'name': "red", + 'attribute_id': attributeId, + }], + [0, 0, { + 'name': "blue", + 'attribute_id': attributeId, + }], + [0, 0, { + 'name': "black", + 'attribute_id': attributeId, + }], + ] + }]], + }], + }); + }).then(function () { + window.location.href = '/web/session/logout?redirect=/shop?search=Bottle'; + }); + }, + }, + { + content: "Add Bottle to wishlist from /shop", + extra_trigger: '.oe_product_cart:contains("Bottle")', + trigger: '.oe_product_cart:contains("Bottle") .o_add_wishlist', + }, + { + content: "Check that wishlist contains 1 item", + trigger: '.my_wish_quantity:contains(1)', + run: function () {}, + }, + { + content: "Click on product", + extra_trigger: '.oe_product_cart:contains("Bottle") .o_add_wishlist.disabled', + trigger: '.oe_product_cart a:contains("Bottle")', + }, + { + content: "Select Bottle with second variant from /product", + trigger: '.js_variant_change[data-value_name="blue"]', + }, + { + content: "Add product in wishlist", + extra_trigger: '#product_detail .o_add_wishlist_dyn:not(".disabled")', + trigger: '#product_detail .o_add_wishlist_dyn', + }, + { + content: "Select Bottle with third variant from /product", + trigger: '.js_variant_change[data-value_name="black"]', + }, + { + content: "Add product in wishlist", + extra_trigger: '#product_detail .o_add_wishlist_dyn:not(".disabled")', + trigger: '#product_detail .o_add_wishlist_dyn', + }, + { + content: "Check that wishlist contains 3 items and go to wishlist", + trigger: '.my_wish_quantity:contains(3)', + run: function () { + window.location.href = '/shop/wishlist'; + }, + }, + { + content: "Check wishlist contains first variant", + trigger: '#o_comparelist_table tr:contains("red")', + run: function () {}, + }, + { + content: "Check wishlist contains second variant", + trigger: '#o_comparelist_table tr:contains("blue")', + run: function () {}, + }, + { + content: "Check wishlist contains third variant, then go to login", + trigger: '#o_comparelist_table tr:contains("black")', + run: function () { + window.location.href = "/web/login"; + }, + }, + { + content: "Submit login as admin", + trigger: '.oe_login_form', + run: function () { + $('.oe_login_form input[name="login"]').val("admin"); + $('.oe_login_form input[name="password"]').val("admin"); + $('.oe_login_form input[name="redirect"]').val("/"); + $('.oe_login_form').submit(); + }, + }, + // Test one impossible combination while other combinations are possible + { + content: "Archive the first variant", + trigger: '#top_menu:contains("Mitchell Admin")', + run: function () { + rpc.query({ + model: 'product.product', + method: 'search', + args: [[['name', '=', "Bottle"]]], + }) + .then(function (productIds) { + return rpc.query({ + model: 'product.product', + method: 'write', + args: [productIds[0], {active: false}], + }); + }) + .then(function () { + window.location.href = '/web/session/logout?redirect=/shop?search=Bottle'; + }); + }, + }, + { + content: "Check there is wishlist button on product from /shop", + extra_trigger: '.js_sale', + trigger: '.oe_product_cart:contains("Bottle") .o_add_wishlist', + run: function () {}, + }, + { + content: "Click on product", + trigger: '.oe_product_cart a:contains("Bottle")', + }, + { + content: "Select Bottle with first variant (red) from /product", + trigger: '.js_variant_change[data-value_name="red"]', + }, + { + content: "Check there is no wishlist button when selecting impossible variant", + trigger: '#product_detail:not(:has(.o_add_wishlist))', + run: function () {}, + }, + { + content: "Select Bottle with second variant (blue) from /product", + trigger: '.js_variant_change[data-value_name="blue"]', + }, + { + content: "Click on wishlist when selecting a possible variant from /product", + trigger: '#product_detail .o_add_wishlist_dyn:not(.disabled)', + }, + { + content: "Check product added to wishlist and go to login", + trigger: '.my_wish_quantity:contains(1)', + run: function () { + window.location.href = "/web/login"; + }, + }, + { + content: "Submit login", + trigger: '.oe_login_form', + run: function () { + $('.oe_login_form input[name="login"]').val("admin"); + $('.oe_login_form input[name="password"]').val("admin"); + $('.oe_login_form input[name="redirect"]').val("/"); + $('.oe_login_form').submit(); + }, + }, + // test when all combinations are impossible + { + content: "Archive all variants", + trigger: '#top_menu:contains("Mitchell Admin")', + run: function () { + rpc.query({ + model: 'product.product', + method: 'search', + args: [[['name', '=', "Bottle"]]], + }) + .then(function (productIds) { + return rpc.query({ + model: 'product.product', + method: 'write', + args: [productIds, {active: false}], + }); + }) + .then(function () { + window.location.href = '/web/session/logout?redirect=/shop?search=Bottle'; + }); + } + }, + { + content: "Check that there is no wishlist button from /shop", + extra_trigger: '.js_sale', + trigger: '.oe_product_cart:contains("Bottle"):not(:has(.o_add_wishlist))', + run: function () {}, + }, + { + content: "Click on product", + trigger: '.oe_product_cart a:contains("Bottle")', + }, + { + content: "Check that there is no wishlist button from /product", + trigger: '#product_detail:not(:has(.o_add_wishlist_dyn))', + run: function () {}, + }, ] ); diff --git a/addons/website_slides/controllers/main.py b/addons/website_slides/controllers/main.py index f8ebb91a70b..edb00cc0e7b 100644 --- a/addons/website_slides/controllers/main.py +++ b/addons/website_slides/controllers/main.py @@ -20,9 +20,9 @@ _logger = logging.getLogger(__name__) class WebsiteSlides(WebsiteProfile): - SLIDES_PER_PAGE = 12 - SLIDES_PER_ASIDE = 20 - SLIDES_PER_CATEGORY = 4 + _slides_per_page = 12 + _slides_per_aside = 20 + _slides_per_category = 4 _channel_order_by_criterion = { 'vote': 'total_votes desc', 'view': 'total_views desc', @@ -48,7 +48,7 @@ class WebsiteSlides(WebsiteProfile): try: slide.check_access_rights('read') slide.check_access_rule('read') - except: + except AccessError: return {'error': 'slide_access'} return {'slide': slide} @@ -63,9 +63,12 @@ class WebsiteSlides(WebsiteProfile): slide.action_set_viewed(quiz_attempts_inc=quiz_attempts_inc) return True - def _set_completed_slide(self, slide, quiz_attempts_inc=False): + def _set_completed_slide(self, slide): + # quiz use their specific mechanism to be marked as done + if slide.slide_type == 'quiz' or slide.question_ids: + raise werkzeug.exceptions.Forbidden(_("Slide with questions must be marked as done when submitting all good answers ")) if slide.website_published and slide.channel_id.is_member: - slide.action_set_completed(quiz_attempts_inc=quiz_attempts_inc) + slide.action_set_completed() return True def _get_slide_detail(self, slide): @@ -73,8 +76,8 @@ class WebsiteSlides(WebsiteProfile): if slide.channel_id.channel_type == 'documentation': related_domain = expression.AND([base_domain, [('category_id', '=', slide.category_id.id)]]) - most_viewed_slides = request.env['slide.slide'].search(base_domain, limit=self.SLIDES_PER_ASIDE, order='total_views desc') - related_slides = request.env['slide.slide'].search(related_domain, limit=self.SLIDES_PER_ASIDE) + most_viewed_slides = request.env['slide.slide'].search(base_domain, limit=self._slides_per_aside, order='total_views desc') + related_slides = request.env['slide.slide'].search(related_domain, limit=self._slides_per_aside) category_data = [] uncategorized_slides = request.env['slide.slide'] else: @@ -242,9 +245,8 @@ class WebsiteSlides(WebsiteProfile): else: users = None - return request.render('website_slides.courses_home', { - 'user': request.env.user, - 'is_public_user': request.website.is_public_user(), + values = self._prepare_user_values(**post) + values.update({ 'channels_my': channels_my, 'channels_popular': channels_popular, 'channels_newest': channels_newest, @@ -254,6 +256,8 @@ class WebsiteSlides(WebsiteProfile): 'challenges_done': challenges_done, }) + return request.render('website_slides.courses_home', values) + @http.route('/slides/all', type='http', auth="public", website=True) def slides_channel_all(self, slide_type=None, my=False, **post): """ Home page displaying a list of courses displayed according to some @@ -282,9 +286,8 @@ class WebsiteSlides(WebsiteProfile): tag_groups = request.env['slide.channel.tag.group'].search(['&', ('tag_ids', '!=', False), ('website_published', '=', True)]) search_tags = self._extract_channel_tag_search(**post) - return request.render('website_slides.courses_all', { - 'user': request.env.user, - 'is_public_user': request.website.is_public_user(), + values = self._prepare_user_values(**post) + values.update({ 'channels': channels, 'tag_groups': tag_groups, 'search_term': post.get('search'), @@ -294,6 +297,8 @@ class WebsiteSlides(WebsiteProfile): 'search_channel_tag_id': post.get('channel_tag_id'), }) + return request.render('website_slides.courses_all', values) + def _prepare_additional_channel_values(self, values, **kwargs): return values @@ -346,10 +351,10 @@ class WebsiteSlides(WebsiteProfile): pager_args['sorting'] = actual_sorting slide_count = request.env['slide.slide'].sudo().search_count(domain) - page_count = math.ceil(slide_count / self.SLIDES_PER_PAGE) + page_count = math.ceil(slide_count / self._slides_per_page) pager = request.website.pager(url=pager_url, total=slide_count, page=page, - step=self.SLIDES_PER_PAGE, url_args=pager_args, - scope=page_count if page_count < self.PAGER_MAX_PAGE else self.PAGER_MAX_PAGE) + step=self._slides_per_page, url_args=pager_args, + scope=page_count if page_count < self._pager_max_pages else self._pager_max_pages) values = { 'channel': channel, @@ -368,7 +373,6 @@ class WebsiteSlides(WebsiteProfile): 'user': request.env.user, 'pager': pager, 'is_public_user': request.website.is_public_user(), - 'is_slides_publisher': request.env.user.has_group('website.group_website_publisher'), } if not request.env.user._is_public(): last_message_values = request.env['mail.message'].search([ @@ -380,12 +384,15 @@ class WebsiteSlides(WebsiteProfile): ], order='write_date DESC', limit=1).read(['body', 'rating_value']) last_message_data = last_message_values[0] if last_message_values else {} values.update({ - 'message_post_hash': channel._sign_token(request.env.user.partner_id.id), - 'message_post_pid': request.env.user.partner_id.id, 'last_message_id': last_message_data.get('id'), 'last_message': tools.html2plaintext(last_message_data.get('body', '')), 'last_rating_value': last_message_data.get('rating_value'), }) + if channel.can_review: + values.update({ + 'message_post_hash': channel._sign_token(request.env.user.partner_id.id), + 'message_post_pid': request.env.user.partner_id.id, + }) # fetch slides and handle uncategorized slides; done as sudo because we want to display all # of them but unreachable ones won't be clickable (+ slide controller will crash anyway) @@ -394,13 +401,12 @@ class WebsiteSlides(WebsiteProfile): values['slide_promoted'] = request.env['slide.slide'].sudo().search(domain, limit=1, order=order) values['category_data'] = channel._get_categorized_slides( domain, order, - force_void=True, - limit=self.SLIDES_PER_CATEGORY if channel.channel_type == 'documentation' else False, + force_void=not category, + limit=False if channel.channel_type != 'documentation' else self._slides_per_page if category else self._slides_per_category, offset=pager['offset']) values['channel_progress'] = self._get_channel_progress(channel, include_quiz=True) values = self._prepare_additional_channel_values(values, **kw) - return request.render('website_slides.course_main', values) # SLIDE.CHANNEL UTILS @@ -487,7 +493,7 @@ class WebsiteSlides(WebsiteProfile): # sidebar: update with user channel progress values['channel_progress'] = self._get_channel_progress(slide.channel_id, include_quiz=True) - if 'fullscreen' in kwargs: + if kwargs.get('fullscreen') == '1': return request.render("website_slides.slide_fullscreen", values) return request.render("website_slides.slide_main", values) @@ -571,7 +577,18 @@ class WebsiteSlides(WebsiteProfile): ]) if (upvote and slide_partners.vote == 1) or (not upvote and slide_partners.vote == -1): return {'error': 'vote_done'} - slide = request.env['slide.slide'].browse(int(slide_id)) + # check slide access + fetch_res = self._fetch_slide(slide_id) + if fetch_res.get('error'): + return fetch_res + # check slide operation + slide = fetch_res['slide'] + if not slide.channel_id.is_member: + return {'error': 'channel_membership_required'} + if not slide.channel_id.allow_comment: + return {'error': 'channel_comment_disabled'} + if not slide.channel_id.can_vote: + return {'error': 'channel_karma_required'} if upvote: slide.action_like() else: @@ -607,6 +624,7 @@ class WebsiteSlides(WebsiteProfile): return fetch_res slide = fetch_res['slide'] quiz_info = self._get_slide_quiz_info(slide) + slide_completed = slide.user_membership_id.sudo().completed return { 'questions': [{ 'id': question.id, @@ -614,7 +632,7 @@ class WebsiteSlides(WebsiteProfile): 'answers': [{ 'id': answer.id, 'text_value': answer.text_value, - 'is_correct': answer.is_correct, + 'is_correct': answer.is_correct if slide_completed else None } for answer in question.answer_ids], } for question in slide.question_ids], 'quizAttemptsCount': quiz_info['quiz_attempts_count'], @@ -622,14 +640,16 @@ class WebsiteSlides(WebsiteProfile): 'quizKarmaWon': quiz_info['quiz_karma_won'], } - @http.route('/slides/slide/quiz/submit', type="json", auth="user", website=True) + @http.route('/slides/slide/quiz/submit', type="json", auth="public", website=True) def slide_quiz_submit(self, slide_id, answer_ids): + if request.website.is_public_user(): + return {'error': 'public_user'} fetch_res = self._fetch_slide(slide_id) if fetch_res.get('error'): return fetch_res slide = fetch_res['slide'] - if slide.user_membership_id.completed: + if slide.user_membership_id.sudo().completed: return {'error': 'slide_quiz_done'} all_questions = request.env['slide.question'].sudo().search([('slide_id', '=', slide.id)]) @@ -647,6 +667,7 @@ class WebsiteSlides(WebsiteProfile): rank_progress = {} if not user_bad_answers: slide._action_set_quiz_done() + slide.action_set_completed() lower_bound = request.env.user.rank_id.karma_min upper_bound = request.env.user.next_rank_id.karma_min rank_progress = { @@ -659,11 +680,12 @@ class WebsiteSlides(WebsiteProfile): return { 'goodAnswers': user_good_answers.ids, 'badAnswers': user_bad_answers.ids, - 'completed': not user_bad_answers, + 'completed': slide.user_membership_id.sudo().completed, + 'channel_completion': slide.channel_id.completion, 'quizKarmaWon': quiz_info['quiz_karma_won'], 'quizKarmaGain': quiz_info['quiz_karma_gain'], 'quizAttemptsCount': quiz_info['quiz_attempts_count'], - 'rankProgress': rank_progress + 'rankProgress': rank_progress, } # -------------------------------------------------- diff --git a/addons/website_slides/i18n/website_slides.pot b/addons/website_slides/i18n/website_slides.pot index 9e7f2a55a79..b44163d15ad 100644 --- a/addons/website_slides/i18n/website_slides.pot +++ b/addons/website_slides/i18n/website_slides.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1\n" +"Project-Id-Version: Odoo Server saas~12.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 08:00+0000\n" -"PO-Revision-Date: 2019-01-16 08:00+0000\n" +"POT-Creation-Date: 2019-03-20 13:51+0000\n" +"PO-Revision-Date: 2019-03-20 13:51+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,13 +16,30 @@ msgstr "" "Plural-Forms: \n" #. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__total_time +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__completion_time +msgid "# Hours" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__total_slides +msgid "# Slides" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__total_views #: model:ir.model.fields,field_description:website_slides.field_slide_embed__count_views msgid "# Views" msgstr "" #. module: website_slides -#: model:ir.model.fields,field_description:website_slides.field_slide_slide__embed_views -msgid "# of Embedded Views" +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__total_votes +msgid "# Votes" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__public_views +msgid "# of Public Views" msgstr "" #. module: website_slides @@ -36,33 +53,71 @@ msgid "${user.name} shared a ${object.slide_type} with you!" msgstr "" #. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/xml/slide_quiz.xml:34 +#, python-format +msgid "×" +msgstr "" + +#. module: website_slides #: model_terms:ir.ui.view,arch_db:website_slides.view_slide_channel_form msgid "(Un)archiving a channel automatically (un)archives its slides. Do you want to proceed?" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slides_search -msgid ". Please try again with different keywords." +#: model:ir.model.fields,help:website_slides.field_slide_channel__image +#: model:ir.model.fields,help:website_slides.field_slide_slide__image +msgid "1024px * 1024px" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.embed_slide -msgid "<b class=\"oe_slide_js_embed_option_link\" data-slide-option-id=\"#slide_email\"><i class=\"fa fa-envelope\"/> Email</b>" +#: model:ir.model.fields,help:website_slides.field_slide_channel__image_medium +#: model:ir.model.fields,help:website_slides.field_slide_slide__image_medium +msgid "128px * 128px" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.embed_slide -msgid "<b class=\"oe_slide_js_embed_option_link\" data-slide-option-id=\"#slide_embed\"><i class=\"fa fa-code\"/> Embed</b>" +#: model:ir.model.fields,help:website_slides.field_slide_channel__image_large +#: model:ir.model.fields,help:website_slides.field_slide_slide__image_large +msgid "256px * 256px" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.embed_slide -msgid "<b class=\"oe_slide_js_embed_option_link\" data-slide-option-id=\"#slide_share\"><i class=\"fa fa-share-alt\"/> Share</b>" +#: model:slide.slide,name:website_slides.slide_slide_demo_1_5 +msgid "3 Main Methodologies" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.home -msgid "<b>Share:</b>" +#: model_terms:ir.ui.view,arch_db:website_slides.slides_home_user_profile_small +msgid "50%" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,help:website_slides.field_slide_channel__image_small +#: model:ir.model.fields,help:website_slides.field_slide_slide__image_small +msgid "64px * 64px" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slide_fullscreen_sidebar_category +msgid "<b>Uncategorized</b>" +msgstr "" + +#. module: website_slides +#: model:mail.template,body_html:website_slides.mail_template_slide_channel_invite +msgid "<div style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n" +" <p style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n" +" Dear ${object.partner_id.name or 'participant'}<br/><br/>\n" +" You have been invited to join a new course: ${object.channel_id.name}.\n" +" <div style=\"margin: 16px 0px 16px 0px;\">\n" +" <a href=\"${(object.channel_id.website_url) | safe}\" style=\"background-color: #875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: #fff; border-radius: 5px; font-size:13px;\">\n" +" Click here to start the course.\n" +" </a>\n" +" </div>\n" +" Enjoy this exclusive content !\n" +" </p>\n" +"</div>\n" +" " msgstr "" #. module: website_slides @@ -104,44 +159,59 @@ msgid "<div style=\"margin: 0px; padding: 0px;\">\n" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view +#: model_terms:ir.ui.view,arch_db:website_slides.slide_content_detailed msgid "<i class=\"fa fa-align-justify\"/> Transcript" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.home -msgid "<i class=\"fa fa-arrow-right\"/> See all" +#: model_terms:ir.ui.view,arch_db:website_slides.slide_content_detailed +msgid "<i class=\"fa fa-bar-chart\"/> Statistics" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slide_fullscreen +msgid "<i class=\"fa fa-bars\"/><span class=\"d-none d-md-inline-block ml-1\">Lessons</span>" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view -msgid "<i class=\"fa fa-bar-chart\"/> Statistics" +#: model_terms:ir.ui.view,arch_db:website_slides.slide_content_detailed +msgid "<i class=\"fa fa-chevron-left mr-2\"/> Prev" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view -msgid "<i class=\"fa fa-circle-o\"/> Website Views" +#: model_terms:ir.ui.view,arch_db:website_slides.course_sidebar +msgid "<i class=\"fa fa-chevron-right\"/>\n" +" <span class=\"cta-title text_small_caps\">Already member</span>" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.home -#: model_terms:ir.ui.view,arch_db:website_slides.slides_channel_header +#: model_terms:ir.ui.view,arch_db:website_slides.embed_slide +msgid "<i class=\"fa fa-circle-o-notch fa-spin mr-2\"/><b>Loading...</b>" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.course_sidebar msgid "<i class=\"fa fa-cloud-upload\"/> Upload" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view -msgid "<i class=\"fa fa-code\"/> Embedded Views" +#: model_terms:ir.ui.view,arch_db:website_slides.embed_slide +msgid "<i class=\"fa fa-code\"/> Embed" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view +#: model_terms:ir.ui.view,arch_db:website_slides.slide_content_detailed msgid "<i class=\"fa fa-comments-o\"/> Comments" msgstr "" #. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slide_content_detailed +msgid "<i class=\"fa fa-desktop mr-2\"/> Fullscreen" +msgstr "" + +#. module: website_slides #: model_terms:ir.ui.view,arch_db:website_slides.embed_slide -msgid "<i class=\"fa fa-download fa-2x\" role=\"img\" aria-label=\"Download\"/>" +msgid "<i class=\"fa fa-envelope\"/> Email" msgstr "" #. module: website_slides @@ -150,97 +220,137 @@ msgid "<i class=\"fa fa-envelope-o\"/> Send Email" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.embed_slide +#: model_terms:ir.ui.view,arch_db:website_slides.courses_all +msgid "<i class=\"fa fa-eraser\"/> Clear filters" +msgstr "" + +#. module: website_slides #: model_terms:ir.ui.view,arch_db:website_slides.embed_slide_forbidden -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view -msgid "<i class=\"fa fa-exclamation-triangle\" role=\"img\" aria-label=\"Attention\" title=\"Attention\"/> This" +msgid "<i class=\"fa fa-exclamation-triangle\" role=\"img\" aria-label=\"Attention\" title=\"Attention\"/> This document is private." +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.courses_home +msgid "<i class=\"fa fa-file mr-1\"/>My courses" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slide_fullscreen_sidebar_category +msgid "<i class=\"fa fa-flag-checkered text-warning mr-2\"/>Quiz" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.course_slides_list +msgid "<i class=\"fa fa-folder-o\"/> Add Section" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.courses_home +msgid "<i class=\"fa fa-graduation-cap mr-1\"/>All courses" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view +#: model_terms:ir.ui.view,arch_db:website_slides.slide_content_detailed msgid "<i class=\"fa fa-home\"/> About" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slides_channel_header -msgid "<i class=\"fa fa-home\"/> Home" +#: model_terms:ir.ui.view,arch_db:website_slides.course_main +msgid "<i class=\"fa fa-home\"/> Course" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view +#: model_terms:ir.ui.view,arch_db:website_slides.slide_content_detailed msgid "<i class=\"fa fa-info-circle\"/>\n" -" The social sharing module will be unlocked when a moderator will allow your publication." +" The social sharing module will be unlocked when a moderator will allow your publication." msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view -msgid "<i class=\"fa fa-play\"/> Total Views" +#: model_terms:ir.ui.view,arch_db:website_slides.slide_fullscreen +msgid "<i class=\"fa fa-pencil\"/><span class=\"d-none d-md-inline-block ml-1\">Write a review</span>" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view -msgid "<i class=\"fa fa-share-alt\"/> Share" +#: model_terms:ir.ui.view,arch_db:website_slides.course_slides_list +msgid "<i class=\"fa fa-plus ml-2\"/> Add content" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.course_slides_list +msgid "<i class=\"fa fa-plus\"/> Add Content" msgstr "" #. module: website_slides #: model_terms:ir.ui.view,arch_db:website_slides.embed_slide -msgid "<i class=\"fa fa-spinner fa-spin\"/> Loading ..." +#: model_terms:ir.ui.view,arch_db:website_slides.slide_content_detailed +msgid "<i class=\"fa fa-share-alt\"/> Share" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view -msgid "<i class=\"fa fa-thumbs-down fa-1x\" role=\"img\" aria-label=\"Dislikes\" title=\"Dislikes\"/>" +#: model_terms:ir.ui.view,arch_db:website_slides.course_sidebar +msgid "<i class=\"fa fa-share-square\"/> Share" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slide_fullscreen +msgid "<i class=\"fa fa-sign-out d-md-none\"/><span class=\"d-none d-md-inline-block ml-1\">Back to course</span>" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view -msgid "<i class=\"fa fa-thumbs-down\"/> Dislikes" +#: model_terms:ir.ui.view,arch_db:website_slides.lesson_card +#: model_terms:ir.ui.view,arch_db:website_slides.slide_content_detailed +msgid "<i class=\"fa fa-thumbs-down fa-1x\" role=\"img\" aria-label=\"Dislikes\" title=\"Dislikes\"/>" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view +#: model_terms:ir.ui.view,arch_db:website_slides.lesson_card +#: model_terms:ir.ui.view,arch_db:website_slides.slide_content_detailed msgid "<i class=\"fa fa-thumbs-up fa-1x\" role=\"img\" aria-label=\"Likes\" title=\"Likes\"/>" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view -msgid "<i class=\"fa fa-thumbs-up\"/> Likes" +#: model_terms:ir.ui.view,arch_db:website_slides.slide_aside_training_category +msgid "<small><i class=\"fa fa-flag-o text-warning\"/> Quiz</small>" msgstr "" #. module: website_slides -#: code:addons/website_slides/models/slide_channel.py:93 -#, python-format -msgid "<p>This channel is private and its content is restricted to some users.</p>" +#: model_terms:ir.ui.view,arch_db:website_slides.lesson_content_quiz +msgid "<span aria-hidden=\"true\">&times;</span>" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.lesson_card +msgid "<span class=\"badge badge-danger\">Unpublished</span>" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.lesson_card +msgid "<span class=\"badge badge-info\">Free preview</span>" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view -msgid "<span class=\"badge badge-pill\" id=\"facebook-badge\">0</span>\n" -" <i class=\"fa fa-facebook-square\"/> Facebook" +#: model_terms:ir.ui.view,arch_db:website_slides.course_card +msgid "<span class=\"badge badge-pill badge-success pull-right py-1 px-2\"><i class=\"fa fa-check\"/> Completed</span>" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view -msgid "<span class=\"badge badge-pill\" id=\"google-badge\">0</span>\n" -" <i class=\"fa fa-google-plus-square\"/> Google+" +#: model_terms:ir.ui.view,arch_db:website_slides.lesson_card +msgid "<span class=\"badge badge-pill badge-success\"><i class=\"fa fa-check\"/> Completed</span>" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view -msgid "<span class=\"badge badge-pill\" id=\"linkedin-badge\">0</span>\n" -" <i class=\"fa fa-linkedin-square\"/> LinkedIn" +#: model_terms:ir.ui.view,arch_db:website_slides.course_sidebar +msgid "<span class=\"col-5\">Last Update</span>" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view -msgid "<span class=\"badge badge-pill\" id=\"total-share\">0</span>\n" -" <i class=\"fa fa-share-alt\"/> Social Shares" +#: model_terms:ir.ui.view,arch_db:website_slides.course_sidebar +msgid "<span class=\"col-5\">Members</span>" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view -msgid "<span class=\"badge badge-pill\" id=\"twitter-badge\">0</span>\n" -" <i class=\"fa fa-twitter-square\"/> Twitter" +#: model_terms:ir.ui.view,arch_db:website_slides.course_sidebar +msgid "<span class=\"cta-title text_small_caps\">Private Course</span>" msgstr "" #. module: website_slides @@ -250,6 +360,38 @@ msgid "<span class=\"fa fa-arrow-right\"/>\n" msgstr "" #. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slide_content_detailed +msgid "<span class=\"font-weight-bold mb-3 mt-3\">Actions</span>" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slide_content_detailed +msgid "<span class=\"font-weight-bold mb-3 mt-3\">Share Count</span>\n" +" <span class=\"d-flex pl-3\">\n" +" <span class=\"badge badge-pill\" id=\"facebook-badge\">0</span>\n" +" <span class=\"mr-5 ml-auto\">Facebook</span>\n" +" </span>\n" +" <span class=\"d-flex pl-3\">\n" +" <span class=\"badge badge-pill\" id=\"twitter-badge\">0</span>\n" +" <span class=\"mr-5 ml-auto\">Twitter</span>\n" +" </span>\n" +" <span class=\"d-flex pl-3\">\n" +" <span class=\"badge badge-pill\" id=\"linkedin-badge\">0</span>\n" +" <span class=\"mr-5 ml-auto\">LinkedIn</span>\n" +" </span>" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slide_content_detailed +msgid "<span class=\"font-weight-bold mb-3 mt-3\">Views</span>" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slides_home_user_profile_small +msgid "<span class=\"font-weight-bold text-muted mr-2\">Current rank:</span>" +msgstr "" + +#. module: website_slides #: model_terms:ir.ui.view,arch_db:website_slides.slide_social_email msgid "<span class=\"form-text\">Send presentation through email</span>" msgstr "" @@ -260,33 +402,114 @@ msgid "<span class=\"form-text\">Use permanent link to share in social media</sp msgstr "" #. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slide_content_detailed +msgid "<span class=\"mr-5 ml-auto\">Comments</span>" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slide_content_detailed +msgid "<span class=\"mr-5 ml-auto\">Dislikes</span>" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slide_content_detailed +msgid "<span class=\"mr-5 ml-auto\">Likes</span>" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slide_content_detailed +msgid "<span class=\"mr-5 ml-auto\">Members Views</span>" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slide_content_detailed +msgid "<span class=\"mr-5 ml-auto\">Public Views</span>" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slide_content_detailed +msgid "<span class=\"mr-5 ml-auto\">Total Views</span>" +msgstr "" + +#. module: website_slides #: model_terms:ir.ui.view,arch_db:website_slides.res_config_settings_view_form msgid "<span class=\"o_form_label\">Slides</span>\n" " <span class=\"fa fa-lg fa-globe\" title=\"Values set here are website-specific.\" groups=\"website.group_multi_website\"/>" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view -msgid "<span class=\"text-muted small\">views</span>" +#: model_terms:ir.ui.view,arch_db:website_slides.slide_content_detailed +msgid "<span class=\"text-muted font-weight-bold mr-3\">Rating</span>" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slides_channel_header -msgid "<span class=\"text-muted\">Sort by:</span>" +#: model_terms:ir.ui.view,arch_db:website_slides.slide_aside_training_category +msgid "<span class=\"text-uppercase\">Uncategorized</span>" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.embed_slide -msgid "<span id=\"first\" class=\"ml-2 mr-2\" title=\"First slide\" role=\"img\" aria-label=\"First slide\">\n" -" <i class=\"fa fa-step-backward fa-2x\"/>\n" -" </span>" +#: model_terms:ir.ui.view,arch_db:website_slides.course_sidebar +msgid "<span>&times;</span>" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.embed_slide -msgid "<span id=\"fullscreen\" title=\"View fullscreen\" role=\"img\" aria-label=\"Fullscreen\">\n" -" <i class=\"fa fa-arrows-alt fa-2x\"/>\n" -" </span>" +#: model_terms:ir.ui.view,arch_db:website_slides.course_slides_list +msgid "<span>Empty category</span>" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.course_slides_list +msgid "<span>Uncategorized</span>" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slide_content_detailed +msgid "<span>XP</span>" +msgstr "" + +#. module: website_slides +#: model:slide.slide,name:website_slides.slide_slide_demo_2_1 +msgid "A Mighty Forest from Ages" +msgstr "" + +#. module: website_slides +#: model:slide.slide,name:website_slides.slide_slide_demo_1_4 +msgid "A little chat with Harry Potted" +msgstr "" + +#. module: website_slides +#: model:slide.channel,description:website_slides.slide_channel_demo_2_gard2 +msgid "A lot of nice documentation: trees, wood, gardens. A gold mine for references." +msgstr "" + +#. module: website_slides +#: code:addons/website_slides/models/slide_question.py:26 +#, python-format +msgid "A question can only have one good answer" +msgstr "" + +#. module: website_slides +#: code:addons/website_slides/models/slide_question.py:32 +#, python-format +msgid "A question must at least have one good answer" +msgstr "" + +#. module: website_slides +#: code:addons/website_slides/models/slide_question.py:38 +#, python-format +msgid "A question must at least have two possible answers" +msgstr "" + +#. module: website_slides +#: sql_constraint:slide.slide:0 +msgid "A slide is either filled with a document url or HTML content. Not both." +msgstr "" + +#. module: website_slides +#: model:slide.slide,description:website_slides.slide_slide_demo_0_0 +#: model:slide.slide,description:website_slides.slide_slide_demo_1_5 +#: model:slide.slide,description:website_slides.slide_slide_demo_2_0 +msgid "A summary of know-how: how and what." msgstr "" #. module: website_slides @@ -300,14 +523,20 @@ msgid "API Key" msgstr "" #. module: website_slides -#: model:ir.model.fields,field_description:website_slides.field_slide_channel__message_needaction -#: model:ir.model.fields,field_description:website_slides.field_slide_slide__message_needaction -msgid "Action Needed" +#: model_terms:slide.slide,html_content:website_slides.slide_slide_demo_1_4 +#: model_terms:slide.slide,html_content:website_slides.slide_slide_demo_2_1 +msgid "About us" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view -msgid "Actions" +#: model:ir.model,name:website_slides.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__message_needaction +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__message_needaction +msgid "Action Needed" msgstr "" #. module: website_slides @@ -317,40 +546,200 @@ msgid "Active" msgstr "" #. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__karma_slide_comment +msgid "Add a comment" +msgstr "" + +#. module: website_slides #: model_terms:ir.actions.act_window,help:website_slides.action_slides_slides msgid "Add a new slide" msgstr "" #. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__karma_review +msgid "Add a review" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/js/slides_category_add.js:17 +#, python-format +msgid "Add a section" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slide_channel_invite_view_form +msgid "Add existing contacts..." +msgstr "" + +#. module: website_slides +#: model:slide.channel.tag,name:website_slides.slide_channel_tag_level_advanced +msgid "Advanced" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.courses_all +msgid "All Courses" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,help:website_slides.field_slide_channel__partner_ids +msgid "All members of the channel." +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/js/slides_course_quiz.js:86 +#, python-format +msgid "All questions must be answered !" +msgstr "" + +#. module: website_slides +#: model:slide.channel,description:website_slides.slide_channel_demo_5_furn2 +msgid "All you need to know about furniture creation." +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__allow_comment +msgid "Allow rating on Course" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/xml/website_slides_channel.xml:45 +#, python-format +msgid "Allow review on content" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/xml/website_slides_upload.xml:63 +#, python-format +msgid "Always visible" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/xml/slide_quiz.xml:69 +#, python-format +msgid "Amazing!" +msgstr "" + +#. module: website_slides +#: model:slide.answer,text_value:website_slides.slide_slide_demo_2_0_question_1_2 +msgid "And also bananas" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_answer__text_value +#: model:ir.model.fields,field_description:website_slides.field_slide_question__answer_ids +msgid "Answer" +msgstr "" + +#. module: website_slides +#: model:ir.model,name:website_slides.model_slide_answer +msgid "Answer for a slide question" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_gamification_challenge__category +msgid "Appears in" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,help:website_slides.field_slide_channel__visibility +msgid "Applied directly as ACLs. Allow to hide channels and their content for non members." +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/js/slides_slide_archive.js:20 +#, python-format +msgid "Archive" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/js/slides_slide_archive.js:17 +#, python-format +msgid "Archive Slide" +msgstr "" + +#. module: website_slides #: model_terms:ir.ui.view,arch_db:website_slides.slide_channel_view_search #: model_terms:ir.ui.view,arch_db:website_slides.view_slide_slide_search msgid "Archived" msgstr "" #. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/xml/slide_management.xml:5 +#, python-format +msgid "Are you sure you want to archive this slide ?" +msgstr "" + +#. module: website_slides #: model:ir.model.fields,field_description:website_slides.field_slide_channel__message_attachment_count #: model:ir.model.fields,field_description:website_slides.field_slide_slide__message_attachment_count msgid "Attachment Count" msgstr "" #. module: website_slides -#: selection:slide.slide,download_security:0 -msgid "Authenticated Users Only" +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_invite__attachment_ids +msgid "Attachments" msgstr "" #. module: website_slides -#: model:slide.slide,name:website_slides.slide_5 -msgid "Awesome Timesheet by Odoo" +#: model:ir.actions.act_window,name:website_slides.slide_channel_partner_action +#: model_terms:ir.ui.view,arch_db:website_slides.slide_channel_partner_view_tree +#: model_terms:ir.ui.view,arch_db:website_slides.view_slide_channel_form +msgid "Attendees" msgstr "" #. module: website_slides -#: model:slide.tag,name:website_slides.tag1 -msgid "CMS" +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__members_count +msgid "Attendees count" msgstr "" #. module: website_slides -#: model:ir.model.fields,field_description:website_slides.field_slide_channel__can_see -msgid "Can See" +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_invite__author_id +msgid "Author" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__enroll_group_ids +msgid "Auto Enroll Groups" +msgstr "" + +#. module: website_slides +#: model:slide.channel.tag,name:website_slides.slide_channel_tag_level_basic +msgid "Basic" +msgstr "" + +#. module: website_slides +#: model:slide.channel,name:website_slides.slide_channel_demo_5_furn2 +msgid "Basics of Furniture Creation" +msgstr "" + +#. module: website_slides +#: model:slide.channel,name:website_slides.channel_public +msgid "Basics of Gardening" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__image +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__image +msgid "Big-sized Image" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__can_comment +msgid "Can Comment" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__can_review +msgid "Can Review" msgstr "" #. module: website_slides @@ -359,13 +748,49 @@ msgid "Can Upload" msgstr "" #. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__can_vote +msgid "Can Vote" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__can_image_be_zoomed +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__can_image_be_zoomed +msgid "Can image be zoomed" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__can_image_raw_be_zoomed +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__can_image_raw_be_zoomed +msgid "Can image raw be zoomed" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__can_publish +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__can_publish +msgid "Can publish" +msgstr "" + +#. module: website_slides #. openerp-web -#: code:addons/website_slides/static/src/js/website_slides.editor.js:55 +#: code:addons/website_slides/static/src/js/slides_slide_archive.js:24 +#: code:addons/website_slides/static/src/js/slides_upload.js:181 +#: model_terms:ir.ui.view,arch_db:website_slides.slide_channel_invite_view_form #, python-format msgid "Cancel" msgstr "" #. module: website_slides +#: model:slide.channel.tag,name:website_slides.slide_channel_tag_role_carpenter +msgid "Carpenter" +msgstr "" + +#. module: website_slides +#: model_terms:slide.slide,html_content:website_slides.slide_slide_demo_1_4 +#: model_terms:slide.slide,html_content:website_slides.slide_slide_demo_2_1 +msgid "Catchy Headline" +msgstr "" + +#. module: website_slides #: model:ir.actions.act_window,name:website_slides.action_ir_slide_category #: model:ir.model.fields,field_description:website_slides.field_slide_channel__category_ids #: model:ir.ui.menu,name:website_slides.menu_action_ir_slide_category_global @@ -375,8 +800,8 @@ msgstr "" #. module: website_slides #. openerp-web -#: code:addons/website_slides/static/src/js/slides_upload.js:149 -#: code:addons/website_slides/static/src/xml/website_slides.xml:54 +#: code:addons/website_slides/static/src/js/slides_upload.js:77 +#: code:addons/website_slides/static/src/xml/website_slides_upload.xml:51 #: model:ir.model.fields,field_description:website_slides.field_slide_slide__category_id #: model_terms:ir.ui.view,arch_db:website_slides.view_slide_slide_search #: model_terms:ir.ui.view,arch_db:website_slides.view_slides_category_form @@ -386,60 +811,188 @@ msgid "Category" msgstr "" #. module: website_slides -#. openerp-web -#: code:addons/website_slides/static/src/xml/website_slides.xml:81 +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__category_sequence +msgid "Category sequence" +msgstr "" + +#. module: website_slides +#: model:slide.channel.tag,name:website_slides.slide_channel_tag_other_1 +#: selection:slide.slide,slide_type:0 +msgid "Certification" +msgstr "" + +#. module: website_slides +#: model:gamification.badge,name:website_slides.badge_data_certification +#: model:gamification.challenge.line,name:website_slides.badge_data_certification_challenge_line_0 +#: model:gamification.goal.definition,name:website_slides.badge_data_certification_goal +msgid "Certified Knowledge" +msgstr "" + +#. module: website_slides #: model:ir.model.fields,field_description:website_slides.field_slide_category__channel_id +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_partner__channel_id #: model:ir.model.fields,field_description:website_slides.field_slide_slide__channel_id -#: model_terms:ir.ui.view,arch_db:website_slides.slide_channel_view_search -#: model_terms:ir.ui.view,arch_db:website_slides.view_slide_channel_tree +#: model:ir.model.fields,field_description:website_slides.field_slide_slide_partner__channel_id +#: model_terms:ir.ui.view,arch_db:website_slides.slide_channel_partner_view_tree +#: model_terms:ir.ui.view,arch_db:website_slides.slide_channel_view_tree #: model_terms:ir.ui.view,arch_db:website_slides.view_slide_slide_search -#, python-format msgid "Channel" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view -msgid "Channel #{slide.channel_id.name}" +#: model:ir.model,name:website_slides.model_slide_channel_partner +msgid "Channel / Partners (Members)" msgstr "" #. module: website_slides -#: model:ir.model.fields,field_description:website_slides.field_slide_channel__group_ids -msgid "Channel Groups" +#: model:ir.model,name:website_slides.model_slide_channel_invite +msgid "Channel Invitation Wizard" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.home -msgid "Channel Settings" +#: model_terms:ir.ui.view,arch_db:website_slides.slide_channel_partner_view_search +msgid "Channel Member" msgstr "" #. module: website_slides -#. openerp-web -#: code:addons/website_slides/static/src/js/slides_upload.js:405 -#, python-format -msgid "Channel contains the given title, please change before Save or Publish." +#: model_terms:ir.ui.view,arch_db:website_slides.slide_channel_tag_view_form +msgid "Channel Tag" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.view_slide_channel_form -msgid "Channel visibility" +#: model_terms:ir.ui.view,arch_db:website_slides.slide_channel_tag_group_view_form +msgid "Channel Tag Group" +msgstr "" + +#. module: website_slides +#: model:ir.actions.act_window,name:website_slides.slide_channel_tag_group_action +#: model:ir.ui.menu,name:website_slides.slide_channel_tag_group_menu +#: model_terms:ir.ui.view,arch_db:website_slides.slide_channel_tag_group_view_search +#: model_terms:ir.ui.view,arch_db:website_slides.slide_channel_tag_group_view_tree +msgid "Channel Tag Groups" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.channels -msgid "Channel without promoted slide" +#: model:ir.actions.act_window,name:website_slides.slide_channel_tag_action +#: model:ir.ui.menu,name:website_slides.slide_channel_tag_menu +#: model_terms:ir.ui.view,arch_db:website_slides.slide_channel_tag_view_search +#: model_terms:ir.ui.view,arch_db:website_slides.slide_channel_tag_view_tree +msgid "Channel Tags" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,help:website_slides.field_slide_channel_partner__completed +msgid "Channel validated, even if slides / lessons are added once done." +msgstr "" + +#. module: website_slides +#: model:ir.model,name:website_slides.model_slide_channel_tag +#: model:ir.model,name:website_slides.model_slide_channel_tag_group +msgid "Channel/Course tags" msgstr "" #. module: website_slides #: model:ir.actions.act_url,name:website_slides.action_open_channels #: model:ir.actions.act_window,name:website_slides.action_slide_channels +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_tag__channel_ids #: model:ir.ui.menu,name:website_slides.menu_action_slide_channels_global #: model_terms:ir.ui.view,arch_db:website_slides.view_slide_channel_form msgid "Channels" msgstr "" #. module: website_slides -#: model:slide.slide,name:website_slides.slide_10 -msgid "Company Culture" +#: model:slide.tag,name:website_slides.slide_tag_demo_cheatsheet +msgid "CheatSheet" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/xml/slide_quiz.xml:50 +#, python-format +msgid "Check answers" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/xml/slide_quiz.xml:50 +#, python-format +msgid "Check your answers" +msgstr "" + +#. module: website_slides +#: model:slide.channel,name:website_slides.slide_channel_demo_3_furn0 +msgid "Choose your wood !" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.courses_all +msgid "Clear filters" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.course_sidebar +#: model_terms:ir.ui.view,arch_db:website_slides.lesson_content_quiz +msgid "Close" +msgstr "" + +#. module: website_slides +#: model:slide.tag,name:website_slides.slide_tag_demo_colorful +msgid "Colorful" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.view_slide_channel_form +msgid "Communication" +msgstr "" + +#. module: website_slides +#: model:gamification.badge,name:website_slides.badge_data_karma +#: model:gamification.challenge.line,name:website_slides.badge_data_karma_challenge_line_0 +#: model:gamification.goal.definition,name:website_slides.badge_data_karma_goal +msgid "Community hero" +msgstr "" + +#. module: website_slides +#: model:gamification.badge,description:website_slides.badge_data_course +#: model:gamification.challenge,name:website_slides.badge_data_course_challenge +msgid "Complete a course" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.courses_home +msgid "Complete latest courses" +msgstr "" + +#. module: website_slides +#: model:gamification.badge,description:website_slides.badge_data_profile +#: model:gamification.challenge,name:website_slides.badge_data_profile_challenge +msgid "Complete your profile" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_slide_partner__completed +msgid "Completed" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.user_profile_content +msgid "Completed Courses" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__completion +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_partner__completion +msgid "Completion" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slide_channel_invite_view_form +msgid "Compose Email" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,help:website_slides.field_slide_channel__enroll +msgid "Condition to enroll: everyone, on invite, on payment (sale bridge)." msgstr "" #. module: website_slides @@ -448,32 +1001,108 @@ msgid "Config Settings" msgstr "" #. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slide_channel_partner_view_tree +msgid "Contact" +msgstr "" + +#. module: website_slides +#: model_terms:slide.slide,html_content:website_slides.slide_slide_demo_1_4 +#: model_terms:slide.slide,html_content:website_slides.slide_slide_demo_2_1 +msgid "Contact us" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.course_sidebar +msgid "Contact website administrator." +msgstr "" + +#. module: website_slides #: model:ir.model.fields,field_description:website_slides.field_slide_slide__datas msgid "Content" msgstr "" #. module: website_slides #. openerp-web -#: code:addons/website_slides/static/src/xml/website_slides.xml:20 +#: code:addons/website_slides/static/src/xml/website_slides_upload.xml:80 +#: code:addons/website_slides/static/src/xml/website_slides_upload.xml:110 +#: code:addons/website_slides/static/src/xml/website_slides_upload.xml:137 +#: code:addons/website_slides/static/src/xml/website_slides_upload.xml:184 #, python-format msgid "Content Preview" msgstr "" #. module: website_slides -#: code:addons/website_slides/controllers/main.py:264 +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_invite__body +msgid "Contents" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/xml/slide_quiz.xml:58 +#, python-format +msgid "Continue" +msgstr "" + +#. module: website_slides +#: code:addons/website_slides/controllers/main.py:741 #, python-format msgid "Could not fetch data from url. Document or access right not available.\n" "Here is the received response: %s" msgstr "" #. module: website_slides -#: code:addons/website_slides/models/slide_slide.py:128 +#: code:addons/website_slides/models/slide_slide.py:237 #, python-format msgid "Could not fetch data from url. Document or access right not available:\n" "%s" msgstr "" #. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slide_channel_view_search +msgid "Course" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slide_aside_training +msgid "Course content" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__karma_gen_channel_finish +msgid "Course finished" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__karma_gen_channel_rank +msgid "Course ranked" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__channel_type +msgid "Course type" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slide_channel_view_search +#: model:website.menu,name:website_slides.website_menu_slides +msgid "Courses" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/xml/website_slides_upload.xml:118 +#, python-format +msgid "Cover Image File" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/js/website_slides.editor.js:25 +#, python-format +msgid "Create" +msgstr "" + +#. module: website_slides #: model_terms:ir.actions.act_window,help:website_slides.action_slide_channels msgid "Create a channel" msgstr "" @@ -485,76 +1114,89 @@ msgstr "" #. module: website_slides #. openerp-web -#: code:addons/website_slides/static/src/js/slides_upload.js:114 +#: code:addons/website_slides/static/src/js/slides_upload.js:276 #, python-format -msgid "Create new tag '%s'" +msgid "Create new %s '%s'" msgstr "" #. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_answer__create_uid #: model:ir.model.fields,field_description:website_slides.field_slide_category__create_uid #: model:ir.model.fields,field_description:website_slides.field_slide_channel__create_uid +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_invite__create_uid +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_partner__create_uid +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_tag__create_uid +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_tag_group__create_uid #: model:ir.model.fields,field_description:website_slides.field_slide_embed__create_uid +#: model:ir.model.fields,field_description:website_slides.field_slide_question__create_uid #: model:ir.model.fields,field_description:website_slides.field_slide_slide__create_uid +#: model:ir.model.fields,field_description:website_slides.field_slide_slide_link__create_uid +#: model:ir.model.fields,field_description:website_slides.field_slide_slide_partner__create_uid #: model:ir.model.fields,field_description:website_slides.field_slide_tag__create_uid msgid "Created by" msgstr "" #. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_answer__create_date #: model:ir.model.fields,field_description:website_slides.field_slide_category__create_date #: model:ir.model.fields,field_description:website_slides.field_slide_channel__create_date +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_invite__create_date +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_partner__create_date +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_tag__create_date +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_tag_group__create_date #: model:ir.model.fields,field_description:website_slides.field_slide_embed__create_date +#: model:ir.model.fields,field_description:website_slides.field_slide_question__create_date #: model:ir.model.fields,field_description:website_slides.field_slide_slide__create_date +#: model:ir.model.fields,field_description:website_slides.field_slide_slide_link__create_date +#: model:ir.model.fields,field_description:website_slides.field_slide_slide_partner__create_date #: model:ir.model.fields,field_description:website_slides.field_slide_tag__create_date msgid "Created on" msgstr "" #. module: website_slides -#: model_terms:slide.channel,description:website_slides.channel_public -msgid "Default channel for slides, all public users can access content of this channel." +#: model:ir.model.fields,help:website_slides.field_slide_slide__html_content +msgid "Custom HTML content for slides of type 'Web Page'." msgstr "" #. module: website_slides -#. openerp-web -#: code:addons/website_slides/static/src/xml/website_slides.xml:60 -#: code:addons/website_slides/static/src/xml/website_slides.xml:62 -#: model:ir.model.fields,field_description:website_slides.field_slide_channel__description -#: model:ir.model.fields,field_description:website_slides.field_slide_slide__description -#: model_terms:ir.ui.view,arch_db:website_slides.view_slide_slide_form -#, python-format -msgid "Description" +#: model:slide.channel,name:website_slides.slide_channel_demo_6_furn3 +msgid "DIY Furniture" msgstr "" #. module: website_slides -#. openerp-web -#: code:addons/website_slides/static/src/xml/website_slides.xml:71 -#, python-format -msgid "Discard" +#: model:ir.model.fields,help:website_slides.field_gamification_challenge__category +msgid "Define the visibility of the challenge through menus" msgstr "" #. module: website_slides -#: model:slide.slide,description:website_slides.slide_6 -msgid "Discover how easy marketing your business can be with Odoo" +#. openerp-web +#: code:addons/website_slides/static/src/xml/website_slides_channel.xml:35 +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__description_html +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__description +#: model_terms:ir.ui.view,arch_db:website_slides.view_slide_channel_form +#: model_terms:ir.ui.view,arch_db:website_slides.view_slide_slide_form +#, python-format +msgid "Description" msgstr "" #. module: website_slides -#: model:slide.slide,description:website_slides.slide_0 -msgid "Discover how you can integrate MRP, PLM, Quality and Maintenance in a single application to maximize the efficiency of your manufacturing operations.\n" -"\n" -"Read more about the features at: https://www.odoo.com/page/manufacturing-features\n" -"\n" -"Discover Odoo MRP: https://www.odoo.com/page/manufacturing" +#: model:slide.question,question:website_slides.slide_slide_demo_1_4_question_1 +msgid "Did you read the whole article ?" msgstr "" #. module: website_slides -#: model:slide.slide,description:website_slides.slide_1 -msgid "Discover the CRM sales people love https://www.odoo.com/page/crm" +#. openerp-web +#: code:addons/website_slides/static/src/js/slides_category_add.js:24 +#: code:addons/website_slides/static/src/js/website_slides.editor.js:29 +#: code:addons/website_slides/static/src/xml/website_slides_upload.xml:204 +#, python-format +msgid "Discard" msgstr "" #. module: website_slides -#: model:slide.slide,description:website_slides.slide_2 -msgid "Discover the all-in-one business management software solution that fits any business size and use case.\n" -"\n" -"Learn more at https://odoo.com" +#: model_terms:slide.slide,html_content:website_slides.slide_slide_demo_1_4 +#: model_terms:slide.slide,html_content:website_slides.slide_slide_demo_2_1 +msgid "Discover more" msgstr "" #. module: website_slides @@ -563,10 +1205,18 @@ msgid "Dislikes" msgstr "" #. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_answer__display_name #: model:ir.model.fields,field_description:website_slides.field_slide_category__display_name #: model:ir.model.fields,field_description:website_slides.field_slide_channel__display_name +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_invite__display_name +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_partner__display_name +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_tag__display_name +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_tag_group__display_name #: model:ir.model.fields,field_description:website_slides.field_slide_embed__display_name +#: model:ir.model.fields,field_description:website_slides.field_slide_question__display_name #: model:ir.model.fields,field_description:website_slides.field_slide_slide__display_name +#: model:ir.model.fields,field_description:website_slides.field_slide_slide_link__display_name +#: model:ir.model.fields,field_description:website_slides.field_slide_slide_partner__display_name #: model:ir.model.fields,field_description:website_slides.field_slide_tag__display_name msgid "Display Name" msgstr "" @@ -574,10 +1224,31 @@ msgstr "" #. module: website_slides #: model:ir.model.fields,help:website_slides.field_slide_category__sequence #: model:ir.model.fields,help:website_slides.field_slide_channel__sequence +#: model:ir.model.fields,help:website_slides.field_slide_slide__category_sequence msgid "Display order" msgstr "" #. module: website_slides +#: model:slide.question,question:website_slides.slide_slide_demo_2_0_question_0 +msgid "Do you make beams out of lemon trees ?" +msgstr "" + +#. module: website_slides +#: model:slide.question,question:website_slides.slide_slide_demo_2_0_question_1 +msgid "Do you make lemons out of beams ?" +msgstr "" + +#. module: website_slides +#: model:slide.question,question:website_slides.slide_slide_demo_1_4_question_0 +msgid "Do you think Harry Potted has a good name ?" +msgstr "" + +#. module: website_slides +#: model:slide.question,question:website_slides.slide_slide_demo_5_3_question_0 +msgid "Do you want to reply correctly ?" +msgstr "" + +#. module: website_slides #: model_terms:ir.ui.view,arch_db:website_slides.view_slide_slide_form #: selection:slide.slide,slide_type:0 msgid "Document" @@ -594,26 +1265,44 @@ msgid "Document URL" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slides_channel_header -msgid "Documents" +#. openerp-web +#: code:addons/website_slides/static/src/xml/website_slides_channel.xml:27 +#: selection:slide.channel,channel_type:0 +#, python-format +msgid "Documentation" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.embed_slide -msgid "Download" +#: model:slide.channel.tag,name:website_slides.slide_channel_tag_other_2 +msgid "Dog Friendly" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__completed +#: model_terms:ir.ui.view,arch_db:website_slides.slides_home_user_achievements_small +msgid "Done" msgstr "" #. module: website_slides -#: model:slide.slide,description:website_slides.slide_5 -msgid "Download Awesome Timesheet by Odoo and discover how easy time tracking and employee management can be!\n" -"\n" -"Chrome: http://bit.ly/2613LcY\n" -"iOS: http://bit.ly/1ZUZsZD" +#. openerp-web +#: code:addons/website_slides/static/src/xml/slide_quiz.xml:52 +#, python-format +msgid "Done !" msgstr "" #. module: website_slides -#: model:ir.model.fields,field_description:website_slides.field_slide_slide__download_security -msgid "Download Security" +#: model_terms:ir.ui.view,arch_db:website_slides.view_slide_slide_form +msgid "Earnings" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.courses_home +msgid "Edit" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_partner__partner_email +msgid "Email" msgstr "" #. module: website_slides @@ -647,39 +1336,53 @@ msgid "Embedded Slides View Counter" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view -msgid "Embeds" +#: model:slide.slide,name:website_slides.slide_slide_demo_1_2 +msgid "Energy Efficiency Facts" msgstr "" #. module: website_slides -#: model:slide.channel,name:website_slides.channel_private -msgid "Employee Channel" +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__enroll_msg +msgid "Enroll Message" msgstr "" #. module: website_slides -#: model:ir.model.fields,field_description:website_slides.field_slide_channel__access_error_msg -#: model_terms:ir.ui.view,arch_db:website_slides.view_slide_channel_form -msgid "Error Message" +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__enroll +msgid "Enroll Policy" msgstr "" #. module: website_slides -#: selection:slide.slide,download_security:0 -msgid "Everyone" +#: model:slide.tag,name:website_slides.slide_tag_demo_exercises +msgid "Exercises" msgstr "" #. module: website_slides -#: selection:slide.channel,promote_strategy:0 -msgid "Featured Presentation" +#: model:ir.model.fields,field_description:website_slides.field_slide_slide_link__link +msgid "External Link" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.view_slide_slide_form +msgid "External Links" msgstr "" #. module: website_slides -#: model:slide.category,name:website_slides.category_1 -msgid "Featured Presentations" +#: model:ir.model,name:website_slides.model_slide_slide_link +msgid "External URL for a particular slide" msgstr "" #. module: website_slides -#: model:ir.model.fields,field_description:website_slides.field_slide_channel__promoted_slide_id -msgid "Featured Slide" +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__link_ids +msgid "External URL for this slide" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slide_content_detailed +msgid "External sources" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.course_slides_cards +msgid "Featured lesson" msgstr "" #. module: website_slides @@ -689,13 +1392,28 @@ msgstr "" #. module: website_slides #. openerp-web -#: code:addons/website_slides/controllers/main.py:274 -#: code:addons/website_slides/static/src/js/slides_upload.js:322 +#: code:addons/website_slides/controllers/main.py:751 +#: code:addons/website_slides/static/src/js/slides_upload.js:400 #, python-format msgid "File is too big. File size cannot exceed 25MB" msgstr "" #. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__quiz_first_attempt_reward +msgid "First attempt reward" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.embed_slide +msgid "First slide" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.user_profile_content +msgid "Followed Courses" +msgstr "" + +#. module: website_slides #: model:ir.model.fields,field_description:website_slides.field_slide_channel__message_follower_ids #: model:ir.model.fields,field_description:website_slides.field_slide_slide__message_follower_ids msgid "Followers" @@ -714,13 +1432,76 @@ msgid "Followers (Partners)" msgstr "" #. module: website_slides -#: model:ir.model.fields,field_description:website_slides.field_slide_channel__can_see_full -msgid "Full Access" +#: model_terms:ir.ui.view,arch_db:website_slides.course_slides_list_slide +msgid "Free preview" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.view_slide_channel_form -msgid "General" +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_invite__email_from +msgid "From" +msgstr "" + +#. module: website_slides +#: model:slide.slide,description:website_slides.slide_slide_demo_5_2 +msgid "From a piece of wood to a fully functional furniture, step by step." +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.embed_slide +msgid "Fullscreen" +msgstr "" + +#. module: website_slides +#: model:slide.channel.tag,name:website_slides.slide_channel_tag_role_furniture +msgid "Furniture Designer" +msgstr "" + +#. module: website_slides +#: model:slide.channel,name:website_slides.slide_channel_demo_4_furn1 +msgid "Furniture Technical Specifications" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/xml/slide_quiz.xml:56 +#, python-format +msgid "Gained karma" +msgstr "" + +#. module: website_slides +#: model:ir.model,name:website_slides.model_gamification_challenge +msgid "Gamification Challenge" +msgstr "" + +#. module: website_slides +#: model:slide.channel.tag,name:website_slides.slide_channel_tag_role_gardener +msgid "Gardener" +msgstr "" + +#. module: website_slides +#: model:gamification.badge,description:website_slides.badge_data_certification +#: model:gamification.challenge,name:website_slides.badge_data_certification_challenge +msgid "Get a certification" +msgstr "" + +#. module: website_slides +#: model:gamification.badge,name:website_slides.badge_data_register +#: model:gamification.challenge.line,name:website_slides.badge_data_register_challenge_line_0 +#: model:gamification.goal.definition,name:website_slides.badge_data_register_goal +msgid "Get started" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/js/slides_upload.js:191 +#, python-format +msgid "Go Back" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.courses_all +#: model_terms:ir.ui.view,arch_db:website_slides.courses_home +msgid "Go meet them" msgstr "" #. module: website_slides @@ -740,30 +1521,100 @@ msgid "Graph of Slides" msgstr "" #. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_tag__group_id +msgid "Group" +msgstr "" + +#. module: website_slides #: model_terms:ir.ui.view,arch_db:website_slides.view_slide_slide_search msgid "Group By" msgstr "" #. module: website_slides -#: model:ir.model.fields,help:website_slides.field_slide_channel__group_ids -msgid "Groups allowed to see presentations in this channel" +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_tag__group_sequence +msgid "Group sequence" msgstr "" #. module: website_slides -#: model:ir.model.fields,help:website_slides.field_slide_channel__upload_group_ids -msgid "Groups allowed to upload presentations in this channel. If void, every user can upload." +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__html_content +msgid "HTML Content" +msgstr "" + +#. module: website_slides +#: model:slide.category,name:website_slides.slide_category_demo_5_1 +msgid "Hand on !" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slides_home_users_small +msgid "Heroes of the week" msgstr "" #. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.course_nav +msgid "Home" +msgstr "" + +#. module: website_slides +#: model:slide.slide,name:website_slides.slide_slide_demo_0_1 +msgid "Home Gardening" +msgstr "" + +#. module: website_slides +#: model:slide.slide,name:website_slides.slide_slide_demo_5_2 +msgid "How to create your own piece of furniture" +msgstr "" + +#. module: website_slides +#: model:slide.slide,name:website_slides.slide_slide_demo_5_1 +msgid "How to find quality wood" +msgstr "" + +#. module: website_slides +#: model:slide.slide,name:website_slides.slide_slide_demo_1_3 +msgid "How to plant a potted tree" +msgstr "" + +#. module: website_slides +#: model:slide.slide,description:website_slides.slide_slide_demo_2_2 +msgid "How to wall decorating by tree planting in hanging plastic bottles." +msgstr "" + +#. module: website_slides +#: model:slide.tag,name:website_slides.slide_tag_demo_howto +msgid "HowTo" +msgstr "" + +#. module: website_slides +#: selection:gamification.challenge,category:0 +msgid "Human Resources / Engagement" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_answer__id #: model:ir.model.fields,field_description:website_slides.field_slide_category__id #: model:ir.model.fields,field_description:website_slides.field_slide_channel__id +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_invite__id +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_partner__id +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_tag__id +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_tag_group__id #: model:ir.model.fields,field_description:website_slides.field_slide_embed__id +#: model:ir.model.fields,field_description:website_slides.field_slide_question__id #: model:ir.model.fields,field_description:website_slides.field_slide_slide__id +#: model:ir.model.fields,field_description:website_slides.field_slide_slide_link__id +#: model:ir.model.fields,field_description:website_slides.field_slide_slide_partner__id #: model:ir.model.fields,field_description:website_slides.field_slide_tag__id msgid "ID" msgstr "" #. module: website_slides +#: model:ir.model.fields,help:website_slides.field_slide_channel__allow_comment +msgid "If checked it allows members to either:\n" +" * like content and post comments on documentation course;\n" +" * post comment and review on training course;" +msgstr "" + +#. module: website_slides #: model:ir.model.fields,help:website_slides.field_slide_channel__message_unread #: model:ir.model.fields,help:website_slides.field_slide_slide__message_unread msgid "If checked new messages require your attention." @@ -782,8 +1633,21 @@ msgid "If checked, some messages have a delivery error." msgstr "" #. module: website_slides -#: model:ir.model.fields,field_description:website_slides.field_slide_slide__image -msgid "Image" +#: model:slide.channel,description:website_slides.slide_channel_demo_4_furn1 +msgid "If you are looking for technical specifications, have a look at this documentation." +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/xml/website_slides_upload.xml:192 +#, python-format +msgid "Image File" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,help:website_slides.field_slide_channel__image_original +#: model:ir.model.fields,help:website_slides.field_slide_slide__image_original +msgid "Image in its original size, as it was uploaded." msgstr "" #. module: website_slides @@ -792,59 +1656,228 @@ msgid "Infographic" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slides_channel_header -msgid "Infographics" +#: model:slide.category,name:website_slides.slide_category_demo_1_0 +msgid "Interesting Facts" msgstr "" #. module: website_slides -#: code:addons/website_slides/controllers/main.py:296 +#: model:slide.slide,name:website_slides.slide_slide_demo_1_1 +msgid "Interesting Tree Facts" +msgstr "" + +#. module: website_slides +#: model:slide.slide,description:website_slides.slide_slide_demo_0_1 +msgid "Interesting informations about home gardening. Keep it close !" +msgstr "" + +#. module: website_slides +#: model:slide.channel.tag,name:website_slides.slide_channel_tag_level_intermediate +msgid "Intermediate" +msgstr "" + +#. module: website_slides +#: code:addons/website_slides/controllers/main.py:785 #, python-format msgid "Internal server error, please try again later or contact administrator.\n" "Here is the error message: %s" msgstr "" #. module: website_slides +#: model:slide.category,name:website_slides.slide_category_demo_3_0 +#: model:slide.category,name:website_slides.slide_category_demo_4_0 +msgid "Introduction" +msgstr "" + +#. module: website_slides #. openerp-web -#: code:addons/website_slides/static/src/js/slides_upload.js:317 +#: code:addons/website_slides/static/src/js/slides_upload.js:395 #, python-format msgid "Invalid file type. Please select pdf or image file" msgstr "" #. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.view_slide_channel_form +#: selection:slide.channel,enroll:0 +msgid "Invite" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_partner__completed +msgid "Is Completed" +msgstr "" + +#. module: website_slides #: model:ir.model.fields,field_description:website_slides.field_slide_channel__message_is_follower #: model:ir.model.fields,field_description:website_slides.field_slide_slide__message_is_follower msgid "Is Follower" msgstr "" #. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__is_member +msgid "Is Member" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__is_preview +msgid "Is Preview" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_answer__is_correct +msgid "Is correct answer" +msgstr "" + +#. module: website_slides #: model:ir.model.fields,field_description:website_slides.field_slide_channel__is_published #: model:ir.model.fields,field_description:website_slides.field_slide_slide__is_published msgid "Is published" msgstr "" #. module: website_slides +#: model:slide.slide,description:website_slides.slide_slide_demo_1_3 +msgid "Jim and Todd plant a potted tree for a customer of Knecht's Nurseries and Landscaping. Narrated by Leif Knecht, owner." +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/xml/slide_quiz.xml:44 +#, python-format +msgid "Join" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.course_sidebar +msgid "Join Course" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/xml/slide_quiz.xml:44 +#, python-format +msgid "Join course to take quiz" +msgstr "" + +#. module: website_slides +#: model:slide.slide,description:website_slides.slide_slide_demo_1_2 +msgid "Just some basics Energy Efficiency Facts." +msgstr "" + +#. module: website_slides +#: model:slide.slide,description:website_slides.slide_slide_demo_1_1 +msgid "Just some basics Interesting Tree Facts." +msgstr "" + +#. module: website_slides +#: model:slide.slide,description:website_slides.slide_slide_demo_1_0 +msgid "Just some basics Tree Infographic." +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.view_slide_channel_form +msgid "Karma Rules" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.view_slide_channel_form +msgid "Karma based actions" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.view_slide_channel_form +msgid "Karma generation" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,help:website_slides.field_slide_channel__karma_slide_comment +msgid "Karma needed to add a comment on a slide of this course" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,help:website_slides.field_slide_channel__karma_review +msgid "Karma needed to add a review on the course" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,help:website_slides.field_slide_channel__karma_slide_vote +msgid "Karma needed to like/dislike a slide of this course." +msgstr "" + +#. module: website_slides +#: model:gamification.badge,name:website_slides.badge_data_profile +#: model:gamification.challenge.line,name:website_slides.badge_data_profile_challenge_line_0 +#: model:gamification.goal.definition,name:website_slides.badge_data_profile_goal +msgid "Know yourself" +msgstr "" + +#. module: website_slides +#: model:slide.slide,name:website_slides.slide_slide_demo_0_0 +msgid "Know-How Summary" +msgstr "" + +#. module: website_slides +#: model:slide.channel,description:website_slides.slide_channel_demo_3_furn0 +msgid "Knowing which kind of wood to use depending on your application is important. In this course you\n" +"will learn the basics of wood characteristics." +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__image_large +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__image_large +msgid "Large-sized Image" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_answer____last_update #: model:ir.model.fields,field_description:website_slides.field_slide_category____last_update #: model:ir.model.fields,field_description:website_slides.field_slide_channel____last_update +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_invite____last_update +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_partner____last_update +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_tag____last_update +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_tag_group____last_update #: model:ir.model.fields,field_description:website_slides.field_slide_embed____last_update +#: model:ir.model.fields,field_description:website_slides.field_slide_question____last_update #: model:ir.model.fields,field_description:website_slides.field_slide_slide____last_update +#: model:ir.model.fields,field_description:website_slides.field_slide_slide_link____last_update +#: model:ir.model.fields,field_description:website_slides.field_slide_slide_partner____last_update #: model:ir.model.fields,field_description:website_slides.field_slide_tag____last_update msgid "Last Modified on" msgstr "" #. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__slide_last_update +msgid "Last Update" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_answer__write_uid #: model:ir.model.fields,field_description:website_slides.field_slide_category__write_uid #: model:ir.model.fields,field_description:website_slides.field_slide_channel__write_uid +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_invite__write_uid +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_partner__write_uid +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_tag__write_uid +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_tag_group__write_uid #: model:ir.model.fields,field_description:website_slides.field_slide_embed__write_uid +#: model:ir.model.fields,field_description:website_slides.field_slide_question__write_uid #: model:ir.model.fields,field_description:website_slides.field_slide_slide__write_uid +#: model:ir.model.fields,field_description:website_slides.field_slide_slide_link__write_uid +#: model:ir.model.fields,field_description:website_slides.field_slide_slide_partner__write_uid #: model:ir.model.fields,field_description:website_slides.field_slide_tag__write_uid msgid "Last Updated by" msgstr "" #. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_answer__write_date #: model:ir.model.fields,field_description:website_slides.field_slide_category__write_date #: model:ir.model.fields,field_description:website_slides.field_slide_channel__write_date +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_invite__write_date +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_partner__write_date +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_tag__write_date +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_tag_group__write_date #: model:ir.model.fields,field_description:website_slides.field_slide_embed__write_date +#: model:ir.model.fields,field_description:website_slides.field_slide_question__write_date #: model:ir.model.fields,field_description:website_slides.field_slide_slide__write_date +#: model:ir.model.fields,field_description:website_slides.field_slide_slide_link__write_date +#: model:ir.model.fields,field_description:website_slides.field_slide_slide_partner__write_date #: model:ir.model.fields,field_description:website_slides.field_slide_tag__write_date msgid "Last Updated on" msgstr "" @@ -860,13 +1893,37 @@ msgid "Latest Published" msgstr "" #. module: website_slides -#: model:slide.slide,description:website_slides.slide_8 -msgid "Learn more at https://www.odoo.com/page/sales" +#: model_terms:ir.ui.view,arch_db:website_slides.slides_home_achievements_small +msgid "Latest achievements" +msgstr "" + +#. module: website_slides +#: model:slide.channel,description:website_slides.slide_channel_demo_1_gard1 +msgid "Learn how to take care of your favorite trees. Learn when to plant, how to manage potted trees, ..." +msgstr "" + +#. module: website_slides +#: model:slide.slide,description:website_slides.slide_slide_demo_5_1 +msgid "Learn of to identify quality wood in order to create solid furnitures." +msgstr "" + +#. module: website_slides +#: model:slide.channel,description:website_slides.channel_public +msgid "Learn the basics of gardening !" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__karma_gen_slide_vote +msgid "Lesson voted" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slide_fullscreen +msgid "Lessons" msgstr "" #. module: website_slides #: model:ir.model.fields,field_description:website_slides.field_slide_slide__likes -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view msgid "Likes" msgstr "" @@ -877,13 +1934,46 @@ msgid "Main Attachment" msgstr "" #. module: website_slides -#: model:slide.tag,name:website_slides.tag2 -msgid "Marketing" +#: model:slide.slide,name:website_slides.slide_slide_demo_2_0 +msgid "Main Trees Categories" msgstr "" #. module: website_slides +#: model:ir.model.fields,help:website_slides.field_slide_channel_tag_group__website_published +msgid "Makes a menu entry in main navigation of Slides, allowing to filter on its tags directly from main navigation." +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__image_medium #: model:ir.model.fields,field_description:website_slides.field_slide_slide__image_medium -msgid "Medium" +msgid "Medium-sized Image" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.courses_all +#: model_terms:ir.ui.view,arch_db:website_slides.courses_home +msgid "Meet the people who transformed their company" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__partner_ids +#: selection:slide.channel,visibility:0 +msgid "Members" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__channel_partner_ids +msgid "Members Information" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,help:website_slides.field_slide_channel__enroll_group_ids +msgid "Members of those groups are automatically added as members of the channel." +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_tag_group__website_published +msgid "Menu entry" msgstr "" #. module: website_slides @@ -893,8 +1983,8 @@ msgid "Message Delivery error" msgstr "" #. module: website_slides -#: model:ir.model.fields,help:website_slides.field_slide_channel__access_error_msg -msgid "Message to display when not accessible due to access rights" +#: model:ir.model.fields,help:website_slides.field_slide_channel__enroll_msg +msgid "Message explaining the enroll process" msgstr "" #. module: website_slides @@ -904,28 +1994,56 @@ msgid "Messages" msgstr "" #. module: website_slides +#: model:slide.category,name:website_slides.slide_category_demo_1_1 +msgid "Methods" +msgstr "" + +#. module: website_slides +#: model:slide.slide,description:website_slides.slide_slide_demo_2_1 +msgid "Mighty forest just don't appear in a few weeks. Learn how time made our forests mighty and mysterious." +msgstr "" + +#. module: website_slides #: model:ir.model.fields,field_description:website_slides.field_slide_slide__mime_type msgid "Mime-type" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view -#: model_terms:ir.ui.view,arch_db:website_slides.slides_channel_header +#: model_terms:ir.ui.view,arch_db:website_slides.courses_home +msgid "More info" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.course_nav +#: model_terms:ir.ui.view,arch_db:website_slides.slide_aside_documentation #: selection:slide.channel,promote_strategy:0 msgid "Most Viewed" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slides_channel_header +#: model_terms:ir.ui.view,arch_db:website_slides.course_nav #: selection:slide.channel,promote_strategy:0 msgid "Most Voted" msgstr "" #. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.courses_home +msgid "Most popular courses" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.courses_all +msgid "My Courses" +msgstr "" + +#. module: website_slides #: model:ir.model.fields,field_description:website_slides.field_slide_category__name #: model:ir.model.fields,field_description:website_slides.field_slide_channel__name +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_tag__name +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_tag_group__name #: model:ir.model.fields,field_description:website_slides.field_slide_tag__name #: model_terms:ir.ui.view,arch_db:website_slides.view_slide_channel_form +#: model_terms:ir.ui.view,arch_db:website_slides.view_slide_question_form #: model_terms:ir.ui.view,arch_db:website_slides.view_slide_slide_form msgid "Name" msgstr "" @@ -937,44 +2055,102 @@ msgstr "" #. module: website_slides #. openerp-web -#: code:addons/website_slides/static/src/js/website_slides.editor.js:39 +#: code:addons/website_slides/static/src/js/website_slides.editor.js:22 #, python-format -msgid "New slide" +msgid "New Channel Slide" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slides_channel_header +#: model_terms:ir.ui.view,arch_db:website_slides.course_nav msgid "Newest" msgstr "" #. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.courses_home +msgid "Newest courses" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/xml/slide_quiz.xml:80 +#, python-format +msgid "Next" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slide_content_detailed +msgid "Next <i class=\"fa fa-chevron-right ml-2\"/>" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slides_home_user_profile_small +msgid "Next rank:" +msgstr "" + +#. module: website_slides #: model_terms:ir.ui.view,arch_db:website_slides.embed_slide msgid "Next slide" msgstr "" #. module: website_slides -#: selection:slide.channel,promote_strategy:0 -msgid "No Featured Presentation" +#: model:slide.answer,text_value:website_slides.slide_slide_demo_1_4_question_0_1 +#: model:slide.answer,text_value:website_slides.slide_slide_demo_1_4_question_1_1 +#: model:slide.answer,text_value:website_slides.slide_slide_demo_2_0_question_0_1 +#: model:slide.answer,text_value:website_slides.slide_slide_demo_2_0_question_1_1 +#: model:slide.answer,text_value:website_slides.slide_slide_demo_5_3_question_0_1 +msgid "No" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slides_home_achievements_small +msgid "No achievements currently :(" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.courses_all +msgid "No channel was found matching your search" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.user_profile_content +msgid "No completed course yet" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.course_slides_cards +msgid "No content was found using your search" msgstr "" #. module: website_slides -#: selection:slide.slide,download_security:0 -msgid "No One" +#: model_terms:ir.ui.view,arch_db:website_slides.user_profile_content +msgid "No followed course yet" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.channel_not_found -msgid "No channel created or published yet." +#: model_terms:ir.ui.view,arch_db:website_slides.slides_home_users_small +msgid "No heroes currently :(" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view +#: model_terms:ir.ui.view,arch_db:website_slides.slide_aside_documentation msgid "No presentation available." msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.home -msgid "No presentation published yet." +#: model_terms:ir.ui.view,arch_db:website_slides.courses_all +msgid "Nobody gave me a real text so instead of a lorem ipsum I put that one." +msgstr "" + +#. module: website_slides +#: code:addons/website_slides/models/slide_slide.py:322 +#, python-format +msgid "Not enough karma to comment" +msgstr "" + +#. module: website_slides +#: code:addons/website_slides/models/slide_channel.py:341 +#, python-format +msgid "Not enough karma to review" msgstr "" #. module: website_slides @@ -984,30 +2160,42 @@ msgid "Number of Actions" msgstr "" #. module: website_slides -#: model:ir.model.fields,field_description:website_slides.field_slide_category__nbr_documents -#: model:ir.model.fields,field_description:website_slides.field_slide_channel__nbr_documents +#: model:ir.model.fields,field_description:website_slides.field_slide_category__nbr_document +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__nbr_document msgid "Number of Documents" msgstr "" #. module: website_slides -#: model:ir.model.fields,field_description:website_slides.field_slide_category__nbr_infographics -#: model:ir.model.fields,field_description:website_slides.field_slide_channel__nbr_infographics +#: model:ir.model.fields,field_description:website_slides.field_slide_category__nbr_infographic +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__nbr_infographic msgid "Number of Infographics" msgstr "" #. module: website_slides -#: model:ir.model.fields,field_description:website_slides.field_slide_category__nbr_presentations -#: model:ir.model.fields,field_description:website_slides.field_slide_channel__nbr_presentations +#: model:ir.model.fields,field_description:website_slides.field_slide_category__nbr_presentation +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__nbr_presentation msgid "Number of Presentations" msgstr "" #. module: website_slides -#: model:ir.model.fields,field_description:website_slides.field_slide_category__nbr_videos -#: model:ir.model.fields,field_description:website_slides.field_slide_channel__nbr_videos +#: model:ir.model.fields,field_description:website_slides.field_slide_category__nbr_quiz +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__nbr_quiz +msgid "Number of Quizs" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_category__nbr_video +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__nbr_video msgid "Number of Videos" msgstr "" #. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_category__nbr_webpage +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__nbr_webpage +msgid "Number of Webpages" +msgstr "" + +#. module: website_slides #: model:ir.model.fields,field_description:website_slides.field_slide_channel__message_has_error_counter #: model:ir.model.fields,field_description:website_slides.field_slide_slide__message_has_error_counter msgid "Number of error" @@ -1032,188 +2220,320 @@ msgid "Number of unread messages" msgstr "" #. module: website_slides -#: model:slide.slide,name:website_slides.slide_2 -msgid "Odoo All-in-One Software Demonstration" +#: model_terms:slide.slide,html_content:website_slides.slide_slide_demo_1_4 +#: model_terms:slide.slide,html_content:website_slides.slide_slide_demo_2_1 +msgid "Odoo • Image and Text" msgstr "" #. module: website_slides -#: model:slide.slide,name:website_slides.slide_1 -msgid "Odoo CRM" +#: selection:slide.channel,enroll:0 +msgid "On payment" msgstr "" #. module: website_slides -#: model:slide.category,name:website_slides.category_2 -#: model:slide.tag,name:website_slides.tag5 -msgid "Odoo Days" +#: model_terms:ir.ui.view,arch_db:website_slides.view_slide_channel_form +msgid "Options" msgstr "" #. module: website_slides -#: model:slide.slide,name:website_slides.slide_7 -msgid "Odoo Inventory" +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__image_original +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__image_original +msgid "Original Image" msgstr "" #. module: website_slides -#: model:slide.slide,name:website_slides.slide_0 -msgid "Odoo MRP" +#. openerp-web +#: code:addons/website_slides/static/src/xml/website_slides_upload.xml:88 +#, python-format +msgid "PDF or Image File" msgstr "" #. module: website_slides -#: model:slide.slide,name:website_slides.slide_6 -msgid "Odoo Marketing" +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_partner__partner_id +#: model:ir.model.fields,field_description:website_slides.field_slide_slide_partner__partner_id +msgid "Partner" msgstr "" #. module: website_slides -#: model:slide.slide,name:website_slides.slide_8 -msgid "Odoo Sales" +#: model_terms:ir.ui.view,arch_db:website_slides.courses_home +msgid "Pick a course" msgstr "" #. module: website_slides -#: model:slide.slide,name:website_slides.slide_3 -msgid "Odoo Sign Demonstration" +#: model_terms:ir.ui.view,arch_db:website_slides.slide_social_email +msgid "Please" msgstr "" #. module: website_slides #. openerp-web -#: code:addons/website_slides/static/src/js/website_slides.editor.js:40 +#: code:addons/website_slides/static/src/js/slides_course_join.js:57 #, python-format -msgid "On which channel do you want to add a slide?" +msgid "Please <a href=\"/web/login?redirect=%s\">login</a> to join this course." msgstr "" #. module: website_slides -#: model:slide.slide,name:website_slides.slide_9 -msgid "Open Days 2014 Infographic" +#. openerp-web +#: code:addons/website_slides/static/src/js/slides_slide_like.js:59 +#, python-format +msgid "Please <a href=\"/web/login?redirect=%s\">login</a> to vote this lesson" msgstr "" #. module: website_slides -#: model:slide.slide,name:website_slides.slide_11 -msgid "OpenSource CMS, A performance comparison - Mantavya Gajjar" +#: code:addons/website_slides/models/slide_slide.py:240 +#: code:addons/website_slides/models/slide_slide.py:587 +#, python-format +msgid "Please enter valid Youtube or Google Doc URL" +msgstr "" + +#. module: website_slides +#: code:addons/website_slides/controllers/main.py:733 +#, python-format +msgid "Please enter valid youtube or google doc url" +msgstr "" + +#. module: website_slides +#: model:gamification.badge,name:website_slides.badge_data_course +#: model:gamification.challenge.line,name:website_slides.badge_data_course_challenge_line_0 +#: model:gamification.goal.definition,name:website_slides.badge_data_course_goal +msgid "Power User" msgstr "" #. module: website_slides #. openerp-web -#: code:addons/website_slides/static/src/xml/website_slides.xml:28 +#: code:addons/website_slides/static/src/js/slides_upload.js:323 +#: model:ir.model.fields,field_description:website_slides.field_slide_embed__slide_id +#: selection:slide.slide,slide_type:0 #, python-format -msgid "PDF or Image File" +msgid "Presentation" msgstr "" #. module: website_slides -#: model:slide.channel,name:website_slides.channel_partial -msgid "Partner Channel" +#: model:mail.message.subtype,description:website_slides.mt_channel_slide_published +#: model:mail.message.subtype,name:website_slides.mt_channel_slide_published +msgid "Presentation Published" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_social_email -msgid "Please" +#: model_terms:ir.ui.view,arch_db:website_slides.embed_slide +msgid "Previous slide" +msgstr "" + +#. module: website_slides +#: selection:slide.channel,enroll:0 +#: selection:slide.channel,visibility:0 +msgid "Public" msgstr "" #. module: website_slides #. openerp-web -#: code:addons/website_slides/static/src/js/slides_like.js:32 +#: code:addons/website_slides/static/src/js/slides_upload.js:185 #, python-format -msgid "Please <a href=\"/web?redirect=%s\">login</a> to vote this slide" +msgid "Publish" msgstr "" #. module: website_slides -#: code:addons/website_slides/models/slide_slide.py:131 -#: code:addons/website_slides/models/slide_slide.py:360 -#, python-format -msgid "Please enter valid Youtube or Google Doc URL" +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__date_published +msgid "Publish Date" msgstr "" #. module: website_slides -#: code:addons/website_slides/controllers/main.py:256 +#: model_terms:ir.ui.view,arch_db:website_slides.view_slide_slide_search +msgid "Published" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__publish_template_id +msgid "Published Template" +msgstr "" + +#. module: website_slides +#: code:addons/website_slides/models/slide_channel.py:261 +#: code:addons/website_slides/models/slide_slide.py:269 #, python-format -msgid "Please enter valid youtube or google doc url" +msgid "Publishing is restricted to the responsible of training courses or members of the publisher group for documentation courses" msgstr "" #. module: website_slides -#: model:ir.model.fields,field_description:website_slides.field_slide_embed__slide_id +#: model:ir.model.fields,field_description:website_slides.field_slide_answer__question_id +msgid "Question" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_question__question +#: model_terms:ir.ui.view,arch_db:website_slides.view_slide_question_form +msgid "Question Name" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__question_ids +#: model_terms:ir.ui.view,arch_db:website_slides.view_slide_slide_form +msgid "Questions" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/js/slides_upload.js:338 +#: model_terms:ir.ui.view,arch_db:website_slides.view_slide_slide_form +#: model:slide.channel.tag,name:website_slides.slide_channel_tag_other_0 #: selection:slide.slide,slide_type:0 -msgid "Presentation" +#, python-format +msgid "Quiz" msgstr "" #. module: website_slides -#: model:mail.message.subtype,description:website_slides.mt_channel_slide_published -#: model:mail.message.subtype,name:website_slides.mt_channel_slide_published -msgid "Presentation Published" +#: model:ir.model.fields,field_description:website_slides.field_slide_slide_partner__quiz_attempts_count +msgid "Quiz attempts count" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slides_channel_header -#: model:website.menu,name:website_slides.website_menu_slides -msgid "Presentations" +#. openerp-web +#: code:addons/website_slides/static/src/xml/slide_quiz.xml:52 +#, python-format +msgid "Quiz done" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.embed_slide -msgid "Previous slide" +#. openerp-web +#: code:addons/website_slides/static/src/xml/website_slides_fullscreen.xml:13 +#, python-format +msgid "Quiz:" msgstr "" #. module: website_slides -#: selection:slide.channel,visibility:0 -msgid "Private" +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__rating_ids +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__rating_ids +msgid "Rating" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.channels -msgid "Private channel" +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__rating_avg +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__rating_avg +msgid "Rating Average" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slides_grid_view -msgid "Promote this #{slide.slide_type}" +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__rating_last_feedback +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__rating_last_feedback +msgid "Rating Last Feedback" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.channels -#: model_terms:ir.ui.view,arch_db:website_slides.home -msgid "Promoted slide" +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__rating_last_image +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__rating_last_image +msgid "Rating Last Image" msgstr "" #. module: website_slides -#: selection:slide.channel,visibility:0 -msgid "Public" +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__rating_last_value +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__rating_last_value +msgid "Rating Last Value" msgstr "" #. module: website_slides -#: model:slide.channel,name:website_slides.channel_public -msgid "Public Channel" +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__rating_count +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__rating_count +msgid "Rating count" msgstr "" #. module: website_slides -#: model:ir.model.fields,field_description:website_slides.field_slide_slide__date_published -msgid "Publish Date" +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__image_raw_big +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__image_raw_big +msgid "Raw Big-sized Image" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.view_slide_slide_search -msgid "Published" +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__image_raw_large +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__image_raw_large +msgid "Raw Large-sized Image" msgstr "" #. module: website_slides -#: model:ir.model.fields,field_description:website_slides.field_slide_channel__publish_template_id -msgid "Published Template" +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__image_raw_medium +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__image_raw_medium +msgid "Raw Medium-sized Image" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__image_raw_original +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__image_raw_original +msgid "Raw Original Image" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__image_raw_small +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__image_raw_small +msgid "Raw Small-sized Image" +msgstr "" + +#. module: website_slides +#: model:gamification.badge,description:website_slides.badge_data_karma +msgid "Reach 2000 XP" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.courses_home +msgid "Reach new heights" +msgstr "" + +#. module: website_slides +#: model:gamification.challenge,name:website_slides.badge_data_karma_challenge +msgid "Read 2000 XP" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,help:website_slides.field_slide_channel__rating_last_feedback +#: model:ir.model.fields,help:website_slides.field_slide_slide__rating_last_feedback +msgid "Reason of the rating" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_invite__partner_ids +msgid "Recipients" +msgstr "" + +#. module: website_slides +#: model:gamification.badge,description:website_slides.badge_data_register +#: model:gamification.challenge,name:website_slides.badge_data_register_challenge +msgid "Register to the platform" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view +#: model_terms:ir.ui.view,arch_db:website_slides.slide_aside_documentation msgid "Related" msgstr "" #. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__user_id +msgid "Responsible" +msgstr "" + +#. module: website_slides #: model:ir.model.fields,help:website_slides.field_slide_channel__website_id #: model:ir.model.fields,help:website_slides.field_slide_slide__website_id msgid "Restrict publishing to this website." msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.home -msgid "Results for" +#: model_terms:ir.ui.view,arch_db:website_slides.private_profile +msgid "Return to the course." +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/xml/website_slides_channel.xml:41 +#: model_terms:ir.ui.view,arch_db:website_slides.course_main +#, python-format +msgid "Review" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.home -msgid "Review your channel settings to promote your most viewed or recent published presentation" +#: model_terms:ir.ui.view,arch_db:website_slides.slide_fullscreen +msgid "Reviews" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__quiz_fourth_attempt_reward +msgid "Reward for every attempt after the third try" msgstr "" #. module: website_slides @@ -1224,20 +2544,22 @@ msgstr "" #. module: website_slides #. openerp-web -#: code:addons/website_slides/static/src/xml/website_slides.xml:70 +#: code:addons/website_slides/static/src/js/slides_category_add.js:20 #, python-format -msgid "Save and Publish" +msgid "Save" msgstr "" #. module: website_slides #. openerp-web -#: code:addons/website_slides/static/src/xml/website_slides.xml:69 +#: code:addons/website_slides/static/src/js/slides_upload.js:186 +#: code:addons/website_slides/static/src/js/slides_upload.js:188 #, python-format msgid "Save as Draft" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slides_channel_header +#: model_terms:ir.ui.view,arch_db:website_slides.course_nav +#: model_terms:ir.ui.view,arch_db:website_slides.courses_all msgid "Search" msgstr "" @@ -1247,25 +2569,37 @@ msgid "Search Slides" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slides_channel_header +#: model_terms:ir.ui.view,arch_db:website_slides.course_nav msgid "Search in #{channel.name}" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.view_slide_channel_form -msgid "Security" +#: model_terms:ir.ui.view,arch_db:website_slides.courses_all +msgid "Search something" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__quiz_second_attempt_reward +msgid "Second attempt reward" +msgstr "" + +#. module: website_slides +#: model_terms:slide.slide,html_content:website_slides.slide_slide_demo_1_4 +#: model_terms:slide.slide,html_content:website_slides.slide_slide_demo_2_1 +msgid "Section Subtitle" msgstr "" #. module: website_slides #. openerp-web -#: code:addons/website_slides/static/src/js/website_slides.editor.js:44 +#: code:addons/website_slides/static/src/xml/slide_management.xml:15 #, python-format -msgid "Select" +msgid "Section name" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.channels -msgid "Select a Channel" +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__access_token +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__access_token +msgid "Security Token" msgstr "" #. module: website_slides @@ -1274,29 +2608,59 @@ msgid "Select page to start with" msgstr "" #. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_res_config_settings__module_website_sale_slides +msgid "Sell courses" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.res_config_settings_view_form +msgid "Sell courses on your website" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slide_channel_invite_view_form +msgid "Send" +msgstr "" + +#. module: website_slides #: model:ir.model.fields,field_description:website_slides.field_slide_category__sequence #: model:ir.model.fields,field_description:website_slides.field_slide_channel__sequence +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_tag__sequence +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_tag_group__sequence +#: model:ir.model.fields,field_description:website_slides.field_slide_question__sequence +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__sequence msgid "Sequence" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_social_media -msgid "Share Link" +#: model_terms:ir.ui.view,arch_db:website_slides.slide_content_detailed +msgid "Set Done" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view -msgid "Share count" +#: selection:gamification.challenge,category:0 +msgid "Settings / Gamification Tools" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slides_share -msgid "Share on Facebook" +#: model_terms:ir.ui.view,arch_db:website_slides.course_sidebar +msgid "Share" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.course_sidebar +msgid "Share Channel" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.course_sidebar +#: model_terms:ir.ui.view,arch_db:website_slides.slide_social_media +msgid "Share Link" msgstr "" #. module: website_slides #: model_terms:ir.ui.view,arch_db:website_slides.slides_share -msgid "Share on Google Plus" +msgid "Share on Facebook" msgstr "" #. module: website_slides @@ -1305,6 +2669,7 @@ msgid "Share on LinkedIn" msgstr "" #. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.course_sidebar #: model_terms:ir.ui.view,arch_db:website_slides.slide_social_media msgid "Share on Social Networks" msgstr "" @@ -1325,34 +2690,66 @@ msgid "Shared Template" msgstr "" #. module: website_slides -#: selection:slide.channel,visibility:0 -msgid "Show channel but restrict presentations" +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__description +msgid "Short Description" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.courses_home +msgid "Skill up and have an impact! Your business career starts here. Time to start a course." msgstr "" #. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_question__slide_id +#: model:ir.model.fields,field_description:website_slides.field_slide_slide_link__slide_id +#: model:ir.model.fields,field_description:website_slides.field_slide_slide_partner__slide_id +#: model_terms:ir.ui.view,arch_db:website_slides.view_slide_question_form #: model_terms:ir.ui.view,arch_db:website_slides.view_slide_slide_form msgid "Slide" msgstr "" #. module: website_slides +#: model:ir.model,name:website_slides.model_slide_slide_partner +msgid "Slide / Partner decorated m2m" +msgstr "" + +#. module: website_slides #: model:ir.model,name:website_slides.model_slide_channel msgid "Slide Channel" msgstr "" #. module: website_slides +#: model:ir.model,name:website_slides.model_slide_question +msgid "Slide Quiz Question" +msgstr "" + +#. module: website_slides #: model:ir.model,name:website_slides.model_slide_tag msgid "Slide Tag" msgstr "" #. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__slide_partner_ids +msgid "Slide User Data" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_invite__channel_id +msgid "Slide channel" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/xml/website_slides_fullscreen.xml:25 #: model_terms:ir.ui.view,arch_db:website_slides.embed_slide -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view +#, python-format msgid "Slide image" msgstr "" #. module: website_slides -#: model:ir.model.fields,field_description:website_slides.field_slide_channel__custom_slide_id -msgid "Slide to Promote" +#: code:addons/website_slides/controllers/main.py:69 +#, python-format +msgid "Slide with questions must be marked as done when submitting all good answers " msgstr "" #. module: website_slides @@ -1372,15 +2769,83 @@ msgid "Slides Category" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slides_search -msgid "Sorry, but nothing matches your search criteria" +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__image_small +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__image_small +msgid "Small-sized Image" +msgstr "" + +#. module: website_slides +#: model:slide.channel,description:website_slides.slide_channel_demo_6_furn3 +msgid "So much amazing certification." +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.course_nav +msgid "Sort by" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.course_sidebar +msgid "Start Course" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.course_sidebar +msgid "Start Course Channel" msgstr "" #. module: website_slides -#: model:slide.slide,description:website_slides.slide_3 -msgid "Stop doing manual printing and scanning. Move to electronic signature with Odoo Sign!\n" -"\n" -"Discover more at https://www.odoo.com/page/sign" +#: model_terms:slide.slide,html_content:website_slides.slide_slide_demo_1_4 +#: model_terms:slide.slide,html_content:website_slides.slide_slide_demo_2_1 +msgid "Start with the customer – find out what they want and give it to them." +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.courses_home +msgid "Start your online course today !" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.view_slide_channel_form +msgid "Statistics" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_invite__subject +msgid "Subject" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.slide_channel_invite_view_form +msgid "Subject..." +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__user_membership_id +msgid "Subscriber information" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,help:website_slides.field_slide_slide__user_membership_id +msgid "Subscriber information for the current logged in user" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__partner_ids +msgid "Subscribers" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__slide_partner_ids +msgid "Subscribers information" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/xml/slide_quiz.xml:46 +#: code:addons/website_slides/static/src/xml/slide_quiz.xml:54 +#, python-format +msgid "Succeed and gain karma" msgstr "" #. module: website_slides @@ -1390,12 +2855,18 @@ msgstr "" #. module: website_slides #. openerp-web -#: code:addons/website_slides/static/src/js/slides_upload.js:178 -#: code:addons/website_slides/static/src/xml/website_slides.xml:48 +#: code:addons/website_slides/static/src/js/slides_upload.js:88 +#: code:addons/website_slides/static/src/xml/website_slides_channel.xml:50 +#: code:addons/website_slides/static/src/xml/website_slides_channel.xml:52 +#: code:addons/website_slides/static/src/xml/website_slides_upload.xml:57 #: model:ir.actions.act_window,name:website_slides.action_slide_tag +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__tag_ids +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_tag_group__tag_ids #: model:ir.model.fields,field_description:website_slides.field_slide_slide__tag_ids #: model:ir.ui.menu,name:website_slides.menu_slide_tag +#: model_terms:ir.ui.view,arch_db:website_slides.view_slide_channel_form #: model_terms:ir.ui.view,arch_db:website_slides.view_slide_tag_tree +#: model:slide.channel.tag.group,name:website_slides.slide_channel_tag_group_data_other #, python-format msgid "Tags" msgstr "" @@ -1406,8 +2877,24 @@ msgid "Tags..." msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.home -msgid "The" +#: model:slide.channel,name:website_slides.slide_channel_demo_1_gard1 +msgid "Taking care of Trees" +msgstr "" + +#. module: website_slides +#: model:slide.category,name:website_slides.slide_category_demo_5_2 +msgid "Test Yourself" +msgstr "" + +#. module: website_slides +#: model:slide.slide,description:website_slides.slide_slide_demo_5_3 +#: model:slide.slide,name:website_slides.slide_slide_demo_5_3 +msgid "Test your knowledge !" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,help:website_slides.field_slide_slide__is_preview +msgid "The course is accessible by anyone : the users don't need to join the channel to access the content of the course." msgstr "" #. module: website_slides @@ -1416,14 +2903,28 @@ msgid "The document type will be set automatically based on the document URL and msgstr "" #. module: website_slides +#: code:addons/website_slides/wizard/slide_channel_invite.py:68 +#, python-format +msgid "The following recipients have no user account: %s. You should create user accounts for them or allow external sign up in configuration." +msgstr "" + +#. module: website_slides #: model:ir.model.fields,help:website_slides.field_slide_channel__website_url +#: model:ir.model.fields,help:website_slides.field_slide_channel_invite__channel_url #: model:ir.model.fields,help:website_slides.field_slide_slide__website_url msgid "The full URL to access the document through the website." msgstr "" #. module: website_slides -#: sql_constraint:slide.slide:0 -msgid "The slide name must be unique within a channel" +#: model:slide.tag,name:website_slides.slide_tag_demo_theory +msgid "Theory" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/js/slides_course_quiz.js:84 +#, python-format +msgid "There was an error validating this quiz." msgstr "" #. module: website_slides @@ -1432,36 +2933,54 @@ msgid "Third Party Website URL" msgstr "" #. module: website_slides -#: model_terms:slide.channel,access_error_msg:website_slides.channel_partial -#: model_terms:slide.channel,access_error_msg:website_slides.channel_private -#: model_terms:slide.channel,access_error_msg:website_slides.channel_public -msgid "This channel is private and its content is restricted to some users." +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__quiz_third_attempt_reward +msgid "Third attempt reward" msgstr "" #. module: website_slides -#: code:addons/website_slides/controllers/main.py:260 +#. openerp-web +#: code:addons/website_slides/static/src/js/slides_course_quiz.js:89 #, python-format -msgid "This video already exists in this channel <a target=\"_blank\" href=\"/slides/slide/%s\">click here to view it </a>" +msgid "This quiz is already done. Retaking it is not possible." msgstr "" #. module: website_slides -#: model:ir.model.fields,field_description:website_slides.field_slide_slide__image_thumb -msgid "Thumbnail" +#: code:addons/website_slides/controllers/main.py:737 +#, python-format +msgid "This video already exists in this channel <a target=\"_blank\" href=\"/slides/slide/%s\">click here to view it </a>" msgstr "" #. module: website_slides #. openerp-web -#: code:addons/website_slides/static/src/xml/website_slides.xml:42 -#: code:addons/website_slides/static/src/xml/website_slides.xml:44 +#: code:addons/website_slides/static/src/xml/website_slides_channel.xml:10 +#: code:addons/website_slides/static/src/xml/website_slides_channel.xml:12 +#: code:addons/website_slides/static/src/xml/website_slides_upload.xml:45 +#: code:addons/website_slides/static/src/xml/website_slides_upload.xml:47 #: model:ir.model.fields,field_description:website_slides.field_slide_slide__name +#: model:ir.model.fields,field_description:website_slides.field_slide_slide_link__name #, python-format msgid "Title" msgstr "" #. module: website_slides -#: model:ir.model.fields,field_description:website_slides.field_slide_category__total -#: model:ir.model.fields,field_description:website_slides.field_slide_channel__total -msgid "Total" +#: model_terms:ir.ui.view,arch_db:website_slides.courses_all +#: model_terms:ir.ui.view,arch_db:website_slides.courses_home +msgid "Toggle navigation" +msgstr "" + +#. module: website_slides +#: model:slide.tag,name:website_slides.slide_tag_demo_tools +msgid "Tools" +msgstr "" + +#. module: website_slides +#: model:slide.category,name:website_slides.slide_category_demo_5_0 +msgid "Tools and Methods" +msgstr "" + +#. module: website_slides +#: model:slide.slide,description:website_slides.slide_slide_demo_5_0 +msgid "Tools you will need to complete this course." msgstr "" #. module: website_slides @@ -1470,35 +2989,90 @@ msgid "Total # Views" msgstr "" #. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_category__total_slides +msgid "Total Slides" +msgstr "" + +#. module: website_slides +#: selection:slide.channel,channel_type:0 +msgid "Training" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/xml/website_slides_channel.xml:21 +#, python-format +msgid "Training (with progress)" +msgstr "" + +#. module: website_slides #: model:ir.model.fields,field_description:website_slides.field_slide_slide__index_content msgid "Transcript" msgstr "" #. module: website_slides +#: model:slide.slide,name:website_slides.slide_slide_demo_1_0 +msgid "Tree Infographic" +msgstr "" + +#. module: website_slides +#: model:slide.slide,name:website_slides.slide_slide_demo_2_2 +msgid "Tree planting in hanging bottles on wall" +msgstr "" + +#. module: website_slides +#: model:slide.category,name:website_slides.slide_category_demo_2_0 +msgid "Trees" +msgstr "" + +#. module: website_slides +#: model:slide.channel,name:website_slides.slide_channel_demo_2_gard2 +msgid "Trees, Wood and Gardens" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/xml/website_slides_channel.xml:17 #: model:ir.model.fields,field_description:website_slides.field_slide_slide__slide_type #: model_terms:ir.ui.view,arch_db:website_slides.view_slide_slide_search +#, python-format msgid "Type" msgstr "" #. module: website_slides -#: code:addons/website_slides/controllers/main.py:156 +#: code:addons/website_slides/wizard/slide_channel_invite.py:25 +#, python-format +msgid "Unable to post message, please configure the sender's email address." +msgstr "" + +#. module: website_slides +#: code:addons/website_slides/models/slide_channel.py:492 +#: model_terms:ir.ui.view,arch_db:website_slides.course_nav #, python-format msgid "Uncategorized" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.home -msgid "Uncategorized presentation" +#: model:slide.slide,name:website_slides.slide_slide_demo_5_0 +msgid "Unforgettable Tools" msgstr "" #. module: website_slides -#: code:addons/website_slides/models/slide_slide.py:349 +#: code:addons/website_slides/models/slide_slide.py:576 #, python-format msgid "Unknown document" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slides_grid_view +#. openerp-web +#: code:addons/website_slides/static/src/js/slides_course_join.js:61 +#: code:addons/website_slides/static/src/js/slides_slide_like.js:71 +#, python-format +msgid "Unknown error" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.course_slides_list_slide msgid "Unpublished" msgstr "" @@ -1515,60 +3089,100 @@ msgid "Unread Messages Counter" msgstr "" #. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/xml/website_slides_upload.xml:203 +#, python-format +msgid "Upload" +msgstr "" + +#. module: website_slides #: model:ir.model.fields,field_description:website_slides.field_slide_channel__upload_group_ids msgid "Upload Groups" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.home -msgid "Upload PDF presentations, documents, videos or infographic using the button below." +#. openerp-web +#: code:addons/website_slides/static/src/xml/website_slides_upload.xml:172 +#, python-format +msgid "Upload Image" +msgstr "" + +#. module: website_slides +#: model_terms:ir.ui.view,arch_db:website_slides.course_sidebar +#: model_terms:ir.ui.view,arch_db:website_slides.course_slides_list +msgid "Upload Presentation" msgstr "" #. module: website_slides #. openerp-web -#: code:addons/website_slides/static/src/xml/website_slides.xml:8 -#: model_terms:ir.ui.view,arch_db:website_slides.home -#: model_terms:ir.ui.view,arch_db:website_slides.slides_channel_header +#: code:addons/website_slides/static/src/js/slides_upload.js:26 #, python-format -msgid "Upload Presentation" +msgid "Upload a document" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__user_id +msgid "Uploaded by" msgstr "" #. module: website_slides #. openerp-web -#: code:addons/website_slides/static/src/xml/website_slides.xml:12 +#: code:addons/website_slides/static/src/xml/website_slides_upload.xml:176 #, python-format -msgid "Uploading presentation..." +msgid "Uploading Image..." msgstr "" #. module: website_slides -#: model_terms:slide.channel,description:website_slides.channel_private -msgid "Used to publish internal slides of company." +#. openerp-web +#: code:addons/website_slides/static/src/xml/website_slides_upload.xml:36 +#, python-format +msgid "Uploading document ..." +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_invite__template_id +msgid "Use template" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,help:website_slides.field_slide_channel__tag_ids +msgid "Used to categorize and filter displayed channels/courses" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_slide__user_vote +msgid "User vote" msgstr "" #. module: website_slides -#: model_terms:slide.channel,description:website_slides.channel_partial -msgid "Used to publish slides in partner network privately." +#: model:ir.model,name:website_slides.model_res_users +msgid "Users" msgstr "" #. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/js/slides_upload.js:333 #: selection:slide.slide,slide_type:0 +#, python-format msgid "Video" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slides_channel_header -msgid "Videos" +#: model_terms:ir.ui.view,arch_db:website_slides.course_slides_cards +#: model_terms:ir.ui.view,arch_db:website_slides.courses_home +#: model_terms:ir.ui.view,arch_db:website_slides.slides_home_achievements_small +#: model_terms:ir.ui.view,arch_db:website_slides.slides_home_users_small +msgid "View all" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view -#: model_terms:ir.ui.view,arch_db:website_slides.slides_grid_view -msgid "Views" +#: model_terms:ir.ui.view,arch_db:website_slides.embed_slide +msgid "View fullscreen" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.related_slides -msgid "Views ." +#: model_terms:ir.ui.view,arch_db:website_slides.slide_aside_card +msgid "Views •" msgstr "" #. module: website_slides @@ -1583,15 +3197,38 @@ msgid "Visible on current website" msgstr "" #. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_slide_partner__vote +msgid "Vote" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,field_description:website_slides.field_slide_channel__karma_slide_vote +msgid "Vote on slide" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/js/slides_slide_like.js:67 +#, python-format +msgid "Votes and comments are disabled for this course" +msgstr "" + +#. module: website_slides #: model_terms:ir.ui.view,arch_db:website_slides.view_slide_slide_search msgid "Waiting for validation" msgstr "" #. module: website_slides -#: model:slide.slide,description:website_slides.slide_7 -msgid "Warehouse management software for the 21st century.\n" -"\n" -"Discover Odoo Inventory: https://www.odoo.com/page/warehouse" +#: model:slide.slide,description:website_slides.slide_slide_demo_1_4 +msgid "We had a little chat with Harry Potted, sure he had interesting things to say !" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/js/slides_upload.js:328 +#: selection:slide.slide,slide_type:0 +#, python-format +msgid "Web Page" msgstr "" #. module: website_slides @@ -1603,6 +3240,16 @@ msgid "Website" msgstr "" #. module: website_slides +#: selection:gamification.challenge,category:0 +msgid "Website / Forum" +msgstr "" + +#. module: website_slides +#: selection:gamification.challenge,category:0 +msgid "Website / Slides" +msgstr "" + +#. module: website_slides #: model:ir.model.fields,field_description:website_slides.field_slide_channel__website_message_ids #: model:ir.model.fields,field_description:website_slides.field_slide_slide__website_message_ids msgid "Website Messages" @@ -1610,6 +3257,7 @@ msgstr "" #. module: website_slides #: model:ir.model.fields,field_description:website_slides.field_slide_channel__website_url +#: model:ir.model.fields,field_description:website_slides.field_slide_channel_invite__channel_url #: model:ir.model.fields,field_description:website_slides.field_slide_slide__website_url msgid "Website URL" msgstr "" @@ -1645,31 +3293,177 @@ msgid "Website opengraph image" msgstr "" #. module: website_slides +#: model:slide.answer,text_value:website_slides.slide_slide_demo_1_4_question_1_2 +msgid "What was the question again ?" +msgstr "" + +#. module: website_slides +#: model:ir.model.fields,help:website_slides.field_slide_channel__upload_group_ids +msgid "Who can publish: responsible, members of upload_group_ids if defined or website publisher group members." +msgstr "" + +#. module: website_slides +#: model:slide.category,name:website_slides.slide_category_demo_2_1 +msgid "Wood" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/xml/website_slides_channel.xml:37 +#, python-format +msgid "Write here a short description of your first course" +msgstr "" + +#. module: website_slides +#: model_terms:slide.slide,html_content:website_slides.slide_slide_demo_1_4 +#: model_terms:slide.slide,html_content:website_slides.slide_slide_demo_2_1 +msgid "Write one or two paragraphs describing your product or services. <br>To be successful your content needs to be useful to your readers." +msgstr "" + +#. module: website_slides +#: model_terms:slide.slide,html_content:website_slides.slide_slide_demo_1_4 +#: model_terms:slide.slide,html_content:website_slides.slide_slide_demo_2_1 +msgid "Write one or two paragraphs describing your product, services or a specific feature.<br> To be successful your content needs to be useful to your readers." +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/xml/slide_quiz.xml:46 +#: code:addons/website_slides/static/src/xml/slide_quiz.xml:54 +#: code:addons/website_slides/static/src/xml/slide_quiz.xml:56 +#, python-format +msgid "XP" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/xml/slide_quiz.xml:71 +#, python-format +msgid "XP !" +msgstr "" + +#. module: website_slides +#: model:slide.answer,text_value:website_slides.slide_slide_demo_1_4_question_0_0 +#: model:slide.answer,text_value:website_slides.slide_slide_demo_1_4_question_1_0 +#: model:slide.answer,text_value:website_slides.slide_slide_demo_2_0_question_0_0 +#: model:slide.answer,text_value:website_slides.slide_slide_demo_2_0_question_1_0 +#: model:slide.answer,text_value:website_slides.slide_slide_demo_5_3_question_0_0 +msgid "Yes" +msgstr "" + +#. module: website_slides #. openerp-web -#: code:addons/website_slides/static/src/js/slides_upload.js:347 +#: code:addons/website_slides/static/src/js/slides_upload.js:424 #, python-format msgid "You can not upload password protected file." msgstr "" #. module: website_slides +#: code:addons/website_slides/models/slide_slide.py:456 +#, python-format +msgid "You cannot mark a slide as completed if you are not among its members." +msgstr "" + +#. module: website_slides +#: code:addons/website_slides/models/slide_slide.py:429 +#, python-format +msgid "You cannot mark a slide as viewed if you are not among its members." +msgstr "" + +#. module: website_slides +#: code:addons/website_slides/models/slide_slide.py:489 +#, python-format +msgid "You cannot mark a slide quiz as completed if you are not among its members." +msgstr "" + +#. module: website_slides +#: code:addons/website_slides/models/slide_channel.py:369 +#, python-format +msgid "You cannot send invitations for channels that are not set as 'invite'." +msgstr "" + +#. module: website_slides +#: code:addons/website_slides/controllers/main.py:774 +#, python-format +msgid "You cannot upload on this channel." +msgstr "" + +#. module: website_slides #. openerp-web -#: code:addons/website_slides/static/src/js/slides_like.js:46 +#: code:addons/website_slides/static/src/js/slides_slide_like.js:63 #, python-format -msgid "You have already voted for this slide" +msgid "You don't have access to this lesson" msgstr "" #. module: website_slides #. openerp-web -#: code:addons/website_slides/static/src/xml/website_slides.xml:36 +#: code:addons/website_slides/static/src/js/slides_slide_like.js:69 #, python-format -msgid "Youtube Video URL" +msgid "You don't have enough karma to vote" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/xml/slide_quiz.xml:71 +#, python-format +msgid "You gained" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/js/slides_course_join.js:59 +#, python-format +msgid "You have already joined this channel" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/js/slides_slide_like.js:61 +#, python-format +msgid "You have already voted for this lesson" +msgstr "" + +#. module: website_slides +#: model:mail.template,subject:website_slides.mail_template_slide_channel_invite +msgid "You have been invited to join ${object.channel_id.name}" msgstr "" #. module: website_slides #. openerp-web -#: code:addons/website_slides/static/src/xml/website_slides.xml:34 +#: code:addons/website_slides/static/src/js/slides_course_quiz.js:91 #, python-format -msgid "Youtube or Google Doc URL" +msgid "You must be logged to submit the quiz." +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/js/slides_slide_like.js:65 +#, python-format +msgid "You must be member of this course to vote" +msgstr "" + +#. module: website_slides +#: model:slide.channel.tag.group,name:website_slides.slide_channel_tag_group_level +msgid "Your Level" +msgstr "" + +#. module: website_slides +#: model:slide.channel.tag.group,name:website_slides.slide_channel_tag_group_role +msgid "Your Role" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/xml/website_slides_upload.xml:145 +#, python-format +msgid "Youtube Link" +msgstr "" + +#. module: website_slides +#. openerp-web +#: code:addons/website_slides/static/src/xml/website_slides_upload.xml:147 +#, python-format +msgid "Youtube Video URL" msgstr "" #. module: website_slides @@ -1683,24 +3477,23 @@ msgid "Youtube or Google Document URL" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_social_email -msgid "by email!" +#: model_terms:ir.ui.view,arch_db:website_slides.achievement_card +msgid "achieved" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.home -msgid "is empty." +#: model_terms:ir.ui.view,arch_db:website_slides.slides_home_user_profile_small +msgid "bg-200" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_detail_view -msgid "is private" +#: model_terms:ir.ui.view,arch_db:website_slides.course_nav +msgid "breadcrumb" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.embed_slide -#: model_terms:ir.ui.view,arch_db:website_slides.embed_slide_forbidden -msgid "is private." +#: model_terms:ir.ui.view,arch_db:website_slides.slide_social_email +msgid "by email!" msgstr "" #. module: website_slides @@ -1709,24 +3502,19 @@ msgid "login" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slides_search -msgid "results found for the given criteria" +#: model_terms:ir.ui.view,arch_db:website_slides.course_card +msgid "steps" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.related_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slides_grid_view -msgid "slide.name" -msgstr "" - -#. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.embed_slide -msgid "suggest_slide.name" +#: model_terms:ir.ui.view,arch_db:website_slides.slide_social_email +msgid "to send this" msgstr "" #. module: website_slides -#: model_terms:ir.ui.view,arch_db:website_slides.slide_social_email -msgid "to send this" +#: model_terms:ir.ui.view,arch_db:website_slides.course_slides_list_slide +#: model_terms:ir.ui.view,arch_db:website_slides.slide_aside_training_category +msgid "xp" msgstr "" #. module: website_slides diff --git a/addons/website_slides/models/slide_channel.py b/addons/website_slides/models/slide_channel.py index 8f5e2918c0c..5e1492ded94 100644 --- a/addons/website_slides/models/slide_channel.py +++ b/addons/website_slides/models/slide_channel.py @@ -6,6 +6,7 @@ import uuid from odoo import api, fields, models, tools, _ from odoo.addons.http_routing.models.ir_http import slug +from odoo.addons.gamification.models.gamification_karma_rank import KarmaError from odoo.exceptions import UserError from odoo.osv import expression @@ -46,15 +47,22 @@ class ChannelUsersRelation(models.Model): record.completion = math.ceil(100.0 * slide_done / slide_total) def _write(self, values): + partner_karma = False if 'completion' in values and values['completion'] >= 100: values['completed'] = True - result = super(ChannelUsersRelation, self)._write(values) - partner_has_completed = {channel_partner.partner_id.id: channel_partner.channel_id for channel_partner in self} - users = self.env['res.users'].sudo().search([('partner_id', 'in', list(partner_has_completed.keys()))]) + incomplete_channel_partners = self.filtered(lambda cp: not cp.completed) + partner_karma = dict.fromkeys(incomplete_channel_partners.mapped('partner_id').ids, 0) + for channel_partner in incomplete_channel_partners: + partner_karma[channel_partner.partner_id.id] += channel_partner.channel_id.karma_gen_channel_finish + partner_karma = {partner_id: karma_to_add + for partner_id, karma_to_add in partner_karma.items() if karma_to_add > 0} + + result = super(ChannelUsersRelation, self)._write(values) + + if partner_karma: + users = self.env['res.users'].sudo().search([('partner_id', 'in', list(partner_karma.keys()))]) for user in users: - users.add_karma(partner_has_completed[user.partner_id.id].karma_gen_channel_finish) - else: - result = super(ChannelUsersRelation, self)._write(values) + users.add_karma(partner_karma[user.partner_id.id]) return result @@ -107,7 +115,7 @@ class Channel(models.Model): total_time = fields.Float('# Hours', compute='_compute_slides_statistics', digits=(10, 4), store=True) # configuration allow_comment = fields.Boolean( - "Allow comment on Content", default=False, + "Allow rating on Course", default=False, help="If checked it allows members to either:\n" " * like content and post comments on documentation course;\n" " * post comment and review on training course;") @@ -146,10 +154,15 @@ class Channel(models.Model): can_upload = fields.Boolean('Can Upload', compute='_compute_can_upload') # karma generation karma_gen_slide_vote = fields.Integer(string='Lesson voted', default=1) - karma_gen_channel_share = fields.Integer(string='Course shared', default=2) karma_gen_channel_rank = fields.Integer(string='Course ranked', default=5) karma_gen_channel_finish = fields.Integer(string='Course finished', default=10) - # TODO DBE : Add karma based action rules (like in forum) + # Karma based actions + karma_review = fields.Integer('Add a review', default=10, help="Karma needed to add a review on the course") + karma_slide_comment = fields.Integer('Add a comment', default=3, help="Karma needed to add a comment on a slide of this course") + karma_slide_vote = fields.Integer('Vote on slide', default=3, help="Karma needed to like/dislike a slide of this course.") + can_review = fields.Boolean('Can Review', compute='_compute_action_rights') + can_comment = fields.Boolean('Can Comment', compute='_compute_action_rights') + can_vote = fields.Boolean('Can Vote', compute='_compute_action_rights') @api.depends('slide_ids.is_published') def _compute_slide_last_update(self): @@ -173,8 +186,7 @@ class Channel(models.Model): for cp in channel_partners: result.setdefault(cp.channel_id.id, []).append(cp.partner_id.id) for channel in self: - channel.valid_channel_partner_ids = result.get(channel.id, False) - channel.is_member = self.env.user.partner_id.id in channel.valid_channel_partner_ids if channel.valid_channel_partner_ids else False + channel.is_member = channel.is_member = self.env.user.partner_id.id in result.get(channel.id, []) @api.depends('slide_ids.slide_type', 'slide_ids.is_published', 'slide_ids.completion_time', 'slide_ids.likes', 'slide_ids.dislikes', 'slide_ids.total_views') @@ -257,6 +269,19 @@ class Channel(models.Model): if channel.id: # avoid to perform a slug on a not yet saved record in case of an onchange. channel.website_url = '%s/slides/%s' % (base_url, slug(channel)) + @api.multi + def _compute_action_rights(self): + user_karma = self.env.user.karma + for channel in self: + if channel.can_publish: + channel.can_vote = channel.can_comment = channel.can_review = True + elif not channel.is_member: + channel.can_vote = channel.can_comment = channel.can_review = False + else: + channel.can_review = user_karma >= channel.karma_review + channel.can_comment = user_karma >= channel.karma_slide_comment + channel.can_vote = user_karma >= channel.karma_slide_vote + # --------------------------------------------------------- # ORM Overrides # --------------------------------------------------------- @@ -312,6 +337,8 @@ class Channel(models.Model): through the 'Presentation Published' email, it should be considered as a note as we don't want all channel followers to be notified of this answer. """ self.ensure_one() + if kwargs.get('message_type') == 'comment' and not self.can_review: + raise KarmaError(_('Not enough karma to review')) if parent_id: parent_message = self.env['mail.message'].sudo().browse(parent_id) if parent_message.subtype_id and parent_message.subtype_id == self.env.ref('website_slides.mt_channel_slide_published'): @@ -408,6 +435,33 @@ class Channel(models.Model): for channel in self: channel._action_add_members(channel.mapped('enroll_group_ids.users.partner_id')) + def _remove_membership(self, partner_ids): + """ Unlink (!!!) the relationships between the passed partner_ids + and the channels and their slides. """ + if not partner_ids: + raise ValueError("Do not use this method with an empty partner_id recordset") + + removed_slide_partner_domain = [] + removed_channel_partner_domain = [] + for channel in self: + removed_slide_partner_domain = expression.OR([ + removed_slide_partner_domain, + [('partner_id', 'in', partner_ids.ids), + ('slide_id', 'in', channel.slide_ids.ids)] + ]) + + removed_channel_partner_domain = expression.OR([ + removed_channel_partner_domain, + [('partner_id', 'in', partner_ids.ids), + ('channel_id', '=', channel.id)] + ]) + + if removed_slide_partner_domain: + self.env['slide.slide.partner'].sudo().search(removed_slide_partner_domain).unlink() + + if removed_channel_partner_domain: + self.env['slide.channel.partner'].sudo().search(removed_channel_partner_domain).unlink() + # --------------------------------------------------------- # Rating Mixin API # --------------------------------------------------------- @@ -435,9 +489,9 @@ class Channel(models.Model): if uncategorized_slides or force_void: category_data.append({ 'category': False, 'id': False, - 'name': _('Uncategorized'), 'slug_name': _('Uncategorized'), + 'name': _('Uncategorized'), 'slug_name': _('Uncategorized'), 'total_slides': len(uncategorized_slides), - 'slides': uncategorized_slides[(offset or 0):(limit or len(uncategorized_slides))], + 'slides': uncategorized_slides[(offset or 0):(offset + limit or len(uncategorized_slides))], }) # Then all categories by natural order for category in all_categories: @@ -448,9 +502,8 @@ class Channel(models.Model): 'category': category, 'id': category.id, 'name': category.name, 'slug_name': slug(category), 'total_slides': len(category_slides), - 'slides': category_slides[(offset or 0):(limit or len(category_slides))], + 'slides': category_slides[(offset or 0):(limit + offset or len(category_slides))], }) - return category_data diff --git a/addons/website_slides/models/slide_slide.py b/addons/website_slides/models/slide_slide.py index 53378df947c..c71d9acb441 100644 --- a/addons/website_slides/models/slide_slide.py +++ b/addons/website_slides/models/slide_slide.py @@ -13,6 +13,7 @@ from werkzeug import urls from odoo import api, fields, models, _ from odoo.addons.http_routing.models.ir_http import slug +from odoo.addons.gamification.models.gamification_karma_rank import KarmaError from odoo.exceptions import Warning, UserError from odoo.http import request from odoo.addons.http_routing.models.ir_http import url_for @@ -314,6 +315,14 @@ class Slide(models.Model): # --------------------------------------------------------- @api.multi + @api.returns('mail.message', lambda value: value.id) + def message_post(self, message_type='notification', **kwargs): + self.ensure_one() + if message_type == 'comment' and not self.channel_id.can_comment: # user comments have a restriction on karma + raise KarmaError(_('Not enough karma to comment')) + return super(Slide, self).message_post(message_type=message_type, **kwargs) + + @api.multi def get_access_action(self, access_uid=None): """ Instead of the classic form view, redirect to website if it is published. """ self.ensure_one() @@ -395,7 +404,9 @@ class Slide(models.Model): ('slide_id', 'in', self.ids), ('partner_id', '=', self.env.user.partner_id.id) ]) - new_slides = self_sudo - slide_partners.mapped('slide_id') + slide_id = slide_partners.mapped('slide_id') + new_slides = self_sudo - slide_id + channel = slide_id.channel_id for slide_partner in slide_partners: if upvote: @@ -403,13 +414,15 @@ class Slide(models.Model): else: new_vote = 0 if slide_partner.vote == 1 else -1 slide_partner.vote = new_vote + self.env.user.add_karma(-channel.karma_gen_slide_vote if new_vote == 0 else channel.karma_gen_slide_vote) for new_slide in new_slides: new_vote = 1 if upvote else -1 new_slide.write({ 'slide_partner_ids': [(0, 0, {'vote': new_vote, 'partner_id': self.env.user.partner_id.id})] }) - self.env.user.add_karma(new_slide.channel_id.karma_gen_slide_vote) + channel = new_slides.channel_id + self.env.user.add_karma(-channel.karma_gen_slide_vote if new_vote == 0 else channel.karma_gen_slide_vote) def action_set_viewed(self, quiz_attempts_inc=False): if not all(slide.channel_id.is_member for slide in self): @@ -438,34 +451,26 @@ class Slide(models.Model): 'quiz_attempts_count': 1 if quiz_attempts_inc else 0, 'vote': 0} for new_slide in new_slides]) - def action_set_completed(self, quiz_attempts_inc=False): + def action_set_completed(self): if not all(slide.channel_id.is_member for slide in self): raise UserError(_('You cannot mark a slide as completed if you are not among its members.')) - return self._action_set_completed(self.env.user.partner_id, quiz_attempts_inc=quiz_attempts_inc) + return self._action_set_completed(self.env.user.partner_id) - def _action_set_completed(self, target_partner, quiz_attempts_inc=False): + def _action_set_completed(self, target_partner): self_sudo = self.sudo() SlidePartnerSudo = self.env['slide.slide.partner'].sudo() existing_sudo = SlidePartnerSudo.search([ ('slide_id', 'in', self.ids), ('partner_id', '=', target_partner.id) ]) - if quiz_attempts_inc: - for existing_slide in existing_sudo: - existing_slide.write({ - 'completed': True, - 'quiz_attempts_count': existing_slide.quiz_attempts_count + 1 - }) - else: - existing_sudo.write({'completed': True}) + existing_sudo.write({'completed': True}) new_slides = self_sudo - existing_sudo.mapped('slide_id') SlidePartnerSudo.create([{ 'slide_id': new_slide.id, 'channel_id': new_slide.channel_id.id, 'partner_id': target_partner.id, - 'quiz_attempts_count': 1 if quiz_attempts_inc else 0, 'vote': 0, 'completed': True} for new_slide in new_slides]) @@ -477,14 +482,15 @@ class Slide(models.Model): points = 0 for slide in self: - if not slide.user_membership_id or slide.user_membership_id.completed or not slide.user_membership_id.quiz_attempts_count: + user_membership_sudo = slide.user_membership_id.sudo() + if not user_membership_sudo or user_membership_sudo.completed or not user_membership_sudo.quiz_attempts_count: continue gains = [slide.quiz_first_attempt_reward, slide.quiz_second_attempt_reward, slide.quiz_third_attempt_reward, slide.quiz_fourth_attempt_reward] - points += gains[slide.user_membership_id.quiz_attempts_count-1] if slide.user_membership_id.quiz_attempts_count <= len(gains) else gains[-1] + points += gains[user_membership_sudo.quiz_attempts_count - 1] if user_membership_sudo.quiz_attempts_count <= len(gains) else gains[-1] return self.env.user.sudo().add_karma(points) @@ -512,7 +518,7 @@ class Slide(models.Model): slide_partner = slide_partners_map.get(slide.id) if slide.question_ids and slide_partner: if slide_partner.quiz_attempts_count: - result[slide.id]['quiz_karma_gain'] = gains[slide_partner.quiz_attempts_count] if slide_partner.quiz_attempts_count <= len(gains) else gains[-1] + result[slide.id]['quiz_karma_gain'] = gains[slide_partner.quiz_attempts_count] if slide_partner.quiz_attempts_count < len(gains) else gains[-1] result[slide.id]['quiz_attempts_count'] = slide_partner.quiz_attempts_count if quiz_done or slide_partner.completed: result[slide.id]['quiz_karma_won'] = gains[slide_partner.quiz_attempts_count-1] if slide_partner.quiz_attempts_count < len(gains) else gains[-1] diff --git a/addons/website_slides/static/src/img/quiz_modal_success.svg b/addons/website_slides/static/src/img/quiz_modal_success.svg new file mode 100644 index 00000000000..7bb62ea18a9 --- /dev/null +++ b/addons/website_slides/static/src/img/quiz_modal_success.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="377" height="503"><defs><filter id="a" width="218.6%" height="210.3%" x="-59.3%" y="-55.1%" filterUnits="objectBoundingBox"><feOffset in="SourceAlpha" result="shadowOffsetOuter1"/><feGaussianBlur in="shadowOffsetOuter1" result="shadowBlurOuter1" stdDeviation="110"/><feColorMatrix in="shadowBlurOuter1" result="shadowMatrixOuter1" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.126174607 0"/><feMerge><feMergeNode in="shadowMatrixOuter1"/><feMergeNode in="SourceGraphic"/></feMerge></filter></defs><g fill="none" fill-rule="evenodd" filter="url(#a)" transform="scale(-1 1) rotate(10 -170.596 -2124.816)"><path fill="#DD9E63" d="M200.228 136.773l-.97 5.966 3.6 8.464-13.154-2.359c-2.309 4.07 1.061 8.372 10.107 12.904 3.324 1.295 5.078 1.156 5.262-.416l2.078 4.44.415.415 18.523 10.223 9.554 2.914 30.74 8.88-5.507-18.27c-3.046.832-8.4 1.063-16.062.693l14.124-7.353-.696.752.835-.613 1.246-.833 4.016-2.914-23.955-42.317-9.14-9.296-4.292-3.053-30.602 24.42 3.878 7.353z"/><path fill="#17252E" d="M342.943 366.508l-.139-.14c0 .092-.046.186-.14.279l-.976-.14h-.976l.28-.278L333 364c7.53 15.138 12.41 28.836 14.641 41.096 3.08 16.986 4.64 32.406 4.683 46.262l12.708-2.261-6.75-38.29-15.339-43.882v-.417zM108 100.758c-.647-.648-1.551-1.84-2.105-2.394-15.432-15.187-39.272-33.43-71.52-54.727V31.969l-3.189-15.278L16.494.022C9.287-.533 3.788 9.374 0 29.746c8.87 9.816 16.217 17.317 22.038 22.502 11.459 25.743 25.202 49.275 41.004 69.368 17.28 9.26 32.644 3.938 44.01-16.803"/><path fill="#321714" d="M116 148l14-1.82-5.142-12.18c.094 5.133-2.857 9.8-8.858 14"/><path fill="#5E2A1C" d="M344 289L363 301 357.396 289.061z"/><path fill="#17252E" d="M322.087 175.43a298.543 298.543 0 0 0-9.12-14.039 5.557 5.557 0 0 0-.828-1.391c.184 1.112.46 2.179.829 3.198a223.398 223.398 0 0 1 1.935 10.842c1.013 7.875 1.243 15.567.69 23.073-.276 3.15-.69 6.301-1.244 9.452a2.631 2.631 0 0 0-.138.834V208.094c9.12 40.495 8.382 70.982-2.211 91.462 4.422-2.688 8.291-5.607 11.606-8.757 9.95-8.897 16.489 15.66 19.62 73.67 1.197-3.8 2.212-7.553 3.04-11.26.46.092.967.231 1.52.417 23.303 7.91 44.755 13.517 64.357 16.82l-8.682-49.268c-12.076-6.763-24.923-13.368-38.542-19.815l-19.481-12.093 12.02.416 38.134-2.78 19.758 5.56c6.448-6.486 9.533-12.973 9.257-19.459l-13.954-12.232-11.883 8.201c-14.554-8.248-26.943-14.734-37.167-19.46-5.16-2.317-9.764-4.216-13.817-5.699a46.205 46.205 0 0 0-5.25-1.529c1.105-13.437-1.98-28.494-9.258-45.175-3.04-6.95-6.77-14.177-11.191-21.684z"/><path fill="#8C633C" d="M244.453 170.75c7.31.398 13.64.315 16.547-.578l-1.538-7.023-.793.595.661-.744-14.877 7.75z"/><path fill="#A92121" d="M264.154 160.259l-5.154 3.75c10.533-.759 21.498-.795 29.741.725l2.748.57c7.42 1.615 14.42 4.35 19.825 7.864.915-3.23 1.726-7.252 2.275-10.862-.51-.818-1.121-1.772-1.49-2.846l-3.573-.854c-4.763-1.236-10.442-1.758-17.037-1.568h-2.748c-7.053.474-15.52 1.321-24.587 3.22zm-60.15 11.836l7.495 9.23 1.103.28c5.707 1.302 11.713 3.23 17.788 5.277 2.669.836 5.337 1.768 8.007 2.791 1.749.745 3.506 1.512 5.347 2.257 6.074 2.605 12.212 5.3 18.563 8.558L267 203l-31.093-24.578-9.525-2.931-18.086-9.073-.414-.418-7.606.512-.276-.14v.698l4.004 4.746v.279zM156.477 221c-14.296 20.087-29.667 62.398-46.114 126.935-.934 5.486-1.854 10.52-3.162 15.077 4.111-12.926 13.295-30.181 27.404-51.756 14.577-23.62 22.526-52.454 24.395-86.49L156.477 221z"/><path fill="#6E1414" d="M360.542 411.783c11.138-9.89 24.829-10.215 41.072-.978 6.243 3.059 12.472 4.846 18.745 6.193l-7.12-40.378c-15.604-2.143-39.017-5.35-70.239-9.62l15.315 44.084 2.227.7zm-101.268-247.55l1.587 6.787 5.177 16.603-30.038-8.49 30.464 23.778c5.042 2.546 10.172 5.998 15.4 9.089 2.428-1.727 5.329-4.394 7.57-6.304a63.564 63.564 0 0 1 2.801-2.319c2.522-2.362 4.762-4.727 6.723-7.091 6.07-7.182 10.52-15.695 13.042-24.15-5.51-3.365-12.046-5.82-19.61-7.365-.933-.182-1.867-.363-2.8-.546-8.404-1.454-17.991-1.486-28.729-.76l-1.587.767zm-100.6 61.223c-1.857 33.97-10.02 62.742-24.495 86.317-14.01 21.533-23.056 38.75-27.138 51.65v.278c-.093.093-.186.28-.28.558a2.65 2.65 0 0 0-.138.834c-.185.28-.279.604-.279.975v.14c-3.99 13.922-9.834 22.832-17.535 26.73L87 395.863c6.587-.28 13.035-.743 19.344-1.394 17.722-1.855 34.7-5.475 50.938-10.859 2.876-.741 5.66-1.392 8.35-1.948 2.876-.465 5.614-.928 8.21-1.393 11.32-1.763 20.831-1.95 28.532-.557v.975l.278-.975c1.114.28 2.273.557 3.479.836 8.072 2.134 13.731 6.31 16.98 12.53 1.669 3.248 4.174 5.801 7.515 7.657 2.319 1.299 5.01 2.367 8.072 3.202 1.113.186 2.273.418 3.478.696.558 0 1.207.046 1.95.139.649.093 1.391.232 2.225.417 4.547.28 9.79.14 15.727-.417h.836c11.226-1.206 20.226-.65 27 1.672.741.185 1.437.37 2.086.556l-13.639-25.617c-29.844-51.171-45.756-78.088-47.735-80.748-12.805-16.985-31.732-38.054-56.783-63.207-2.69-2.598-5.428-5.243-8.211-7.935a249.14 249.14 0 0 0-8.628-8.493l1.67 4.456z"/><path fill="#1A1B19" d="M201.018 137.549L197.107 130.186 227.973 105.73 232.302 108.787 233 107.537 221.827 96.838 207.861 86 183 120.597 188.168 127.962 183.42 136.437 190.403 149.638 203.671 152 200.04 143.523 201.018 137.549"/><path fill="#BE242B" d="M88.809 392.938c-1.866 1.273-4.675 2.335-6.809 3.062 1.422-.091 3.578-.137 5-.137"/><path fill="#2A4454" d="M291.425 408.806c6.33 16.017 16.288 32.033 29.255 48.05l32.599-5.735c-.067-13.728-1.613-28.99-4.637-45.788-2.208-12.226-7.042-25.886-14.5-40.983-43.822-26.488-63.385-20.792-56.941 17.088L290.734 407c.277.648.506 1.25.691 1.806zm-125.91-267.711c-12.163-6.753-25.257-11.886-39.278-15.4-2.508-6.937-8.59-15.168-18.247-24.695a64.781 64.781 0 0 0-1.81 3.607c-11.422 20.717-25.897 26.102-43.262 16.852 7.428 9.342 15.45 18.48 23.9 26.71a179.683 179.683 0 0 0 8.775 8.186 377.875 377.875 0 0 0 9.333 7.908l1.253 1.387c18.387 15.17 37.37 29.475 58.543 39.279a218.728 218.728 0 0 0 8.218 3.469c18.015 7.492 37.752 11.267 57.624 14.967l8.079 1.388c1.764.368 3.575.647 5.432.831 1.021.185 1.997.324 2.925.416l-34.266-44.534-1.113-.277-7.522-8.88v-.277l-4.04-4.717v-.693c-8.263-7.954-17.039-14.845-26.325-20.671a105.437 105.437 0 0 0-8.218-4.856z"/><path fill="#192A35" d="M130 146.18L116 148c6-4.2 8.952-8.867 8.858-14L130 146.18"/><path fill="#36576B" d="M156.23 221.4c2.962 2.785 6.15 5.811 8.926 8.689 2.778 2.691 5.509 5.337 8.193 7.935 24.997 25.157 43.882 46.229 56.658 63.217a270.764 270.764 0 0 1 8.054 11.417c.864 1.361 14.056 24.475 39.576 69.342-6.48-37.966 12.313-43.675 56.38-17.127l7.083 2.228.693.279.973.139c.093-.093.138-.187.138-.278l.14.139v.417l70.341 9.637-1.334-7.557c-19.514-3.647-40.868-9.586-64.172-17.47a12.468 12.468 0 0 0-1.527-.417 136.644 136.644 0 0 1-3.055 11.278c-3.148-58.11-9.002-82.357-19-73.446-3.333 3.157-7.221 6.08-11.666 8.773 10.647-20.515 11.388-51.055 2.223-91.621v-.14-.556c0-.278.045-.557.138-.835.557-3.157.973-6.313 1.25-9.469.556-7.52.325-15.224-.693-23.113-.557-3.621-1.219-6.936-1.96-10.555-.555 3.527-1.281 6.563-2.206 9.719-2.5 8.633-6.759 16.616-12.776 23.95-1.945 2.413-4.166 4.827-6.666 7.24a63.466 63.466 0 0 0-2.777 2.367 101.299 101.299 0 0 1-6.943 5.57 260.687 260.687 0 0 0-15.276-8.633c-1.573-.836-3.148-1.67-4.721-2.507-6.388-3.249-12.637-6.173-18.747-8.771a323.35 323.35 0 0 1-5.416-2.229 137.827 137.827 0 0 0-8.054-2.784c-6.11-2.042-12.035-3.714-17.775-5.013l34.161 44.696a36.576 36.576 0 0 1-2.916-.418 50.824 50.824 0 0 1-5.416-.834c-2.685-.465-5.37-.93-8.054-1.393-19.812-3.714-38.697-9.329-56.658-16.848a217.273 217.273 0 0 1-8.193-3.482c-21.107-9.84-40.825-22.37-59.156-37.595l50.23 56.06z"/></g></svg>
\ No newline at end of file diff --git a/addons/website_slides/static/src/js/slides_course_fullscreen_player.js b/addons/website_slides/static/src/js/slides_course_fullscreen_player.js index d5df0540f3e..15e7889412c 100644 --- a/addons/website_slides/static/src/js/slides_course_fullscreen_player.js +++ b/addons/website_slides/static/src/js/slides_course_fullscreen_player.js @@ -7,395 +7,546 @@ odoo.define('website_slides.fullscreen', function (require) { var core = require('web.core'); var QWeb = core.qweb; - var tag = document.createElement('script'); + var session = require('web.session'); - var QuizWidget = require('website_slides.quiz'); + var Quiz = require('website_slides.quiz'); - tag.src = "https://www.youtube.com/iframe_api"; - var firstScriptTag = document.getElementsByTagName('script')[0]; - firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); + /** + * Helper: Get the slide dict matching the given criteria + * + * @private + * @param {Array<Object>} slideList List of dict reprensenting a slide + * @param {Object} matcher (see https://underscorejs.org/#matcher) + */ + var findSlide = function (slideList, matcher) { + var slideMatch = _.matcher(matcher); + return _.find(slideList, slideMatch); + }; - var Fullscreen = publicWidget.Widget.extend({ - custom_events: { - quiz_next_slide: '_goToNextSlide', - quiz_completed: '_onQuizCompleted' - }, - /** - * @override - * @param {Object} el - * @param {Object} data holding channelId and optionally upload and publish control parameters - */ - init: function (el, courseId, slideId, userId) { - this.courseID = parseInt(courseId, 10); - this.slideID = parseInt(slideId, 10); - this.userID = parseInt(userId, 10); - this.course = undefined; - this.slide = undefined; - this.slides = []; - this.nextSlide = undefined; - this.previousSlide = undefined; - this.url = undefined; - this.urlToSmallScreen = undefined; - this.activetab = undefined; - this.player = undefined; - this.goToQuiz = false; - this.slideTitle = undefined; - return this._super.apply(this,arguments); + /** + * This widget is responsible of display Youtube Player + * + * The widget will trigger an event `change_slide` when the video is at + * its end, and `slide_completed` when the player is at 30 sec before the + * end of the video (30 sec before is considered as completed). + */ + var VideoPlayer = publicWidget.Widget.extend({ + template: 'website.slides.fullscreen.video', + youtubeUrl: 'https://www.youtube.com/iframe_api', + + init: function (parent, slide) { + this.slide = slide; + return this._super.apply(this, arguments); }, start: function (){ var self = this; - this.url = window.location.pathname; - this.urlToSmallScreen = this.url.replace('/fullscreen',''); - this._getSlides(); - this._renderPlayer(); - this._bindListEvents(); - $(document).keydown(this._onKeyDown.bind(this)); - return this._super.apply(this, arguments); + return Promise.all([this._super.apply(this, arguments), this._loadYoutubeAPI()]).then(function() { + self._setupYoutubePlayer(); + }); }, - //-------------------------------------------------------------------------- - // Private - //-------------------------------------------------------------------------- - /** - * @private - * Renders the player accordingly to the current slide - */ - _renderPlayer: function (){ - var self = this; - + _loadYoutubeAPI: function () { var def = new Promise(function () {}); - if (this.slide.slide_type === 'webpage') { - this._fetchHtmlContent().then(function () { - self._renderWebpage(); - def.resolve(); - }); - } else { - if (this.slide.slide_type !== 'quiz') { - // no RPC, get slide data from existing DOM - var embed_url = $(this.slide.embed_code).attr('src'); - if (this.slide.slide_type === "video"){ - embed_url = "https://" + embed_url + "&rel=0&autoplay=1&enablejsapi=1&origin=" + window.location.origin; - } - $('.o_wslides_fs_player').html(QWeb.render('website.slides.fullscreen', { - slide: self.slide, - nextSlide: self.nextSlide, - questions: self.slide.quiz ? self.slide.quiz.questions: '', - embed_url: embed_url, - question_count: self.slide.quiz ? self.slide.quiz.questions.length : '', - letters: self.slide.quiz ? self.letters : '', - showMiniQuiz: self.goToQuiz - })); - - if(this.slide.slide_type === "video"){ - this._renderYoutubeIframe(); - } - def.resolve(); - } - } + if ($(document).find('script[src="' + this.youtubeUrl + '"]').length === 0) { + var $youtubeElement = $('<script/>', {src: this.youtubeUrl}); + $(document.head).append($youtubeElement); - if (this.slide.slide_type === "quiz" || this.goToQuiz) { - this._renderQuiz().then(function() { + // function called when the Youtube asset is loaded + // see https://developers.google.com/youtube/iframe_api_reference#Requirements + onYouTubeIframeAPIReady = function () { def.resolve(); - }); - } + }; - return def.then(function() { - self._renderTitle(); - }); - }, - _renderYoutubeIframe: function (){ - var self = this; - /** - * Due to issues of synchronization between the youtube api script and the widget's instanciation. - */ - try { - self._setupYoutubePlayer(); - } - catch (e) { - onYouTubeIframeAPIReady = function (){ - var self = this; - self._setupYoutubePlayer(); - }.bind(this); + } else { + def.resolve(); } - }, - _renderWebpage: function (){ - var self = this; - $(self.slide.htmlContent).appendTo('.o_wslides_fs_webpage_content'); - }, - - _renderQuiz: function (){ - var quizSlideData = _.extend(this.slide, { - completed: this.slide.done, - }); - var Quiz = new QuizWidget(this, quizSlideData); - return Quiz.appendTo('.o_wslides_fs_player'); - }, - - _renderTitle: function (){ - var self = this; - $('.o_wslides_fs_slide_title').empty().html(QWeb.render('website.course.fullscreen.title', { - slide: self.slide, - miniQuiz: self.goToQuiz - })); + return def; }, /** - * @private * Links the youtube api to the iframe present in the template + * + * @private */ _setupYoutubePlayer: function (){ - var self = this; - self.player = new YT.Player('youtube-player', { + this.player = new YT.Player('youtube-player' + this.slide.id, { host: 'https://www.youtube.com', - playerVars: {'autoplay': 1, 'origin': window.location.origin}, - autoplay: 1, + playerVars: { + 'autoplay': 1, + 'origin': window.location.origin + }, events: { - 'onReady': self._onPlayerReady, - 'onStateChange': this._onPlayerStateChange.bind(self) + 'onStateChange': this._onPlayerStateChange.bind(this) } }); }, /** - * @param {*} event * Specific method of the youtube api. * Whenever the player starts playing, a setinterval is created. * This setinterval is used to check te user's progress in the video. - * Once the user reaches a particular time in the video, the slide will be considered as completed if the video doesn't have a mini-quiz. - * This method also allows to automatically go to the next slide (or the quiz associated to the current video) once the video is over + * Once the user reaches a particular time in the video, the slide will be considered as completed + * if the video doesn't have a mini-quiz. + * This method also allows to automatically go to the next slide (or the quiz associated to the current + * video) once the video is over + * + * @private + * @param {*} event */ _onPlayerStateChange: function (event){ var self = this; - var tid; clearInterval(self.tid); - if (event.data === YT.PlayerState.PLAYING && !self.slide.done) { + if (event.data === YT.PlayerState.PLAYING && !self.slide.completed) { self.tid = setInterval(function (){ if (event.target.getCurrentTime){ var currentTime = event.target.getCurrentTime(); var totalTime = event.target.getDuration(); if (totalTime && currentTime > totalTime - 30){ clearInterval(self.tid); - if (!self.slide.hasQuiz && !self.slide.done){ - self.slide.done = true; - self._setSlideStateAsDone(); + if (!self.slide.hasQuestion && !self.slide.completed){ + self.trigger_up('slide_to_complete', self.slide); } } } }, 1000); } if (event.data === YT.PlayerState.ENDED){ - self.player = undefined; - self._goToNextSlide(); + this.player = undefined; + if (this.slide.hasNext) { + this.trigger_up('slide_go_next'); + } } }, + }); + + + /** + * This widget is responsible of navigation for one slide to another: + * - by clicking on any slide list entry + * - by mouse click (next / prev) + * - by recieving the order to go to prev/next slide (`goPrevious` and `goNext` public methods) + * + * The widget will trigger an event `change_slide` with + * the `slideId` and `isMiniQuiz` as data. + */ + var Sidebar = publicWidget.Widget.extend({ + events: { + "click .o_wslides_fs_sidebar_list_item": '_onClickTab', + }, + init: function (parent, slideList, defaultSlide) { + var result = this._super.apply(this, arguments); + this.slideEntries = slideList; + this.set('slideEntry', defaultSlide); + return result; + }, + start: function (){ + var self = this; + this.on('change:slideEntry', this, this._onChangeCurrentSlide); + return this._super.apply(this, arguments).then(function (){ + $(document).keydown(self._onKeyDown.bind(self)); + }); + }, + destroy: function () { + $(document).unbind('keydown', this._onKeyDown.bind(this)); + return this._super.apply(this, arguments); + }, + //-------------------------------------------------------------------------- + // Public + //-------------------------------------------------------------------------- + /** + * Change the current slide with the next one (if there is one). + * + * @public + */ + goNext: function () { + var currentIndex = this._getCurrentIndex(); + if (currentIndex < this.slideEntries.length-1) { + this.set('slideEntry', this.slideEntries[currentIndex+1]); + } + }, + /** + * Change the current slide with the previous one (if there is one). + * + * @public + */ + goPrevious: function () { + var currentIndex = this._getCurrentIndex(); + if (currentIndex >= 1) { + this.set('slideEntry', this.slideEntries[currentIndex-1]); + } + }, + /** + * Greens up the bullet when the slide is completed + * + * @public + * @param {Integer} slideId + */ + setSlideCompleted: function (slideId) { + var $elem = this.$('.fa-circle-thin[data-slide-id="'+slideId+'"]'); + $elem.removeClass('fa-circle-thin').addClass('fa-check text-success o_wslides_slide_completed'); + }, + /** + * Updates the progressbar whenever a lesson is completed + * + * @public + * @param {*} channelCompletion + */ + updateProgressbar: function (channelCompletion) { + var completion = Math.min(100, channelCompletion); + this.$('.progress-bar').css('width', completion + "%" ); + this.$('.o_wslides_progress_percentage').text(completion); + }, + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- /** + * Get the index of the current slide entry (slide and/or quiz) + */ + _getCurrentIndex: function () { + var slide = this.get('slideEntry'); + var currentIndex = _.findIndex(this.slideEntries, function (entry) { + return entry.id === slide.id && entry.isQuiz === slide.isQuiz; + }); + return currentIndex; + }, + //-------------------------------------------------------------------------- + // Handler + //-------------------------------------------------------------------------- + /** + * Handler called whenever the user clicks on a sub-quiz which is linked to a slide. + * This does NOT handle the case of a slide of type "quiz". + * By going through this handler, the widget will be able to determine that it has to render + * the associated quiz and not the main content. + * * @private - * Creates slides objects from every slide-list-cells attributes + * @param {*} ev */ - _getSlides: function (){ - var self = this; - var slides = $('.o_wslides_fs_sidebar_slide_tab'); - for (var i = 0; i < slides.length;i++){ - var slide = $(slides[i]); - self.slides.push(slide.data()); - this._getActiveSlide(); + _onClickMiniQuiz: function (ev){ + var slideID = parseInt($(ev.currentTarget).data().slide_id); + this.set('slideEntry',{ + slideID: slideID, + isMiniQuiz: true + }); + this.trigger_up('change_slide', this.get('slideEntry')); + }, + /** + * Handler called when the user clicks on a normal slide tab + * + * @private + * @param {*} ev + */ + _onClickTab: function (ev) { + ev.stopPropagation(); + var $elem = $(ev.currentTarget); + var isQuiz = $elem.data('isQuiz'); + var slideID = parseInt($elem.data('id')); + var slide = findSlide(this.slideEntries, {id: slideID, isQuiz: isQuiz}); + this.set('slideEntry', slide); + }, + /** + * Actively changes the active tab in the sidebar so that it corresponds + * the slide currently displayed + * + * @private + */ + _onChangeCurrentSlide: function () { + var slide = this.get('slideEntry'); + this.$('.o_wslides_fs_sidebar_list_item.active').removeClass('active'); + var selector = '.o_wslides_fs_sidebar_list_item[data-id='+slide.id+'][data-is-quiz!="1"]'; + + this.$(selector).addClass('active'); + this.trigger_up('change_slide', this.get('slideEntry')); + }, + + /** + * Binds left and right arrow to allow the user to navigate between slides + * + * @param {*} ev + * @private + */ + _onKeyDown: function (ev){ + switch (ev.key){ + case "ArrowLeft": + this.goPrevious(); + break; + case "ArrowRight": + this.goNext(); + break; } }, + }); + + + /** + * This widget's purpose is to show content of a course, naviguating through contents + * and correclty display it. It also handle slide completion, course progress, ... + * + * This widget is rendered sever side, and attached to the existing DOM. + */ + var Fullscreen = publicWidget.Widget.extend({ + events: { + "click .o_wslides_fs_toggle_sidebar": '_onClickToggleSidebar', + }, + custom_events: { + 'change_slide': '_onChangeSlideRequest', + 'slide_to_complete': '_onSlideToComplete', + 'slide_completed': '_onSlideCompleted', + 'slide_go_next': '_onSlideGoToNext', + }, + /** + * @override + * @param {Object} el + * @param {Object} slides Contains the list of all slides of the course + * @param {integer} defaultSlideId Contains the ID of the slide requested by the user + */ + init: function (el, slides, defaultSlideId){ + var result = this._super.apply(this,arguments); + this.initialSlideID = defaultSlideId; + this.slides = this._preprocessSlideData(slides); + + var slide; + if (defaultSlideId) { + slide = findSlide(this.slides, {id: defaultSlideId}); + } else { + slide = this.slides[0]; + } + this.set('slide', slide); + + this.sidebar = new Sidebar(this, this.slides, slide); + return result; + }, + /** + * @override + */ + start: function (){ + var self = this; + this.on('change:slide', this, this._onChangeSlide); + return this._super.apply(this, arguments).then(function () { + self._onChangeSlide(); // trigger manually once DOM ready, since slide content is not rendered server side + }); + }, + /** + * Extended to attach sub widget to sub DOM. This might be experimental but + * seems working fine. + * + * @override + */ + attachTo: function (){ + var defs = [this._super.apply(this, arguments)]; + defs.push(this.sidebar.attachTo(this.$('.o_wslides_fs_sidebar'))); + return $.when.apply($, defs); + }, + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- /** + * Fetches content with an rpc call for slides of type "webpage" + * * @private */ - _fetchHtmlContent: function(){ + _fetchHtmlContent: function (){ var self = this; + var currentSlide = this.get('slide'); return self._rpc({ - route: 'slides/slide/get_html_content', + route:"/slides/slide/get_html_content", params: { - 'slide_id': self.slide.id + 'slide_id': currentSlide.id } }).then(function (data){ if (data.html_content) { - self.slide.htmlContent = data.html_content; + currentSlide.htmlContent = data.html_content; } }); }, /** - * @private - * Once the completion conditions are filled, - * sends a json request to the backend to set the relation between the slide and the user as being completed + * Fetches slide content depending on its type. + * If the slide doesn't need to fetch any content, return a resolved deferred + * + * @private + */ + _fetchSlideContent: function (){ + var slide = this.get('slide'); + if (slide.type === 'webpage' && !slide.isQuiz) { + return this._fetchHtmlContent(); + } + return Promise.resolve(); + }, + _markAsCompleted: function (slideId, completion) { + var slide = findSlide(this.slides, {id: slideId}); + slide.completed = true; + this.sidebar.setSlideCompleted(slide.id); + this.sidebar.updateProgressbar(completion); + }, + /** + * Extend the slide data list to add informations about rendering method, and other + * specific values according to their slide_type. */ - _setSlideStateAsDone: function (){ - var self = this; - return self._rpc({ - route: '/slides/slide/set_completed', - params: { - slide_id: self.slide.id, - } - }).then(function (data) { - if (! data.error) { - $('#check-'+self.slide.id).replaceWith($('<i class="check-done o_wslides_slide_completed fa fa-check-circle"></i>')); - self.slide.done = true; - clearInterval(self.tid); - self.channelCompletion = data.channel_completion; - self._updateProgressbar(); + _preprocessSlideData: function (slidesDataList) { + slidesDataList.forEach(function (slideData, index) { + // compute hasNext slide + slideData.hasNext = index < slidesDataList.length-1; + // compute embed url + if (slideData.type === 'video') { + slideData.embedCode = $(slideData.embedCode).attr('src'); // embedCode containts an iframe tag, where src attribute is the url (youtube or embed document from odoo) + slideData.embedUrl = "https://" + slideData.embedCode + "&rel=0&autoplay=1&enablejsapi=1&origin=" + window.location.origin; + } else if (slideData.type === 'infographic') { + slideData.embedUrl = _.str.sprintf('/web/image/slide.slide/%s/image', slideData.id); + } else if (_.contains(['document', 'presentation'], slideData.type)) { + slideData.embedUrl = $(slideData.embedCode).attr('src'); } + // fill empty property to allow searching on it with _.filter(list, matcher) + slideData.isQuiz = !!slideData.isQuiz; + slideData.hasQuestion = !!slideData.hasQuestion; + // technical settings for the Fullscreen to work + slideData._autoSetDone = _.contains(['infographic', 'presentation', 'document', 'webpage'], slideData.type) && !slideData.hasQuestion; }); - }, - _updateProgressbar: function () { - var completion = _.min([this.channelCompletion, 100]); - this.$('.o_wslides_fs_sidebar_progressbar .progress-bar').css('width', completion + "%" ); - this.$('.o_wslides_progress_percentage').text(completion); + return slidesDataList; }, /** + * Changes the url whenever the user changes slides. + * This allows the user to refresh the page and stay on the right slide + * * @private - * Creates an array of letters to be used in the quiz with a foreach */ - _generateQuizLetters: function (){ - var letters = []; - for (var i = 65; i < 91; i++){ - letters.push(String.fromCharCode(i)); - } - return letters; + _pushUrlState: function (){ + var urlParts = window.location.pathname.split('/'); + urlParts[urlParts.length-1] = this.get('slide').slug; + var url = urlParts.join('/'); + this.$('.o_wslides_fs_exit_fullscreen').attr('href', url); + var fullscreenUrl = _.str.sprintf('%s?fullscreen=1', url); + history.pushState(null, '', fullscreenUrl); }, - _goToNextSlide: function (){ - var self = this; - clearInterval(self.tid); - self.player = undefined; - self.goToQuiz = self.slide.hasQuiz && !self.goToQuiz && self.slide.slide_type !== 'quiz'; - if (self.nextSlide && !self.goToQuiz){ - self.slide = self.nextSlide; - self.index++; - self._setActiveTab(); - self._renderPlayer(); - self._setPreviousAndNextSlides(); - self._updateUrl(); - history.pushState(null,'',self.url); + /** + * Render the current slide content using specific mecanism according to slide type: + * - simply append content (for webpage) + * - template rendering (for image, document, ....) + * - using a sub widget (quiz and video) + * + * @private + * @returns Deferred + */ + _renderSlide: function () { + var slide = this.get('slide'); + var $content = this.$('.o_wslides_fs_content'); + $content.empty(); + + // display quiz slide, or quiz attached to a slide + if (slide.type === 'quiz' || slide.isQuiz) { + var QuizWidget = new Quiz(this, slide); + return QuizWidget.appendTo($content); } - else if (self.nextSlide){ - self._renderPlayer(); + + // render slide content + if (_.contains(['document', 'presentation', 'infographic'], slide.type)) { + $content.html(QWeb.render('website.slides.fullscreen.content', {widget: this})); + } else if (slide.type === 'video') { + this.videoPlayer = new VideoPlayer(this, slide); + return this.videoPlayer.appendTo($content); + } else if (slide.type === 'webpage'){ + var $wpContainer = $('<div>').addClass('o_wslide_fs_webpage_content bg-white block w-100 overflow-auto'); + $(slide.htmlContent).appendTo($wpContainer); + $content.append($wpContainer); } + return Promise.resolve(); }, - _goToPreviousSlide: function (){ + /** + * Once the completion conditions are filled, + * rpc call to set the the relation between the slide and the user as "completed" + * + * @private + * @param {Integer} slideId: the id of slide to set as completed + */ + _setCompleted: function (slideId){ var self = this; - clearInterval(self.tid); - self.goToQuiz = false; - self.player = undefined; - if (self.previousSlide){ - self.slide = self.previousSlide; - self.index--; - self._setActiveTab(); - self._renderPlayer(); - self._setPreviousAndNextSlides(); - self._updateUrl(); - history.pushState(null,'',self.url); + var slide = findSlide(this.slides, {id: slideId}); + if (!slide.completed) { // no useless RPC call + return this._rpc({ + route: '/slides/slide/set_completed', + params: { + slide_id: slide.id, + } + }).then(function (data){ + self._markAsCompleted(slideId, data.channel_completion); + }); } + return Promise.resolve(); }, - _setPreviousAndNextSlides: function (){ - var self = this; - self.previousSlide = self.index > 0 ? self.slides[self.index-1] : undefined; - self.nextSlide = self.index < (self.slides.length - 1) ? self.slides[self.index+1] : undefined; - }, + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- /** - * Changes the url whenever the user changes slides. - * This allows the user to refresh the page and stay at the right video + * Method called whenever the user changes slides. + * When the current slide is changed, it will autoimatically update the widget + * and allow it to fetch the content if needs be, render it, update the url and set the + * slide as "completed" if its type makes it necessary + * + * @private */ - _updateUrl: function (){ + _onChangeSlide: function () { var self = this; - var url = window.location.pathname.split('/'); - url[url.length-1] = self.slide.slug; - url = url.join('/'); - self.url = url; - self.urlToSmallScreen = self.url; - self.url += "?fullscreen=1"; - $('.o_wslides_small_screen').attr('href', self.urlToSmallScreen); + var slide = this.get('slide'); + return this._fetchSlideContent().then(function() { // render content + return self._renderSlide(); + }).then(function() { + if (slide._autoSetDone && !session.is_website_user) { // no useless RPC call + self._setCompleted(slide.id); + } + self._pushUrlState(); + }); }, /** - * Whenever the user changes slide, change the active tab + * Changes current slide when receiving custom event `change_slide` with + * its id and if it's its quizz or not we need to display. + * + * @private */ - _setActiveTab: function (){ - var self = this; - self.activeTab.removeClass('active'); - $('li.active').removeClass('active'); - $('li[data-slide-id='+self.slide.id+']').addClass('active'); - self.activeTab = $('.o_wslides_fs_sidebar_slide_tab[index="'+self.index+'"]'); - self.activeTab.addClass('active'); + _onChangeSlideRequest: function (ev){ + var slideData = ev.data; + var newSlide = findSlide(this.slides, { + id: slideData.id, + isQuiz: slideData.isQuiz || false, + }); + this.set('slide', newSlide); }, /** - * The first time the user gets on the player, - * get the slide that is represented by the active tab in the sidebar + * Triggered when subwidget has mark the slide as done, and the UI need to be adapted. + * + * @private */ - _getActiveSlide: function (){ - var self = this; - self.activeTab = $('.o_wslides_fs_sidebar_slide_tab.active'); - self.index = parseInt(self.activeTab.attr('index'), 10); - self.slide = self.slides[self.index]; - self._setPreviousAndNextSlides(); + _onSlideCompleted: function (ev) { + var slide = ev.data.slide; + var completion = ev.data.completion; + this._markAsCompleted(slide.id, completion); }, - //-------------------------------------------------------------------------- - // Handlers - //-------------------------------------------------------------------------- - _onListCellClick: function (ev){ - var self = this; - clearInterval(self.tid); - self.player = undefined; - var target = $(ev.currentTarget); - self.goToQuiz = false; - if (target[0] !== self.activeTab[0]){ - self.activeTab.removeClass('active'); - target.addClass('active'); - self.index = parseInt(target.attr('index')); - self._getActiveSlide(); - self._renderPlayer(); - $('li.active').removeClass('active'); - $('li[data-slide-id='+self.slide.id+']').addClass('active'); - self._setPreviousAndNextSlides(); - self._updateUrl(); - history.pushState(null,'',self.url); + /** + * Triggered when sub widget business is done and that slide + * can now be marked as done. + * + * @private + */ + _onSlideToComplete: function (ev) { + if (!session.is_website_user) { // no useless RPC call + var slideId = ev.data.id; + this._setCompleted(slideId); } }, - _sidebarToggle: function (ev){ - ev.preventDefault(); - $(ev.currentTarget).toggleClass('active'); - $('.o_wslides_fs_sidebar').toggleClass('o_wslides_fs_sidebar_hidden'); - $('.o_wslides_fs_player').toggleClass('o_wslides_fs_player_no_sidebar'); - }, - _onMiniQuizClick: function (ev){ - var self = this; - self.index = parseInt($(ev.currentTarget).attr('index')) || 0; - self.slide = self.slides[self.index]; - self.goToQuiz = true; - self._setPreviousAndNextSlides(); - self._renderPlayer(); - self._setActiveTab(); - self._updateUrl(); - history.pushState(null,'' ,self.url); - }, - _onQuizCompleted: function (ev) { - this._setSlideStateAsDone(); - }, - /** - * @private - * Binds events related to the list - */ - _bindListEvents: function (){ - var self = this; - $('.o_wslides_fs_sidebar_slide_tab').each(function () { - $(this).click(self._onListCellClick.bind(self)); - }); - $('.o_wslides_fs_slide_quiz ').each(function (){ - $(this).click(self._onMiniQuizClick.bind(self)); - }); - $('.o_wslides_fs_toggle_sidebar').click(function (ev){ - self._sidebarToggle(ev); - }); + /** + * Go the next slide + * + * @private + */ + _onSlideGoToNext: function (ev) { + this.sidebar.goNext(); }, - _onKeyDown: function (ev){ - var self = this; - switch (ev.key){ - case "ArrowRight": - self._goToNextSlide(); - break; - case "ArrowLeft": - self._goToPreviousSlide(); - break; - } + /** + * Show or Hide the sidebar + * + * @private + */ + _onClickToggleSidebar: function (ev){ + ev.preventDefault(); + this.$('.o_wslides_fs_sidebar').toggleClass('o_wslides_fs_sidebar_hidden'); + this.$('.o_wslides_fs_toggle_sidebar').toggleClass('active'); }, }); @@ -404,13 +555,26 @@ odoo.define('website_slides.fullscreen', function (require) { xmlDependencies: ['/website_slides/static/src/xml/website_slides_fullscreen.xml'], start: function (){ var proms = [this._super.apply(this, arguments)]; - var userId = this.$el.data('userId'); - var courseId = this.$el.data('courseId'); - var slideId = this.$el.data('slideId'); - var fullscreen = new Fullscreen(this, courseId, slideId, userId); - proms.push(fullscreen.attachTo(this.$el)); + var fullscreen = new Fullscreen(this, this._getSlides(), this._getCurrentSlideID()); + proms.push(fullscreen.attachTo(".o_wslides_fs_main")); return Promise.all(proms); - } + }, + _getCurrentSlideID: function (){ + return parseInt(this.$('.o_wslides_fs_sidebar_list_item.active').data('id')); + }, + /** + * @private + * Creates slides objects from every slide-list-cells attributes + */ + _getSlides: function (){ + var $slides = this.$('.o_wslides_fs_sidebar_list_item'); + var slideList = []; + $slides.each(function () { + var slideData = $(this).data(); + slideList.push(slideData); + }); + return slideList; + }, }); return Fullscreen; diff --git a/addons/website_slides/static/src/js/slides_course_quiz.js b/addons/website_slides/static/src/js/slides_course_quiz.js index 82aff54d46c..1e5ebaaccfc 100644 --- a/addons/website_slides/static/src/js/slides_course_quiz.js +++ b/addons/website_slides/static/src/js/slides_course_quiz.js @@ -15,9 +15,8 @@ odoo.define('website_slides.quiz', function (require) { * used client side (Fullscreen). * * Triggered events are : - * - quiz_next_slide: need to go to the next slide, when quiz is done. Event data contains the current slide id. - * - quiz_completed: when the quiz is passed and completed by the user. Event data contains completion - * percentage and current slide id. + * - slide_go_next: need to go to the next slide, when quiz is done. Event data contains the current slide id. + * - quiz_completed: when the quiz is passed and completed by the user. Event data contains current slide data. */ var Quiz= publicWidget.Widget.extend({ template: 'slide.slide.quiz', @@ -88,6 +87,8 @@ odoo.define('website_slides.quiz', function (require) { } else if (alert_code === 'slide_quiz_done') { message = _t('This quiz is already done. Retaking it is not possible.'); + } else if (alert_code === 'public_user') { + message = _t("You must be logged to submit the quiz."); } this.$('.o_wslides_js_lesson_quiz_error span').html(message); this.$('.o_wslides_js_lesson_quiz_error').removeClass('d-none'); @@ -116,8 +117,7 @@ odoo.define('website_slides.quiz', function (require) { _renderAnswers: function () { var self = this; this.$('input[type=radio]').each(function () { - console.log($(this)); - $(this).prop('disabled', self.slide.readonly); + $(this).prop('disabled', self.slide.readonly || self.slide.completed); }); }, @@ -127,24 +127,26 @@ odoo.define('website_slides.quiz', function (require) { */ _renderAnswersHighlighting: function () { var self = this; - this.$('li.o_wslides_quiz_answer').each(function () { + this.$('a.o_wslides_quiz_answer').each(function () { var $answer = $(this); var answerId = $answer.data('answerId'); if (_.contains(self.quiz.goodAnswers, answerId)) { - $answer.removeClass('border-danger').addClass('border border-success'); + $answer.removeClass('list-group-item-danger').addClass('list-group-item-success'); $answer.find('i.fa').addClass('d-none'); $answer.find('i.fa-check-circle').removeClass('d-none'); } else if (_.contains(self.quiz.badAnswers, answerId)) { - $answer.removeClass('border-success').addClass('border border-danger'); + $answer.removeClass('list-group-item-success').addClass('list-group-item-danger'); $answer.find('i.fa').addClass('d-none'); $answer.find('i.fa-times-circle').removeClass('d-none'); $answer.find('label input').prop('checked', false); } else { - $answer.removeClass('border border-danger border-success'); - $answer.find('i.fa').addClass('d-none'); - $answer.find('i.fa-circle').removeClass('d-none'); + if (!self.slide.completed) { + $answer.removeClass('list-group-item-danger list-group-item-success'); + $answer.find('i.fa').addClass('d-none'); + $answer.find('i.fa-circle').removeClass('d-none'); + } } }); }, @@ -177,17 +179,6 @@ odoo.define('website_slides.quiz', function (require) { QWeb.render('slide.slide.quiz.validation', {'widget': this}) ); }, - - /** - * Set the slide as completed and done. Trigger up the completion. - * - * @param {Integer} completion - */ - _setCompleted: function () { - this.trigger_up('quiz_completed', { - 'slideId': this.slide.id, - }); - }, /* * Submit the given answer, and display the result * @@ -205,14 +196,14 @@ odoo.define('website_slides.quiz', function (require) { if (data.error) { self._alertShow(data.error); } else { - self.slide.completed = data.completed; self.quiz = _.extend(self.quiz, data); - self._renderAnswersHighlighting(); - self._renderValidationInfo(); - if (self.slide.completed) { + if (data.completed) { self._renderSuccessModal(data); - self._setCompleted(); + self.slide.completed = true; + self.trigger_up('slide_completed', {slide: self.slide, completion: data.channel_completion}); } + self._renderAnswersHighlighting(); + self._renderValidationInfo(); } }); }, @@ -228,7 +219,7 @@ odoo.define('website_slides.quiz', function (require) { * @param OdooEvent ev */ _onAnswerClick: function (ev) { - if (! this.slide.readonly) { + if (! this.slide.readonly && ! this.slide.completed) { $(ev.currentTarget).find('input[type=radio]').prop('checked', true); } this._alertHide(); @@ -241,9 +232,7 @@ odoo.define('website_slides.quiz', function (require) { */ _onClickNext: function (ev) { if (this.slide.hasNext) { - this.trigger_up('quiz_next_slide', { - 'slideId': this.slide.id, - }); + this.trigger_up('slide_go_next'); } }, /** @@ -270,10 +259,10 @@ odoo.define('website_slides.quiz', function (require) { }); publicWidget.registry.websiteSlidesQuizNoFullscreen = publicWidget.Widget.extend({ - selector: '.o_wslides_js_lesson_quiz', + selector: '.o_wslides_lesson_main', // selector of complete page, as we need slide content and aside content table custom_events: { - quiz_next_slide: '_onQuizNextSlide', - quiz_completed: '_onQuizCompleted', + slide_go_next: '_onQuizNextSlide', + slide_completed: '_onQuizCompleted', }, //---------------------------------------------------------------------- @@ -286,8 +275,9 @@ odoo.define('website_slides.quiz', function (require) { */ start: function () { var self = this; + this.quizWidgets = []; var defs = [this._super.apply(this, arguments)]; - $('.o_wslides_js_lesson_quiz').each(function () { + this.$('.o_wslides_js_lesson_quiz').each(function () { var slideData = $(this).data(); slideData.quizData = { questions: self._extractQuestionsAndAnswers(), @@ -304,13 +294,17 @@ odoo.define('website_slides.quiz', function (require) { //---------------------------------------------------------------------- // Handlers //--------------------------------------------------------------------- - - _onQuizCompleted: function (slideId) { - console.log('set completed', slideId); + _onQuizCompleted: function (ev) { + var self = this; + var slide = ev.data.slide; + var completion = ev.data.completion; + this.$('#o_wslides_lesson_aside_slide_check_' + slide.id).addClass('text-success fa-check').removeClass('text-600 fa-circle-o'); + // need to use global selector as progress bar is ouside this animation widget scope + $('.o_wslides_lesson_header .progress-bar').css('width', completion + "%"); + $('.o_wslides_lesson_header .progress span').text(_.str.sprintf("%s %%", completion)); }, - _onQuizNextSlide: function () { - var url = this.$el.data('next-slide-url'); + var url = this.$('.o_wslides_js_lesson_quiz').data('next-slide-url'); window.location.replace(url); }, diff --git a/addons/website_slides/static/src/js/slides_course_slides_list.js b/addons/website_slides/static/src/js/slides_course_slides_list.js index 305a1fd7b86..a43844a6b33 100644 --- a/addons/website_slides/static/src/js/slides_course_slides_list.js +++ b/addons/website_slides/static/src/js/slides_course_slides_list.js @@ -29,16 +29,18 @@ publicWidget.registry.websiteSlidesCourseSlidesList = publicWidget.Widget.extend */ _bindSortable: function () { this.$('ul.o_wslides_js_slides_list_container').sortable({ - handle: '.fa-arrows', + handle: '.o_wslides_slides_list_drag', stop: this._reorderCategories.bind(this), - items: '.o_wslides_slide_list_category' + items: '.o_wslides_slide_list_category', + placeholder: 'o_wslides_slides_list_slide_hilight position-relative mb-1' }); this.$('.o_wslides_js_slides_list_container ul').sortable({ - handle: '.fa-arrows', + handle: '.o_wslides_slides_list_drag', connectWith: '.o_wslides_js_slides_list_container ul', stop: this._reorderSlides.bind(this), - items: '.o_wslides_slides_list_slide:not(.o_wslides_js_slides_list_empty)' + items: '.o_wslides_slides_list_slide:not(.o_wslides_js_slides_list_empty)', + placeholder: 'o_wslides_slides_list_slide_hilight position-relative mb-1' }); }, diff --git a/addons/website_slides/static/src/js/slides_embed.js b/addons/website_slides/static/src/js/slides_embed.js index b2b19b98e03..29e5ce342bd 100644 --- a/addons/website_slides/static/src/js/slides_embed.js +++ b/addons/website_slides/static/src/js/slides_embed.js @@ -43,16 +43,19 @@ $(function () { on_rendered_page: function (pageNumber) { if (pageNumber) { this.$('#page_number').val(pageNumber); + this.navUpdate(pageNumber); } }, // page switching render_page: function (pageNumber) { this.pdf_viewer.renderPage(pageNumber).then(this.on_rendered_page.bind(this)); + this.navUpdate(pageNumber); }, change_page: function () { var pageAsked = parseInt(this.$('#page_number').val(), 10); if (1 <= pageAsked && pageAsked <= this.pdf_viewer.pdf_page_total) { this.pdf_viewer.changePage(pageAsked).then(this.on_rendered_page.bind(this)); + this.navUpdate(pageAsked); } else { // if page number out of range, reset the page_counter to the actual page this.$('#page_number').val(this.pdf_viewer.pdf_page_current); @@ -76,23 +79,28 @@ $(function () { if (pageNum) { self.on_rendered_page(pageNum); } - self.$("#slide_suggest").hide(); + self.$("#slide_suggest").addClass('d-none'); }); }, first: function () { var self = this; this.pdf_viewer.firstPage().then(function (pageNum) { self.on_rendered_page(pageNum); - self.$("#slide_suggest").hide(); + self.$("#slide_suggest").addClass('d-none'); }); }, last: function () { var self = this; this.pdf_viewer.lastPage().then(function (pageNum) { self.on_rendered_page(pageNum); - self.$("#slide_suggest").hide(); + self.$("#slide_suggest").addClass('d-none'); }); }, + navUpdate: function (pageNum) { + this.$('#first').toggleClass('disabled', pageNum < 3 ); + this.$('#previous').toggleClass('disabled', pageNum < 2 ); + this.$('#next, #last').removeClass('disabled'); + }, // full screen mode fullscreen: function () { this.pdf_viewer.toggleFullScreen(); @@ -104,7 +112,8 @@ $(function () { }, // display suggestion displayed after last slide display_suggested_slides: function () { - this.$("#slide_suggest").show(); + this.$("#slide_suggest").removeClass('d-none'); + this.$('#next, #last').addClass('disabled'); }, }; diff --git a/addons/website_slides/static/src/js/slides_share.js b/addons/website_slides/static/src/js/slides_share.js index 775dc5ccce6..3f921a2229a 100644 --- a/addons/website_slides/static/src/js/slides_share.js +++ b/addons/website_slides/static/src/js/slides_share.js @@ -59,7 +59,6 @@ publicWidget.registry.websiteSlidesShare = publicWidget.Widget.extend({ linkedin: 'https://www.linkedin.com/countserv/count/share?url=', twitter: 'https://cdn.api.twitter.com/1/urls/count.json?url=', facebook: 'https://graph.facebook.com/?id=', - gplus: 'https://clients6.google.com/rpc', }; } @@ -81,42 +80,15 @@ publicWidget.registry.websiteSlidesShare = publicWidget.Widget.extend({ */ _updateStatistics: function (socialSite, slideURL) { var self = this; - if (socialSite === 'gplus') { - $.ajax({ - url: self.socialURLs['gplus'], - type: 'POST', - dataType: 'json', - contentType: 'application/json', - data: JSON.stringify([{ - method: 'pos.plusones.get', - id: 'p', - params: { - nolog: true, - id: slideURL, - source: 'widget', - userId: '@viewer', - groupId: '@self' - }, - // TDE NOTE: should there be a key here ? - jsonrpc: '2.0', - apiVersion: 'v1' - }]), - success: function (data) { - $('#google-badge').text(data[0].result.metadata.globalCounts.count || 0); - $('#total-share').text(parseInt($('#total-share').text()) + parseInt($('#google-badge').text())); - }, - }); - } else { - $.ajax({ - url: self.socialURLs[socialSite] + slideURL, - dataType: 'jsonp', - success: function (data) { - var shareCount = (socialSite === 'facebook' ? data.shares : data.count) || 0; - $('#' + socialSite + '-badge').text(shareCount); - $('#total-share').text(parseInt($('#total-share').text()) + parseInt($('#' + socialSite + '-badge').text())); - }, - }); - } + $.ajax({ + url: self.socialURLs[socialSite] + slideURL, + dataType: 'jsonp', + success: function (data) { + var shareCount = (socialSite === 'facebook' ? data.shares : data.count) || 0; + $('#' + socialSite + '-badge').text(shareCount); + $('#total-share').text(parseInt($('#total-share').text()) + parseInt($('#' + socialSite + '-badge').text())); + }, + }); }, //-------------------------------------------------------------------------- diff --git a/addons/website_slides/static/src/js/slides_slide_like.js b/addons/website_slides/static/src/js/slides_slide_like.js index 5d343c72579..e85ca928a7f 100644 --- a/addons/website_slides/static/src/js/slides_slide_like.js +++ b/addons/website_slides/static/src/js/slides_slide_like.js @@ -55,9 +55,17 @@ var SlideLikeWidget = publicWidget.Widget.extend({ self.$el.find('span.o_wslides_js_slide_like_down span').text(data.dislikes); } else { if (data.error === 'public_user') { - self._popoverAlert(self.$el, _.str.sprintf(_t('Please <a href="/web/login?redirect=%s">login</a> to vote this slide'), (document.URL))); + self._popoverAlert(self.$el, _.str.sprintf(_t('Please <a href="/web/login?redirect=%s">login</a> to vote this lesson'), (document.URL))); } else if (data.error === 'vote_done') { - self._popoverAlert(self.$el, _t('You have already voted for this slide')); + self._popoverAlert(self.$el, _t('You have already voted for this lesson')); + } else if (data.error === 'slide_access') { + self._popoverAlert(self.$el, _t('You don\'t have access to this lesson')); + } else if (data.error === 'channel_membership_required') { + self._popoverAlert(self.$el, _t('You must be member of this course to vote')); + } else if (data.error === 'channel_comment_disabled') { + self._popoverAlert(self.$el, _t('Votes and comments are disabled for this course')); + } else if (data.error === 'channel_karma_required') { + self._popoverAlert(self.$el, _t('You don\'t have enough karma to vote')); } else { self._popoverAlert(self.$el, _t('Unknown error')); } diff --git a/addons/website_slides/static/src/scss/slides_slide_fullscreen.scss b/addons/website_slides/static/src/scss/slides_slide_fullscreen.scss index 08ef8bc299b..301887e87be 100644 --- a/addons/website_slides/static/src/scss/slides_slide_fullscreen.scss +++ b/addons/website_slides/static/src/scss/slides_slide_fullscreen.scss @@ -1,311 +1,100 @@ + +$o-wslides-tabs-height: 36px; + .o_wslides_fs_main { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; + @include o-position-absolute(0,0,0,0); z-index: 2000; + background-image: linear-gradient(120deg, $o-wslides-color-dark2, $o-wslides-color-dark3); + .o_wslides_slide_fs_header { - align-items: center; - background-color: #313A44; - color: #AEB0B2; - display: flex; + background-image: linear-gradient(-6deg, $o-wslides-color-dark1, $o-wslides-color-dark2); height: 50px; - justify-content: space-between; - width: 100%; - .o_wslides_fs_slide_title { - height: 100%; - display: flex; - align-items: center; - padding: 0 20px; - color: #D5D7D9; - font-weight: bold; + > div > a { + background-color: rgba($o-wslides-color-dark3, 0.5); + @include o-hover-text-color(rgba(white, 0.8), white); + text-decoration: none!important; - i.fa-flag-checkered{ - color: #D39B4B; - margin-right: 10px; + + a { + margin-left: 1px; } - } - div { - display: flex; - height: 100%; - - a { - align-items: center; - background-color: #1F242C; - color: inherit; - display: flex; - font-size: 0.8rem; - font-weight: bold; - height: 100%; - justify-content: center; - padding: 0 20px; - text-decoration: none !important; - text-transform: uppercase; - - i { - align-items: center; - display: flex; - height: 100%; - margin: 0; - margin-right: 5px; - } + &:hover { + background-color: rgba($o-wslides-color-dark3, 0.2); } - a:hover, - a.active{ - background-color: #313A44; + &.active{ + background-color: $o-wslides-color-dark1; color: #fff; } } } - .o_wslides_fs_container { - display: flex; - align-items: stretch; - height: calc(100% - 50px); - position: relative; - background-color: #313A44; - } - - .o_wslides_fs_sidebar_hidden{ - transform: translateX(-100%); - } - - .o_wslides_fs_sidebar{ - width: 400px; - min-width: 400px; - background-color: #313A44; - color: #fff; + .o_wslides_fs_player, .o_wslides_fs_sidebar, .o_wslides_fs_sidebar_content { transition: all .2s ease-in; - overflow: auto; + } - a { - text-decoration: none !important; - color: inherit; - } + .o_wslides_fs_sidebar { + background-image: linear-gradient(160deg, $o-wslides-color-dark1, $o-wslides-color-dark2); + position: relative; - ul { - margin: 0; - padding: 0; - list-style: none; + .o_wslides_fs_sidebar_content { + min-width: $o-wslides-fs-side-width; } - li { - padding-left: 20px; + .o_wslides_fs_toggle_sidebar { + @include o-position-absolute(0, auto, 0, 100%); + width: 700px; + background: rgba(black, 0.2); } - .o_wslides_fs_sidebar_header { - height: 100px; - padding: 20px 0; - display: flex; - flex-direction: column; + @include media-breakpoint-down (md) { + @include o-position-absolute(0, auto, 0, 0); + box-shadow: 5px 0 15px rgba(black, 0.2); - .o_wslides_slide_fs_progress_box{ - display: flex; - align-items: center; - font-size: .9rem; - .o_wslides_fs_sidebar_progressbar{ - height: 5px; - border-radius: 10px; - width: 70%; - background-color: rgba(0,0,0,.3); - margin-right: 40px; - overflow: hidden; - } - .progress-bar { - background-color: $primary; - height: 100%; - width: 0; - transition: all 1.5s ease-in; - } - span { - color: #BABDC0; - } - } - a { - font-size: 1.5rem; - font-weight: bold; - } - } - .o_wslides_fs_sidebar_section { - margin-bottom: 20px; - background-color: #283038; - padding: 10px 0; - > a > li { - color: #656B72; - font-size: .8rem; - text-transform: uppercase; - font-weight: bold; - padding: 5px 0 5px 15px; - } - } - .o_wslides_fs_sidebar_section_slides{ - padding: 0; - margin-bottom: 15px; - li { - margin: 0; - padding: 0; - border-left: 2px solid transparent; - display: flex; - a { - flex: 1; - } - > span{ - width: 15px; - padding: 0; - margin: 0; - margin-left: 10px; - display: flex; - flex-direction: column; - align-items: center; - i { - z-index: 100; - padding: 0; - margin: 0; - } - i.o_wslides_slide_completed{ - color: #00A04A; - border-radius: 50%; - overflow: hidden; - background-color: #fff; - height: 12px; - width: 12px; - display: flex; - justify-content: center; - align-items: center; - border: 1px solid #00A04A; - } - .o_wslides_fs_full_line{ - width: 1px; - height: 100%; - background-color: #787D82; - } - } - } - .o_wslides_top_line, - .o_wslides_bottom_line{ - width: 1px; - display: flex; - flex-grow: 1; - background-color: #787D82; - } - li:first-child .o_wslides_top_line{ - background-color: transparent; - } - li:last-child .o_wslides_bottom_line{ - background-color: transparent; - } - li:hover, - li.active { - border-left: 2px solid $primary; - cursor: pointer; - background-color: #1D2228; - } - .o_wslides_fs_sidebar_slide_tab { - padding:5px 0 5px 15px; - font-size: .8rem; - color: #8A8F93; - font-weight: bold; - flex: 1; - } - .o_wslides_fs_sidebar_slide_tab.active{ - color: #fff; - } - .o_wslides_fs_slide_link { - color: #098586; - font-size: .8rem; - margin-left: 15px; - flex: 1; - i { - margin-right: 10px; - } - } - .o_wslides_fs_slide_quiz { - font-size: .8rem; - margin-left: 15px; - color: #8A8F93; - flex: 1; - i { - color: #D39B4B; - margin-right: 10px; - } + &.o_wslides_fs_sidebar_hidden { + display: none; } } + @include media-breakpoint-up (md) { + width: $o-wslides-fs-side-width; - } - - .o_wslides_fs_player { - display: flex; - align-items: stretch; - max-width: calc(100% - 400px); - height: 100%; - background-color: #283038; - transition: all .2s ease-in; - position: absolute; - top: 0; - right: 0; - height: 100%; - width: 80%; + &.o_wslides_fs_sidebar_hidden { + width: 0; - iframe { - height: 100%; - width: 100%; + .o_wslides_fs_sidebar_content { + transform: translateX(-100%); + } + } } - } - .o_wslides_fs_webpage { - background-color: #fff; - width: 100%; - height: 100%; - overflow-y: scroll; - padding: 20px 0; - } + a { + text-decoration: none !important; + @include o-hover-text-color(rgba(white, 0.8), white); + } - .o_wslides_fs_player_no_sidebar { - max-width: 100%; - width: 100%; - } + .o_wslides_fs_sidebar_section { + background-color: rgba($o-wslides-color-dark3, 0.3); + margin-bottom: 1px; + } - // quizz - .o_wslides_fs_quiz_container { - background-color: $gray-200; - height: 100%; - overflow: scroll; - overflow-x: hidden; - width: 100%; + .o_wslides_fs_sidebar_section_slides li { + color: rgba(white, 0.8); + line-height: 1.3; - .o_wslides_js_lesson_quiz_question { - li { - font-size: 1.2rem; - } + &.active { + box-shadow: inset 2px 0 0 theme-color('primary'); + background-color: rgba($o-wslides-color-dark3, 0.5); - .o_wslides_quiz_answer { - - &:hover { - cursor: pointer; + &, a { + color: white; } + } - label { - font-size: 1.4rem; - - i.fa-circle { - } - - input:checked + i.fa-circle { - color: $primary !important; - overflow: hidden; - } - } + .o_wslides_fs_slide_name { + line-height: 1; } } } - - // Tools - .bg-brand { - background-color: $o-enterprise-color; - } } diff --git a/addons/website_slides/static/src/scss/website_slides.scss b/addons/website_slides/static/src/scss/website_slides.scss index 4e83de3b44d..c4797b85995 100644 --- a/addons/website_slides/static/src/scss/website_slides.scss +++ b/addons/website_slides/static/src/scss/website_slides.scss @@ -1,20 +1,37 @@ -// FIXME may be useless (check initial code here: https://github.com/odoo/odoo/blob/51be5bbfb38db784cb3406877cc0e8806b1bf55a/addons/website_slides/static/src/less/website_slides.less#L1) -$nav-tabs-border-color: #dddddd !default; -$body-bg: #FFFFFF !default; $MAX-Z-INDEX : 2147483647 !default; -$gray-50: #f4f4f4 !default; -$o-enterprise-radient-color: #62495B !default; +$o-wslides-tabs-height: 36px; +$o-wslides-color-bg: desaturate(map-get($grays, "200"), 80%); +$o-wslides-color-dark1: #47525f; +$o-wslides-color-dark2: #1f262d; +$o-wslides-color-dark3: #101216; +$o-wslides-fs-side-width: 300px; + // Common to new slides pages // ************************************************** +.o_wslides_gradient { + background-image: linear-gradient(120deg, #875A7B, darken(#875A7B, 10%)); +} + +.o_wslides_course_pict { + @include size(100%, 30%); + padding-top: 30%; + background-size: cover; + background-position: center; + + @include media-breakpoint-up(md) { + @include size(100%); + padding-top: 100%; + } +} .o_wslides_wrap { - background-color: desaturate(map-get($grays, "200"), 80%); + background-color: $o-wslides-color-bg; .o_wslides_home_nav { top: -40px; - @include media-breakpoint-up(md) { + @include media-breakpoint-up(lg) { font-size: 1rem; .o_wslides_nav_navbar_right { @@ -32,38 +49,29 @@ $o-enterprise-radient-color: #62495B !default; .o_wslides_js_slide_like_up, .o_wslides_js_slide_like_down { - cursor: pointer; - color: $link-color; + &:not(.disabled) { + cursor: pointer; + color: $link-color; + } } .o_wslides_js_lesson_quiz_question { - li { - font-size: 1.2rem; - } - - .o_wslides_quiz_answer { + .list-group-item { + font-size: 1rem; - &:hover { - cursor: pointer; + input:checked + i.fa-circle { + color: $primary !important; } + } - label { - font-size: 1.4rem; - - i.fa-circle { - } - - input:checked + i.fa-circle { - color: $primary !important; - overflow: hidden; - } - } + &.disabled { + opacity: 0.5; + cursor: not-allowed; } } // tools // **************************************** - .text_small_caps { font-variant: small-caps; } @@ -72,55 +80,29 @@ $o-enterprise-radient-color: #62495B !default; opacity: 0.5; } - .bg-brand { - background-color: $o-enterprise-color; - } - - .progress { - overflow: visible; - - .progress-bar { - background-color: $primary; - position: relative; - - span { - background-color: $primary; - position: absolute; - bottom: -20px; - font-size: 10px; - line-height: 10px; - padding: 2px 3px 2px 4px; - right: -1.4em; - border-radius: 2px; - } - - span:after { - bottom: 100%; - left: 50%; - border: solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; - pointer-events: none; - border-color: rgba(255, 255, 255, 0); - border-bottom-color: #00A09D; - border-width: 5px; - margin-left: -5px; - } + // Truncate text descriptions to a specific number of lines. + // If '-webkit-line-clamp' is not supported, a less effective + // 'line-height' fallback will be used instead. + $truncate-limits: 2, 3, 5, 10; + + @each $limit in $truncate-limits { + .o_wslides_desc_truncate_#{$limit} { + $line-height: 1.3; + max-height: $limit * $line-height * 1em; + overflow: hidden; + text-overflow: ellipsis; + white-space: normal; + line-height: $line-height; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: $limit; } } } - // New home page // ************************************************** - .o_wslides_home_main { - .o_wprofile_next_rank_card { - background-color: transparent !important; - } - .o_wslides_home_aside_loggedin { @include media-breakpoint-up(lg) { background: none; @@ -132,177 +114,188 @@ $o-enterprise-radient-color: #62495B !default; // New course page // ************************************************** +@mixin o-wslides-tabs($tab-active-color: $o-wslides-color-bg) { + margin-top: $o-wslides-tabs-height * -1; + border-bottom: 0; + + .nav-link { + border-radius: 0; + border-width: 0 1px; + @include o-hover-text-color(rgba(white, 0.8), white); + + &, &:hover { + border-color: #875A7B; + background: transparent; + } + + &.active { + color: $headings-color; + background: $tab-active-color; + border-color: $tab-active-color; + } + } +} + +@mixin o-wslides-header-bar() { + &:before { + content: ""; + @include o-position-absolute(auto, 0, 0, 0); + height: $o-wslides-tabs-height; + background: rgba(black, 0.2); + } +} + .o_wslides_course_nav { - margin: auto; - background: linear-gradient(150deg, #875A7B 20%, #62495B 80%) !important; - opacity: 0.95; + @include o-position-absolute(0,0,auto,0); + border-width: 1px 0; - a { - color: #FFFFFF; + &, .o_wslides_course_nav_search { + background-color: rgba(white, 0.05); + border-color: rgba(white, 0.1); + border-style: solid; } - small a { - color: #000000; + .o_wslides_course_nav_search { + border-width: 0 1px; } - nav { - .breadcrumb-item::before { - font-weight: bold; - color: #FFFFFF; - opacity: 0.8; - } - .breadcrumb-item { - a { - font-weight: bold; - color: #FFFFFF; - opacity: 0.8; - transition: opacity linear .3s; - } - &.active { - a { - opacity: 1.0; - } - } - } - ol { - background-color: transparent; - } + .breadcrumb-item.active a, .breadcrumb-item a:hover { + color: white; + } + + .breadcrumb-item a, .breadcrumb-item + .breadcrumb-item::before, .o_wslides_course_nav_search input::placeholder { + color: rgba(white, 0.8); } } + .o_wslides_course_header { - margin: auto; - background: linear-gradient(150deg, #875A7B 20%, #62495B 80%) !important; - border-bottom: 48px solid #66445e; - - .o_wslides_course_header_container { - position: relative; - top: 48px; - padding-top: 0px; - - .o_wslides_course_header_aside { - max-width: 286px; - img { - width: 100%; - max-width: 256px; - } + @include media-breakpoint-up(md) { + @include o-wslides-header-bar(); + } +} + +.o_wslides_course_doc_header { + @include o-wslides-header-bar(); +} + +.o_wslides_course_main { + .o_wslides_nav_tabs { + @include media-breakpoint-up(md) { + @include o-wslides-tabs(); } - .o_wslides_course_header_content { - font-size: 16px; - color: #FFFFFF; - - .o_wslides_course_header_nav { - ul.o_wslides_nav_tabs { - border-bottom: 0px; - li.nav-item { - margin-bottom: 0px; - } - a.nav-link { - color: white; - border-radius: 0px; - height: 48px; - font-weight: bold; - padding-top: 12px; - text-align: center; - width: 120px; - &:hover { - border: 0px; - border-radius: 0px; - background-color: #875A7B; - } - &.active { - color: #212529; - background-color: #f2f2f2; - border: 0px; - } - } - } + @include media-breakpoint-only(xs) { + overflow-x: auto; + overflow-y: hidden; + line-height: 1.51; + + li { + white-space: nowrap; } } } -} -.o_wslides_course_main { - .o_wslides_course_content_aside { - max-width: 286px; - .bg-white { - max-width: 256px; - background-color: white; - padding-bottom: 8px; - > div.row { - padding-left: 15px; - padding-right: 15px; - } - } + .o_wslides_doc_nav_tabs { + @include o-wslides-tabs($gray-100); } -} -// Slides list reordering widget -.o_wslides_slides_list { - .o_wslides_slides_list_slide { - &.o_not_editable { - height: 0px; + .o_wslides_tabs_content { + @include media-breakpoint-down(sm) { + background-color: $nav-tabs-link-active-bg; + padding:0 ($grid-gutter-width * 0.5); } - &:nth-child(odd) { - background-color: $gray-50; + @include media-breakpoint-only(xs) { + margin: 0 ($grid-gutter-width * -0.5); } + } - &:nth-child(even) { - background-color: $gray-100; - } + // Slides list reordering widget + .o_wslides_slides_list { + .o_wslides_slide_list_category_header { + z-index: 1; - .o_wslides_slides_list_slide_controls { - i:hover { - color: $primary !important; - cursor: pointer; + & + ul { + z-index: 0; } } - } -} + .o_text_link { + text-decoration: none!important; -// New lesson page -// ************************************************** + > * { + text-decoration: none!important; + color: map-get($grays, "600"); + } -.o_wslides_lesson_header { - background: linear-gradient(150deg, $o-enterprise-color 20%, $o-enterprise-radient-color 80%); - margin: auto; + &:hover > * { + color: inherit; + } + } + + .o_wslides_slides_list_drag { + cursor: pointer; + + i { opacity: 0.4; } + &:hover i { opacity: 1; } + } - .o_wslides_lesson_header_container { - a:hover { - text-decoration: none; + .o_wslides_slide_list_category_header, .o_wslides_slides_list_slide { + border: 1px solid $border-color; } - .fa-trophy { - font-size: 2em; + .o_wslides_slides_list_slide_hilight { + background-color: #1252F3; + height: 1px; + z-index: 3; + + &:before, &:after { + content: ""; + @include size(6px); + display: block; + border-radius: 100%; + background-color: inherit; + @include o-position-absolute(-2px, -2px); + } + + &:after { + right: auto; + left: -2px; + } } } } + +// New lesson page (not fullscreens) +// ************************************************** .o_wslides_lesson_main { .o_wslides_lesson_aside { - .o_wslides_lesson_aside_list, - .o_wslides_lesson_aside_doc { - border: 0; - border-bottom: 3px solid $border-color; - position: relative; - top: -50px; - - .nav-tabs .nav-link { - border-top: 0; - border-top-left-radius: 0; - border-top-right-radius: 0; + .o_wslides_lesson_aside_collapse.collapsed { + transform: rotate(90deg); + } + + .o_wslides_lesson_aside_list { + @include media-breakpoint-up (lg) { + top: -58px; } } .o_wslides_lesson_aside_list { .o_wslides_lesson_aside_list_link { - text-decoration: none; + @include o-hover-text-color($gray-600, $headings-color ); + + .o_wslides_lesson_link_name { + line-height: 1.2; + } &.active { - background-color: $gray-200; + box-shadow:inset 2px 0 theme-color('primary'); + } + + &:hover .o_wslides_lesson_link_name { + color: $headings-color; } } } @@ -325,119 +318,56 @@ $o-enterprise-radient-color: #62495B !default; } } -// Old brol to clean someday -// ************************************************** -.oe_slides_panel_footer .fa, .oe_slide_js_embed_option_link{ - color : theme-color('primary'); - cursor: pointer; -} +// Modals +// ************************************************** -.oe_slide_embed_option { - position: absolute; - padding: 30px 30px 30px 30px; - top: 0px; - left: 0px; - right: 0px; - bottom: 0px; - background-color: $body-bg; - opacity: 1; - display:none; - overflow-y: auto !important; -} +.o_wslides_quiz_modal { + @include media-breakpoint-up (sm) { + .modal-body { + overflow: visible!important; + } -.oe_slides_apart_small { - height: 60px; - width: 90px; - object-fit: cover; - object-position: top; -} + .modal-content { + height: 461px; -.oe_slides_statistics_title { - border-bottom: 1px solid $nav-tabs-border-color; - padding-bottom: 5px; -} -.oe_slides_transcript { - overflow-y: auto; - max-height: 500px; + .o_wslides_quiz_modal_hero { + margin-left: -30px; + position: absolute; + margin-top: -45px; + } + } + } } -// Thumbnails -.oe_slides_ellipsis { - white-space: nowrap; - width: 100%; - overflow: hidden; - text-overflow: ellipsis -} -.o_slide_preview { - max-height: 160px; - overflow: hidden; -} +// Embed PDFViewer +// ************************************************** +#PDFViewer.o_wslides_fs_pdf_viewer { + background-image: linear-gradient(120deg, $o-wslides-color-dark2, $o-wslides-color-dark3); -// Suggested slides grid -.oe_slides_suggestion_caption { - position:absolute; - top:0; - right:0; - background:rgba(10, 10, 10, 0.75); - width:100%; - height:100%; - display: none; - text-align:center; - color:#fff !important; - z-index:2; -} + #PDFViewerNav { + background-image: linear-gradient(120deg, $o-wslides-color-dark1, $o-wslides-color-dark2); + } -.oe_slides_suggestion_media { - margin-top: 10px; - position: relative; -} -.oe_slides_suggestion_media img { - height: 33%; - width: 100%; - overflow: hidden; -} + .oe_slides_panel_footer a, .oe_slides_share_bar a { + @include o-hover-text-color(rgba(white, 0.7), white); -// PDF Viewer Loader -.oe_slides_loader{ - position: relative; - width: 100%; /* for IE 6 */ -} -.oe_slides_loader h4{ - position: absolute; - bottom: 20px; - left: 0; - width: 35%; - - color: white; - background: rgb(0, 0, 0); /* fallback color */ - background: rgba(0, 0, 0, 0.7); - padding: 10px; -} + &.disabled { + @include o-hover-text-color(rgba(white, 0.2), rgba(white, 0.2)); + cursor: default; + } + } -// Slide display -div.embed-responsive { - iframe.o_wslides_iframe_viewer { - position: relative; + .oe_slide_embed_option { + @include o-position-absolute(0,0,0,0); } } -// PDF Viewer Share bar .oe_slides_share_bar{ padding: 10px 0; } -.oe_slides_panel_footer #page_number { - width: 45px; -} - .oe_show_footer { z-index: $MAX-Z-INDEX; // Looks terrible but seems necessary due to fullscreen & canvas in PDFSlidesViewer } - - -// Upload Modal -.o_wslides_select_type { - cursor: pointer; -}
\ No newline at end of file diff --git a/addons/website_slides/static/src/xml/slide_quiz.xml b/addons/website_slides/static/src/xml/slide_quiz.xml index f512985a3af..8b7e871151b 100644 --- a/addons/website_slides/static/src/xml/slide_quiz.xml +++ b/addons/website_slides/static/src/xml/slide_quiz.xml @@ -1,83 +1,106 @@ <?xml version="1.0" encoding="UTF-8"?> <templates xml:space="preserve"> <t t-name="slide.slide.quiz"> - <div class="o_wslides_fs_quiz_container"> - <div class="mx-5"> + <div class="o_wslides_fs_quiz_container o_wslides_wrap h-100 w-100 overflow-auto pb-5"> + <div class="container"> + <div t-if="widget.slide.completed" class="row"> + <div class="o_wslides_js_lesson_quiz_validation col py-2 bg-100 mb-2 border-bottom"/> + </div> + <div t-foreach="widget.quiz.questions" t-as="question" - class="o_wslides_js_lesson_quiz_question mt-3" t-att-data-question-id="question.id" t-att-data-title="question.question"> - <div class="h3"> + t-attf-class="o_wslides_js_lesson_quiz_question my-3 #{widget.slide.completed ? 'disabled' : ''}" + t-att-data-question-id="question.id" t-att-data-title="question.question"> + <div class="h4"> <small class="text-muted"><span t-esc="question_index+1"/>. </small> <span t-esc="question.question"/> </div> - <ul class="bg-white list-unstyled"> + <div class="list-group"> <t t-foreach="question.answers" t-as="answer"> - <li t-att-data-answer-id="answer.id" + <a t-att-data-answer-id="answer.id" href="#" t-att-data-text="answer.text_value" - class="o_wslides_quiz_answer pt-2 pb-2 border-bottom rounded d-flex align-items-center"> + t-attf-class="o_wslides_quiz_answer list-group-item d-flex align-items-center #{widget.slide.completed ? 'disabled bg-transparent' : 'list-group-item-action' } #{widget.slide.completed && answer.is_correct ? 'list-group-item-success' : '' }"> - <label class="mb-0 d-flex align-items-center justify-content-center mr-3 ml-3"> + <label class="my-0 d-flex align-items-center justify-content-center mr-2"> <input type="radio" t-att-name="question.id" t-att-value="answer.id" class="d-none"/> - <i class="fa fa-circle text-muted"></i> + <i t-att-class="'fa fa-circle text-400' + (!(widget.slide.completed && answer.is_correct) ? '' : ' d-none')"></i> <i class="fa fa-times-circle text-danger d-none"></i> - <i class="fa fa-check-circle text-success d-none"></i> + <i t-att-class="'fa fa-check-circle text-success' + (widget.slide.completed && answer.is_correct ? '' : ' d-none')"></i> </label> <span t-esc="answer.text_value"/> - </li> + </a> </t> - </ul> + </div> </div> - <div class="alert alert-danger o_wslides_js_lesson_quiz_error d-none" role="alert"> + <div class="alert alert-danger o_wslides_js_lesson_quiz_error mt-2 d-none" role="alert"> <span></span> <button type="button" class="close" data-dismiss="alert" aria-label="Close"> - <span aria-hidden="true">&times;</span> + <span>&times;</span> </button> </div> - <div class="o_wslides_js_lesson_quiz_validation"/> + <div t-if="!widget.slide.completed" class="o_wslides_js_lesson_quiz_validation border-top pt-3"/> </div> </div> </t> <t t-name="slide.slide.quiz.validation"> - <t t-if="widget.readonly"> - <button class="btn btn-primary" role="button" title="Join" aria-label="Join" disabled="disabled">Join course to take quiz</button> - <span role="button" title="Succeed and gain karma" aria-label="Succeed and gain karma" - class="badge badge-pill badge-warning text-white font-weight-bold ml-3 px-2 py-1">+ <t t-esc="widget.quiz.quizKarmaGain"/> XP</span> - </t> - <t t-else=""> - <button t-if="! widget.slide.completed" role="button" title="Check answers" aria-label="Check answers" - class="btn btn-primary text-uppercase font-weight-bold o_wslides_js_lesson_quiz_submit">Check your answers</button> - <button t-if="widget.slide.completed" role="button" title="Quiz done" aria-label="Quiz done" disabled="disabled" - class="btn btn-primary text-uppercase font-weight-bold">Done !</button> - <span t-if="! widget.slide.completed" role="button" title="Succeed and gain karma" aria-label="Succeed and gain karma" - class="badge badge-pill badge-warning text-white font-weight-bold ml-3 px-2 py-1">+ <t t-esc="widget.quiz.quizKarmaGain"/> XP</span> - <span t-if="widget.slide.completed" role="button" title="Gained karma" aria-label="Gained karma" - class="badge badge-pill badge-success text-white font-weight-bold ml-3 px-2 py-1">+ <t t-esc="widget.quiz.quizKarmaWon"/> XP</span> - <button t-if="widget.slide.completed && widget.slide.hasNext" - class="btn btn-primary ml-3 o_wslides_quiz_continue">Continue</button> - </t> + <div t-if="widget.readonly" class="alert alert-info"> + <b>Join course to take quiz</b> + <span class="my-0 h4" style="line-height: 1"> + <span title="Succeed and gain karma" aria-label="Succeed and gain karma" class="badge badge-pill badge-warning text-white font-weight-bold ml-3 px-2 py-1"> + + <t t-esc="widget.quiz.quizKarmaGain"/> XP + </span> + </span> + </div> + <div t-else="" class="d-flex align-items-center justify-content-between"> + <div t-att-class="'d-flex align-items-center' + (widget.slide.completed ? ' alert alert-success my-0 py-1 px-3' : '')"> + <button t-if="! widget.slide.completed" role="button" title="Check answers" aria-label="Check answers" + class="btn btn-primary text-uppercase font-weight-bold o_wslides_js_lesson_quiz_submit">Check your answers</button> + <b t-else="" class="my-0 h5">Done !</b> + <span class="my-0 h5" style="line-height: 1"> + <span role="button" title="Succeed and gain karma" aria-label="Succeed and gain karma" class="badge badge-pill badge-warning text-white font-weight-bold ml-3 px-2"> + + <t t-esc="widget.quiz.quizKarmaGain"/> XP + </span> + </span> + </div> + <button t-if="widget.slide.completed && widget.slide.hasNext" class="btn btn-primary o_wslides_quiz_continue"> + Continue <i class="fa fa-chevron-right ml-1"/> + </button> + </div> </t> <t t-name="slide.slide.quiz.finish"> - <div class="modal o_wslides_quiz_modal" tabindex="-1" role="dialog" id="slides_quiz_modal"> - <div class="modal-dialog" role="document"> - <div class="modal-content"> + <div class="modal o_wslides_quiz_modal pt-5" tabindex="-1" role="dialog" id="slides_quiz_modal"> + <div class="modal-backdrop show bg-white" style="z-index:0"/> + <div class="modal-dialog mt-5" role="document"> + <div class="modal-content shadow-lg"> <div class="modal-body d-flex p-0"> - <div class="w-50 bg-brand"></div> - <div class="w-50 d-flex flex-column p-3"> - <h1>Amazing!</h1> - <div class="pb-3"> - <span class="pb-2">You gained <span class="badge badge-pill badge-success text-white font-weight-bold"><t t-esc="widget.quiz.quizKarmaWon"/> XP !</span> !</span> - <div class="progress"> - <div class="progress-bar" role="progressbar" t-att-aria-valuenow="widget.quiz.rankProgress.progress" aria-valuemin="0" aria-valuemax="100" - t-attf-style="heigth: 8px; width: #{widget.quiz.rankProgress.progress}%"/> + <button type="button" class="close position-absolute" data-dismiss="modal" aria-label="Close" style="right: 5px">×</button> + <div class="o_wslides_gradient rounded-left d-none d-md-flex flex-shrink-0" style="width: 42%"> + <img class="o_wslides_quiz_modal_hero" src="/website_slides/static/src/img/quiz_modal_success.svg" alt=""/> + </div> + <div class="d-flex flex-column flex-grow-1 justify-content-between pl-md-5 p-3 overflow-auto"> + <div> + <h1 class="mt-3 display-4 font-weight-bold">Amazing!</h1> + <div class="pb-3"> + <h4 class="pb-2 d-flex">You gained <span class="badge badge-pill badge-success text-white font-weight-bold ml-2 mr-1"><t t-esc="widget.quiz.quizKarmaWon"/> XP</span> !</h4> + <div class="progress" style="height: 8px"> + <div class="progress-bar" role="progressbar" t-att-aria-valuenow="widget.quiz.rankProgress.progress" aria-valuemin="0" aria-valuemax="100" + t-attf-style="width: #{widget.quiz.rankProgress.progress}%"/> + </div> + <small t-if="widget.quiz.rankProgress.lowerBound" class="float-left text-primary font-weight-bold"><t t-esc="widget.quiz.rankProgress.lowerBound"/></small> + <small t-if="widget.quiz.rankProgress.upperBound" class="float-right font-weight-bold"><t t-esc="widget.quiz.rankProgress.upperBound"/></small> </div> - <small t-if="widget.quiz.rankProgress.lowerBound" class="float-left"><t t-esc="widget.quiz.rankProgress.lowerBound"/></small> - <small t-if="widget.quiz.rankProgress.upperBound" class="float-right"><t t-esc="widget.quiz.rankProgress.upperBound"/></small> + <div class="pb-3" t-raw="widget.quiz.rankProgress.motivational"/> </div> - <div class="pb-3" t-raw="widget.quiz.rankProgress.motivational"/> - <button t-if="widget.slide.hasNext" type="button" class="btn btn-light o_wslides_quiz_btn align-self-end">Next <i class="fa fa-chevron-right"/></button> + <t t-if="widget.slide.hasNext"> + <button type="button" class="btn btn-light border o_wslides_quiz_btn align-self-end">Next <i class="fa fa-chevron-right"/></button> + </t> + <t t-else=""> + <!-- TODO: end course if no slide left --> + <a type="button" class="btn btn-light border align-self-end">End course</a> + </t> </div> </div> </div> diff --git a/addons/website_slides/static/src/xml/website_slides_fullscreen.xml b/addons/website_slides/static/src/xml/website_slides_fullscreen.xml index b364f486420..6793dd5c736 100644 --- a/addons/website_slides/static/src/xml/website_slides_fullscreen.xml +++ b/addons/website_slides/static/src/xml/website_slides_fullscreen.xml @@ -1,41 +1,22 @@ <templates id="template" xml:space="preserve"> - <t t-name="website.slides.fullscreen"> - <div t-if="slide.slide_type == 'video' && !showMiniQuiz" class="player embed-responsive embed-responsive-16by9 embed-responsive-item"> - <iframe id="youtube-player" t-att-src="embed_url" allowFullScreen="true" frameborder="0" enablejsapi="1" autoplay="1" allow="autoplay"></iframe> - </div> - <div t-if="['presentation', 'document'].indexOf(slide.slide_type) !== -1 && !showMiniQuiz" class="embed-responsive embed-responsive-4by3 embed-responsive-item "> - <iframe t-att-src="embed_url" class="o_wslides_iframe_viewer" allowFullScreen="true" height="315" width="420" frameborder="0"></iframe> + + <t t-name="website.slides.fullscreen.content"> + <t t-if="_.contains(['document', 'presentation'], widget.get('slide').type)"> + <div class="embed-responsive h-100"> + <iframe t-att-src="widget.get('slide').embedUrl" class="o_wslides_iframe_viewer" allowFullScreen="true" frameborder="0"/> </div> - <div t-if="slide.slide_type == 'infographic' && !showMiniQuiz" style="width:100%;height:100%;text-align:center;"> - <img t-attf-src="/web/image/slide.slide/#{slide.id}/image" class="img-fluid" style="height: 100%" alt="Slide image"/> + </t> + <t t-if="widget.get('slide').type === 'infographic'"> + <div class="o_wslides_fs_player w-100 h-100 overflow-auto d-flex align-items-start justify-content-center"> + <img t-att-src="'/web/image/slide.slide/'+ widget.get('slide').id +'/image'" class="img-fluid position-relative m-auto" alt="Slide image"/> </div> - <div class="o_wslides_fs_content"/> + </t> </t> - <t t-name="website.course.player.infos"> - <div class="text-box"> - <h1><t t-esc="slide.name"/></h1> - <a t-att-href="url" class="oe_js_show_comments">Show comments</a> - </div> - <div> - <button class="oe_js_slide_full_screen btn btn-secondary">Full Screen</button> - <button t-att-current_slide_id="slide.id" class="btn btn-primary oe_js_slide_completed">Mark as completed<i class="fa fa-check-circle ml-1"></i></button> + <t t-name="website.slides.fullscreen.video"> + <div class="player embed-responsive embed-responsive-16by9 embed-responsive-item h-100"> + <iframe t-att-id="'youtube-player' + widget.slide.id" t-att-src="widget.slide.embedUrl" allowFullScreen="true" frameborder="0" enablejsapi="1" autoplay="1" allow="autoplay"></iframe> </div> </t> - <t t-name="website.course.fullscreen.title"> - <t t-if="!miniQuiz"> - <i t-if="slide.slide_type == 'document'" class="fa fa-file-pdf-o mr-2"></i> - <i t-if="slide.slide_type == 'infographic'" class="fa fa-file-picture-o mr-2"></i> - <i t-if="slide.slide_type == 'video'" class="fa fa-play-circle mr-2"></i> - <i t-if="slide.slide_type == 'link'" class="fa fa-file-code-o mr-2"></i> - <i t-if="slide.slide_type == 'webpage'" class="fa fa-file-text mr-2"></i> - <i t-if="slide.slide_type == 'quiz'" class="fa fa-question-circle mr-2 text"></i> - <span class="o_wslides_fs_slide_title_span" t-esc="slide.name"/> - </t> - <t t-else=""> - <span><i class="fa fa-flag-checkered"></i>Quiz: <span t-esc="slide.name"/></span> - </t> - </t> - </templates> diff --git a/addons/website_slides/static/src/xml/website_slides_upload.xml b/addons/website_slides/static/src/xml/website_slides_upload.xml index bc42bb8557c..9daf0896e48 100644 --- a/addons/website_slides/static/src/xml/website_slides_upload.xml +++ b/addons/website_slides/static/src/xml/website_slides_upload.xml @@ -13,15 +13,16 @@ Slide Type Selection template --> <t t-name="website.slide.upload.modal.select"> - <div class="d-flex flex-wrap justify-content-between align-items-stretch text-primary p-1 mt-4"> - <t t-foreach="widget.slide_type_data" t-as="slide_type"> + <div class="row p-1 mt-4"> + <div t-foreach="widget.slide_type_data" t-as="slide_type" class="col-6 col-md-3"> <t t-set="type_data" t-value="widget.slide_type_data[slide_type]"/> - <div class="content-type d-flex flex-column align-items-center p-1 mb-4 o_wslides_select_type" t-att-data-slide-type="slide_type"> - <i t-attf-class="fa #{type_data['icon']} mb-2" style="font-size:4rem;"></i> + <a href="#" t-att-data-slide-type="slide_type" + class="content-type d-flex flex-column align-items-center mb-4 o_wslides_select_type btn rounded border text-600 p-3"> + <i t-attf-class="fa #{type_data['icon']} mb-2 fa-3x"/> <t t-esc="type_data['label']"/> - </div> - </t> + </a> + </div> </div> </t> diff --git a/addons/website_slides/tests/__init__.py b/addons/website_slides/tests/__init__.py index c9a6c617426..69bfc7de9e2 100644 --- a/addons/website_slides/tests/__init__.py +++ b/addons/website_slides/tests/__init__.py @@ -4,3 +4,4 @@ from . import common from . import test_security from . import test_statistics +from . import test_karma diff --git a/addons/website_slides/tests/test_karma.py b/addons/website_slides/tests/test_karma.py new file mode 100644 index 00000000000..df6d70823d4 --- /dev/null +++ b/addons/website_slides/tests/test_karma.py @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo.addons.website_slides.tests import common +from odoo.tests import tagged +from odoo.tools import mute_logger + + +@tagged('functional') +class TestKarmaGain(common.SlidesCase): + + def setUp(self): + super(TestKarmaGain, self).setUp() + + self.channel_2 = self.env['slide.channel'].sudo(self.user_publisher).create({ + 'name': 'Test Channel 2', + 'channel_type': 'training', + 'promote_strategy': 'most_voted', + 'enroll': 'public', + 'visibility': 'public', + 'website_published': True, + 'karma_gen_channel_finish': 100, + }) + + self.slide_2 = self.env['slide.slide'].sudo(self.user_publisher).create({ + 'name': 'How to travel through space and time', + 'channel_id': self.channel_2.id, + 'slide_type': 'presentation', + 'website_published': True, + 'completion_time': 2.0, + }) + + self.channel_3 = self.env['slide.channel'].sudo(self.user_publisher).create({ + 'name': 'Test Channel 3', + 'channel_type': 'training', + 'promote_strategy': 'most_voted', + 'enroll': 'public', + 'visibility': 'public', + 'website_published': True, + 'karma_gen_channel_finish': 50, + }) + + self.slide_3 = self.env['slide.slide'].sudo(self.user_publisher).create({ + 'name': 'How to duplicate yourself', + 'channel_id': self.channel_3.id, + 'slide_type': 'presentation', + 'website_published': True, + 'completion_time': 2.0, + }) + + def karma_gain_test(self, user): + # Add the user to the course + self.channel.sudo()._action_add_members(user.partner_id) + + # Init user env + channel = self.channel.sudo(user) + slide = self.slide.sudo(user) + self.assertEqual(user.karma, 0) + + # Finish the Course + karma = channel.karma_gen_channel_finish + slide.action_set_completed() + self.assertEqual(user.karma, karma) + + # Vote for a slide + karma = karma + channel.karma_gen_slide_vote + slide.action_like() + self.assertEqual(user.karma, karma) + slide.action_dislike() + self.assertEqual(user.karma, karma - channel.karma_gen_slide_vote) + slide.action_dislike() + self.assertEqual(user.karma, karma) + + # Finish two course at the same time (should not ever happen but hey, we never know) + self.channel_2.sudo()._action_add_members(user.partner_id) + self.channel_3.sudo()._action_add_members(user.partner_id) + + karma = karma + self.channel_2.karma_gen_channel_finish + self.channel_3.karma_gen_channel_finish + slides = self.slide_2.sudo(user) | self.slide_3.sudo(user) + slides.action_set_completed() + self.assertEqual(user.karma, karma) + + @mute_logger('odoo.models') + def test_users_karma_gain(self): + self.karma_gain_test(self.user_emp) + + @mute_logger('odoo.models') + def test_user_publisher_karma_gain(self): + self.karma_gain_test(self.user_publisher) + + @mute_logger('odoo.models') + def test_user_portal_karma_gain(self): + self.karma_gain_test(self.user_portal) diff --git a/addons/website_slides/views/slide_channel_views.xml b/addons/website_slides/views/slide_channel_views.xml index e85097bdd8b..541492f5ff3 100644 --- a/addons/website_slides/views/slide_channel_views.xml +++ b/addons/website_slides/views/slide_channel_views.xml @@ -111,6 +111,20 @@ <field name="allow_comment"/> </group> </page> + <page string="Karma Rules" name="karma_rules"> + <group> + <group string="Karma generation"> + <field name="karma_gen_slide_vote"/> + <field name="karma_gen_channel_rank"/> + <field name="karma_gen_channel_finish"/> + </group> + <group string="Karma based actions"> + <field name="karma_review"/> + <field name="karma_slide_comment"/> + <field name="karma_slide_vote"/> + </group> + </group> + </page> <page string="Statistics" groups="base.group_no_one"> <group> <group> diff --git a/addons/website_slides/views/website_slides_templates_course.xml b/addons/website_slides/views/website_slides_templates_course.xml index ccc215ebf4f..1b835af6335 100644 --- a/addons/website_slides/views/website_slides_templates_course.xml +++ b/addons/website_slides/views/website_slides_templates_course.xml @@ -6,9 +6,9 @@ <div class="o_wslides_course_nav"> <div class="container"> <div class="row align-items-center justify-content-between"> - <!-- nav --> - <nav aria-label="breadcrumb" class="col-md-6 col-xs-12"> - <ol class="breadcrumb"> + <!-- Desktop Mode --> + <nav aria-label="breadcrumb" class="col d-none d-md-flex"> + <ol class="breadcrumb bg-transparent mb-0 pl-0 py-0"> <li class="breadcrumb-item"> <a href="/slides">Home</a> </li> @@ -29,42 +29,63 @@ </li> </ol> </nav> - <div class="col-md-6 col-xs-12 d-flex flex-row align-items-center justify-content-end"> - <!-- karma / profile --> - <a t-if="not is_public_user" t-att-href="'/profile/user/%s?channel_id=%s' % (user.id, channel.id)" class="font-weight-bold mr-3"> - <i class="fa fa-diamond" /> <t t-esc="user_id.karma"/> - </a> + + <div class="col d-none d-md-flex flex-row align-items-center justify-content-end"> <!-- search --> - <form t-attf-action="/slides/#{slug(channel)}" role="search" method="get"> - <div class="input-group"> - <input type="text" class="form-control" name="search" t-attf-placeholder="Search in #{channel.name}" t-att-value="search"/> - <span class="input-group-append"> - <button class="btn btn-primary" type="submit" aria-label="Search" title="Search"> + <form t-attf-action="/slides/all" role="search" method="get"> + <div class="input-group o_wslides_course_nav_search ml-1 position-relative"> + <span class="input-group-prepend"> + <button class="btn btn-link text-white rounded-0 pr-1" type="submit" aria-label="Search" title="Search"> <i class="fa fa-search"></i> </button> </span> + <input type="text" class="form-control border-0 rounded-0 bg-transparent text-white" name="search" placeholder="Search courses"/> </div> </form> - <!-- sort / filter --> - <small class="dropdown float-right ml-3"> - <h6 class="m-0"> - <button class="btn btn-primary dropdown-toggle" type="button" id="slidesChannelDropdownSort" - data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> - <t t-if="sorting == 'most_voted'">Most Voted</t> - <t t-elif="sorting == 'most_viewed'">Most Viewed</t> - <t t-else="">Newest</t> - </button> - <div class="dropdown-menu" aria-labelledby="slidesChannelDropdownSort" role="menu"> - <div role="separator" class="dropdown-header">Sort by</div> - <a role="menuitem" t-att-href="'/slides/%s?%s' % (slug(channel), keep_query('debug', 'slide_type', sorting='latest'))" - t-att-class="'dropdown-item %s' % ('active' if sorting and sorting == 'latest' else '')">Newest</a> - <a role="menuitem" t-att-href="'/slides/%s?%s' % (slug(channel), keep_query('debug', 'slide_type', sorting='most_voted'))" - t-att-class="'dropdown-item %s' % ('active' if sorting and sorting == 'most_voted' else '')">Most Voted</a> - <a role="menuitem" t-att-href="'/slides/%s?%s' % (slug(channel), keep_query('debug', 'slide_type', sorting='most_viewed'))" - t-att-class="'dropdown-item %s' % ('active' if sorting and sorting == 'most_viewed' else '')">Most Viewed</a> + </div> + + <!-- Mobile Mode --> + <div class="col d-md-none py-1"> + <div class="btn-group w-100 position-relative" role="group" aria-label="Mobile sub-nav"> + <div class="btn-group w-100"> + <a class="btn bg-black-25 text-white dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Nav</a> + + <div class="dropdown-menu"> + <a class="dropdown-item" href="/slides">Home</a> + <a t-att-class="'dropdown-item %s' % ('active' if not search_category and not search_tag and not search_slide_type else '')" t-att-href="'/slides/%s' % slug(channel)"> + └<span class="ml-1" t-esc="channel.name"/> + </a> + <a class="dropdown-item active" t-att-aria-current="'page' and search_category" t-if="search_category" t-att-href="'/slides/%s/category/%s' % (slug(channel), slug(search_category))"> + └<span class="ml-1" t-esc="search_category.name"/> + </a> + <a class="dropdown-item active" t-att-aria-current="'page' and search_tag" t-if="search_tag" t-att-href="'/slides/%s/tag/%s' % (slug(channel), slug(search_tag))"> + └<span class="ml-1" t-esc="search_tag.name"/> + </a> + <a class="dropdown-item active" t-att-aria-current="'page' and search_uncategorized" t-if="search_uncategorized" t-att-href="'/slides/%s?search_uncategorized=1' % (slug(channel))"> + └<span class="ml-1">Uncategorized</span> + </a> + <a class="dropdown-item active" t-att-aria-current="'page' and search_slide_type" t-if="search_slide_type" t-att-href="'/slides/%s?slide_type=%s' % (slug(channel), search_slide_type)"> + └<span class="ml-1" t-esc="slide_types[search_slide_type]"/> + </a> + </div> + </div> + + <div class="btn-group ml-1 position-static"> + <a class="btn bg-black-25 text-white dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-search"></i></a> + <div class="dropdown-menu dropdown-menu-right w-100" style="right: 10px;"> + <form class="px-3" t-attf-action="/slides/#{slug(channel)}" role="search" method="get"> + <div class="input-group"> + <input type="text" class="form-control" name="search" placeholder="Search courses"/> + <span class="input-group-append"> + <button class="btn btn-primary" type="submit" aria-label="Search" title="Search"> + <i class="fa fa-search"/> + </button> + </span> + </div> + </form> </div> - </h6> - </small> + </div> + </div> </div> </div> </div> @@ -81,60 +102,118 @@ <t t-call="website.layout"> <div class="wrap o_wslides_wrap"> <t t-set="main_object" t-value="channel"/> - <t t-call="website_slides.course_nav"/> - <div class="o_wslides_course_header"> - <div class="container o_wslides_course_header_container"> - <div class="row align-items-end d-flex"> - <div class="col-md-4 d-none d-sm-block o_wslides_course_header_aside"> - <div t-field="channel.image" widget="image" t-options="{'widget': 'image'}"/> + <div t-attf-class="o_wslides_course_header o_wslides_gradient position-relative text-white pb-md-0 pt-2 pt-md-5 #{'pb-3' if channel.channel_type == 'training' else 'o_wslides_course_doc_header pb-5'}"> + <t t-call="website_slides.course_nav"/> + + <div class="container mt-5 mt-md-3 mt-xl-4"> + <div class="row align-items-end align-items-md-stretch"> + <!-- ==== Header Left ==== --> + <div class="col-12 col-md-4 col-lg-3"> + <div class="d-flex align-items-start justify-content-around h-100"> + <div class="o_wslides_course_pict d-inline-block mb-2 mt-3 my-md-0" t-attf-style="background-image:url(/web/image/slide.channel/#{channel.id}/image)"/> + </div> </div> - <div class="col-md-8 col-xs-12 align-self-stretch d-flex flex-column o_wslides_course_header_content"> - <div class="row"> - <h3 class="col-12"><span class="font-weight-bold" t-field="channel.name"/></h3> - <div class="col-12" t-field="channel.description"/> - <div class="col-xs-12 col-md-6 mt8"> - <t t-call="website_rating.rating_stars_static_popup_composer"> - <t t-set="rating_avg" t-value="rating_avg"/> - <t t-set="rating_total" t-value="rating_count"/> + + <!-- ==== Header Right ==== --> + <div class="col-12 col-md-8 col-lg-9 d-flex flex-column"> + <div class="d-flex flex-column"> + <h1 t-field="channel.name"/> + <p class="mb-0 mb-xl-3" t-field="channel.description"/> + + <div t-if="channel.channel_type == 'documentation'" class="my-1"> + <button role="button" class="btn text-white pl-0" title="Share Channel" + aria-label="Share Channel" + data-toggle="modal" data-target="#slideChannelShareModal"> + <i class="fa fa-share-square"></i> Share + </button> + </div> + </div> + <div class="d-flex flex-column justify-content-center h5 flex-grow-1 mb-md-5" t-if="channel.allow_comment"> + <t t-call="website_rating.rating_stars_static_popup_composer"> + <t t-set="btn_classes" t-value="'btn-warning'"/> + <t t-set="rating_avg" t-value="rating_avg"/> + <t t-set="rating_total" t-value="rating_count"/> + <t t-set="object" t-value="channel"/> + <t t-set="hash" t-value="message_post_hash"/> + <t t-set="pid" t-value="message_post_pid"/> + <t t-set="default_message_id" t-value="last_message_id"/> + <t t-set="default_message" t-value="last_message"/> + <t t-set="default_rating_value" t-value="last_rating_value"/> + <t t-set="force_submit_url" t-value="'/slides/mail/update_comment' if last_message_id else False"/> + <t t-set="disable_composer" t-value="not channel.can_review"/> + </t> + </div> + </div> + </div> + </div> + </div> + + <div class="o_wslides_course_main"> + <!-- ========== TRAINING COURSE ========== --> + <div t-if="channel.channel_type == 'training'" class="container"> + <div class="row"> + <!-- Training Sidebar --> + <div class="col-12 col-md-4 col-lg-3 mt-3 mt-md-0"> + <t t-call="website_slides.course_sidebar"/> + </div> + + <!-- Training Content --> + <div class="col-12 col-md-8 col-lg-9"> + <ul class="nav nav-tabs o_wslides_nav_tabs flex-nowrap" role="tablist" id="profile_extra_info_tablist"> + <li class="nav-item o_wslides_course_header_nav_home"> + <a t-att-class="'nav-link %s' % ('' if search_slide_type else 'active')" id="home-tab" data-toggle="pill" href="#home" role="tab" aria-controls="home" aria-selected="true"> + <i class="fa fa-home"/> Course + </a> + </li> + <li class="nav-item"> + <a class="nav-link" id="review-tab" data-toggle="pill" href="#review" role="tab" aria-controls="review" aria-selected="false">Review</a> + </li> + </ul> + + <div class="tab-content py-4 o_wslides_tabs_content mb-4" id="courseMainTabContent"> + <div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab"> + <t t-if="channel.channel_type == 'training'" t-call="website_slides.course_slides_list"/> + </div> + <div class="tab-pane fade" id="review" role="tabpanel" aria-labelledby="review-tab"> + <t t-call="portal.message_thread"> <t t-set="object" t-value="channel"/> <t t-set="hash" t-value="message_post_hash"/> <t t-set="pid" t-value="message_post_pid"/> - <t t-set="default_message_id" t-value="last_message_id"/> - <t t-set="default_message" t-value="last_message"/> - <t t-set="default_rating_value" t-value="last_rating_value"/> - <t t-set="force_submit_url" t-value="'/slides/mail/update_comment' if last_message_id else False"/> + <t t-set="display_rating" t-value="True"/> + <t t-set="disable_composer" t-value="True"/> </t> </div> </div> - <div class="row mt-auto o_wslides_course_header_nav"> - <div class="col-xs-12 col-md-8"> - <ul class="nav nav-tabs o_wslides_nav_tabs" id="profile_extra_info_tablist" role="tablist"> - <li class="nav-item o_wlides_course_header_nav_home"> - <a t-att-class="'nav-link %s' % ('' if search_slide_type else 'active')" id="home-tab" data-toggle="pill" href="#home" role="tab" aria-controls="home" aria-selected="true"> - <i class="fa fa-home"/> Course - </a> - </li> - <li class="nav-item"> - <a class="nav-link" id="review-tab" data-toggle="pill" href="#review" role="tab" aria-controls="review" aria-selected="false">Review</a> - </li> - </ul> - </div> - </div> </div> </div> </div> - </div> - <div class="container o_wslides_course_main"> - <div class="tab-content" id="courseMainTabContent"> - <div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab"> - <t t-if="channel.channel_type == 'training'" t-call="website_slides.course_slides_list"/> - <t t-if="channel.channel_type == 'documentation'" t-call="website_slides.course_slides_cards"/> - </div> - <div class="tab-pane fade" id="review" role="tabpanel" aria-labelledby="review-tab"> + + <!-- ========== DOCUMENTATION COURSE ========== --> + <t t-if="channel.channel_type == 'documentation'"> + <div class="container"> <div class="row"> - <t t-call="website_slides.course_sidebar"/> - <div class="col-lg-8"> + <div class="col-12 col-md-8 offset-md-4 col-lg-9 offset-lg-3"> + <ul class="nav nav-tabs o_wslides_nav_tabs o_wslides_doc_nav_tabs flex-nowrap" role="tablist" id="profile_extra_info_tablist"> + <li class="nav-item o_wslides_course_header_nav_home"> + <a class="nav-link active" id="home-tab" data-toggle="pill" href="#home" role="tab" aria-controls="home" aria-selected="true"> + <i class="fa fa-home"/> Course + </a> + </li> + <li class="nav-item"> + <a class="nav-link" id="review-tab" data-toggle="pill" href="#review" role="tab" aria-controls="review" aria-selected="false">Review</a> + </li> + </ul> + </div> + </div> + </div> + + <div class="tab-content pb-5" id="courseMainTabContent"> + <div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab"> + <t t-if="channel.channel_type == 'documentation'" t-call="website_slides.course_slides_cards"/> + </div> + <div class="tab-pane fade" id="review" role="tabpanel" aria-labelledby="review-tab"> + <div class="container pt-4"> <t t-call="portal.message_thread"> <t t-set="object" t-value="channel"/> <t t-set="hash" t-value="message_post_hash"/> @@ -145,19 +224,20 @@ </div> </div> </div> - </div> + </t> </div> </div> </t> </template> <template id="course_sidebar" name="Course Sidebar (infos, CTA)"> - <!-- Channel presentation, aka general information + CTAs --> - <div class="col-lg-4 col-xs-12 o_wslides_course_content_aside"> - <div class="bg-white"> - <div class="row justify-content-center o_wslides_js_course_join"> + <!-- Training-only: Channel sidebar (aka general information + CTAs) --> + <div class="bg-white px-3 py-2 py-md-3 mb-3 mb-md-5"> + + <div class="o_wslides_sidebar_top d-flex justify-content-between"> + <div class="o_wslides_js_course_join flex-grow-1"> <a t-if="not channel.is_member and channel.enroll == 'public'" role="button" - class="col-10 mt8 btn btn-primary o_wslides_js_course_join_link" + class="btn btn-primary btn-block o_wslides_js_course_join_link" title="Start Course" aria-label="Start Course Channel" t-att-href="'#'" t-att-data-channel-id="channel.id"> @@ -166,62 +246,40 @@ <t t-else="">Join Course</t> </span> </a> - <t t-if="not channel.is_member and channel.enroll == 'invite'"> - <a role="button" class="col-10 mt8 btn btn-light" t-att-href="'#'"> - <span class="cta-title text_small_caps">Private Course</span> - </a> + <div t-if="not channel.is_member and channel.enroll == 'invite'" class="text-center"> + <div class="alert my-0 bg-100 p-2">Private Course</div> <div t-if="channel.enroll_msg" t-field="channel.enroll_msg"/> - <span t-if="not channel.enroll_msg">Contact website administrator.</span> - </t> - <span t-if="channel.is_member" class="col-10 mt8 btn btn-primary"> - <i class="fa fa-chevron-right"></i> - <span class="cta-title text_small_caps">Already member</span> - </span> - </div> - <div class="row mt8"> - <span class="col-5">Last Update</span> - <span class="col"><t t-esc="channel.slide_last_update" t-options="{'widget': 'date'}"/></span> - </div> - <div class="row mt8"> - <span class="col-5">Members</span> - <span class="col" t-esc="channel.members_count"/> + <small t-if="not channel.enroll_msg">Contact website administrator.</small> + </div> + <div t-if="channel.is_member" class="d-flex align-items-center alert my-0 px-2 px-xl-3 bg-100"> + <t t-call="website_slides.slides_misc_user_image"> + <t t-set="img_class" t-value="'rounded-circle mr-1'"/> + <t t-set="img_style" t-value="'height: 1.4em'"/> + </t> + <h6 class="d-flex flex-grow-1 my-0">You're enrolled</h6> + <i class="fa fa-check"/> + </div> </div> - <t t-if="channel.channel_type == 'documentation'"> - <div class="row mt8"><div class="col"><hr/></div></div> - <t t-set="slide_type_keys" t-value="slide_types.keys()"/> - <t t-foreach="slide_type_keys" t-as="slide_type_key"> - <div class="row mt8 align-items-center"> - <span class="col-5"> - <t t-if="search_category"> - <a t-att-href="'/slides/%s/category/%s?%s' % (slug(channel), slug(search_category), keep_query('debug', slide_type=slide_type_key))" - t-att-class="'%s' % ('active' if search_slide_type == slide_type_key else '')"> - <t t-esc="slide_types[slide_type_key]"/> - </a> - </t> - <t t-else=""> - <a t-att-href="'/slides/%s?%s' % (slug(channel), keep_query('debug', slide_type=slide_type_key))" - t-att-class="'%s' % ('active' if search_slide_type == slide_type_key else '')"> - <t t-esc="slide_types[slide_type_key]"/> - </a> - </t> - </span> - <span class="col"> - <t t-if="search_category"> - <span class="badge badge-pill badge-info" t-esc="search_category['nbr_%s' % slide_type_key]"/> - </t> - <t t-else=""> - <span class="badge badge-pill badge-info" t-esc="channel['nbr_%s' % slide_type_key]"/> - </t> - </span> - </div> - </t> - </t> - <div class="row mt8"><div class="col"><hr/></div></div> - <div class="row justify-content-center mt8"> - <button role="button" class="btn btn-primary col-10" title="Share Channel" + <button class="btn btn-sm d-md-none bg-white ml-1 border" type="button" data-toggle="collapse" data-target="#o_wslides_sidebar_collapse" aria-expanded="false" aria-controls="o_wslides_sidebar_collapse">More info</button> + </div> + + <div id="o_wslides_sidebar_collapse" class="collapse d-md-block"> + <table class="table table-sm mt-3"> + <tr> + <th class="border-top-0">Last Update</th> + <td class="border-top-0"><t t-esc="channel.slide_last_update" t-options="{'widget': 'date'}"/></td> + </tr> + <tr> + <th>Members</th> + <td><t t-esc="channel.members_count"/></td> + </tr> + </table> + + <div class="mt-3"> + <button role="button" class="btn btn-link btn-block" title="Share Channel" aria-label="Share Channel" data-toggle="modal" data-target="#slideChannelShareModal"> - <i class="fa fa-share-square"></i> Share + <i class="fa fa-share-square fa-fw"/> Share </button> <div class="modal fade" id="slideChannelShareModal" tabindex="-1" role="dialog" aria-labelledby="slideChannelShareModalLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> @@ -247,13 +305,14 @@ </div> </div> </div> - <div t-if="channel.can_upload" class="row justify-content-center mt8"> - <a role="button" class="btn btn-primary o_wslides_js_slide_upload col-10" title="Upload Presentation" + + <div t-if="channel.can_upload" class="justify-content-center mt-1"> + <a role="button" class="btn btn-link btn-block o_wslides_js_slide_upload" title="Upload Presentation" aria-label="Upload Presentation" href="#" t-att-data-channel-id="channel.id" t-att-data-can-upload="channel.can_upload" t-att-data-can-publish="channel.can_publish"> - <i class="fa fa-cloud-upload"></i> Upload + <i class="fa fa-cloud-upload fa-fw"/> Upload </a> </div> </div> @@ -261,174 +320,276 @@ </template> <template id="course_slides_list" name="Training Course content: list"> - <div class="row"> - <t t-call="website_slides.course_sidebar"/> - <div class="col-lg-8 mt-3 mb-5 o_wslides_slides_list" t-att-data-channel-id="channel.id"> - <ul class="o_wslides_js_slides_list_container border-bottom list-unstyled"> - <t t-set="j" t-value="0"/> - <t t-foreach="category_data" t-as="category"> - <t t-set="category_record" t-value="category['category'] if category['id'] else None"/> - <t t-set="category_id" t-value="category['id'] if category['id'] else None"/> - <li t-if="category['total_slides'] or channel.can_publish" class="o_wslides_slide_list_category" - t-att-data-category-id="category_id"> - <div t-att-data-category-id="category_id" - t-att-class="'text-muted bg-white border-bottom font-weight-bold pt-0 pb-0 pl-2 pr-2 d-flex justify-content-between align-items-center %s' % ('o_wslides_js_category' if category_id else '')"> - <div class="pt-2 pb-2 d-flex align-items-center"> - <i t-if="channel.can_publish and category_id" class="fa fa-arrows mr-3"></i> - <t t-if="category_record"> - <span t-field="category_record.name"/> - </t> - <t t-else=""> - <span>Uncategorized</span> - </t> + <div class="mb-5 o_wslides_slides_list" t-att-data-channel-id="channel.id"> + + <ul class="o_wslides_js_slides_list_container list-unstyled"> + <t t-set="j" t-value="0"/> + <t t-foreach="category_data" t-as="category"> + <t t-set="category_id" t-value="category['id'] if category['id'] else None"/> + + <li t-if="category['total_slides'] or channel.can_publish" t-att-class="'o_wslides_slide_list_category mb-2' if category_id else 'mb-3'" t-att-data-category-id="category_id"> + <div t-att-data-category-id="category_id" + t-att-class="'o_wslides_slide_list_category_header position-relative d-flex justify-content-between align-items-center %s' % ('o_wslides_js_category bg-white shadow-sm border-bottom-0' if category_id and channel.can_upload else 'border-0 py-1')"> + <div t-att-class="'d-flex align-items-center pl-3 %s' % ('o_wslides_slides_list_drag' if channel.can_publish else '')"> + <div t-if="channel.can_publish and category_id" class="o_wslides_slides_list_drag py-2 pr-3"> + <i class="fa fa-bars"/> </div> + <span t-if="category_id" t-att-class="'text-muted' if not channel.can_upload else ''" t-esc="category['name']"/> + <em t-elif="channel.can_publish" class="text-muted mb-1">Uncategorized</em> + <small t-if="not category['total_slides']" class="ml-1 text-muted"><b>(empty)</b></small> + </div> + <div t-if="category_id" class="o_text_link d-flex border-left"> <a t-if="channel.can_upload" - class="mr-2 pt-2 pb-2 border-left o_wslides_js_slide_upload" + class="o_wslides_js_slide_upload px-3 py-2" role="button" aria-label="Upload Presentation" href="#" - style="text-decoration: none;" t-att-data-channel-id="channel.id" t-att-data-category-id="category_id" t-att-data-can-upload="channel.can_upload" t-att-data-can-publish="channel.can_publish"> - <i class="fa fa-plus ml-2"></i> Add content + <i class="fa fa-plus mr-1"/> <span class="d-none d-md-inline-block">Add content</span> </a> </div> - <ul t-att-data-category-id="category_id" class="list-unstyled"> - <li t-att-class="('text-muted font-italic o_wslides_slides_list_slide o_wslides_js_slides_list_empty justify-content-between align-items-center p-2 %s') % ('d-none' if category['total_slides'] else 'd-flex')"> - <div class="ml-2"> - <span>Empty category</span> - </div> - </li> - <li class="o_wslides_slides_list_slide o_not_editable"></li> - <t t-foreach="category['slides']" t-as="slide"> - <t t-call="website_slides.course_slides_list_slide" /> - <t t-set="j" t-value="j+1"/> - </t> - </ul> - </li> - </t> - </ul> - <div t-if="channel.can_upload" class="o_wslides_content_actions"> - <a class="o_wslides_js_slide_upload mr-2 border btn btn-light text-muted font-weight-bold" - role="button" - aria-label="Upload Presentation" - href="#" - t-att-data-channel-id="channel.id" - t-att-data-can-upload="channel.can_upload" - t-att-data-can-publish="channel.can_publish"><i class="fa fa-plus"></i> Add Content</a> - <a class="o_wslides_js_slide_section_add border btn btn-light text-muted font-weight-bold" t-attf-channel_id="#{channel.id}" - href="#" role="button" - groups="website.group_website_publisher"><i class="fa fa-folder-o"></i> Add Section</a> - </div> + </div> + <ul t-att-data-category-id="category_id" class="list-unstyled pb-1 border-top"> + <li class="o_wslides_slides_list_slide o_not_editable border-0"/> + <li class="o_wslides_js_slides_list_empty border-0"/> + + <t t-foreach="category['slides']" t-as="slide"> + <t t-call="website_slides.course_slides_list_slide" /> + <t t-set="j" t-value="j+1"/> + </t> + </ul> + </li> + </t> + </ul> + <div t-if="channel.can_upload" class="o_wslides_content_actions"> + <a class="o_wslides_js_slide_upload mr-1 border btn btn-light text-muted" + role="button" + aria-label="Upload Presentation" + href="#" + t-att-data-channel-id="channel.id" + t-att-data-can-upload="channel.can_upload" + t-att-data-can-publish="channel.can_publish"><i class="fa fa-plus mr-1"/>Add Content</a> + <a class="o_wslides_js_slide_section_add border btn btn-light text-muted" t-attf-channel_id="#{channel.id}" + href="#" role="button" + groups="website.group_website_publisher"><i class="fa fa-folder-o mr-1"/>Add Section</a> </div> - <div t-field="channel.description_html"/> </div> + <div t-field="channel.description_html"/> </template> <template id="course_slides_list_slide" name="Slide template for a training channel"> - <li t-att-index="j" t-att-data-slide-id="slide.id" t-att-data-category-id="category_id" - class="o_wslides_slides_list_slide d-flex align-items-center px-2 py-0"> - <div t-if="channel.can_publish" class="border-right pt-2 pb-2"> - <i class="fa fa-arrows mr-2 text-muted"></i> + <li t-att-index="j" t-att-data-slide-id="slide.id" t-att-data-category-id="category_id" t-attf-class="o_wslides_slides_list_slide bg-white-50 border-top-0 d-flex align-items-center pl-2 #{'py-1 pr-2' if not channel.can_upload else ''}"> + <div t-if="channel.can_publish" class=" o_wslides_slides_list_drag border-right p-2"> + <i class="fa fa-bars mr-2"></i> </div> - <a t-if="slide.is_preview or channel.is_member or channel.can_publish" class="o_wslides_js_slides_list_slide_link font-weight-bold mr-auto" - t-attf-href="/slides/slide/#{slug(slide)}"> - <t t-call="website_slides.slide_icon"> - <t t-set="icon_class" t-value="'pt-2 pb-2 ml-2 mr-2'"/> - </t> + <t t-call="website_slides.slide_icon"> + <t t-set="icon_class" t-value="'py-2 mx-2'"/> + </t> + <a t-if="slide.is_preview or channel.is_member or channel.can_publish" class="o_wslides_js_slides_list_slide_link mr-auto" t-attf-href="/slides/slide/#{slug(slide)}"> <span t-field="slide.name"/> </a> - <span t-else="" class="text-muted mr-auto"> - <t t-call="website_slides.slide_icon"> - <t t-set="icon_class" t-value="'pt-2 pb-2 ml-2 mr-2'"/> - </t> + <span t-else="" class="mr-auto"> <span t-esc="slide.name"/> </span> - <t t-if="slide.question_ids"> - <span t-att-class="'badge text-white font-weight-bold %s' % ('badge-success' if channel_progress[slide.id].get('completed') else 'badge-warning')"> - <i class="fa fa-flag mr-2"></i> + + <div class="d-flex flex-wrap"> + <span t-if="slide.question_ids" t-att-class="'badge font-weight-bold px-2 py-1 m-1 %s' % ('badge-success' if channel_progress[slide.id].get('completed') else 'badge-warning')"> + <i t-attf-class="fa fa-fw #{'fa-check' if channel_progress[slide.id].get('completed') else 'fa-flag'}"/> <t t-esc="channel_progress[slide.id].get('quiz_karma_won', 0) if channel_progress[slide.id].get('completed') else channel_progress[slide.id].get('quiz_karma_gain', 0)"/> xp </span> - </t> - <span class="badge badge-danger ml-2" t-if="not slide.website_published">Unpublished</span> - <span class="badge badge-info ml-2" t-if="slide.is_preview">Free preview</span> + <span class="badge badge-danger font-weight-normal px-2 py-1 m-1" t-if="not slide.website_published">Unpublished</span> + <span class="badge badge-success font-weight-normal px-2 py-1 m-1" t-if="slide.is_preview and not channel.is_member">Free preview</span> + </div> + <div t-if="channel.is_member or channel.can_publish" class="pt-2 pb-2 border-left ml-2 mr-2 pl-2 d-flex align-items-center o_wslides_slides_list_slide_controls"> <t t-if="channel.is_member"> - <i t-if="not channel_progress[slide.id].get('completed')" class="check-done fa fa-check-circle text-muted mr-2"></i> - <i t-if="channel_progress[slide.id].get('completed')" class="check-done text-primary fa fa-check-circle mr-2"></i> + <i t-if="not channel_progress[slide.id].get('completed')" class="check-done fa fa-circle-o text-500 px-2"></i> + <i t-else="" class="check-done text-success fa fa-check-circle px-2"></i> </t> - <a t-if="channel.can_publish and not slide.slide_type == 'webpage'" t-attf-href="/web#id=#{slide.id}&action=#{slide_action}&model=slide.slide&view_type=form"> - <i class="fa fa-pencil text-muted mr-2"></i> - </a> - <a t-if="channel.can_publish and slide.slide_type == 'webpage'" t-attf-href="/slides/slide/#{slug(slide)}?enable_editor=1"> - <i class="fa fa-pencil text-muted mr-2"></i> - </a> - <i t-if="channel.can_publish" t-att-data-slide-id="slide.id" class="fa fa-trash text-muted o_wslides_js_slide_archive"></i> + <span t-if="channel.can_publish" class="d-none d-md-inline-block"> + <a t-if="slide.slide_type == 'webpage'" class="px-2 o_text_link text-primary" target="_blank" t-attf-href="/slides/slide/#{slug(slide)}?enable_editor=1"><span class="fa fa-pencil"/></a> + <a t-else="" class="px-2 o_text_link text-primary" target="_blank" t-attf-href="/web#id=#{slide.id}&action=#{slide_action}&model=slide.slide&view_type=form"><span class="fa fa-pencil"/></a> + <a href="#" t-att-data-slide-id="slide.id" class="o_text_link text-danger px-2 o_wslides_js_slide_archive"><span class="fa fa-trash"/></a> + </span> </div> </li> </template> +<!-- ======= Documentation Course content: cards / categories======= --> <template id="course_slides_cards" name="Documentation Course content: cards / categories"> - <div t-if="not search" class="row mb-5"> - <t t-call="website_slides.course_sidebar"/> - <div class="col-lg-8"> - <div class="mt-3 w-100"> - <h5 class="m-0"> Featured lesson</h5> - <hr class="mt-2"/> + <nav class="navbar navbar-expand-lg navbar-light mb-4 border-bottom"> + <div class="container"> + <a class="navbar-brand d-lg-none" href="#">Filter & order</a> + + <div class="form-inline ml-auto d-lg-none" t-if="search_slide_type or search"> + <a t-att-href="'/slides/%s' % (slug(channel))" class="btn btn-info mr-3"> + <i class="fa fa-eraser mr-1"/>Clear filters + </a> </div> - <div class="row" t-if="slide_promoted"> - <div class="col-4"> - <img class="img img-fluid" style="" - t-att-src="'/slides/slide/%s/get_image?field=image_large' % slide_promoted.id" - t-att-alt="slide_promoted.name"/> - </div> - <div class="col-8"> - <h3 class="w-100" t-att-title="slide_promoted.name"> - <t t-if="slide_promoted.is_preview or channel.is_member or is_slides_publisher"> - <a t-attf-href="/slides/slide/#{slug(slide_promoted)}" class="font-weight-bold text-muted" t-field="slide_promoted.name"/> + + <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> + <span class="navbar-toggler-icon"></span> + </button> + + <div class="collapse navbar-collapse" id="navbarSupportedContent"> + <ul class="navbar-nav mr-lg-auto align-items-lg-center"> + + <t t-set="slide_type_keys" t-value="slide_types.keys()"/> + <t t-foreach="slide_type_keys" t-as="slide_type_key"> + <t t-if="search_category"> + <li t-if="search_category['nbr_%s' % slide_type_key] > 0" class="nav-item"> + <a t-att-href="'/slides/%s/category/%s?%s' % (slug(channel), slug(search_category), keep_query('debug', slide_type=slide_type_key))" + t-att-class="'nav-link d-flex align-items-center justify-content-between pl-0 mr-1 %s' % ('active' if search_slide_type == slide_type_key else '')"> + <t t-esc="slide_types[slide_type_key]"/> + <span t-attf-class="badge badge-pill ml-1 #{'badge-info' if search_slide_type == slide_type_key else 'bg-400'}" t-esc="search_category['nbr_%s' % slide_type_key]"/> + </a> + </li> </t> <t t-else=""> - <span class="font-weight-bold text-muted" t-field="slide_promoted.name"/> + <li t-if="channel['nbr_%s' % slide_type_key] > 0" class="nav-item"> + <a t-att-href="'/slides/%s?%s' % (slug(channel), keep_query('debug', slide_type=slide_type_key))" + t-att-class="'nav-link d-flex align-items-center justify-content-between pl-0 mr-1 %s' % ('active' if search_slide_type == slide_type_key else '')"> + <t t-esc="slide_types[slide_type_key]"/> + <span t-attf-class="badge badge-pill ml-1 #{'badge-info' if search_slide_type == slide_type_key else 'bg-400'}" t-esc="channel['nbr_%s' % slide_type_key]"/> + </a> + </li> </t> - </h3> - <div t-field="slide_promoted.description"/> + </t> + </ul> + + <ul class="navbar-nav mr-auto"> + <li class="nav-item dropdown ml-lg-auto"> + <a class="nav-link dropdown-toggle dropdown-toggle align-items-center d-flex" type="button" id="slidesChannelDropdownSort" + data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" href="#"> + <b>Order by</b> + <span class="d-none d-xl-inline">: + <t t-if="sorting == 'most_voted'">Most Voted</t> + <t t-elif="sorting == 'most_viewed'">Most Viewed</t> + <t t-else="">Newest</t> + </span> + </a> + <div class="dropdown-menu" aria-labelledby="slidesChannelDropdownSort" role="menu"> + <h6 class="dropdown-header">Sort by</h6> + <a role="menuitem" t-att-href="'/slides/%s?%s' % (slug(channel), keep_query('debug', 'slide_type', sorting='latest'))" + t-att-class="'dropdown-item %s' % ('active' if sorting and sorting == 'latest' else '')">Newest</a> + <a role="menuitem" t-att-href="'/slides/%s?%s' % (slug(channel), keep_query('debug', 'slide_type', sorting='most_voted'))" + t-att-class="'dropdown-item %s' % ('active' if sorting and sorting == 'most_voted' else '')">Most Voted</a> + <a role="menuitem" t-att-href="'/slides/%s?%s' % (slug(channel), keep_query('debug', 'slide_type', sorting='most_viewed'))" + t-att-class="'dropdown-item %s' % ('active' if sorting and sorting == 'most_viewed' else '')">Most Viewed</a> + </div> + </li> + </ul> + + <div class="form-inline mr-3"> + <a t-if="search_slide_type or search" t-att-href="'/slides/%s' % (slug(channel))" class="btn btn-sm btn-info ml-1"> + <i class="fa fa-eraser mr-1"/>Clear filters + </a> </div> + + <form t-attf-action="/slides/#{slug(channel)}" role="search" method="get" class="form-inline my-2 my-lg-0"> + <div class="input-group position-relative"> + <input type="text" class="form-control border" name="search" placeholder="Search in content" t-att-value="search"/> + <div class="input-group-append"> + <button class="btn border" type="submit" aria-label="Search" title="Search"> + <i class="fa fa-search"/> + </button> + </div> + </div> + </form> </div> </div> + </nav> + + <div t-if="channel.can_upload" class="text-right container pb-2"> + <a class="btn btn-primary py-1 o_wslides_js_slide_upload" + title="Upload Presentation" role="button" + aria-label="Upload Presentation" href="#" + t-att-data-channel-id="channel.id" + t-att-data-can-upload="channel.can_upload" + t-att-data-can-publish="channel.can_publish"> + <i class="fa fa-cloud-upload mr-1"/>Upload new content + </a> </div> - <div t-if="search and not category_data" class="row mt16 justify-content-end"> - <div class="col-12"> - <p class="text-center">No content was found using your search <span class="font-weight-bold" t-esc="search"/>.</p> + <!-- Featured lesson --> + <div t-if="not search and not search_slide_type and slide_promoted" class="container mb-3"> + <div class="card"> + <div class="card-body d-flex flex-column flex-lg-row"> + <t t-set="image_url" t-value="'/web/image/slide.slide/%s/image' % slide_promoted.id"/> + + <t t-if="slide_promoted.is_preview or channel.is_member or is_slides_publisher"> + <a t-attf-href="/slides/slide/#{slug(slide_promoted)}" class="w-100 w-lg-50 mr-0 mr-lg-4 mb-3 mb-lg-0 flex-shrink-0 rounded border"> + <div t-attf-style="background-image:url(#{image_url}); background-size: cover; background-position:center; padding-bottom: 35%;" class="h-lg-100"/> + </a> + </t> + <t t-else=""> + <div class="w-100 w-lg-50 mr-0 mr-lg-4 mb-3 mb-lg-0 flex-shrink-0 rounded border"> + <div t-attf-style="background-image:url(#{image_url}); background-size: cover; background-position:center; padding-bottom: 35%;" class="h-lg-100"/> + </div> + </t> + + <div> + <a t-if="slide_promoted.is_preview or channel.is_member or is_slides_publisher" + t-attf-href="/slides/slide/#{slug(slide_promoted)}" + class="h4 d-block" t-att-title="slide_promoted.name" t-field="slide_promoted.name"/> + <h4 t-else="" class="text-muted" t-field="slide_promoted.name"/> + + <div t-if="slide_promoted.tag_ids" class="border-top mt-2 pt-1"> + <t t-foreach="slide_promoted.tag_ids" t-as="tag"> + <a t-att-href="'/slides/%s/tag/%s' % (slug(slide_promoted.channel_id), slug(tag))" class="badge badge-light" t-esc="tag.name"/> + </t> + </div> + <div class="o_wslides_desc_truncate_10 mt-3" t-field="slide_promoted.description"/> + </div> + </div> </div> </div> - <t t-foreach="category_data" t-as="category"> - <div class="mb-5"> - <div class="row align-items-center"> - <div class="col"> - <t t-if="category['id']"> - <a t-att-href="'/slides/%s/category/%s' % (slug(channel), category['slug_name'])" class="float-right">View all</a> - </t> - <t t-else=""> - <a t-att-href="'/slides/%s?uncategorized=1' % (slug(channel))" class="float-right">View all</a> - </t> + + <div class="container py-2"> + <t t-if="search"> + <t t-set="search_results_number" t-value="0"/> + <t t-foreach="category_data" t-as="category"> + <t t-set="search_results_number" t-value="search_results_number + category['total_slides']"/> + </t> + <div t-if="search_results_number == 0" class="alert alert-info mt-4 mb-5 text-center"> + No content was found using your search <span class="font-weight-bold" t-esc="search"/>. + </div> + </t> + + <t t-foreach="category_data" t-as="category"> + <div class="mb-2" t-if="(category['slides'] or channel.can_publish) and (search_category and search_category.id == category['id'] or not search_category)"> + <div class="d-flex align-items-center justify-content-between border-bottom pb-2 mb-3" t-if="category['name'] != 'Uncategorized'"> <h5 class="m-0"><t t-esc="category['name']"/></h5> - <hr class="mt-2"/> + <a t-if="category['id']" t-att-href="'/slides/%s/category/%s' % (slug(channel), category['slug_name'])">View all</a> + <a t-else="" t-att-href="'/slides/%s?uncategorized=1' % (slug(channel))">View all</a> + </div> + <div class="row mx-n2"> + <t t-foreach="category['slides']" t-as="slide"> + <t t-if="(slide.id != slide_promoted.id) and (slide_promoted and not search) "> + <div class="col-12 col-sm-6 col-lg-3 px-2 d-flex flex-grow-1" t-call="website_slides.lesson_card"/> + </t> + <t t-elif="search_slide_type or search"> + <div class="col-12 col-sm-6 col-lg-3 px-2 d-flex flex-grow-1" t-call="website_slides.lesson_card"/> + </t> + </t> </div> </div> - <div class="row mx-n2 mt8"> - <t t-foreach="category['slides']" t-as="slide"> - <div class="col-md-3 col-sm-6 px-2 col-xs-12 d-flex flex-grow-1" t-call="website_slides.lesson_card"/> - </t> - </div> + </t> + + <div class="row"> + <div class="col" t-field="channel.description_html"/> </div> - </t> - <div class="row"> - <div class="col" t-field="channel.description_html"/> + + <t t-if="search_category"> + <div class="form-inline justify-content-center"> + <t t-call="website_profile.pager_nobox"></t> + </div> + </t> </div> <t t-if="search_category"> - <div class="form-inline justify-content-center"> + <div class="form-inline justify-content-center pb-5"> <t t-call="website_profile.pager_nobox"></t> </div> </t> @@ -436,27 +597,35 @@ <template id='lesson_card' name="Lesson Card"> <div class="card w-100 o_wslides_lesson_card mb-4"> - <t t-set="lesson_image" t-value="'/slides/slide/%s/get_image?field=image_large' % slide.id"/> - <t t-set="can_access" t-value="slide.is_preview or channel.is_member or is_slides_publisher"/> - <a t-if="can_access" t-attf-href="/slides/slide/#{slug(slide)}" t-title="slide.name"> - <div class="card-img-top" t-attf-style="padding-top: 50%; background-image: url(#{lesson_image}); background-size: cover; background-position:center"/> - </a> + <t t-set="can_access" t-value="slide.is_preview or channel.is_member or channel.can_publish"/> + + <t t-if="slide.image"> + <t t-set="lesson_image" t-value="'/web/image/slide.slide/%s/image' % slide.id"/> + <a t-if="can_access" t-attf-href="/slides/slide/#{slug(slide)}" t-title="slide.name"> + <div class="card-img-top border-bottom" t-attf-style="padding-top: 50%; background-image: url(#{lesson_image}); background-size: cover; background-position:center"/> + </a> + <div t-else="" class="card-img-top border-bottom" t-attf-style="padding-top: 50%; background-image: url(#{lesson_image}); background-size: cover; background-position:center"/> + </t> <t t-else=""> - <div class="card-img-top" t-attf-style="padding-top: 50%; background-image: url(#{lesson_image}); background-size: cover; background-position:center"/> + <a t-if="can_access" t-attf-href="/slides/slide/#{slug(slide)}" t-title="slide.name"> + <div class="card-img-top border-bottom o_wslides_gradient" t-attf-style="padding-top: 50%;"/> + </a> + <div t-else="" class="card-img-top border-bottom o_wslides_gradient" t-attf-style="padding-top: 50%;"/> </t> + <div class="card-body"> <a t-if="can_access" class="card-title h5" t-attf-href="/slides/slide/#{slug(slide)}" t-esc="slide.name"/> <span t-else="" class="card-title h5 text-muted" t-esc="slide.name"/> - <div class="card-subtitle mb-2 text-muted"> + <div class="card-subtitle mb-2 text-muted" t-if="slide.is_preview or (not slide.is_published and user.has_group('website.group_website_publisher'))"> <t t-if="slide.is_preview"> <span class="badge badge-info">Free preview</span> </t> - <t t-if="not slide.is_published and user.has_group('website.group_website_publisher')"> + <t t-if="not slide.is_published and channel.can_publish"> <span class="badge badge-danger">Unpublished</span> </t> </div> - <div class="card-text mt-1"> - <div class="font-weight-light oe_no_empty" t-field="slide.description"/> + <div class="card-text pt-2"> + <div class="o_wslides_desc_truncate_3 font-weight-light oe_no_empty" t-field="slide.description"/> <div t-if="slide.tag_ids" class="border-top mt-2 pt-1"> <t t-foreach="slide.tag_ids" t-as="tag"> <a t-att-href="'/slides/%s/tag/%s' % (slug(slide.channel_id), slug(tag))" class="badge badge-light" t-esc="tag.name"/> @@ -468,11 +637,11 @@ <div class="d-flex align-items-center small"> <span class="font-weight-bold mr-auto" t-field="slide.completion_time" t-options='{"widget": "float_time"}'/> <div class="o_wslides_js_slide_like mr-2"> - <span class="o_wslides_js_slide_like_up" tabindex="0" data-toggle="popover" t-att-data-slide-id="slide.id"> + <span t-att-class="'o_wslides_js_slide_like_up %s' % ('disabled' if not channel.can_vote else '')" tabindex="0" data-toggle="popover" t-att-data-slide-id="slide.id"> <i class="fa fa-thumbs-up fa-1x" role="img" aria-label="Likes" title="Likes"></i> <span t-esc="slide.likes"/> </span> - <span class="o_wslides_js_slide_like_down" tabindex="0" data-toggle="popover" t-att-data-slide-id="slide.id"> + <span t-att-class="'o_wslides_js_slide_like_down %s' % ('disabled' if not channel.can_vote else '')" tabindex="0" data-toggle="popover" t-att-data-slide-id="slide.id"> <i class="fa fa-thumbs-down fa-1x" role="img" aria-label="Dislikes" title="Dislikes"></i> <span t-esc="slide.dislikes"/> </span> diff --git a/addons/website_slides/views/website_slides_templates_homepage.xml b/addons/website_slides/views/website_slides_templates_homepage.xml index 108221a7ab0..7991462f5af 100644 --- a/addons/website_slides/views/website_slides_templates_homepage.xml +++ b/addons/website_slides/views/website_slides_templates_homepage.xml @@ -11,7 +11,7 @@ <h1 class="display-3 mb-0">Reach new heights</h1> <h2 class="mb-4">Start your online course today !</h2> <div class="row mt-1 mb-3"> - <div class="col-lg-4"> + <div class="col-lg-6"> <p>Skill up and have an impact! Your business career starts here. Time to start a course.</p> </div> <div class="col-lg-3"> @@ -22,26 +22,39 @@ </div> </section> <div class="container mt16 o_wslides_home_nav position-relative"> - <nav class="navbar navbar-expand-md navbar-light shadow-sm" style="background: white!important"> - <button class="navbar-toggler" type="button" + <nav class="navbar navbar-expand-lg navbar-light shadow-sm" style="background: white!important"> + <form method="GET" class="form-inline o_wslides_nav_navbar_right order-lg-3" t-attf-action="/slides/all" role="search"> + <div class="input-group"> + <input type="search" name="search" class="form-control" placeholder="Search courses" aria-label="Search" t-att-value="search_term"/> + <div class="input-group-append"> + <button class="btn border border-left-0 oe_search_button" type="submit" aria-label="Search" title="Search"> + <i class="fa fa-search"/> + </button> + </div> + </div> + </form> + <button class="navbar-toggler px-2 order-1" type="button" data-toggle="collapse" data-target="#navbarSlidesHomepage" aria-controls="navbarSlidesHomepage" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"/> </button> - <div class="collapse navbar-collapse" id="navbarSlidesHomepage"> - <div class="navbar-nav"> + <div class="collapse navbar-collapse order-2" id="navbarSlidesHomepage"> + <div class="navbar-nav pt-3 pt-lg-0"> <a class="nav-link nav-link mr-md-2 o_wslides_home_all_slides" href="/slides/all"><i class="fa fa-graduation-cap mr-1"/>All courses</a> </div> - <div class="navbar-nav o_wslides_nav_navbar_right"> - <t t-if="is_public_user"> - <a class="nav-link nav-link" href="/web/login?redirect=/slides/all?my=1"><i class="fa fa-file mr-1"/>My courses</a> - </t><t t-else=""> - <a class="nav-link nav-link" href="/slides/all?my=1"><i class="fa fa-file mr-1"/>My courses</a> - </t> - </div> </div> </nav> + <div class="o_wprofile_email_validation_container"> + <t t-call="website_profile.email_validation_banner"> + <t t-set="redirect_url" t-value="'/slides'"/> + <t t-set="send_alert_classes" t-value="'alert alert-danger alert-dismissable mt-4 mb-0'"/> + <t t-set="done_alert_classes" t-value="'alert alert-success alert-dismissable mt-4 mb-0'"/> + <t t-set="send_validation_email_message" t-value="'Click here to send a verification email allowing you to participate to the eLearning.'"/> + <t t-set="additional_validated_email_message" t-value="' You may now participate to our eLearning.'"/> + </t> + </div> </div> + <div class="container o_wslides_home_main"> <div class="row"> <div t-if="is_public_user" class="col-lg-3 order-3 order-lg-2"> @@ -65,10 +78,10 @@ <t t-set="img_style" t-value="'height: 22px'"/> </t> <h5 t-esc="user.name" class="d-flex flex-grow-1 mb-0"/> - <a class="d-none d-lg-block" t-att-href="'/profile/user/%s' % user.id">Edit</a> + <a class="d-none d-lg-block" t-att-href="'/profile/user/%s' % user.id">View</a> <a class="d-lg-none btn btn-sm bg-white border" href="#" data-toggle="collapse" data-target="#o_wslides_home_aside_content">More info</a> </div> - <hr class="d-none d-lg-block mt-2"/> + <hr class="d-none d-lg-block mt-2 pt-2 mb-1"/> </div> <div id="o_wslides_home_aside_content" class="collapse d-lg-block"> <div class="row mb-5 mt-3 mt-lg-0"> @@ -86,12 +99,12 @@ <div class="col-lg-9 pr-lg-5 order-lg-1"> <t t-if="channels_my"> <t t-set="void_count" t-value="3 - len(channels_my[:3])"/> - <div class="o_wslides_home_content_section mb-5"> + <div class="o_wslides_home_content_section mb-3"> <div class="row o_wslides_home_content_section_title align-items-center"> <div class="col"> - <a href="slides/all" class="float-right">View all</a> - <h5 class="m-0">Complete latest courses</h5> - <hr class="mt-2"/> + <a href="/slides/all?my=1" class="float-right">View all</a> + <h5 class="m-0">My courses</h5> + <hr class="mt-2 pb-1 mb-1"/> </div> </div> <div class="row mx-n2 mt8"> @@ -101,12 +114,12 @@ </div> </div> </t> - <div class="o_wslides_home_content_section mb-5"> + <div class="o_wslides_home_content_section mb-3"> <div class="row o_wslides_home_content_section_title align-items-center"> <div class="col"> <a href="slides/all" class="float-right">View all</a> <h5 class="m-0">Most popular courses</h5> - <hr class="mt-2"/> + <hr class="mt-2 pb-1 mb-1"/> </div> </div> <div class="row mx-n2 mt8"> @@ -115,12 +128,12 @@ </t> </div> </div> - <div class="o_wslides_home_content_section mb-5"> + <div class="o_wslides_home_content_section mb-3"> <div class="row o_wslides_home_content_section_title align-items-center"> <div class="col"> <a href="slides/all" class="float-right">View all</a> <h5 class="m-0">Newest courses</h5> - <hr class="mt-2"/> + <hr class="mt-2 pb-1 mb-1"/> </div> </div> <div class="row mx-n2 mt8"> @@ -134,8 +147,14 @@ </div> <section class="s_banner" style="background-image: url(/website_slides/static/src/img/banner_heroes_default.svg); background-size: cover; background-position: right bottom"> <div class="container py-5"> - <h2 class="text-white mb-4">Meet the people who transformed their company</h2> - <a href="/profile/users" class="btn btn-primary btn-lg">Go meet them</a> + <div class="row align-items-center"> + <div class="col-12 col-md"> + <h2 class="my-4 text-white">Meet the people who transformed their company</h2> + </div> + <div class="col-12 col-md-4"> + <a href="/profile/users" class="btn btn-primary btn-lg">Go meet them</a> + </div> + </div> </div> </section> </div> @@ -195,10 +214,10 @@ <form method="GET" class="form-inline o_wslides_nav_navbar_right"> <div class="input-group"> <input type="search" name="search" class="form-control" - placeholder="Search something" aria-label="Search" + placeholder="Search courses" aria-label="Search" t-att-value="search_term"/> <div class="input-group-append"> - <button class="btn border oe_search_button" type="submit" aria-label="Search" title="Search"> + <button class="btn border border-left-0 oe_search_button" type="submit" aria-label="Search" title="Search"> <i class="fa fa-search"/> </button> </div> @@ -206,6 +225,13 @@ </form> </div> </nav> + <div class="o_wprofile_email_validation_container mb16 mt16"> + <t t-call="website_profile.email_validation_banner"> + <t t-set="redirect_url" t-value="'/slides'"/> + <t t-set="send_validation_email_message" t-value="'Click here to send a verification email allowing you to participate to the eLearning.'"/> + <t t-set="additional_validated_email_message" t-value="' You may now participate to our eLearning.'"/> + </t> + </div> </div> <div class="container o_wslides_home_main pb-5"> <div t-if="search_term and not channels" class="alert alert-info mb-5"> @@ -218,15 +244,13 @@ </div> </div> - <section class="s_banner bg-900" style="background-image: url("/website/static/src/img/backgrounds/people.jpg"); background-size: cover; background-position: 65% 55%"> + <section class="s_banner bg-900" style="background-image: url(/website_slides/static/src/img/banner_heroes_default.svg); background-size: cover; background-position: right bottom"> <div class="container py-5"> - <h1 class="display-3 mb-0">Meet the people who transformed their company</h1> - <h2 class="mb-4">Nobody gave me a real text so instead of a lorem ipsum I put that one.</h2> - <div class="row mt-1 mb-3"> - <div class="col-lg-4"> - <p>Nobody gave me a real text so instead of a lorem ipsum I put that one.</p> + <div class="row align-items-center"> + <div class="col-12 col-md"> + <h2 class="my-4">Meet the people who transformed their company</h2> </div> - <div class="col-lg-3"> + <div class="col-12 col-md-4"> <a href="/profile/users" class="btn btn-primary btn-lg">Go meet them</a> </div> </div> @@ -240,28 +264,31 @@ <div class="card w-100 o_wslides_course_card mb-4"> <t t-set="course_image" t-value="'/web/image/slide.channel/%s/image_large' % channel.id"/> <a t-attf-href="/slides/#{slug(channel)}" t-title="channel.name"> - <div class="card-img-top" t-attf-style="padding-top: 50%; background-image: url(#{course_image}); background-size: cover; background-position:center"/> + <div t-if="channel.image_large" class="card-img-top" t-attf-style="padding-top: 50%; background-image: url(#{course_image}); background-size: cover; background-position:center"/> + <div t-else="" class="o_wslides_gradient card-img-top position-relative" style="padding-top: 50%; opacity: 0.8"> + <i class="fa fa-graduation-cap fa-2x mr-3 mb-3 position-absolute text-white-75" style="right:0; bottom: 0"/> + </div> </a> - <div class="card-body"> - <a class="card-title h5" t-attf-href="/slides/#{slug(channel)}" t-esc="channel.name"/> + <div class="card-body p-3"> + <a class="card-title h5 o_wslides_desc_truncate_2" t-attf-href="/slides/#{slug(channel)}" t-esc="channel.name"/> <div class="card-text mt-1"> - <div class="font-weight-light oe_no_empty" t-field="channel.description"/> - <div t-if="channel.tag_ids" class="border-top mt-2 pt-1"> + <div class="font-weight-light o_wslides_desc_truncate_3" t-field="channel.description"/> + <div t-if="channel.tag_ids" class="mt-2 pt-1 o_wslides_desc_truncate_2"> <t t-foreach="channel.tag_ids" t-as="tag"> <a t-att-href="'/slides/all?channel_tag_id=%s' % tag.id" class="badge badge-light" t-esc="tag.name"/> </t> </div> </div> </div> - <div class="card-footer border-top-0 text-600"> + <div class="card-footer border-top-0 text-600 px-3"> <div class="d-flex justify-content-between align-items-center"> <small class="font-weight-bold" t-field="channel.total_time" t-options='{"widget": "float_time"}'/> <div class="d-flex flex-grow-1 justify-content-end"> <t t-if="channel.is_member and channel.completed"> <span class="badge badge-pill badge-success pull-right py-1 px-2"><i class="fa fa-check"/> Completed</span> </t> - <div t-elif="channel.is_member" class="progress w-50" style="height: 4px;"> - <div class="progress-bar rounded" role="progressbar" t-att-aria-valuenow="channel.completion" aria-valuemin="0" aria-valuemax="100" t-attf-style="width:#{channel.completion}%;"/> + <div t-elif="channel.is_member" class="progress w-50" style="height: 6px"> + <div class="progress-bar" role="progressbar" t-att-aria-valuenow="channel.completion" aria-valuemin="0" aria-valuemax="100" t-attf-style="width:#{channel.completion}%;"/> </div> <small t-else=""><b t-esc="channel.total_slides"/> steps</small> </div> @@ -309,7 +336,7 @@ <div class="col"> <a href="/profile/users" class="float-right">View all</a> <h5 class="m-0">Heroes of the week</h5> - <hr class="mt-2"/> + <hr class="mt-2 pt-2"/> </div> </div> <div class="row"> @@ -334,7 +361,9 @@ <div style="line-height:1.3"> <span class="font-weight-bold" t-esc="user.name"/> <div class="d-flex align-items-center"> - <span class="text-muted" t-esc="user.rank_id.name"/><span class="ml8 mr8">•</span><span t-esc="user.karma" class="badge badge-success"/> + <t t-esc="user.rank_id.name"/> + <span class="text-500 mx-2">•</span> + <span class="badge badge-success"><t t-esc="user.karma"/> xp</span> </div> </div> </div> @@ -345,7 +374,7 @@ <div t-if="user.rank_id" class="d-flex align-items-center"> <span class="font-weight-bold text-muted mr-2">Current rank:</span> <img t-attf-src="/web/image/gamification.karma.rank/#{user.rank_id.id}/image_small" height="16" alt="" class="mr-1"/> - <a href="/profile/ranks" t-field="user.rank_id"/> + <a href="/profile/ranks_badges" t-field="user.rank_id"/> </div> <t t-if="user.next_rank_id"> <div class="font-weight-bold text-muted mt-1">Next rank:</div> @@ -383,5 +412,4 @@ t-att-src="'/profile/avatar/%s?field=image_medium' % user.id" t-att-alt="user.name"/> </template> - </data></odoo> diff --git a/addons/website_slides/views/website_slides_templates_lesson.xml b/addons/website_slides/views/website_slides_templates_lesson.xml index 67338fbe190..fcb324a4193 100644 --- a/addons/website_slides/views/website_slides_templates_lesson.xml +++ b/addons/website_slides/views/website_slides_templates_lesson.xml @@ -6,27 +6,31 @@ <t t-call="website.layout"> <t t-set="main_object" t-value="slide"/> <div class="wrap o_wslides_wrap"> - <t t-call="website_slides.course_nav"> - <t t-set="channel" t-value="slide.channel_id"/> - </t> - <div class="o_wslides_lesson_header"> - <div class="container o_wslides_lesson_header_container pt-3 pb-3"> - <div class="row align-items-end d-flex"> - <div class="col-md-9 offset-md-3 col-xs-12"> - <h3 class="font-weight-bold w-100"> - <a t-att-href="'/slides/%s' % (slug(slide.channel_id))" - class="text-white" - t-field="slide.channel_id.name"/> - </h3> - <div class="d-flex align-items-center"> - <div class="progress w-50" style="height: 8px;"> - <div class="progress-bar rounded" role="progressbar" + <div class="o_wslides_lesson_header o_wslides_gradient position-relative text-white pb-0 pt-2 pt-md-5"> + <t t-call="website_slides.course_nav"> + <t t-set="channel" t-value="slide.channel_id"/> + </t> + <div class="container o_wslides_lesson_header_container mt-5 mt-md-3 mt-xl-4"> + <div class="row align-items-end align-items-md-stretch"> + <div t-attf-class="col-12 col-lg-9 d-flex flex-column #{'offset-lg-3' if slide.channel_id.channel_type == 'training' else ''}"> + <h2 class="font-weight-medium w-100"> + <a t-att-href="'/slides/%s' % (slug(slide.channel_id))" class="text-white text-decoration-none" t-field="slide.channel_id.name"/> + </h2> + + <div t-if="slide.channel_id.channel_type == 'documentation'" class="mb-3 small"> + <span class="font-weight-normal">Last update:</span> + <t t-esc="slide.date_published" t-options="{'widget': 'date'}"/> + </div> + + <div t-else="" class="d-flex align-items-center pb-3"> + <div class="progress w-50 bg-black-25" style="height: 10px;"> + <div class="progress-bar rounded-left" role="progressbar" t-att-aria-valuenow="slide.channel_id.completion" aria-valuemin="0" aria-valuemax="100" t-attf-style="width: #{slide.channel_id.completion}%;"> - <span><t t-esc="slide.channel_id.completion"/> %</span> </div> </div> - <i t-att-class="'fa fa-trophy m-0 ml-2 p-0 %s' % ('text-success' if slide.channel_id.completed else 'text-warning')"></i> + <i t-att-class="'fa fa-trophy m-0 ml-2 p-0 %s' % ('text-warning' if slide.channel_id.completed else 'text-black-50')"></i> + <small class="ml-2 text-white-50"><t t-esc="slide.channel_id.completion"/> %</small> </div> </div> </div> @@ -34,13 +38,11 @@ </div> <div class="container o_wslides_lesson_main"> <div class="row"> - <div class="col-lg-3 o_wslides_lesson_aside"> - <t t-if="slide.channel_id.channel_type == 'training'" - t-call="website_slides.slide_aside_training"/> - <t t-if="slide.channel_id.channel_type == 'documentation'" - t-call="website_slides.slide_aside_documentation"/> + <div t-attf-class="o_wslides_lesson_aside col-lg-3 #{'order-2' if slide.channel_id.channel_type == 'documentation' else ''}"> + <t t-if="slide.channel_id.channel_type == 'training'" t-call="website_slides.slide_aside_training"/> + <t t-if="slide.channel_id.channel_type == 'documentation'" t-call="website_slides.slide_aside_documentation"/> </div> - <div class="col-lg-9 o_wslides_lesson_content"> + <div t-attf-class="o_wslides_lesson_content col-lg-9 #{'order-1' if slide.channel_id.channel_type == 'documentation' else ''}"> <t t-call="website_slides.slide_content_detailed"/> </div> </div> @@ -51,14 +53,14 @@ <!-- Slide: sidebar documentation mode --> <template id="slide_aside_documentation" name="Slide: Sidebar in Documentation"> - <div class="o_wslides_lesson_aside_doc bg-white"> - <ul class="nav nav-tabs" role="tablist"> - <li class="nav-item"><a aria-controls="related" href="#related" class="nav-link active" data-toggle="tab">Related</a></li> - <li class="nav-item"><a aria-controls="most_viewed" href="#most_viewed" class="nav-link" data-toggle="tab">Most Viewed</a></li> + <div class="o_wslides_lesson_aside_doc position-relative bg-white pb-1 my-3 border-bottom"> + <ul class="nav nav-tabs nav-fill" role="tablist"> + <li class="nav-item"><a aria-controls="related" href="#related" class="nav-link rounded-0 border-top-0 border-left-0 py-2 active" data-toggle="tab">Related</a></li> + <li class="nav-item"><a aria-controls="most_viewed" href="#most_viewed" class="nav-link rounded-0 border-top-0 border-right-0 py-2" data-toggle="tab">Most Viewed</a></li> </ul> <div class="tab-content"> - <div role="tabpanel" id="related" class="tab-pane active"> - <ul class="list-unstyled card-body px-2 py-0"> + <div role="tabpanel" id="related" class="tab-pane active bg-100"> + <ul class="list-group list-group-flush"> <t t-set="related_slides_list" t-value="list(related_slides)"/> <t t-if="not related_slides_list"> No presentation available. @@ -68,8 +70,8 @@ </t> </ul> </div> - <div role="tabpanel" id="most_viewed" class="tab-pane"> - <ul class="list-unstyled card-body px-2 py-0"> + <div role="tabpanel" id="most_viewed" class="tab-pane bg-100"> + <ul class="list-group list-group-flush"> <t t-set="most_viewed_slides_list" t-value="list(most_viewed_slides)"/> <t t-if="not list(most_viewed_slides_list)"> No presentation available. @@ -85,27 +87,30 @@ <!-- Slide sub-template: display an item in a list of related slides (Related, Most Viewed, ...) --> <template id="slide_aside_card" name="Related Slide"> - <li class="media mt-2 row"> - <t t-set="slide_image" t-value="'/web/image/slide.slide/%s/image_medium' % aside_slide.id"/> - <a t-att-href="'/slides/slide/%s' % (slug(aside_slide))" t-att-title="aside_slide.name" class="col-4"> - <div class="img" t-attf-style="padding-top: 50%; background-image: url(#{slide_image}); background-size: cover; background-position:center"/> - </a> - <div class="media-body col-8 pl-0"> - <a t-att-href="'/slides/slide/%s' % (slug(aside_slide))"> - <h6 t-esc="aside_slide.name" class="mb-1"/> - </a> - <small class="text-muted"> + <a class="list-group-item list-group-item-action d-flex align-items-start px-2" t-att-href="'/slides/slide/%s' % (slug(aside_slide))"> + <t t-set="slide_image" t-value="'/web/image/slide.slide/%s/image' % aside_slide.id"/> + + <div t-if="aside_slide.image" class="flex-shrink-0 mr-1 border" t-attf-style="width: 20%; padding-top: 20%; background-image: url(#{slide_image}); background-size: cover; background-position:center"/> + <div t-else="" class="o_wslides_gradient flex-shrink-0 mr-1" t-attf-style="width: 20%; padding-top: 20%;"/> + <div class="overflow-hidden d-flex flex-column justify-content-start"> + <h6 t-esc="aside_slide.name" class="o_wslides_desc_truncate_2 mb-1" style="line-height: 1.15"/> + <small class="text-600"> <t t-esc="aside_slide.total_views"/> Views • <timeago class="timeago" t-att-datetime="aside_slide.create_date"></timeago> </small> </div> - </li> + </a> </template> <!-- Slide: sidebar training mode --> <template id="slide_aside_training" name="Slide: Sidebar in Training"> - <div class="o_wslides_lesson_aside_list bg-white"> - <h5 class="bg-100 text-600 pl-2 py-2 border-bottom">Course content</h5> - <ul class="p-0 list-unstyled"> + <div class="o_wslides_lesson_aside_list position-relative bg-white border-bottom mt-4"> + <div class="bg-100 text-600 h6 my-0 text-decoration-none border-bottom d-flex align-items-center justify-content-between"> + <span class="p-2">Course content</span> + <a href="#collapse_slide_aside" data-toggle="collapse" class="d-lg-none p-2 text-decoration-none o_wslides_lesson_aside_collapse"> + <i class="fa fa-chevron-down d-lg-none"/> + </a> + </div> + <ul id="collapse_slide_aside" class="list-unstyled my-0 pb-3 collapse d-lg-block"> <t t-set="i" t-value="0"/> <t t-if="uncategorized_slides" t-call="website_slides.slide_aside_training_category"> <t t-set="category_slide_ids" t-value="uncategorized_slides"/> @@ -120,45 +125,49 @@ </template> <template id="slide_aside_training_category" name="Category item for the slide detailed view list"> - <li class="mt-3"> + <li class="o_wslides_fs_sidebar_section mt-2"> <a t-att-href="('#collapse-%s') % (category.id if category else 0)" data-toggle="collapse" role="button" aria-expanded="true" - class="o_wslides_lesson_aside_list_link pl-2 text-600" + class="o_wslides_lesson_aside_list_link pl-2 text-600 text-uppercase text-decoration-none py-1 small d-block" t-att-aria-controls="('collapse-%s') % (category.id if category else 0)"> <t t-if="category"> - <span t-field="category.name" class="text-uppercase"/> + <b t-field="category.name"/> </t> <t t-else=""> - <span class="text-uppercase">Uncategorized</span> + <b>Uncategorized</b> </t> </a> <ul class="collapse show p-0 m-0 list-unstyled" t-att-id="('collapse-%s') % (category.id if category else 0)" > <t t-foreach="category_slide_ids" t-as="aside_slide"> - <li class="p-0"> + <li class="p-0 pb-1"> <a t-att-href="'/slides/slide/%s' % (slug(aside_slide))" - t-att-class="'o_wslides_lesson_aside_list_link d-flex align-items-center pl-2 %s' % ('bg-200 border-left border-primary' if aside_slide == slide else '')"> - <i t-att-id="'o_wslides_lesson_aside_slide_check_%s' % (aside_slide.id)" - t-att-class="'mr-2 fa %s' % ('text-success fa-check-circle' if channel_progress[aside_slide.id].get('completed') else 'text-600 fa-circle-o')"> - </i> - <t t-call="website_slides.slide_icon"> - <t t-set="icon_class" t-value="'mr-2 %s' % ('text-800' if aside_slide == slide else 'text-600')"/> - <t t-set="slide" t-value="aside_slide"/> - </t> - <span t-esc="aside_slide.name" t-att-class="'mr-2 %s' % ('text-800' if aside_slide == slide else 'text-600')"/> - <span t-if="aside_slide.question_ids" - t-att-class="'ml-auto badge badge-pill %s' % ('badge-success' if channel_progress[aside_slide.id].get('completed') else 'badge-light text-600')"> - <t t-esc="channel_progress[aside_slide.id].get('quiz_karma_won') if channel_progress[aside_slide.id].get('completed') else channel_progress[aside_slide.id].get('quiz_karma_gain')"/> xp - </span> + t-att-class="'o_wslides_lesson_aside_list_link d-flex align-items-top px-2 pt-1 text-decoration-none %s' % ('bg-100 py-1 active' if aside_slide == slide else '')"> + <div t-if="aside_slide.channel_id.is_member" > + <i t-att-id="'o_wslides_lesson_aside_slide_check_%s' % (aside_slide.id)" + t-att-class="'mr-1 fa fa-fw %s' % ('text-success fa-check-circle' if channel_progress[aside_slide.id].get('completed') else 'text-600 fa-circle-o')"> + </i> + </div> + <div class="o_wslides_lesson_link_name"> + <span t-esc="aside_slide.name" class="mr-2"/> + </div> + <div class="ml-auto" t-if="aside_slide.question_ids"> + <span t-att-class="'badge badge-pill %s' % ('badge-success' if channel_progress[aside_slide.id].get('completed') else 'badge-light text-600')"> + <t t-esc="channel_progress[aside_slide.id].get('quiz_karma_won') if channel_progress[aside_slide.id].get('completed') else channel_progress[aside_slide.id].get('quiz_karma_gain')"/> xp + </span> + </div> </a> - <ul t-if="aside_slide.link_ids or aside_slide.question_ids" class="list-group ml-5 list-unstyled"> + <ul t-if="aside_slide.link_ids or aside_slide.question_ids" class="list-group px-2 mb-1 list-unstyled"> <t t-foreach="aside_slide.link_ids" t-as="resource"> - <a t-attf-href="#{resource.link}" target="new"> - <li><small><i class="fa fa-link mr-1"></i><span t-field="resource.name"/></small></li> - </a> + <li class="pl-4"> + <a t-attf-href="#{resource.link}" target="new" class="text-decoration-none small"> + <i class="fa fa-link mr-1"/><span t-field="resource.name"/> + </a> + </li> </t> - <a t-if="aside_slide.question_ids" t-att-href="'/slides/slide/%s#lessonQuiz' % (slug(aside_slide))" - class="o_wslides_lesson_aside_list_link text-600"> - <li><small><i class="fa fa-flag-o text-warning"></i> Quiz</small></li> - </a> + <li class="pl-4"> + <a t-if="aside_slide.question_ids and aside_slide.slide_type != 'quiz'" t-att-href="'/slides/slide/%s#lessonQuiz' % (slug(aside_slide))" class="o_wslides_lesson_aside_list_link text-decoration-none small text-600"> + <i class="fa fa-flag text-warning"/> Quiz + </a> + </li> </ul> </li> </t> @@ -168,13 +177,16 @@ <!-- Slide: all its content, not fullscreen mode --> <template id="slide_content_detailed" name="Slide: Detailed Content"> - <div class="row"> - <div class="col-12 d-flex mt-3"> + <t t-set="is_training_channel" t-value="slide.channel_id.channel_type == 'training'"/> + <div class="row align-items-center my-3"> + <div class="col-12 col-md order-2 order-md-1 d-flex"> <div class="d-flex align-items-center"> - <h5 class="m-0 ml-2"> - <t t-call="website_slides.slide_icon"/> + <h4 class="my-0"> + <t t-call="website_slides.slide_icon"> + <t t-set="icon_class">mr-1</t> + </t> <span t-field="slide.name"/> - </h5> + </h4> <span t-if="slide.question_ids" t-att-class="'ml-2 badge %s' % ('badge-success' if channel_progress[slide.id].get('completed') else 'badge-info')"> <span t-if="channel_progress[slide.id].get('completed')"> @@ -185,34 +197,38 @@ <span>XP</span> </span> </div> - <div class="ml-auto"> + </div> + <div class="col-12 col-md order-1 order-md-2 text-nowrap flex-grow-0 d-flex justify-content-end mb-3 mb-md-0"> + <div class="btn-group flex-grow-1 flex-sm-0" role="group" aria-label="Lesson Nav"> <a t-att-class="'btn btn-light border %s' % ('disabled' if not previous_slide else '')" role="button" t-att-aria-disabled="'disabled' if not previous_slide else None" t-att-href="'/slides/slide/%s' % (slug(previous_slide)) if previous_slide else '#'"> - <i class="fa fa-chevron-left mr-2"></i> Prev + <i class="fa fa-chevron-left mr-2"></i> <span class="d-none d-sm-inline-block">Prev</span> </a> - <a t-att-class="'btn btn-primary border text-white %s' % ('disabled' if slide.question_ids or channel_progress[slide.id].get('completed') else '')" - role="button" t-att-aria-disabled="'true' if slide.question_ids or channel_progress[slide.id].get('completed') else None" - t-att-href="'#' if slide.question_ids or channel_progress[slide.id].get('completed') else '/slides/slide/%s/set_completed?%s' % (slide.id, 'next_slide_id=%s' % (next_slide.id) if next_slide else '')"> + <t t-set="allow_done_btn" t-value="slide.slide_type in ['infographic', 'presentation', 'document', 'webpage', 'video'] and not slide.question_ids and not channel_progress[slide.id].get('completed') and slide.channel_id.is_member"/> + <a t-att-class="'btn btn-primary border text-white %s' % ('disabled' if not allow_done_btn else '')" + role="button" t-att-aria-disabled="'true' if not allow_done_btn else None" + t-att-href="'/slides/slide/%s/set_completed?%s' % (slide.id, 'next_slide_id=%s' % (next_slide.id) if next_slide else '') if allow_done_btn else '#'"> Set Done </a> <a t-att-class="'btn btn-light border %s' % ('disabled' if not next_slide else '')" role="button" t-att-aria-disabled="'disabled' if not next_slide else None" t-att-href="'/slides/slide/%s' % (slug(next_slide)) if next_slide else '#'"> - Next <i class="fa fa-chevron-right ml-2"></i> + <span class="d-none d-sm-inline-block">Next</span> <i class="fa fa-chevron-right ml-2"></i> </a> - <a t-att-class="'btn btn-light border ml-2 %s' % ('disabled' if slide.channel_id.channel_type != 'training' else '')" - role="button" t-att-aria-disabled="'disabled' if slide.channel_id.channel_type != 'training' else None" - t-att-href="'/slides/slide/%s?fullscreen=1' % (slug(slide)) if slide.channel_id.channel_type == 'training' else '#'"><i class="fa fa-desktop mr-2"></i> Fullscreen</a> </div> + <a t-if="is_training_channel" class="btn btn-light border ml-2" role="button" t-att-href="'/slides/slide/%s?fullscreen=1' % (slug(slide))"> + <i class="fa fa-desktop mr-2"/> + <span class="d-none d-sm-inline-block">Fullscreen</span> + </a> </div> - <div t-if="slide.tag_ids" class="col"> - <t t-foreach="slide.tag_ids" t-as="tag"> - <a t-att-href="'/slides/%s/tag/%s' % (slug(slide.channel_id), slug(tag))" class="badge badge-light" t-esc="tag.name"/> - </t> - </div> </div> - <div class="row o_wslides_lesson_content_type"> + <div t-if="slide.tag_ids" class="pb-2"> + <t t-foreach="slide.tag_ids" t-as="tag"> + <a t-att-href="'/slides/%s/tag/%s' % (slug(slide.channel_id), slug(tag))" class="badge badge-light py-1 px-2" t-esc="tag.name"/> + </t> + </div> + <div class="o_wslides_lesson_content_type"> <img t-if="slide.slide_type == 'infographic'" t-attf-src="/web/image/slide.slide/#{slide.id}/image" class="img-fluid" style="width:100%" t-att-alt="slide.name"/> <div t-if="slide.slide_type in ('presentation', 'document')" class="embed-responsive embed-responsive-4by3 embed-responsive-item mb8" style="height: 600px;"> @@ -221,7 +237,7 @@ <div t-if="slide.slide_type == 'video' and slide.document_id" class="embed-responsive embed-responsive-16by9 embed-responsive-item mb8"> <t t-raw="slide.embed_code"/> </div> - <div t-if="slide.slide_type == 'webpage'" class="bg-white"> + <div t-if="slide.slide_type == 'webpage'" class="bg-white p-3"> <div t-field="slide.html_content"/> </div> </div> @@ -229,22 +245,24 @@ <t t-call="website_slides.lesson_content_quiz"/> </div> <div class="row mt-3 mb-3"> - <div class="col d-flex align-items-start"> + <div class="col-12 col-md d-flex align-items-start mb-4 mb-md-0" t-if="len(slide.link_ids)"> <span t-if="slide.link_ids" class="text-muted font-weight-bold mr-3">External sources</span> <div class="text-muted mr-auto border-left pl-3"> <t t-foreach="slide.link_ids" t-as="link"> <a t-att-href="link.link" t-esc="link.name"/><br /> </t> </div> - + </div> + <div t-if="slide.channel_id.allow_comment and slide.channel_id.channel_type == 'documentation'" + class="col-12 col-md d-flex align-items-start justify-content-md-end mb-2 mb-md-0"> <span class="text-muted font-weight-bold mr-3">Rating</span> <div class="text-muted border-left pl-3"> <div class="o_wslides_js_slide_like mr-2"> - <span class="o_wslides_js_slide_like_up" tabindex="0" data-toggle="popover" t-att-data-slide-id="slide.id"> + <span t-att-class="('o_wslides_js_slide_like_up %s') % ('disabled' if not slide.channel_id.can_vote else '')" tabindex="0" data-toggle="popover" t-att-data-slide-id="slide.id"> <i class="fa fa-thumbs-up fa-1x" role="img" aria-label="Likes" title="Likes"></i> <span t-esc="slide.likes"/> </span> - <span class="o_wslides_js_slide_like_down ml-3" tabindex="0" data-toggle="popover" t-att-data-slide-id="slide.id"> + <span t-att-class="('o_wslides_js_slide_like_down ml-3 %s') % ('disabled' if not slide.channel_id.can_vote else '')" tabindex="0" data-toggle="popover" t-att-data-slide-id="slide.id"> <i class="fa fa-thumbs-down fa-1x" role="img" aria-label="Dislikes" title="Dislikes"></i> <span t-esc="slide.dislikes"/> </span> @@ -252,8 +270,8 @@ </div> </div> </div> - <div class="row mb-5"> - <ul class="col-lg-12 nav nav-tabs o_wslides_lesson_nav" role="tablist"> + <div class="mb-5"> + <ul class="nav nav-tabs o_wslides_lesson_nav" role="tablist"> <li class="nav-item"> <a href="#about" aria-controls="about" class="nav-link active" role="tab" data-toggle="tab"> <i class="fa fa-home"></i> About @@ -264,7 +282,7 @@ <i class="fa fa-comments-o"></i> Comments </a> </li> - <li class="nav-item"> + <li class="nav-item" t-if="slide.index_content"> <a href="#transcript" aria-controls="transcript" class="nav-link" role="tab" data-toggle="tab"> <i class="fa fa-align-justify"></i> Transcript </a> @@ -280,71 +298,86 @@ </a> </li> </ul> - <div class="col tab-content mt-3"> + <div class="tab-content mt-3"> <div role="tabpanel" t-att-class="not comments and 'tab-pane fade in show active' or 'tab-pane fade'" id="about"> <div t-field="slide.description"/> </div> <div role="tabpanel" t-att-class="comments and 'tab-pane fade in show active' or 'tab-pane fade'" id="discuss"> <t t-call="portal.message_thread"> <t t-set="object" t-value="slide"/> - <t t-set="hash" t-value="message_post_hash"/> - <t t-set="pid" t-value="message_post_pid"/> + <t t-set="disable_composer" t-value="not (slide.channel_id.can_comment and slide.channel_id.allow_comment and slide.channel_id.channel_type == 'training')"/> <t t-set="display_rating" t-value="False"/> </t> </div> - <div role="tabpanel" class="tab-pane fade oe_slides_transcript" id="transcript"> - <t t-if="slide.index_content"> - <t t-foreach="slide.index_content.split('\n')" t-as="line"> - <p t-esc="line"></p> - </t> + <div role="tabpanel" class="tab-pane fade oe_slides_transcript" id="transcript" t-if="slide.index_content"> + <t t-foreach="slide.index_content.split('\n')" t-as="line"> + <p t-esc="line"></p> </t> </div> <div role="tabpanel" class="tab-pane fade" id="statistic" t-att-slide-url="slide.website_url"> <div class="row"> - <div class="col-lg-4 d-flex flex-column"> - <span class="font-weight-bold mb-3 mt-3">Views</span> - <span class="d-flex pl-3"> - <span class="badge badge-pill" t-esc="slide.total_views"/> - <span class="mr-5 ml-auto">Total Views</span> - </span> - <span class="d-flex pl-3"> - <span class="badge badge-pill" t-esc="slide.slide_views"/> - <span class="mr-5 ml-auto">Members Views</span> - </span> - <span class="d-flex pl-3"> - <span class="badge badge-pill" t-esc="slide.public_views"/> - <span class="mr-5 ml-auto">Public Views</span> - </span> + <div class="col-12 col-md"> + <table class="table table-sm"> + <tbody> + <tr> + <th colspan="2" class="border-top-0">Views</th> + </tr> + <tr class="border-top-0"> + <th class="border-top-0"><span t-esc="slide.total_views"/></th> + <td class="border-top-0 w-100">Total Views</td> + </tr> + <tr> + <th><span t-esc="slide.slide_views"/></th> + <td>Members Views</td> + </tr> + <tr> + <th><span t-esc="slide.public_views"/></th> + <td>Public Views</td> + </tr> + </tbody> + </table> </div> - <div class="col-lg-4 d-flex flex-column"> - <span class="font-weight-bold mb-3 mt-3">Actions</span> - <span class="d-flex pl-3"> - <span class="badge badge-pill" t-esc="slide.likes"/> - <span class="mr-5 ml-auto">Likes</span> - </span> - <span class="d-flex pl-3"> - <span class="badge badge-pill" t-esc="slide.dislikes"/> - <span class="mr-5 ml-auto">Dislikes</span> - </span> - <span class="d-flex pl-3"> - <span class="badge badge-pill" t-esc="len(slide.website_message_ids)"/> - <span class="mr-5 ml-auto">Comments</span> - </span> + <div t-if="slide.channel_id.allow_comment" class="col-12 col-md"> + <table class="table table-sm"> + <tbody> + <tr> + <th colspan="2" class="border-top-0">Actions</th> + </tr> + <tr class="border-top-0"> + <th class="border-top-0"><span t-esc="slide.likes"/></th> + <td class="border-top-0 w-100">Likes</td> + </tr> + <tr> + <th><span t-esc="slide.dislikes"/></th> + <td>Dislikes</td> + </tr> + <tr> + <th><span t-esc="len(slide.website_message_ids)"/></th> + <td>Comments</td> + </tr> + </tbody> + </table> </div> - <div class="col-lg-4 d-flex flex-column"> - <span class="font-weight-bold mb-3 mt-3">Share Count</span> - <span class="d-flex pl-3"> - <span class="badge badge-pill" id="facebook-badge">0</span> - <span class="mr-5 ml-auto">Facebook</span> - </span> - <span class="d-flex pl-3"> - <span class="badge badge-pill" id="twitter-badge">0</span> - <span class="mr-5 ml-auto">Twitter</span> - </span> - <span class="d-flex pl-3"> - <span class="badge badge-pill" id="linkedin-badge">0</span> - <span class="mr-5 ml-auto">LinkedIn</span> - </span> + <div class="col-12 col-md"> + <table class="table table-sm"> + <tbody> + <tr> + <th colspan="2" class="border-top-0">Share count</th> + </tr> + <tr class="border-top-0"> + <th class="border-top-0"><span id="facebook-badge">0</span></th> + <td class="border-top-0 w-100">Facebook</td> + </tr> + <tr> + <th><span id="twitter-badge">0</span></th> + <td>Twitter</td> + </tr> + <tr> + <th><span id="linkedin-badge"/></th> + <td>LinkedIn</td> + </tr> + </tbody> + </table> </div> </div> </div> @@ -356,14 +389,18 @@ <t t-call="website_slides.slide_social_media"> <t t-set="slide" t-value="slide"/> </t> - <t t-call="website_slides.slide_social_email"> - <t t-set="slide" t-value="slide"/> - </t> - <t t-if="not slide.document_id"> - <t t-call="website_slides.slide_social_embed"> - <t t-set="slide" t-value="slide"/> - </t> - </t> + <div class="row"> + <div t-attf-class="col-12 #{'col-lg-6' if slide.embed_code else ''}"> + <t t-call="website_slides.slide_social_email"> + <t t-set="slide" t-value="slide"/> + </t> + </div> + <div class="col-12 col-lg-6" t-if="slide.embed_code"> + <t t-call="website_slides.slide_social_embed"> + <t t-set="slide" t-value="slide"/> + </t> + </div> + </div> </t> </div> </div> @@ -372,12 +409,13 @@ <!-- Slide sub-tempalte: render a quiz serverside. Should be sync with JS qweb template "slide.slide.quiz" --> <template id="lesson_content_quiz" name="Lesson: Quiz specific content"> + <t t-set="slide_completed" t-value="channel_progress[slide.id].get('completed')"/> <div class="o_wslides_js_lesson_quiz col" id="lessonQuiz" t-att-data-id="slide.id" t-att-data-name="slide.name" t-att-data-slide-type="slide.slide_type" - t-att-data-readonly="not channel_progress[slide.id]" - t-att-data-completed="channel_progress[slide.id].get('completed')" + t-att-data-readonly="not slide.channel_id.is_member" + t-att-data-completed="1 if slide_completed else 0" t-att-data-quiz-attempts-count="quiz_attempts_count" t-att-data-quiz-karma-max="quiz_karma_max" t-att-data-quiz-karma-gain="quiz_karma_gain" @@ -386,44 +424,45 @@ t-att-data-next-slide-url="'/slides/slide/%s' % (slug(next_slide)) if next_slide else None"> <div t-foreach="slide.question_ids" t-as="question" class="o_wslides_js_lesson_quiz_question mt-3" t-att-data-question-id="question.id" t-att-data-title="question.question"> - <div class="h3"> + <div class="h4"> <small class="text-muted"><span t-esc="question_index+1"/>. </small> <span t-esc="question.question"/> </div> - <ul class="bg-white list-unstyled"> + <div class="list-group"> <t t-foreach="question.answer_ids" t-as="answer"> - <li t-att-data-answer-id="answer.id" + <a t-att-data-answer-id="answer.id" href="#" t-att-data-text="answer.text_value" - class="o_wslides_quiz_answer pt-2 pb-2 border-bottom rounded d-flex align-items-center"> - <label class="mb-0 d-flex align-items-center justify-content-center mr-3 ml-3"> + t-att-class="'o_wslides_quiz_answer list-group-item list-group-item-action d-flex align-items-center %s' % ('list-group-item-success' if slide_completed and answer.is_correct else '')"> + <label class="my-0 d-flex align-items-center justify-content-center mr-2"> <input type="radio" t-att-name="question.id" t-att-value="answer.id" - class="d-none"/> - <i class="fa fa-circle text-muted"></i> + class="d-none" + t-att-disabled="True if not slide.channel_id.is_member or slide_completed else ''"/> + <i t-att-class="'fa fa-circle text-400 %s' % ('d-none' if slide_completed and answer.is_correct else '')"/> <i class="fa fa-times-circle text-danger d-none"></i> - <i class="fa fa-check-circle text-success d-none"></i> + <i t-att-class="'fa fa-check-circle text-success %s' % ('d-none' if not (slide_completed and answer.is_correct) else '')"></i> </label> <span t-esc="answer.text_value"/> - </li> + </a> </t> - </ul> + </div> </div> - <div class="alert alert-danger o_wslides_js_lesson_quiz_error d-none" role="alert"> + <div class="alert alert-danger o_wslides_js_lesson_quiz_error mt-2 d-none" role="alert"> <span></span> <button type="button" class="close" data-dismiss="alert" aria-label="Close"> <span aria-hidden="true">&times;</span> </button> </div> - <div class="o_wslides_js_lesson_quiz_validation"/> + <div class="o_wslides_js_lesson_quiz_validation pt-3"/> </div> </template> <!-- Slide sub-template: share: send by email --> <template id='slide_social_email' name="Share by Email"> - <h4 class="mt-3">Share with a friend</h4> - <t t-if="not is_public_user"> + <h5 class="mt-4">Share by mail</h5> + <div t-if="not is_public_user" class="form-inline"> <form class="form-group oe_slide_js_share_email" role="form"> - <div class="input-group col-lg-6"> + <div class="input-group"> <input type="email" class="form-control" placeholder="your-friend@domain.com"/> <span class="input-group-append"> <button class="btn btn-primary" type="button" @@ -434,18 +473,18 @@ </button> </span> </div> - <span class="form-text">Send presentation through email</span> + <span class="form-text text-muted d-block w-100">Send presentation through email</span> </form> - </t> - <t t-if="is_public_user"> - <p>Please <a t-attf-href="/web?redirect=#{request.httprequest.url}"> login </a> to send this <t t-esc="slide.slide_type"/> by email!</p> - </t> + </div> + <div t-if="is_public_user" class="alert alert-info d-inline-block"> + <p class="mb-0">Please <a t-attf-href="/web?redirect=#{request.httprequest.url}" class="font-weight-bold"> login </a> to share this <t t-esc="slide.slide_type"/> by email.</p> + </div> </template> <!-- Slide sub-template: share: embed in your website --> <template id="slide_social_embed" name="Share on Your Website"> - <div class="oe_slide_js_embed_code_widget"> - <h4 class="mt0">Embed in your website</h4> + <div class="oe_slide_js_embed_code_widget mt-4"> + <h5 class="mt0">Embed in your website</h5> <div class="form-group"> <textarea class="form-control slide_embed_code" readonly="readonly" onClick="this.select();"><t t-esc="slide.embed_code"/></textarea> </div> diff --git a/addons/website_slides/views/website_slides_templates_lesson_embed.xml b/addons/website_slides/views/website_slides_templates_lesson_embed.xml index ac8ecbde8ec..e6fe7a1ae81 100644 --- a/addons/website_slides/views/website_slides_templates_lesson_embed.xml +++ b/addons/website_slides/views/website_slides_templates_lesson_embed.xml @@ -15,32 +15,28 @@ <t t-call-assets="website_slides.slide_embed_assets" t-css="false"/> </head> <body> - <div id="PDFViewer" class="d-flex flex-column h-100 border"> + <div id="PDFViewer" class="o_wslides_fs_pdf_viewer d-flex flex-column h-100"> <!-- PDF Viewer Header : contains the name, and the share links --> - <div t-if="is_embedded" class="navbar-default oe_slides_share_bar"> + <div t-if="is_embedded" class="oe_slides_share_bar"> <div class="container-fluid"> - <div class="row"> - <div class="col-lg-8 col-4 text-left"> + <div class="row align-items-center"> + <div class="col"> <div class="oe_slides_ellipsis"> <a target="_new" t-att-href="slide.website_url"> <span t-esc="slide.name" t-att-title="slide.name"/> </a> </div> </div> - <div class="col-lg-1 col-2 text-right"> - <b class="oe_slide_js_embed_option_link" data-slide-option-id="#slide_share"><i class="fa fa-share-alt"></i> Share</b> - </div> - <div class="col-lg-1 col-2 text-right"> - <b class="oe_slide_js_embed_option_link" data-slide-option-id="#slide_email"><i class="fa fa-envelope"></i> Email</b> - </div> - <div class="col-lg-1 col-2 text-right"> - <b class="oe_slide_js_embed_option_link" data-slide-option-id="#slide_embed"><i class="fa fa-code"></i> Embed</b> + <div class="col flex-grow-0 d-flex text-nowrap small"> + <a href="#" class="oe_slide_js_embed_option_link" data-slide-option-id="#slide_share"><i class="fa fa-share-alt"/> Share</a> + <a href="#" class="oe_slide_js_embed_option_link mx-4" data-slide-option-id="#slide_email"><i class="fa fa-envelope"/> Email</a> + <a href="#" class="oe_slide_js_embed_option_link" data-slide-option-id="#slide_embed"><i class="fa fa-code"/> Embed</a> </div> </div> </div> </div> <!-- PDF Viewer Body : contains the canvas, the loader, or the image--> - <div id="PDFSlideViewer" class="text-center position-relative flex-grow-1" style="height: 0;" + <div id="PDFSlideViewer" class="d-flex align-items-start position-relative flex-grow-1 overflow-auto" style="height: 0;" t-attf-data-slideid="#{slide.id}" t-attf-data-slideurl="/slides/slide/#{slug(slide)}/pdf_content" t-attf-data-downloadable="#{False}" @@ -56,59 +52,64 @@ <t t-call="website_slides.slide_social_embed"/> </div> </t> - <div id="slide_suggest" class="oe_slide_embed_option"> - <t t-foreach="related_slides" t-as="suggest_slide"> - <div class="col-4 oe_slides_suggestion_media"> - <a t-att-href="suggest_slide.website_url" target="_new"> - <div class="oe_slides_suggestion_caption"> - <h4><t t-esc="suggest_slide.name"/></h4> + <div id="slide_suggest" class="oe_slide_embed_option bg-300 container-fluid overflow-auto d-none"> + <div class="row"> + <t t-foreach="related_slides" t-as="suggest_slide"> + <div class="col-6 col-md-4 col-lg-3 oe_slides_suggestion_media"> + <div class="card mb-3"> + <a t-att-href="suggest_slide.website_url" target="_new" class="card-img-top embed-responsive embed-responsive-16by9"> + <img t-attf-src="/web/image/slide.slide/#{suggest_slide.id}/image" class="card-img-top embed-responsive-item" t-att-alt="suggest_slide.name"/> + </a> + <div class="card-body"> + <h6 class="card-title"> + <a t-att-href="suggest_slide.website_url" target="_new"> + <t t-esc="suggest_slide.name"/> + </a> + </h6> + <div class="oe_slides_suggestion_caption"/> + </div> </div> - <span class="oe-image-thumbnail"> - <img class="img-fluid" t-attf-src="/web/image/slide.slide/#{suggest_slide.id}/image_small" alt="suggest_slide.name"/> - </span> - </a> - - </div> - </t> + </div> + </t> + </div> </div> <t t-if="slide.slide_type in ('presentation', 'document')"> - <div id="PDFViewerLoader" class="oe_slides_loader"> - <img class="img-fluid" t-attf-src="/web/image/slide.slide/#{slide.id}/image_large" style="margin:auto;height:100%" alt="suggest_slide.name"/> - <h4 class="text-center"> - <i class="fa fa-spinner fa-spin"></i> Loading ... - </h4> + <div id="PDFViewerLoader" class="oe_slides_loader position-absolute mt-3 mr-3" style="right:0"> + <div class="toast show"> + <div class="toast-header"> + <i class="fa fa-circle-o-notch fa-spin mr-2"/><b>Loading...</b> + </div> + <div class="toast-body p-0"> + <img class="img-fluid w-100" t-attf-src="/web/image/slide.slide/#{slide.id}/image_large"/> + </div> + </div> </div> - <canvas id="PDFViewerCanvas" class="img-fluid" style="margin: auto; height: 100%; display: none;"></canvas> + <canvas id="PDFViewerCanvas" class="img-fluid w-100" style="display: none;"></canvas> </t> <t t-if="slide.slide_type == 'infographic'"> <img t-attf-src="/web/image/slide.slide/#{slide.id}/image" class="img-fluid" style="width: 100%" alt="Slide image"/> </t> </div> <!-- Fixed bottom navbar --> - <div class="pt-2 pb-2 bg-light" role="navigation" t-if="slide.slide_type in ('presentation', 'document')"> + <div id="PDFViewerNav" class="pt-2 pb-2 bg-light text-white" role="navigation" t-if="slide.slide_type in ('presentation', 'document')"> <div class="container-fluid oe_slides_panel_footer"> - <div class="row"> - <div class="col-auto mr-auto text-left mt-2 mb-2"> - <input type="number" class="text-center" id="page_number"></input> / <span id="page_count"></span> + <div class="row align-items-center"> + <div class="col-2 flex-grow-0"> + <div class="input-group input-group-sm flex-nowrap" style="max-width: 100px"> + <input type="number" class="form-control text-center" id="page_number" style="min-width: 60px"/> + <div class="input-group-append"> + <span class="input-group-text" id="page_count"/> + </div> + </div> </div> - <div class="col-auto o_slide_navigation_buttons mt-2 mb-2"> - <span id="first" class="ml-2 mr-2" title="First slide" role="img" aria-label="First slide"> - <i class="fa fa-step-backward fa-2x"></i> - </span> - <a id="previous" class="ml-2 mr-2" title="Previous slide" aria-label="Previous slide" role="button"> - <i class="fa fa-arrow-circle-left fa-2x"></i> - </a> - <a id="next" class="ml-2 mr-2" title="Next slide" aria-label="Next slide" role="button"> - <i class="fa fa-arrow-circle-right fa-2x"></i> - </a> - <a id="last" class="ml-2 mr-2" title="Last slide" aria-label="Last slide" role="button"> - <i class="fa fa-step-forward fa-2x"></i> - </a> + <div class="col text-center"> + <a id="first" href="#" class="text-decoration-none mr-1 mr-sm-2" title="First slide" role="button" aria-label="First slide"> <i class="fa fa-step-backward"/> </a> + <a id="previous" href="#" class="text-decoration-none mx-1 mx-sm-2" title="Previous slide" aria-label="Previous slide" role="button"> <i class="fa fa-arrow-circle-left"/> </a> + <a id="next" href="#" class="text-decoration-none mx-1 mx-sm-2" title="Next slide" aria-label="Next slide" role="button"> <i class="fa fa-arrow-circle-right"/> </a> + <a id="last" href="#" class="text-decoration-none ml-1 ml-sm-2" title="Last slide" aria-label="Last slide" role="button"> <i class="fa fa-step-forward"/> </a> </div> - <div class="col-auto text-right ml-auto mt-2 mb-2"> - <span id="fullscreen" title="View fullscreen" role="img" aria-label="Fullscreen"> - <i class="fa fa-arrows-alt fa-2x"></i> - </span> + <div class="col-2 flex-grow-0 text-right"> + <a id="fullscreen" href="#" title="View fullscreen" role="img" aria-label="Fullscreen"> <i class="fa fa-arrows-alt"/> </a> </div> </div> </div> diff --git a/addons/website_slides/views/website_slides_templates_lesson_fullscreen.xml b/addons/website_slides/views/website_slides_templates_lesson_fullscreen.xml index 1361559c23f..6c24897cb17 100644 --- a/addons/website_slides/views/website_slides_templates_lesson_fullscreen.xml +++ b/addons/website_slides/views/website_slides_templates_lesson_fullscreen.xml @@ -4,116 +4,124 @@ <!-- Slide template for the fullscreen mode --> <template id="slide_fullscreen" name="Fullscreen"> <t t-call="website.layout"> - <div class="o_wslides_fs_main" - t-att-data-user-id="user.id" - t-att-data-course-name="slide.channel_id.name" - t-att-data-course-id="slide.channel_id.id" - t-att-data-course-slug="slug(slide.channel_id)" - t-att-data-slide-id="slide.id"> - <div class="o_wslides_slide_fs_header"> - <div> - <a id="fullscreen_sidebar_button" href="#" class="active o_wslides_fs_toggle_sidebar"><i class="fa fa-bars"></i>Lessons</a> - <a class="o_wslides_small_screen" t-attf-href="/slides/slide/#{slug(slide)}" target="new"><i class="fa fa-pencil"></i>write a review</a> - <div class="o_wslides_fs_slide_title"/> + <div class="o_wslides_fs_main d-flex flex-column font-weight-light"> + + <div class="o_wslides_slide_fs_header d-flex flex-shrink-0 text-white"> + <div class="d-flex"> + <a class="o_wslides_fs_toggle_sidebar d-flex align-items-center px-3 active" href="#" title="Lessons"> + <i class="fa fa-bars"/><span class="d-none d-md-inline-block ml-1">Lessons</span> + </a> + <a class="o_wslides_fs_review d-flex align-items-center px-3" t-att-href="slide.channel_id.website_url" title="Reviews" t-if="slide.channel_id.allow_comment"> + <i class="fa fa-pencil"/><span class="d-none d-md-inline-block ml-1">Write a review</span> + </a> </div> - <div> - <a t-attf-href="/slides/">back to courses</a> + <div class="d-flex ml-auto"> + <a class="d-flex align-items-center px-3 o_wslides_fs_exit_fullscreen" t-attf-href="/slides/slide/#{slug(slide)}"> + <i class="fa fa-sign-out d-md-none"/><span class="d-none d-md-inline-block ml-1">Exit Fullscreen</span> + </a> + <a class="d-flex align-items-center px-3" t-attf-href="/slides/#{slug(slide.channel_id)}"> + <i class="fa fa-sign-out d-md-none"/><span class="d-none d-md-inline-block ml-1">Back to course</span> + </a> </div> </div> - <div class="o_wslides_fs_container"> - <div class="o_wslides_fs_sidebar"> - <ul> - <li> - <div class="o_wslides_fs_sidebar_header"> - <a t-attf-href="/slides/#{slug(slide.channel_id)}"> - <span t-field="slide.channel_id.name"/> - </a> - <div class="o_wslides_slide_fs_progress_box"> - <div class="progress o_wslides_fs_sidebar_progressbar"> - <div class="progress-bar" role="progressbar" - t-att-aria-valuenow="slide.channel_id.completion" aria-valuemin="0" aria-valuemax="100" - t-att-style="'width: %s' % (slide.channel_id.completion)"/> - </div> - <div><span class="o_wslides_progress_percentage" t-esc="slide.channel_id.completion"/>%</div> + + <div class="o_wslides_fs_container d-flex position-relative overflow-hidden flex-grow-1"> + <div class="o_wslides_fs_content align-items-stretch justify-content-center d-flex flex-grow-1 order-2"></div> + + <div class="o_wslides_fs_sidebar text-white flex-shrink-0 order-1"> + <div class="o_wslides_fs_sidebar_content d-flex flex-column px-3 pt-3 h-100"> + <div class="o_wslides_fs_sidebar_header mb-3"> + <a class="h5 d-block mb-1" t-attf-href="/slides/#{slug(slide.channel_id)}"> + <span t-field="slide.channel_id.name"/> + </a> + <div t-if="not is_public_user" class="d-flex align-items-center"> + <div class="progress flex-grow-1 bg-black-50" style="height: 6px;"> + <div class="progress-bar" role="progressbar" t-attf-style="width: #{slide.channel_id.completion}%" t-att-aria-valuenow="slide.channel_id.completion" aria-valuemin="0" aria-valuemax="100"></div> + </div> + <div class="ml-3 small"> + <span class="o_wslides_progress_percentage" t-esc="slide.channel_id.completion"/> % </div> </div> - </li> - <t t-if="uncategorized_slides" t-call="website_slides.slide_fullscreen_sidebar_category"> - <t t-set="category_slide_ids" t-value="uncategorized_slides" /> - </t> - <t t-foreach="slide.channel_id.category_ids" t-as="category"> - <t t-call="website_slides.slide_fullscreen_sidebar_category"> - <t t-set="category_slide_ids" t-value="category.slide_ids" /> + </div> + <ul class="mx-n3 list-unstyled my-0 pb-2 overflow-auto"> + <t t-if="uncategorized_slides" t-call="website_slides.slide_fullscreen_sidebar_category"> + <t t-set="slides" t-value="uncategorized_slides"/> + <t t-set="current_slide" t-value="slide"/> </t> - </t> - </ul> + <t t-foreach="slide.channel_id.category_ids" t-as="category"> + <t t-if="category.slide_ids"> + <t t-call="website_slides.slide_fullscreen_sidebar_category"> + <t t-set="slides" t-value="category.slide_ids"/> + <t t-set="current_slide" t-value="slide"/> + </t> + </t> + </t> + </ul> + </div> + <a href="#" class="o_wslides_fs_toggle_sidebar d-lg-none bg-black-50"/> </div> - <div class="o_wslides_fs_player"/> </div> </div> </t> </template> + <template id="slide_fullscreen_sidebar_category" name="Slides category template for fullscreen view side bar"> - <div class="o_wslides_fs_sidebar_section"> - <a data-toggle="collapse" t-att-href="('#collapse-%s') % (category.id if category else 0)" role="button" aria-expanded="true" t-att-aria-controls="('collapse-%s') % (category.id if category else 0)"> - <li> - <t t-if="category"> - <span t-field="category.name"/> - </t> - <t t-else=""> - <span>Uncategorized</span> - </t> - </li> + <li class="o_wslides_fs_sidebar_section py-2 px-3"> + <a t-if="category" class="text-uppercase text-500 py-1 small d-block" t-attf-id="category-collapse-#{category.id if category else 0}" data-toggle="collapse" role="button" aria-expanded="true" t-att-href="('#collapse-%s') % (category.id if category else 0)" t-attf-aria-controls="collapse-#{category.id if category else 0}"> + <b t-field="category.name"/> </a> - <ul class="o_wslides_fs_sidebar_section_slides collapse show p-0 m-0" t-att-id="('collapse-%s') % (category.id if category else 0)" > - <t t-foreach="category_slide_ids" t-as="course_slide"> - <!-- AWA FIXME: remove that index crap but right now fullscreen JS uses it too much --> - <t t-set="i" t-value="list(slide.channel_id.slide_ids).index(course_slide)"/> - <li t-att-index="i" t-att-data-slide-id="course_slide.id" t-attf-class="#{'active' if slide.id == course_slide.id else ''}"> - <span> - <span class="o_wslides_top_line"></span> - <i t-attf-id="check-#{course_slide.id}" t-if="not channel_progress[course_slide.id].get('completed')" class="check-done fa fa-circle-thin"></i> - <i t-attf-id="check-#{course_slide.id}" t-if="channel_progress[course_slide.id].get('completed')" class="check-done o_wslides_slide_completed fa fa-check-circle"></i> - <span class="o_wslides_bottom_line"></span> + <ul class="o_wslides_fs_sidebar_section_slides collapse show position-relative px-0 pb-1 my-0 mx-n3" t-att-id="('collapse-%s') % (category.id if category else 0)"> + <t t-foreach="slides" t-as="slide"> + <t t-set="slide_completed" t-value="channel_progress[slide.id].get('completed')"/> + <t t-set="is_member" t-value="slide.channel_id.is_member"/> + <li t-att-class="'o_wslides_fs_sidebar_list_item d-flex align-items-top py-1 %s' % ('active' if slide.id == current_slide.id else '')" + t-att-data-id="slide.id" + t-att-data-name="slide.name" + t-att-data-type="slide.slide_type" + t-att-data-slug="slug(slide)" + t-att-data-has-question="1 if slide.question_ids else 0" + t-att-data-is-quiz="0" + t-att-data-completed="1 if slide_completed else 0" + t-att-data-embed-code="slide.embed_code if slide.slide_type in ['video', 'document', 'presentation', 'infographic'] else False" + t-att-data-readonly="not is_member" + > + <span class="ml-3"> + <i t-if="slide_completed and is_member" class="o_wslides_slide_completed fa fa-check fa-fw text-success" t-att-data-slide-id="slide.id"/> + <i t-if="not slide_completed and is_member" class="fa fa-circle-thin fa-fw" t-att-data-slide-id="slide.id"/> </span> - <a t-att-index="i" t-att-data-slide-id="course_slide.id"> - <div t-attf-index="#{i}" - t-att-data-slug="slug(course_slide)" - t-att-data-done="channel_progress[course_slide.id].get('completed')" - t-att-data-id="course_slide.id" - t-att-data-readonly="not course_slide.channel_id.is_member" - t-att-data-name="course_slide.name" - t-att-data-has-quiz="True if course_slide.question_ids else False" - t-att-data-slide_type="course_slide.slide_type" - t-att-data-embed_code="course_slide.embed_code" - t-attf-class="o_wslides_fs_sidebar_slide_tab #{'active' if slide.id == course_slide.id else ''} d-flex justify-content-between"> - <div> - <t t-call="website_slides.slide_icon"> - <t t-set="slide" t-value="course_slide" /> - </t> - <t t-esc="course_slide.name"/> + <div class="ml-2"> + <a class="d-block pt-1" href="#"> + <div class="d-flex "> + <div class="o_wslides_fs_slide_name" t-esc="slide.name"/> </div> - </div> - </a> - </li> - <t t-if="course_slide.link_ids" t-foreach="course_slide.link_ids" t-as="link"> - <li> - <span> - <span class="o_wslides_fs_full_line"/> - </span> - <a class="o_wslides_fs_slide_link" t-att-href="link.link" target="new"><i class="fa fa-link"></i><span t-esc="link.name"/></a> - </li> - </t> - <li t-att-index="i" t-if="course_slide.question_ids and not course_slide.slide_type =='quiz'"> - <span> - <span class="o_wslides_fs_full_line"/> - </span> - <span class="o_wslides_fs_slide_quiz" t-att-index="i"><i class="fa fa-flag-checkered"></i>Quiz: <span t-esc="course_slide.name"/></span> + </a> + <ul class="list-unstyled w-100 pt-2 small" t-if="slide.link_ids or (slide.question_ids and not slide.slide_type =='quiz')" > + <li t-if="slide.link_ids" t-foreach="slide.link_ids" t-as="link" class="pl-0 mb-1"> + <a class="o_wslides_fs_slide_link" t-att-href="link.link" target="_blank"> + <i class="fa fa-link mr-2"/><span t-esc="link.name"/> + </a> + </li> + <li class="o_wslides_fs_sidebar_list_item pl-0 mb-1" t-if="slide.question_ids and not slide.slide_type == 'quiz'" + t-att-data-id="slide.id" + t-att-data-name="slide.name" + t-att-data-type="slide.slide_type" + t-att-data-slug="slug(slide)" + t-att-data-has-question="1 if slide.question_ids else 0" + t-att-data-is-quiz="1" + t-att-data-completed="1 if slide_completed else 0" + t-att-data-readonly="not is_member"> + <a class="o_wslides_fs_slide_quiz" href="#" t-att-index="i"> + <i class="fa fa-flag-checkered text-warning mr-2"/>Quiz + </a> + </li> + </ul> + </div> </li> </t> </ul> - </div> + </li> </template> + </data></odoo> diff --git a/addons/website_slides/views/website_slides_templates_profile.xml b/addons/website_slides/views/website_slides_templates_profile.xml index 5c862747056..8fbfd413f55 100644 --- a/addons/website_slides/views/website_slides_templates_profile.xml +++ b/addons/website_slides/views/website_slides_templates_profile.xml @@ -37,7 +37,10 @@ <div class="card-body o_wprofile_slides_course_card_body p-0 d-flex" t-attf-onclick="location.href='/slides/#{slug(course.channel_id)}';"> - <div class="pl-5 pr-4 rounded-left" t-attf-style="background-image:url(/web/image/slide.channel/#{course.channel_id.id}/image); background-size: cover; background-position: center"/> + <div t-if="course.channel_id.image" class="pl-5 pr-4 rounded-left" t-attf-style="background-image:url(/web/image/slide.channel/#{course.channel_id.id}/image); background-size: cover; background-position: center"/> + <div t-else="" class="o_wslides_gradient pl-5 pr-4 rounded-left position-relative" style="opacity: 0.8"> + <i class="fa fa-graduation-cap fa-fw mr-2 mt-3 position-absolute text-white-75" style="right:0; top: 0"/> + </div> <div class="p-2 w-100"> <h5 class="mt-0 mb-1" t-field="course.channel_id.name"/> diff --git a/addons/website_slides/views/website_slides_templates_utils.xml b/addons/website_slides/views/website_slides_templates_utils.xml index 57d5c2fced5..d510f2ed519 100644 --- a/addons/website_slides/views/website_slides_templates_utils.xml +++ b/addons/website_slides/views/website_slides_templates_utils.xml @@ -3,22 +3,28 @@ <!-- Share on social networks --> <template id='slides_share' name="Slides Media Share"> - <div> - <a t-attf-href="https://www.facebook.com/sharer/sharer.php?u=#{record.website_url}" class="o_slides_social_share" social-key="facebook" aria-label="Share on Facebook" title="Share on Facebook"><i class="fa fa-facebook-square fa-2x"/></a> - <a t-attf-href="https://twitter.com/intent/tweet?text=#{record.name}&url=#{record.website_url}" class="o_slides_social_share" social-key="twitter" aria-label="Share on Twitter" title="Share on Twitter"><i class="fa fa-twitter fa-2x"/></a> - <a t-attf-href="http://www.linkedin.com/shareArticle?mini=true&url=#{record.website_url}&title=#{record.name}&" social-key="linkedin" class="o_slides_social_share" aria-label="Share on LinkedIn" title="Share on LinkedIn"><i class="fa fa-linkedin fa-2x"/></a> + <div class="btn-group" role="group"> + <a t-attf-href="https://www.facebook.com/sharer/sharer.php?u=#{record.website_url}" class="btn border bg-white o_slides_social_share" social-key="facebook" aria-label="Share on Facebook" title="Share on Facebook"><i class="fa fa-facebook-square fa-fw"/></a> + <a t-attf-href="https://twitter.com/intent/tweet?text=#{record.name}&url=#{record.website_url}" class="btn border bg-white o_slides_social_share" social-key="twitter" aria-label="Share on Twitter" title="Share on Twitter"><i class="fa fa-twitter fa-fw"/></a> + <a t-attf-href="http://www.linkedin.com/shareArticle?mini=true&url=#{record.website_url}&title=#{record.name}&" social-key="linkedin" class="btn border bg-white o_slides_social_share" aria-label="Share on LinkedIn" title="Share on LinkedIn"><i class="fa fa-linkedin fa-fw"/></a> </div> </template> <!-- Share: social media --> <template id='slide_social_media' name="Share on Social Networks"> - <h4 class="mt0">Share on Social Networks</h4> - <t t-call="website_slides.slides_share"> - <t t-set="record" t-value="slide"/> - </t> - <h4 class="mt-3">Share Link</h4> - <input type="text" class="form-control" t-att-value="slide.website_url" readonly="readonly" onClick="this.select();"/> - <span class="form-text">Use permanent link to share in social media</span> + <div class="row"> + <div class="col-12 col-lg-6 mb-4"> + <h5 class="mt-0 mb-2">Share on Social Networks</h5> + <t t-call="website_slides.slides_share"> + <t t-set="record" t-value="slide"/> + </t> + </div> + <div class="col-12 col-lg-6"> + <h5 class="mt-0 mb-2">Share Link</h5> + <input type="text" class="form-control" t-att-value="slide.website_url" readonly="readonly" onClick="this.select();"/> + <span class="form-text text-muted">Use permanent link to share in social media</span> + </div> + </div> </template> <!-- Website edit page --> diff --git a/addons/website_slides_forum/i18n/website_slides_forum.pot b/addons/website_slides_forum/i18n/website_slides_forum.pot new file mode 100644 index 00000000000..be5d2f6348e --- /dev/null +++ b/addons/website_slides_forum/i18n/website_slides_forum.pot @@ -0,0 +1,190 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_slides_forum +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~12.2\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-03-20 14:19+0000\n" +"PO-Revision-Date: 2019-03-20 14:19+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: website_slides_forum +#: model:forum.forum,faq:website_slides_forum.forum_forum_demo_channel_0 +#: model:forum.forum,faq:website_slides_forum.forum_forum_demo_channel_2 +msgid "<h1 class=\"o_page_header\">Guidelines</h1>\n" +"\n" +"<div id=\"accordion\">\n" +" <div class=\"card mb-2 bg-100\">\n" +" <a href=\"#collapseOne\" class=\"card-header\" id=\"headingOne\" data-toggle=\"collapse\" aria-expanded=\"false\" aria-controls=\"collapseOne\">\n" +" <b>What kinds of questions can I ask here?</b> <i class=\"fa fa-caret-down float-right\"/>\n" +" </a>\n" +" <div id=\"collapseOne\" class=\"collapse\" aria-labelledby=\"headingOne\" data-parent=\"#accordion\">\n" +" <div class=\"card-body\">\n" +" <p>This community is for professional and enthusiast users, partners and programmers. You can ask questions about:</p>\n" +" <ul>\n" +" <li>how to install Odoo on a specific infrastructure,</li>\n" +" <li>how to configure or customize Odoo to specific business needs,</li>\n" +" <li>what's the best way to use Odoo for a specific business need,</li>\n" +" <li>how to develop modules for your own need,</li>\n" +" <li>specific questions about Odoo service offers, etc.</li>\n" +" </ul>\n" +" <p><b>Before you ask - please make sure to search for a similar question.</b> You can search questions by their title or tags. It’s also OK to answer your own question.</p>\n" +" <p><b>Please avoid asking questions that are too subjective and argumentative</b> or not relevant to this community.</p>\n" +" </div>\n" +" </div>\n" +" </div>\n" +" <div class=\"card mb-2 bg-100\">\n" +" <a href=\"#collapseTwo\" class=\"card-header\" id=\"headingTwo\" data-toggle=\"collapse\" aria-expanded=\"false\" aria-controls=\"collapseTwo\">\n" +" <b>What should I avoid in my questions?</b> <i class=\"fa fa-caret-down float-right\"/>\n" +" </a>\n" +" <div id=\"collapseTwo\" class=\"collapse\" aria-labelledby=\"headingTwo\" data-parent=\"#accordion\">\n" +" <div class=\"card-body\">\n" +" <p>You should only ask practical, answerable questions based on actual problems that you face. Chatty, open-ended questions diminish the usefulness of this site and push other questions off the front page.</p>\n" +" <p>To prevent your question from being flagged and possibly removed, avoid asking subjective questions where …</p>\n" +" <ul>\n" +" <li>every answer is equally valid: “What’s your favorite ______?”</li>\n" +" <li>your answer is provided along with the question, and you expect more answers: “I use ______ for ______, what do you use?”</li>\n" +" <li>there is no actual problem to be solved: “I’m curious if other people feel like I do.”</li>\n" +" <li>we are being asked an open-ended, hypothetical question: “What if ______ happened?”</li>\n" +" <li>it is a rant disguised as a question: “______ sucks, am I right?”</li>\n" +" </ul>\n" +" <p>If you fit in one of these example or if your motivation for asking the question is “I would like to participate in a discussion about ______”, then you should not be asking here but on our mailing lists. However, if your motivation is “I would like others to explain ______ to me”, then you are probably OK.</p>\n" +" <p>(The above section was adapted from Stackoverflow’s FAQ.)</p>\n" +" <p>More over:</p>\n" +" <ul>\n" +" <li><b>Answers should not add or expand questions</b>. Instead either edit the question or add a question comment.</li>\n" +" <li><b>Answers should not comment other answers</b>. Instead add a comment on the other answers.</li>\n" +" <li><b>Answers shouldn't just point to other Questions</b>. Instead add a question comment indication \"Possible duplicate of...\". However, it's ok to include links to other questions or answers providing relevant additional information.</li>\n" +" <li><b>Answers shouldn't just provide a link a solution</b>. Instead provide the solution description text in your answer, even if it's just a copy/paste. Links are welcome, but should be complementary to answer, referring sources or additional reading.</li>\n" +" </ul>\n" +" </div>\n" +" </div>\n" +" </div>\n" +" <div class=\"card mb-2 bg-100\">\n" +" <a href=\"#collapseThree\" class=\"card-header\" id=\"headingThree\" data-toggle=\"collapse\" aria-expanded=\"false\" aria-controls=\"collapseThree\">\n" +" <b>What should I avoid in my answers?</b> <i class=\"fa fa-caret-down float-right\"/>\n" +" </a>\n" +" <div id=\"collapseThree\" class=\"collapse\" aria-labelledby=\"headingThree\" data-parent=\"#accordion\">\n" +" <div class=\"card-body\">\n" +" <p><b>Answers should not add or expand questions</b>. Insteadeither edit the question or add a comment.</p>\n" +" <p><b>Answers should not comment other answers</b>. Instead add a comment on the other answers.</p>\n" +" <p><b>Answers shouldn't just point to other questions</b>.Instead add a comment indicating <i>\"Possible duplicate of...\"</i>. However, it's fine to include links to other questions or answers providing relevant additional information.</p>\n" +" <p> <b>Answers shouldn't just provide a link a solution</b>. Instead provide the solution description text in your answer, even if it's just a copy/paste. Links are welcome, but should be complementary to answer, referring sources or additional reading.</p>\n" +" <p><b>Answers should not start debates</b> This community Q&A is not a discussion group. Please avoid holding debates in your answers as they tend to dilute the essence of questions and answers. For brief discussions please use commenting facility.</p>\n" +" <p>When a question or answer is upvoted, the user who posted them will gain some points, which are called \"karma points\". These points serve as a rough measure of the community trust to him/her. Various moderation tasks are gradually assigned to the users based on those points.</p>\n" +" <p>For example, if you ask an interesting question or give a helpful answer, your input will be upvoted. On the other hand if the answer is misleading - it will be downvoted. Each vote in favor will generate 10 points, each vote against will subtract 10 points. There is a limit of 200 points that can be accumulated for a question or answer per day. The table given at the end explains reputation point requirements for each type of moderation task.</p>\n" +" </div>\n" +" </div>\n" +" </div>\n" +"" +msgstr "" + +#. module: website_slides_forum +#: model_terms:ir.ui.view,arch_db:website_slides_forum.slide_fullscreen +msgid "<i class=\"fa fa-comments\"/><span class=\"ml-1 d-none d-md-inline-block\">Ask a question</span>" +msgstr "" + +#. module: website_slides_forum +#: model_terms:ir.ui.view,arch_db:website_slides_forum.website_slides_forum_header +msgid "<i class=\"fa fa-home\"/> Home" +msgstr "" + +#. module: website_slides_forum +#: model:forum.forum,name:website_slides_forum.forum_forum_demo_channel_0 +msgid "Basics of Gardening" +msgstr "" + +#. module: website_slides_forum +#. openerp-web +#: code:addons/website_slides_forum/static/src/xml/website_slides_forum_channel.xml:6 +#, python-format +msgid "Communication" +msgstr "" + +#. module: website_slides_forum +#: model:ir.model.fields,field_description:website_slides_forum.field_forum_forum__slide_channel_id +msgid "Course" +msgstr "" + +#. module: website_slides_forum +#: model:ir.model.fields,field_description:website_slides_forum.field_slide_channel__forum_id +msgid "Course Forum" +msgstr "" + +#. module: website_slides_forum +#: model:ir.model.fields,field_description:website_slides_forum.field_forum_forum__slide_channel_ids +msgid "Courses" +msgstr "" + +#. module: website_slides_forum +#. openerp-web +#: code:addons/website_slides_forum/static/src/xml/website_slides_forum_channel.xml:10 +#, python-format +msgid "Create a Forum" +msgstr "" + +#. module: website_slides_forum +#: model:ir.model,name:website_slides_forum.model_forum_forum +#: model_terms:ir.ui.view,arch_db:website_slides_forum.course_main +#: model_terms:ir.ui.view,arch_db:website_slides_forum.website_slides_forum_header +msgid "Forum" +msgstr "" + +#. module: website_slides_forum +#: model_terms:forum.forum,welcome_message:website_slides_forum.forum_forum_demo_channel_0 +#: model_terms:forum.forum,welcome_message:website_slides_forum.forum_forum_demo_channel_2 +msgid "Hide Intro" +msgstr "" + +#. module: website_slides_forum +#: sql_constraint:slide.channel:0 +msgid "Only one forum per slide channel!" +msgstr "" + +#. module: website_slides_forum +#: model_terms:forum.forum,welcome_message:website_slides_forum.forum_forum_demo_channel_0 +#: model_terms:forum.forum,welcome_message:website_slides_forum.forum_forum_demo_channel_2 +msgid "Register" +msgstr "" + +#. module: website_slides_forum +#: model_terms:ir.ui.view,arch_db:website_slides_forum.website_slides_forum_header +msgid "Review" +msgstr "" + +#. module: website_slides_forum +#: model:ir.model,name:website_slides_forum.model_slide_channel +msgid "Slide Channel" +msgstr "" + +#. module: website_slides_forum +#: model_terms:forum.forum,welcome_message:website_slides_forum.forum_forum_demo_channel_0 +#: model_terms:forum.forum,welcome_message:website_slides_forum.forum_forum_demo_channel_2 +msgid "This community is for professionals and enthusiasts of our products and services.\n" +" <br>Share and discuss the best content and new marketing ideas, build your professional profile and become a better marketer together." +msgstr "" + +#. module: website_slides_forum +#: model:forum.forum,description:website_slides_forum.forum_forum_demo_channel_0 +#: model:forum.forum,description:website_slides_forum.forum_forum_demo_channel_2 +msgid "This community is for professionals and enthusiasts of our products and services. Share and discuss the best content and new marketing ideas, build your professional profile and become a better marketer together." +msgstr "" + +#. module: website_slides_forum +#: model:forum.forum,name:website_slides_forum.forum_forum_demo_channel_2 +msgid "Trees, Wood and Gardens" +msgstr "" + +#. module: website_slides_forum +#: model_terms:forum.forum,welcome_message:website_slides_forum.forum_forum_demo_channel_0 +#: model_terms:forum.forum,welcome_message:website_slides_forum.forum_forum_demo_channel_2 +msgid "Welcome!" +msgstr "" + diff --git a/addons/website_slides_forum/views/website_slides_templates.xml b/addons/website_slides_forum/views/website_slides_templates.xml index 554d5b18978..42601c7f012 100644 --- a/addons/website_slides_forum/views/website_slides_templates.xml +++ b/addons/website_slides_forum/views/website_slides_templates.xml @@ -2,7 +2,7 @@ <odoo><data> <template id='course_main' inherit_id="website_slides.course_main"> <!-- Channel main template: add link to forum --> - <xpath expr="//li[hasclass('o_wlides_course_header_nav_home')]" position="after"> + <xpath expr="//li[hasclass('o_wslides_course_header_nav_home')]" position="after"> <li class="nav-item" t-if="channel.forum_id"> <a t-att-href="'/forum/%s' % (slug(channel.forum_id))" t-att-class="'nav-link'" target="new">Forum</a> @@ -11,9 +11,10 @@ </template> <template id="slide_fullscreen" inherit_id="website_slides.slide_fullscreen"> - <!-- Fullscreen template: add link to forum --> - <xpath expr="//a[@id='fullscreen_sidebar_button']" position="after"> - <a t-if="slide.channel_id.forum_id" id="fullscreen_forum_button" t-attf-href="/forum/#{slug(slide.channel_id.forum_id)}" target="new"><i class="fa fa-comments"></i>Ask a question</a> + <xpath expr="//a[hasclass('o_wslides_fs_review')]" position="after"> + <a t-if="slide.channel_id.forum_id" id="fullscreen_forum_button" class="d-flex align-items-center px-3" t-attf-href="/forum/#{slug(slide.channel_id.forum_id)}" target="new"> + <i class="fa fa-comments"/><span class="ml-1 d-none d-md-inline-block">Ask a question</span> + </a> </xpath> </template> diff --git a/addons/website_slides_survey/__manifest__.py b/addons/website_slides_survey/__manifest__.py index 3ccd9168ece..c4406a1ae4c 100644 --- a/addons/website_slides_survey/__manifest__.py +++ b/addons/website_slides_survey/__manifest__.py @@ -19,6 +19,7 @@ 'views/website_slides_templates_homepage.xml', 'views/survey_templates.xml', 'views/website_profile.xml', + 'data/mail_template_data.xml', 'data/gamification_data.xml', ], 'demo': [ diff --git a/addons/website_slides_survey/controllers/slides.py b/addons/website_slides_survey/controllers/slides.py index b65b3c3333b..5fb80c15097 100644 --- a/addons/website_slides_survey/controllers/slides.py +++ b/addons/website_slides_survey/controllers/slides.py @@ -1,54 +1,44 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo.addons.website_slides.controllers.main import WebsiteSlides +import werkzeug +import werkzeug.utils +import werkzeug.exceptions +from odoo import _ +from odoo import http from odoo.http import request +from odoo.addons.website_slides.controllers.main import WebsiteSlides + class WebsiteSlides(WebsiteSlides): + @http.route(['/slides_survey/slide/get_certification_url'], type='http', auth='user', website=True) + def slide_get_certification_url(self, slide_id, **kw): + fetch_res = self._fetch_slide(slide_id) + if fetch_res.get('error'): + raise werkzeug.exceptions.NotFound() + slide = fetch_res['slide'] + if slide.channel_id.is_member: + slide.action_set_viewed() + certification_url = slide._generate_certification_url().get(slide.id) + if not certification_url: + raise werkzeug.exceptions.NotFound() + return werkzeug.utils.redirect(certification_url) + + # Utils + # --------------------------------------------------- + def _set_completed_slide(self, slide): + if slide.slide_type == 'certification': + raise werkzeug.exceptions.Forbidden(_("Certification slides are completed when the survey is succeeded.")) + return super(WebsiteSlides, self)._set_completed_slide(slide) + def _get_valid_slide_post_values(self): result = super(WebsiteSlides, self)._get_valid_slide_post_values() result.append('survey_id') return result - def _get_slide_detail(self, slide): - """ If the slide is a certification, we pass to the template additional information: - - The certification url, built with the latest attempt (survey.user_input) token - - A 'quizz_passed' boolean to know if we have to show the 'download certification' button - - The 'survey_id' to be able to download the certification - - If the user is not a member of the channel, we give the opportunity to test the certification. - The user still has to have the necessary rights, please check survey.survey._check_answer_creation - for more info. - This is used in the context of a website_publisher designing a course.""" - result = super(WebsiteSlides, self)._get_slide_detail(slide) - if not request.env.user._is_public() and slide.slide_type == 'certification' and slide.survey_id: - result['certification_test_entry'] = not slide.channel_id.is_member - result['certification_done'] = False - if slide.channel_id.is_member: - user_membership_id_sudo = slide.user_membership_id.sudo() - quizz_passed = user_membership_id_sudo.survey_quizz_passed - result['certification_done'] = quizz_passed - result['survey_id'] = slide.survey_id.id - if not quizz_passed: - last_user_input = next(user_input for user_input in user_membership_id_sudo.user_input_ids.sorted( - lambda user_input: user_input.create_date, reverse=True - )) - result['certification_url'] = last_user_input._get_survey_url() - else: - user_input = slide.survey_id._create_answer( - partner=request.env.user.partner_id, - check_attempts=False, - test_entry=True, **{ - 'slide_id': slide.id - } - ) - result['certification_url'] = user_input._get_survey_url() - - return result - # Profile # --------------------------------------------------- def _prepare_user_slides_profile(self, user): @@ -60,8 +50,8 @@ class WebsiteSlides(WebsiteSlides): # All Users Page # --------------------------------------------------- - def _prepare_all_users_values(self, user, position): - result = super(WebsiteSlides, self)._prepare_all_users_values(user, position) + def _prepare_all_users_values(self, user): + result = super(WebsiteSlides, self)._prepare_all_users_values(user) result.update({ 'certification_count': len(self._get_user_certificates(user)) }) diff --git a/addons/website_slides_survey/controllers/survey.py b/addons/website_slides_survey/controllers/survey.py index ce83f61bc8c..85a8700156a 100644 --- a/addons/website_slides_survey/controllers/survey.py +++ b/addons/website_slides_survey/controllers/survey.py @@ -8,7 +8,7 @@ class Survey(Survey): def _prepare_survey_finished_values(self, survey, answer, token=False): result = super(Survey, self)._prepare_survey_finished_values(survey, answer, token) if answer.slide_id: - result['slide_url'] = answer.slide_id.website_url + result['channel_url'] = answer.slide_id.channel_id.website_url return result diff --git a/addons/website_slides_survey/data/mail_template_data.xml b/addons/website_slides_survey/data/mail_template_data.xml new file mode 100644 index 00000000000..d9c2c90b870 --- /dev/null +++ b/addons/website_slides_survey/data/mail_template_data.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <data noupdate="1"> + <record id="mail_template_user_input_certification_failed" model="mail.template"> + <field name="name">Certification failed email</field> + <field name="model_id" ref="model_survey_user_input" /> + <field name="partner_to">${object.partner_id.id}</field> + <field name="subject">You have failed the course: ${object.slide_partner_id.channel_id.name}</field> + <field name="body_html" type="html"> +<div style="margin: 0px; padding: 0px; font-size: 13px;"> + <p style="margin: 0px; padding: 0px; font-size: 13px;"> + Dear ${object.partner_id.name or 'participant'}<br/><br/> + Unfortunately, you have failed the certification and are no longer a member of the course: ${object.slide_partner_id.channel_id.name}.<br/><br/> + Don't hesitate to enroll again! + <div style="margin: 16px 0px 16px 0px;"> + <a href="${(object.slide_partner_id.channel_id.website_url) | safe}" + style="background-color: #875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: #fff; border-radius: 5px; font-size:13px;"> + Enroll now + </a> + </div> + Thank you for your participation. + </p> +</div> + </field> + <field name="auto_delete" eval="True"/> + <field name="user_signature" eval="False"/> + </record> + </data> +</odoo> diff --git a/addons/website_slides_survey/i18n/website_slides_survey.pot b/addons/website_slides_survey/i18n/website_slides_survey.pot new file mode 100644 index 00000000000..c0c1990858f --- /dev/null +++ b/addons/website_slides_survey/i18n/website_slides_survey.pot @@ -0,0 +1,375 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_slides_survey +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~12.2\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-03-20 14:19+0000\n" +"PO-Revision-Date: 2019-03-20 14:19+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: website_slides_survey +#: model:mail.template,body_html:website_slides_survey.mail_template_user_input_certification_failed +msgid "<div style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n" +" <p style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n" +" Dear ${object.partner_id.name or 'participant'}<br/><br/>\n" +" Unfortunately, you have failed the certification and are no longer a member of the course: ${object.slide_partner_id.channel_id.name}.<br/><br/>\n" +" Don't hesitate to enroll again!\n" +" <div style=\"margin: 16px 0px 16px 0px;\">\n" +" <a href=\"${(object.slide_partner_id.channel_id.website_url) | safe}\" style=\"background-color: #875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: #fff; border-radius: 5px; font-size:13px;\">\n" +" Enroll now\n" +" </a>\n" +" </div>\n" +" Thank you for your participation.\n" +" </p>\n" +"</div>\n" +" " +msgstr "" + +#. module: website_slides_survey +#: model_terms:ir.ui.view,arch_db:website_slides_survey.slide_content_detailed +msgid "<i class=\"fa fa-fw fa-trophy\" role=\"img\" aria-label=\"Download certification\" title=\"Download certification\"/> Download certification" +msgstr "" + +#. module: website_slides_survey +#: model_terms:ir.ui.view,arch_db:website_slides_survey.courses_home_inherit_survey +msgid "<i class=\"fa fa-trophy mr-1\"/>Certifications" +msgstr "" + +#. module: website_slides_survey +#: model_terms:ir.ui.view,arch_db:website_slides_survey.all_user_card +msgid "<span class=\"text-muted small font-weight-bold\">Certifications</span>" +msgstr "" + +#. module: website_slides_survey +#: model_terms:ir.ui.view,arch_db:website_slides_survey.top3_user_card +msgid "<span class=\"text-muted\">Certifications</span>" +msgstr "" + +#. module: website_slides_survey +#: sql_constraint:slide.slide:0 +msgid "A slide of type 'certification' requires a certification." +msgstr "" + +#. module: website_slides_survey +#: sql_constraint:slide.slide:0 +msgid "A slide of type certification cannot be previewed." +msgstr "" + +#. module: website_slides_survey +#: model:survey.label,value:website_slides_survey.furniture_certification_page_1_question_1_choice_3 +msgid "Ash" +msgstr "" + +#. module: website_slides_survey +#: model:survey.label,value:website_slides_survey.furniture_certification_page_1_question_2_choice_5 +msgid "Bed" +msgstr "" + +#. module: website_slides_survey +#: model:survey.label,value:website_slides_survey.furniture_certification_page_1_question_1_choice_4 +msgid "Beech" +msgstr "" + +#. module: website_slides_survey +#: model_terms:ir.ui.view,arch_db:website_slides_survey.slide_content_detailed +msgid "Begin Certification" +msgstr "" + +#. module: website_slides_survey +#. openerp-web +#: code:addons/website_slides_survey/static/src/js/slides_upload.js:22 +#: code:addons/website_slides_survey/static/src/js/slides_upload.js:36 +#: code:addons/website_slides_survey/static/src/xml/website_slide_upload.xml:7 +#: model:ir.model.fields,field_description:website_slides_survey.field_slide_slide__survey_id +#: selection:slide.slide,slide_type:0 +#, python-format +msgid "Certification" +msgstr "" + +#. module: website_slides_survey +#: model:ir.model.fields,field_description:website_slides_survey.field_slide_slide_partner__survey_quizz_passed +msgid "Certification Quizz Passed" +msgstr "" + +#. module: website_slides_survey +#: model:ir.model.fields,field_description:website_slides_survey.field_slide_slide_partner__user_input_ids +msgid "Certification attempts" +msgstr "" + +#. module: website_slides_survey +#: code:addons/website_slides_survey/controllers/slides.py:34 +#, python-format +msgid "Certification slides are completed when the survey is succeeded." +msgstr "" + +#. module: website_slides_survey +#: model_terms:ir.ui.view,arch_db:website_slides_survey.user_profile_content +msgid "Certifications" +msgstr "" + +#. module: website_slides_survey +#: model:survey.label,value:website_slides_survey.furniture_certification_page_1_question_2_choice_1 +msgid "Chair" +msgstr "" + +#. module: website_slides_survey +#. openerp-web +#: code:addons/website_slides_survey/static/src/xml/website_slide_upload.xml:17 +#, python-format +msgid "Content Preview" +msgstr "" + +#. module: website_slides_survey +#. openerp-web +#: code:addons/website_slides_survey/static/src/xml/website_slide_upload.xml:25 +#, python-format +msgid "Cover Image File" +msgstr "" + +#. module: website_slides_survey +#: model:slide.slide,name:website_slides_survey.slide_slide_demo_6_0 +msgid "DIY Furniture Certification" +msgstr "" + +#. module: website_slides_survey +#: model:survey.label,value:website_slides_survey.furniture_certification_page_1_question_2_choice_3 +msgid "Desk" +msgstr "" + +#. module: website_slides_survey +#: selection:slide.slide,slide_type:0 +msgid "Document" +msgstr "" + +#. module: website_slides_survey +#. openerp-web +#: code:addons/website_slides_survey/static/src/xml/website_slides_fullscreen.xml:11 +#, python-format +msgid "Download certification" +msgstr "" + +#. module: website_slides_survey +#: model:survey.label,value:website_slides_survey.furniture_certification_page_1_question_1_choice_1 +msgid "Fir" +msgstr "" + +#. module: website_slides_survey +#: model:survey.question,question:website_slides_survey.furniture_certification_page_1 +#: model:survey.question,title:website_slides_survey.furniture_certification_page_1 +msgid "Furniture" +msgstr "" + +#. module: website_slides_survey +#: model:slide.slide,name:website_slides_survey.slide_slide_demo_5_4 +#: model:survey.survey,title:website_slides_survey.furniture_certification +msgid "Furniture Creation Certification" +msgstr "" + +#. module: website_slides_survey +#: model_terms:ir.ui.view,arch_db:website_slides_survey.survey_templates_inherit_website_slides +msgid "Go back to course" +msgstr "" + +#. module: website_slides_survey +#: model:survey.question,comments_message:website_slides_survey.furniture_certification_page_1 +#: model:survey.question,comments_message:website_slides_survey.furniture_certification_page_1_question_1 +#: model:survey.question,comments_message:website_slides_survey.furniture_certification_page_1_question_2 +#: model:survey.question,comments_message:website_slides_survey.furniture_certification_page_1_question_3 +msgid "If other, please specify:" +msgstr "" + +#. module: website_slides_survey +#: selection:slide.slide,slide_type:0 +msgid "Infographic" +msgstr "" + +#. module: website_slides_survey +#: model:slide.slide,description:website_slides_survey.slide_slide_demo_6_0 +msgid "It's time to test your knowledge!" +msgstr "" + +#. module: website_slides_survey +#: model_terms:ir.ui.view,arch_db:website_slides_survey.display_certificate +msgid "No certifications yet!" +msgstr "" + +#. module: website_slides_survey +#: model:slide.slide,description:website_slides_survey.slide_slide_demo_5_4 +msgid "Now that you have completed the course, it's time to test your knowledge!" +msgstr "" + +#. module: website_slides_survey +#: model:ir.model.fields,field_description:website_slides_survey.field_slide_category__nbr_certification +#: model:ir.model.fields,field_description:website_slides_survey.field_slide_channel__nbr_certification +msgid "Number of Certifications" +msgstr "" + +#. module: website_slides_survey +#: model:survey.label,value:website_slides_survey.furniture_certification_page_1_question_1_choice_2 +msgid "Oak" +msgstr "" + +#. module: website_slides_survey +#. openerp-web +#: code:addons/website_slides_survey/static/src/xml/website_slides_fullscreen.xml:7 +#, python-format +msgid "Pass Certification" +msgstr "" + +#. module: website_slides_survey +#: selection:slide.slide,slide_type:0 +msgid "Presentation" +msgstr "" + +#. module: website_slides_survey +#: selection:slide.slide,slide_type:0 +msgid "Quiz" +msgstr "" + +#. module: website_slides_survey +#: model:ir.model.fields,field_description:website_slides_survey.field_survey_user_input__slide_id +msgid "Related course slide" +msgstr "" + +#. module: website_slides_survey +#: model_terms:ir.ui.view,arch_db:website_slides_survey.display_certificate +msgid "Score :" +msgstr "" + +#. module: website_slides_survey +#: model:survey.question,question:website_slides_survey.furniture_certification_page_1_question_2 +#: model:survey.question,title:website_slides_survey.furniture_certification_page_1_question_2 +msgid "Select all the furniture shown in the video" +msgstr "" + +#. module: website_slides_survey +#: model:survey.label,value:website_slides_survey.furniture_certification_page_1_question_2_choice_4 +msgid "Shelve" +msgstr "" + +#. module: website_slides_survey +#: model:ir.model,name:website_slides_survey.model_slide_slide_partner +msgid "Slide / Partner decorated m2m" +msgstr "" + +#. module: website_slides_survey +#: model:ir.model,name:website_slides_survey.model_slide_channel +msgid "Slide Channel" +msgstr "" + +#. module: website_slides_survey +#: model:ir.model.fields,help:website_slides_survey.field_survey_user_input__slide_partner_id +msgid "Slide membership information for the logged in user" +msgstr "" + +#. module: website_slides_survey +#: model:ir.model,name:website_slides_survey.model_slide_slide +msgid "Slides" +msgstr "" + +#. module: website_slides_survey +#: model:ir.model,name:website_slides_survey.model_slide_category +msgid "Slides Category" +msgstr "" + +#. module: website_slides_survey +#: model:ir.model.fields,field_description:website_slides_survey.field_survey_user_input__slide_partner_id +msgid "Subscriber information" +msgstr "" + +#. module: website_slides_survey +#: model:ir.model,name:website_slides_survey.model_survey_survey +msgid "Survey" +msgstr "" + +#. module: website_slides_survey +#: model:ir.model,name:website_slides_survey.model_survey_user_input +msgid "Survey User Input" +msgstr "" + +#. module: website_slides_survey +#: model:survey.label,value:website_slides_survey.furniture_certification_page_1_question_2_choice_2 +msgid "Table" +msgstr "" + +#. module: website_slides_survey +#: model_terms:ir.ui.view,arch_db:website_slides_survey.slide_content_detailed +msgid "Test Certification" +msgstr "" + +#. module: website_slides_survey +#: model_terms:survey.question,description:website_slides_survey.furniture_certification_page_1 +msgid "Test your furniture knowledge!" +msgstr "" + +#. module: website_slides_survey +#: model_terms:survey.survey,description:website_slides_survey.furniture_certification +msgid "Test your furniture knowledge!." +msgstr "" + +#. module: website_slides_survey +#: model:survey.question,validation_error_msg:website_slides_survey.furniture_certification_page_1 +#: model:survey.question,validation_error_msg:website_slides_survey.furniture_certification_page_1_question_1 +#: model:survey.question,validation_error_msg:website_slides_survey.furniture_certification_page_1_question_2 +#: model:survey.question,validation_error_msg:website_slides_survey.furniture_certification_page_1_question_3 +msgid "The answer you entered is not valid." +msgstr "" + +#. module: website_slides_survey +#: model:ir.model.fields,help:website_slides_survey.field_slide_slide__slide_type +msgid "The document type will be set automatically based on the document URL and properties (e.g. height and width for presentation and document)." +msgstr "" + +#. module: website_slides_survey +#: model:ir.model.fields,help:website_slides_survey.field_survey_user_input__slide_id +msgid "The related course slide when there is no membership information" +msgstr "" + +#. module: website_slides_survey +#: model:survey.question,constr_error_msg:website_slides_survey.furniture_certification_page_1 +#: model:survey.question,constr_error_msg:website_slides_survey.furniture_certification_page_1_question_1 +#: model:survey.question,constr_error_msg:website_slides_survey.furniture_certification_page_1_question_2 +#: model:survey.question,constr_error_msg:website_slides_survey.furniture_certification_page_1_question_3 +msgid "This question requires an answer." +msgstr "" + +#. module: website_slides_survey +#: model:ir.model.fields,field_description:website_slides_survey.field_slide_slide__slide_type +msgid "Type" +msgstr "" + +#. module: website_slides_survey +#: selection:slide.slide,slide_type:0 +msgid "Video" +msgstr "" + +#. module: website_slides_survey +#: selection:slide.slide,slide_type:0 +msgid "Web Page" +msgstr "" + +#. module: website_slides_survey +#: model:survey.question,question:website_slides_survey.furniture_certification_page_1_question_3 +#: model:survey.question,title:website_slides_survey.furniture_certification_page_1_question_3 +msgid "What do you think about the content of the course? (not rated)" +msgstr "" + +#. module: website_slides_survey +#: model:survey.question,question:website_slides_survey.furniture_certification_page_1_question_1 +#: model:survey.question,title:website_slides_survey.furniture_certification_page_1_question_1 +msgid "What type of wood is the best for furniture?" +msgstr "" + +#. module: website_slides_survey +#: model:mail.template,subject:website_slides_survey.mail_template_user_input_certification_failed +msgid "You have failed the course: ${object.slide_partner_id.channel_id.name}" +msgstr "" + diff --git a/addons/website_slides_survey/models/slide_slide.py b/addons/website_slides_survey/models/slide_slide.py index ef6122a4f40..3b477364dcd 100644 --- a/addons/website_slides_survey/models/slide_slide.py +++ b/addons/website_slides_survey/models/slide_slide.py @@ -45,23 +45,45 @@ class Slide(models.Model): ('check_certification_preview', "CHECK(slide_type != 'certification' OR is_preview = False)", "A slide of type certification cannot be previewed."), ] - def _action_set_viewed(self, target_partner, quiz_attempts_inc=False): - """ If the slide viewed is a certification, we initialize the first survey.user_input - for the current partner. """ - new_slide_partners = super(Slide, self)._action_set_viewed(target_partner, quiz_attempts_inc=quiz_attempts_inc) - certification_slides = self.search([ - ('id', 'in', new_slide_partners.mapped('slide_id').ids), - ('slide_type', '=', 'certification'), - ('survey_id', '!=', False) - ]) + @api.multi + def _generate_certification_url(self): + """ get a map of certification url for certification slide from `self`. The url will come from the survey user input: + 1/ existing and not done user_input for member of the course + 2/ create a new user_input for member + 3/ for no member, a test user_input is created and the url is returned + Note: the slide.slides.partner should already exist - for new_slide_partner in new_slide_partners: - if new_slide_partner.slide_id in certification_slides and not new_slide_partner.user_input_ids: - new_slide_partner.slide_id.survey_id._create_answer( - partner=target_partner, + We have to generate a new invite_token to differentiate pools of attempts since the + course can be enrolled multiple times. + """ + certification_urls = {} + for slide in self.filtered(lambda slide: slide.slide_type == 'certification' and slide.survey_id): + if slide.channel_id.is_member: + user_membership_id_sudo = slide.user_membership_id.sudo() + quizz_passed = user_membership_id_sudo.survey_quizz_passed + if not quizz_passed and user_membership_id_sudo.user_input_ids: + last_user_input = next(user_input for user_input in user_membership_id_sudo.user_input_ids.sorted( + lambda user_input: user_input.create_date, reverse=True + )) + certification_urls[slide.id] = last_user_input._get_survey_url() + elif not user_membership_id_sudo.user_input_ids: + user_input = slide.survey_id.sudo()._create_answer( + partner=self.env.user.partner_id, + check_attempts=False, + **{ + 'slide_id': slide.id, + 'slide_partner_id': user_membership_id_sudo.id + }, + invite_token=self.env['survey.user_input']._generate_invite_token() + ) + certification_urls[slide.id] = user_input._get_survey_url() + else: + user_input = slide.survey_id.sudo()._create_answer( + partner=self.env.user.partner_id, check_attempts=False, - **{ - 'slide_id': new_slide_partner.slide_id.id, - 'slide_partner_id': new_slide_partner.id + test_entry=True, **{ + 'slide_id': slide.id } ) + certification_urls[slide.id] = user_input._get_survey_url() + return certification_urls diff --git a/addons/website_slides_survey/models/survey_user.py b/addons/website_slides_survey/models/survey_user.py index 427e5196fcb..73ecef89129 100644 --- a/addons/website_slides_survey/models/survey_user.py +++ b/addons/website_slides_survey/models/survey_user.py @@ -1,7 +1,8 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo import fields, models +from odoo import fields, models, api +from odoo.osv import expression class SurveyUserInput(models.Model): @@ -11,3 +12,54 @@ class SurveyUserInput(models.Model): help="The related course slide when there is no membership information") slide_partner_id = fields.Many2one('slide.slide.partner', 'Subscriber information', help="Slide membership information for the logged in user") + + @api.model_create_multi + def create(self, vals_list): + records = super(SurveyUserInput, self).create(vals_list) + records._check_for_failed_attempt() + return records + + @api.multi + def write(self, vals): + res = super(SurveyUserInput, self).write(vals) + if 'state' in vals: + self._check_for_failed_attempt() + return res + + def _check_for_failed_attempt(self): + """ If the user fails his last attempt at a course certification, + we remove him from the members of the course (and he has to enroll again). + He receives an email in the process notifying him of his failure and suggesting + he enrolls to the course again. + + The purpose is to have a 'certification flow' where the user can re-purchase the + certification when they have failed it.""" + + if self: + user_inputs = self.search([ + ('id', 'in', self.ids), + ('state', '=', 'done'), + ('quizz_passed', '=', False), + ('slide_partner_id', '!=', False) + ]) + + if user_inputs: + for user_input in user_inputs: + removed_memberships_per_partner = {} + if user_input.survey_id._has_attempts_left(user_input.partner_id, user_input.email, user_input.invite_token): + # skip if user still has attempts left + continue + + self.env.ref('website_slides_survey.mail_template_user_input_certification_failed').send_mail( + user_input.id, notif_layout="mail.mail_notification_light" + ) + + removed_memberships = removed_memberships_per_partner.get( + user_input.partner_id, + self.env['slide.channel'] + ) + removed_memberships |= user_input.slide_partner_id.channel_id + removed_memberships_per_partner[user_input.partner_id] = removed_memberships + + for partner_id, removed_memberships in removed_memberships_per_partner.items(): + removed_memberships._remove_membership(partner_id) diff --git a/addons/website_slides_survey/static/src/js/slides_certification_download.js b/addons/website_slides_survey/static/src/js/slides_certification_download.js deleted file mode 100644 index d1469ab63a8..00000000000 --- a/addons/website_slides_survey/static/src/js/slides_certification_download.js +++ /dev/null @@ -1,23 +0,0 @@ -odoo.define('website_slides_survey.certification_download', function (require) { -'use strict'; - -var WebsiteSlides = require('website_slides.slides'); -var session = require('web.session'); - -WebsiteSlides.include({ - events: _.extend({}, WebsiteSlides.prototype.events, { - 'click .o_wslides_survey_download_certification': '_onDownloadCertificationClick' - }), - - /** - * @private - */ - _onDownloadCertificationClick: function () { - var surveyId = this.$('.o_wslides_survey_download_certification').data('survey_id'); - session.get_file({ - url: '/survey/' + surveyId + '/get_certification' - }); - } -}); - -}); diff --git a/addons/website_slides_survey/static/src/js/slides_course_fullscreen_player.js b/addons/website_slides_survey/static/src/js/slides_course_fullscreen_player.js index 9fc8ffe3407..8ef0af53544 100644 --- a/addons/website_slides_survey/static/src/js/slides_course_fullscreen_player.js +++ b/addons/website_slides_survey/static/src/js/slides_course_fullscreen_player.js @@ -1,15 +1,39 @@ odoo.define('website_slides_survey.fullscreen', function (require) { - "use strict"; - - var core = require('web.core'); - var _t = core._t; - var Fullscreen = require('website_slides.fullscreen'); - - Fullscreen.include({ - xmlDependencies: (Fullscreen.prototype.xmlDependencies || []).concat( - ["/website_slides_survey/static/src/xml/website_slides_fullscreen.xml"] - ), - }); - - }); -
\ No newline at end of file +"use strict"; + +var core = require('web.core'); +var QWeb = core.qweb; +var Fullscreen = require('website_slides.fullscreen'); + +Fullscreen.include({ + xmlDependencies: (Fullscreen.prototype.xmlDependencies || []).concat( + ["/website_slides_survey/static/src/xml/website_slides_fullscreen.xml"] + ), + _preprocessSlideData: function (slidesDataList){ + slidesDataList = this._super.apply(this, arguments); + slidesDataList.forEach(function (slideData, index){ + if (slideData.type === "certification"){ + slideData.certificationUrl = '/slides_survey/slide/get_certification_url?slide_id=' + slideData.id; + } + }); + return slidesDataList; + }, + /** + * Extend the _renderSlide method so that slides of type "certification" + * are also taken into account and rendered correctly + * + * @private + * @override + */ + _renderSlide: function (){ + var def = this._super.apply(this, arguments); + var $content = this.$('.o_wslides_fs_content'); + if (this.get('slide').type === "certification"){ + $content.html(QWeb.render('website.slides.fullscreen.certification',{widget: this})); + } + return Promise.all([def]); + }, +}); +}); + + diff --git a/addons/website_slides_survey/static/src/scss/website_slides.scss b/addons/website_slides_survey/static/src/scss/website_slides.scss deleted file mode 100644 index 84a24ede56f..00000000000 --- a/addons/website_slides_survey/static/src/scss/website_slides.scss +++ /dev/null @@ -1,9 +0,0 @@ -.o_wslides_fs_certification { - display: flex; - justify-content: center; - align-items: center; - position: absolute; - top: 50%; - left: 50%; - transform: translateX(-50%) translateY(-50%); -}
\ No newline at end of file diff --git a/addons/website_slides_survey/static/src/xml/website_slides_fullscreen.xml b/addons/website_slides_survey/static/src/xml/website_slides_fullscreen.xml index c5d22bfc46f..7ca796f6c35 100644 --- a/addons/website_slides_survey/static/src/xml/website_slides_fullscreen.xml +++ b/addons/website_slides_survey/static/src/xml/website_slides_fullscreen.xml @@ -1,21 +1,26 @@ <?xml version="1.0" encoding="UTF-8"?> <templates> - <t t-extend="website.slides.fullscreen"> - <t t-jquery=".o_wslides_fs_content" t-operation="append"> - <div class="o_wslides_fs_certification" t-if="slide.slide_type == 'certification' && !slide.certificationDone"> - <a class="btn btn-primary" t-att-href="'/slides/slide/' + slide.slug" target="new"><i class="fa fa-trophy"/> Pass Certification</a> + + <t t-name="website.slides.fullscreen.certification"> + <div class="justify-content-center align-self-center"> + <div t-if="widget.get('slide').type === 'certification' && !widget.get('slide').completed" class=""> + <a class="btn btn-primary" t-att-href="'/slides_survey/slide/get_certification_url?slide_id=' + widget.get('slide').id" target="_blank"> + <i class="fa fa-trophy"/> + <span t-if="widget.get('slide').isMember"> Pass Certification</span> + <span t-else="">Test Certification</span> + </a> </div> - <div class="o_wslides_fs_certification" t-if="slide.slide_type == 'certification' && slide.certificationDone"> - <a role="button" t-att-data-survey_id="slide.certificationId" class="btn btn-primary o_wslides_survey_download_certification" href="#"> + <div class="" t-if="widget.get('slide').type === 'certification' && widget.get('slide').completed"> + <a role="button" class="btn btn-primary" t-att-href="'/survey/' + widget.get('slide').certificationId + '/get_certification'"> <i class="fa fa-fw fa-trophy" role="img" aria-label="Download certification" title="Download certification"/> Download certification </a> </div> - </t> + </div> </t> - <t t-extend="website.course.fullscreen.title"> + <t t-extend="website.slides.fullscreen.title"> <t t-jquery=".o_wslides_fs_slide_title_span" t-operation="before"> - <i t-if="slide.slide_type == 'certification'" class="fa fa-trophy mr-2 text"></i> + <i t-if="widget.get('slide').type === 'certification'" class="fa fa-trophy mr-2 text"></i> </t> </t> </templates> diff --git a/addons/website_slides_survey/tests/__init__.py b/addons/website_slides_survey/tests/__init__.py new file mode 100644 index 00000000000..c2f581dd98c --- /dev/null +++ b/addons/website_slides_survey/tests/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import test_course_certification_failure diff --git a/addons/website_slides_survey/tests/test_course_certification_failure.py b/addons/website_slides_survey/tests/test_course_certification_failure.py new file mode 100644 index 00000000000..bdb72b5d294 --- /dev/null +++ b/addons/website_slides_survey/tests/test_course_certification_failure.py @@ -0,0 +1,122 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo.addons.survey.tests.common import SurveyCase + + +class TestCourseCertificationFailureFlow(SurveyCase): + def test_course_certification_failure_flow(self): + # Step 1: create a simple certification + # -------------------------------------------------- + with self.sudo(self.survey_user): + certification = self.env['survey.survey'].create({ + 'title': 'Small course certification', + 'access_mode': 'public', + 'users_login_required': True, + 'scoring_type': 'scoring_with_answers', + 'certificate': True, + 'is_attempts_limited': True, + 'passing_score': 100.0, + 'attempts_limit': 2, + 'stage_id': self.env['survey.stage'].search([('closed', '=', False)]).id + }) + + self._add_question( + None, 'Question 1', 'simple_choice', + sequence=1, + survey_id=certification.id, + labels=[ + {'value': 'Wrong answer'}, + {'value': 'Correct answer', 'is_correct': True, 'answer_score': 1.0} + ]) + + self._add_question( + None, 'Question 2', 'simple_choice', + sequence=2, + survey_id=certification.id, + labels=[ + {'value': 'Wrong answer'}, + {'value': 'Correct answer', 'is_correct': True, 'answer_score': 1.0} + ]) + + # Step 1.1: create a simple channel + self.channel = self.env['slide.channel'].sudo().create({ + 'name': 'Test Channel', + 'channel_type': 'training', + 'enroll': 'public', + 'visibility': 'public', + 'website_published': True, + }) + + # Step 2: link the certification to a slide of type 'certification' + self.slide_certification = self.env['slide.slide'].sudo().create({ + 'name': 'Certification slide', + 'channel_id': self.channel.id, + 'slide_type': 'certification', + 'survey_id': certification.id, + 'website_published': True, + }) + # Step 3: add public user as member of the channel + self.channel._action_add_members(self.user_public.partner_id) + # forces recompute of partner_ids as we create directly in relation + self.channel.invalidate_cache() + slide_partner = self.slide_certification._action_set_viewed(self.user_public.partner_id) + self.slide_certification.sudo(self.user_public)._generate_certification_url() + + self.assertEqual(1, len(slide_partner.user_input_ids), 'A user input should have been automatically created upon slide view') + + # Step 4: fill in the created user_input with wrong answers + self.fill_in_answer(slide_partner.user_input_ids[0], certification.question_ids) + + self.assertFalse(slide_partner.survey_quizz_passed, 'Quizz should not be marked as passed with wrong answers') + # forces recompute of partner_ids as we delete directly in relation + self.channel.invalidate_cache() + self.assertIn(self.user_public.partner_id, self.channel.partner_ids, 'Public user should still be a member of the course because he still has attempts left') + + # Step 5: simulate a 'retry' + retry_user_input = self.slide_certification.survey_id.sudo()._create_answer( + partner=self.user_public.partner_id, + **{ + 'slide_id': self.slide_certification.id, + 'slide_partner_id': slide_partner.id + }, + invite_token=slide_partner.user_input_ids[0].invite_token + ) + # Step 6: fill in the new user_input with wrong answers again + self.fill_in_answer(retry_user_input, certification.question_ids) + # forces recompute of partner_ids as we delete directly in relation + self.channel.invalidate_cache() + self.assertNotIn(self.user_public.partner_id, self.channel.partner_ids, 'Public user should have been kicked out of the course because he failed his last attempt') + + # Step 7: add public user as member of the channel once again + self.channel._action_add_members(self.user_public.partner_id) + # forces recompute of partner_ids as we create directly in relation + self.channel.invalidate_cache() + + self.assertIn(self.user_public.partner_id, self.channel.partner_ids, 'Public user should be a member of the course once again') + new_slide_partner = self.slide_certification._action_set_viewed(self.user_public.partner_id) + self.slide_certification.sudo(self.user_public)._generate_certification_url() + self.assertEqual(1, len(new_slide_partner.user_input_ids.filtered(lambda user_input: user_input.state != 'done')), 'A new user input should have been automatically created upon slide view') + + # Step 8: fill in the created user_input with correct answers this time + self.fill_in_answer(new_slide_partner.user_input_ids.filtered(lambda user_input: user_input.state != 'done')[0], certification.question_ids, good_answers=True) + self.assertTrue(new_slide_partner.survey_quizz_passed, 'Quizz should be marked as passed with correct answers') + # forces recompute of partner_ids as we delete directly in relation + self.channel.invalidate_cache() + self.assertIn(self.user_public.partner_id, self.channel.partner_ids, 'Public user should still be a member of the course') + + def fill_in_answer(self, answer, questions, good_answers=False): + """ Fills in the user_input with answers for all given questions. + You can control whether the answer will be correct or not with the 'good_answers' param. + (It's assumed that wrong answers are at index 0 of question.labels_ids and good answers at index 1) """ + answer.write({ + 'state': 'done', + 'user_input_line_ids': [ + (0, 0, { + 'question_id': question.id, + 'answer_type': 'suggestion', + 'answer_score': 1 if good_answers else 0, + 'value_suggested': question.labels_ids[1 if good_answers else 0].id + }) for question in questions + ] + }) diff --git a/addons/website_slides_survey/views/assets.xml b/addons/website_slides_survey/views/assets.xml index 7f239d7a1c9..7a31fa078c8 100644 --- a/addons/website_slides_survey/views/assets.xml +++ b/addons/website_slides_survey/views/assets.xml @@ -2,12 +2,8 @@ <odoo> <data> <template id="assets_frontend" inherit_id="website.assets_frontend" name="Slides Certification"> - <xpath expr="//link[last()]" position="after"> - <link rel="stylesheet" type="text/scss" href="/website_slides_survey/static/src/scss/website_slides.scss" t-ignore="true"/> - </xpath> <xpath expr="//script[last()]" position="after"> <script type="text/javascript" src="/website_slides_survey/static/src/js/slides_upload.js"/> - <script type="text/javascript" src="/website_slides_survey/static/src/js/slides_certification_download.js"/> <link rel="stylesheet" type="text/scss" href="/website_slides_survey/static/src/scss/website_profile.scss"/> <script type="text/javascript" src="/website_slides_survey/static/src/js/slides_course_fullscreen_player.js"/> </xpath> diff --git a/addons/website_slides_survey/views/survey_templates.xml b/addons/website_slides_survey/views/survey_templates.xml index c6816dde39b..deea71a9c99 100644 --- a/addons/website_slides_survey/views/survey_templates.xml +++ b/addons/website_slides_survey/views/survey_templates.xml @@ -3,10 +3,10 @@ <data> <template id="survey_templates_inherit_website_slides" inherit_id="survey.sfinished"> <xpath expr="//div[hasclass('jumbotron')]/div[last()]" position="after"> - <div t-if="slide_url" class="mt16"> + <div t-if="channel_url" class="mt16"> <a role="button" class="btn btn-primary btn-lg" - t-att-href="slide_url"> + t-att-href="channel_url"> Go back to course </a> </div> diff --git a/addons/website_slides_survey/views/website_profile.xml b/addons/website_slides_survey/views/website_profile.xml index 6b76420d3ac..114120fcb11 100644 --- a/addons/website_slides_survey/views/website_profile.xml +++ b/addons/website_slides_survey/views/website_profile.xml @@ -14,20 +14,15 @@ <template id="display_certificate"> <t t-if="certificates"> <div class="row"> - <div class="col-lg-6 o_wprofile_slides_card" t-foreach="certificates" t-as="certificate"> - <div class="card-body o_wprofile_slides_certif_card_body o_wprofile_bb_grey"> - <div class="row"> - <div><img class="o_wprofile_img_small" t-attf-src="/web/image/slide.slide/#{certificate.slide_id.id}/image_small"/></div> - <div class="col-10 o_wprofile_slides_title"> - <span class="font-weight-bold" t-field="certificate.survey_id.title"/> - </div> - <div class="float-right" t-if="user.id == uid"> - <span class="row">Score : <b t-field="certificate.quizz_score"/>%</span> - <div class="row"> - <a role="button" - t-att-data-survey_id="certificate.survey_id.id" - class="o_wslides_survey_download_certification" - href="#"> + <div class="col-12 col-lg-6" t-foreach="certificates" t-as="certificate"> + <div class="card mb-2"> + <div class="card-body o_wprofile_slides_course_card_body p-0 d-flex"> + <div class="pl-5 pr-4 rounded-left" t-attf-style="background-image:url(/web/image/slide.slide/#{certificate.slide_id.id}/image_medium); background-position: center"/> + <div class="p-2 w-100"> + <h5 class="mt-0 mb-1" t-field="certificate.survey_id.title"/> + <div t-if="user.id == uid"> + <small class="font-weight-bold">Score : <span t-field="certificate.quizz_score"/> %</small> + <a role="button" class="float-right" t-att-href="'/survey/%s/get_certification' % certificate.survey_id.id"> <i class="fa fa-download"/> </a> </div> diff --git a/addons/website_slides_survey/views/website_slides_templates_course.xml b/addons/website_slides_survey/views/website_slides_templates_course.xml index fc0a2cba672..98aa90c575f 100644 --- a/addons/website_slides_survey/views/website_slides_templates_course.xml +++ b/addons/website_slides_survey/views/website_slides_templates_course.xml @@ -6,5 +6,11 @@ <i t-if="slide.slide_type == 'certification'" t-att-class="'fa fa-trophy %s' % icon_class"></i> </xpath> </template> + + <template id="course_slides_list_slide_inherit_survey" inherit_id="website_slides.course_slides_list_slide"> + <xpath expr="//a[hasclass('o_wslides_js_slides_list_slide_link')]" position="attributes"> + <attribute name="t-attf-href">#{'/slides_survey/slide/get_certification_url?slide_id=%s' %(slide.id) if slide.slide_type == 'certification' and slide.channel_id.total_slides == 1 else '/slides/slide/%s' %(slug(slide))}</attribute> + </xpath> + </template> </data> </odoo> diff --git a/addons/website_slides_survey/views/website_slides_templates_lesson.xml b/addons/website_slides_survey/views/website_slides_templates_lesson.xml index c6233535bed..709528c5ab4 100644 --- a/addons/website_slides_survey/views/website_slides_templates_lesson.xml +++ b/addons/website_slides_survey/views/website_slides_templates_lesson.xml @@ -3,23 +3,18 @@ <data> <template id="slide_content_detailed" inherit_id="website_slides.slide_content_detailed"> <xpath expr="//div[hasclass('o_wslides_lesson_content_type')]" position="inside"> - <t t-if="not certification_test_entry" t-set="begin_certification_label" t-value="'Begin certification'" /> - <t t-if="certification_test_entry" t-set="begin_certification_label" t-value="'Test certification'" /> - <div t-if="slide.slide_type == 'certification' and not certification_done" class="col mt32 mb8 d-flex justify-content-center"> + <div t-if="slide.slide_type == 'certification' and not channel_progress[slide.id].get('completed')" class="col mt32 mb8 d-flex justify-content-center"> <a role="button" class="btn btn-primary btn-lg" - t-att-href="certification_url"> - <i class="fa fa-fw fa-graduation-cap" role="img" t-att-aria-label="begin_certification_label" t-att-title="begin_certification_label"/> - <t t-esc="begin_certification_label" /> + t-att-href="'/slides_survey/slide/get_certification_url?slide_id=%s' %(slide.id)"> + <i class="fa fa-fw fa-graduation-cap" role="img"/> + <t t-if="slide.channel_id.is_member">Begin Certification</t> + <t t-else="">Test Certification</t> </a> </div> - <div t-if="slide.slide_type == 'certification' and certification_done" class="col mt32 mb8 d-flex justify-content-center"> - <a role="button" - t-att-data-survey_id="survey_id" - class="btn btn-primary btn-lg o_wslides_survey_download_certification" - href="#"> - <i class="fa fa-fw fa-trophy" role="img" aria-label="Download certification" title="Download certification"/> - Download certification + <div t-if="slide.slide_type == 'certification' and channel_progress[slide.id].get('completed')" class="col mt32 mb8 d-flex justify-content-center"> + <a role="button" class="btn btn-primary btn-lg" t-att-href="'/survey/%s/get_certification' % slide.survey_id.id"> + <i class="fa fa-fw fa-trophy" role="img" aria-label="Download certification" title="Download certification"/> Download certification </a> </div> </xpath> diff --git a/addons/website_slides_survey/views/website_slides_templates_lesson_fullscreen.xml b/addons/website_slides_survey/views/website_slides_templates_lesson_fullscreen.xml index d42674336ac..feada894efd 100644 --- a/addons/website_slides_survey/views/website_slides_templates_lesson_fullscreen.xml +++ b/addons/website_slides_survey/views/website_slides_templates_lesson_fullscreen.xml @@ -2,9 +2,9 @@ <odoo><data> <template id="slide_fullscreen_sidebar_category" inherit_id="website_slides.slide_fullscreen_sidebar_category"> - <xpath expr="//div[@t-attf-index='#{i}']" position="attributes"> - <attribute name="t-att-data-certification-done">channel_progress[course_slide.id].get('survey_quizz_passed')</attribute> - <attribute name="t-att-data-certification-id">course_slide.survey_id.id</attribute> + <xpath expr="//li[@t-att-data-id='slide.id']" position="attributes"> + <attribute name="t-att-data-certification-id">slide.survey_id.id</attribute> + <attribute name="t-att-data-is-member">slide.channel_id.is_member</attribute> </xpath> </template> |
