[ODOO] Odoo updates till commit ref: 529a8f5aa8

This commit is contained in:
flectra-admin 2018-01-15 15:21:30 +01:00 committed by Siddharth Bhalgami
parent 3d05cc9726
commit 9985810340
30 changed files with 1304 additions and 199 deletions

View File

@ -31,4 +31,4 @@ class HolidaysSummaryDept(models.TransientModel):
'model': 'hr.department', 'model': 'hr.department',
'form': data 'form': data
} }
return self.env.ref('hr_holidays.action_report_holidayssummary').report_action(departments, data=datas) return self.env.ref('hr_holidays.action_report_holidayssummary').with_context(from_transient_model=True).report_action(departments, data=datas)

View File

@ -2,30 +2,265 @@
# This file contains the translation of the following modules: # This file contains the translation of the following modules:
# * l10n_ch # * l10n_ch
# #
# Translators:
# BT_astauder <andreas.stauder@brain-tec.ch>, 2015
# Ermin Trevisan <trevi@twanda.com>, 2015
# Wolfgang Taferner, 2016
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Odoo 9.0\n" "Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-18 15:42+0000\n" "POT-Creation-Date: 2018-01-16 15:58+0000\n"
"PO-Revision-Date: 2016-01-15 03:53+0000\n" "PO-Revision-Date: 2018-01-16 15:58+0000\n"
"Last-Translator: Wolfgang Taferner\n" "Last-Translator: <>\n"
"Language-Team: German (http://www.transifex.com/odoo/odoo-9/language/de/)\n" "Language-Team: \n"
"Language: de\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n" "Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: \n"
#. module: l10n_ch #. module: l10n_ch
#: model:ir.actions.client,name:l10n_ch.action_client_l10n_ch_menu #: model:ir.model,name:l10n_ch.model_res_bank
msgid "Open Account Dashboard Menu" msgid "Bank"
msgstr " Buchführungsübersicht öffnen" msgstr ""
#. module: l10n_ch
#: model:ir.model,name:l10n_ch.model_res_partner_bank
msgid "Bank Accounts"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_res_company_l10n_ch_isr_print_bank_location
#: model:ir.model.fields,help:l10n_ch.field_res_config_settings_l10n_ch_isr_print_bank_location
msgid "Boolean option field indicating whether or not the alternate layout (the one printing bank name and address) must be used when generating an ISR."
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_sent
msgid "Boolean value telling whether or not the ISR corresponding to this invoice has already been printed or sent by mail."
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_valid
msgid "Boolean value. True iff all the data required to generate the ISR are present"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_res_bank_l10n_ch_postal_chf
msgid "CHF ISR reference"
msgstr ""
#. module: l10n_ch
#: model:account.cash.rounding,name:l10n_ch.cash_rounding_5_centime
msgid "Coinage 0.05"
msgstr ""
#. module: l10n_ch
#: model:ir.model,name:l10n_ch.model_res_company
msgid "Companies"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_currency_name
msgid "Currency"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_res_bank_l10n_ch_postal_eur
msgid "EUR ISR reference"
msgstr ""
#. module: l10n_ch
#: model:ir.model,name:l10n_ch.model_mail_template
msgid "Email Templates"
msgstr ""
#. module: l10n_ch
#: model:ir.model,name:l10n_ch.model_mail_compose_message
msgid "Email composition wizard"
msgstr ""
#. module: l10n_ch
#: model:ir.actions.report,name:l10n_ch.l10n_ch_isr_report
msgid "ISR"
msgstr ""
#. module: l10n_ch
#: model:ir.ui.view,arch_db:l10n_ch.l10n_ch_isr_report_template
msgid "ISR for invoice"
msgstr "ESR bezüglich der Rechnung"
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_number_spaced
msgid "ISR number split in blocks of 5 characters (right-justified), to generate ISR report."
msgstr ""
#. module: l10n_ch
#: model:ir.ui.view,arch_db:l10n_ch.isr_invoice_search_view
msgid "ISR reference number"
msgstr ""
#. module: l10n_ch
#: code:addons/l10n_ch/models/mail_compose_message.py:23
#, python-format
msgid "ISR sent"
msgstr ""
#. module: l10n_ch
#: model:ir.model,name:l10n_ch.model_account_invoice
msgid "Invoice"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_number
msgid "L10N Ch Isr Number"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_number_spaced
msgid "L10N Ch Isr Number Spaced"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_optical_line
msgid "L10N Ch Isr Optical Line"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_postal
msgid "L10N Ch Isr Postal"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_postal_formatted
msgid "L10N Ch Isr Postal Formatted"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_sent
msgid "L10N Ch Isr Sent"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_valid
msgid "L10N Ch Isr Valid"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_res_partner_bank_l10n_ch_postal
msgid "L10N Ch Postal"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_optical_line
msgid "Optical reading line, as it will be printed on ISR"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_postal_formatted
msgid "Postal reference of the bank, formated with '-' and without the padding zeros, to generate ISR report."
msgstr ""
#. module: l10n_ch
#: model:ir.ui.view,arch_db:l10n_ch.isr_invoice_form
msgid "Print ISR"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_res_company_l10n_ch_isr_print_bank_location
msgid "Print bank location"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_res_config_settings_l10n_ch_isr_print_bank_location
msgid "Print bank on ISR"
msgstr ""
#. module: l10n_ch
#: model:ir.ui.view,arch_db:l10n_ch.res_config_settings_view_form
msgid "Print the coordinates of your bank under the 'Payment for' title of the ISR.\n"
" Your address will be moved to the 'in favour of' section."
msgstr ""
#. module: l10n_ch #. module: l10n_ch
#: model:ir.ui.menu,name:l10n_ch.account_reports_ch_statements_menu #: model:ir.ui.menu,name:l10n_ch.account_reports_ch_statements_menu
msgid "Swiss Statements" msgid "Switzerland"
msgstr "CH Bilanz- und Erfolgsrechnungen" msgstr ""
#. module: l10n_ch
#: model:account.tax.group,name:l10n_ch.tax_group_tva_0
msgid "TVA 0%"
msgstr ""
#. module: l10n_ch
#: model:account.tax.group,name:l10n_ch.tax_group_tva_25
msgid "TVA 2.5%"
msgstr ""
#. module: l10n_ch
#: model:account.tax.group,name:l10n_ch.tax_group_tva_37
msgid "TVA 3.7%"
msgstr ""
#. module: l10n_ch
#: model:account.tax.group,name:l10n_ch.tax_group_tva_38
msgid "TVA 3.8%"
msgstr ""
#. module: l10n_ch
#: model:account.tax.group,name:l10n_ch.tax_group_tva_77
msgid "TVA 7.7%"
msgstr ""
#. module: l10n_ch
#: model:account.tax.group,name:l10n_ch.tax_group_tva_8
msgid "TVA 8%"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_res_partner_bank_l10n_ch_postal
msgid "The ISR number of the company within the bank"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_currency_name
msgid "The name of this invoice's currency"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_postal
msgid "The postal reference identifying the bank managing this ISR."
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_res_bank_l10n_ch_postal_chf
msgid "The postal reference of the bank, used to generate ISR payment slips in CHF."
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_res_bank_l10n_ch_postal_eur
msgid "The postal reference of the bank, used to generate ISR payment slips in EUR."
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_number
msgid "The reference number associated with this invoice"
msgstr ""
#. module: l10n_ch
#: code:addons/l10n_ch/models/account_invoice.py:154
#, python-format
msgid "You cannot generate an ISR yet.\n"
"\n"
" For this, you need to :\n"
"\n"
" - set a valid postal account number (or an IBAN referencing one) for your company\n"
"\n"
" - define its bank\n"
"\n"
" - associate this bank with a postal reference for the currency used in this invoice\n"
"\n"
" - fill the 'bank account' field of the invoice with the postal to be used to receive the related payment. A default account will be automatically set for all invoices created after you defined a postal account for your company."
msgstr ""
#. module: l10n_ch
#: model:ir.model,name:l10n_ch.model_res_config_settings
msgid "res.config.settings"
msgstr ""

View File

@ -2,29 +2,265 @@
# This file contains the translation of the following modules: # This file contains the translation of the following modules:
# * l10n_ch # * l10n_ch
# #
# Translators:
# Maxime Chambreuil <maxime.chambreuil@gmail.com>, 2015
# Miguel Vidali <mvidali129@gmail.com>, 2015
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Odoo 9.0\n" "Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-18 15:42+0000\n" "POT-Creation-Date: 2018-01-16 15:58+0000\n"
"PO-Revision-Date: 2015-11-11 21:04+0000\n" "PO-Revision-Date: 2018-01-16 15:58+0000\n"
"Last-Translator: Maxime Chambreuil <maxime.chambreuil@gmail.com>\n" "Last-Translator: <>\n"
"Language-Team: French (http://www.transifex.com/odoo/odoo-9/language/fr/)\n" "Language-Team: \n"
"Language: fr\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n" "Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: \n"
#. module: l10n_ch #. module: l10n_ch
#: model:ir.actions.client,name:l10n_ch.action_client_l10n_ch_menu #: model:ir.model,name:l10n_ch.model_res_bank
msgid "Open Account Dashboard Menu" msgid "Bank"
msgstr "Ouvrez le menu Comptabilité" msgstr ""
#. module: l10n_ch
#: model:ir.model,name:l10n_ch.model_res_partner_bank
msgid "Bank Accounts"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_res_company_l10n_ch_isr_print_bank_location
#: model:ir.model.fields,help:l10n_ch.field_res_config_settings_l10n_ch_isr_print_bank_location
msgid "Boolean option field indicating whether or not the alternate layout (the one printing bank name and address) must be used when generating an ISR."
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_sent
msgid "Boolean value telling whether or not the ISR corresponding to this invoice has already been printed or sent by mail."
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_valid
msgid "Boolean value. True iff all the data required to generate the ISR are present"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_res_bank_l10n_ch_postal_chf
msgid "CHF ISR reference"
msgstr ""
#. module: l10n_ch
#: model:account.cash.rounding,name:l10n_ch.cash_rounding_5_centime
msgid "Coinage 0.05"
msgstr ""
#. module: l10n_ch
#: model:ir.model,name:l10n_ch.model_res_company
msgid "Companies"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_currency_name
msgid "Currency"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_res_bank_l10n_ch_postal_eur
msgid "EUR ISR reference"
msgstr ""
#. module: l10n_ch
#: model:ir.model,name:l10n_ch.model_mail_template
msgid "Email Templates"
msgstr ""
#. module: l10n_ch
#: model:ir.model,name:l10n_ch.model_mail_compose_message
msgid "Email composition wizard"
msgstr ""
#. module: l10n_ch
#: model:ir.actions.report,name:l10n_ch.l10n_ch_isr_report
msgid "ISR"
msgstr ""
#. module: l10n_ch
#: model:ir.ui.view,arch_db:l10n_ch.l10n_ch_isr_report_template
msgid "ISR for invoice"
msgstr "BVR relatif à la facture"
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_number_spaced
msgid "ISR number split in blocks of 5 characters (right-justified), to generate ISR report."
msgstr ""
#. module: l10n_ch
#: model:ir.ui.view,arch_db:l10n_ch.isr_invoice_search_view
msgid "ISR reference number"
msgstr ""
#. module: l10n_ch
#: code:addons/l10n_ch/models/mail_compose_message.py:23
#, python-format
msgid "ISR sent"
msgstr ""
#. module: l10n_ch
#: model:ir.model,name:l10n_ch.model_account_invoice
msgid "Invoice"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_number
msgid "L10N Ch Isr Number"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_number_spaced
msgid "L10N Ch Isr Number Spaced"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_optical_line
msgid "L10N Ch Isr Optical Line"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_postal
msgid "L10N Ch Isr Postal"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_postal_formatted
msgid "L10N Ch Isr Postal Formatted"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_sent
msgid "L10N Ch Isr Sent"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_valid
msgid "L10N Ch Isr Valid"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_res_partner_bank_l10n_ch_postal
msgid "L10N Ch Postal"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_optical_line
msgid "Optical reading line, as it will be printed on ISR"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_postal_formatted
msgid "Postal reference of the bank, formated with '-' and without the padding zeros, to generate ISR report."
msgstr ""
#. module: l10n_ch
#: model:ir.ui.view,arch_db:l10n_ch.isr_invoice_form
msgid "Print ISR"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_res_company_l10n_ch_isr_print_bank_location
msgid "Print bank location"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_res_config_settings_l10n_ch_isr_print_bank_location
msgid "Print bank on ISR"
msgstr ""
#. module: l10n_ch
#: model:ir.ui.view,arch_db:l10n_ch.res_config_settings_view_form
msgid "Print the coordinates of your bank under the 'Payment for' title of the ISR.\n"
" Your address will be moved to the 'in favour of' section."
msgstr ""
#. module: l10n_ch #. module: l10n_ch
#: model:ir.ui.menu,name:l10n_ch.account_reports_ch_statements_menu #: model:ir.ui.menu,name:l10n_ch.account_reports_ch_statements_menu
msgid "Swiss Statements" msgid "Switzerland"
msgstr "Déclarations suisses" msgstr ""
#. module: l10n_ch
#: model:account.tax.group,name:l10n_ch.tax_group_tva_0
msgid "TVA 0%"
msgstr ""
#. module: l10n_ch
#: model:account.tax.group,name:l10n_ch.tax_group_tva_25
msgid "TVA 2.5%"
msgstr ""
#. module: l10n_ch
#: model:account.tax.group,name:l10n_ch.tax_group_tva_37
msgid "TVA 3.7%"
msgstr ""
#. module: l10n_ch
#: model:account.tax.group,name:l10n_ch.tax_group_tva_38
msgid "TVA 3.8%"
msgstr ""
#. module: l10n_ch
#: model:account.tax.group,name:l10n_ch.tax_group_tva_77
msgid "TVA 7.7%"
msgstr ""
#. module: l10n_ch
#: model:account.tax.group,name:l10n_ch.tax_group_tva_8
msgid "TVA 8%"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_res_partner_bank_l10n_ch_postal
msgid "The ISR number of the company within the bank"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_currency_name
msgid "The name of this invoice's currency"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_postal
msgid "The postal reference identifying the bank managing this ISR."
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_res_bank_l10n_ch_postal_chf
msgid "The postal reference of the bank, used to generate ISR payment slips in CHF."
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_res_bank_l10n_ch_postal_eur
msgid "The postal reference of the bank, used to generate ISR payment slips in EUR."
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_number
msgid "The reference number associated with this invoice"
msgstr ""
#. module: l10n_ch
#: code:addons/l10n_ch/models/account_invoice.py:154
#, python-format
msgid "You cannot generate an ISR yet.\n"
"\n"
" For this, you need to :\n"
"\n"
" - set a valid postal account number (or an IBAN referencing one) for your company\n"
"\n"
" - define its bank\n"
"\n"
" - associate this bank with a postal reference for the currency used in this invoice\n"
"\n"
" - fill the 'bank account' field of the invoice with the postal to be used to receive the related payment. A default account will be automatically set for all invoices created after you defined a postal account for your company."
msgstr ""
#. module: l10n_ch
#: model:ir.model,name:l10n_ch.model_res_config_settings
msgid "res.config.settings"
msgstr ""

View File

@ -2,27 +2,265 @@
# This file contains the translation of the following modules: # This file contains the translation of the following modules:
# * l10n_ch # * l10n_ch
# #
# Translators:
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Odoo 9.0\n" "Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-18 15:42+0000\n" "POT-Creation-Date: 2018-01-16 15:58+0000\n"
"PO-Revision-Date: 2016-02-24 22:58+0000\n" "PO-Revision-Date: 2018-01-16 15:58+0000\n"
"Last-Translator: Martin Trigaux\n" "Last-Translator: <>\n"
"Language-Team: Italian (http://www.transifex.com/odoo/odoo-9/language/it/)\n" "Language-Team: \n"
"Language: it\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n" "Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: \n"
#. module: l10n_ch #. module: l10n_ch
#: model:ir.actions.client,name:l10n_ch.action_client_l10n_ch_menu #: model:ir.model,name:l10n_ch.model_res_bank
msgid "Open Account Dashboard Menu" msgid "Bank"
msgstr "Apri menu dashboard dell'account" msgstr ""
#. module: l10n_ch
#: model:ir.model,name:l10n_ch.model_res_partner_bank
msgid "Bank Accounts"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_res_company_l10n_ch_isr_print_bank_location
#: model:ir.model.fields,help:l10n_ch.field_res_config_settings_l10n_ch_isr_print_bank_location
msgid "Boolean option field indicating whether or not the alternate layout (the one printing bank name and address) must be used when generating an ISR."
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_sent
msgid "Boolean value telling whether or not the ISR corresponding to this invoice has already been printed or sent by mail."
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_valid
msgid "Boolean value. True iff all the data required to generate the ISR are present"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_res_bank_l10n_ch_postal_chf
msgid "CHF ISR reference"
msgstr ""
#. module: l10n_ch
#: model:account.cash.rounding,name:l10n_ch.cash_rounding_5_centime
msgid "Coinage 0.05"
msgstr ""
#. module: l10n_ch
#: model:ir.model,name:l10n_ch.model_res_company
msgid "Companies"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_currency_name
msgid "Currency"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_res_bank_l10n_ch_postal_eur
msgid "EUR ISR reference"
msgstr ""
#. module: l10n_ch
#: model:ir.model,name:l10n_ch.model_mail_template
msgid "Email Templates"
msgstr ""
#. module: l10n_ch
#: model:ir.model,name:l10n_ch.model_mail_compose_message
msgid "Email composition wizard"
msgstr ""
#. module: l10n_ch
#: model:ir.actions.report,name:l10n_ch.l10n_ch_isr_report
msgid "ISR"
msgstr ""
#. module: l10n_ch
#: model:ir.ui.view,arch_db:l10n_ch.l10n_ch_isr_report_template
msgid "ISR for invoice"
msgstr "SR relativo alla fattura"
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_number_spaced
msgid "ISR number split in blocks of 5 characters (right-justified), to generate ISR report."
msgstr ""
#. module: l10n_ch
#: model:ir.ui.view,arch_db:l10n_ch.isr_invoice_search_view
msgid "ISR reference number"
msgstr ""
#. module: l10n_ch
#: code:addons/l10n_ch/models/mail_compose_message.py:23
#, python-format
msgid "ISR sent"
msgstr ""
#. module: l10n_ch
#: model:ir.model,name:l10n_ch.model_account_invoice
msgid "Invoice"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_number
msgid "L10N Ch Isr Number"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_number_spaced
msgid "L10N Ch Isr Number Spaced"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_optical_line
msgid "L10N Ch Isr Optical Line"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_postal
msgid "L10N Ch Isr Postal"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_postal_formatted
msgid "L10N Ch Isr Postal Formatted"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_sent
msgid "L10N Ch Isr Sent"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_valid
msgid "L10N Ch Isr Valid"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_res_partner_bank_l10n_ch_postal
msgid "L10N Ch Postal"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_optical_line
msgid "Optical reading line, as it will be printed on ISR"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_postal_formatted
msgid "Postal reference of the bank, formated with '-' and without the padding zeros, to generate ISR report."
msgstr ""
#. module: l10n_ch
#: model:ir.ui.view,arch_db:l10n_ch.isr_invoice_form
msgid "Print ISR"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_res_company_l10n_ch_isr_print_bank_location
msgid "Print bank location"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_res_config_settings_l10n_ch_isr_print_bank_location
msgid "Print bank on ISR"
msgstr ""
#. module: l10n_ch
#: model:ir.ui.view,arch_db:l10n_ch.res_config_settings_view_form
msgid "Print the coordinates of your bank under the 'Payment for' title of the ISR.\n"
" Your address will be moved to the 'in favour of' section."
msgstr ""
#. module: l10n_ch #. module: l10n_ch
#: model:ir.ui.menu,name:l10n_ch.account_reports_ch_statements_menu #: model:ir.ui.menu,name:l10n_ch.account_reports_ch_statements_menu
msgid "Swiss Statements" msgid "Switzerland"
msgstr "" msgstr ""
#. module: l10n_ch
#: model:account.tax.group,name:l10n_ch.tax_group_tva_0
msgid "TVA 0%"
msgstr ""
#. module: l10n_ch
#: model:account.tax.group,name:l10n_ch.tax_group_tva_25
msgid "TVA 2.5%"
msgstr ""
#. module: l10n_ch
#: model:account.tax.group,name:l10n_ch.tax_group_tva_37
msgid "TVA 3.7%"
msgstr ""
#. module: l10n_ch
#: model:account.tax.group,name:l10n_ch.tax_group_tva_38
msgid "TVA 3.8%"
msgstr ""
#. module: l10n_ch
#: model:account.tax.group,name:l10n_ch.tax_group_tva_77
msgid "TVA 7.7%"
msgstr ""
#. module: l10n_ch
#: model:account.tax.group,name:l10n_ch.tax_group_tva_8
msgid "TVA 8%"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_res_partner_bank_l10n_ch_postal
msgid "The ISR number of the company within the bank"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_currency_name
msgid "The name of this invoice's currency"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_postal
msgid "The postal reference identifying the bank managing this ISR."
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_res_bank_l10n_ch_postal_chf
msgid "The postal reference of the bank, used to generate ISR payment slips in CHF."
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_res_bank_l10n_ch_postal_eur
msgid "The postal reference of the bank, used to generate ISR payment slips in EUR."
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_number
msgid "The reference number associated with this invoice"
msgstr ""
#. module: l10n_ch
#: code:addons/l10n_ch/models/account_invoice.py:154
#, python-format
msgid "You cannot generate an ISR yet.\n"
"\n"
" For this, you need to :\n"
"\n"
" - set a valid postal account number (or an IBAN referencing one) for your company\n"
"\n"
" - define its bank\n"
"\n"
" - associate this bank with a postal reference for the currency used in this invoice\n"
"\n"
" - fill the 'bank account' field of the invoice with the postal to be used to receive the related payment. A default account will be automatically set for all invoices created after you defined a postal account for your company."
msgstr ""
#. module: l10n_ch
#: model:ir.model,name:l10n_ch.model_res_config_settings
msgid "res.config.settings"
msgstr ""

View File

@ -4,10 +4,10 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Odoo Server 9.0\n" "Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-18 15:42+0000\n" "POT-Creation-Date: 2018-01-16 15:58+0000\n"
"PO-Revision-Date: 2015-09-18 15:42+0000\n" "PO-Revision-Date: 2018-01-16 15:58+0000\n"
"Last-Translator: <>\n" "Last-Translator: <>\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -16,12 +16,251 @@ msgstr ""
"Plural-Forms: \n" "Plural-Forms: \n"
#. module: l10n_ch #. module: l10n_ch
#: model:ir.actions.client,name:l10n_ch.action_client_l10n_ch_menu #: model:ir.model,name:l10n_ch.model_res_bank
msgid "Open Account Dashboard Menu" msgid "Bank"
msgstr ""
#. module: l10n_ch
#: model:ir.model,name:l10n_ch.model_res_partner_bank
msgid "Bank Accounts"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_res_company_l10n_ch_isr_print_bank_location
#: model:ir.model.fields,help:l10n_ch.field_res_config_settings_l10n_ch_isr_print_bank_location
msgid "Boolean option field indicating whether or not the alternate layout (the one printing bank name and address) must be used when generating an ISR."
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_sent
msgid "Boolean value telling whether or not the ISR corresponding to this invoice has already been printed or sent by mail."
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_valid
msgid "Boolean value. True iff all the data required to generate the ISR are present"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_res_bank_l10n_ch_postal_chf
msgid "CHF ISR reference"
msgstr ""
#. module: l10n_ch
#: model:account.cash.rounding,name:l10n_ch.cash_rounding_5_centime
msgid "Coinage 0.05"
msgstr ""
#. module: l10n_ch
#: model:ir.model,name:l10n_ch.model_res_company
msgid "Companies"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_currency_name
msgid "Currency"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_res_bank_l10n_ch_postal_eur
msgid "EUR ISR reference"
msgstr ""
#. module: l10n_ch
#: model:ir.model,name:l10n_ch.model_mail_template
msgid "Email Templates"
msgstr ""
#. module: l10n_ch
#: model:ir.model,name:l10n_ch.model_mail_compose_message
msgid "Email composition wizard"
msgstr ""
#. module: l10n_ch
#: model:ir.actions.report,name:l10n_ch.l10n_ch_isr_report
msgid "ISR"
msgstr ""
#. module: l10n_ch
#: model:ir.ui.view,arch_db:l10n_ch.l10n_ch_isr_report_template
msgid "ISR for invoice"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_number_spaced
msgid "ISR number split in blocks of 5 characters (right-justified), to generate ISR report."
msgstr ""
#. module: l10n_ch
#: model:ir.ui.view,arch_db:l10n_ch.isr_invoice_search_view
msgid "ISR reference number"
msgstr ""
#. module: l10n_ch
#: code:addons/l10n_ch/models/mail_compose_message.py:23
#, python-format
msgid "ISR sent"
msgstr ""
#. module: l10n_ch
#: model:ir.model,name:l10n_ch.model_account_invoice
msgid "Invoice"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_number
msgid "L10N Ch Isr Number"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_number_spaced
msgid "L10N Ch Isr Number Spaced"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_optical_line
msgid "L10N Ch Isr Optical Line"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_postal
msgid "L10N Ch Isr Postal"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_postal_formatted
msgid "L10N Ch Isr Postal Formatted"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_sent
msgid "L10N Ch Isr Sent"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_account_invoice_l10n_ch_isr_valid
msgid "L10N Ch Isr Valid"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_res_partner_bank_l10n_ch_postal
msgid "L10N Ch Postal"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_optical_line
msgid "Optical reading line, as it will be printed on ISR"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_postal_formatted
msgid "Postal reference of the bank, formated with '-' and without the padding zeros, to generate ISR report."
msgstr ""
#. module: l10n_ch
#: model:ir.ui.view,arch_db:l10n_ch.isr_invoice_form
msgid "Print ISR"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_res_company_l10n_ch_isr_print_bank_location
msgid "Print bank location"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,field_description:l10n_ch.field_res_config_settings_l10n_ch_isr_print_bank_location
msgid "Print bank on ISR"
msgstr ""
#. module: l10n_ch
#: model:ir.ui.view,arch_db:l10n_ch.res_config_settings_view_form
msgid "Print the coordinates of your bank under the 'Payment for' title of the ISR.\n"
" Your address will be moved to the 'in favour of' section."
msgstr "" msgstr ""
#. module: l10n_ch #. module: l10n_ch
#: model:ir.ui.menu,name:l10n_ch.account_reports_ch_statements_menu #: model:ir.ui.menu,name:l10n_ch.account_reports_ch_statements_menu
msgid "Swiss Statements" msgid "Switzerland"
msgstr ""
#. module: l10n_ch
#: model:account.tax.group,name:l10n_ch.tax_group_tva_0
msgid "TVA 0%"
msgstr ""
#. module: l10n_ch
#: model:account.tax.group,name:l10n_ch.tax_group_tva_25
msgid "TVA 2.5%"
msgstr ""
#. module: l10n_ch
#: model:account.tax.group,name:l10n_ch.tax_group_tva_37
msgid "TVA 3.7%"
msgstr ""
#. module: l10n_ch
#: model:account.tax.group,name:l10n_ch.tax_group_tva_38
msgid "TVA 3.8%"
msgstr ""
#. module: l10n_ch
#: model:account.tax.group,name:l10n_ch.tax_group_tva_77
msgid "TVA 7.7%"
msgstr ""
#. module: l10n_ch
#: model:account.tax.group,name:l10n_ch.tax_group_tva_8
msgid "TVA 8%"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_res_partner_bank_l10n_ch_postal
msgid "The ISR number of the company within the bank"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_currency_name
msgid "The name of this invoice's currency"
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_postal
msgid "The postal reference identifying the bank managing this ISR."
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_res_bank_l10n_ch_postal_chf
msgid "The postal reference of the bank, used to generate ISR payment slips in CHF."
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_res_bank_l10n_ch_postal_eur
msgid "The postal reference of the bank, used to generate ISR payment slips in EUR."
msgstr ""
#. module: l10n_ch
#: model:ir.model.fields,help:l10n_ch.field_account_invoice_l10n_ch_isr_number
msgid "The reference number associated with this invoice"
msgstr ""
#. module: l10n_ch
#: code:addons/l10n_ch/models/account_invoice.py:154
#, python-format
msgid "You cannot generate an ISR yet.\n"
"\n"
" For this, you need to :\n"
"\n"
" - set a valid postal account number (or an IBAN referencing one) for your company\n"
"\n"
" - define its bank\n"
"\n"
" - associate this bank with a postal reference for the currency used in this invoice\n"
"\n"
" - fill the 'bank account' field of the invoice with the postal to be used to receive the related payment. A default account will be automatically set for all invoices created after you defined a postal account for your company."
msgstr ""
#. module: l10n_ch
#: model:ir.model,name:l10n_ch.model_res_config_settings
msgid "res.config.settings"
msgstr "" msgstr ""

View File

@ -36,13 +36,13 @@ class AccountMove(models.Model):
_('An error occured when computing the inalterability. Impossible to get the unique previous posted journal entry.')) _('An error occured when computing the inalterability. Impossible to get the unique previous posted journal entry.'))
#build and return the hash #build and return the hash
return self._compute_hash(prev_move.l10n_fr_hash if prev_move else '') return self._compute_hash(prev_move.l10n_fr_hash if prev_move else u'')
def _compute_hash(self, previous_hash): def _compute_hash(self, previous_hash):
""" Computes the hash of the browse_record given as self, based on the hash """ Computes the hash of the browse_record given as self, based on the hash
of the previous record in the company's securisation sequence given as parameter""" of the previous record in the company's securisation sequence given as parameter"""
self.ensure_one() self.ensure_one()
hash_string = sha256(previous_hash + self.l10n_fr_string_to_hash) hash_string = sha256((previous_hash + self.l10n_fr_string_to_hash).encode('utf-8'))
return hash_string.hexdigest() return hash_string.hexdigest()
def _compute_string_to_hash(self): def _compute_string_to_hash(self):
@ -63,7 +63,7 @@ class AccountMove(models.Model):
values[k] = _getattrstring(line, field) values[k] = _getattrstring(line, field)
#make the json serialization canonical #make the json serialization canonical
# (https://tools.ietf.org/html/draft-staykov-hu-json-canonical-form-00) # (https://tools.ietf.org/html/draft-staykov-hu-json-canonical-form-00)
move.l10n_fr_string_to_hash = dumps(values, sort_keys=True, encoding="utf-8", move.l10n_fr_string_to_hash = dumps(values, sort_keys=True,
ensure_ascii=True, indent=None, ensure_ascii=True, indent=None,
separators=(',',':')) separators=(',',':'))
@ -118,7 +118,7 @@ class AccountMove(models.Model):
if not moves: if not moves:
raise UserError(_('There isn\'t any journal entry flagged for data inalterability yet for the company %s. This mechanism only runs for journal entries generated after the installation of the module France - Certification CGI 286 I-3 bis.') % self.env.user.company_id.name) raise UserError(_('There isn\'t any journal entry flagged for data inalterability yet for the company %s. This mechanism only runs for journal entries generated after the installation of the module France - Certification CGI 286 I-3 bis.') % self.env.user.company_id.name)
previous_hash = '' previous_hash = u''
start_move_info = [] start_move_info = []
for move in moves: for move in moves:
if move.l10n_fr_hash != move._compute_hash(previous_hash=previous_hash): if move.l10n_fr_hash != move._compute_hash(previous_hash=previous_hash):

View File

@ -3,7 +3,6 @@ flectra.define('mail.systray', function (require) {
var config = require('web.config'); var config = require('web.config');
var core = require('web.core'); var core = require('web.core');
var framework = require('web.framework');
var session = require('web.session'); var session = require('web.session');
var SystrayMenu = require('web.SystrayMenu'); var SystrayMenu = require('web.SystrayMenu');
var Widget = require('web.Widget'); var Widget = require('web.Widget');
@ -175,6 +174,9 @@ var ActivityMenu = Widget.extend({
return self._rpc({ return self._rpc({
model: 'res.users', model: 'res.users',
method: 'activity_user_count', method: 'activity_user_count',
kwargs: {
context: session.user_context,
},
}).then(function (data) { }).then(function (data) {
self.activities = data; self.activities = data;
self.activityCounter = _.reduce(data, function(total_count, p_data){ return total_count + p_data.total_count; }, 0); self.activityCounter = _.reduce(data, function(total_count, p_data){ return total_count + p_data.total_count; }, 0);

View File

@ -0,0 +1,105 @@
odoo.define('mail.client_action_mobile_tests', function (require) {
"use strict";
var session = require('web.session');
var testUtils = require('web.test_utils');
var Widget = require('web.Widget');
var ChatAction = require('mail.chat_client_action');
var chat_manager = require('mail.chat_manager');
QUnit.module('mail', {}, function () {
QUnit.module('Discuss client action in mobile', {
beforeEach: function () {
this.data = {
'mail.message': {
fields: {},
},
};
this.createChatAction = function (params) {
var Parent = Widget.extend({
do_push_state: function () {},
});
var parent = new Parent();
testUtils.addMockEnvironment(parent, {
data: this.data,
archs: {
'mail.message,false,search': '<search/>',
},
session: params.session || {},
intercepts: params.intercepts || {},
});
var chatAction = new ChatAction(parent, params);
chatAction.set_cp_bus(new Widget());
chatAction.appendTo($('#qunit-fixture'));
return chatAction;
};
},
});
QUnit.test('mobile basic rendering', function (assert) {
// This is a very basic first test for the client action. However, with
// the chat_manager, it is hard to override RPCs (for instance, the
// /mail/client_action route is always called when the test suite is
// launched), and we must wait for this RPC to be done before starting to
// test the interface. This should be refactored to facilitate the testing.
assert.expect(9);
var done = assert.async();
var rpc = session.rpc;
var chatAction = this.createChatAction({
id: 1,
context: {},
params: {},
intercepts: {
get_session: function (ev) {
ev.data.callback({});
},
},
session: {
rpc: function (route, args) {
if (args.method === 'message_fetch') {
return $.when([]);
}
return rpc.apply(this, arguments);
},
},
});
chat_manager.is_ready.then(function () {
// test basic rendering in mobile
assert.strictEqual(chatAction.$('.o_mail_chat_mobile_control_panel').length, 1,
"should have rendered a control panel");
assert.strictEqual(chatAction.$('.o_mail_chat_content .o_mail_no_content').length, 1,
"should display the no content message");
assert.strictEqual(chatAction.$('.o_mail_mobile_tabs').length, 1,
"should have rendered the tabs");
assert.ok(chatAction.$('.o_mail_mobile_tab[data-type=channel_inbox]').hasClass('active'),
"should be in inbox tab");
assert.strictEqual(chatAction.$('.o_mail_chat_mobile_inbox_buttons:visible').length, 1,
"inbox/starred buttons should be visible");
assert.ok(chatAction.$('.o_mail_chat_mobile_inbox_buttons .o_channel_inbox_item[data-type=channel_inbox]').hasClass('btn-primary'),
"should be in inbox");
// move to DMs tab
chatAction.$('.o_mail_mobile_tab[data-type=dm]').click();
assert.ok(chatAction.$('.o_mail_mobile_tab[data-type=dm]').hasClass('active'),
"should be in DMs tab");
assert.strictEqual(chatAction.$('.o_mail_chat_content .o_mail_no_content').length, 0,
"should display the no content message");
chatAction.$('.o_mail_chat_button_dm').click(); // click to add a channel
assert.strictEqual(chatAction.$('.o_mail_add_channel input:visible').length, 1,
"should display the input to add a channel");
chatAction.destroy();
done();
});
});
});
});

View File

@ -1,88 +0,0 @@
flectra.define('mail.client_action_test', function (require) {
"use strict";
var testUtils = require('web.test_utils');
var Widget = require('web.Widget');
var ChatAction = require("mail.chat_client_action");
QUnit.module('mail', {}, function () {
QUnit.module('Discuss client action', {
beforeEach: function () {
this.data = {
'mail.message': {
fields: {},
},
};
this.createChatAction = function (params) {
var parent = new Widget();
testUtils.addMockEnvironment(parent, {
data: this.data,
archs: {
'mail.message,false,search': '<search/>',
},
config: {device: {isMobile: true}},
});
var chatAction = new ChatAction(parent, params);
chatAction.set_cp_bus(new Widget());
chatAction.appendTo($('#qunit-fixture'));
return chatAction;
};
},
});
QUnit.skip('mobile basic rendering', function (assert) {
// Unfortunately, this test is skipped for now because there is no way to
// execute the whole test suite in mobile (it only works test by test), so
// as the client action include for mobile is rejected when we are not in
// mobile, it isn't possible to test it
// Moreover, RPCs done by the chat_manager (e.g. message_fetch) should be
// properly mocked.
assert.expect(11);
var parent = new Widget();
testUtils.addMockEnvironment(parent, {
data: this.data,
archs: {
'mail.message,false,search': '<search/>',
},
config: {device: {isMobile: true}},
});
var params = {
id: 1,
context: {},
params: {},
};
var chatAction = this.createChatAction(params);
// test basic rendering in mobile
assert.equal(chatAction.$(".o_mail_chat_mobile_control_panel").length, 1, "Mobile control panel created");
assert.equal(chatAction.$(".o_mail_mobile_tab").length, 4, "Four mobile tabs created");
assert.equal(chatAction.$('.o_mail_chat_content').length, 1, "One default chat content pane created");
assert.equal(chatAction.$(".o_mail_chat_tab_pane").length, 3, "Three mobile tab panes created");
// Inbox
assert.equal(chatAction.activeMobileTab, "channel_inbox", "'channel_inbox' is default active tab");
assert.ok(chatAction.$(".o_channel_inbox_item:nth(0)").hasClass("btn-primary"), "Showing 'Inbox'");
// Starred
chatAction.$(".o_channel_inbox_item[data-type='channel_starred']").click();
assert.ok(chatAction.$(".o_channel_inbox_item:nth(1)").hasClass("btn-primary"), "Clicked on 'Starred'");
assert.ok(chatAction.$(".o_mail_chat_content").is(":visible"), "Default main content pane visible");
chatAction.$(".o_mail_mobile_tab[data-type='dm']").click();
assert.equal(chatAction.activeMobileTab, "dm", "After click on 'Conversation', is now active tab");
assert.ok(!chatAction.$(".o_mail_chat_content").is(":visible"), "none", "'Main' content pane is invisible");
assert.ok(chatAction.$(".o_mail_chat_tab_pane:nth(0)").is(":visible"), "'Conversation' pane is visible");
chatAction.destroy();
});
});
});

View File

@ -41,13 +41,18 @@
<template id="qunit_suite" name="mail_tests" inherit_id="web.qunit_suite"> <template id="qunit_suite" name="mail_tests" inherit_id="web.qunit_suite">
<xpath expr="//t[@t-set='head']" position="inside"> <xpath expr="//t[@t-set='head']" position="inside">
<script type="text/javascript" src="/mail/static/tests/client_action_tests.js"></script>
<script type="text/javascript" src="/mail/static/tests/chatter_tests.js"></script> <script type="text/javascript" src="/mail/static/tests/chatter_tests.js"></script>
<script type="text/javascript" src="/mail/static/tests/systray_tests.js"></script> <script type="text/javascript" src="/mail/static/tests/systray_tests.js"></script>
<script type="text/javascript" src="/mail/static/tests/chat_window_test.js"></script> <script type="text/javascript" src="/mail/static/tests/chat_window_test.js"></script>
</xpath> </xpath>
</template> </template>
<template id="qunit_mobile_suite" name="mail_mobile_tests" inherit_id="web.qunit_mobile_suite">
<xpath expr="//t[@t-set='head']" position="inside">
<script type="text/javascript" src="/mail/static/tests/client_action_mobile_tests.js"></script>
</xpath>
</template>
<template id="message_origin_link"> <template id="message_origin_link">
<p>This <t t-esc="self._description.lower()"/> has been <span t-if="edit">modified</span><span t-if="not edit">created</span> from: <p>This <t t-esc="self._description.lower()"/> has been <span t-if="edit">modified</span><span t-if="not edit">created</span> from:
<t t-foreach="origin" t-as="o"> <t t-foreach="origin" t-as="o">

View File

@ -88,6 +88,10 @@ class MrpUnbuild(models.Model):
if self.product_id.tracking != 'none' and not self.lot_id.id: if self.product_id.tracking != 'none' and not self.lot_id.id:
raise UserError(_('Should have a lot for the finished product')) raise UserError(_('Should have a lot for the finished product'))
if self.mo_id:
if self.mo_id.state != 'done':
raise UserError(_('You cannot unbuild a undone manufacturing order.'))
consume_move = self._generate_consume_moves()[0] consume_move = self._generate_consume_moves()[0]
produce_moves = self._generate_produce_moves() produce_moves = self._generate_produce_moves()
@ -156,12 +160,31 @@ class MrpUnbuild(models.Model):
def _generate_produce_moves(self): def _generate_produce_moves(self):
moves = self.env['stock.move'] moves = self.env['stock.move']
for unbuild in self: for unbuild in self:
if unbuild.mo_id:
raw_moves = unbuild.mo_id.move_raw_ids.filtered(lambda move: move.state == 'done')
factor = unbuild.product_qty / unbuild.mo_id.product_uom_id._compute_quantity(unbuild.mo_id.product_qty, unbuild.product_uom_id)
for raw_move in raw_moves:
moves += unbuild._generate_move_from_raw_moves(raw_move, factor)
else:
factor = unbuild.product_uom_id._compute_quantity(unbuild.product_qty, unbuild.bom_id.product_uom_id) / unbuild.bom_id.product_qty factor = unbuild.product_uom_id._compute_quantity(unbuild.product_qty, unbuild.bom_id.product_uom_id) / unbuild.bom_id.product_qty
boms, lines = unbuild.bom_id.explode(unbuild.product_id, factor, picking_type=unbuild.bom_id.picking_type_id) boms, lines = unbuild.bom_id.explode(unbuild.product_id, factor, picking_type=unbuild.bom_id.picking_type_id)
for line, line_data in lines: for line, line_data in lines:
moves += unbuild._generate_move_from_bom_line(line, line_data['qty']) moves += unbuild._generate_move_from_bom_line(line, line_data['qty'])
return moves return moves
def _generate_move_from_raw_moves(self, raw_move, factor):
return self.env['stock.move'].create({
'name': self.name,
'date': self.create_date,
'product_id': raw_move.product_id.id,
'product_uom_qty': raw_move.product_uom_qty * factor,
'product_uom': raw_move.product_uom.id,
'procure_method': 'make_to_stock',
'location_dest_id': self.location_dest_id.id,
'location_id': raw_move.location_dest_id.id,
'unbuild_id': self.id,
})
def _generate_move_from_bom_line(self, bom_line, quantity): def _generate_move_from_bom_line(self, bom_line, quantity):
return self.env['stock.move'].create({ return self.env['stock.move'].create({
'name': self.name, 'name': self.name,

View File

@ -122,7 +122,7 @@
</div> </div>
</group> </group>
<group> <group>
<field name="mo_id" required="True"/> <field name="mo_id" domain="[('state','=','done')]"/>
<field name="location_id" groups="stock.group_stock_multi_locations"/> <field name="location_id" groups="stock.group_stock_multi_locations"/>
<field name="location_dest_id" groups="stock.group_stock_multi_locations"/> <field name="location_dest_id" groups="stock.group_stock_multi_locations"/>
<field name="has_tracking" invisible="1"/> <field name="has_tracking" invisible="1"/>

View File

@ -43,11 +43,10 @@ try:
else: else:
_logger.warning(_('Unable to format %s:\n%s') % number, e) _logger.warning(_('Unable to format %s:\n%s') % number, e)
return number return number
if always_international and phone_nbr.country_code != country_phone_code: if always_international or phone_nbr.country_code != country_phone_code:
phone_fmt = phonenumbers.PhoneNumberFormat.INTERNATIONAL phone_fmt = phonenumbers.PhoneNumberFormat.INTERNATIONAL
else: else:
phone_fmt = phonenumbers.PhoneNumberFormat.NATIONAL phone_fmt = phonenumbers.PhoneNumberFormat.NATIONAL
return phonenumbers.format_number(phone_nbr, phone_fmt) return phonenumbers.format_number(phone_nbr, phone_fmt)
except ImportError: except ImportError:

View File

@ -1,8 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!--
The purpose of this view is to move the VAT field at the top of the
company form. That way, the user will fill it first
-->
<flectra> <flectra>
<record id="res_company_view_form_phone_validation" model="ir.ui.view"> <record id="res_company_view_form_phone_validation" model="ir.ui.view">
<field name="name">res.company.view.form.phone_validation</field> <field name="name">res.company.view.form.phone_validation</field>

View File

@ -127,6 +127,15 @@
<filter string="Archived" name="inactive" domain="[('active','=',False)]"/> <filter string="Archived" name="inactive" domain="[('active','=',False)]"/>
<field string="Attributes" name="attribute_line_ids" groups="product.group_product_variant"/> <field string="Attributes" name="attribute_line_ids" groups="product.group_product_variant"/>
<field name="pricelist_id" widget="selection" context="{'pricelist': self}" filter_domain="[]" groups="product.group_sale_pricelist"/> <!-- Keep widget=selection on this field to pass numeric `self` value, which is not the case for regular m2o widgets! --> <field name="pricelist_id" widget="selection" context="{'pricelist': self}" filter_domain="[]" groups="product.group_sale_pricelist"/> <!-- Keep widget=selection on this field to pass numeric `self` value, which is not the case for regular m2o widgets! -->
<separator/>
<filter string="Late Activities" name="activities_overdue"
domain="[('activity_ids.date_deadline', '&lt;', context_today().strftime('%Y-%m-%d'))]"
help="Show all records which has next action date is before today"/>
<filter string="Today Activities" name="activities_today"
domain="[('activity_ids.date_deadline', '=', context_today().strftime('%Y-%m-%d'))]"/>
<filter string="Future Activities" name="activities_upcoming_all"
domain="[('activity_ids.date_deadline', '&gt;', context_today().strftime('%Y-%m-%d'))
]"/>
</search> </search>
</field> </field>
</record> </record>

View File

@ -44,7 +44,7 @@ class StockProductionLot(models.Model):
# Assign dates according to products data # Assign dates according to products data
@api.model @api.model
def create(self, vals): def create(self, vals):
dates = self._get_dates(vals.get('product_id')) dates = self._get_dates(vals.get('product_id') or self.env.context.get('default_product_id'))
for d in dates: for d in dates:
if not vals.get(d): if not vals.get(d):
vals[d] = dates[d] vals[d] = dates[d]

View File

@ -9,6 +9,16 @@ from flectra.addons.iap.models import iap
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__)
try:
import phonenumbers
_sms_phonenumbers_lib_imported = True
except ImportError:
_sms_phonenumbers_lib_imported = False
_logger.warning(
"The `phonenumbers` Python module is not installed. Try: pip install phonenumbers."
)
class SendSMS(models.TransientModel): class SendSMS(models.TransientModel):
_name = 'sms.send_sms' _name = 'sms.send_sms'
@ -16,6 +26,27 @@ class SendSMS(models.TransientModel):
recipients = fields.Char('Recipients', required=True) recipients = fields.Char('Recipients', required=True)
message = fields.Text('Message', required=True) message = fields.Text('Message', required=True)
def _phone_get_country(self, partner):
if 'country_id' in partner:
return partner.country_id
return self.env.user.company_id.country_id
def _sms_sanitization(self, partner, field_name):
number = partner[field_name]
if _sms_phonenumbers_lib_imported:
country = self._phone_get_country(partner)
country_code = country.code if country else None
try:
phone_nbr = phonenumbers.parse(number, region=country_code, keep_raw_input=True)
except phonenumbers.phonenumberutil.NumberParseException:
return number
if not phonenumbers.is_possible_number(phone_nbr) or not phonenumbers.is_valid_number(phone_nbr):
return number
phone_fmt = phonenumbers.PhoneNumberFormat.INTERNATIONAL
return phonenumbers.format_number(phone_nbr, phone_fmt).replace(' ', '')
else:
return number
def _get_records(self, model): def _get_records(self, model):
if self.env.context.get('active_domain'): if self.env.context.get('active_domain'):
records = model.search(self.env.context.get('active_domain')) records = model.search(self.env.context.get('active_domain'))
@ -38,7 +69,8 @@ class SendSMS(models.TransientModel):
phone_numbers = [] phone_numbers = []
no_phone_partners = [] no_phone_partners = []
for partner in partners: for partner in partners:
number = partner.mobile default_field_name = 'mobile' if partner.mobile else 'phone'
number = self._sms_sanitization(partner, self.env.context('field_name') or default_field_name)
if number: if number:
phone_numbers.append(number) phone_numbers.append(number)
else: else:

View File

@ -8,7 +8,7 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="Add pickings to batch"> <form string="Add pickings to batch">
<separator string="Select a batch"/> <separator string="Select a batch"/>
<field name="batch_id" class="oe_inline"/> <field name="batch_id" class="oe_inline" options="{'no_create_edit': True, 'no_open': True}"/>
<footer> <footer>
<button name="attach_pickings" type="object" string="Add to Batch" class="btn-primary"/> <button name="attach_pickings" type="object" string="Add to Batch" class="btn-primary"/>
<button string="Cancel" class="btn-default" special="cancel"/> <button string="Cancel" class="btn-default" special="cancel"/>

View File

@ -44,11 +44,6 @@ var AbstractField = Widget.extend({
navigation_move: '_onNavigationMove', navigation_move: '_onNavigationMove',
}, },
/**
* fields can extend the context, e.g. binary fields add {bin_size: true}
*/
context: null,
/** /**
* An object representing fields to be fetched by the model eventhough not present in the view * An object representing fields to be fetched by the model eventhough not present in the view
* This object contains "field name" as key and an object as value. * This object contains "field name" as key and an object as value.

View File

@ -2374,7 +2374,7 @@ var BasicModel = AbstractModel.extend({
}); });
record.data[fieldName] = list.id; record.data[fieldName] = list.id;
if (!fieldInfo.__no_fetch) { if (!fieldInfo.__no_fetch) {
var def = self._readUngroupedList(list).then(function (list) { var def = self._readUngroupedList(list).then(function () {
return $.when( return $.when(
self._fetchX2ManysBatched(list), self._fetchX2ManysBatched(list),
self._fetchReferencesBatched(list) self._fetchReferencesBatched(list)
@ -2403,6 +2403,7 @@ var BasicModel = AbstractModel.extend({
var fields = view ? view.fields : fieldInfo.relatedFields; var fields = view ? view.fields : fieldInfo.relatedFields;
var viewType = view ? view.type : fieldInfo.viewType; var viewType = view ? view.type : fieldInfo.viewType;
list = this._applyX2ManyOperations(list); list = this._applyX2ManyOperations(list);
this._sortList(list);
var x2mRecords = []; var x2mRecords = [];
// step 1: collect ids // step 1: collect ids
@ -3092,16 +3093,13 @@ var BasicModel = AbstractModel.extend({
id: {type: 'integer'}, id: {type: 'integer'},
}, params.fields); }, params.fields);
// datapoint context is extended by fields widgets
var context = _.extend({}, params.context);
var dataPoint = { var dataPoint = {
_cache: type === 'list' ? {} : undefined, _cache: type === 'list' ? {} : undefined,
_changes: null, _changes: null,
_domains: {}, _domains: {},
_rawChanges: {}, _rawChanges: {},
aggregateValues: params.aggregateValues || {}, aggregateValues: params.aggregateValues || {},
context: context, context: params.context,
count: params.count || res_ids.length, count: params.count || res_ids.length,
data: data, data: data,
domain: params.domain || [], domain: params.domain || [],

View File

@ -7640,6 +7640,46 @@ QUnit.module('relational_fields', {
form.destroy(); form.destroy();
}); });
QUnit.test('one2many with multiple pages and sequence field, part2', function (assert) {
assert.expect(1);
this.data.partner.records[0].turtles = [3, 2, 1];
this.data.partner.onchanges.turtles = function () {};
var form = createView({
View: FormView,
model: 'partner',
data: this.data,
arch:'<form string="Partners">' +
'<field name="turtles">' +
'<tree limit="2">' +
'<field name="turtle_int" widget="handle"/>' +
'<field name="turtle_foo"/>' +
'<field name="partner_ids" invisible="1"/>' +
'</tree>' +
'</field>' +
'</form>',
res_id: 1,
mockRPC: function (route, args) {
if (args.method === 'onchange') {
return $.when({value: { turtles: [
[5],
[1, 1, {turtle_foo: "from onchange id2", partner_ids: [[5]]}],
[1, 3, {turtle_foo: "from onchange id3", partner_ids: [[5]]}],
]}});
}
return this._super(route, args);
},
viewOptions: {
mode: 'edit',
},
});
form.$('span[name="delete"]').first().click();
assert.strictEqual(form.$('.o_data_row').text(), 'from onchange id2from onchange id3',
'onchange has been properly applied');
form.destroy();
});
QUnit.module('FieldMany2Many'); QUnit.module('FieldMany2Many');
QUnit.test('many2many kanban: edition', function (assert) { QUnit.test('many2many kanban: edition', function (assert) {
@ -9251,7 +9291,7 @@ QUnit.module('relational_fields', {
'</tree>', '</tree>',
mockRPC: function (route, args) { mockRPC: function (route, args) {
if (args.method === 'read' && args.model === 'partner_type') { if (args.method === 'read' && args.model === 'partner_type') {
assert.deepEqual(args.kwargs.context.take, 'five', assert.deepEqual(args.kwargs.context, {take: 'five'},
'The context should be passed to the RPC'); 'The context should be passed to the RPC');
} }
return this._super.apply(this, arguments); return this._super.apply(this, arguments);

View File

@ -13,7 +13,7 @@ class WebSuite(flectra.tests.HttpCase):
def test_01_js(self): def test_01_js(self):
# webclient desktop test suite # webclient desktop test suite
self.phantom_js('/web/tests?mod=web', "", "", login='admin', timeout=300) self.phantom_js('/web/tests?mod=web', "", "", login='admin', timeout=360)
def test_02_js(self): def test_02_js(self):
# webclient mobile test suite # webclient mobile test suite

View File

@ -622,6 +622,7 @@ var SnippetsMenu = Widget.extend({
* - Remove the 'contentEditable' attributes * - Remove the 'contentEditable' attributes
*/ */
cleanForSave: function () { cleanForSave: function () {
this.trigger_up('ready_to_clean_for_save');
_.each(this.snippetEditors, function (snippetEditor) { _.each(this.snippetEditors, function (snippetEditor) {
snippetEditor.cleanForSave(); snippetEditor.cleanForSave();
}); });

View File

@ -43,8 +43,16 @@ var WebsiteRoot = BodyManager.extend({
}), }),
custom_events: _.extend({}, BodyManager.prototype.custom_events || {}, { custom_events: _.extend({}, BodyManager.prototype.custom_events || {}, {
animation_start_demand: '_onAnimationStartDemand', animation_start_demand: '_onAnimationStartDemand',
ready_to_clean_for_save: '_onAnimationStopDemand',
}), }),
/**
* @constructor
*/
init: function () {
this._super.apply(this, arguments);
this.animations = [];
},
/** /**
* @override * @override
*/ */
@ -108,6 +116,7 @@ var WebsiteRoot = BodyManager.extend({
* registry has been instantiated outside of the class and is simply * registry has been instantiated outside of the class and is simply
* returned here. * returned here.
* *
* @private
* @override * @override
*/ */
_getRegistry: function () { _getRegistry: function () {
@ -118,6 +127,7 @@ var WebsiteRoot = BodyManager.extend({
* `selector` key of one of the registered animations * `selector` key of one of the registered animations
* (@see Animation.selector). * (@see Animation.selector).
* *
* @private
* @param {boolean} [editableMode=false] - true if the page is in edition mode * @param {boolean} [editableMode=false] - true if the page is in edition mode
* @param {jQuery} [$from] * @param {jQuery} [$from]
* only initialize the animations whose `selector` matches the * only initialize the animations whose `selector` matches the
@ -138,9 +148,11 @@ var WebsiteRoot = BodyManager.extend({
var $snippet = $(el); var $snippet = $(el);
var animation = $snippet.data('snippet-view'); var animation = $snippet.data('snippet-view');
if (animation) { if (animation) {
self.animations = _.without(self.animations, animation);
animation.destroy(); animation.destroy();
} }
animation = new Animation(self, editableMode); animation = new Animation(self, editableMode);
self.animations.push(animation);
$snippet.data('snippet-view', animation); $snippet.data('snippet-view', animation);
return animation.attachTo($snippet); return animation.attachTo($snippet);
}); });
@ -148,6 +160,18 @@ var WebsiteRoot = BodyManager.extend({
}); });
return $.when.apply($, defs); return $.when.apply($, defs);
}, },
/**
* Destroys all animation instances. Especially needed before saving while
* in edition mode for example.
*
* @private
*/
_stopAnimations: function () {
_.each(this.animations, function (animation) {
animation.destroy();
});
this.animations = [];
},
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// Handlers // Handlers
@ -165,6 +189,15 @@ var WebsiteRoot = BodyManager.extend({
.done(ev.data.onSuccess) .done(ev.data.onSuccess)
.fail(ev.data.onFailure); .fail(ev.data.onFailure);
}, },
/**
* Called when the root is notified that the animations have to be
* stopped.
*
* @private
*/
_onAnimationStopDemand: function () {
this._stopAnimations();
},
/** /**
* @todo review * @todo review
* @private * @private

View File

@ -21,7 +21,10 @@ $(document).ready(function () {
setTimeout(function () { payment_transaction_poll_status(); }, Math.ceil(_poll_nbr / 3) * 1000); setTimeout(function () { payment_transaction_poll_status(); }, Math.ceil(_poll_nbr / 3) * 1000);
} }
else { else {
result.message = "<i class='fa fa-warning' />"; var $message = $(result.message);
$message.find('span:first').prepend($(
"<i title='We are waiting the confirmation of the bank or payment provider' class='fa fa-warning' style='margin-right:10px;'>"));
result.message = $message.html();
} }
} }
$('div.oe_website_sale_tx_status').html(result.message); $('div.oe_website_sale_tx_status').html(result.message);

View File

@ -360,13 +360,6 @@ Source installation requires manually installing dependencies:
Install ``psycopg`` using the installer here Install ``psycopg`` using the installer here
http://www.stickpeople.com/projects/python/win-psycopg/ http://www.stickpeople.com/projects/python/win-psycopg/
Then edit the requirements.txt file:
- remove ``psycopg2`` as you already have it.
- remove the optional ``python-ldap``, ``gevent`` and ``psutil`` because
they require compilation.
- add ``pypiwin32`` because it's needed under windows.
Then use pip to install the dependencies using the following Then use pip to install the dependencies using the following
command from a cmd.exe prompt (replace ``\YourOdooPath`` by the actual command from a cmd.exe prompt (replace ``\YourOdooPath`` by the actual
path where you downloaded Odoo): path where you downloaded Odoo):

View File

@ -82,8 +82,9 @@ Overview
The Credits The Credits
Every service provided through the In-App platform can be used by the Every service provided through the In-App platform can be used by the
clients with tokens or *credits*. The monetary value of a credit depends clients with tokens or *credits*. The credits are an integer unit and
on the service and is decided by the provider. This could be: their monetary value depends on the service and is decided by the
provider. This could be:
* for an sms service: 1 credit = 1 sms, * for an sms service: 1 credit = 1 sms,
* for an add service: 1 credit = 1 add, * for an add service: 1 credit = 1 add,
@ -210,14 +211,20 @@ The credit packages are essentially a product with 4 characteristics.
* Credits: the amount of credits the client is entitled to when buying the package, * Credits: the amount of credits the client is entitled to when buying the package,
* Price: the price in *EUROS* for the time being (USD support is planned). * Price: the price in *EUROS* for the time being (USD support is planned).
.. image:: images/package.png .. note::
:align: center
Odoo takes a 25% commission on all package sales. Adjust your selling price accordingly.
.. note:: .. note::
Depending on the strategy, the price per credit can vary from one Depending on the strategy, the price per credit can vary from one
package to another. package to another.
.. image:: images/package.png
:align: center
.. _iap-odoo-app: .. _iap-odoo-app:
Odoo App Odoo App
@ -427,9 +434,11 @@ Capture
:param TransactionToken token: :param TransactionToken token:
:param ServiceKey key: :param ServiceKey key:
:param int credit_to_capture: (new - 15 Jan 2018) optional parameter to capture a smaller amount of credits than authorized
:raises: :class:`~odoo.exceptions.AccessError` :raises: :class:`~odoo.exceptions.AccessError`
.. code-block:: python .. code-block:: python
:emphasize-lines: 8
r2 = requests.post(ODOO + '/iap/1/capture', json={ r2 = requests.post(ODOO + '/iap/1/capture', json={
'jsonrpc': '2.0', 'jsonrpc': '2.0',
@ -438,6 +447,7 @@ Capture
'params': { 'params': {
'token': tx, 'token': tx,
'key': SERVICE_KEY, 'key': SERVICE_KEY,
'credit_to_capture': credit or False,
} }
}).json() }).json()
if 'error' in r: if 'error' in r:
@ -575,9 +585,9 @@ Charging
credits = int(MAXIMUM_POWER * factor) credits = int(MAXIMUM_POWER * factor)
with charge(request.env, SERVICE_KEY, user_account, credits) as transaction: with charge(request.env, SERVICE_KEY, user_account, credits) as transaction:
# TODO: allow other targets # TODO: allow other targets
transaction.credit = credits * 0.85 transaction.credit = max(credits, 2)
# Sales ongoing one the energy price, # Sales ongoing one the energy price,
# only 85% of the price will be charged/captured. # a maximum of 2 credits will be charged/captured.
self.env['systems.planets'].search([ self.env['systems.planets'].search([
('grid', '=', 'M-10'), ('grid', '=', 'M-10'),
('name', '=', 'Alderaan'), ('name', '=', 'Alderaan'),

View File

@ -678,7 +678,7 @@ class IrActionsReport(models.Model):
""" """
discard_logo_check = self.env.context.get('discard_logo_check') discard_logo_check = self.env.context.get('discard_logo_check')
if (self.env.uid == SUPERUSER_ID) and ((not self.env.user.company_id.external_report_layout) or (not discard_logo_check and not self.env.user.company_id.logo)) and config: if (self.env.uid == SUPERUSER_ID) and ((not self.env.user.company_id.external_report_layout) or (not discard_logo_check and not self.env.user.company_id.logo)) and config:
template = self.env.ref('base.view_company_report_form_with_print') template = self.env.ref('base.view_company_report_form_with_print') if self.env.context.get('from_transient_model', False) else self.env.ref('base.view_company_report_form')
return { return {
'name': _('Choose Your Document Layout'), 'name': _('Choose Your Document Layout'),
'type': 'ir.actions.act_window', 'type': 'ir.actions.act_window',

View File

@ -1597,7 +1597,7 @@
<field name="code">tl</field> <field name="code">tl</field>
<field file="base/static/img/country_flags/tl.png" name="image" type="base64" /> <field file="base/static/img/country_flags/tl.png" name="image" type="base64" />
<field name="currency_id" ref="USD" /> <field name="currency_id" ref="USD" />
<field eval="0" name="phone_code" /> <field eval="670" name="phone_code" />
</record> </record>
<record id="tr" model="res.country"> <record id="tr" model="res.country">
<field name="name">Turkey</field> <field name="name">Turkey</field>

View File

@ -3,22 +3,23 @@ decorator==4.0.10
docutils==0.12 docutils==0.12
ebaysdk==2.1.5 ebaysdk==2.1.5
feedparser==5.2.1 feedparser==5.2.1
gevent==1.1.2 gevent==1.1.2 ; sys_platform != 'win32'
greenlet==0.4.10 greenlet==0.4.10
html2text==2016.9.19 html2text==2016.9.19
Jinja2==2.8 Jinja2==2.8
lxml==3.5.0 lxml==3.7.1 ; sys_platform != 'win32'
lxml ; sys_platform == 'win32'
Mako==1.0.4 Mako==1.0.4
MarkupSafe==0.23 MarkupSafe==0.23
mock==2.0.0 mock==2.0.0
num2words==0.5.4 num2words==0.5.4
ofxparse==0.16 ofxparse==0.16
passlib==1.6.5 passlib==1.6.5
Pillow==3.4.1 Pillow==4.0.0
psutil==4.3.1 psutil==4.3.1; sys_platform != 'win32'
psycopg2==2.7.3.1 psycopg2==2.7.3.1; sys_platform != 'win32'
pydot==1.2.3 pydot==1.2.3
pyldap==2.4.28 pyldap==2.4.28; sys_platform != 'win32'
pyparsing==2.1.10 pyparsing==2.1.10
PyPDF2==1.26.0 PyPDF2==1.26.0
pyserial==3.1.1 pyserial==3.1.1
@ -29,12 +30,12 @@ PyYAML==3.12
qrcode==5.3 qrcode==5.3
reportlab==3.3.0 reportlab==3.3.0
requests==2.11.1 requests==2.11.1
six==1.10.0
suds-jurko==0.6 suds-jurko==0.6
vatnumber==1.2 vatnumber==1.2
vobject==0.9.3 vobject==0.9.3
Werkzeug==0.11.11 Werkzeug==0.11.15
XlsxWriter==0.9.3 XlsxWriter==0.9.3
xlwt==1.3.* xlwt==1.3.*
xlrd==1.0.0 xlrd==1.0.0
unittest2==1.1.0 unittest2==1.1.0
pypiwin32 ; sys_platform == 'win32'