diff options
116 files changed, 1729 insertions, 719 deletions
diff --git a/addons/account/i18n/nb.po b/addons/account/i18n/nb.po index 516cc84eeb6..acdf13691f5 100644 --- a/addons/account/i18n/nb.po +++ b/addons/account/i18n/nb.po @@ -4608,7 +4608,7 @@ msgstr "" #. module: account #: model:ir.model.fields,field_description:account.field_account_journal__outbound_payment_method_ids msgid "For Outgoing Payments" -msgstr "" +msgstr "Til utbetalinger" #. module: account #: model:ir.model.fields,help:account.field_account_payment_term_line__value_amount @@ -6253,7 +6253,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 "La kundene betale fakturaene sine på nett" #. module: account #: selection:account.account.type,internal_group:0 @@ -8825,7 +8825,7 @@ 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 "Send en faktura for å teste kundeportalen." #. module: account #: model_terms:ir.ui.view,arch_db:account.onboarding_sample_invoice_step @@ -9199,6 +9199,10 @@ msgid "" "Today: Activity date is today\n" "Planned: Future activities." msgstr "" +"Status basert på aktiviteter\n" +"Utgått: Fristen er allerede passert\n" +"I dag: Aktiviteten skal gjøres i dag\n" +"Planlagt: Fremtidige aktiviteter." #. module: account #: model_terms:ir.ui.view,arch_db:account.onboarding_bank_account_step diff --git a/addons/account/models/account_move.py b/addons/account/models/account_move.py index 67a6c6f381a..26805800f3b 100644 --- a/addons/account/models/account_move.py +++ b/addons/account/models/account_move.py @@ -1023,7 +1023,7 @@ class AccountMove(models.Model): vendor_display_name = _('From: ') + move.invoice_source_email move.invoice_vendor_icon = '@' else: - vendor_display_name = ('Created by: ') + move.sudo().create_uid.name + vendor_display_name = _('Created by: %s') % move.sudo().create_uid.name move.invoice_vendor_icon = '#' move.invoice_vendor_display_name = vendor_display_name diff --git a/addons/account/models/partner.py b/addons/account/models/partner.py index b9a3bb0c7ad..4661f48c6bb 100644 --- a/addons/account/models/partner.py +++ b/addons/account/models/partner.py @@ -453,6 +453,7 @@ class ResPartner(models.Model): return {'domain': {'property_account_position_id': [('company_id', 'in', [company.id, False])]}} def can_edit_vat(self): + ''' Can't edit `vat` if there is (non draft) issued invoices. ''' can_edit_vat = super(ResPartner, self).can_edit_vat() if not can_edit_vat: return can_edit_vat diff --git a/addons/account_payment/views/account_portal_templates.xml b/addons/account_payment/views/account_portal_templates.xml index 4f8c00964d6..53c126e1bfc 100644 --- a/addons/account_payment/views/account_portal_templates.xml +++ b/addons/account_payment/views/account_portal_templates.xml @@ -38,7 +38,7 @@ <template id="portal_invoice_payment" name="Invoice Payment"> <div class="row" t-if="not tx_ids and invoice.state == 'posted' and invoice.invoice_payment_state == 'not_paid' and invoice.amount_total" id="portal_pay"> <div class="modal fade" id="pay_with" role="dialog"> - <div class="modal-dialog modal-content"> + <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h3 class="modal-title">Pay with</h3> diff --git a/addons/analytic/i18n/pl.po b/addons/analytic/i18n/pl.po index 83fd87efa1c..2b684555c94 100644 --- a/addons/analytic/i18n/pl.po +++ b/addons/analytic/i18n/pl.po @@ -6,7 +6,7 @@ # Paweł Wodyński <pw@myodoo.pl>, 2018 # Piotr Cierkosz <piotr.w.cierkosz@gmail.com>, 2019 # Martin Trigaux, 2019 -# zbik2607 <darek@krokus.com.pl>, 2019 +# Dariusz Żbikowski <darek@krokus.com.pl>, 2019 # Grzegorz Grzelak <grzegorz.grzelak@openglobe.pl>, 2019 # Judyta Kaźmierczak <judyta.kazmierczak@openglobe.pl>, 2019 # Mikołaj Dziurzyński <mikolaj.dziurzynski@openglobe.pl>, 2019 @@ -16,6 +16,7 @@ # Slawomir Adamus <melthalion@gmail.com>, 2019 # Marcin Młynarczyk <mlynarczyk@gmail.com>, 2019 # Andrzej Donczew <a.donczew@hadron.eu.com>, 2019 +# Karol Rybak <karolrybak85@gmail.com>, 2019 # msgid "" msgstr "" @@ -23,7 +24,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-09-21 13:17+0000\n" "PO-Revision-Date: 2016-08-05 12:56+0000\n" -"Last-Translator: Andrzej Donczew <a.donczew@hadron.eu.com>, 2019\n" +"Last-Translator: Karol Rybak <karolrybak85@gmail.com>, 2019\n" "Language-Team: Polish (https://www.transifex.com/odoo/teams/41243/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -51,7 +52,7 @@ msgstr "" #. module: analytic #: model_terms:ir.actions.act_window,help:analytic.account_analytic_tag_action msgid "Add a new tag" -msgstr "" +msgstr "Dodaj nowy tag" #. module: analytic #: model:ir.model.fields,field_description:analytic.field_account_analytic_line__amount diff --git a/addons/base_setup/i18n/nb.po b/addons/base_setup/i18n/nb.po index d9ab02ee91f..4f30a95884a 100644 --- a/addons/base_setup/i18n/nb.po +++ b/addons/base_setup/i18n/nb.po @@ -3,17 +3,17 @@ # * base_setup # # Translators: -# Martin Trigaux, 2018 -# Jorunn D. Newth, 2018 -# Marius Stedjan <marius@stedjan.com>, 2018 +# Marius Stedjan <marius@stedjan.com>, 2019 +# Martin Trigaux, 2019 +# Jorunn D. Newth, 2019 # 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-08-24 09:16+0000\n" -"Last-Translator: Marius Stedjan <marius@stedjan.com>, 2018\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2016-08-05 12:57+0000\n" +"Last-Translator: Jorunn D. Newth, 2019\n" "Language-Team: Norwegian Bokmål (https://www.transifex.com/odoo/teams/41243/nb/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -36,6 +36,8 @@ msgid "" "<span class=\"o_form_label\">Document Template</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\">Dokumentmal</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\"/>" #. module: base_setup #: model_terms:ir.ui.view,arch_db:base_setup.res_config_settings_view_form @@ -49,6 +51,13 @@ msgstr "" #. module: base_setup #: model_terms:ir.ui.view,arch_db:base_setup.res_config_settings_view_form msgid "" +"<strong>Save</strong> this page and come back here to choose your Geo " +"Provider." +msgstr "" + +#. module: base_setup +#: model_terms:ir.ui.view,arch_db:base_setup.res_config_settings_view_form +msgid "" "<strong>Save</strong> this page and come back here to set up the feature." msgstr "" "<strong>Lagre</strong> denne siden og kom tilbake hit for å sette opp " @@ -91,13 +100,8 @@ msgid "Attach Google documents to any record" msgstr "Legg ved Google-dokumenter til alle typer oppføringer" #. 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 @@ -119,7 +123,7 @@ msgid "Change Document Template" msgstr "Bytt dokumentmal" #. module: base_setup -#: code:addons/base_setup/models/res_config_settings.py:100 +#: code:addons/base_setup/models/res_config_settings.py:102 #, python-format msgid "Choose Your Document Layout" msgstr "Velg dokument-layout" @@ -163,6 +167,11 @@ msgstr "" #. module: base_setup #: model_terms:ir.ui.view,arch_db:base_setup.res_config_settings_view_form +msgid "Contacts" +msgstr "Kontakter" + +#. 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 "" "Opprett og legg ved Google Drive-dokumenter til alle slags oppføringer" @@ -226,6 +235,21 @@ msgstr "Gengo-oversettelser" #. module: base_setup #: model_terms:ir.ui.view,arch_db:base_setup.res_config_settings_view_form +msgid "Geo Localization" +msgstr "" + +#. module: base_setup +#: model:ir.model.fields,field_description:base_setup.field_res_config_settings__module_base_geolocalize +msgid "GeoLocalize" +msgstr "" + +#. module: base_setup +#: model_terms:ir.ui.view,arch_db:base_setup.res_config_settings_view_form +msgid "GeoLocalize your partners" +msgstr "" + +#. module: base_setup +#: model_terms:ir.ui.view,arch_db:base_setup.res_config_settings_view_form msgid "Google Calendar" msgstr "Google Calendar" @@ -301,11 +325,26 @@ msgid "Paper format" msgstr "Papirformat" #. 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 "Forhåndsvis dokument" #. module: base_setup +#: model:ir.model.fields,field_description:base_setup.field_res_config_settings__module_sms +msgid "Send SMS" +msgstr "Send SMS" + +#. 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 "Sett tilpassede tilgangsrettigheter for nye brukere" diff --git a/addons/board/i18n/pl.po b/addons/board/i18n/pl.po index 7204906c496..f4854cb5546 100644 --- a/addons/board/i18n/pl.po +++ b/addons/board/i18n/pl.po @@ -3,20 +3,21 @@ # * board # # Translators: -# Martin Trigaux, 2018 -# Grzegorz Grzelak <grzegorz.grzelak@openglobe.pl>, 2018 -# Tomasz Leppich <t.leppich@gmail.com>, 2018 -# Marcin Młynarczyk <mlynarczyk@gmail.com>, 2018 # Paweł Wodyński <pw@myodoo.pl>, 2018 -# Wiktor Kaźmierczak <wik92tor@wp.pl>, 2018 +# Martin Trigaux, 2019 +# Grzegorz Grzelak <grzegorz.grzelak@openglobe.pl>, 2019 +# Tomasz Leppich <t.leppich@gmail.com>, 2019 +# Marcin Młynarczyk <mlynarczyk@gmail.com>, 2019 +# Wiktor Kaźmierczak <wik92tor@wp.pl>, 2019 +# Karol Rybak <karolrybak85@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-08-24 09:16+0000\n" -"Last-Translator: Wiktor Kaźmierczak <wik92tor@wp.pl>, 2018\n" +"PO-Revision-Date: 2016-08-05 12:57+0000\n" +"Last-Translator: Karol Rybak <karolrybak85@gmail.com>, 2019\n" "Language-Team: Polish (https://www.transifex.com/odoo/teams/41243/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -52,7 +53,7 @@ msgstr "'%s' dodane do konsoli" #: code:addons/board/static/src/xml/board.xml:83 #, python-format msgid "Add" -msgstr "dodaj" +msgstr "Dodaj" #. module: board #. openerp-web @@ -131,7 +132,7 @@ msgstr "Data ostatniej modyfikacji" #: code:addons/board/static/src/xml/board.xml:41 #, python-format msgid "Layout" -msgstr "" +msgstr "Układ" #. module: board #. openerp-web diff --git a/addons/hr_timesheet_attendance/report/hr_timesheet_attendance_report.py b/addons/hr_timesheet_attendance/report/hr_timesheet_attendance_report.py index 0aa0bbaf275..572ba6d5ce9 100644 --- a/addons/hr_timesheet_attendance/report/hr_timesheet_attendance_report.py +++ b/addons/hr_timesheet_attendance/report/hr_timesheet_attendance_report.py @@ -17,6 +17,7 @@ class TimesheetAttendance(models.Model): @api.model_cr def init(self): + self._cr.execute("DROP VIEW IF EXISTS hr_timesheet_attendance_report") self._cr.execute("""CREATE OR REPLACE VIEW %s AS ( SELECT max(id) AS id, @@ -31,7 +32,7 @@ class TimesheetAttendance(models.Model): resource_resource.user_id AS user_id, hr_attendance.worked_hours AS attendance, NULL AS timesheet, - date_trunc('day', hr_attendance.check_in) AS date + hr_attendance.check_in::date AS date FROM hr_attendance LEFT JOIN hr_employee ON hr_employee.id = hr_attendance.employee_id LEFT JOIN resource_resource on resource_resource.id = hr_employee.resource_id @@ -41,7 +42,7 @@ class TimesheetAttendance(models.Model): ts.user_id AS user_id, NULL AS attendance, ts.unit_amount AS timesheet, - date_trunc('day', ts.date) AS date + ts.date AS date FROM account_analytic_line AS ts WHERE ts.project_id IS NOT NULL ) AS t diff --git a/addons/hr_timesheet_attendance/report/hr_timesheet_attendance_report_view.xml b/addons/hr_timesheet_attendance/report/hr_timesheet_attendance_report_view.xml index 85d071cf51d..6d868f15c50 100644 --- a/addons/hr_timesheet_attendance/report/hr_timesheet_attendance_report_view.xml +++ b/addons/hr_timesheet_attendance/report/hr_timesheet_attendance_report_view.xml @@ -15,7 +15,7 @@ <field name="name">HR timesheet attendance report: Pivot</field> <field name="model">hr.timesheet.attendance.report</field> <field name="arch" type="xml"> - <pivot string="timesheet attendance"> + <pivot string="timesheet attendance" disable_linking="True"> <field name="user_id" type="row"/> <field name="date" interval="day" type="col"/> <field name="total_difference" type="measure" widget="float_time"/> diff --git a/addons/hw_drivers/controllers/driver.py b/addons/hw_drivers/controllers/driver.py index 9d238227a38..d186de98776 100755 --- a/addons/hw_drivers/controllers/driver.py +++ b/addons/hw_drivers/controllers/driver.py @@ -56,7 +56,7 @@ def get_token(): return read_file_first_line('token') def get_version(): - return '19_04' + return '19_07' #---------------------------------------------------------- # Controllers diff --git a/addons/hw_posbox_homepage/views/homepage.html b/addons/hw_posbox_homepage/views/homepage.html index b14573e9805..74a502f7ca7 100644 --- a/addons/hw_posbox_homepage/views/homepage.html +++ b/addons/hw_posbox_homepage/views/homepage.html @@ -91,7 +91,7 @@ </tr> <tr> <td class="heading">Version</td> - <td>V19.04 <a class="btn btn-sm float-right" href='/hw_proxy/upgrade/'>update</a></td> + <td>V19.07 <a class="btn btn-sm float-right" href='/hw_proxy/upgrade/'>update</a></td> </tr> <tr> <td class="heading">IP Address</td> diff --git a/addons/l10n_it_edi/data/account_invoice_demo.xml b/addons/l10n_it_edi/data/account_invoice_demo.xml index c68a3871df5..81cef201c47 100644 --- a/addons/l10n_it_edi/data/account_invoice_demo.xml +++ b/addons/l10n_it_edi/data/account_invoice_demo.xml @@ -3,7 +3,8 @@ <data noupdate="1"> <!-- add VAT, codice fiscal and tax system for main company --> <record id="base.main_company" model="res.company"> - <field name="vat">IT00410123456</field> + <field name="country_id" ref="base.it"/> + <field name="vat">IT00410128888</field> <field name="l10n_it_codice_fiscale">0123456789987654</field> <field name="l10n_it_tax_system">RF01</field> <field name="zip">12345</field> diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py index 0a3743969f1..a49699badb0 100644 --- a/addons/mail/models/mail_thread.py +++ b/addons/mail/models/mail_thread.py @@ -2307,6 +2307,9 @@ class MailThread(models.AbstractModel): params['token'] = token link = '%s?%s' % (base_link, url_encode(params)) + if self and hasattr(self, 'get_base_url'): + link = self[0].get_base_url() + link + return link @api.multi diff --git a/addons/mass_mailing/controllers/main.py b/addons/mass_mailing/controllers/main.py index fda77b95c95..3c760902856 100644 --- a/addons/mass_mailing/controllers/main.py +++ b/addons/mass_mailing/controllers/main.py @@ -22,7 +22,7 @@ class MassMailController(http.Controller): model_display = mailing.mailing_model_id.display_name blacklist_entry._message_log(body=description + " ({})".format(model_display)) - @http.route(['/unsubscribe_from_list'], type='http', website=True, multilang=False, auth='public') + @http.route(['/unsubscribe_from_list'], type='http', website=True, multilang=False, auth='public', sitemap=False) def unsubscribe_placeholder_link(self, **post): """Dummy route so placeholder is not prefixed by language, MUST have multilang=False""" raise werkzeug.exceptions.NotFound() diff --git a/addons/mass_mailing/i18n/ca.po b/addons/mass_mailing/i18n/ca.po index 579ca868dd8..2a77ab58006 100644 --- a/addons/mass_mailing/i18n/ca.po +++ b/addons/mass_mailing/i18n/ca.po @@ -2325,9 +2325,9 @@ msgstr "" #. module: mass_mailing #. openerp-web -#: code:addons/mass_mailing/static/src/js/unsubscribe.js:49 +#: code:addons/mass_mailing/static/src/js/unsubscribe.js:50 #, python-format -msgid "You have been <strong>successfully unsubscribed from </strong>." +msgid "You have been <strong>successfully unsubscribed from %s</strong>." msgstr "" #. module: mass_mailing diff --git a/addons/mass_mailing/i18n/de.po b/addons/mass_mailing/i18n/de.po index 9cadb566ab0..ef01747ebb5 100644 --- a/addons/mass_mailing/i18n/de.po +++ b/addons/mass_mailing/i18n/de.po @@ -2402,9 +2402,9 @@ msgstr "Sie sind derzeit bei keiner Mailingliste angemeldet." #. module: mass_mailing #. openerp-web -#: code:addons/mass_mailing/static/src/js/unsubscribe.js:49 +#: code:addons/mass_mailing/static/src/js/unsubscribe.js:50 #, python-format -msgid "You have been <strong>successfully unsubscribed from </strong>." +msgid "You have been <strong>successfully unsubscribed from %s</strong>." msgstr "" #. module: mass_mailing diff --git a/addons/mass_mailing/i18n/el.po b/addons/mass_mailing/i18n/el.po index a430ad6bea1..b635aaef59d 100644 --- a/addons/mass_mailing/i18n/el.po +++ b/addons/mass_mailing/i18n/el.po @@ -2329,9 +2329,9 @@ msgstr "" #. module: mass_mailing #. openerp-web -#: code:addons/mass_mailing/static/src/js/unsubscribe.js:49 +#: code:addons/mass_mailing/static/src/js/unsubscribe.js:50 #, python-format -msgid "You have been <strong>successfully unsubscribed from </strong>." +msgid "You have been <strong>successfully unsubscribed from %s</strong>." msgstr "" #. module: mass_mailing diff --git a/addons/mass_mailing/i18n/es.po b/addons/mass_mailing/i18n/es.po index c4d2922f79b..207a929f720 100644 --- a/addons/mass_mailing/i18n/es.po +++ b/addons/mass_mailing/i18n/es.po @@ -2396,9 +2396,9 @@ msgstr "No está suscrito a ninguna de nuestras listas de mailing" #. module: mass_mailing #. openerp-web -#: code:addons/mass_mailing/static/src/js/unsubscribe.js:49 +#: code:addons/mass_mailing/static/src/js/unsubscribe.js:50 #, python-format -msgid "You have been <strong>successfully unsubscribed from </strong>." +msgid "You have been <strong>successfully unsubscribed from %s</strong>." msgstr "" #. module: mass_mailing diff --git a/addons/mass_mailing/i18n/fr.po b/addons/mass_mailing/i18n/fr.po index 73b4d64e473..f000d1ef1e6 100644 --- a/addons/mass_mailing/i18n/fr.po +++ b/addons/mass_mailing/i18n/fr.po @@ -2423,10 +2423,10 @@ msgstr "Vous n'êtes pas abonné à l'une des notre liste d'envoi." #. module: mass_mailing #. openerp-web -#: code:addons/mass_mailing/static/src/js/unsubscribe.js:49 +#: code:addons/mass_mailing/static/src/js/unsubscribe.js:50 #, python-format -msgid "You have been <strong>successfully unsubscribed from </strong>." -msgstr "Vous avez été <strong>désinscrit avec succès de</strong>." +msgid "You have been <strong>successfully unsubscribed from %s</strong>." +msgstr "" #. module: mass_mailing #. openerp-web diff --git a/addons/mass_mailing/i18n/hu.po b/addons/mass_mailing/i18n/hu.po index 9931b7b15bc..275236b1877 100644 --- a/addons/mass_mailing/i18n/hu.po +++ b/addons/mass_mailing/i18n/hu.po @@ -2343,9 +2343,9 @@ msgstr "" #. module: mass_mailing #. openerp-web -#: code:addons/mass_mailing/static/src/js/unsubscribe.js:49 +#: code:addons/mass_mailing/static/src/js/unsubscribe.js:50 #, python-format -msgid "You have been <strong>successfully unsubscribed from </strong>." +msgid "You have been <strong>successfully unsubscribed from %s</strong>." msgstr "" #. module: mass_mailing diff --git a/addons/mass_mailing/i18n/mn.po b/addons/mass_mailing/i18n/mn.po index 3198b704ccc..60eb42d4177 100644 --- a/addons/mass_mailing/i18n/mn.po +++ b/addons/mass_mailing/i18n/mn.po @@ -2369,9 +2369,9 @@ msgstr "Та манай аль ч мэйл жагсаалтад бүртгүүл #. module: mass_mailing #. openerp-web -#: code:addons/mass_mailing/static/src/js/unsubscribe.js:49 +#: code:addons/mass_mailing/static/src/js/unsubscribe.js:50 #, python-format -msgid "You have been <strong>successfully unsubscribed from </strong>." +msgid "You have been <strong>successfully unsubscribed from %s</strong>." msgstr "" #. module: mass_mailing diff --git a/addons/mass_mailing/i18n/nb.po b/addons/mass_mailing/i18n/nb.po index e7e89625727..8259960a905 100644 --- a/addons/mass_mailing/i18n/nb.po +++ b/addons/mass_mailing/i18n/nb.po @@ -2336,9 +2336,9 @@ msgstr "Du abonnerer ikke på noen av epostlistene våre." #. module: mass_mailing #. openerp-web -#: code:addons/mass_mailing/static/src/js/unsubscribe.js:49 +#: code:addons/mass_mailing/static/src/js/unsubscribe.js:50 #, python-format -msgid "You have been <strong>successfully unsubscribed from </strong>." +msgid "You have been <strong>successfully unsubscribed from %s</strong>." msgstr "" #. module: mass_mailing diff --git a/addons/mass_mailing/i18n/nl.po b/addons/mass_mailing/i18n/nl.po index cc8191682b3..10bb608162d 100644 --- a/addons/mass_mailing/i18n/nl.po +++ b/addons/mass_mailing/i18n/nl.po @@ -2438,10 +2438,10 @@ msgstr "U bent niet ingeschreven voor een van onze nieusbrieven." #. module: mass_mailing #. openerp-web -#: code:addons/mass_mailing/static/src/js/unsubscribe.js:49 +#: code:addons/mass_mailing/static/src/js/unsubscribe.js:50 #, python-format -msgid "You have been <strong>successfully unsubscribed from </strong>." -msgstr "U bent <strong> succesvol uitgeschreven uit</strong>." +msgid "You have been <strong>successfully unsubscribed from %s</strong>." +msgstr "U bent <strong>succesvol uitgeschreven van %s</strong>." #. module: mass_mailing #. openerp-web diff --git a/addons/mass_mailing/i18n/pt_BR.po b/addons/mass_mailing/i18n/pt_BR.po index 4cfc6d55417..b29d34be01e 100644 --- a/addons/mass_mailing/i18n/pt_BR.po +++ b/addons/mass_mailing/i18n/pt_BR.po @@ -2348,9 +2348,9 @@ msgstr "Você não está inscrito em nenhuma de nossa listas de correspondência #. module: mass_mailing #. openerp-web -#: code:addons/mass_mailing/static/src/js/unsubscribe.js:49 +#: code:addons/mass_mailing/static/src/js/unsubscribe.js:50 #, python-format -msgid "You have been <strong>successfully unsubscribed from </strong>." +msgid "You have been <strong>successfully unsubscribed from %s</strong>." msgstr "" #. module: mass_mailing diff --git a/addons/mass_mailing/i18n/ro.po b/addons/mass_mailing/i18n/ro.po index 3d5b71e4287..fedd0a80938 100644 --- a/addons/mass_mailing/i18n/ro.po +++ b/addons/mass_mailing/i18n/ro.po @@ -2319,9 +2319,9 @@ msgstr "" #. module: mass_mailing #. openerp-web -#: code:addons/mass_mailing/static/src/js/unsubscribe.js:49 +#: code:addons/mass_mailing/static/src/js/unsubscribe.js:50 #, python-format -msgid "You have been <strong>successfully unsubscribed from </strong>." +msgid "You have been <strong>successfully unsubscribed from %s</strong>." msgstr "" #. module: mass_mailing diff --git a/addons/mass_mailing/i18n/ru.po b/addons/mass_mailing/i18n/ru.po index a6f55b21359..3fc6e3436ad 100644 --- a/addons/mass_mailing/i18n/ru.po +++ b/addons/mass_mailing/i18n/ru.po @@ -2376,9 +2376,9 @@ msgstr "Вы не подписаны на какой-либо из нашего #. module: mass_mailing #. openerp-web -#: code:addons/mass_mailing/static/src/js/unsubscribe.js:49 +#: code:addons/mass_mailing/static/src/js/unsubscribe.js:50 #, python-format -msgid "You have been <strong>successfully unsubscribed from </strong>." +msgid "You have been <strong>successfully unsubscribed from %s</strong>." msgstr "" #. module: mass_mailing diff --git a/addons/mass_mailing/i18n/tr.po b/addons/mass_mailing/i18n/tr.po index ce8455cf6e4..7d9ce3e665e 100644 --- a/addons/mass_mailing/i18n/tr.po +++ b/addons/mass_mailing/i18n/tr.po @@ -2351,9 +2351,9 @@ msgstr "E-Posta listelerimizden herhangi birine üye değilsiniz." #. module: mass_mailing #. openerp-web -#: code:addons/mass_mailing/static/src/js/unsubscribe.js:49 +#: code:addons/mass_mailing/static/src/js/unsubscribe.js:50 #, python-format -msgid "You have been <strong>successfully unsubscribed from </strong>." +msgid "You have been <strong>successfully unsubscribed from %s</strong>." msgstr "" #. module: mass_mailing diff --git a/addons/mass_mailing/i18n/zh_CN.po b/addons/mass_mailing/i18n/zh_CN.po index 249d6bd7349..a90876d863e 100644 --- a/addons/mass_mailing/i18n/zh_CN.po +++ b/addons/mass_mailing/i18n/zh_CN.po @@ -2373,10 +2373,10 @@ msgstr "您没有订阅任何我们的邮件列表。" #. module: mass_mailing #. openerp-web -#: code:addons/mass_mailing/static/src/js/unsubscribe.js:49 +#: code:addons/mass_mailing/static/src/js/unsubscribe.js:50 #, python-format -msgid "You have been <strong>successfully unsubscribed from </strong>." -msgstr "您已<strong>成功取消订阅</strong>。" +msgid "You have been <strong>successfully unsubscribed from %s</strong>." +msgstr "" #. module: mass_mailing #. openerp-web diff --git a/addons/mass_mailing/i18n/zh_TW.po b/addons/mass_mailing/i18n/zh_TW.po index 67e07ad2037..56cd704a8cb 100644 --- a/addons/mass_mailing/i18n/zh_TW.po +++ b/addons/mass_mailing/i18n/zh_TW.po @@ -2362,10 +2362,10 @@ msgstr "您沒有訂閱任何我們的信件列表。" #. module: mass_mailing #. openerp-web -#: code:addons/mass_mailing/static/src/js/unsubscribe.js:49 +#: code:addons/mass_mailing/static/src/js/unsubscribe.js:50 #, python-format -msgid "You have been <strong>successfully unsubscribed from </strong>." -msgstr "您已經<strong>成功取消訂閱</strong>。" +msgid "You have been <strong>successfully unsubscribed from %s</strong>." +msgstr "" #. module: mass_mailing #. openerp-web diff --git a/addons/mrp/i18n/hu.po b/addons/mrp/i18n/hu.po index 906e2b3c133..a7d689fff46 100644 --- a/addons/mrp/i18n/hu.po +++ b/addons/mrp/i18n/hu.po @@ -975,12 +975,12 @@ msgstr "Leírás" #. module: mrp #: model:ir.model.fields,help:mrp.field_mrp_workcenter__note msgid "Description of the Work Center." -msgstr "" +msgstr "A munkaközpont leírása." #. module: mrp #: model_terms:ir.ui.view,arch_db:mrp.mrp_workcenter_view msgid "Description of the work center..." -msgstr "" +msgstr "A munkaközpont leírása..." #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_unbuild__location_dest_id @@ -1060,7 +1060,7 @@ msgstr "" #: model:product.product,description:mrp.product_product_drawer_drawer #: model:product.template,description:mrp.product_product_drawer_drawer_product_template msgid "Drawer on casters for great usability." -msgstr "" +msgstr "Remekül használható görgős fiók." #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_routing_workcenter__time_cycle @@ -1072,17 +1072,17 @@ msgstr "Időtartam" #. module: mrp #: model_terms:ir.ui.view,arch_db:mrp.oee_tree_view msgid "Duration (minutes)" -msgstr "" +msgstr "Időtartam (percek)" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_routing_workcenter__time_mode msgid "Duration Computation" -msgstr "" +msgstr "Időtartam kiszámítása" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_workorder__duration_percent msgid "Duration Deviation (%)" -msgstr "" +msgstr "Időtartam eltérés (%)" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_workorder__duration_unit @@ -1108,7 +1108,7 @@ msgstr "" #: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity__loss_type #: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity_loss__loss_type msgid "Effectiveness Category" -msgstr "" +msgstr "Hatékonysági kategória" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_production__date_finished @@ -1121,27 +1121,27 @@ msgstr "Befejezés dátuma" #: model:ir.model.fields,help:mrp.field_mrp_product_produce_line__product_tracking #: model:ir.model.fields,help:mrp.field_mrp_unbuild__has_tracking msgid "Ensure the traceability of a storable product in your warehouse." -msgstr "" +msgstr "A raktárban tárolható termékek nyomon követésének biztosítása." #. module: mrp #: model_terms:ir.ui.view,arch_db:mrp.exception_on_mo msgid "Exception(s) occurred on the manufacturing order(s):" -msgstr "" +msgstr "A gyártási rendelés(ek)nél előfordult kivétel(ek):" #. module: mrp #: model_terms:ir.ui.view,arch_db:mrp.exception_on_mo msgid "Exception(s):" -msgstr "" +msgstr "Kivétel(ek):" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_workorder__duration_expected msgid "Expected Duration" -msgstr "" +msgstr "Tervezett időtartam" #. module: mrp #: model:ir.model.fields,help:mrp.field_mrp_workorder__duration_expected msgid "Expected duration (in minutes)" -msgstr "" +msgstr "Tervezett időtartam (percekben)" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_document__datas @@ -1161,7 +1161,7 @@ msgstr "Fájlnév" #. module: mrp #: model_terms:ir.ui.view,arch_db:mrp.report_mrp_bom msgid "Files attached to the product" -msgstr "" +msgstr "A termékhez mellékelt fájlok" #. module: mrp #: model_terms:ir.ui.view,arch_db:mrp.mrp_unbuild_search_view @@ -1238,7 +1238,7 @@ msgstr "Kezdő dátum" #. module: mrp #: model_terms:ir.ui.view,arch_db:mrp.oee_search_view msgid "Fully Productive" -msgstr "" +msgstr "Teljesen termelékeny" #. module: mrp #: model_terms:ir.ui.view,arch_db:mrp.mrp_unbuild_search_view @@ -1439,7 +1439,7 @@ msgstr "" #: code:addons/mrp/models/mrp_bom.py:200 #, python-format msgid "Import Template for Bills of Materials" -msgstr "" +msgstr "Anyagjegyzék sablon importálása" #. module: mrp #: model_terms:ir.ui.view,arch_db:mrp.mrp_workcenter_kanban @@ -1466,7 +1466,7 @@ msgstr "" #: code:addons/mrp/models/mrp_unbuild.py:219 #, python-format msgid "Insufficient Quantity" -msgstr "" +msgstr "Elégtelen mennyiség" #. module: mrp #: selection:stock.picking.type,code:0 @@ -1477,7 +1477,7 @@ msgstr "Belső" #: model:ir.actions.act_window,name:mrp.action_mrp_production_moves #: model_terms:ir.ui.view,arch_db:mrp.mrp_production_form_view msgid "Inventory Moves" -msgstr "" +msgstr "Leltár mozgások" #. module: mrp #: model:ir.model.fields,help:mrp.field_mrp_workorder__move_line_ids @@ -1496,7 +1496,7 @@ msgstr "Ő egy követő" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_production__is_locked msgid "Is Locked" -msgstr "" +msgstr "Zárolt" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_workcenter_productivity_loss__manual @@ -1628,7 +1628,7 @@ msgstr "" #: model:product.product,description:mrp.product_product_wood_ply #: model:product.template,description:mrp.product_product_wood_ply_product_template msgid "Layers that are stick together to assemble wood panels." -msgstr "" +msgstr "A fapanelek összeszerelésére szolgáló, összeragasztott rétegek." #. module: mrp #: code:addons/mrp/models/mrp_production.py:492 @@ -1711,7 +1711,7 @@ msgstr "Alacsony" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_res_config_settings__group_mrp_routings msgid "MRP Work Orders" -msgstr "" +msgstr "MRP munka rendelések" #. module: mrp #: model:ir.model,name:mrp.model_mrp_workcenter_productivity_loss_type @@ -1764,7 +1764,7 @@ msgstr "Gyártás" #: selection:stock.warehouse,manufacture_steps:0 #, python-format msgid "Manufacture (1 step)" -msgstr "" +msgstr "Gyártás (1 lépés)" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_stock_warehouse__manufacture_pull_id @@ -1785,19 +1785,19 @@ msgstr "" #: model:ir.model.fields,field_description:mrp.field_product_product__mrp_product_qty #: model:ir.model.fields,field_description:mrp.field_product_template__mrp_product_qty msgid "Manufactured" -msgstr "" +msgstr "Legyártott" #. module: mrp #: model_terms:ir.ui.view,arch_db:mrp.mrp_product_product_search_view #: model_terms:ir.ui.view,arch_db:mrp.mrp_product_template_search_view msgid "Manufactured Products" -msgstr "" +msgstr "Legyártott termékek" #. module: mrp #: model_terms:ir.ui.view,arch_db:mrp.product_product_form_view_bom_button #: model_terms:ir.ui.view,arch_db:mrp.product_template_form_view_bom_button msgid "Manufactured in the last 365 days" -msgstr "" +msgstr "Legyártva az utóbbi 365 napban" #. module: mrp #: code:addons/mrp/models/stock_warehouse.py:209 @@ -1817,12 +1817,12 @@ msgstr "Gyártási átfutási idő" #. module: mrp #: selection:stock.picking.type,code:0 msgid "Manufacturing Operation" -msgstr "" +msgstr "Gyártási művelet" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_stock_warehouse__manu_type_id msgid "Manufacturing Operation Type" -msgstr "" +msgstr "Gyártási művelet típusa" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_change_production_qty__mo_id @@ -1865,7 +1865,7 @@ msgstr "" #: model:ir.model.fields,field_description:mrp.field_mrp_bom__ready_to_produce #: model_terms:ir.ui.view,arch_db:mrp.mrp_bom_form_view msgid "Manufacturing Readiness" -msgstr "" +msgstr "Gyártási készenlét" #. module: mrp #: model_terms:ir.ui.view,arch_db:mrp.mrp_production_form_view @@ -1970,7 +1970,7 @@ msgstr "Mrp munkaállomás" #. module: mrp #: model:ir.actions.server,name:mrp.production_order_server_action msgid "Mrp: Plan Production Orders" -msgstr "" +msgstr "Mrp: Termelési rendelések tervezése" #. module: mrp #: model_terms:ir.ui.view,arch_db:mrp.mrp_unbuild_search_view @@ -2018,17 +2018,17 @@ msgstr "" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_routing_workcenter__batch msgid "Next Operation" -msgstr "" +msgstr "Következő művelet" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_workorder__next_work_order_id msgid "Next Work Order" -msgstr "" +msgstr "Következő munka rendelés" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_stock_production_lot__use_next_on_work_order_id msgid "Next Work Order to Use" -msgstr "" +msgstr "Következő használandó munka rendelés" #. module: mrp #: model_terms:ir.ui.view,arch_db:mrp.mrp_bom_form_view @@ -2038,7 +2038,7 @@ msgstr "" #. module: mrp #: model_terms:ir.ui.view,arch_db:mrp.report_mrp_bom msgid "No data available." -msgstr "" +msgstr "Nincs elérhető adat." #. module: mrp #: model_terms:ir.actions.act_window,help:mrp.action_mrp_routing_time @@ -2061,6 +2061,8 @@ msgstr "" msgid "" "No workorder currently in progress. Click to mark work center as blocked." msgstr "" +"Jelenleg nincs munka rendelés folyamatban. Kattintson a munkaközpont " +"blokkoltként való megjelöléséhez." #. module: mrp #: selection:mrp.production,availability:0 @@ -2078,6 +2080,8 @@ msgstr "Normál" #: model:ir.model.fields,help:mrp.field_stock_scrap__workorder_id msgid "Not to restrict or prefer quants, but informative." msgstr "" +"Nem a mennyiségek korlátozására vagy előnyben részesítésére szolgál, de " +"informatív." #. module: mrp #: selection:mrp.production,priority:0 @@ -2100,17 +2104,17 @@ msgstr "Műveletek száma" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_stock_picking_type__count_mo_late msgid "Number of Manufacturing Orders Late" -msgstr "" +msgstr "Késében lévő gyártási rendelések száma" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_stock_picking_type__count_mo_waiting msgid "Number of Manufacturing Orders Waiting" -msgstr "" +msgstr "Várakozó gyártási rendelések száma" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_stock_picking_type__count_mo_todo msgid "Number of Manufacturing Orders to Process" -msgstr "" +msgstr "Feldolgozandó gyártási rendelések száma" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_bom__message_has_error_counter @@ -2140,7 +2144,7 @@ msgstr "" #: model:ir.model.fields,help:mrp.field_mrp_workcenter__capacity #: model:ir.model.fields,help:mrp.field_mrp_workorder__capacity msgid "Number of pieces that can be produced in parallel." -msgstr "" +msgstr "Párhuzamosan termelhető darabok száma." #. module: mrp #: model:ir.model.fields,help:mrp.field_mrp_bom__message_unread_counter @@ -2173,12 +2177,12 @@ msgstr "" #. module: mrp #: selection:mrp.routing.workcenter,batch:0 msgid "Once a minimum number of products is processed" -msgstr "" +msgstr "Amint egy minimális számú termék feldolgozásra került" #. module: mrp #: selection:mrp.routing.workcenter,batch:0 msgid "Once all products are processed" -msgstr "" +msgstr "Amint minden termék feldolgozásra került" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_routing_workcenter__name @@ -2190,13 +2194,13 @@ msgstr "Művelet" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_stock_move__operation_id msgid "Operation To Consume" -msgstr "" +msgstr "Felhasználandó művelet" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_bom__picking_type_id #: model:ir.model.fields,field_description:mrp.field_mrp_production__picking_type_id msgid "Operation Type" -msgstr "" +msgstr "Művelet típus" #. module: mrp #: code:addons/mrp/report/mrp_report_bom_structure.py:221 @@ -2218,12 +2222,12 @@ msgstr "Műveletek" #. module: mrp #: model_terms:ir.ui.view,arch_db:mrp.report_mrporder msgid "Operations Done" -msgstr "" +msgstr "Elvégzett műveletek" #. module: mrp #: model_terms:ir.ui.view,arch_db:mrp.report_mrporder msgid "Operations Planned" -msgstr "" +msgstr "Tervezett műveletek" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_stock_move__order_finished_lot_ids @@ -2238,7 +2242,7 @@ msgstr "Megrendelések" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_workorder__qty_production msgid "Original Production Quantity" -msgstr "" +msgstr "Eredeti termelési mennyiség" #. module: mrp #: model:ir.actions.act_window,name:mrp.mrp_workcenter_productivity_report @@ -2277,7 +2281,7 @@ msgstr "Fölérendelt anyagjegyzék" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_bom_line__parent_product_tmpl_id msgid "Parent Product Template" -msgstr "" +msgstr "Szülő termék sablon" #. module: mrp #: model:ir.model.fields,field_description:mrp.field_mrp_routing_workcenter__routing_id @@ -2316,13 +2320,13 @@ msgstr "" #. module: mrp #: model:ir.model.fields,help:mrp.field_mrp_workcenter__performance msgid "Performance over the last month" -msgstr "" +msgstr "Teljesítmény az utóbbi egy hónapban" #. module: mrp #: code:addons/mrp/models/stock_warehouse.py:191 #, python-format msgid "Pick Components" -msgstr "" +msgstr "Alkatrészek kiválasztása" #. module: mrp #: code:addons/mrp/models/stock_warehouse.py:96 diff --git a/addons/mrp/models/mrp_production.py b/addons/mrp/models/mrp_production.py index 9f2f0644e5f..37415fb16d4 100644 --- a/addons/mrp/models/mrp_production.py +++ b/addons/mrp/models/mrp_production.py @@ -562,12 +562,13 @@ class MrpProduction(models.Model): move[0]._recompute_state() move[0]._action_assign() move[0].unit_factor = quantity / move[0].raw_material_production_id.product_qty - elif quantity < 0: # Do not remove 0 lines + return move[0], old_qty, quantity + else: if move[0].quantity_done > 0: raise UserError(_('Lines need to be deleted, but can not as you still have some quantities to consume in them. ')) move[0]._action_cancel() move[0].unlink() - return move[0], old_qty, quantity + return self.env['stock.move'], old_qty, quantity else: move_values = self._get_move_raw_values(bom_line, line_data) move = self.env['stock.move'].create(move_values) @@ -860,15 +861,14 @@ class MrpProduction(models.Model): raise UserError(_('Work order %s is still running') % wo.name) self._check_lots() - # Cancel unfinished move - move_to_cancel = self.move_raw_ids.filtered(lambda m: m.state not in ('done', 'cancel') and float_is_zero(m.quantity_done, precision_rounding=m.product_uom.rounding)) - move_to_cancel._action_cancel() - self.post_inventory() # Moves without quantity done are not posted => set them as done instead of canceling. In # case the user edits the MO later on and sets some consumed quantity on those, we do not # want the move lines to be canceled. - (self.move_raw_ids | self.move_finished_ids).filtered(lambda x: x.state not in ('done', 'cancel')).write({'state': 'done'}) + (self.move_raw_ids | self.move_finished_ids).filtered(lambda x: x.state not in ('done', 'cancel')).write({ + 'state': 'done', + 'product_uom_qty': 0.0, + }) self.write({'date_finished': fields.Datetime.now()}) return True diff --git a/addons/mrp/tests/test_order.py b/addons/mrp/tests/test_order.py index 8e4292a1d06..e406d944a6c 100644 --- a/addons/mrp/tests/test_order.py +++ b/addons/mrp/tests/test_order.py @@ -519,6 +519,51 @@ class TestMrpOrder(TestMrpCommon): mo.button_mark_done() def test_product_produce_6(self): + """ Plan 5 finished products, reserve and produce 3. Post the current production. + Simulate an unlock and edit and, on the opened moves, set the consumed quantity + to 3. Now, try to update the quantity to produce to 3. It should fail since there + are consumed quantities. Unlock and edit, remove the consumed quantities and + update the quantity to produce to 3.""" + self.stock_location = self.env.ref('stock.stock_location_stock') + mo, bom, p_final, p1, p2 = self.generate_mo() + self.assertEqual(len(mo), 1, 'MO should have been created') + + self.env['stock.quant']._update_available_quantity(p1, self.stock_location, 20) + + self.env['stock.quant']._update_available_quantity(p2, self.stock_location, 5) + mo.action_assign() + + produce_wizard = self.env['mrp.product.produce'].with_context({ + 'active_id': mo.id, + 'active_ids': [mo.id], + }).create({ + 'product_qty': 3.0, + }) + produce_wizard._onchange_product_qty() + produce_wizard.do_produce() + + mo.post_inventory() + self.assertEqual(len(mo.move_raw_ids), 4) + + mo.move_raw_ids.filtered(lambda m: m.state != 'done')[0].quantity_done = 3 + + update_quantity_wizard = self.env['change.production.qty'].create({ + 'mo_id': mo.id, + 'product_qty': 3, + }) + with self.assertRaises(UserError): + update_quantity_wizard.change_prod_qty() + + mo.move_raw_ids.filtered(lambda m: m.state != 'done')[0].quantity_done = 0 + update_quantity_wizard.change_prod_qty() + + self.assertEqual(len(mo.move_raw_ids), 2) + + mo.button_mark_done() + self.assertTrue(all(s == 'done' for s in mo.move_raw_ids.mapped('state'))) + self.assertEqual(sum(mo.move_raw_ids.mapped('move_line_ids.product_uom_qty')), 0) + + def test_product_produce_6(self): """ Checks that, for a BOM with two components, when creating a manufacturing order for one finished products and without reserving, the produce wizards proposes the corrects lines even if we change the quantity to produce multiple times. diff --git a/addons/mrp/wizard/change_production_qty.py b/addons/mrp/wizard/change_production_qty.py index 41f8d429517..5d933ee00f8 100644 --- a/addons/mrp/wizard/change_production_qty.py +++ b/addons/mrp/wizard/change_production_qty.py @@ -60,15 +60,22 @@ class ChangeProductionQty(models.TransientModel): if line.child_bom_id and line.child_bom_id.type == 'phantom' or\ line.product_id.type not in ['product', 'consu']: continue - move, old_qty, new_qty = production._update_raw_move(line, line_data) + move = production.move_raw_ids.filtered(lambda x: x.bom_line_id.id == line.id and x.state not in ('done', 'cancel')) + if move: + old_qty = move[0].product_uom_qty + else: + old_qty = 0 iterate_key = production._get_document_iterate_key(move) if iterate_key: - document = self.env['stock.picking']._log_activity_get_documents({move: (new_qty, old_qty)}, iterate_key, 'UP') + document = self.env['stock.picking']._log_activity_get_documents({move: (line_data['qty'], old_qty)}, iterate_key, 'UP') for key, value in document.items(): if documents.get(key): documents[key] += [value] else: documents[key] = [value] + + production._update_raw_move(line, line_data) + production._log_manufacture_exception(documents) operation_bom_qty = {} for bom, bom_data in boms: diff --git a/addons/note/i18n/nb.po b/addons/note/i18n/nb.po index 14371628afe..2fb4ad9a04d 100644 --- a/addons/note/i18n/nb.po +++ b/addons/note/i18n/nb.po @@ -3,17 +3,18 @@ # * note # # Translators: -# Jorunn D. Newth, 2018 -# Martin Trigaux, 2018 -# Marius Stedjan <marius@stedjan.com>, 2018 +# Viktor Basso <viktor@voit.no>, 2018 +# Marius Stedjan <marius@stedjan.com>, 2019 +# Martin Trigaux, 2019 +# Jorunn D. Newth, 2019 # 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-08-24 09:21+0000\n" -"Last-Translator: Marius Stedjan <marius@stedjan.com>, 2018\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2016-08-05 13:06+0000\n" +"Last-Translator: Jorunn D. Newth, 2019\n" "Language-Team: Norwegian Bokmål (https://www.transifex.com/odoo/teams/41243/nb/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,6 +23,16 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: note +#: model_terms:ir.ui.view,arch_db:note.view_note_note_kanban +msgid "<i class=\"fa fa-check\" role=\"img\" aria-label=\"Opened\" title=\"Opened\"/>" +msgstr "" + +#. module: note +#: model_terms:ir.ui.view,arch_db:note.view_note_note_kanban +msgid "<i class=\"fa fa-undo\" role=\"img\" aria-label=\"Closed\" title=\"Closed\"/>" +msgstr "" + +#. module: note #: model:ir.model.fields,field_description:note.field_note_note__message_needaction msgid "Action Needed" msgstr "Handling påkrevd" @@ -93,7 +104,9 @@ msgstr "Etter notatkategori" #. 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 @@ -336,6 +349,8 @@ msgid "" "Notes are private, unless you share them by inviting follower on a note.\n" " (Useful for meeting minutes)." msgstr "" +"Notater er private, men du kan dele dem ved å invitere følgere til enkeltnotater.\n" +" (Nyttig til for eksempel møtereferater.)" #. module: note #: model:ir.model.fields,field_description:note.field_note_note__message_needaction_counter @@ -363,11 +378,6 @@ msgid "Number of unread messages" msgstr "Antall uleste meldinger" #. module: note -#: selection:mail.activity.type,category:0 -msgid "Other" -msgstr "Annet" - -#. module: note #: selection:note.note,activity_state:0 msgid "Overdue" msgstr "Forfalt" @@ -470,6 +480,11 @@ msgid "Stages of Users" msgstr "Brukerstadier" #. module: note +#: selection:mail.activity.type,category:0 +msgid "Standard" +msgstr "Standard" + +#. module: note #: model:ir.model.fields,help:note.field_note_note__activity_state msgid "" "Status based on activities\n" @@ -477,6 +492,10 @@ msgid "" "Today: Activity date is today\n" "Planned: Future activities." msgstr "" +"Status basert på aktiviteter\n" +"Utgått: Fristen er allerede passert\n" +"I dag: Aktiviteten skal gjøres i dag\n" +"Planlagt: Fremtidige aktiviteter." #. module: note #: model:ir.model.fields,field_description:note.field_note_tag__name @@ -527,6 +546,11 @@ msgid "Unread Messages Counter" msgstr "Teller for uleste meldinger" #. 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 "Brukt for å holde orden på notatstadiene" @@ -535,13 +559,3 @@ msgstr "Brukt for å holde orden på notatstadiene" #: model:ir.model,name:note.model_res_users msgid "Users" msgstr "Brukere" - -#. module: note -#: model:ir.model.fields,field_description:note.field_note_note__website_message_ids -msgid "Website Messages" -msgstr "Nettstedmeldinger" - -#. module: note -#: model:ir.model.fields,help:note.field_note_note__website_message_ids -msgid "Website communication history" -msgstr "Kommunikasjonshistorikk på nettstedet" diff --git a/addons/note/i18n/pl.po b/addons/note/i18n/pl.po index ad95bf7ad31..f8f880a055c 100644 --- a/addons/note/i18n/pl.po +++ b/addons/note/i18n/pl.po @@ -3,25 +3,26 @@ # * note # # Translators: -# Martin Trigaux, 2018 -# zbik2607 <darek@krokus.com.pl>, 2018 -# Grzegorz Grzelak <grzegorz.grzelak@openglobe.pl>, 2018 -# Judyta Kaźmierczak <judyta.kazmierczak@openglobe.pl>, 2018 -# Tomasz Leppich <t.leppich@gmail.com>, 2018 -# Piotr Szlązak <szlazakpiotr@gmail.com>, 2018 -# zieloo <zieloo@gmail.com>, 2018 -# Marcin Młynarczyk <mlynarczyk@gmail.com>, 2018 -# Maciej Wichowski <maciej.wichowski@openglobe.pl>, 2018 -# Andrzej Donczew <a.donczew@hadron.eu.com>, 2018 # Paweł Wodyński <pw@myodoo.pl>, 2018 +# Piotr Cierkosz <piotr.w.cierkosz@gmail.com>, 2019 +# Martin Trigaux, 2019 +# Dariusz Żbikowski <darek@krokus.com.pl>, 2019 +# Grzegorz Grzelak <grzegorz.grzelak@openglobe.pl>, 2019 +# Judyta Kaźmierczak <judyta.kazmierczak@openglobe.pl>, 2019 +# Tomasz Leppich <t.leppich@gmail.com>, 2019 +# Marcin Młynarczyk <mlynarczyk@gmail.com>, 2019 +# Maciej Wichowski <maciej.wichowski@openglobe.pl>, 2019 +# Andrzej Donczew <a.donczew@hadron.eu.com>, 2019 +# Piotr Szlązak <szlazakpiotr@gmail.com>, 2019 +# Karol Rybak <karolrybak85@gmail.com>, 2019 # 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-08-24 09:21+0000\n" -"Last-Translator: Paweł Wodyński <pw@myodoo.pl>, 2018\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2016-08-05 13:06+0000\n" +"Last-Translator: Karol Rybak <karolrybak85@gmail.com>, 2019\n" "Language-Team: Polish (https://www.transifex.com/odoo/teams/41243/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -30,6 +31,16 @@ msgstr "" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" #. module: note +#: model_terms:ir.ui.view,arch_db:note.view_note_note_kanban +msgid "<i class=\"fa fa-check\" role=\"img\" aria-label=\"Opened\" title=\"Opened\"/>" +msgstr "" + +#. module: note +#: model_terms:ir.ui.view,arch_db:note.view_note_note_kanban +msgid "<i class=\"fa fa-undo\" role=\"img\" aria-label=\"Closed\" title=\"Closed\"/>" +msgstr "" + +#. module: note #: model:ir.model.fields,field_description:note.field_note_note__message_needaction msgid "Action Needed" msgstr "Wymagana akcja" @@ -68,7 +79,7 @@ msgstr "" #. module: note #: model_terms:ir.actions.act_window,help:note.note_tag_action msgid "Add a new tag" -msgstr "" +msgstr "Dodaj nowy tag" #. module: note #. openerp-web @@ -92,7 +103,7 @@ msgstr "Archiwizuj" #. module: note #: model:ir.model.fields,field_description:note.field_note_note__message_attachment_count msgid "Attachment Count" -msgstr "" +msgstr "Ilość Załączników" #. module: note #: model_terms:ir.ui.view,arch_db:note.view_note_note_filter @@ -101,7 +112,9 @@ msgstr "Według kategorii karteczki" #. 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 @@ -161,7 +174,7 @@ msgstr "Nazwa wyświetlana" #. module: note #: model_terms:ir.ui.view,arch_db:note.view_note_note_kanban msgid "Dropdown menu" -msgstr "" +msgstr "Manu typu dropdown" #. module: note #: model:ir.model.fields,field_description:note.field_note_stage__fold @@ -219,6 +232,7 @@ msgstr "Jeśli zaznaczone, to nowa wiadomość wymaga twojej uwagi." #: model:ir.model.fields,help:note.field_note_note__message_has_error msgid "If checked, some messages have a delivery error." msgstr "" +"Jesli zaznaczone, część wiadomości napotkało na błąd przy próbie doręczenia." #. module: note #: model:ir.model.fields,field_description:note.field_note_note__message_is_follower @@ -254,7 +268,7 @@ msgstr "Spóźnione czynności" #. module: note #: model:ir.model.fields,field_description:note.field_note_note__message_main_attachment_id msgid "Main Attachment" -msgstr "" +msgstr "Główny Załącznik" #. module: note #: selection:mail.activity.type,category:0 @@ -269,7 +283,7 @@ msgstr "" #. module: note #: model:ir.model.fields,field_description:note.field_note_note__message_has_error msgid "Message Delivery error" -msgstr "" +msgstr "Błąd Doręczenia wiadomosci" #. module: note #: model:ir.model.fields,field_description:note.field_note_note__message_ids @@ -353,7 +367,7 @@ msgstr "Liczba akcji" #. module: note #: model:ir.model.fields,field_description:note.field_note_note__message_has_error_counter msgid "Number of error" -msgstr "" +msgstr "Numer błedu" #. module: note #: model:ir.model.fields,help:note.field_note_note__message_needaction_counter @@ -363,7 +377,7 @@ msgstr "Liczba wiadomości wymagających akcji" #. module: note #: model:ir.model.fields,help:note.field_note_note__message_has_error_counter msgid "Number of messages with delivery error" -msgstr "" +msgstr "Ilośc wiadomości z błedami przy doręczeniu" #. module: note #: model:ir.model.fields,help:note.field_note_note__message_unread_counter @@ -371,11 +385,6 @@ msgid "Number of unread messages" msgstr "Liczba nieprzeczytanych wiadomości" #. module: note -#: selection:mail.activity.type,category:0 -msgid "Other" -msgstr "Inne" - -#. module: note #: selection:note.note,activity_state:0 msgid "Overdue" msgstr "Przeterminowane" @@ -412,7 +421,7 @@ msgstr "" #: selection:mail.activity.type,category:0 #: model:mail.activity.type,name:note.mail_activity_data_reminder msgid "Reminder" -msgstr "" +msgstr "Przypomnienie" #. module: note #: model:ir.model.fields,field_description:note.field_note_note__activity_user_id @@ -478,6 +487,11 @@ msgid "Stages of Users" msgstr "Etapy użytkowników" #. module: note +#: selection:mail.activity.type,category:0 +msgid "Standard" +msgstr "Standard" + +#. module: note #: model:ir.model.fields,help:note.field_note_note__activity_state msgid "" "Status based on activities\n" @@ -485,6 +499,10 @@ msgid "" "Today: Activity date is today\n" "Planned: Future activities." msgstr "" +"Status bazuje na aktywnościach\n" +"Opóźnione: Data \"do\" minęła\n" +"Dziś: Aktywnośc przewidziana na dziś\n" +"Zaplanowane: Przyszłe aktywności." #. module: note #: model:ir.model.fields,field_description:note.field_note_tag__name @@ -504,7 +522,7 @@ msgstr "Nazwa znacznika już istnieje!" #: model_terms:ir.ui.view,arch_db:note.note_tag_view_tree #: model_terms:ir.ui.view,arch_db:note.view_note_note_form msgid "Tags" -msgstr "Tagi" +msgstr "Znaczniki" #. module: note #. openerp-web @@ -535,6 +553,11 @@ msgid "Unread Messages Counter" msgstr "Licznik nieprzeczytanych wiadomości" #. 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 "Stosowane do porządkowania notatek etapów" @@ -543,13 +566,3 @@ msgstr "Stosowane do porządkowania notatek etapów" #: model:ir.model,name:note.model_res_users msgid "Users" msgstr "Użytkownicy" - -#. module: note -#: model:ir.model.fields,field_description:note.field_note_note__website_message_ids -msgid "Website Messages" -msgstr "Wiadomości" - -#. module: note -#: model:ir.model.fields,help:note.field_note_note__website_message_ids -msgid "Website communication history" -msgstr "Historia komunikacji" diff --git a/addons/payment/controllers/portal.py b/addons/payment/controllers/portal.py index 90c0065b643..db9aec543a6 100644 --- a/addons/payment/controllers/portal.py +++ b/addons/payment/controllers/portal.py @@ -272,7 +272,7 @@ class WebsitePayment(http.Controller): tx_id = int(kw.get('tx_id', 0)) if tx_id: tx = request.env['payment.transaction'].browse(tx_id) - if tx.state == 'done': + if tx.state in ['done', 'authorized']: status = 'success' message = tx.acquirer_id.done_msg elif tx.state == 'pending': diff --git a/addons/payment/i18n/de.po b/addons/payment/i18n/de.po index afe8bccf2dd..fa899c15c8b 100644 --- a/addons/payment/i18n/de.po +++ b/addons/payment/i18n/de.po @@ -870,13 +870,13 @@ msgstr "" #: code:addons/payment/models/account_invoice.py:55 #, python-format msgid "Invalid token found! Token acquirer %s != %s" -msgstr "" +msgstr "Ungültiges Token gefunden! Token-Acquirer %s != %s" #. module: payment #: code:addons/payment/models/account_invoice.py:58 #, python-format msgid "Invalid token found! Token partner %s != %s" -msgstr "" +msgstr "Ungültiges Token gefunden! Token-Partner %s != %s" #. module: payment #: model:ir.model,name:payment.model_account_invoice diff --git a/addons/payment/models/__init__.py b/addons/payment/models/__init__.py index 93f5083aca8..8491af34960 100644 --- a/addons/payment/models/__init__.py +++ b/addons/payment/models/__init__.py @@ -5,4 +5,5 @@ from . import account_invoice from . import res_partner from . import account_payment from . import chart_template +from . import ir_http from . import res_company diff --git a/addons/payment/models/ir_http.py b/addons/payment/models/ir_http.py new file mode 100644 index 00000000000..0d9c9c8de32 --- /dev/null +++ b/addons/payment/models/ir_http.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import models +from odoo.osv import expression + + +class IrHttp(models.AbstractModel): + _inherit = 'ir.http' + + @classmethod + def _get_translation_frontend_modules_domain(cls): + domain = super(IrHttp, cls)._get_translation_frontend_modules_domain() + return expression.OR([domain, [('name', '=', 'payment')]]) diff --git a/addons/point_of_sale/i18n/hu.po b/addons/point_of_sale/i18n/hu.po index 9ffcbe65699..cad13341119 100644 --- a/addons/point_of_sale/i18n/hu.po +++ b/addons/point_of_sale/i18n/hu.po @@ -2358,7 +2358,7 @@ msgstr "" #: model:ir.model.fields,field_description:point_of_sale.field_pos_order__picking_type_id #: model_terms:ir.ui.view,arch_db:point_of_sale.pos_config_view_form msgid "Operation Type" -msgstr "" +msgstr "Művelet típus" #. module: point_of_sale #: model_terms:ir.ui.view,arch_db:point_of_sale.pos_config_view_form diff --git a/addons/point_of_sale/models/pos_config.py b/addons/point_of_sale/models/pos_config.py index e61fb06d881..0e083016c4b 100644 --- a/addons/point_of_sale/models/pos_config.py +++ b/addons/point_of_sale/models/pos_config.py @@ -246,7 +246,7 @@ class PosConfig(models.Model): " the Accounting application.")) if self.invoice_journal_id.currency_id and self.invoice_journal_id.currency_id != self.currency_id: raise ValidationError(_("The invoice journal must be in the same currency as the Sales Journal or the company currency if that is not set.")) - if any(self.journal_ids.mapped(lambda journal: journal.currency_id and journal.currency_id != self.currency_id)): + if any(self.journal_ids.mapped(lambda journal: self.currency_id not in (journal.company_id.currency_id, journal.currency_id))): raise ValidationError(_("All payment methods must be in the same currency as the Sales Journal or the company currency if that is not set.")) @api.constrains('company_id', 'available_pricelist_ids') diff --git a/addons/point_of_sale/models/pos_session.py b/addons/point_of_sale/models/pos_session.py index 17d9f0cca98..4b81b115cf9 100644 --- a/addons/point_of_sale/models/pos_session.py +++ b/addons/point_of_sale/models/pos_session.py @@ -225,7 +225,7 @@ class PosSession(models.Model): 'journal_id': journal.id, 'user_id': self.env.user.id, 'name': pos_name, - 'balance_start': self.env["account.bank.statement"]._get_opening_balance(journal.id) + 'balance_start': self.env["account.bank.statement"]._get_opening_balance(journal.id) if journal.type == 'cash' else 0 } statements.append(ABS.with_context(ctx).sudo(uid).create(st_values).id) diff --git a/addons/point_of_sale/tools/posbox/overwrite_before_init/etc/init.d/timesyncd b/addons/point_of_sale/tools/posbox/overwrite_before_init/etc/init.d/timesyncd new file mode 100755 index 00000000000..eb5ccf94091 --- /dev/null +++ b/addons/point_of_sale/tools/posbox/overwrite_before_init/etc/init.d/timesyncd @@ -0,0 +1,41 @@ +#!/bin/bash +### BEGIN INIT INFO +# Provides: timesyncd +# Required-Start: $remote_fs $network +# Required-Stop: $remote_fs +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Start systemd-timesyncd daemon at boot time +# Description: Enable service provided by daemon. +### END INIT INFO + +start() +{ + echo "start timesyncd" + service systemd-timesyncd start +} + +stop() +{ + echo "stop timesyncd" + service systemd-timesyncd stop +} + +restart() +{ + stop; + sleep 1; + start; +} +case $1 in +start) + start;; +stop) + stop;; +restart) + restart;; +*) + start;; +esac + +exit 0 diff --git a/addons/point_of_sale/tools/posbox/overwrite_before_init/etc/init_posbox_image.sh b/addons/point_of_sale/tools/posbox/overwrite_before_init/etc/init_posbox_image.sh index 53ab15a8748..97c69f308ee 100755 --- a/addons/point_of_sale/tools/posbox/overwrite_before_init/etc/init_posbox_image.sh +++ b/addons/point_of_sale/tools/posbox/overwrite_before_init/etc/init_posbox_image.sh @@ -138,6 +138,7 @@ echo "* * * * * rm /var/run/odoo/sessions/*" | crontab - update-rc.d -f hostapd remove update-rc.d -f nginx remove update-rc.d -f dnsmasq remove +update-rc.d timesyncd defaults systemctl daemon-reload systemctl enable ramdisks.service diff --git a/addons/portal/models/mail_thread.py b/addons/portal/models/mail_thread.py index aea29ea3ec7..71aae5ca58d 100644 --- a/addons/portal/models/mail_thread.py +++ b/addons/portal/models/mail_thread.py @@ -13,7 +13,7 @@ class MailThread(models.AbstractModel): _mail_post_token_field = 'access_token' # token field for external posts, to be overridden website_message_ids = fields.One2many('mail.message', 'res_id', string='Website Messages', - domain=lambda self: [('model', '=', self._name), ('message_type', '=', 'comment')], auto_join=True, + domain=lambda self: [('model', '=', self._name), '|', ('message_type', '=', 'comment'), ('message_type', '=', 'email')], auto_join=True, help="Website communication history") @api.multi diff --git a/addons/portal/models/res_partner.py b/addons/portal/models/res_partner.py index 4c8d02943c5..064fa2ff04e 100644 --- a/addons/portal/models/res_partner.py +++ b/addons/portal/models/res_partner.py @@ -8,4 +8,7 @@ class ResPartner(models.Model): _inherit = 'res.partner' def can_edit_vat(self): - return True + ''' `vat` is a commercial field, synced between the parent (commercial + entity) and the children. Only the commercial entity should be able to + edit it (as in backend). ''' + return not self.parent_id diff --git a/addons/portal/views/portal_templates.xml b/addons/portal/views/portal_templates.xml index 2f1a4859888..7b7ee87c423 100644 --- a/addons/portal/views/portal_templates.xml +++ b/addons/portal/views/portal_templates.xml @@ -344,8 +344,11 @@ <div class="clearfix" /> <div t-attf-class="form-group #{error.get('company_name') and 'o_has_error' or ''} col-xl-6"> <label class="col-form-label label-optional" for="company_name">Company Name</label> - <p t-if="partner.commercial_partner_id.is_company" t-attf-class="form-control #{error.get('company_name') and 'is-invalid' or ''}" t-esc="partner.commercial_company_name"/> - <input t-else="" type="text" name="company_name" t-attf-class="form-control #{error.get('company_name') and 'is-invalid' or ''}" t-att-value="company_name or partner.company_name" t-att-readonly="None if partner.can_edit_vat() else '1'" t-att-title="None if partner.can_edit_vat() else 'Changing company name is not allowed once document(s) have been issued for your account. Please contact us directly for this operation.'"/> + <!-- The <input> is replace by a <p> to avoid sending an unauthorized value on form submit. + The user might not have rights to change company_name but should still be able to see it. + --> + <p t-if="not partner.can_edit_vat()" t-attf-class="form-control" readonly="1" t-esc="partner.commercial_company_name" title="Changing company name is not allowed once document(s) have been issued for your account. Please contact us directly for this operation."/> + <input t-else="" type="text" name="company_name" t-attf-class="form-control #{error.get('company_name') and 'is-invalid' or ''}" t-att-value="company_name or partner.commercial_company_name"/> </div> <div t-attf-class="form-group #{error.get('vat') and 'o_has_error' or ''} col-xl-6"> <label class="col-form-label label-optional" for="vat">VAT Number</label> diff --git a/addons/pos_sale/i18n/de.po b/addons/pos_sale/i18n/de.po index 742b05323ad..8785889c77a 100644 --- a/addons/pos_sale/i18n/de.po +++ b/addons/pos_sale/i18n/de.po @@ -3,15 +3,20 @@ # * pos_sale # # Translators: -# Martin Trigaux, 2018 -# JackTheHunter <Maximilian.N98@gmail.com>, 2018 +# Jan Brodersen <4rmitxes@gmail.com>, 2017 +# e2f <projects@e2f.com>, 2018 +# Martin Trigaux, 2019 +# JackTheHunter <Maximilian.N98@gmail.com>, 2019 +# Chris Egal <sodaswed@web.de>, 2019 +# Leon Grill <leg@odoo.com>, 2019 +# msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-21 13:16+0000\n" -"PO-Revision-Date: 2018-09-21 13:16+0000\n" -"Last-Translator: JackTheHunter <Maximilian.N98@gmail.com>, 2018\n" +"POT-Creation-Date: 2018-12-24 10:57+0000\n" +"PO-Revision-Date: 2017-02-15 10:52+0000\n" +"Last-Translator: Leon Grill <leg@odoo.com>, 2019\n" "Language-Team: German (https://www.transifex.com/odoo/teams/41243/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,6 +25,11 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: pos_sale +#: model_terms:ir.ui.view,arch_db:pos_sale.pos_config_view_form_pos_sale +msgid "<span class=\"o_form_label\">Sales Team</span>" +msgstr "<span class=\"o_form_label\">Verkaufsteam</span>" + +#. module: pos_sale #: selection:sale.report,state:0 msgid "Cancelled" msgstr "Abgebrochen" @@ -30,42 +40,16 @@ msgid "Currency Rate" msgstr "Wechselkurs" #. module: pos_sale -#: code:addons/pos_sale/models/crm_team.py:107 -#, python-format -msgid "Dashboard" -msgstr "Dashboard" - -#. module: pos_sale -#: selection:crm.team,dashboard_graph_group_pos:0 -msgid "Day" -msgstr "Tag" - -#. module: pos_sale #: selection:sale.report,state:0 msgid "Draft Quotation" msgstr "Angebotsentwurf" #. module: pos_sale -#: model_terms:ir.ui.view,arch_db:pos_sale.crm_team_view_form_inherit_pos_sale -msgid "Group by" -msgstr "Gruppiert nach" - -#. module: pos_sale -#: model:ir.model.fields,help:pos_sale.field_crm_team__dashboard_graph_group_pos -msgid "How this channel's dashboard graph will group the results." -msgstr "So gruppiert dieses Dashboard-Diagramm des Kanals die Ergebnisse." - -#. module: pos_sale #: selection:sale.report,state:0 msgid "Invoiced" msgstr "Abgerechnet" #. module: pos_sale -#: selection:crm.team,dashboard_graph_group_pos:0 -msgid "Month" -msgstr "Monat" - -#. module: pos_sale #: selection:sale.report,state:0 msgid "New" msgstr "Neu" @@ -81,22 +65,11 @@ msgid "Open Sessions" msgstr "Sitzungen öffnen" #. module: pos_sale -#: model:ir.model.fields,field_description:pos_sale.field_crm_team__dashboard_graph_group_pos -msgid "POS Grouping" -msgstr "" - -#. module: pos_sale #: selection:sale.report,state:0 msgid "Paid" msgstr "Bezahlt" #. module: pos_sale -#: selection:crm.team,dashboard_graph_group_pos:0 -#: model:crm.team,name:pos_sale.pos_sales_team selection:crm.team,team_type:0 -msgid "Point of Sale" -msgstr "Point of Sale" - -#. module: pos_sale #: model:ir.model,name:pos_sale.model_pos_config msgid "Point of Sale Configuration" msgstr "Point Of Sale Konfiguration" @@ -127,15 +100,9 @@ msgid "Quotation Sent" msgstr "Angebot gesendet" #. module: pos_sale -#: selection:crm.team,team_type:0 -#: model_terms:ir.ui.view,arch_db:pos_sale.crm_team_salesteams_view_kanban_inherit_pos_sale -msgid "Sales" -msgstr "Verkauf" - -#. module: pos_sale #: model:ir.model,name:pos_sale.model_sale_report msgid "Sales Analysis Report" -msgstr "" +msgstr "Verkaufsanalysebericht" #. module: pos_sale #: model:ir.model,name:pos_sale.model_crm_team @@ -153,21 +120,20 @@ msgid "Sales Order" msgstr "Verkaufsauftrag" #. module: pos_sale +#: model_terms:ir.ui.view,arch_db:pos_sale.pos_config_view_form_pos_sale +msgid "Sales Reporting" +msgstr "Verkaufs-berichtswesen" + +#. module: pos_sale #: model:ir.model.fields,field_description:pos_sale.field_pos_config__crm_team_id #: model:ir.model.fields,field_description:pos_sale.field_pos_session__crm_team_id msgid "Sales Team" msgstr "Verkaufsteam" #. module: pos_sale -#: code:addons/pos_sale/models/crm_team.py:119 -#, python-format -msgid "Sales: Untaxed Amount" -msgstr "Verkauf: Nettobetrag" - -#. module: pos_sale -#: selection:crm.team,dashboard_graph_group_pos:0 -msgid "Salesperson" -msgstr "Verkäufer" +#: model_terms:ir.ui.view,arch_db:pos_sale.pos_config_view_form_pos_sale +msgid "Sales are reported to the following sales team" +msgstr "Die Umsätze werden an das folgende Vertriebsteam gemeldet" #. module: pos_sale #: model_terms:ir.ui.view,arch_db:pos_sale.crm_team_salesteams_view_kanban_inherit_pos_sale @@ -190,37 +156,16 @@ msgid "Status" msgstr "Status" #. module: pos_sale -#: model:ir.model.fields,field_description:pos_sale.field_crm_team__team_type -msgid "Team Type" -msgstr "" - -#. module: pos_sale #: model:ir.model.fields,help:pos_sale.field_pos_order__currency_rate msgid "" "The rate of the currency to the currency of rate applicable at the date of " "the order" -msgstr "" - -#. module: pos_sale -#: model:ir.model.fields,help:pos_sale.field_crm_team__team_type -msgid "" -"The type of this channel, it will define the resources this channel uses." -msgstr "" -"Der Typ dieses Kanals, er definiert die Ressourcen, die dieser Kanal " -"verwendet." +msgstr "Es gilt immer der Wechselkurs am Tag der Bestellung" #. module: pos_sale #: model:ir.model.fields,help:pos_sale.field_pos_config__crm_team_id #: model:ir.model.fields,help:pos_sale.field_pos_session__crm_team_id msgid "This Point of sale's sales will be related to this Sales Team." msgstr "" - -#. module: pos_sale -#: selection:crm.team,team_type:0 -msgid "Website" -msgstr "Website" - -#. module: pos_sale -#: selection:crm.team,dashboard_graph_group_pos:0 -msgid "Week" -msgstr "Woche" +"Die Verkäufe dieser Verkaufsstelle stehen in Beziehung zu diesem " +"Verkaufsteam." diff --git a/addons/product/models/res_partner.py b/addons/product/models/res_partner.py index be1f7f25d41..51995345ed0 100644 --- a/addons/product/models/res_partner.py +++ b/addons/product/models/res_partner.py @@ -34,7 +34,7 @@ class Partner(models.Model): # update at each change country, and so erase old pricelist if self.property_product_pricelist or (actual and default_for_country and default_for_country.id != actual.id): # keep the company of the current user before sudo - self.env['ir.property'].with_context(force_company=self.env.company.id).sudo().set_multi( + self.env['ir.property'].with_context(force_company=self._context.get('force_company', self.env.company.id)).sudo().set_multi( 'property_product_pricelist', self._name, {self.id: self.property_product_pricelist or default_for_country.id}, diff --git a/addons/purchase/views/purchase_views.xml b/addons/purchase/views/purchase_views.xml index 607ce4702ce..59d2076618a 100644 --- a/addons/purchase/views/purchase_views.xml +++ b/addons/purchase/views/purchase_views.xml @@ -421,6 +421,7 @@ <field name="type">ir.actions.act_window</field> <field name="res_model">purchase.order</field> <field name="view_mode">tree,kanban,form,pivot,graph,calendar,activity</field> + <field name="domain">[]</field> <field name="search_view_id" ref="view_purchase_order_filter"/> <field name="context">{'quotation_only': True}</field> <field name="help" type="html"> diff --git a/addons/repair/i18n/hu.po b/addons/repair/i18n/hu.po index 89c02d73a56..9150237e051 100644 --- a/addons/repair/i18n/hu.po +++ b/addons/repair/i18n/hu.po @@ -3,20 +3,20 @@ # * repair # # Translators: -# Martin Trigaux, 2018 +# Kovács Tibor <kovika@gmail.com>, 2018 # krnkris, 2018 # gezza <geza.nagy@oregional.hu>, 2018 -# Kovács Tibor <kovika@gmail.com>, 2018 -# Ákos Nagy <akos.nagy@oregional.hu>, 2018 -# Tibor Kőnig <konig.tibor@evitalit.hu>, 2018 +# Tibor Kőnig <konig.tibor@evitalit.hu>, 2019 +# Martin Trigaux, 2019 +# Ákos Nagy <akos.nagy@oregional.hu>, 2019 # 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-08-24 09:24+0000\n" -"Last-Translator: Tibor Kőnig <konig.tibor@evitalit.hu>, 2018\n" +"POT-Creation-Date: 2019-03-20 13:51+0000\n" +"PO-Revision-Date: 2018-03-22 16:02+0000\n" +"Last-Translator: Ákos Nagy <akos.nagy@oregional.hu>, 2019\n" "Language-Team: Hungarian (https://www.transifex.com/odoo/teams/41243/hu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -207,7 +207,7 @@ msgstr "Javítási rendelés visszavonás" #. module: repair #: selection:repair.line,state:0 selection:repair.order,state:0 msgid "Cancelled" -msgstr "Visszavonva" +msgstr "Törölve" #. module: repair #: code:addons/repair/models/repair.py:244 @@ -295,7 +295,7 @@ msgstr "Létrehozva" #. module: repair #: model:ir.model.fields,field_description:repair.field_repair_order__partner_id msgid "Customer" -msgstr "Vevő" +msgstr "Vásárló" #. module: repair #: model:ir.model.fields,field_description:repair.field_repair_order__default_address_id @@ -337,7 +337,7 @@ msgstr "Biztosan létre akarja hozni a számlá(ka)t?" #. module: repair #: selection:repair.line,state:0 msgid "Done" -msgstr "Kész" +msgstr "Elvégezve" #. module: repair #: selection:repair.line,state:0 @@ -352,7 +352,7 @@ msgstr "Javítás vége" #. module: repair #: model:ir.model.fields,help:repair.field_repair_order__tracking msgid "Ensure the traceability of a storable product in your warehouse." -msgstr "" +msgstr "A raktárban tárolható termékek nyomon követésének biztosítása." #. module: repair #: model_terms:ir.ui.view,arch_db:repair.view_repair_order_form @@ -382,7 +382,7 @@ msgstr "Követők (Partnerek)" #. module: repair #: model_terms:ir.ui.view,arch_db:repair.view_repair_order_form_filter msgid "Future Activities" -msgstr "" +msgstr "Jövőbeli tevékenységek" #. module: repair #: model_terms:ir.ui.view,arch_db:repair.view_repair_order_form_filter @@ -423,6 +423,7 @@ msgstr "Ha be van jelölve, akkor figyelje az új üzeneteket." #: model:ir.model.fields,help:repair.field_repair_order__message_has_error msgid "If checked, some messages have a delivery error." msgstr "" +"Ha be van jelölve, akkor néhány üzenetnél kézbesítési hiba lépett fel." #. module: repair #: model_terms:ir.actions.act_window,help:repair.action_repair_order_tree @@ -439,7 +440,7 @@ msgstr "" #: code:addons/repair/models/repair.py:210 #, python-format msgid "Insufficient Quantity" -msgstr "" +msgstr "Elégtelen mennyiség" #. module: repair #: model:ir.model.fields,field_description:repair.field_repair_order__internal_notes @@ -466,7 +467,7 @@ msgstr "Számlázási kivétel" #: model:ir.model.fields,field_description:repair.field_repair_fee__invoice_line_id #: model:ir.model.fields,field_description:repair.field_repair_line__invoice_line_id msgid "Invoice Line" -msgstr "Számlasor" +msgstr "Számla tételsor" #. module: repair #: model:ir.model.fields,field_description:repair.field_repair_order__invoice_method @@ -515,7 +516,7 @@ msgstr "Ő egy követő" #: model:ir.model.fields,field_description:repair.field_repair_order_make_invoice____last_update #: model:ir.model.fields,field_description:repair.field_stock_warn_insufficient_qty_repair____last_update msgid "Last Modified on" -msgstr "Legutóbb frissítve" +msgstr "Utoljára módosítva" #. module: repair #: model:ir.model.fields,field_description:repair.field_repair_cancel__write_uid @@ -525,7 +526,7 @@ msgstr "Legutóbb frissítve" #: model:ir.model.fields,field_description:repair.field_repair_order_make_invoice__write_uid #: model:ir.model.fields,field_description:repair.field_stock_warn_insufficient_qty_repair__write_uid msgid "Last Updated by" -msgstr "Legutóbb frissítette" +msgstr "Utoljára frissítette" #. module: repair #: model:ir.model.fields,field_description:repair.field_repair_cancel__write_date @@ -535,12 +536,12 @@ msgstr "Legutóbb frissítette" #: model:ir.model.fields,field_description:repair.field_repair_order_make_invoice__write_date #: model:ir.model.fields,field_description:repair.field_stock_warn_insufficient_qty_repair__write_date msgid "Last Updated on" -msgstr "Legutóbb frissítve " +msgstr "Utoljára frissítve " #. module: repair #: model_terms:ir.ui.view,arch_db:repair.view_repair_order_form_filter msgid "Late Activities" -msgstr "" +msgstr "Késő tevékenységek" #. module: repair #: model:ir.model.fields,field_description:repair.field_repair_order__location_id @@ -557,12 +558,12 @@ msgstr "Szett/Széria" #. module: repair #: model:ir.model.fields,field_description:repair.field_repair_order__message_main_attachment_id msgid "Main Attachment" -msgstr "" +msgstr "Fő melléklet" #. module: repair #: model:ir.model.fields,field_description:repair.field_repair_order__message_has_error msgid "Message Delivery error" -msgstr "" +msgstr "Üzenetkézbesítési hiba" #. module: repair #: model:ir.model.fields,field_description:repair.field_repair_order__message_ids @@ -587,7 +588,7 @@ msgstr "Tevékenységeim" #. module: repair #: model:ir.model.fields,field_description:repair.field_repair_order__activity_date_deadline msgid "Next Activity Deadline" -msgstr "" +msgstr "Következő tevékenység-határidő" #. module: repair #: model:ir.model.fields,field_description:repair.field_repair_order__activity_summary @@ -597,7 +598,7 @@ msgstr "Következő tevékenység összegzése" #. module: repair #: model:ir.model.fields,field_description:repair.field_repair_order__activity_type_id msgid "Next Activity Type" -msgstr "" +msgstr "Következő tevékenységtípus" #. module: repair #: selection:repair.order,invoice_method:0 @@ -650,7 +651,7 @@ msgstr "Műveletek száma" #. module: repair #: model:ir.model.fields,field_description:repair.field_repair_order__message_has_error_counter msgid "Number of error" -msgstr "" +msgstr "Hiba száma" #. module: repair #: model:ir.model.fields,help:repair.field_repair_order__message_needaction_counter @@ -660,7 +661,7 @@ msgstr "Üzenetek száma, melyek akciót igényelnek" #. module: repair #: model:ir.model.fields,help:repair.field_repair_order__message_has_error_counter msgid "Number of messages with delivery error" -msgstr "" +msgstr "Kézbesítési hibával rendelkező üzenetek száma" #. module: repair #: model:ir.model.fields,help:repair.field_repair_order__message_unread_counter @@ -698,7 +699,7 @@ msgstr "" #. module: repair #: selection:repair.order,activity_state:0 msgid "Planned" -msgstr "" +msgstr "Tervezett" #. module: repair #: model_terms:ir.ui.view,arch_db:repair.report_repairorder @@ -853,6 +854,12 @@ msgid "Repair Reference" msgstr "Hivatkozás javításra" #. 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." @@ -968,6 +975,10 @@ msgid "" "Today: Activity date is today\n" "Planned: Future activities." msgstr "" +"Tevékenységeken alapuló állapot\n" +"Lejárt: Az esedékesség dátuma már elmúlt\n" +"Ma: A tevékenység dátuma ma van\n" +"Tervezett: Jövőbeli tevékenységek." #. module: repair #: model:ir.model,name:repair.model_stock_move @@ -1095,6 +1106,12 @@ msgid "Unit of Measure" msgstr "Mértékegység" #. 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 "Egység(ek)" + +#. module: repair #: model:ir.model.fields,field_description:repair.field_repair_order__message_unread msgid "Unread Messages" msgstr "Olvasatlan üzenetek" diff --git a/addons/repair/i18n/nb.po b/addons/repair/i18n/nb.po index 5d8af69d7d4..25f54c909a0 100644 --- a/addons/repair/i18n/nb.po +++ b/addons/repair/i18n/nb.po @@ -3,15 +3,17 @@ # * repair # # Translators: -# Martin Trigaux, 2018 -# Jorunn D. Newth, 2018 +# Viktor Basso <viktor@voit.no>, 2018 +# Martin Trigaux, 2019 +# Jorunn D. Newth, 2019 +# 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" -"Last-Translator: Jorunn D. Newth, 2018\n" +"POT-Creation-Date: 2019-03-20 13:51+0000\n" +"PO-Revision-Date: 2018-03-22 16:02+0000\n" +"Last-Translator: Jorunn D. Newth, 2019\n" "Language-Team: Norwegian Bokmål (https://www.transifex.com/odoo/teams/41243/nb/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -838,6 +840,12 @@ msgid "Repair Reference" msgstr "Reparasjonsreferanse" #. 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." @@ -948,6 +956,10 @@ msgid "" "Today: Activity date is today\n" "Planned: Future activities." msgstr "" +"Status basert på aktiviteter\n" +"Utgått: Fristen er allerede passert\n" +"I dag: Aktiviteten skal gjøres i dag\n" +"Planlagt: Fremtidige aktiviteter." #. module: repair #: model:ir.model,name:repair.model_stock_move @@ -1070,6 +1082,12 @@ msgid "Unit of Measure" msgstr "Måleenhet" #. 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 "Enhet(er)" + +#. module: repair #: model:ir.model.fields,field_description:repair.field_repair_order__message_unread msgid "Unread Messages" msgstr "Uleste meldinger" diff --git a/addons/sale/i18n/nb.po b/addons/sale/i18n/nb.po index f5afcba0260..8db495b4c70 100644 --- a/addons/sale/i18n/nb.po +++ b/addons/sale/i18n/nb.po @@ -676,14 +676,14 @@ msgstr "Banknavn" #: selection:payment.acquirer,so_reference_type:0 #, python-format msgid "Based on Customer ID" -msgstr "" +msgstr "Basert på kunde-ID" #. module: sale #: code:addons/sale/models/payment.py:13 #: selection:payment.acquirer,so_reference_type:0 #, python-format msgid "Based on Document Reference" -msgstr "" +msgstr "Basert på dokumentreferanse" #. module: sale #: model:product.template.attribute.value,name:sale.product_template_attribute_value_5 @@ -3354,6 +3354,10 @@ msgid "" "Today: Activity date is today\n" "Planned: Future activities." msgstr "" +"Status basert på aktiviteter\n" +"Utgått: Fristen er allerede passert\n" +"I dag: Aktiviteten skal gjøres i dag\n" +"Planlagt: Fremtidige aktiviteter." #. module: sale #: model:product.template.attribute.value,name:sale.product_template_attribute_value_3 diff --git a/addons/sale/models/res_partner.py b/addons/sale/models/res_partner.py index a1f60defb2d..fac5165f55f 100644 --- a/addons/sale/models/res_partner.py +++ b/addons/sale/models/res_partner.py @@ -30,6 +30,7 @@ class ResPartner(models.Model): partner = partner.parent_id def can_edit_vat(self): + ''' Can't edit `vat` if there is (non draft) issued SO. ''' can_edit_vat = super(ResPartner, self).can_edit_vat() if not can_edit_vat: return can_edit_vat diff --git a/addons/sale_coupon/models/sale_order.py b/addons/sale_coupon/models/sale_order.py index 6c0fa712229..fc49b4abc73 100644 --- a/addons/sale_coupon/models/sale_order.py +++ b/addons/sale_coupon/models/sale_order.py @@ -209,9 +209,9 @@ class SaleOrder(models.Model): def _get_reward_line_values(self, program): self.ensure_one() if program.reward_type == 'discount': - return self._get_reward_values_discount(program) + return self._get_reward_values_discount(program.with_context(lang=self.partner_id.lang)) elif program.reward_type == 'product': - return [self._get_reward_values_product(program)] + return [self._get_reward_values_product(program.with_context(lang=self.partner_id.lang))] def _create_reward_line(self, program): self.write({'order_line': [(0, False, value) for value in self._get_reward_line_values(program)]}) diff --git a/addons/sale_management/i18n/de.po b/addons/sale_management/i18n/de.po index 3ad6e819781..f619ea4f9b8 100644 --- a/addons/sale_management/i18n/de.po +++ b/addons/sale_management/i18n/de.po @@ -3,20 +3,24 @@ # * sale_management # # Translators: -# Martin Trigaux, 2018 -# DE R1 <e2fes1@hotmail.com>, 2018 -# DE T2 <e2f48d4s5vd1s2@outlook.com>, 2018 -# Ermin Trevisan <trevi@twanda.com>, 2018 -# Rudolf Schnapka <rs@techno-flex.de>, 2018 -# Mathias Markl <mathias.markl@mukit.at>, 2018 -# Johannes Croe <jcr@odoo.com>, 2018 +# Wolfgang Taferner, 2017 +# 4e7311735ad180fde514b5b19202d965, 2019 +# DE T2 <e2f48d4s5vd1s2@outlook.com>, 2019 +# Ermin Trevisan <trevi@twanda.com>, 2019 +# Rudolf Schnapka <rs@techno-flex.de>, 2019 +# Mathias Markl <mathias.markl@mukit.at>, 2019 +# Johannes Croe <jcr@odoo.com>, 2019 +# Martin Trigaux, 2019 +# Chris Egal <sodaswed@web.de>, 2019 +# Leon Grill <leg@odoo.com>, 2019 +# 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:48+0000\n" -"PO-Revision-Date: 2018-10-08 06:48+0000\n" -"Last-Translator: Johannes Croe <jcr@odoo.com>, 2018\n" +"POT-Creation-Date: 2019-03-20 13:49+0000\n" +"PO-Revision-Date: 2017-12-13 14:57+0000\n" +"Last-Translator: Leon Grill <leg@odoo.com>, 2019\n" "Language-Team: German (https://www.transifex.com/odoo/teams/41243/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -33,15 +37,7 @@ msgstr "% Rabatt" #. module: sale_management #: model:sale.order.template.line,name:sale_management.sale_order_template_line_1 msgid "4 Person Desk" -msgstr "" - -#. module: sale_management -#: model_terms:ir.ui.view,arch_db:sale_management.res_config_settings_view_form -msgid "" -"<em attrs=\"{'invisible': " -"[('module_sale_quotation_builder','=',False)]}\">Warning: this option will " -"install the Website app.</em>" -msgstr "" +msgstr "Schreibtisch für 4 Personen" #. module: sale_management #: model_terms:ir.ui.view,arch_db:sale_management.sale_order_portal_content_inherit_sale_management @@ -51,7 +47,7 @@ msgstr "<span>Rabatt</span>" #. module: sale_management #: model_terms:ir.ui.view,arch_db:sale_management.report_saleorder_document_inherit_sale_management msgid "<span>Optional Products</span>" -msgstr "" +msgstr "<span>Optionale Produkte</span>" #. module: sale_management #: model:ir.model.fields,field_description:sale_management.field_sale_order_template__active @@ -77,7 +73,7 @@ msgstr "Unterteilung hinzufügen" #. module: sale_management #: model_terms:ir.ui.view,arch_db:sale_management.sale_order_portal_content_inherit_sale_management msgid "Add one" -msgstr "" +msgstr "Hinzufügen" #. module: sale_management #: model_terms:ir.ui.view,arch_db:sale_management.sale_order_portal_content_inherit_sale_management @@ -92,7 +88,7 @@ msgstr "Zu Auftragszeilen hinzufügen" #. module: sale_management #: model:ir.model.fields,field_description:sale_management.field_digest_digest__kpi_all_sale_total msgid "All Sales" -msgstr "" +msgstr "Alle Verkäufe" #. module: sale_management #: model_terms:ir.ui.view,arch_db:sale_management.sale_order_template_view_search @@ -132,12 +128,12 @@ msgstr "Rechnung erzeugen" #. module: sale_management #: model_terms:ir.ui.view,arch_db:sale_management.res_config_settings_view_form msgid "Create standardized offers with default products" -msgstr "" +msgstr "Erstellen Sie standardisierte Angebote mit Standardprodukten" #. module: sale_management #: model_terms:ir.actions.act_window,help:sale_management.sale_order_template_action msgid "Create your quotation template" -msgstr "" +msgstr "Erstellen Sie Ihre Angebotsvorlage" #. module: sale_management #: model:ir.model.fields,field_description:sale_management.field_sale_order_option__create_uid @@ -171,7 +167,9 @@ msgstr "Beschreibung" #. module: sale_management #: model_terms:ir.ui.view,arch_db:sale_management.res_config_settings_view_form -msgid "Design your quotation templates using building blocks<br/>" +msgid "" +"Design your quotation templates using building blocks<br/>\n" +" <em attrs=\"{'invisible': [('module_sale_quotation_builder','=',False)]}\">Warning: this option will install the Website app.</em>" msgstr "" #. module: sale_management @@ -204,6 +202,7 @@ msgstr "Anzeigetyp" #, python-format msgid "Do not have access, skip this data for user's digest email" msgstr "" +"Kein Zugriff, überspringen Sie diese Daten für die E-Mail des Benutzers" #. module: sale_management #: sql_constraint:sale.order.template.line:0 @@ -216,6 +215,7 @@ msgstr "" #: model:ir.model.fields,help:sale_management.field_sale_order_option__sequence msgid "Gives the sequence order when displaying a list of optional products." msgstr "" +"Gibt die Reihenfolge beim Anzeigen einer Liste optionaler Produkte an." #. module: sale_management #: model:ir.model.fields,help:sale_management.field_sale_order_template_line__sequence @@ -298,7 +298,7 @@ msgstr "Anzahl der Tage für die Berechnung des Gültigkeitsdatums des Angebots" #. module: sale_management #: model:sale.order.template.option,name:sale_management.sale_order_template_option_1 msgid "Office Chair" -msgstr "" +msgstr "Büro Stuhl" #. module: sale_management #: model:ir.model.fields,field_description:sale_management.field_sale_order_template__require_payment @@ -350,6 +350,11 @@ msgid "Quantity" msgstr "Menge" #. module: sale_management +#: model_terms:ir.ui.view,arch_db:sale_management.sale_order_form_quote +msgid "Quantity:" +msgstr "Menge:" + +#. module: sale_management #: model:ir.model.fields,field_description:sale_management.field_res_config_settings__module_sale_quotation_builder msgid "Quotation Builder" msgstr "" @@ -411,7 +416,7 @@ msgstr "Löschen" #. module: sale_management #: model_terms:ir.ui.view,arch_db:sale_management.sale_order_portal_content_inherit_sale_management msgid "Remove one" -msgstr "" +msgstr "Entfernen" #. module: sale_management #: model:ir.model.fields,help:sale_management.field_sale_order_template__require_signature @@ -419,6 +424,8 @@ msgid "" "Request a online signature to the customer in order to confirm orders " "automatically." msgstr "" +"Beantragung einer Online-Signatur an den Kunden, um Bestellungen automatisch" +" zu bestätigen." #. module: sale_management #: model:ir.model.fields,help:sale_management.field_sale_order_template__require_payment @@ -426,6 +433,8 @@ msgid "" "Request an online payment to the customer in order to confirm orders " "automatically." msgstr "" +"Fordern Sie eine Online-Zahlung an den Kunden an, um Bestellungen " +"automatisch zu bestätigen." #. module: sale_management #: model:ir.model,name:sale_management.model_sale_order_option @@ -433,16 +442,16 @@ msgid "Sale Options" msgstr "Verkaufsalternativen" #. module: sale_management -#: model:ir.model,name:sale_management.model_sale_order -msgid "Sale Order" -msgstr "Verkaufsauftrag" - -#. module: sale_management #: model_terms:ir.ui.view,arch_db:sale_management.digest_digest_view_form msgid "Sales" msgstr "Verkauf" #. module: sale_management +#: model:ir.model,name:sale_management.model_sale_order +msgid "Sales Order" +msgstr "Verkaufsauftrag" + +#. module: sale_management #: model:ir.model,name:sale_management.model_sale_order_line msgid "Sales Order Line" msgstr "Auftragsposition" @@ -477,7 +486,7 @@ msgstr "Nummernfolge" #. module: sale_management #: model:ir.model.fields,help:sale_management.field_sale_order_template_line__display_type msgid "Technical field for UX purpose." -msgstr "" +msgstr "Technisches Feld für den UX zweck" #. module: sale_management #: model:ir.model.fields,field_description:sale_management.field_sale_order_template__note @@ -512,6 +521,11 @@ msgid "Unit Price" msgstr "Preis pro ME" #. module: sale_management +#: model_terms:ir.ui.view,arch_db:sale_management.sale_order_form_quote +msgid "Unit Price:" +msgstr "Preis pro Einheit" + +#. module: sale_management #: model:ir.model.fields,field_description:sale_management.field_sale_order_template_line__product_uom_id msgid "Unit of Measure" msgstr "Mengeneinheit" @@ -531,7 +545,7 @@ msgid "" 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_purchase/i18n/hu.po b/addons/sale_purchase/i18n/hu.po index 59d2138cefe..3e7d7635902 100644 --- a/addons/sale_purchase/i18n/hu.po +++ b/addons/sale_purchase/i18n/hu.po @@ -45,7 +45,7 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:sale_purchase.exception_purchase_on_sale_quantity_decreased #: model_terms:ir.ui.view,arch_db:sale_purchase.exception_sale_on_purchase_cancellation msgid "Exception(s):" -msgstr "" +msgstr "Kivétel(ek):" #. module: sale_purchase #: model:ir.model.fields,field_description:sale_purchase.field_sale_order_line__purchase_line_ids diff --git a/addons/sale_stock/i18n/hu.po b/addons/sale_stock/i18n/hu.po index 417d604039e..a0d6513bc52 100644 --- a/addons/sale_stock/i18n/hu.po +++ b/addons/sale_stock/i18n/hu.po @@ -198,7 +198,7 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:sale_stock.exception_on_picking #: model_terms:ir.ui.view,arch_db:sale_stock.exception_on_so msgid "Exception(s):" -msgstr "" +msgstr "Kivétel(ek):" #. module: sale_stock #: model:ir.model.fields,help:sale_stock.field_sale_order__picking_policy diff --git a/addons/snailmail/i18n/pl.po b/addons/snailmail/i18n/pl.po index 6ceab4bb939..418704eea2f 100644 --- a/addons/snailmail/i18n/pl.po +++ b/addons/snailmail/i18n/pl.po @@ -3,22 +3,25 @@ # * snailmail # # Translators: -# zbik2607 <darek@krokus.com.pl>, 2018 -# Grzegorz Grzelak <grzegorz.grzelak@openglobe.pl>, 2018 -# Judyta Kaźmierczak <judyta.kazmierczak@openglobe.pl>, 2018 -# Piotr Szlązak <szlazakpiotr@gmail.com>, 2018 -# Marcin Młynarczyk <mlynarczyk@gmail.com>, 2018 -# Andrzej Donczew <a.donczew@hadron.eu.com>, 2018 -# Martin Trigaux, 2018 -# Maksym <ms@myodoo.pl>, 2018 +# Martin Trigaux, 2019 +# Dariusz Żbikowski <darek@krokus.com.pl>, 2019 +# Grzegorz Grzelak <grzegorz.grzelak@openglobe.pl>, 2019 +# Judyta Kaźmierczak <judyta.kazmierczak@openglobe.pl>, 2019 +# Piotr Szlązak <szlazakpiotr@gmail.com>, 2019 +# Marcin Młynarczyk <mlynarczyk@gmail.com>, 2019 +# Andrzej Donczew <a.donczew@hadron.eu.com>, 2019 +# Piotr Cierkosz <piotr.w.cierkosz@gmail.com>, 2019 +# Wiktor Kaźmierczak <wik92tor@wp.pl>, 2019 +# Maksym <ms@myodoo.pl>, 2019 +# Karol Rybak <karolrybak85@gmail.com>, 2019 # 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-30 12:25+0000\n" -"PO-Revision-Date: 2018-08-24 09:25+0000\n" -"Last-Translator: Maksym <ms@myodoo.pl>, 2018\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2019-03-20 14:59+0000\n" +"Last-Translator: Karol Rybak <karolrybak85@gmail.com>, 2019\n" "Language-Team: Polish (https://www.transifex.com/odoo/teams/41243/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -27,23 +30,102 @@ msgstr "" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" #. module: snailmail -#: code:addons/snailmail/models/snailmail_letter.py:249 +#. 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 +#. 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 +#. openerp-web +#: code:addons/snailmail/static/src/js/thread_widget.js:137 +#, python-format +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 +#. 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 "Adres" + +#. 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:215 +#: 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 "Załącznik" #. module: snailmail +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__attachment_fname +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 "" @@ -54,24 +136,60 @@ 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 "Anuluj" #. 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 "Anuluj powiadomienie w przypadku niepowodzenia" + +#. module: snailmail +#. openerp-web +#: code:addons/snailmail/static/src/xml/thread.xml:23 #: selection:snailmail.letter,state:0 +#, python-format msgid "Canceled" msgstr "Anulowano" #. module: snailmail -#: model_terms:ir.ui.view,arch_db:snailmail.res_config_settings_view_form -msgid "Choose the ink used to print documents" -msgstr "" +#: 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 "Miasto" #. module: snailmail -#: model_terms:ir.ui.view,arch_db:snailmail.res_config_settings_view_form -msgid "Choose the layout to print documents" -msgstr "" +#. 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 "Zamknij" #. module: snailmail #: model:ir.model.fields,field_description:snailmail.field_res_company__snailmail_color @@ -80,6 +198,12 @@ msgid "Color" msgstr "Kolor" #. module: snailmail +#: selection:mail.compose.message,message_type:0 +#: selection:mail.message,message_type:0 +msgid "Comment" +msgstr "Komentarz" + +#. module: snailmail #: model:ir.model,name:snailmail.model_res_company msgid "Companies" msgstr "Firmy" @@ -100,41 +224,128 @@ msgid "Contact" msgstr "Kontakt" #. 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 "Kraj" + +#. 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 "Utworzona przez" #. 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 "Data utworzenia" #. module: snailmail +#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_cancel +msgid "Discard delivery failures" +msgstr "Odrzuć błędy dostarczenia" + +#. 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 "Odrzuć powiadomienie dla ponownego wysłania przez model" + +#. 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 "Nazwa wyświetlana" #. module: snailmail +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__attachment_datas +#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_list +msgid "Document" +msgstr "Dokument" + +#. module: snailmail #: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__res_id msgid "Document ID" msgstr "ID dokumentu" #. module: snailmail -#: selection:snailmail.letter,state:0 -msgid "Draft" -msgstr "Projekt" +#: selection:mail.compose.message,message_type:0 +#: selection:mail.message,message_type:0 +msgid "Email" +msgstr "E-mail" #. 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 "Błąd" #. 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 "Wiadomość pomocy" + +#. 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 "ID" #. 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 "W kolejce" @@ -146,33 +357,82 @@ msgstr "Informacja" #. 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 "Data ostatniej modyfikacji" #. 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 "Ostatnio aktualizowane przez" #. 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 "Data ostatniej aktualizacji" #. module: snailmail -#: model:ir.actions.act_window,name:snailmail.action_mail_letters -#: model:ir.ui.menu,name:snailmail.menu_snailmail_letters +#: 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 "Letter" + +#. 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 "Wiadomość" + +#. 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 "" +"Typ wiadomości: mail jako wiadomość, powiadomienie jako informacja " +"systemowa, komentarz jako odpowiedź na inne wiadomości." + +#. 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 "Model" #. module: snailmail -#: code:addons/snailmail/models/snailmail_letter.py:211 +#: 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 "" @@ -183,15 +443,17 @@ msgid "Optional report to print and attach" msgstr "Opcjonalny raport do wydrukowania i załączenia" #. module: snailmail -#: code:addons/snailmail/models/snailmail_letter.py:264 -#, 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" -msgstr "" +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter_missing_required_fields__partner_id +msgid "Partner" +msgstr "Kontrahent" #. module: snailmail #: model:ir.model.fields,field_description:snailmail.field_res_config_settings__snailmail_duplex @@ -209,11 +471,23 @@ 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 "Adresat" #. module: snailmail +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__reference +msgid "Related Record" +msgstr "" + +#. module: snailmail #: model:ir.model,name:snailmail.model_ir_actions_report msgid "Report Action" msgstr "" @@ -224,16 +498,55 @@ msgid "Send Now" msgstr "Wyślij teraz" #. module: snailmail +#. openerp-web +#: code:addons/snailmail/static/src/xml/thread.xml:19 #: selection:snailmail.letter,state:0 +#, python-format msgid "Sent" msgstr "Wysłane" #. module: snailmail +#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__user_id +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 "" #. module: snailmail +#: model:ir.actions.act_window,name:snailmail.action_mail_letters +#: model:ir.ui.menu,name:snailmail.menu_snailmail_letters +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 @@ -241,12 +554,58 @@ 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 "Stan" + +#. module: snailmail #: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__state msgid "Status" msgstr "Status" #. module: snailmail -#: code:addons/snailmail/models/snailmail_letter.py:213 +#: 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 "Ulica" + +#. module: snailmail +#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_missing_required_fields +msgid "Street 2..." +msgstr "Ulica 2..." + +#. module: snailmail +#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_missing_required_fields +msgid "Street..." +msgstr "Ulica..." + +#. 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 "Ulica2" + +#. module: snailmail +#: selection:mail.compose.message,message_type:0 +#: selection:mail.message,message_type:0 +msgid "System notification" +msgstr "Powiadomienie systemowe" + +#. 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" @@ -254,33 +613,62 @@ msgid "" msgstr "" #. module: snailmail -#: code:addons/snailmail/models/snailmail_letter.py:209 +#: 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:242 +#: 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_snailmail_letter__user_id -msgid "User sending the letter" +#: 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 "Typ" + +#. 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" +"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:207 +#: 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 " @@ -288,9 +676,20 @@ msgid "" msgstr "" #. module: snailmail -#: code:addons/snailmail/models/snailmail_letter.py:204 +#: 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 "Kod pocztowy" + +#. 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 "Kod pocztowy" diff --git a/addons/stock/i18n/hu.po b/addons/stock/i18n/hu.po index f9da28fc4ae..fe388b828c6 100644 --- a/addons/stock/i18n/hu.po +++ b/addons/stock/i18n/hu.po @@ -1800,7 +1800,7 @@ msgstr "Teljesítés kelte" #: model:ir.model.fields,help:stock.field_stock_move_line__tracking #: model:ir.model.fields,help:stock.field_stock_scrap__tracking msgid "Ensure the traceability of a storable product in your warehouse." -msgstr "" +msgstr "A raktárban tárolható termékek nyomon követésének biztosítása." #. module: stock #. openerp-web @@ -1827,7 +1827,7 @@ msgstr "" #. module: stock #: model_terms:ir.ui.view,arch_db:stock.exception_on_picking msgid "Exception(s):" -msgstr "" +msgstr "Kivétel(ek):" #. module: stock #: model:ir.model.fields,field_description:stock.field_stock_move__date_expected @@ -2371,7 +2371,7 @@ msgstr "Behozatal helye" #: code:addons/stock/models/stock_scrap.py:138 #, python-format msgid "Insufficient Quantity" -msgstr "" +msgstr "Elégtelen mennyiség" #. module: stock #: model_terms:ir.ui.view,arch_db:stock.stock_move_line_view_search @@ -2604,7 +2604,7 @@ msgstr "" #: model:ir.model.fields,field_description:stock.field_stock_move_line__is_locked #: model:ir.model.fields,field_description:stock.field_stock_picking__is_locked msgid "Is Locked" -msgstr "" +msgstr "Zárolt" #. module: stock #: model:ir.model.fields,field_description:stock.field_stock_location__return_location @@ -3088,7 +3088,7 @@ msgstr "Gyártás" #. module: stock #: selection:stock.picking.type,code:0 msgid "Manufacturing Operation" -msgstr "" +msgstr "Gyártási művelet" #. module: stock #: model_terms:ir.ui.view,arch_db:stock.view_picking_form @@ -3517,7 +3517,7 @@ msgstr "Csak egy termék" #: model_terms:ir.ui.view,arch_db:stock.view_pickingtype_filter #, python-format msgid "Operation Type" -msgstr "" +msgstr "Művelet típus" #. module: stock #: model:ir.model.fields,field_description:stock.field_stock_picking_type__return_picking_type_id diff --git a/addons/stock/models/product.py b/addons/stock/models/product.py index 339d41f27b9..c287ef9b4e9 100644 --- a/addons/stock/models/product.py +++ b/addons/stock/models/product.py @@ -526,7 +526,8 @@ class ProductTemplate(models.Model): @api.depends( 'product_variant_ids', - 'product_variant_ids.stock_quant_ids', + 'product_variant_ids.stock_move_ids.product_qty', + 'product_variant_ids.stock_move_ids.state', ) def _compute_quantities(self): res = self._compute_quantities_dict() diff --git a/addons/stock/report/report_deliveryslip.xml b/addons/stock/report/report_deliveryslip.xml index 500e8901899..7ee55009ef4 100644 --- a/addons/stock/report/report_deliveryslip.xml +++ b/addons/stock/report/report_deliveryslip.xml @@ -93,7 +93,7 @@ <td t-if="has_serial_number and move_line.lot_name" groups="stock.group_lot_on_delivery_slip"> <span t-field="move_line.lot_name"/> </td> - <td t-else="" groups="stock.group_lot_on_delivery_slip"> + <td t-elif="has_serial_number" groups="stock.group_lot_on_delivery_slip"> <span t-field="move_line.lot_id.name"/> </td> <td class="text-center"> diff --git a/addons/stock_landed_costs/i18n/nb.po b/addons/stock_landed_costs/i18n/nb.po index ad777b60553..b011676b957 100644 --- a/addons/stock_landed_costs/i18n/nb.po +++ b/addons/stock_landed_costs/i18n/nb.po @@ -3,16 +3,18 @@ # * stock_landed_costs # # Translators: -# Martin Trigaux, 2018 # Torvald Baade Bringsvor <bringsvor@bringsvor.com>, 2018 -# Jorunn D. Newth, 2018 +# Viktor Basso <viktor@voit.no>, 2018 +# Martin Trigaux, 2019 +# Jorunn D. Newth, 2019 +# msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.1\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" -"Last-Translator: Jorunn D. Newth, 2018\n" +"POT-Creation-Date: 2019-01-16 07:59+0000\n" +"PO-Revision-Date: 2016-08-05 13:10+0000\n" +"Last-Translator: Jorunn D. Newth, 2019\n" "Language-Team: Norwegian Bokmål (https://www.transifex.com/odoo/teams/41243/nb/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -30,6 +32,11 @@ msgid " already out" msgstr "allerede ute" #. module: stock_landed_costs +#: model_terms:ir.ui.view,arch_db:stock_landed_costs.stock_landed_cost_view_kanban +msgid "<i class=\"fa fa-clock-o\" title=\"Date\" role=\"img\" aria-label=\"Date\"/>" +msgstr "" + +#. module: stock_landed_costs #: model:ir.model.fields,field_description:stock_landed_costs.field_stock_landed_cost_lines__account_id msgid "Account" msgstr "Konto" @@ -45,6 +52,16 @@ msgid "Action Needed" msgstr "Handling påkrevd" #. module: stock_landed_costs +#: model:ir.model.fields,field_description:stock_landed_costs.field_stock_landed_cost__activity_ids +msgid "Activities" +msgstr "Aktiviteter" + +#. module: stock_landed_costs +#: model:ir.model.fields,field_description:stock_landed_costs.field_stock_landed_cost__activity_state +msgid "Activity State" +msgstr "Aktivitetsstatus" + +#. module: stock_landed_costs #: model:ir.model.fields,field_description:stock_landed_costs.field_stock_valuation_adjustment_lines__additional_landed_cost msgid "Additional Landed Cost" msgstr "" @@ -236,6 +253,11 @@ msgstr "Tidligere (styk)kostnad" #. module: stock_landed_costs #: model_terms:ir.ui.view,arch_db:stock_landed_costs.view_stock_landed_cost_search +msgid "Future Activities" +msgstr "Fremtidige aktiviteter" + +#. module: stock_landed_costs +#: model_terms:ir.ui.view,arch_db:stock_landed_costs.view_stock_landed_cost_search msgid "Group By" msgstr "Grupper etter" @@ -364,6 +386,11 @@ msgid "Last Updated on" msgstr "Sist oppdatert" #. module: stock_landed_costs +#: model_terms:ir.ui.view,arch_db:stock_landed_costs.view_stock_landed_cost_search +msgid "Late Activities" +msgstr "Forsinkede aktiviteter" + +#. module: stock_landed_costs #: model:ir.model.fields,field_description:stock_landed_costs.field_stock_landed_cost__message_main_attachment_id msgid "Main Attachment" msgstr "" @@ -392,6 +419,21 @@ msgid "New" msgstr "Ny" #. module: stock_landed_costs +#: model:ir.model.fields,field_description:stock_landed_costs.field_stock_landed_cost__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "Neste aktivitetsfrist" + +#. module: stock_landed_costs +#: model:ir.model.fields,field_description:stock_landed_costs.field_stock_landed_cost__activity_summary +msgid "Next Activity Summary" +msgstr "Oppsummering av neste aktivitet" + +#. module: stock_landed_costs +#: model:ir.model.fields,field_description:stock_landed_costs.field_stock_landed_cost__activity_type_id +msgid "Next Activity Type" +msgstr "Neste aktivitetstype" + +#. module: stock_landed_costs #: code:addons/stock_landed_costs/models/stock_landed_cost.py:91 #, python-format msgid "" @@ -430,6 +472,16 @@ msgid "Only draft landed costs can be validated" msgstr "" #. module: stock_landed_costs +#: selection:stock.landed.cost,activity_state:0 +msgid "Overdue" +msgstr "Forfalt" + +#. module: stock_landed_costs +#: selection:stock.landed.cost,activity_state:0 +msgid "Planned" +msgstr "Planlagt" + +#. module: stock_landed_costs #: code:addons/stock_landed_costs/models/stock_landed_cost.py:314 #, python-format msgid "Please configure Stock Expense Account for product: %s." @@ -467,6 +519,16 @@ msgid "Quantity" msgstr "Antall" #. module: stock_landed_costs +#: model:ir.model.fields,field_description:stock_landed_costs.field_stock_landed_cost__activity_user_id +msgid "Responsible User" +msgstr "Ansvarlig bruker" + +#. module: stock_landed_costs +#: model_terms:ir.ui.view,arch_db:stock_landed_costs.view_stock_landed_cost_search +msgid "Show all records which has next action date is before today" +msgstr "Vis alle oppføringer som har en neste tiltak-dato før dagen i dag" + +#. module: stock_landed_costs #: model:ir.model.fields,field_description:stock_landed_costs.field_product_product__split_method #: model:ir.model.fields,field_description:stock_landed_costs.field_product_template__split_method #: model:ir.model.fields,field_description:stock_landed_costs.field_stock_landed_cost_lines__split_method @@ -484,6 +546,19 @@ msgid "Status" msgstr "Status" #. module: stock_landed_costs +#: model:ir.model.fields,help:stock_landed_costs.field_stock_landed_cost__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 "" +"Status basert på aktiviteter\n" +"Utgått: Fristen er allerede passert\n" +"I dag: Aktiviteten skal gjøres i dag\n" +"Planlagt: Fremtidige aktiviteter." + +#. module: stock_landed_costs #: model:ir.model,name:stock_landed_costs.model_stock_landed_cost msgid "Stock Landed Cost" msgstr "" @@ -500,6 +575,16 @@ msgid "Stock Move" msgstr "Lagerflytting" #. module: stock_landed_costs +#: selection:stock.landed.cost,activity_state:0 +msgid "Today" +msgstr "I dag" + +#. module: stock_landed_costs +#: model_terms:ir.ui.view,arch_db:stock_landed_costs.view_stock_landed_cost_search +msgid "Today Activities" +msgstr "Dagens aktiviteter" + +#. module: stock_landed_costs #: model:ir.model.fields,field_description:stock_landed_costs.field_stock_landed_cost__amount_total msgid "Total" msgstr "Total" diff --git a/addons/stock_picking_batch/i18n/nb.po b/addons/stock_picking_batch/i18n/nb.po index 64ef36dcba0..7b6826b3619 100644 --- a/addons/stock_picking_batch/i18n/nb.po +++ b/addons/stock_picking_batch/i18n/nb.po @@ -3,15 +3,17 @@ # * stock_picking_batch # # Translators: -# Martin Trigaux, 2018 -# Jorunn D. Newth, 2018 +# Viktor Basso <viktor@voit.no>, 2018 +# Martin Trigaux, 2019 +# Jorunn D. Newth, 2019 +# msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.1\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" -"Last-Translator: Jorunn D. Newth, 2018\n" +"POT-Creation-Date: 2018-12-24 10:58+0000\n" +"PO-Revision-Date: 2017-12-13 14:58+0000\n" +"Last-Translator: Jorunn D. Newth, 2019\n" "Language-Team: Norwegian Bokmål (https://www.transifex.com/odoo/teams/41243/nb/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -31,6 +33,11 @@ msgstr "<strong>Forpakning</strong>" #. module: stock_picking_batch #: model_terms:ir.ui.view,arch_db:stock_picking_batch.report_picking_batch +msgid "<strong>Product Barcode</strong>" +msgstr "" + +#. module: stock_picking_batch +#: model_terms:ir.ui.view,arch_db:stock_picking_batch.report_picking_batch msgid "<strong>Responsible:</strong>" msgstr "" @@ -40,6 +47,16 @@ msgid "Action Needed" msgstr "Handling påkrevd" #. module: stock_picking_batch +#: model:ir.model.fields,field_description:stock_picking_batch.field_stock_picking_batch__activity_ids +msgid "Activities" +msgstr "Aktiviteter" + +#. module: stock_picking_batch +#: model:ir.model.fields,field_description:stock_picking_batch.field_stock_picking_batch__activity_state +msgid "Activity State" +msgstr "Aktivitetsstatus" + +#. module: stock_picking_batch #: model_terms:ir.ui.view,arch_db:stock_picking_batch.stock_picking_to_batch_form msgid "Add pickings to batch" msgstr "" @@ -185,6 +202,11 @@ msgstr "Følgere (partnere)" #. module: stock_picking_batch #: model_terms:ir.ui.view,arch_db:stock_picking_batch.stock_picking_batch_filter +msgid "Future Activities" +msgstr "Fremtidige aktiviteter" + +#. module: stock_picking_batch +#: model_terms:ir.ui.view,arch_db:stock_picking_batch.stock_picking_batch_filter msgid "Group By" msgstr "Grupper etter" @@ -244,6 +266,11 @@ msgid "Last Updated on" msgstr "Sist oppdatert" #. module: stock_picking_batch +#: model_terms:ir.ui.view,arch_db:stock_picking_batch.stock_picking_batch_filter +msgid "Late Activities" +msgstr "Forsinkede aktiviteter" + +#. module: stock_picking_batch #: model:ir.model.fields,help:stock_picking_batch.field_stock_picking_batch__picking_ids msgid "List of picking associated to this batch" msgstr "" @@ -269,6 +296,21 @@ msgid "Name of the batch picking" msgstr "" #. module: stock_picking_batch +#: model:ir.model.fields,field_description:stock_picking_batch.field_stock_picking_batch__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "Neste aktivitetsfrist" + +#. module: stock_picking_batch +#: model:ir.model.fields,field_description:stock_picking_batch.field_stock_picking_batch__activity_summary +msgid "Next Activity Summary" +msgstr "Oppsummering av neste aktivitet" + +#. module: stock_picking_batch +#: model:ir.model.fields,field_description:stock_picking_batch.field_stock_picking_batch__activity_type_id +msgid "Next Activity Type" +msgstr "Neste aktivitetstype" + +#. module: stock_picking_batch #: code:addons/stock_picking_batch/models/stock_picking_batch.py:52 #, python-format msgid "Nothing to print." @@ -300,6 +342,11 @@ msgid "Number of unread messages" msgstr "Antall uleste meldinger" #. module: stock_picking_batch +#: selection:stock.picking.batch,activity_state:0 +msgid "Overdue" +msgstr "Forfalt" + +#. module: stock_picking_batch #: model:ir.model.fields,help:stock_picking_batch.field_stock_picking_batch__user_id msgid "Person responsible for this batch picking" msgstr "" @@ -331,6 +378,11 @@ msgid "Pickings" msgstr "Plukkinger" #. module: stock_picking_batch +#: selection:stock.picking.batch,activity_state:0 +msgid "Planned" +msgstr "Planlagt" + +#. module: stock_picking_batch #: model_terms:ir.ui.view,arch_db:stock_picking_batch.stock_picking_batch_form msgid "Print" msgstr "Skriv ut" @@ -352,6 +404,11 @@ msgid "Responsible" msgstr "Ansvarlig" #. module: stock_picking_batch +#: model:ir.model.fields,field_description:stock_picking_batch.field_stock_picking_batch__activity_user_id +msgid "Responsible User" +msgstr "Ansvarlig bruker" + +#. module: stock_picking_batch #: model_terms:ir.ui.view,arch_db:stock_picking_batch.stock_picking_batch_filter #: selection:stock.picking.batch,state:0 msgid "Running" @@ -373,6 +430,11 @@ msgid "Select a batch" msgstr "" #. module: stock_picking_batch +#: model_terms:ir.ui.view,arch_db:stock_picking_batch.stock_picking_batch_filter +msgid "Show all records which has next action date is before today" +msgstr "Vis alle oppføringer som har en neste tiltak-dato før dagen i dag" + +#. module: stock_picking_batch #: code:addons/stock_picking_batch/models/stock_picking_batch.py:59 #, python-format msgid "" @@ -404,6 +466,19 @@ msgid "Status" msgstr "Status" #. module: stock_picking_batch +#: model:ir.model.fields,help:stock_picking_batch.field_stock_picking_batch__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 "" +"Status basert på aktiviteter\n" +"Utgått: Fristen er allerede passert\n" +"I dag: Aktiviteten skal gjøres i dag\n" +"Planlagt: Fremtidige aktiviteter." + +#. module: stock_picking_batch #: model_terms:ir.ui.view,arch_db:stock_picking_batch.stock_picking_batch_form #: model_terms:ir.ui.view,arch_db:stock_picking_batch.stock_picking_batch_tree msgid "Stock Batch Picking" @@ -429,6 +504,16 @@ msgid "To take from:" msgstr "" #. module: stock_picking_batch +#: selection:stock.picking.batch,activity_state:0 +msgid "Today" +msgstr "I dag" + +#. module: stock_picking_batch +#: model_terms:ir.ui.view,arch_db:stock_picking_batch.stock_picking_batch_filter +msgid "Today Activities" +msgstr "Dagens aktiviteter" + +#. module: stock_picking_batch #: model:ir.model,name:stock_picking_batch.model_stock_picking msgid "Transfer" msgstr "Overføring" diff --git a/addons/web/static/src/js/views/list/list_renderer.js b/addons/web/static/src/js/views/list/list_renderer.js index ad1a95cd14f..46b8d58d05e 100644 --- a/addons/web/static/src/js/views/list/list_renderer.js +++ b/addons/web/static/src/js/views/list/list_renderer.js @@ -25,6 +25,7 @@ var DECORATIONS = [ ]; var FIELD_CLASSES = { + char: 'o_list_char', float: 'o_list_number', integer: 'o_list_number', monetary: 'o_list_number', diff --git a/addons/web/static/src/scss/list_view.scss b/addons/web/static/src/scss/list_view.scss index d7a0384ed22..3d25258eac5 100644 --- a/addons/web/static/src/scss/list_view.scss +++ b/addons/web/static/src/scss/list_view.scss @@ -30,12 +30,10 @@ &.o_list_number { text-align: right; } - &.o_list_text { - white-space: pre-wrap; - } + &.o_list_char, + &.o_list_text, &.o_list_many2one { white-space: pre-wrap; - } } @@ -180,11 +178,14 @@ .o_list_record_remove_header, .o_handle_cell { width: 32px; } + &>tbody>tr>td.o_list_char, &>tbody>tr>td.o_list_many2one { white-space: nowrap; } // checkboxes in editable lists should be clickable and activate the row .o_data_row:not(.o_selected_row) .o_data_cell { + &.o_toggle_button_cell:not(.o_readonly_modifier) button, // registry: toggle_button + &.o_boolean_favorite_cell:not(.o_readonly_modifier) .o_favorite, // registry: boolean_favorite .custom-checkbox:not(.o_readonly_modifier) { pointer-events: none; } 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 fef68115181..f9ffa405796 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 @@ -1093,7 +1093,7 @@ QUnit.module('fields', {}, function () { await testUtils.form.clickEdit(form); - assert.equal(form.$('.o_field_one2many td[class="o_data_cell"]').text(), "#20#21#22#23#24#25#26#27#28#29", + assert.equal(form.$('.o_field_one2many .o_list_char').text(), "#20#21#22#23#24#25#26#27#28#29", "should display the records in order"); await testUtils.dom.click(form.$('.o_field_one2many .o_list_view tbody tr:first td:first')); @@ -1102,12 +1102,12 @@ QUnit.module('fields', {}, function () { // the domain fail if the widget does not use the allready loaded data. await testUtils.form.clickDiscard(form); - assert.equal(form.$('.o_field_one2many td[class="o_data_cell"]').text(), "blurp#21#22#23#24#25#26#27#28#29", + assert.equal(form.$('.o_field_one2many .o_list_char').text(), "blurp#21#22#23#24#25#26#27#28#29", "should display the records in order with the changes"); await testUtils.dom.click($('.modal .modal-footer button:first')); - assert.equal(form.$('.o_field_one2many td[class="o_data_cell"]').text(), "#20#21#22#23#24#25#26#27#28#29", + assert.equal(form.$('.o_field_one2many .o_list_char').text(), "#20#21#22#23#24#25#26#27#28#29", "should cancel changes and display the records in order"); await testUtils.form.clickEdit(form); @@ -1119,7 +1119,7 @@ QUnit.module('fields', {}, function () { { position: 'top' } ); - assert.equal(form.$('.o_field_one2many td[class="o_data_cell"]').text(), "#20#30#31#32#33#34#35#36#37#38", + assert.equal(form.$('.o_field_one2many .o_list_char').text(), "#20#30#31#32#33#34#35#36#37#38", "should display the records in order after resequence (display record with turtle_int=0)"); // Drag and drop the third line in second position @@ -1129,17 +1129,17 @@ QUnit.module('fields', {}, function () { { position: 'top' } ); - assert.equal(form.$('.o_field_one2many td[class="o_data_cell"]').text(), "#20#39#40#41#42#43#44#45#46#47", + assert.equal(form.$('.o_field_one2many .o_list_char').text(), "#20#39#40#41#42#43#44#45#46#47", "should display the records in order after resequence (display record with turtle_int=0)"); await testUtils.form.clickDiscard(form); - assert.equal(form.$('.o_field_one2many td[class="o_data_cell"]').text(), "#20#39#40#41#42#43#44#45#46#47", + assert.equal(form.$('.o_field_one2many .o_list_char').text(), "#20#39#40#41#42#43#44#45#46#47", "should display the records in order after resequence"); await testUtils.dom.click($('.modal .modal-footer button:first')); - assert.equal(form.$('.o_field_one2many td[class="o_data_cell"]').text(), "#20#21#22#23#24#25#26#27#28#29", + assert.equal(form.$('.o_field_one2many .o_list_char').text(), "#20#21#22#23#24#25#26#27#28#29", "should cancel changes and display the records in order"); form.destroy(); diff --git a/addons/web/tests/test_menu.py b/addons/web/tests/test_menu.py index e608196ecd0..d60721c162a 100644 --- a/addons/web/tests/test_menu.py +++ b/addons/web/tests/test_menu.py @@ -1,13 +1,10 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo.tests.common import tagged -import unittest - +from odoo.tests.common import BaseCase from ..controllers import main -@tagged('standard', 'at_install') -class ActionMungerTest(unittest.TestCase): +class ActionMungerTest(BaseCase): def test_actual_treeview(self): action = { "views": [[False, "tree"], [False, "form"], diff --git a/addons/web/tests/test_serving_base.py b/addons/web/tests/test_serving_base.py index b66d2d5b266..e1c6c7d5ab0 100644 --- a/addons/web/tests/test_serving_base.py +++ b/addons/web/tests/test_serving_base.py @@ -2,9 +2,8 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. import random -import unittest -from odoo.tests.common import tagged +from odoo.tests.common import BaseCase from odoo.tools import topological_sort @@ -14,8 +13,7 @@ def sample(population): random.randint(0, min(len(population), 5))) -@tagged('standard', 'at_install') -class TestModulesLoading(unittest.TestCase): +class TestModulesLoading(BaseCase): def setUp(self): self.mods = [str(i) for i in range(1000)] diff --git a/addons/web_editor/static/src/js/wysiwyg/plugin/helper.js b/addons/web_editor/static/src/js/wysiwyg/plugin/helper.js index a025d6a0082..1738e6e7b48 100644 --- a/addons/web_editor/static/src/js/wysiwyg/plugin/helper.js +++ b/addons/web_editor/static/src/js/wysiwyg/plugin/helper.js @@ -1885,6 +1885,9 @@ var HelperPlugin = AbstractPlugin.extend({ // Create empty text node to have a range into the node if (range.sc.tagName && !dom.isVoid(range.sc) && !range.sc.childNodes[range.so]) { $(range.sc).append(invisible); + if (invisible.previousSibling && invisible.previousSibling.tagName === "BR") { + invisible.previousSibling.remove(); + } range = this.context.invoke('editor.setRange', invisible, 0); } diff --git a/addons/web_editor/static/src/js/wysiwyg/plugin/text.js b/addons/web_editor/static/src/js/wysiwyg/plugin/text.js index f2834c531f7..9014b367fee 100644 --- a/addons/web_editor/static/src/js/wysiwyg/plugin/text.js +++ b/addons/web_editor/static/src/js/wysiwyg/plugin/text.js @@ -780,7 +780,10 @@ var TextPlugin = AbstractPlugin.extend({ clipboardData = e.originalEvent.clipboardData.getData('text/plain'); // get that text as an array of text nodes separated by <br> where needed var allNewlines = /\n/g; - clipboardData = $('<p>' + clipboardData.replace(allNewlines, '<br>') + '</p>').contents().toArray(); + clipboardData = _.str.trim(clipboardData) + .replace(/</g, '<').replace(/>/g, '>') + .replace(allNewlines, '<br>'); + clipboardData = $('<p>' + clipboardData + '</p>').contents().toArray(); } // Delete selection diff --git a/addons/web_editor/static/tests/wysiwyg_keyboard_tests.js b/addons/web_editor/static/tests/wysiwyg_keyboard_tests.js index 6c08fec0d98..8721407230c 100644 --- a/addons/web_editor/static/tests/wysiwyg_keyboard_tests.js +++ b/addons/web_editor/static/tests/wysiwyg_keyboard_tests.js @@ -814,6 +814,18 @@ var keyboardTestsChar = [{ start: "b:contents(0)->1", }, }, + { + name: "'a' in empty li", + content: '<ul><li><p><br></p></li></ul>', + steps: [{ + start: "p->1", + key: 'a', + }], + test: { + content: '<ul><li><p>a</p></li></ul>', + start: "p:contents(0)->1", + }, + }, ]; QUnit.test('Char', function (assert) { @@ -2248,6 +2260,25 @@ var keyboardTestsComplex = [{ start: "p:eq(1)->0", }, }, + // List indent + { + name: "ENTER -> TAB -> a' at end of li > p (split -> indent -> write)", + content: '<ul><li><p>a</p></li></ul>', + steps: [{ + start: "p:contents()[0]->1", + key: 'ENTER', + }, + { + key: 'TAB', + }, + { + key: 'a', + }], + test: { + content: '<ul><li><p>a</p></li><li class="o_indent"><ul><li><p>a</p></li></ul></li></ul>', + start: "p:eq(1):contents()[0]->1", + }, + }, ]; QUnit.test('Complex', function (assert) { diff --git a/addons/web_editor/tests/test_converter.py b/addons/web_editor/tests/test_converter.py index cfa62e52ac2..724b464368b 100644 --- a/addons/web_editor/tests/test_converter.py +++ b/addons/web_editor/tests/test_converter.py @@ -2,17 +2,16 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. import textwrap -import unittest from lxml import etree, html from lxml.builder import E from odoo.tests import common +from odoo.tests.common import BaseCase from odoo.addons.web_editor.models.ir_qweb import html_to_text -@common.tagged('standard', 'at_install') -class TestHTMLToText(unittest.TestCase): +class TestHTMLToText(BaseCase): def test_rawstring(self): self.assertEqual( "foobar", diff --git a/addons/website/models/res_config_settings.py b/addons/website/models/res_config_settings.py index 64850911c1b..1247b73799a 100644 --- a/addons/website/models/res_config_settings.py +++ b/addons/website/models/res_config_settings.py @@ -23,8 +23,7 @@ class ResConfigSettings(models.TransientModel): language_count = fields.Integer(string='Number of languages', compute='_compute_language_count', readonly=True) website_default_lang_id = fields.Many2one( string='Default language', related='website_id.default_lang_id', readonly=False, - relation='res.lang', required=False, - oldname='default_lang_id') + relation='res.lang', oldname='default_lang_id') website_default_lang_code = fields.Char( 'Default language code', related='website_id.default_lang_code', readonly=False, oldname='default_lang_code') diff --git a/addons/website/tests/test_converter.py b/addons/website/tests/test_converter.py index 0568f02d5e4..9a688c74ed9 100644 --- a/addons/website/tests/test_converter.py +++ b/addons/website/tests/test_converter.py @@ -1,13 +1,11 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -import unittest from odoo.addons.http_routing.models.ir_http import slugify, unslug -from odoo.tests.common import tagged +from odoo.tests.common import BaseCase -@tagged('standard', 'at_install') -class TestUnslug(unittest.TestCase): +class TestUnslug(BaseCase): def test_unslug(self): tests = { @@ -28,9 +26,7 @@ class TestUnslug(unittest.TestCase): for slug, expected in tests.items(): self.assertEqual(unslug(slug), expected) - -@tagged('standard', 'at_install') -class TestTitleToSlug(unittest.TestCase): +class TestTitleToSlug(BaseCase): """ Those tests should pass with or without python-slugify See website/models/website.py slugify method diff --git a/addons/website_blog/static/src/js/s_latest_posts_frontend.js b/addons/website_blog/static/src/js/s_latest_posts_frontend.js index 324f0cd51ca..87f3ffc5f6f 100644 --- a/addons/website_blog/static/src/js/s_latest_posts_frontend.js +++ b/addons/website_blog/static/src/js/s_latest_posts_frontend.js @@ -23,7 +23,10 @@ publicWidget.registry.js_get_posts = publicWidget.Widget.extend({ this.$target.empty(); // Compatibility with db that saved content inside by mistake this.$target.attr('contenteditable', 'False'); // Prevent user edition - var domain = [['website_published', '=', true]]; + var domain = [ + ['website_published', '=', true], + ['post_date', '<=', moment().utc().locale('en').format('YYYY-MM-DD HH:mm:ss')], + ]; if (blogID) { domain.push(['blog_id', '=', parseInt(blogID)]); } diff --git a/addons/website_crm_partner_assign/static/src/js/crm_partner_assign.js b/addons/website_crm_partner_assign/static/src/js/crm_partner_assign.js index 2f8cffd0363..bc5b17b5151 100644 --- a/addons/website_crm_partner_assign/static/src/js/crm_partner_assign.js +++ b/addons/website_crm_partner_assign/static/src/js/crm_partner_assign.js @@ -227,7 +227,9 @@ publicWidget.registry.crmPartnerAssign = publicWidget.Widget.extend({ _onEditOppConfirm: function (ev) { ev.preventDefault(); ev.stopPropagation(); - this._buttonExec($(ev.currentTarget), this._editOpportunity); + if ($(".edit_opp_form")[0].checkValidity()) { + this._buttonExec($(ev.currentTarget), this._editOpportunity); + } }, /** * @private diff --git a/addons/website_crm_partner_assign/views/website_crm_partner_assign_templates.xml b/addons/website_crm_partner_assign/views/website_crm_partner_assign_templates.xml index 21b70a11112..822678fa8d7 100644 --- a/addons/website_crm_partner_assign/views/website_crm_partner_assign_templates.xml +++ b/addons/website_crm_partner_assign/views/website_crm_partner_assign_templates.xml @@ -675,7 +675,7 @@ <label>Expected Closing:</label> <div class="input-group date" id="exp_closing_div" data-target-input="nearest"> <t t-set='date_formatted'><t t-options='{"widget": "date"}' t-esc="opportunity.date_deadline"/></t> - <input type="text" name="date_deadline" t-att-value="date_formatted" class="datetimepicker-input form-control date_deadline" t-att-name="prefix"/> + <input type="date" min="1900-01-01" name="date_deadline" t-att-value="date_formatted" class="datetimepicker-input form-control date_deadline" data-date-format="YYYY-MM-DD" t-att-name="prefix" placeholder="YYYY-MM-DD"/> <div class="input-group-append" data-target="#exp_closing_div" data-toggle="datetimepicker"> <span class="input-group-text"> <span class="fa fa-calendar" role="img" aria-label="Calendar"></span> @@ -701,7 +701,7 @@ <label class="col-form-label" for="activity_date_deadline">Next Activity Date</label> <div class="input-group date" id="next_activity_div" data-target-input="nearest"> <t t-set='date_formatted'><t t-options='{"widget": "date"}' t-esc="user_activity.date_deadline"/></t> - <input type="text" name="activity_date_deadline" t-att-value="date_formatted" class="form-control activity_date_deadline datetimepicker-input" t-att-name="prefix"/> + <input type="date" min="1900-01-01" name="activity_date_deadline" t-att-value="date_formatted" class="form-control activity_date_deadline datetimepicker-input" data-date-format="YYYY-MM-DD" t-att-name="prefix" placeholder="YYYY-MM-DD"/> <div class="input-group-append" data-target="#next_activity_div" data-toggle="datetimepicker"> <span class="input-group-text"> <span class="fa fa-calendar" role="img" aria-label="Calendar" title="Calendar"></span> diff --git a/addons/website_event_track/i18n/nb.po b/addons/website_event_track/i18n/nb.po index 56ea3e23cd5..ee3cdbbea38 100644 --- a/addons/website_event_track/i18n/nb.po +++ b/addons/website_event_track/i18n/nb.po @@ -3,17 +3,18 @@ # * website_event_track # # Translators: -# Martin Trigaux, 2018 -# Jorunn D. Newth, 2018 -# Marius Stedjan <marius@stedjan.com>, 2018 +# Viktor Basso <viktor@voit.no>, 2018 +# Martin Trigaux, 2019 +# Marius Stedjan <marius@stedjan.com>, 2019 +# Jorunn D. Newth, 2019 # 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-08-24 09:34+0000\n" -"Last-Translator: Marius Stedjan <marius@stedjan.com>, 2018\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2016-08-05 13:12+0000\n" +"Last-Translator: Jorunn D. Newth, 2019\n" "Language-Team: Norwegian Bokmål (https://www.transifex.com/odoo/teams/41243/nb/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -179,7 +180,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 "Dagsorden" @@ -232,6 +233,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 "Kansellert stadium" @@ -1043,6 +1049,10 @@ msgid "" "Today: Activity date is today\n" "Planned: Future activities." msgstr "" +"Status basert på aktiviteter\n" +"Utgått: Fristen er allerede passert\n" +"I dag: Aktiviteten skal gjøres i dag\n" +"Planlagt: Fremtidige aktiviteter." #. module: website_event_track #: model_terms:ir.ui.view,arch_db:website_event_track.event_track_proposal @@ -1076,7 +1086,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 "" @@ -1087,7 +1097,7 @@ msgid "Talk Title" msgstr "Foredragstittel" #. 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 "Foredrag" @@ -1272,7 +1282,7 @@ msgstr "Se spor" #. module: website_event_track #: model:ir.model.fields,field_description:website_event_track.field_event_track__website_published msgid "Visible on current website" -msgstr "Synlig på nåværende nettsted" +msgstr "Synlig på gjeldende nettsted" #. module: website_event_track #: model_terms:ir.ui.view,arch_db:website_event_track.event_track_proposal diff --git a/addons/website_hr_recruitment/i18n/uk.po b/addons/website_hr_recruitment/i18n/uk.po index 7d900def1f1..e0c582a2557 100644 --- a/addons/website_hr_recruitment/i18n/uk.po +++ b/addons/website_hr_recruitment/i18n/uk.po @@ -25,7 +25,7 @@ msgstr "" #. module: website_hr_recruitment #: model_terms:ir.ui.view,arch_db:website_hr_recruitment.default_website_description msgid "$15k" -msgstr "$15k" +msgstr "$15 000" #. module: website_hr_recruitment #: model_terms:ir.ui.view,arch_db:website_hr_recruitment.default_website_description @@ -161,7 +161,7 @@ msgstr "Всі країни" #. module: website_hr_recruitment #: model_terms:ir.ui.view,arch_db:website_hr_recruitment.job_departments msgid "All Departments" -msgstr "Всі установи" +msgstr "Усі відділи" #. module: website_hr_recruitment #: model_terms:ir.ui.view,arch_db:website_hr_recruitment.job_offices @@ -239,7 +239,7 @@ msgid "" " ups" msgstr "" "Особиста координація з функціональними консультантами для отримання " -"кваліфікації та подальшої діяльності" +"кваліфікації та нагадувань" #. module: website_hr_recruitment #: model_terms:ir.ui.view,arch_db:website_hr_recruitment.default_website_description @@ -329,8 +329,8 @@ msgstr "" msgid "" "Large apps scope: CRM, MRP, Accounting, Inventory, HR, Project Mgt, etc." msgstr "" -"Великі додатки: CRM, MRP, Бухгалтерський облік, інвентаризація, HR, " -"Управління проектом тощо." +"Велика область застосування: CRM, MRP, Бухгалтерський облік, інвентаризація," +" HR, Управління проектом тощо." #. module: website_hr_recruitment #: model_terms:ir.ui.view,arch_db:website_hr_recruitment.thankyou_ir_ui_view @@ -384,7 +384,7 @@ msgstr "" #. module: website_hr_recruitment #: model_terms:ir.ui.view,arch_db:website_hr_recruitment.default_website_description msgid "Personal Evolution:" -msgstr "Персональна еволюція:" +msgstr "Персональний розвиток:" #. module: website_hr_recruitment #: model_terms:ir.ui.view,arch_db:website_hr_recruitment.default_website_description @@ -566,7 +566,7 @@ msgstr "" #. module: website_hr_recruitment #: model_terms:ir.ui.view,arch_db:website_hr_recruitment.apply msgid "Your Email" -msgstr "Ваш ел. пошта" +msgstr "Ваша ел. пошта" #. module: website_hr_recruitment #: model_terms:ir.ui.view,arch_db:website_hr_recruitment.apply @@ -593,7 +593,7 @@ msgstr "Вашу заявку було надіслано до:" #. module: website_hr_recruitment #: model_terms:ir.ui.view,arch_db:website_hr_recruitment.index msgid "for job opportunities." -msgstr "для нагод роботи." +msgstr "для вакансій." #. module: website_hr_recruitment #: model_terms:ir.ui.view,arch_db:website_hr_recruitment.index diff --git a/addons/website_mass_mailing/i18n/uk.po b/addons/website_mass_mailing/i18n/uk.po index f06f3ac622f..4e580645dd0 100644 --- a/addons/website_mass_mailing/i18n/uk.po +++ b/addons/website_mass_mailing/i18n/uk.po @@ -3,18 +3,18 @@ # * website_mass_mailing # # Translators: -# Yaroslav Molochko <onorua@gmail.com>, 2018 -# Martin Trigaux, 2018 +# Bohdan Lisnenko, 2018 # ТАрас <tratatuta@i.ua>, 2018 -# Alina Lisnenko <alinasemeniuk1@gmail.com>, 2018 +# Martin Trigaux, 2019 +# Alina Lisnenko <alinasemeniuk1@gmail.com>, 2019 # msgid "" msgstr "" "Project-Id-Version: Odoo Server saas~11.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-09-21 13:18+0000\n" -"PO-Revision-Date: 2018-08-24 09:35+0000\n" -"Last-Translator: Alina Lisnenko <alinasemeniuk1@gmail.com>, 2018\n" +"PO-Revision-Date: 2016-08-05 13:13+0000\n" +"Last-Translator: Alina Lisnenko <alinasemeniuk1@gmail.com>, 2019\n" "Language-Team: Ukrainian (https://www.transifex.com/odoo/teams/41243/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -33,8 +33,8 @@ msgid "" "<strong>Newsletter Popup!</strong> The newsletter popup snippet effect is " "active on this page. Click" msgstr "" -"<strong>Бюлетень спливаючого вікна!</strong> На цій сторінці активовано " -"ефект спливаючих вікон для новин. Натисніть" +"<strong>Спливаюче вікно!</strong> На цій сторінці активовано ефект " +"спливаючих вікон для новин. Натисніть" #. module: website_mass_mailing #. openerp-web @@ -53,7 +53,7 @@ msgstr "Додати вікно підписки на інформаційний #. module: website_mass_mailing #: model_terms:ir.ui.view,arch_db:website_mass_mailing.newsletter_subscribe_options msgid "Change Newsletter" -msgstr "Заміна Розсилки" +msgstr "Змінити інформаційний бюлетень" #. module: website_mass_mailing #: model:ir.model,name:website_mass_mailing.model_res_config_settings @@ -157,7 +157,7 @@ msgstr "Тип тут ..." #. module: website_mass_mailing #: model:res.groups,name:website_mass_mailing.group_website_popup_on_exit msgid "Use subscription pop up on the website" -msgstr "Використовуйте підписку на веб-сайті" +msgstr "Використовуйте спливаюче вікно підписки на веб-сайті" #. module: website_mass_mailing #: model:ir.model.fields,field_description:website_mass_mailing.field_res_config_settings__group_website_popup_on_exit @@ -172,7 +172,7 @@ msgstr "Зміст спливаючого вікна веб-сайту" #. module: website_mass_mailing #: model:ir.model.fields,field_description:website_mass_mailing.field_mail_mass_mailing_list__popup_redirect_url msgid "Website Popup Redirect URL" -msgstr "URL-адреса переспрямування веб-сайту" +msgstr "Переспрямування URL-адреси спливаючого вікна веб-сайту" #. module: website_mass_mailing #: model_terms:ir.ui.view,arch_db:website_mass_mailing.s_newsletter_subscribe_form diff --git a/addons/website_membership/i18n/uk.po b/addons/website_membership/i18n/uk.po index ecb1418efe2..4914c9a70e1 100644 --- a/addons/website_membership/i18n/uk.po +++ b/addons/website_membership/i18n/uk.po @@ -4,17 +4,18 @@ # # Translators: # Yaroslav Molochko <onorua@gmail.com>, 2018 -# Martin Trigaux, 2018 +# Bohdan Lisnenko, 2018 # ТАрас <tratatuta@i.ua>, 2018 -# Alina Lisnenko <alinasemeniuk1@gmail.com>, 2018 +# Martin Trigaux, 2019 +# Alina Lisnenko <alinasemeniuk1@gmail.com>, 2019 # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-21 13:18+0000\n" -"PO-Revision-Date: 2018-08-24 09:35+0000\n" -"Last-Translator: Alina Lisnenko <alinasemeniuk1@gmail.com>, 2018\n" +"POT-Creation-Date: 2019-01-16 08:00+0000\n" +"PO-Revision-Date: 2016-08-05 13:13+0000\n" +"Last-Translator: Alina Lisnenko <alinasemeniuk1@gmail.com>, 2019\n" "Language-Team: Ukrainian (https://www.transifex.com/odoo/teams/41243/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,6 +24,15 @@ msgstr "" "Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" #. module: website_membership +#: model_terms:ir.ui.view,arch_db:website_membership.opt_index_google_map +msgid "" +"<span class=\"fa fa-external-link\" role=\"img\" aria-label=\"External " +"link\" title=\"External link\"/>" +msgstr "" +"<span class=\"fa fa-external-link\" role=\"img\" aria-label=\"External " +"link\" title=\"External link\"/>" + +#. module: website_membership #: model_terms:ir.ui.view,arch_db:website_membership.index msgid "All" msgstr "Всі" @@ -36,7 +46,7 @@ msgstr "Всі країни" #. module: website_membership #: model_terms:ir.ui.view,arch_db:website_membership.index msgid "Associations" -msgstr "Асоціація" +msgstr "Об'єднання" #. module: website_membership #: model_terms:ir.ui.view,arch_db:website_membership.opt_index_google_map @@ -52,7 +62,7 @@ msgstr "Знайти бізнес-партнера" #: code:addons/website_membership/controllers/main.py:126 #, python-format msgid "Free Members" -msgstr "Безкоштовні учасники" +msgstr "Вільні учасники" #. module: website_membership #: model_terms:ir.ui.view,arch_db:website_membership.opt_index_country diff --git a/addons/website_sale/models/website.py b/addons/website_sale/models/website.py index 742e60c3d61..bb4daaa519d 100644 --- a/addons/website_sale/models/website.py +++ b/addons/website_sale/models/website.py @@ -342,7 +342,7 @@ class Website(models.Model): if code_pricelist: pricelist_id = code_pricelist.id update_pricelist = True - elif code is not None and sale_order.pricelist_id.code: + elif code is not None and sale_order.pricelist_id.code and code != sale_order.pricelist_id.code: # code is not None when user removes code and click on "Apply" pricelist_id = partner.property_product_pricelist.id update_pricelist = True diff --git a/addons/website_sale/views/templates.xml b/addons/website_sale/views/templates.xml index c4c9c001343..095011a969f 100644 --- a/addons/website_sale/views/templates.xml +++ b/addons/website_sale/views/templates.xml @@ -1302,7 +1302,7 @@ <t t-if="mode == ('new', 'billing') or (mode == ('edit', 'billing') and (can_edit_vat or 'vat' in checkout and checkout['vat']))"> <div t-attf-class="form-group #{error.get('company_name') and 'o_has_error' or ''} col-lg-6"> <label class="col-form-label font-weight-normal label-optional" for="company_name">Company Name</label> - <input type="text" name="company_name" t-attf-class="form-control #{error.get('company_name') and 'is-invalid' or ''}" t-att-value="'company_name' in checkout and checkout['company_name']" t-att-readonly="'1' if 'vat' in checkout and checkout['vat'] and not can_edit_vat else None" t-att-title="'Changing company name is not allowed once document(s) have been issued for your account. Please contact us directly for this operation.' if 'vat' in checkout and checkout['vat'] and not can_edit_vat else None" /> + <input type="text" name="company_name" t-attf-class="form-control #{error.get('company_name') and 'is-invalid' or ''}" t-att-value="'commercial_company_name' in checkout and checkout['commercial_company_name'] or 'company_name' in checkout and checkout['company_name']" t-att-readonly="'1' if 'vat' in checkout and checkout['vat'] and not can_edit_vat else None" t-att-title="'Changing company name is not allowed once document(s) have been issued for your account. Please contact us directly for this operation.' if 'vat' in checkout and checkout['vat'] and not can_edit_vat else None" /> </div> <div t-attf-class="form-group #{error.get('vat') and 'o_has_error' or ''} col-lg-6 div_vat"> <label class="col-form-label font-weight-normal label-optional" for="vat">TIN / VAT </label> diff --git a/addons/website_sale_comparison/i18n/uk.po b/addons/website_sale_comparison/i18n/uk.po index d5db34cdbed..d8d8d3660a0 100644 --- a/addons/website_sale_comparison/i18n/uk.po +++ b/addons/website_sale_comparison/i18n/uk.po @@ -3,16 +3,18 @@ # * website_sale_comparison # # Translators: -# Martin Trigaux, 2018 -# Alina Lisnenko <alinasemeniuk1@gmail.com>, 2018 +# Bohdan Lisnenko, 2018 +# ТАрас <tratatuta@i.ua>, 2018 +# Martin Trigaux, 2019 +# Alina Lisnenko <alinasemeniuk1@gmail.com>, 2019 # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server saas~12.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-08 06:49+0000\n" -"PO-Revision-Date: 2018-08-24 09:35+0000\n" -"Last-Translator: Alina Lisnenko <alinasemeniuk1@gmail.com>, 2018\n" +"POT-Creation-Date: 2019-01-16 08:00+0000\n" +"PO-Revision-Date: 2017-07-17 09:13+0000\n" +"Last-Translator: Alina Lisnenko <alinasemeniuk1@gmail.com>, 2019\n" "Language-Team: Ukrainian (https://www.transifex.com/odoo/teams/41243/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -31,6 +33,15 @@ msgid "308 g" msgstr "308 g" #. module: website_sale_comparison +#: model_terms:ir.ui.view,arch_db:website_sale_comparison.product_compare +msgid "" +"<i class=\"fa fa-chevron-circle-down o_product_comparison_collpase\" " +"role=\"img\" aria-label=\"Collapse\" title=\"Collapse\"/>" +msgstr "" +"<i class=\"fa fa-chevron-circle-down o_product_comparison_collpase\" " +"role=\"img\" aria-label=\"Collapse\" title=\"Collapse\"/>" + +#. module: website_sale_comparison #: model_terms:ir.ui.view,arch_db:website_sale_comparison.recommended_product msgid "<i class=\"fa fa-exchange\"/> Compare" msgstr "<i class=\"fa fa-exchange\"/> Порівняйте" @@ -41,6 +52,11 @@ msgid "<i class=\"fa fa-shopping-cart\"/>&nbsp;Add to Cart" msgstr "<i class=\"fa fa-shopping-cart\"/>&nbsp;Додати до кошика" #. module: website_sale_comparison +#: model_terms:ir.ui.view,arch_db:website_sale_comparison.product_product +msgid "<i class=\"fa fa-trash\" role=\"img\" aria-label=\"Remove\"/>" +msgstr "<i class=\"fa fa-trash\" role=\"img\" aria-label=\"Remove\"/>" + +#. module: website_sale_comparison #: model_terms:ir.ui.view,arch_db:website_sale_comparison.recommended_product msgid "<span class=\"h3\">Suggested alternatives: </span>" msgstr "<span class=\"h3\">Запропоновані альтернативи: </span>" diff --git a/addons/website_sale_coupon/i18n/uk.po b/addons/website_sale_coupon/i18n/uk.po index f89aa851e7c..fa8aae6fff9 100644 --- a/addons/website_sale_coupon/i18n/uk.po +++ b/addons/website_sale_coupon/i18n/uk.po @@ -9,9 +9,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~12.1+e\n" +"Project-Id-Version: Odoo Server saas~12.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 08:13+0000\n" +"POT-Creation-Date: 2019-06-12 12:25+0000\n" "PO-Revision-Date: 2017-02-15 11:47+0000\n" "Last-Translator: Alina Lisnenko <alinasemeniuk1@gmail.com>, 2019\n" "Language-Team: Ukrainian (https://www.transifex.com/odoo/teams/41243/uk/)\n" diff --git a/addons/website_sale_digital/i18n/nb.po b/addons/website_sale_digital/i18n/nb.po index 5ff618ae9b8..8ec39a57f80 100644 --- a/addons/website_sale_digital/i18n/nb.po +++ b/addons/website_sale_digital/i18n/nb.po @@ -3,15 +3,16 @@ # * website_sale_digital # # Translators: -# Martin Trigaux, 2018 -# Jorunn D. Newth, 2018 +# Martin Trigaux, 2019 +# Jorunn D. Newth, 2019 +# 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" -"Last-Translator: Jorunn D. Newth, 2018\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2016-08-05 13:14+0000\n" +"Last-Translator: Jorunn D. Newth, 2019\n" "Language-Team: Norwegian Bokmål (https://www.transifex.com/odoo/teams/41243/nb/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -39,6 +40,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 "Kan lastes ned fra produktportalen" @@ -76,9 +78,4 @@ msgstr "Enhet(er)" #. module: website_sale_digital #: model:product.template,name:website_sale_digital.product_1 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 "kg" +msgstr "Ebok: Kontor-oppussing for dummies" diff --git a/addons/website_sale_digital/i18n/uk.po b/addons/website_sale_digital/i18n/uk.po index 2a771156680..052dd0b6618 100644 --- a/addons/website_sale_digital/i18n/uk.po +++ b/addons/website_sale_digital/i18n/uk.po @@ -3,17 +3,17 @@ # * website_sale_digital # # Translators: -# Bohdan Lisnenko, 2018 # Martin Trigaux, 2018 -# Alina Lisnenko <alinasemeniuk1@gmail.com>, 2018 +# Bohdan Lisnenko, 2018 +# Alina Lisnenko <alinasemeniuk1@gmail.com>, 2019 # 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-08-24 09:35+0000\n" -"Last-Translator: Alina Lisnenko <alinasemeniuk1@gmail.com>, 2018\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2016-08-05 13:14+0000\n" +"Last-Translator: Alina Lisnenko <alinasemeniuk1@gmail.com>, 2019\n" "Language-Team: Ukrainian (https://www.transifex.com/odoo/teams/41243/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,14 +24,14 @@ msgstr "" #. module: website_sale_digital #: model:ir.model,name:website_sale_digital.model_ir_attachment msgid "Attachment" -msgstr "Долучення" +msgstr "Прикріплення" #. module: website_sale_digital #: code:addons/website_sale_digital/models/product.py:23 #: code:addons/website_sale_digital/models/product.py:54 #, python-format msgid "Digital Attachments" -msgstr "Цифрові долучення" +msgstr "Цифрові прикріплення" #. module: website_sale_digital #: model_terms:ir.ui.view,arch_db:website_sale_digital.product_product_view_form_inherit_digital @@ -41,6 +41,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 "Завантажується з порталу товарів" @@ -79,8 +80,3 @@ msgstr "Штука(и)" #: model:product.template,name:website_sale_digital.product_1 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_management/i18n/uk.po b/addons/website_sale_management/i18n/uk.po index a03ab8d3050..6940d82c595 100644 --- a/addons/website_sale_management/i18n/uk.po +++ b/addons/website_sale_management/i18n/uk.po @@ -3,16 +3,15 @@ # * website_sale_management # # Translators: -# Martin Trigaux, 2018 -# Alina Lisnenko <alinasemeniuk1@gmail.com>, 2018 +# Alina Lisnenko <alinasemeniuk1@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-08-24 09:35+0000\n" -"Last-Translator: Alina Lisnenko <alinasemeniuk1@gmail.com>, 2018\n" +"PO-Revision-Date: 2017-12-13 15:01+0000\n" +"Last-Translator: Alina Lisnenko <alinasemeniuk1@gmail.com>, 2019\n" "Language-Team: Ukrainian (https://www.transifex.com/odoo/teams/41243/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -33,4 +32,4 @@ msgstr "" #: code:addons/website_sale_management/static/src/xml/website_sale_dashboard.xml:6 #, python-format msgid "Orders to Invoice" -msgstr "Замовлення для рахунку" +msgstr "Перетворення замовлення у рахунок" diff --git a/addons/website_sale_stock/i18n/uk.po b/addons/website_sale_stock/i18n/uk.po index 667f47824a1..edae2d5f383 100644 --- a/addons/website_sale_stock/i18n/uk.po +++ b/addons/website_sale_stock/i18n/uk.po @@ -4,16 +4,17 @@ # # Translators: # Bohdan Lisnenko, 2018 -# Martin Trigaux, 2018 -# Alina Lisnenko <alinasemeniuk1@gmail.com>, 2018 +# ТАрас <tratatuta@i.ua>, 2018 +# Martin Trigaux, 2019 +# Alina Lisnenko <alinasemeniuk1@gmail.com>, 2019 # 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-08-24 09:35+0000\n" -"Last-Translator: Alina Lisnenko <alinasemeniuk1@gmail.com>, 2018\n" +"POT-Creation-Date: 2019-03-20 13:50+0000\n" +"PO-Revision-Date: 2016-08-05 13:14+0000\n" +"Last-Translator: Alina Lisnenko <alinasemeniuk1@gmail.com>, 2019\n" "Language-Team: Ukrainian (https://www.transifex.com/odoo/teams/41243/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -120,8 +121,8 @@ msgstr "Шаблон товару" #. module: website_sale_stock #: model:ir.model,name:website_sale_stock.model_sale_order -msgid "Sale Order" -msgstr "Замовлення" +msgid "Sales Order" +msgstr "Замовлення на продаж" #. module: website_sale_stock #: model:ir.model,name:website_sale_stock.model_sale_order_line @@ -132,7 +133,7 @@ msgstr "Рядок замовлення" #: selection:product.template,inventory_availability:0 #: selection:res.config.settings,inventory_availability:0 msgid "Sell regardless of inventory" -msgstr "Продавати незалежно від запасу" +msgstr "Продавайте незалежно від запасу" #. module: website_sale_stock #: selection:product.template,inventory_availability:0 @@ -147,7 +148,8 @@ msgstr "" #: selection:res.config.settings,inventory_availability:0 msgid "Show inventory on website and prevent sales if not enough stock" msgstr "" -"Показати запас на веб-сайті та запобігти продажам, якщо не вистачає запасів" +"Показуйте запас на веб-сайті та запобігайте продажам, якщо не вистачає " +"запасів" #. module: website_sale_stock #: selection:product.template,inventory_availability:0 diff --git a/addons/website_sale_wishlist/i18n/uk.po b/addons/website_sale_wishlist/i18n/uk.po index 00f6908c4bb..a2704ac20a9 100644 --- a/addons/website_sale_wishlist/i18n/uk.po +++ b/addons/website_sale_wishlist/i18n/uk.po @@ -3,16 +3,18 @@ # * website_sale_wishlist # # Translators: -# Martin Trigaux, 2018 -# Alina Lisnenko <alinasemeniuk1@gmail.com>, 2018 +# Bohdan Lisnenko, 2018 +# ТАрас <tratatuta@i.ua>, 2018 +# Martin Trigaux, 2019 +# Alina Lisnenko <alinasemeniuk1@gmail.com>, 2019 # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~11.5\n" +"Project-Id-Version: Odoo Server saas~12.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-21 13:18+0000\n" -"PO-Revision-Date: 2018-08-24 09:35+0000\n" -"Last-Translator: Alina Lisnenko <alinasemeniuk1@gmail.com>, 2018\n" +"POT-Creation-Date: 2019-01-16 08:00+0000\n" +"PO-Revision-Date: 2017-07-17 09:13+0000\n" +"Last-Translator: Alina Lisnenko <alinasemeniuk1@gmail.com>, 2019\n" "Language-Team: Ukrainian (https://www.transifex.com/odoo/teams/41243/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -35,6 +37,12 @@ msgid "<small><i class=\"fa fa-trash-o\"/> Remove</small>" msgstr "<small><i class=\"fa fa-trash-o\"/> Видалити</small>" #. module: website_sale_wishlist +#: model_terms:ir.ui.view,arch_db:website_sale_wishlist.add_to_wishlist +#: model_terms:ir.ui.view,arch_db:website_sale_wishlist.product_add_to_wishlist +msgid "<span class=\"fa fa-heart\" role=\"img\" aria-label=\"Add to wishlist\"/>" +msgstr "<span class=\"fa fa-heart\" role=\"img\" aria-label=\"Add to wishlist\"/>" + +#. module: website_sale_wishlist #: model:ir.model.fields,field_description:website_sale_wishlist.field_product_wishlist__active msgid "Active" msgstr "Активно" @@ -128,19 +136,25 @@ msgstr "Ціна товару, коли він був доданий до спи #. module: website_sale_wishlist #: model:ir.model.fields,field_description:website_sale_wishlist.field_product_wishlist__pricelist_id msgid "Pricelist" -msgstr "Прайслист" +msgstr "Прайс-лист" #. module: website_sale_wishlist #: model:ir.model.fields,help:website_sale_wishlist.field_product_wishlist__pricelist_id msgid "Pricelist when added" -msgstr "Прайслист, коли додано" +msgstr "Прайс-лист, коли додано" #. module: website_sale_wishlist +#: model:ir.model,name:website_sale_wishlist.model_product_product #: model:ir.model.fields,field_description:website_sale_wishlist.field_product_wishlist__product_id msgid "Product" msgstr "Товар" #. module: website_sale_wishlist +#: model:ir.model,name:website_sale_wishlist.model_product_template +msgid "Product Template" +msgstr "Шаблон товару" + +#. module: website_sale_wishlist #: model:ir.model,name:website_sale_wishlist.model_product_wishlist msgid "Product Wishlist" msgstr "Список бажаних товарів" diff --git a/addons/website_slides/models/slide_channel.py b/addons/website_slides/models/slide_channel.py index 13327ddf3f2..800c8b20d07 100644 --- a/addons/website_slides/models/slide_channel.py +++ b/addons/website_slides/models/slide_channel.py @@ -22,12 +22,13 @@ class ChannelUsersRelation(models.Model): partner_id = fields.Many2one('res.partner', index=True, required=True) partner_email = fields.Char(related='partner_id.email', readonly=True) - @api.depends('channel_id.slide_partner_ids.partner_id', 'channel_id.slide_partner_ids.completed', 'partner_id') + @api.depends('channel_id.slide_partner_ids.partner_id', 'channel_id.slide_partner_ids.completed', 'partner_id', 'channel_id.slide_partner_ids.slide_id.is_published') def _compute_completion(self): read_group_res = self.env['slide.slide.partner'].sudo().read_group( ['&', '&', ('channel_id', 'in', self.mapped('channel_id').ids), ('partner_id', 'in', self.mapped('partner_id').ids), - ('completed', '=', True)], + ('completed', '=', True), + ('slide_id.is_published', '=', True)], ['channel_id', 'partner_id'], groupby=['channel_id', 'partner_id'], lazy=False) mapped_data = dict() diff --git a/addons/website_slides/tests/test_statistics.py b/addons/website_slides/tests/test_statistics.py index bd067ba8216..be10f03a246 100644 --- a/addons/website_slides/tests/test_statistics.py +++ b/addons/website_slides/tests/test_statistics.py @@ -75,6 +75,15 @@ class TestStatistics(common.SlidesCase): self.assertEqual(channel_emp.completion, 100) self.assertTrue(channel_emp.completed) + self.slide_3.is_published = False + self.assertEqual(channel_emp.completion, 100) + self.assertTrue(channel_emp.completed) + + self.slide_3.is_published = True + self.slide_3.active = False + self.assertEqual(channel_emp.completion, 100) + self.assertTrue(channel_emp.completed) + @mute_logger('odoo.models') def test_channel_user_statistics_complete_check_member(self): (self.slide | self.slide_2).write({'is_preview': True}) diff --git a/addons/website_theme_install/i18n/uk.po b/addons/website_theme_install/i18n/uk.po index 5508cc97465..8f317e3b9d9 100644 --- a/addons/website_theme_install/i18n/uk.po +++ b/addons/website_theme_install/i18n/uk.po @@ -3,19 +3,19 @@ # * website_theme_install # # Translators: -# Zoriana Zaiats, 2018 -# Bohdan Lisnenko, 2018 -# ТАрас <tratatuta@i.ua>, 2018 -# Martin Trigaux, 2018 -# Alina Lisnenko <alinasemeniuk1@gmail.com>, 2018 +# Martin Trigaux, 2019 +# Zoriana Zaiats, 2019 +# Bohdan Lisnenko, 2019 +# ТАрас <tratatuta@i.ua>, 2019 +# Alina Lisnenko <alinasemeniuk1@gmail.com>, 2019 # msgid "" msgstr "" "Project-Id-Version: Odoo Server saas~11.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-09-21 13:18+0000\n" -"PO-Revision-Date: 2018-08-24 09:35+0000\n" -"Last-Translator: Alina Lisnenko <alinasemeniuk1@gmail.com>, 2018\n" +"PO-Revision-Date: 2017-02-15 11:04+0000\n" +"Last-Translator: Alina Lisnenko <alinasemeniuk1@gmail.com>, 2019\n" "Language-Team: Ukrainian (https://www.transifex.com/odoo/teams/41243/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -31,22 +31,22 @@ msgstr "Активно" #. module: website_theme_install #: model:ir.model.fields,field_description:website_theme_install.field_theme_ir_ui_view__arch msgid "Arch" -msgstr "" +msgstr "Структура" #. module: website_theme_install #: model:ir.model.fields,field_description:website_theme_install.field_theme_ir_ui_view__arch_fs msgid "Arch Fs" -msgstr "" +msgstr "Шлях до структури" #. module: website_theme_install #: model:ir.model,name:website_theme_install.model_ir_attachment msgid "Attachment" -msgstr "Вкладення" +msgstr "Прикріплення" #. module: website_theme_install #: model:ir.model.fields,field_description:website_theme_install.field_theme_ir_attachment__copy_ids msgid "Attachment using a copy of me" -msgstr "" +msgstr "Прикріплення використовує мою копію" #. module: website_theme_install #: model_terms:ir.ui.view,arch_db:website_theme_install.theme_view_search @@ -72,12 +72,12 @@ msgstr "Категорія" #: model_terms:ir.ui.view,arch_db:website_theme_install.res_config_settings_view_form #: model_terms:ir.ui.view,arch_db:website_theme_install.view_website_form_view_themes_modal msgid "Choose a theme" -msgstr "" +msgstr "Вибрати тему" #. module: website_theme_install #: model:ir.actions.act_window,name:website_theme_install.theme_install_kanban_action msgid "Choose a theme for your website" -msgstr "" +msgstr "Виберіть тему для вашого веб-сайту" #. module: website_theme_install #: model:ir.model,name:website_theme_install.model_res_company @@ -92,7 +92,7 @@ msgstr "Налаштування" #. module: website_theme_install #: model:ir.actions.server,name:website_theme_install.theme_install_todo_action msgid "Config: Choose Your Theme" -msgstr "Налаштування: Оберіть вашу тему" +msgstr "Налашт.: Оберіть вашу тему" #. module: website_theme_install #: model:ir.model.fields,field_description:website_theme_install.field_theme_ir_attachment__create_uid @@ -108,7 +108,7 @@ msgstr "Створив" #: model:ir.model.fields,field_description:website_theme_install.field_theme_website_menu__create_date #: model:ir.model.fields,field_description:website_theme_install.field_theme_website_page__create_date msgid "Created on" -msgstr "Створено" +msgstr "Створено на" #. module: website_theme_install #: model:ir.model.fields,field_description:website_theme_install.field_theme_ir_attachment__display_name @@ -146,7 +146,7 @@ msgstr "Встановлено" #. module: website_theme_install #: model:ir.model.fields,field_description:website_theme_install.field_ir_module_module__is_installed_on_current_website msgid "Is Installed On Current Website" -msgstr "" +msgstr "Чи встановлено на поточному веб-сайті?" #. module: website_theme_install #: model:ir.model.fields,field_description:website_theme_install.field_ir_attachment__key @@ -162,7 +162,7 @@ msgstr "Ключ" #: model:ir.model.fields,field_description:website_theme_install.field_theme_website_menu____last_update #: model:ir.model.fields,field_description:website_theme_install.field_theme_website_page____last_update msgid "Last Modified on" -msgstr "Остання модифікація" +msgstr "Останні зміни на" #. module: website_theme_install #: model:ir.model.fields,field_description:website_theme_install.field_theme_ir_attachment__write_uid @@ -183,7 +183,7 @@ msgstr "Останнє оновлення" #. module: website_theme_install #: model_terms:ir.ui.view,arch_db:website_theme_install.onboarding_website_theme_step msgid "Let's start!" -msgstr "" +msgstr "Давайте почнемо!" #. module: website_theme_install #: model_terms:ir.ui.view,arch_db:website_theme_install.theme_view_kanban @@ -193,7 +193,7 @@ msgstr "Попередній перегляд" #. module: website_theme_install #: model:ir.model.fields,field_description:website_theme_install.field_theme_website_menu__copy_ids msgid "Menu using a copy of me" -msgstr "" +msgstr "Меню використовує мою копію" #. module: website_theme_install #: model:ir.model.fields,field_description:website_theme_install.field_theme_ir_ui_view__mode @@ -220,7 +220,7 @@ msgstr "Нове вікно" #. module: website_theme_install #: model:ir.model.fields,field_description:website_theme_install.field_res_company__website_theme_onboarding_done msgid "Onboarding website theme step done" -msgstr "" +msgstr "Крок долучення теми веб-сайту виконано" #. module: website_theme_install #: model:ir.model,name:website_theme_install.model_website_page @@ -251,7 +251,7 @@ msgstr "Пріоритет" #. module: website_theme_install #: model_terms:ir.ui.view,arch_db:website_theme_install.theme_view_kanban msgid "Remove theme" -msgstr "" +msgstr "Вилучити тему" #. module: website_theme_install #: model:ir.model.fields,field_description:website_theme_install.field_ir_module_module__image_ids @@ -261,7 +261,7 @@ msgstr "Скріншоти" #. module: website_theme_install #: model_terms:ir.ui.view,arch_db:website_theme_install.onboarding_website_theme_step msgid "Select a theme for your website." -msgstr "" +msgstr "Виберіть тему для вашого веб-сайту." #. module: website_theme_install #: model:ir.model.fields,field_description:website_theme_install.field_theme_website_menu__sequence @@ -274,6 +274,8 @@ msgid "" "Technical field used to resolve multiple attachments in a multi-website " "environment." msgstr "" +"Технічне поле, що використовується для вирішення кількох вкладень у " +"середовищі з кількома веб-сайтами." #. module: website_theme_install #: model_terms:ir.ui.view,arch_db:website_theme_install.theme_view_search @@ -283,7 +285,7 @@ msgstr "Тема" #. module: website_theme_install #: model:ir.model,name:website_theme_install.model_theme_ir_attachment msgid "Theme Attachments" -msgstr "" +msgstr "Прикріплення теми" #. module: website_theme_install #: model:ir.model.fields,field_description:website_theme_install.field_ir_attachment__theme_template_id @@ -292,12 +294,12 @@ msgstr "" #: model:ir.model.fields,field_description:website_theme_install.field_website_menu__theme_template_id #: model:ir.model.fields,field_description:website_theme_install.field_website_page__theme_template_id msgid "Theme Template" -msgstr "" +msgstr "Шаблон теми" #. module: website_theme_install #: model:ir.model,name:website_theme_install.model_theme_ir_ui_view msgid "Theme UI View" -msgstr "" +msgstr "Перегляд користувацького інтерфейсу теми" #. module: website_theme_install #: model:ir.model,name:website_theme_install.model_theme_utils @@ -307,12 +309,12 @@ msgstr "Утиліти теми" #. module: website_theme_install #: model_terms:ir.ui.view,arch_db:website_theme_install.theme_view_kanban msgid "Theme preview" -msgstr "" +msgstr "Попередній перегляд теми" #. module: website_theme_install #: model:ir.model.fields,field_description:website_theme_install.field_theme_website_page__copy_ids msgid "Theme using a copy of me" -msgstr "" +msgstr "Тема з використанням копії мене" #. module: website_theme_install #: model:ir.model.fields,field_description:website_theme_install.field_theme_ir_ui_view__type @@ -322,7 +324,7 @@ msgstr "Тип" #. module: website_theme_install #: model_terms:ir.ui.view,arch_db:website_theme_install.theme_view_kanban msgid "Update theme" -msgstr "" +msgstr "Оновити тему" #. module: website_theme_install #: model:ir.model.fields,field_description:website_theme_install.field_theme_ir_attachment__url @@ -334,7 +336,7 @@ msgstr "URL" #. module: website_theme_install #: model_terms:ir.ui.view,arch_db:website_theme_install.theme_view_kanban msgid "Use this theme" -msgstr "" +msgstr "Використовувати цю тему" #. module: website_theme_install #: model:ir.model,name:website_theme_install.model_ir_ui_view @@ -345,7 +347,7 @@ msgstr "Перегляд" #. module: website_theme_install #: model:ir.model.fields,field_description:website_theme_install.field_theme_ir_ui_view__copy_ids msgid "Views using a copy of me" -msgstr "" +msgstr "Перегляди використовують мою копію" #. module: website_theme_install #: model:ir.model,name:website_theme_install.model_website @@ -365,17 +367,17 @@ msgstr "Тема сайту" #. module: website_theme_install #: model:ir.model,name:website_theme_install.model_theme_website_menu msgid "Website Theme Menu" -msgstr "" +msgstr "Меню теми веб-сайту" #. module: website_theme_install #: model:ir.model,name:website_theme_install.model_theme_website_page msgid "Website Theme Page" -msgstr "" +msgstr "Сторінка теми веб-сайту" #. module: website_theme_install #: model_terms:ir.ui.view,arch_db:website_theme_install.customize_modal msgid "install a theme" -msgstr "" +msgstr "встановити тему" #. module: website_theme_install #: selection:theme.ir.ui.view,inherit_id:0 @@ -385,9 +387,9 @@ msgstr "ir.ui.view" #. module: website_theme_install #: selection:theme.ir.ui.view,inherit_id:0 msgid "theme.ir.ui.view" -msgstr "" +msgstr "theme.ir.ui.view" #. module: website_theme_install #: model_terms:ir.ui.view,arch_db:website_theme_install.customize_modal msgid "to customize your website." -msgstr "" +msgstr "щоб налаштувати ваш веб-сайт." diff --git a/addons/website_twitter/i18n/uk.po b/addons/website_twitter/i18n/uk.po index 92e03545cb0..3764ed4c35c 100644 --- a/addons/website_twitter/i18n/uk.po +++ b/addons/website_twitter/i18n/uk.po @@ -3,16 +3,17 @@ # * website_twitter # # Translators: -# Martin Trigaux, 2018 -# Alina Lisnenko <alinasemeniuk1@gmail.com>, 2018 +# Bohdan Lisnenko, 2018 +# ТАрас <tratatuta@i.ua>, 2018 +# Alina Lisnenko <alinasemeniuk1@gmail.com>, 2019 # msgid "" msgstr "" "Project-Id-Version: Odoo Server saas~11.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-09-21 13:18+0000\n" -"PO-Revision-Date: 2018-08-24 09:35+0000\n" -"Last-Translator: Alina Lisnenko <alinasemeniuk1@gmail.com>, 2018\n" +"PO-Revision-Date: 2016-08-05 13:21+0000\n" +"Last-Translator: Alina Lisnenko <alinasemeniuk1@gmail.com>, 2019\n" "Language-Team: Ukrainian (https://www.transifex.com/odoo/teams/41243/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -26,6 +27,8 @@ msgid "" "<i class=\"fa fa-arrow-right\"/>\n" " Show me how to obtain the Twitter API key and Twitter API secret" msgstr "" +"<i class=\"fa fa-arrow-right\"/>\n" +" Покажіть мені, як отримати секретний ключ API для Twitter і API Twitter" #. module: website_twitter #: model_terms:ir.ui.view,arch_db:website_twitter.res_config_settings_view_form @@ -33,21 +36,23 @@ msgid "" "<span class=\"o_form_label\">Twitter Roller</span>\n" " <span class=\"fa fa-lg fa-globe\" title=\"Values set here are website-specific.\" groups=\"website.group_multi_website\"/>" msgstr "" +"<span class=\"o_form_label\">Прокручування Twitter</span>\n" +" <span class=\"fa fa-lg fa-globe\" title=\"Values set here are website-specific.\" groups=\"website.group_multi_website\"/>" #. module: website_twitter #: model_terms:ir.ui.view,arch_db:website_twitter.res_config_settings_view_form msgid "<strong>Callback URL: </strong>Leave blank" -msgstr "" +msgstr "<strong>URL-адреса зворотнього виклику: </strong>Залишити порожнім" #. module: website_twitter #: model_terms:ir.ui.view,arch_db:website_twitter.res_config_settings_view_form msgid "<strong>Description: </strong> Odoo Twitter Integration" -msgstr "" +msgstr "<strong>Опис: </strong> Інтеграція Odoo Twitter" #. module: website_twitter #: model_terms:ir.ui.view,arch_db:website_twitter.res_config_settings_view_form msgid "<strong>Name: </strong> Odoo Twitter Integration" -msgstr "" +msgstr "<strong>Назва: </strong> Інтеграція Odoo Twitter" #. module: website_twitter #: model_terms:ir.ui.view,arch_db:website_twitter.res_config_settings_view_form @@ -64,7 +69,7 @@ msgstr "Ключ API " #: model:ir.model.fields,field_description:website_twitter.field_res_config_settings__twitter_api_secret #: model_terms:ir.ui.view,arch_db:website_twitter.res_config_settings_view_form msgid "API secret" -msgstr "Секретний API" +msgstr "Пароль API" #. module: website_twitter #: model_terms:ir.ui.view,arch_db:website_twitter.res_config_settings_view_form @@ -72,6 +77,8 @@ msgid "" "Accept terms of use and click on the Create your Twitter application button " "at the bottom" msgstr "" +"Прийміть умови використання та натисніть кнопку Створити свою заявку на " +"Twitter внизу" #. module: website_twitter #: code:addons/website_twitter/models/res_config_settings.py:16 @@ -94,6 +101,8 @@ msgid "" "Copy/Paste Consumer Key (API Key) and Consumer Secret (API Secret) keys " "below." msgstr "" +"Скопіюйте та вставте нижче наведений ключ (ключ API) та Секретний ключ " +"користувача (секретний API)." #. module: website_twitter #: model_terms:ir.ui.view,arch_db:website_twitter.res_config_settings_view_form @@ -119,18 +128,18 @@ msgstr "Назва для відображення" #: model:ir.model.fields,field_description:website_twitter.field_res_config_settings__twitter_screen_name #: model_terms:ir.ui.view,arch_db:website_twitter.res_config_settings_view_form msgid "Favorites From" -msgstr "Закладки з" +msgstr "Найкращі форми" #. module: website_twitter #: model:ir.model.fields,field_description:website_twitter.field_website__twitter_screen_name msgid "Get favorites from this screen name" -msgstr "Отримайте закладки з назви цього екрана" +msgstr "Отримайте найкращі із цього екрана" #. module: website_twitter #: code:addons/website_twitter/models/res_config_settings.py:48 #, python-format msgid "HTTP Error: Something is misconfigured" -msgstr "Помилка HTTP: Щось неправильно налаштовано" +msgstr "Помилка HTTP: Щось неправильно налаштоване" #. module: website_twitter #: model_terms:ir.ui.view,arch_db:website_twitter.res_config_settings_view_form @@ -215,7 +224,7 @@ msgid "" "does not have to match the API Key/Secret." msgstr "" "Назва екрану облікового запису Twitter, з якого ви хочете завантажити " -"закладки. Він не повинен відповідати ключу/паролю API." +"улюблені. Він не повинен відповідати ключу/паролю API." #. module: website_twitter #: model_terms:ir.ui.view,arch_db:website_twitter.res_config_settings_view_form @@ -310,7 +319,7 @@ msgstr "Пароль API твіттера" #. module: website_twitter #: model:ir.model.fields,help:website_twitter.field_res_config_settings__twitter_api_secret msgid "Twitter API secret you can get it from https://apps.twitter.com/" -msgstr "Секретний API твіттера ви можете отримати з https://apps.twitter.com/" +msgstr "Секрет Twitter API ви можете отримати з https://apps.twitter.com/" #. module: website_twitter #. openerp-web @@ -329,7 +338,7 @@ msgstr "Помилка авторизації Twitter!" #: code:addons/website_twitter/models/res_config_settings.py:20 #, python-format msgid "Twitter is down or being upgraded." -msgstr "Твіттер впав або оновлюється." +msgstr "Твіттер падає або оновлюється." #. module: website_twitter #: code:addons/website_twitter/models/res_config_settings.py:19 @@ -344,12 +353,12 @@ msgstr "" #. module: website_twitter #: model:ir.model.fields,field_description:website_twitter.field_res_config_settings__twitter_server_uri msgid "Twitter server uri" -msgstr "" +msgstr "uri сервера Twitter" #. module: website_twitter #: model_terms:ir.ui.view,arch_db:website_twitter.res_config_settings_view_form msgid "Twitter tutorial" -msgstr "" +msgstr "Інструкція Twitter" #. module: website_twitter #: code:addons/website_twitter/controllers/main.py:37 @@ -358,7 +367,7 @@ msgid "" "Twitter user @%(username)s has less than 12 favorite tweets. Please add more" " or choose a different screen name." msgstr "" -"Користувач Twitter @%(username)s має менше ніж 12 кращих твітів. Будь-ласка," +"Користувач Twitter @%(username)s має менже ніж 12 кращих твітів. Будь-ласка," " додайте більше або оберіть іншу назву екрану." #. module: website_twitter @@ -366,14 +375,14 @@ msgstr "" #: code:addons/website_twitter/static/src/xml/website.twitter.xml:6 #, python-format msgid "Twitter's user" -msgstr "" +msgstr "Користувачі Twitter" #. module: website_twitter #: model:ir.actions.server,name:website_twitter.ir_cron_twitter_actions_ir_actions_server #: model:ir.cron,cron_name:website_twitter.ir_cron_twitter_actions #: model:ir.cron,name:website_twitter.ir_cron_twitter_actions msgid "Twitter: Fetch new favorites" -msgstr "Twitter: Отримайте нові закладки" +msgstr "Twitter: Отримайте нові обрані" #. module: website_twitter #: code:addons/website_twitter/models/res_config_settings.py:58 @@ -391,7 +400,7 @@ msgstr "Веб-сайт" #. module: website_twitter #: model:ir.model,name:website_twitter.model_website_twitter_tweet msgid "Website Twitter" -msgstr "" +msgstr "Веб-сайт Twitter" #. module: website_twitter #: model_terms:ir.ui.view,arch_db:website_twitter.res_config_settings_view_form diff --git a/doc/_extensions/odoo_ext/sub-menu_list.html b/doc/_extensions/odoo_ext/sub-menu_list.html index 7525fe63aea..ba1a2ad9542 100644 --- a/doc/_extensions/odoo_ext/sub-menu_list.html +++ b/doc/_extensions/odoo_ext/sub-menu_list.html @@ -3,6 +3,6 @@ <li><a href="https://www.odoo.com/documentation/user/12.0/index.html">User</a></li> <li><a href="https://www.odoo.com/documentation/12.0/index.html">Developer</a></li> <li><a href="https://www.odoo.com/documentation/12.0/setup/install.html">Installation</a></li> -<li><a href="http://training.odoo.com/courses/odoo-functional">Training center</a></li> +<li><a href="https://odoo.com/slides">eLearning</a></li> <li><a href="https://www.odoo.com/page/odoo-white-paper">White Papers</a></li> <li><a href="https://www.odoo.com/page/legal">Legal</a></li> diff --git a/doc/cla/corporate/blancomartin.md b/doc/cla/corporate/blancomartin.md new file mode 100644 index 00000000000..3ceb099b879 --- /dev/null +++ b/doc/cla/corporate/blancomartin.md @@ -0,0 +1,28 @@ +Chile, 2019-07-12 + +Blanco Martín & Asociados agrees to the terms of the Odoo Corporate Contributor License +Agreement v1.0. + +I declare that I am authorized and able to make this agreement and sign this +declaration. + +Signed, + +Daniel Blanco daniel@blancomartin.cl https://github.com/danisan + +Corporation name: Blanco Martin & Asociados EIRL +Corporation address: Av. Apoquindo 6410 + Of. 212 Las Condes, (RM) +Country: Chile +Point of contact: Daniel Blanco +Title: Director - Representante Legal +Email: daniel@blancomartin.cl +Telephone: +56 2 28400990 + +List of contributors: + +* Fernando de La Barrera fernando@blancomartin.cl https://github.com/bmya-fed +* Alejandro Paciotti alejandro@blancomartin.cl https://github.com/alp-bmya +* Albert Nieriz albert@blancomartin.cl https://github.com/aln-bmya +* Bruno Figares bruno@blancomartin.cl https://github.com/brf-bmya +* Susana Vazquez susana@blancomartin.cl https://github.com/suv-bmya diff --git a/doc/cla/corporate/bumanit.md b/doc/cla/corporate/bumanit.md index b05d68242ad..8471840fb8e 100644 --- a/doc/cla/corporate/bumanit.md +++ b/doc/cla/corporate/bumanit.md @@ -9,7 +9,9 @@ declaration. Signed, Baskhuu Lodoikhuu baskhuujacara@gmail.com https://github.com/jacara +Baskhuu Lodoikhuu baskhuu@bumanit.mn https://github.com/bumanit List of contributors: Baskhuu Lodoikhuu baskhuujacara@gmail.com https://github.com/jacara +Baskhuu Lodoikhuu baskhuu@bumanit.mn https://github.com/bumanit diff --git a/doc/cla/individual/dorcyv.md b/doc/cla/individual/dorcyv.md new file mode 100644 index 00000000000..d29652c3e72 --- /dev/null +++ b/doc/cla/individual/dorcyv.md @@ -0,0 +1,11 @@ +France, 2019-07-04 + +I hereby agree to the terms of the Odoo Individual Contributor License +Agreement v1.0. + +I declare that I am authorized and able to make this agreement and sign this +declaration. + +Signed, + +Valérian Dorcy valerian.dorcy@gmail.com https://github.com/dorcyv diff --git a/doc/cla/individual/gregory-moka.md b/doc/cla/individual/gregory-moka.md new file mode 100644 index 00000000000..42fddcb294c --- /dev/null +++ b/doc/cla/individual/gregory-moka.md @@ -0,0 +1,9 @@ +France, 2019-07-11 + +I hereby agree to the terms of the Odoo Individual Contributor License Agreement v1.0. + +I declare that I am authorized and able to make this agreement and sign this declaration. + +Signed, + +Grégory Schreiner gregory@mokatourisme.fr https://github.com/gregory-moka diff --git a/odoo/addons/base/i18n/hu.po b/odoo/addons/base/i18n/hu.po index dc8e77676fe..65ecb23841d 100644 --- a/odoo/addons/base/i18n/hu.po +++ b/odoo/addons/base/i18n/hu.po @@ -9,6 +9,7 @@ # Martin Trigaux, 2018 # krnkris, 2018 # Ákos Nagy <akos.nagy@oregional.hu>, 2019 +# Gergő Kertész <gergo.kertesz@maxflow.hu>, 2019 # msgid "" msgstr "" @@ -16,7 +17,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-08-02 10:02+0000\n" "PO-Revision-Date: 2016-08-05 12:54+0000\n" -"Last-Translator: Ákos Nagy <akos.nagy@oregional.hu>, 2019\n" +"Last-Translator: Gergő Kertész <gergo.kertesz@maxflow.hu>, 2019\n" "Language-Team: Hungarian (https://www.transifex.com/odoo/teams/41243/hu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -7423,7 +7424,7 @@ msgstr "Összeg után" #. module: base #: model:res.partner.industry,name:base.res_partner_industry_A msgid "Agriculture" -msgstr "" +msgstr "Mezőgazdaság" #. module: base #: model:res.country,name:base.al diff --git a/odoo/addons/base/tests/test_base.py b/odoo/addons/base/tests/test_base.py index a823c65dc31..231f1daadd2 100644 --- a/odoo/addons/base/tests/test_base.py +++ b/odoo/addons/base/tests/test_base.py @@ -2,17 +2,15 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. import ast -import unittest from odoo import SUPERUSER_ID from odoo.exceptions import UserError, ValidationError -from odoo.tests.common import TransactionCase, tagged +from odoo.tests.common import TransactionCase, BaseCase from odoo.tools import mute_logger from odoo.tools.safe_eval import safe_eval, const_eval -@tagged('standard', 'at_install') -class TestSafeEval(unittest.TestCase): +class TestSafeEval(BaseCase): def test_const(self): # NB: True and False are names in Python 2 not consts expected = (1, {"a": {2.5}}, [None, u"foo"]) diff --git a/odoo/addons/base/tests/test_db_cursor.py b/odoo/addons/base/tests/test_db_cursor.py index 839bcff6f89..b0b6a5a7071 100644 --- a/odoo/addons/base/tests/test_db_cursor.py +++ b/odoo/addons/base/tests/test_db_cursor.py @@ -1,11 +1,11 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -import unittest import odoo from odoo.sql_db import TestCursor from odoo.tests import common +from odoo.tests.common import BaseCase from odoo.tools.misc import mute_logger ADMIN_USER_ID = common.ADMIN_USER_ID @@ -14,8 +14,7 @@ def registry(): return odoo.registry(common.get_db_name()) -@common.tagged('standard', 'at_install') -class TestExecute(unittest.TestCase): +class TestExecute(BaseCase): """ Try cr.execute with wrong parameters """ @mute_logger('odoo.sql_db') diff --git a/odoo/addons/base/tests/test_func.py b/odoo/addons/base/tests/test_func.py index b0b540acb5d..833653fffe7 100644 --- a/odoo/addons/base/tests/test_func.py +++ b/odoo/addons/base/tests/test_func.py @@ -2,15 +2,13 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. import functools -import unittest -from odoo.tests.common import tagged +from odoo.tests.common import BaseCase from odoo.tools import frozendict from odoo.tools.func import compose -@tagged('standard', 'at_install') -class TestCompose(unittest.TestCase): +class TestCompose(BaseCase): def test_basic(self): str_add = compose(str, lambda a, b: a + b) self.assertEqual(str_add(1, 2), "3") @@ -25,8 +23,7 @@ class TestCompose(unittest.TestCase): self.assertEqual(mul(5, 42), u"210") -@tagged('standard', 'at_install') -class TestFrozendict(unittest.TestCase): +class TestFrozendict(BaseCase): def test_frozendict_immutable(self): """ Ensure that a frozendict is immutable. """ vals = {'name': 'Joe', 'age': 42} diff --git a/odoo/addons/base/tests/test_ir_sequence.py b/odoo/addons/base/tests/test_ir_sequence.py index 6c31728de35..0fc53012b48 100644 --- a/odoo/addons/base/tests/test_ir_sequence.py +++ b/odoo/addons/base/tests/test_ir_sequence.py @@ -2,13 +2,13 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from contextlib import contextmanager -import unittest import psycopg2 import psycopg2.errorcodes import odoo from odoo.tests import common +from odoo.tests.common import BaseCase ADMIN_USER_ID = common.ADMIN_USER_ID @@ -28,8 +28,7 @@ def drop_sequence(code): seq.unlink() -@common.tagged('standard', 'at_install') -class TestIrSequenceStandard(unittest.TestCase): +class TestIrSequenceStandard(BaseCase): """ A few tests for a 'Standard' (i.e. PostgreSQL) sequence. """ def test_ir_sequence_create(self): @@ -67,8 +66,7 @@ class TestIrSequenceStandard(unittest.TestCase): drop_sequence('test_sequence_type') -@common.tagged('standard', 'at_install') -class TestIrSequenceNoGap(unittest.TestCase): +class TestIrSequenceNoGap(BaseCase): """ Copy of the previous tests for a 'No gap' sequence. """ def test_ir_sequence_create_no_gap(self): @@ -105,8 +103,7 @@ class TestIrSequenceNoGap(unittest.TestCase): drop_sequence('test_sequence_type_2') -@common.tagged('standard', 'at_install') -class TestIrSequenceChangeImplementation(unittest.TestCase): +class TestIrSequenceChangeImplementation(BaseCase): """ Create sequence objects and change their ``implementation`` field. """ def test_ir_sequence_1_create(self): @@ -143,8 +140,7 @@ class TestIrSequenceChangeImplementation(unittest.TestCase): drop_sequence('test_sequence_type_4') -@common.tagged('standard', 'at_install') -class TestIrSequenceGenerate(unittest.TestCase): +class TestIrSequenceGenerate(BaseCase): """ Create sequence objects and generate some values. """ def test_ir_sequence_create(self): diff --git a/odoo/addons/base/tests/test_mail.py b/odoo/addons/base/tests/test_mail.py index 0e4a8c262c4..11fac3a885d 100644 --- a/odoo/addons/base/tests/test_mail.py +++ b/odoo/addons/base/tests/test_mail.py @@ -1,15 +1,13 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -import unittest -from odoo.tests.common import tagged +from odoo.tests.common import BaseCase from odoo.tools import html_sanitize, append_content_to_html, plaintext2html, email_split, misc from . import test_mail_examples -@tagged('standard', 'at_install') -class TestSanitizer(unittest.TestCase): +class TestSanitizer(BaseCase): """ Test the html sanitizer that filters html to remove unwanted attributes """ def test_basic_sanitizer(self): @@ -285,8 +283,7 @@ class TestSanitizer(unittest.TestCase): # self.assertNotIn(ext, new_html) -@tagged('standard', 'at_install') -class TestHtmlTools(unittest.TestCase): +class TestHtmlTools(BaseCase): """ Test some of our generic utility functions about html """ def test_plaintext2html(self): @@ -313,8 +310,7 @@ class TestHtmlTools(unittest.TestCase): self.assertEqual(append_content_to_html(html, content, plaintext_flag, preserve_flag, container_tag), expected, 'append_content_to_html is broken') -@tagged('standard', 'at_install') -class TestEmailTools(unittest.TestCase): +class TestEmailTools(BaseCase): """ Test some of our generic utility functions for emails """ def test_email_split(self): diff --git a/odoo/addons/base/tests/test_mimetypes.py b/odoo/addons/base/tests/test_mimetypes.py index 3ca506cb744..e379c5474f2 100644 --- a/odoo/addons/base/tests/test_mimetypes.py +++ b/odoo/addons/base/tests/test_mimetypes.py @@ -1,7 +1,7 @@ import base64 import unittest -from odoo.tests.common import tagged +from odoo.tests.common import BaseCase from odoo.tools.mimetypes import guess_mimetype PNG = b'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVQI12P4//8/AAX+Av7czFnnAAAAAElFTkSuQmCC' @@ -23,8 +23,7 @@ hbnNsYXRlKDUwLDUwKSI+CiAgICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjU pyZWQ7IiAvPgogIDwvZz4KCjwvc3ZnPgo=""" -@tagged('standard', 'at_install') -class test_guess_mimetype(unittest.TestCase): +class test_guess_mimetype(BaseCase): def test_default_mimetype_empty(self): mimetype = guess_mimetype(b'') diff --git a/odoo/addons/base/tests/test_misc.py b/odoo/addons/base/tests/test_misc.py index 08c790387e9..d208ab11fb5 100644 --- a/odoo/addons/base/tests/test_misc.py +++ b/odoo/addons/base/tests/test_misc.py @@ -4,14 +4,12 @@ import datetime from dateutil.relativedelta import relativedelta import pytz -import unittest from odoo.tools import misc, date_utils -from odoo.tests.common import TransactionCase, tagged +from odoo.tests.common import TransactionCase, BaseCase -@tagged('standard', 'at_install') -class TestCountingStream(unittest.TestCase): +class TestCountingStream(BaseCase): def test_empty_stream(self): s = misc.CountingStream(iter([])) self.assertEqual(s.index, -1) @@ -42,8 +40,7 @@ class TestCountingStream(unittest.TestCase): self.assertEqual(s.index, 0) -@tagged('standard', 'at_install') -class TestDateRangeFunction(unittest.TestCase): +class TestDateRangeFunction(BaseCase): """ Test on date_range generator. """ def test_date_range_with_naive_datetimes(self): diff --git a/odoo/addons/base/tests/test_osv.py b/odoo/addons/base/tests/test_osv.py index 328124ca56c..f79dde6751a 100644 --- a/odoo/addons/base/tests/test_osv.py +++ b/odoo/addons/base/tests/test_osv.py @@ -1,14 +1,11 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -import unittest - from odoo.osv.query import Query -from odoo.tests.common import tagged +from odoo.tests.common import BaseCase -@tagged('standard', 'at_install') -class QueryTestCase(unittest.TestCase): +class QueryTestCase(BaseCase): def test_basic_query(self): query = Query() diff --git a/odoo/addons/base/tests/test_tests_tags.py b/odoo/addons/base/tests/test_tests_tags.py index 3f2bcf21c2f..52856aadc83 100644 --- a/odoo/addons/base/tests/test_tests_tags.py +++ b/odoo/addons/base/tests/test_tests_tags.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo.tests.common import TransactionCase, tagged, TagsSelector +from odoo.tests.common import TransactionCase, tagged, TagsSelector, BaseCase @tagged('nodatabase') @@ -17,7 +17,8 @@ class TestSetTags(TransactionCase): fc = FakeClass() self.assertTrue(hasattr(fc, 'test_tags')) - self.assertEqual(fc.test_tags, {'at_install', 'standard', 'base'}) + self.assertEqual(fc.test_tags, {'at_install', 'standard'}) + self.assertEqual(fc.test_module, 'base') def test_set_tags_not_decorated(self): """Test that a TransactionCase has some test_tags by default""" @@ -28,7 +29,8 @@ class TestSetTags(TransactionCase): fc = FakeClass() self.assertTrue(hasattr(fc, 'test_tags')) - self.assertEqual(fc.test_tags, {'at_install', 'standard', 'base'}) + self.assertEqual(fc.test_tags, {'at_install', 'standard'}) + self.assertEqual(fc.test_module, 'base') def test_set_tags_single_tag(self): """Test the set_tags decorator with a single tag""" @@ -39,7 +41,8 @@ class TestSetTags(TransactionCase): fc = FakeClass() - self.assertEqual(fc.test_tags, {'at_install', 'standard', 'base', 'slow'}) + self.assertEqual(fc.test_tags, {'at_install', 'standard', 'slow'}) + self.assertEqual(fc.test_module, 'base') def test_set_tags_multiple_tags(self): """Test the set_tags decorator with multiple tags""" @@ -50,7 +53,8 @@ class TestSetTags(TransactionCase): fc = FakeClass() - self.assertEqual(fc.test_tags, {'at_install', 'standard', 'base', 'slow', 'nightly'}) + self.assertEqual(fc.test_tags, {'at_install', 'standard', 'slow', 'nightly'}) + self.assertEqual(fc.test_module, 'base') def test_inheritance(self): """Test inheritance when using the 'tagged' decorator""" @@ -64,13 +68,15 @@ class TestSetTags(TransactionCase): pass fc = FakeClassB() - self.assertEqual(fc.test_tags, {'at_install', 'standard', 'base', 'nightly'}) + self.assertEqual(fc.test_tags, {'at_install', 'standard', 'nightly'}) + self.assertEqual(fc.test_module, 'base') class FakeClassC(FakeClassA): pass fc = FakeClassC() - self.assertEqual(fc.test_tags, {'at_install', 'standard', 'base'}) + self.assertEqual(fc.test_tags, {'at_install', 'standard'}) + self.assertEqual(fc.test_module, 'base') def test_untagging(self): """Test that one can remove the 'standard' tag""" @@ -80,7 +86,8 @@ class TestSetTags(TransactionCase): pass fc = FakeClassA() - self.assertEqual(fc.test_tags, {'at_install', 'base'}) + self.assertEqual(fc.test_tags, {'at_install'}) + self.assertEqual(fc.test_module, 'base') @tagged('-standard', '-base', '-at_install') class FakeClassB(TransactionCase): @@ -104,61 +111,110 @@ class TestSelector(TransactionCase): """Test the parser part of the TagsSelector class""" tags = TagsSelector('+slow') - self.assertEqual({'slow', }, tags.include) + self.assertEqual({('slow', None, None, None),}, tags.include) self.assertEqual(set(), tags.exclude) tags = TagsSelector('+slow,nightly') - self.assertEqual({'slow', 'nightly'}, tags.include) + self.assertEqual({('slow', None, None, None), ('nightly', None, None, None)}, tags.include) self.assertEqual(set(), tags.exclude) tags = TagsSelector('+slow,-standard') - self.assertEqual({'slow', }, tags.include) - self.assertEqual({'standard', }, tags.exclude) + self.assertEqual({('slow', None, None, None),}, tags.include) + self.assertEqual({('standard', None, None, None),}, tags.exclude) # same with space after the comma tags = TagsSelector('+slow, -standard') - self.assertEqual({'slow', }, tags.include) - self.assertEqual({'standard', }, tags.exclude) + self.assertEqual({('slow', None, None, None),}, tags.include) + self.assertEqual({('standard', None, None, None),}, tags.exclude) - # same with space befaore and after the comma + # same with space before and after the comma tags = TagsSelector('+slow , -standard') - self.assertEqual({'slow', }, tags.include) - self.assertEqual({'standard', }, tags.exclude) + self.assertEqual({('slow', None, None, None), }, tags.include) + self.assertEqual({('standard', None, None, None), }, tags.exclude) tags = TagsSelector('+slow ,-standard,+js') - self.assertEqual({'slow', 'js', }, tags.include) - self.assertEqual({'standard', }, tags.exclude) + self.assertEqual({('slow', None, None, None),('js', None, None, None)}, tags.include) + self.assertEqual({('standard', None, None, None),}, tags.exclude) + # without + tags = TagsSelector('slow, ') - self.assertEqual({'slow', }, tags.include) + self.assertEqual({('slow', None, None, None), }, tags.include) self.assertEqual(set(), tags.exclude) + # duplicates tags = TagsSelector('+slow,-standard, slow,-standard ') - self.assertEqual({'slow', }, tags.include) - self.assertEqual({'standard', }, tags.exclude) + self.assertEqual({('slow', None, None, None), }, tags.include) + self.assertEqual({('standard', None, None, None), }, tags.exclude) tags = TagsSelector('') self.assertEqual(set(), tags.include) self.assertEqual(set(), tags.exclude) + tags = TagsSelector('/module') # all standard test of a module + self.assertEqual({('standard', 'module', None, None), }, tags.include) + self.assertEqual(set(), tags.exclude) + + tags = TagsSelector('*/module') # all tests of a module + self.assertEqual({(None, 'module', None, None), }, tags.include) + self.assertEqual(set(), tags.exclude) + + tags = TagsSelector(':class') # all standard test of a class + self.assertEqual({('standard', None, 'class', None), }, tags.include) + self.assertEqual(set(), tags.exclude) + + tags = TagsSelector('.method') + self.assertEqual({('standard', None, None, 'method'), }, tags.include) + self.assertEqual(set(), tags.exclude) + + tags = TagsSelector(':class.method') + self.assertEqual({('standard', None, 'class', 'method'), }, tags.include) + self.assertEqual(set(), tags.exclude) + + tags = TagsSelector('/module:class.method') # only a specific test func in a module (standard) + self.assertEqual({('standard', 'module', 'class', 'method'), }, tags.include) + self.assertEqual(set(), tags.exclude) + + tags = TagsSelector('*/module:class.method') # only a specific test func in a module + self.assertEqual({(None, 'module', 'class', 'method'), }, tags.include) + self.assertEqual(set(), tags.exclude) + + tags = TagsSelector('-/module:class.method') # disable a specific test func in a module + self.assertEqual({('standard', None, None, None), }, tags.include) # all strandard + self.assertEqual({(None, 'module', 'class', 'method'), }, tags.exclude) # exept the test func + + tags = TagsSelector('-*/module:class.method') + self.assertEqual({('standard', None, None, None), }, tags.include) + self.assertEqual({(None, 'module', 'class', 'method'), }, tags.exclude) + + tags = TagsSelector('tag/module') + self.assertEqual({('tag', 'module', None, None), }, tags.include) + self.assertEqual(set(), tags.exclude) + + tags = TagsSelector('tag.method') + self.assertEqual({('tag', None, None, 'method'), }, tags.include) + self.assertEqual(set(), tags.exclude) + + tags = TagsSelector('*/module,-standard') # all non standard test of a module + self.assertEqual({(None, 'module', None, None), }, tags.include) # all in module + self.assertEqual({('standard', None, None, None), }, tags.exclude) # exept standard ones + @tagged('nodatabase') class TestSelectorSelection(TransactionCase): - def test_selector_selection(self): """Test check_tags use cases""" class Test_A(TransactionCase): pass @tagged('stock') - class Test_B(): + class Test_B(BaseCase): pass @tagged('stock', 'slow') - class Test_C(): + class Test_C(BaseCase): pass @tagged('standard', 'slow') - class Test_D(): + class Test_D(BaseCase): pass @tagged('-at_install', 'post_install') @@ -175,7 +231,6 @@ class TestSelectorSelection(TransactionCase): # considered tagged standard and they are run by default if # not explicitly deselected with '-standard' or if 'standard' is not # selectected along with another test tag - # same as "--test-tags=''" parameters: tags = TagsSelector('') self.assertFalse(tags.check(no_tags_obj)) @@ -211,10 +266,10 @@ class TestSelectorSelection(TransactionCase): self.assertFalse(tags.check(stock_tag_obj)) tags = TagsSelector('standard') - self.assertFalse(tags.check(stock_tag_obj)) + self.assertTrue(tags.check(stock_tag_obj)) tags = TagsSelector('slow,standard') - self.assertFalse(tags.check(stock_tag_obj)) + self.assertTrue(tags.check(stock_tag_obj)) tags = TagsSelector('slow,-standard') self.assertFalse(tags.check(stock_tag_obj)) diff --git a/odoo/addons/base/tests/test_translate.py b/odoo/addons/base/tests/test_translate.py index f6a556be937..bb641b3e044 100644 --- a/odoo/addons/base/tests/test_translate.py +++ b/odoo/addons/base/tests/test_translate.py @@ -1,16 +1,12 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. - -import unittest - from odoo.tools import mute_logger from odoo.tools.translate import quote, unquote, xml_translate, html_translate -from odoo.tests.common import TransactionCase, tagged +from odoo.tests.common import TransactionCase, BaseCase from psycopg2 import IntegrityError -@tagged('standard', 'at_install') -class TranslationToolsTestCase(unittest.TestCase): +class TranslationToolsTestCase(BaseCase): def assertItemsEqual(self, a, b, msg=None): self.assertEqual(sorted(a), sorted(b), msg) diff --git a/odoo/addons/base/tests/test_uninstall.py b/odoo/addons/base/tests/test_uninstall.py index 041825d463d..123fbf747dd 100644 --- a/odoo/addons/base/tests/test_uninstall.py +++ b/odoo/addons/base/tests/test_uninstall.py @@ -8,6 +8,8 @@ import unittest from odoo import api, registry, SUPERUSER_ID from odoo.tests import common +from odoo.tests.common import BaseCase + from odoo.modules.registry import Registry @@ -25,8 +27,7 @@ MODULE = 'test_uninstall' MODEL = 'test_uninstall.model' -@common.tagged('standard', 'at_install') -class TestUninstall(unittest.TestCase): +class TestUninstall(BaseCase): """ Test the install/uninstall of a test module. The module is available in `odoo.tests` which should be present in the addons-path. diff --git a/odoo/addons/base/tests/test_view_validation.py b/odoo/addons/base/tests/test_view_validation.py index 5e550414436..c253d1badea 100644 --- a/odoo/addons/base/tests/test_view_validation.py +++ b/odoo/addons/base/tests/test_view_validation.py @@ -3,9 +3,8 @@ from lxml import etree import io -import unittest -from odoo.tests.common import tagged +from odoo.tests.common import BaseCase from odoo.tools.view_validation import ( valid_page_in_book, valid_att_in_form, valid_type_in_colspan, valid_type_in_col, valid_att_in_field, valid_att_in_label, @@ -131,8 +130,7 @@ valid_tree = etree.parse(io.BytesIO(b'''\ ''')).getroot() -@tagged('standard', 'at_install') -class TestViewValidation(unittest.TestCase): +class TestViewValidation(BaseCase): """ Test the view validation code (but not the views themselves). """ def test_page_validation(self): diff --git a/odoo/addons/test_mimetypes/tests/test_guess_mimetypes.py b/odoo/addons/test_mimetypes/tests/test_guess_mimetypes.py index 993a3c97528..2568cd21db9 100644 --- a/odoo/addons/test_mimetypes/tests/test_guess_mimetypes.py +++ b/odoo/addons/test_mimetypes/tests/test_guess_mimetypes.py @@ -1,8 +1,7 @@ # -*- coding: utf-8 -*- import os.path -import unittest -from odoo.tests.common import tagged +from odoo.tests.common import BaseCase from odoo.tools.mimetypes import guess_mimetype def contents(extension): @@ -14,8 +13,7 @@ def contents(extension): return f.read() -@tagged('standard', 'at_install') -class TestMimeGuessing(unittest.TestCase): +class TestMimeGuessing(BaseCase): def test_doc(self): self.assertEqual( guess_mimetype(contents('doc')), diff --git a/odoo/tests/common.py b/odoo/tests/common.py index 3dc1c7ba6db..b917aec5d2d 100644 --- a/odoo/tests/common.py +++ b/odoo/tests/common.py @@ -189,8 +189,9 @@ class MetaCase(type): super(MetaCase, cls).__init__(name, bases, attrs) # assign default test tags if cls.__module__.startswith('odoo.addons.'): - module = cls.__module__.split('.')[2] - cls.test_tags = {'standard', 'at_install', module} + cls.test_tags = {'standard', 'at_install'} + cls.test_module = cls.__module__.split('.')[2] + cls.test_class = cls.__name__ class BaseCase(TreeCase, MetaCase('DummyCase', (object,), {})): @@ -244,7 +245,10 @@ class BaseCase(TreeCase, MetaCase('DummyCase', (object,), {})): def _assertRaises(self, exception): """ Context manager that clears the environment upon failure. """ with super(BaseCase, self).assertRaises(exception) as cm: - with self.env.clear_upon_failure(): + if hasattr(self, 'env'): + with self.env.clear_upon_failure(): + yield cm + else: yield cm def assertRaises(self, exception, func=None, *args, **kwargs): @@ -333,9 +337,23 @@ class BaseCase(TreeCase, MetaCase('DummyCase', (object,), {})): return False return True + def _repr_field_value(record, field_name): + record_value = record[field_name] + field_type = record._fields[field_name].type + if field_type == 'monetary': + currency_field_name = record._fields[field_name].currency_field + record_currency = record[currency_field_name] + return record_currency and record_currency.round(record_value) or record_value + elif field_type in ('one2many', 'many2many'): + return set(record_value.ids) + elif field_type == 'many2one': + return record_value.id + else: + return record_value + def _format_message(records, expected_values): ''' Return a formatted representation of records/expected_values. ''' - all_records_values = records.read(list(expected_values[0].keys()), load=False) + all_records_values = [{key: _repr_field_value(record, key) for key in expected_values[0]} for record in records] msg1 = '\n'.join(pprint.pformat(dic) for dic in all_records_values) msg2 = '\n'.join(pprint.pformat(dic) for dic in expected_values) return 'Current values:\n\n%s\n\nExpected values:\n\n%s' % (msg1, msg2) @@ -1816,7 +1834,7 @@ def _get_node(view, f, *arg): def tagged(*tags): """ - A decorator to tag TestCase objects + A decorator to tag BaseCase objects Tags are stored in a set that can be accessed from a 'test_tags' attribute A tag prefixed by '-' will remove the tag e.g. to remove the 'standard' tag By default, all Test classes from odoo.tests.common have a test_tags @@ -1826,33 +1844,75 @@ def tagged(*tags): def tags_decorator(obj): include = {t for t in tags if not t.startswith('-')} exclude = {t[1:] for t in tags if t.startswith('-')} - obj.test_tags = (getattr(obj, 'test_tags', set()) | include) - exclude + obj.test_tags = (getattr(obj, 'test_tags', set()) | include) - exclude # todo remove getattr in master since we want to limmit tagged to BaseCase and always have +standard tag return obj return tags_decorator class TagsSelector(object): """ Test selector based on tags. """ + filter_spec_re = re.compile(r'^([+-]?)(\*|\w*)(?:/(\w*))?(?::(\w*))?(?:\.(\w*))?$') # [-][tag][/module][:class][.method] def __init__(self, spec): """ Parse the spec to determine tags to include and exclude. """ - clean_tags = {t.strip() for t in spec.split(',') if t.strip() != ''} - self.exclude = {t[1:] for t in clean_tags if t.startswith('-')} - self.include = {t.replace('+', '') for t in clean_tags if not t.startswith('-')} + filter_specs = {t.strip() for t in spec.split(',') if t.strip()} + self.exclude = set() + self.include = set() + + for filter_spec in filter_specs: + match = self.filter_spec_re.match(filter_spec) + if not match: + _logger.error('Invalid tag %s', filter_spec) + continue + + sign, tag, module, klass, method = match.groups() + is_include = sign != '-' + + if not tag and is_include: + # including /module:class.method implicitly requires 'standard' + tag = 'standard' + elif not tag or tag == '*': + # '*' indicates all tests (instead of 'standard' tests only) + tag = None + test_filter = (tag, module, klass, method) - def check(self, arg): + if is_include: + self.include.add(test_filter) + else: + self.exclude.add(test_filter) + + if self.exclude and not self.include: + self.include.add(('standard', None, None, None)) + + def check(self, test): """ Return whether ``arg`` matches the specification: it must have at - least one tag in ``self.include`` and none in ``self.exclude``. + least one tag in ``self.include`` and none in ``self.exclude`` for each tag category. """ - # handle the case where the Test does not inherit from TransactionCase - tags = getattr(arg, 'test_tags', set()) - inter_no_test = self.exclude.intersection(tags) - if inter_no_test: - _logger.debug("Test '%s' not selected because it is tagged with : %s (exclusions: %s)", arg, inter_no_test, self.exclude) + if not hasattr(test, 'test_tags'): # handle the case where the Test does not inherit from BaseCase and has no test_tags + _logger.debug("Skipping test '%s' because no test_tag found.", test) return False - inter_to_test = self.include.intersection(tags) - if not inter_to_test: - _logger.debug("Test '%s' not selected because it was not tagged with %s", arg, self.include) + + test_module = getattr(test, 'test_module', None) + test_class = getattr(test, 'test_class', None) + test_tags = test.test_tags | {test_module} # module as test_tags deprecated, keep for retrocompatibility, + test_method = getattr(test, '_testMethodName', None) + + def _is_matching(test_filter): + (tag, module, klass, method) = test_filter + if tag and tag not in test_tags: + return False + elif module and module != test_module: + return False + elif klass and klass != test_class: + return False + elif method and test_method and method != test_method: + return False + return True + + if any(_is_matching(test_filter) for test_filter in self.exclude): return False - _logger.debug("Test '%s' selected: tagged with %s, exclusions: %s, inclusions: %s", arg, tags, self.exclude, self.include) - return True + + if any(_is_matching(test_filter) for test_filter in self.include): + return True + + return False diff --git a/odoo/tools/config.py b/odoo/tools/config.py index b3a10c1145f..583ab4ad267 100644 --- a/odoo/tools/config.py +++ b/odoo/tools/config.py @@ -160,7 +160,14 @@ class configmanager(object): dest='test_enable', help="Enable unit tests.") group.add_option("--test-tags", dest="test_tags", - help="Comma separated list of tags to filter which tests to execute. Enable unit tests if set.") + help="""Comma separated list of spec to filter which tests to execute. Enable unit tests if set. + A filter spec has the format: [-][tag][/module][:class][.method] + The '-' specifies if we want to include or exclude tests matching this spec. + The tag will match tags added on a class with a @tagged decorator. By default tag value is 'standard' when not + given on include mode. '*' will match all tags. Tag will also match module name (deprecated, use /module) + The module, class, and method will respectively match the module name, test class name and test method name. + examples: :TestClass.test_func,/test_module,external + """) parser.add_option_group(group) |
