summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2018-05-09 15:45:20 +0200
committerChristophe Simonis <chs@odoo.com>2018-05-09 15:45:20 +0200
commit5a751fa20091fc38b6d9032c1d8504adc3f0a394 (patch)
treeefc44792d39d7e1c1f74d15ae740718d22a62e21
parentcca15358b655a93205e07ca66025643dd57269ab (diff)
parentaae54ecc159d109a044fbaa8151f1104897f2203 (diff)
[MERGE] forward port branch saas-11.2 up to aae54ecc159
-rw-r--r--addons/account/i18n/de.po44
-rw-r--r--addons/account/i18n/es.po58
-rw-r--r--addons/account/i18n/fr.po58
-rw-r--r--addons/account/i18n/hu.po6
-rw-r--r--addons/account/i18n/ru.po55
-rw-r--r--addons/account/i18n/tr.po2
-rw-r--r--addons/account/models/account_invoice.py3
-rw-r--r--addons/account/models/account_move.py26
-rw-r--r--addons/account/models/partner.py9
-rw-r--r--addons/account/static/src/js/reconciliation/reconciliation_model.js4
-rw-r--r--addons/account/tests/test_reconciliation.py48
-rw-r--r--addons/account/views/partner_view.xml2
-rw-r--r--addons/account_check_printing/i18n/nl.po4
-rw-r--r--addons/account_check_printing/models/account_payment.py2
-rw-r--r--addons/account_invoicing/i18n/ru.po8
-rw-r--r--addons/account_payment/i18n/zh_CN.po5
-rw-r--r--addons/account_voucher/i18n/nl.po4
-rw-r--r--addons/analytic/i18n/nl.po6
-rw-r--r--addons/anonymization/i18n/nl.po2
-rw-r--r--addons/barcodes/static/src/js/barcode_events.js6
-rw-r--r--addons/base_vat_autocomplete/models/res_partner.py8
-rw-r--r--addons/base_vat_autocomplete/views/res_company_view.xml2
-rw-r--r--addons/crm/i18n/fr.po2
-rw-r--r--addons/crm/i18n/nl.po4
-rw-r--r--addons/delivery/i18n/nl.po2
-rw-r--r--addons/delivery/i18n/tr.po2
-rw-r--r--addons/delivery/i18n/zh_CN.po7
-rw-r--r--addons/delivery/models/stock_picking.py2
-rw-r--r--addons/delivery/tests/test_delivery_cost.py5
-rw-r--r--addons/fleet/i18n/nl.po4
-rw-r--r--addons/gamification/i18n/nl.po4
-rw-r--r--addons/gamification/models/goal.py2
-rw-r--r--addons/gamification_sale_crm/i18n/ru.po13
-rw-r--r--addons/hr/i18n/ru.po34
-rw-r--r--addons/hr_contract/i18n/ru.po21
-rw-r--r--addons/hr_expense/i18n/hu.po2
-rw-r--r--addons/hr_expense/i18n/nl.po6
-rw-r--r--addons/hr_expense/models/hr_expense.py3
-rw-r--r--addons/hr_gamification/i18n/ru.po5
-rw-r--r--addons/hr_holidays/i18n/nl.po8
-rw-r--r--addons/hr_holidays/i18n/ru.po34
-rw-r--r--addons/hr_payroll/i18n/ru.po14
-rw-r--r--addons/hr_timesheet/i18n/nl.po2
-rw-r--r--addons/hr_timesheet/i18n/ru.po23
-rw-r--r--addons/iap/i18n/tr.po5
-rw-r--r--addons/l10n_be/i18n_extra/nl_BE.po453
-rw-r--r--addons/l10n_cr/data/l10n_cr_state_data.xml14
-rw-r--r--addons/l10n_do/models/chart_template.py43
-rw-r--r--addons/l10n_fr_certification/data/account_move.xml2
-rw-r--r--addons/l10n_fr_pos_cert/data/pos_inalterability.xml1
-rw-r--r--addons/l10n_multilang/models/l10n_multilang.py16
-rw-r--r--addons/mail/models/ir_model.py6
-rw-r--r--addons/mail/models/mail_activity.py5
-rw-r--r--addons/mail/models/res_users.py13
-rw-r--r--addons/mail/static/src/js/chat_window.js6
-rw-r--r--addons/mail/static/src/js/composer.js6
-rw-r--r--addons/mail/static/src/js/document_viewer.js16
-rw-r--r--addons/mail/static/src/js/services/chat_manager.js8
-rw-r--r--addons/mail/static/src/js/thread.js1
-rw-r--r--addons/mail/static/src/less/composer.less10
-rw-r--r--addons/mail/static/src/xml/thread.xml2
-rw-r--r--addons/mail/static/tests/chat_window_tests.js78
-rw-r--r--addons/maintenance/i18n/nl.po2
-rw-r--r--addons/mrp/i18n/nl.po2
-rw-r--r--addons/mrp/models/mrp_production.py2
-rw-r--r--addons/mrp/models/mrp_workorder.py22
-rw-r--r--addons/mrp/wizard/mrp_product_produce.py7
-rw-r--r--addons/payment/i18n/nl.po6
-rw-r--r--addons/payment/i18n/tr.po5
-rw-r--r--addons/payment/models/__init__.py1
-rw-r--r--addons/payment/models/chart_template.py14
-rw-r--r--addons/payment/models/payment_acquirer.py72
-rw-r--r--addons/payment/views/payment_views.xml4
-rw-r--r--addons/payment_adyen/__init__.py1
-rw-r--r--addons/payment_adyen/__manifest__.py1
-rw-r--r--addons/payment_authorize/__init__.py1
-rw-r--r--addons/payment_authorize/__manifest__.py1
-rw-r--r--addons/payment_buckaroo/__init__.py1
-rw-r--r--addons/payment_buckaroo/__manifest__.py1
-rw-r--r--addons/payment_ogone/__init__.py1
-rw-r--r--addons/payment_ogone/__manifest__.py1
-rw-r--r--addons/payment_ogone/i18n/tr.po5
-rw-r--r--addons/payment_paypal/__init__.py1
-rw-r--r--addons/payment_paypal/__manifest__.py1
-rw-r--r--addons/payment_payumoney/__init__.py1
-rw-r--r--addons/payment_payumoney/__manifest__.py1
-rw-r--r--addons/payment_sips/__init__.py1
-rw-r--r--addons/payment_sips/__manifest__.py1
-rw-r--r--addons/payment_stripe/__init__.py1
-rw-r--r--addons/payment_stripe/__manifest__.py1
-rw-r--r--addons/payment_transfer/__init__.py1
-rw-r--r--addons/payment_transfer/__manifest__.py1
-rw-r--r--addons/payment_transfer/models/payment.py13
-rw-r--r--addons/point_of_sale/i18n/nl.po4
-rw-r--r--addons/point_of_sale/i18n/tr.po2
-rw-r--r--addons/portal/i18n/tr.po5
-rw-r--r--addons/pos_mercury/i18n/nl.po2
-rw-r--r--addons/pos_restaurant/i18n/nl.po2
-rw-r--r--addons/pos_sale/i18n/tr.po5
-rw-r--r--addons/product/i18n/tr.po16
-rw-r--r--addons/product/models/product.py11
-rw-r--r--addons/product/tests/test_variants.py9
-rw-r--r--addons/product_expiry/i18n/tr.po12
-rw-r--r--addons/project/i18n/nl.po2
-rw-r--r--addons/project/i18n/tr.po56
-rw-r--r--addons/project_timesheet_holidays/i18n/tr.po58
-rw-r--r--addons/purchase/i18n/fr.po46
-rw-r--r--addons/purchase/i18n/tr.po35
-rw-r--r--addons/purchase/models/account_invoice.py5
-rw-r--r--addons/purchase/models/purchase.py4
-rw-r--r--addons/purchase/tests/test_stockvaluation.py140
-rw-r--r--addons/purchase/views/portal_templates.xml3
-rw-r--r--addons/purchase_requisition/i18n/ru.po2
-rw-r--r--addons/purchase_requisition/i18n/tr.po37
-rw-r--r--addons/rating/i18n/nl.po2
-rw-r--r--addons/resource/i18n/tr.po37
-rw-r--r--addons/sale/i18n/tr.po12
-rw-r--r--addons/sale/models/sale.py20
-rw-r--r--addons/sale_crm/i18n/tr.po29
-rw-r--r--addons/sale_payment/i18n/tr.po6
-rw-r--r--addons/sale_payment/models/payment.py13
-rw-r--r--addons/sale_stock/i18n/nl.po2
-rw-r--r--addons/sale_stock/i18n/tr.po6
-rw-r--r--addons/sale_timesheet/i18n/tr.po11
-rw-r--r--addons/sale_timesheet/models/project.py2
-rw-r--r--addons/sales_team/i18n/tr.po31
-rw-r--r--addons/stock/i18n/nl.po6
-rw-r--r--addons/stock/i18n/tr.po317
-rw-r--r--addons/stock/models/procurement.py2
-rw-r--r--addons/stock/models/product.py9
-rw-r--r--addons/stock/models/stock_move.py50
-rw-r--r--addons/stock/models/stock_quant.py20
-rw-r--r--addons/stock/models/stock_warehouse.py24
-rw-r--r--addons/stock/tests/test_move.py266
-rw-r--r--addons/stock/tests/test_move2.py32
-rw-r--r--addons/stock_account/i18n/tr.po41
-rw-r--r--addons/stock_account/models/stock.py19
-rw-r--r--addons/stock_landed_costs/i18n/tr.po18
-rw-r--r--addons/stock_picking_batch/i18n/tr.po15
-rw-r--r--addons/survey/i18n/fr.po2
-rw-r--r--addons/survey/i18n/tr.po60
-rw-r--r--addons/utm/i18n/nl.po2
-rw-r--r--addons/utm/i18n/tr.po13
-rw-r--r--addons/web/i18n/nl.po2
-rw-r--r--addons/web/i18n/tr.po154
-rw-r--r--addons/web/static/src/js/core/ajax.js8
-rw-r--r--addons/web/static/src/js/fields/relational_fields.js9
-rw-r--r--addons/web/static/src/js/views/basic/basic_model.js47
-rw-r--r--addons/web/static/src/js/views/calendar/calendar_view.js16
-rw-r--r--addons/web/static/src/js/views/form/form_controller.js10
-rw-r--r--addons/web/static/src/js/views/form/form_view.js8
-rw-r--r--addons/web/static/src/js/views/kanban/kanban_model.js9
-rw-r--r--addons/web/static/src/js/views/list/list_editable_renderer.js7
-rw-r--r--addons/web/static/src/js/views/pivot/pivot_model.js6
-rw-r--r--addons/web/static/src/less/list_view.less8
-rw-r--r--addons/web/static/tests/fields/relational_fields_tests.js99
-rw-r--r--addons/web/static/tests/helpers/mock_server.js6
-rw-r--r--addons/web/static/tests/views/calendar_tests.js95
-rw-r--r--addons/web/static/tests/views/kanban_tests.js128
-rw-r--r--addons/web/static/tests/views/pivot_tests.js33
-rw-r--r--addons/web/tests/test_js.py4
-rw-r--r--addons/web_diagram/i18n/tr.po17
-rw-r--r--addons/web_editor/i18n/tr.po274
-rw-r--r--addons/web_editor/static/lib/summernote/src/js/EventHandler.js3
-rw-r--r--addons/web_editor/static/lib/summernote/src/js/module/Clipboard.js287
-rw-r--r--addons/web_editor/static/src/js/backend/fields.js4
-rw-r--r--addons/web_editor/static/src/js/editor/rte.summernote.js4
-rw-r--r--addons/website/models/website.py3
-rw-r--r--addons/website/views/website_templates.xml2
-rw-r--r--addons/website_event/static/src/js/website_event.js4
-rw-r--r--addons/website_forum/static/src/js/website_forum.js9
-rw-r--r--addons/website_forum/static/src/less/website_forum.less3
-rw-r--r--addons/website_forum/views/website_forum.xml11
-rw-r--r--addons/website_quote/controllers/main.py9
-rw-r--r--addons/website_sale/controllers/main.py9
-rw-r--r--addons/website_sale/models/website.py7
-rw-r--r--addons/website_sale_comparison/static/src/js/website_sale_comparison.js3
-rw-r--r--addons/website_sale_comparison/static/src/less/website_sale_comparison.less4
-rw-r--r--addons/website_sale_comparison/views/website_sale_comparison_template.xml2
-rw-r--r--addons/website_sale_wishlist/static/src/js/website_sale_wishlist.js2
-rw-r--r--addons/website_sale_wishlist/static/src/less/website_sale_wishlist.less4
-rw-r--r--addons/website_slides/controllers/main.py7
-rw-r--r--addons/website_slides/models/slides.py9
-rw-r--r--doc/cla/individual/nomadic-coding.md11
-rw-r--r--doc/reference/views.rst4
-rw-r--r--odoo/addons/base/data/ir_module_category_data.xml2
-rw-r--r--odoo/addons/base/data/res_currency_data.xml1
-rw-r--r--odoo/addons/base/i18n/nl.po2
-rw-r--r--odoo/addons/base/i18n/tr.po4
-rw-r--r--odoo/addons/base/models/ir_actions.py1
-rw-r--r--odoo/addons/base/models/res_currency.py1
-rw-r--r--odoo/api.py8
-rw-r--r--odoo/models.py20
-rw-r--r--odoo/netsvc.py7
-rw-r--r--odoo/tools/convert.py7
-rw-r--r--odoo/tools/mail.py7
-rwxr-xr-xsetup/package.py2
197 files changed, 2768 insertions, 1577 deletions
diff --git a/addons/account/i18n/de.po b/addons/account/i18n/de.po
index 749aa468bc0..451d39a8fd2 100644
--- a/addons/account/i18n/de.po
+++ b/addons/account/i18n/de.po
@@ -242,6 +242,50 @@ msgid ""
"</p>\n"
"</div>"
msgstr ""
+"<div>\n"
+"<p>Hallo ${object.partner_id.name}\n"
+"% set access_action = object.with_context(force_website=True).get_access_action()\n"
+"% set is_online = access_action and access_action['type'] == 'ir.actions.act_url'\n"
+"% set access_url = object.get_mail_url()\n"
+"\n"
+"% if object.partner_id.parent_id:\n"
+" (<i>${object.partner_id.parent_id.name}</i>)\n"
+"% endif\n"
+",</p>\n"
+"<p>hier im Anhang finden Sie Ihre\n"
+"% if object.number:\n"
+"Rechnung <strong>${object.number}</strong>\n"
+"% else:\n"
+"Rechnung\n"
+"% endif\n"
+"% if object.origin:\n"
+"(mit Referenz: ${object.origin})\n"
+"% endif\n"
+"mit einem Betrag von <strong>${format_amount(object.amount_total, object.currency_id)}</strong>\n"
+"from ${object.company_id.name}.\n"
+"</p>\n"
+"\n"
+"% if is_online:\n"
+" <br/><br/>\n"
+" <center>\n"
+" <a href=\"${access_url}\" style=\"background-color: #1abc9c; padding: 20px; text-decoration: none; color: #fff; border-radius: 5px; font-size: 16px;\" class=\"o_default_snippet_text\">Rechnung anzeigen</a>\n"
+" </center>\n"
+"% endif\n"
+" <br/><br/>\n"
+"\n"
+"% if object.state=='paid':\n"
+" <p>Diese Rechnung ist bereits bezahlt.</p>\n"
+"% else:\n"
+" <p>Bitte führen Sie die Zahlung so bald wie möglich durch.</p>\n"
+"% endif\n"
+"\n"
+"<p>Danke,</p>\n"
+"<p style=\"color:#888888\">\n"
+"% if object.user_id and object.user_id.signature:\n"
+" ${object.user_id.signature | safe}\n"
+"% endif\n"
+"</p>\n"
+"</div>"
#. module: account
#: model:ir.ui.view,arch_db:account.portal_my_invoices
diff --git a/addons/account/i18n/es.po b/addons/account/i18n/es.po
index 27dea435cb4..ef861857698 100644
--- a/addons/account/i18n/es.po
+++ b/addons/account/i18n/es.po
@@ -77,6 +77,10 @@ msgid ""
" * The 'Paid' status is set automatically when the invoice is paid. Its related journal entries may or may not be reconciled.\n"
" * The 'Cancelled' status is used when user cancel invoice."
msgstr ""
+"* El estado de \"Borrador\" se usa cuando se codifica un factura nueva y no confirmada.\n"
+"* El estado \"Abierto\" se usa cuando el usuario crea una factura, y se genera un número de factura. Este estado se mantiene hasta que el usuario paga la factura\n"
+"* El Estado \"Pagado\" se establece automáticamente cuando la factura se paga. Sus entradas diarias relacionadas pueden estar o no conciliadas.\n"
+"* El estado \"Cancelado\" se usa cuando el usuario cancela una factura"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_chart_template__code_digits
@@ -203,6 +207,16 @@ msgid ""
"</p>\n"
"</data>"
msgstr ""
+"<?xml version=\"1.0\"?>\n"
+"<data>Estimado ${object.partner_id.name},</p>\n"
+"<p>Gracias por tu pago.<br/> Aquí está tu recibo de pago <strong>${(object.name or '').replace('/','-')}</strong> por un monto de <strong>${format_amount(object.amount, object.currency_id)}</strong> efectuado por ${object.company_id.name}.</p>\n"
+"<p>Si tienes alguna pregunta, no dudes en contactarnos.</p>\n"
+"<p>Cordiales saludos,\n"
+"% if user and user.signature:\n"
+"${user.signature | safe}\n"
+"% endif\n"
+"</p>\n"
+"</data>"
#. module: account
#: model:mail.template,body_html:account.email_template_edi_invoice
@@ -252,6 +266,50 @@ msgid ""
"</p>\n"
"</div>"
msgstr ""
+"<div>\n"
+"<p>Estimado ${object.partner_id.name}\n"
+"% set access_action = object.with_context(force_website=True).get_access_action()\n"
+"% set is_online = access_action and access_action['type'] == 'ir.actions.act_url'\n"
+"% set access_url = object.get_mail_url()\n"
+"\n"
+"% if object.partner_id.parent_id:\n"
+" (<i>${object.partner_id.parent_id.name}</i>)\n"
+"% endif\n"
+",</p>\n"
+"<p>Aquí está, en el archivo adjunto, tu \n"
+"% if object.number:\n"
+"<strong>factura ${object.number}</strong>\n"
+"% else:\n"
+"invoice\n"
+"% endif\n"
+"% if object.origin:\n"
+"(with reference: ${object.origin})\n"
+"% endif\n"
+"por un monto de <strong>${format_amount(object.amount_total, object.currency_id)}</strong>\n"
+"efectuado por ${object.company_id.name}.\n"
+"</p>\n"
+"\n"
+"% if is_online:\n"
+" <br/><br/>\n"
+" <center>\n"
+" <a href=\"${access_url}\" style=\"background-color: #1abc9c; padding: 20px; text-decoration: none; color: #fff; border-radius: 5px; font-size: 16px;\" class=\"o_default_snippet_text\">Ver factura</a>\n"
+" </center>\n"
+"% endif\n"
+" <br/><br/>\n"
+"\n"
+"% if object.state=='paid':\n"
+" <p>Esta factura ya se encuentra pagada.</p>\n"
+"% else:\n"
+" <p>Por favor remita el pago a su más pronta conveniencia.</p>\n"
+"% endif\n"
+"\n"
+"<p>Gracias,</p>\n"
+"<p style=\"color:#888888\">\n"
+"% if object.user_id and object.user_id.signature:\n"
+" ${object.user_id.signature | safe}\n"
+"% endif\n"
+"</p>\n"
+"</div>"
#. module: account
#: model:ir.ui.view,arch_db:account.portal_my_invoices
diff --git a/addons/account/i18n/fr.po b/addons/account/i18n/fr.po
index 7e8c4811412..64a8bf75f7d 100644
--- a/addons/account/i18n/fr.po
+++ b/addons/account/i18n/fr.po
@@ -87,6 +87,10 @@ msgid ""
" * The 'Paid' status is set automatically when the invoice is paid. Its related journal entries may or may not be reconciled.\n"
" * The 'Cancelled' status is used when user cancel invoice."
msgstr ""
+"* L'état \"Brouillon\" est utilisé lorsqu'un utilisateur est en train de saisir ou de modifier une nouvelle facture non confirmée.\n"
+"* L'état 'Ouvert' est utilisé lorsque l'utilisateur crée une facture, celle-ci a alors un numéro de facture La facture reste dans ce statut \"Ouvert\" jusqu'à ce qu'elle soit payée.\n"
+"* L'état 'Payé' est affecté automatiquement lorsque la facture est payée. Ses écritures dans les journaux connexes peuvent ou non être réconciliées.\n"
+"* L'état \"Annulé\" est utilisé lorsque l'utilisateur annule la facture."
#. module: account
#: model:ir.model.fields,field_description:account.field_account_chart_template__code_digits
@@ -213,6 +217,16 @@ msgid ""
"</p>\n"
"</data>"
msgstr ""
+"<?xml version=\"1.0\"?>\n"
+"<data><p>Chèr(e) ${object.partner_id.name},</p>\n"
+"<p>Merci pour votre règlement. <br/> Voici le reçu de votre paiement <strong>${(object.name or '').replace('/','-')}</strong> d'un montant de <strong>${format_amount(object.amount, object.currency_id)}</strong> de ${object.company_id.name}.</p>\n"
+"<p>Si vous avez des questions, pensez à nous contacter.</p>\n"
+"<p>Sincères salutations,\n"
+"% if user and user.signature:\n"
+"${user.signature | safe}\n"
+"% endif\n"
+"</p>\n"
+"</data>"
#. module: account
#: model:mail.template,body_html:account.email_template_edi_invoice
@@ -262,6 +276,50 @@ msgid ""
"</p>\n"
"</div>"
msgstr ""
+"<div>\n"
+"<p>Cher ${object.partner_id.name}\n"
+"% set access_action = object.with_context(force_website=True).get_access_action()\n"
+"% set is_online = access_action and access_action['type'] == 'ir.actions.act_url'\n"
+"% set access_url = object.get_mail_url()\n"
+"\n"
+"% if object.partner_id.parent_id:\n"
+" (<i>${object.partner_id.parent_id.name}</i>)\n"
+"% endif\n"
+",</p>\n"
+"<p>Voici, en pièce jointe, votre \n"
+"% if object.number:\n"
+"facture <strong>${object.number}</strong>\n"
+"% else:\n"
+"facture\n"
+"% endif\n"
+"% if object.origin:\n"
+"(avec la référence ${object.origin})\n"
+"% endif\n"
+", son montant s'élève à <strong>${format_amount(object.amount_total, object.currency_id)}</strong>\n"
+"émis par ${object.company_id.name}.\n"
+"</p>\n"
+"\n"
+"% if is_online:\n"
+" <br/><br/>\n"
+" <center>\n"
+" <a href=\"${access_url}\" style=\"background-color: #1abc9c; padding: 20px; text-decoration: none; color: #fff; border-radius: 5px; font-size: 16px;\" class=\"o_default_snippet_text\">Voir la facture</a>\n"
+" </center>\n"
+"% endif\n"
+" <br/><br/>\n"
+"\n"
+"% if object.state=='paid':\n"
+" <p>Cette facture est déjà payée.</p>\n"
+"% else:\n"
+" <p>Merci de procéder au payement dès que possible.</p>\n"
+"% endif\n"
+"\n"
+"<p>Merci,</p>\n"
+"<p style=\"color:#888888\">\n"
+"% if object.user_id and object.user_id.signature:\n"
+" ${object.user_id.signature | safe}\n"
+"% endif\n"
+"</p>\n"
+"</div>"
#. module: account
#: model:ir.ui.view,arch_db:account.portal_my_invoices
diff --git a/addons/account/i18n/hu.po b/addons/account/i18n/hu.po
index ce84d003539..93bec440716 100644
--- a/addons/account/i18n/hu.po
+++ b/addons/account/i18n/hu.po
@@ -9207,6 +9207,8 @@ msgid ""
"There are still unposted entries in the period you want to lock. You should "
"either post or delete them."
msgstr ""
+"Könyveletlen tételek vannak a zárolni tervezett periódusban. Kérjük "
+"könyvelje vagy törölje ezen tételeket."
#. module: account
#: code:addons/account/models/account_bank_statement.py:179
@@ -10351,6 +10353,7 @@ msgstr "Nem törölhet olyan fizetést, amit már lekönyvelt"
#, python-format
msgid "You can only delete an invoice line if the invoice is in draft state."
msgstr ""
+"Számlatétel csak akkor törölhető, ha a számla piszkozat állapotban van."
#. module: account
#: code:addons/account/models/account_payment.py:142
@@ -10406,6 +10409,7 @@ msgid ""
"You cannot change the currency of the company since some journal items "
"already exist"
msgstr ""
+"A vállalat pénzneme nem változtatható, mivel már vannak könyvelési tételek."
#. module: account
#: code:addons/account/models/account.py:271
@@ -10591,7 +10595,7 @@ msgstr "Önnek van"
#: code:addons/account/models/account_payment.py:500
#, python-format
msgid "You have to define a sequence for %s in your company."
-msgstr ""
+msgstr "Meg kell adni egy szekvenciát %s számára a vállalatban."
#. module: account
#: code:addons/account/wizard/account_report_general_ledger.py:21
diff --git a/addons/account/i18n/ru.po b/addons/account/i18n/ru.po
index 5909ba5757d..a3f724f574f 100644
--- a/addons/account/i18n/ru.po
+++ b/addons/account/i18n/ru.po
@@ -1361,7 +1361,7 @@ msgstr "Разрешить печать чеков и депозиты"
#. module: account
#: model:res.groups,name:account.group_cash_rounding
msgid "Allow the cash rounding management"
-msgstr ""
+msgstr "Разрешает управление округлением наличности"
#. module: account
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
@@ -2278,19 +2278,19 @@ msgstr "Кассы"
#. module: account
#: model:ir.model.fields,field_description:account.field_res_config_settings__group_cash_rounding
msgid "Cash Rounding"
-msgstr ""
+msgstr "Округление наличных денег"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_invoice__cash_rounding_id
msgid "Cash Rounding Method"
-msgstr ""
+msgstr "Способ округления наличности"
#. module: account
#: model:ir.actions.act_window,name:account.rounding_list_action
#: model:ir.ui.menu,name:account.menu_action_rounding_form_view
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
msgid "Cash Roundings"
-msgstr ""
+msgstr "Округления наличности"
#. module: account
#: model:ir.ui.view,arch_db:account.account_journal_dashboard_kanban_view
@@ -2683,7 +2683,7 @@ msgstr "Написать письмо"
#. module: account
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
msgid "Compute tax rates based on U.S. ZIP codes"
-msgstr ""
+msgstr "Рассчитывать налоги на основании почтовых кодов (только для США)"
#. module: account
#: model:ir.model.fields,help:account.field_account_move_line__counterpart
@@ -2973,7 +2973,7 @@ msgstr "Создать модель"
#. module: account
#: model:ir.actions.act_window,help:account.rounding_list_action
msgid "Create the first cash rounding"
-msgstr ""
+msgstr "Создайте первое округление наличности"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_account__create_uid
@@ -3535,7 +3535,7 @@ msgstr "Налоги по умолчанию"
#. module: account
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
msgid "Default taxes applied to local transactions"
-msgstr ""
+msgstr "Налоги, применяемые по умолчанию к местным сделкам"
#. module: account
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
@@ -3551,6 +3551,7 @@ msgstr ""
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
msgid "Define the smallest coinage of the currency used to pay by cash."
msgstr ""
+"Определите самую маленькую монетку(размерность) при расчетах наличными"
#. module: account
#: model:ir.model.fields,help:account.field_account_invoice__cash_rounding_id
@@ -3558,6 +3559,7 @@ msgid ""
"Defines the smallest coinage of the currency that can be used to pay by "
"cash."
msgstr ""
+"Определяет самую маленькую монетку(размерность) при расчетах наличными"
#. module: account
#: model:ir.ui.view,arch_db:account.view_account_tax_template_form
@@ -3903,7 +3905,7 @@ msgstr ""
#. module: account
#: model:ir.model.fields,field_description:account.field_res_config_settings__module_l10n_eu_service
msgid "EU Digital Goods VAT"
-msgstr ""
+msgstr "НДС на цифровые товары по правилам ЕС"
#. module: account
#: code:addons/account/models/chart_template.py:171
@@ -4138,7 +4140,7 @@ msgstr "Налогово-бюджетная информация"
#. module: account
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
msgid "Fiscal Localization"
-msgstr ""
+msgstr "Налоговая локализация"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_account_template__position_id
@@ -4285,7 +4287,7 @@ msgstr "Все операции по этому счету принудителÑ
#: code:addons/account/report/account_tax.py:13
#, python-format
msgid "Form content is missing, this report cannot be printed."
-msgstr ""
+msgstr "Не найдены данные в форме, отчет не сформирован"
#. module: account
#: code:addons/account/models/account_invoice.py:100
@@ -4380,6 +4382,7 @@ msgstr ""
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
msgid "Get warnings when invoicing specific customers"
msgstr ""
+"Получайте уведомления при фактурировании счетов по определенным клиентам"
#. module: account
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
@@ -4530,7 +4533,7 @@ msgstr ""
#. module: account
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
msgid "How total tax amount is computed in orders and invoices"
-msgstr ""
+msgstr "Как рассчитывается сумма налогов в заказах и счетах"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_abstract_payment__id
@@ -5182,7 +5185,7 @@ msgstr ""
#. module: account
#: model:ir.model.fields,help:account.field_account_invoice_line__is_rounding_line
msgid "Is a rounding line in case of cash rounding."
-msgstr ""
+msgstr "Позиция к округлению в случае наличного расчета"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_bank_statement__is_difference_zero
@@ -5880,7 +5883,7 @@ msgstr "РАЗНОЕ"
#. module: account
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
msgid "Mail your invoices in one-click using"
-msgstr ""
+msgstr "Отправляйте ваши счета в один клик, используя "
#. module: account
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
@@ -5900,7 +5903,7 @@ msgstr "Основная валюта компании."
#. module: account
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
msgid "Main currency of your company"
-msgstr ""
+msgstr "Основная валюта вашей компании"
#. module: account
#: model:ir.ui.menu,name:account.account_management_menu
@@ -5970,7 +5973,7 @@ msgstr "Март"
#. module: account
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
msgid "Margin Analysis"
-msgstr ""
+msgstr "Анализ прибыли"
#. module: account
#: model:ir.ui.view,arch_db:account.setup_bank_journal_form
@@ -6111,7 +6114,7 @@ msgstr ""
#. module: account
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
msgid "Monitor your product margins from invoices"
-msgstr ""
+msgstr "Следите за маржинальностью ваших продуктов по инвойсам"
#. module: account
#: model:ir.actions.act_window,name:account.act_account_invoice_partner_relation
@@ -6804,7 +6807,7 @@ msgstr "Прошлые"
#. module: account
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
msgid "Pay your bills in one-click using Euro SEPA service"
-msgstr ""
+msgstr "Оплачивайте ваши счета в один клик, используя сервис Euro SEPA"
#. module: account
#: model:account.account.type,name:account.data_account_type_payable
@@ -7814,12 +7817,12 @@ msgstr "Округление по Строке"
#. module: account
#: model:ir.ui.view,arch_db:account.rounding_form_view
msgid "Rounding Form"
-msgstr ""
+msgstr "Округление"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_invoice_line__is_rounding_line
msgid "Rounding Line"
-msgstr ""
+msgstr "Округление по строкам"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_cash_rounding__rounding_method
@@ -7835,12 +7838,12 @@ msgstr "Точность округления"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_cash_rounding__strategy
msgid "Rounding Strategy"
-msgstr ""
+msgstr "Стратегия округления"
#. module: account
#: model:ir.ui.view,arch_db:account.rounding_tree_view
msgid "Rounding Tree"
-msgstr ""
+msgstr "Дерево округления"
#. module: account
#: model:ir.model.fields,field_description:account.field_res_config_settings__module_account_sepa
@@ -8633,6 +8636,7 @@ msgid ""
"Taxes, fiscal positions, chart of accounts &amp; legal statements for your "
"country"
msgstr ""
+"Налоги, фискальные позиции план счетов и правовые особенности вашей страны"
#. module: account
#: model:ir.model.fields,help:account.field_account_move_line__balance
@@ -8935,6 +8939,9 @@ msgid ""
"The cash rounding cannot be computed because the difference must be added on the biggest tax found and no tax are specified.\n"
"Please set up a tax or change the cash rounding method."
msgstr ""
+"Невозможно рассчитать округления, потому что разница должна быть отнесена к "
+"самому большому налогу, но налоги не указаны. Пожалуйста, укажите "
+"применяемый налог или измените правило денежного округления."
#. module: account
#: model:ir.model.fields,help:account.field_res_company__chart_template_id
@@ -9208,7 +9215,7 @@ msgstr "Последовательность журнала%s дезактиви
#. module: account
#: model:ir.model.fields,help:account.field_account_cash_rounding__rounding_method
msgid "The tie-breaking rule used for float rounding operations"
-msgstr ""
+msgstr "Правило округления, используемое в операциях с дробными числами"
#. module: account
#: model:ir.ui.view,arch_db:account.portal_my_invoices
@@ -9714,12 +9721,12 @@ msgstr "Итоговая сумма долга покупателя перед Ð
#. module: account
#: model:ir.model.fields,help:account.field_account_invoice_line__price_total
msgid "Total amount with taxes"
-msgstr ""
+msgstr "Итого с налогами"
#. module: account
#: model:ir.model.fields,help:account.field_account_invoice_line__price_subtotal
msgid "Total amount without taxes"
-msgstr ""
+msgstr "Итого без налогов"
#. module: account
#: model:ir.model.fields,help:account.field_res_partner__debit
diff --git a/addons/account/i18n/tr.po b/addons/account/i18n/tr.po
index 1a1c436c45c..05640cf7a2b 100644
--- a/addons/account/i18n/tr.po
+++ b/addons/account/i18n/tr.po
@@ -9271,6 +9271,8 @@ msgid ""
"This %s has been created from: <a href=# data-oe-model=account.invoice data-"
"oe-id=%d>%s</a>"
msgstr ""
+"Bu %s şu adresten oluşturuldu: <a href=# data-oe-model=account.invoice data-"
+"oe-id=%d>%s</a>"
#. module: account
#: model:ir.ui.view,arch_db:account.view_account_invoice_report_search
diff --git a/addons/account/models/account_invoice.py b/addons/account/models/account_invoice.py
index 02825edcf79..905f10f4334 100644
--- a/addons/account/models/account_invoice.py
+++ b/addons/account/models/account_invoice.py
@@ -602,7 +602,8 @@ class AccountInvoice(models.Model):
for invoice in self:
# Delete non-manual tax lines
self._cr.execute("DELETE FROM account_invoice_tax WHERE invoice_id=%s AND manual is False", (invoice.id,))
- self.invalidate_cache()
+ if self._cr.rowcount:
+ self.invalidate_cache()
# Generate one tax line per tax, however many invoice lines it's applied to
tax_grouped = invoice.get_taxes_values()
diff --git a/addons/account/models/account_move.py b/addons/account/models/account_move.py
index e4d0938a291..631243e3697 100644
--- a/addons/account/models/account_move.py
+++ b/addons/account/models/account_move.py
@@ -55,7 +55,8 @@ class AccountMove(models.Model):
total_amount += amount
for partial_line in (line.matched_debit_ids + line.matched_credit_ids):
total_reconciled += partial_line.amount
- if float_is_zero(total_amount, precision_rounding=move.currency_id.rounding):
+ precision_currency = move.currency_id or move.company_id.currency_id
+ if float_is_zero(total_amount, precision_rounding=precision_currency.rounding):
move.matched_percentage = 1.0
else:
move.matched_percentage = total_reconciled / total_amount
@@ -102,8 +103,7 @@ class AccountMove(models.Model):
partner_id = fields.Many2one('res.partner', compute='_compute_partner_id', string="Partner", store=True, readonly=True)
amount = fields.Monetary(compute='_amount_compute', store=True)
narration = fields.Text(string='Internal Note')
- company_id = fields.Many2one('res.company', related='journal_id.company_id', string='Company', store=True, readonly=True,
- default=lambda self: self.env.user.company_id)
+ company_id = fields.Many2one('res.company', related='journal_id.company_id', string='Company', store=True, readonly=True)
matched_percentage = fields.Float('Percentage Matched', compute='_compute_matched_percentage', digits=0, store=True, readonly=True, help="Technical field used in cash basis method")
# Dummy Account field to search on account.move by account_id
dummy_account_id = fields.Many2one('account.account', related='line_ids.account_id', string='Account', store=False, readonly=True)
@@ -677,8 +677,6 @@ class AccountMoveLine(models.Model):
raise UserError(_('Entries are not of the same account!'))
if not (all_accounts[0].reconcile or all_accounts[0].internal_type == 'liquidity'):
raise UserError(_('Account %s (%s) does not allow reconciliation. First change the configuration of this account to allow it.') % (all_accounts[0].name, all_accounts[0].code))
- if len(partners) > 1:
- raise UserError(_('The partner has to be the same on all lines for receivable and payable accounts!'))
#reconcile everything that can be
remaining_moves = self.auto_reconcile_lines()
@@ -796,19 +794,22 @@ class AccountMoveLine(models.Model):
#create an empty move that will hold all the exchange rate adjustments
exchange_move = False
- if aml_to_balance_currency:
+ if aml_to_balance_currency and any([residual for dummy, residual in aml_to_balance_currency.values()]):
exchange_move = self.env['account.move'].create(
self.env['account.full.reconcile']._prepare_exchange_diff_move(move_date=maxdate, company=self[0].company_id))
for currency, values in aml_to_balance_currency.items():
aml_to_balance = values[0]
total_amount_currency = values[1]
- #eventually create journal entries to book the difference due to foreign currency's exchange rate that fluctuates
- aml_recs, partial_recs = self.env['account.partial.reconcile'].create_exchange_rate_entry(aml_to_balance, 0.0, total_amount_currency, currency, exchange_move)
+ if total_amount_currency:
+ #eventually create journal entries to book the difference due to foreign currency's exchange rate that fluctuates
+ aml_recs, partial_recs = self.env['account.partial.reconcile'].create_exchange_rate_entry(aml_to_balance, 0.0, total_amount_currency, currency, exchange_move)
- #add the exchange rate line and the exchange rate partial reconciliation in the et of the full reconcile
- self |= aml_recs
- partial_rec_set |= partial_recs
+ # add the exchange rate line and the exchange rate partial reconciliation in the et of the full reconcile
+ self |= aml_recs
+ partial_rec_set |= partial_recs
+ else:
+ aml_to_balance.reconcile()
if exchange_move:
exchange_move.post()
@@ -836,8 +837,9 @@ class AccountMoveLine(models.Model):
rec_move_ids += account_move_line.matched_credit_ids
if self.env.context.get('invoice_id'):
current_invoice = self.env['account.invoice'].browse(self.env.context['invoice_id'])
+ aml_to_keep = current_invoice.move_id.line_ids | current_invoice.move_id.line_ids.mapped('full_reconcile_id.exchange_move_id.line_ids')
rec_move_ids = rec_move_ids.filtered(
- lambda r: (r.debit_move_id + r.credit_move_id) & current_invoice.move_id.line_ids
+ lambda r: (r.debit_move_id + r.credit_move_id) & aml_to_keep
)
return rec_move_ids.unlink()
diff --git a/addons/account/models/partner.py b/addons/account/models/partner.py
index 69bd2e53c7f..0173c8bafee 100644
--- a/addons/account/models/partner.py
+++ b/addons/account/models/partner.py
@@ -394,8 +394,7 @@ class ResPartner(models.Model):
required=True)
property_account_position_id = fields.Many2one('account.fiscal.position', company_dependent=True,
string="Fiscal Position",
- help="The fiscal position will determine taxes and accounts used for the partner.", oldname="property_account_position",
- domain="[('company_id', 'in', [company_id, False])]")
+ help="The fiscal position will determine taxes and accounts used for the partner.", oldname="property_account_position")
property_payment_term_id = fields.Many2one('account.payment.term', company_dependent=True,
string='Customer Payment Terms',
help="This payment term will be used instead of the default one for sales orders and customer invoices", oldname="property_payment_term")
@@ -445,8 +444,12 @@ class ResPartner(models.Model):
@api.onchange('company_id')
def _onchange_company_id(self):
+ company = self.env['res.company']
if self.company_id:
- return {'domain': {'property_account_position_id': [('company_id', 'in', [self.company_id.id, False])]}}
+ company = self.company_id
+ else:
+ company = self.env.user.company_id
+ return {'domain': {'property_account_position_id': [('company_id', 'in', [company.id, False])]}}
def can_edit_vat(self):
can_edit_vat = super(ResPartner, self).can_edit_vat()
diff --git a/addons/account/static/src/js/reconciliation/reconciliation_model.js b/addons/account/static/src/js/reconciliation/reconciliation_model.js
index 051faad2b16..b2c2f5324dc 100644
--- a/addons/account/static/src/js/reconciliation/reconciliation_model.js
+++ b/addons/account/static/src/js/reconciliation/reconciliation_model.js
@@ -990,6 +990,7 @@ var StatementModel = BasicModel.extend({
var formatOptions = {
currency_id: line.st_line.currency_id,
};
+ var amount = values.amount !== undefined ? values.amount : line.balance.amount;
var prop = {
'id': _.uniqueId('createLine'),
'label': values.label || line.st_line.name,
@@ -1002,8 +1003,7 @@ var StatementModel = BasicModel.extend({
'debit': 0,
'credit': 0,
'base_amount': values.amount_type !== "percentage" ?
- (values.amount || line.balance.amount) :
- line.balance.amount * values.amount / 100,
+ (amount) : line.balance.amount * values.amount / 100,
'percent': values.amount_type === "percentage" ? values.amount : null,
'link': values.link,
'display': true,
diff --git a/addons/account/tests/test_reconciliation.py b/addons/account/tests/test_reconciliation.py
index 09945c6e15b..4a50c812620 100644
--- a/addons/account/tests/test_reconciliation.py
+++ b/addons/account/tests/test_reconciliation.py
@@ -661,6 +661,54 @@ class TestReconciliation(AccountingTestCase):
self.assertAlmostEquals(inv1.residual, 10)
self.assertAlmostEquals(inv2.residual, 20)
+ def test_unreconcile_exchange(self):
+ # Use case:
+ # - Company currency in EUR
+ # - Create 2 rates for USD:
+ # 1.0 on 2018-01-01
+ # 0.5 on 2018-02-01
+ # - Create an invoice on 2018-01-02 of 111 USD
+ # - Register a payment on 2018-02-02 of 111 USD
+ # - Unreconcile the payment
+
+ self.env['res.currency.rate'].create({
+ 'name': time.strftime('%Y') + '-07-01',
+ 'rate': 1.0,
+ 'currency_id': self.currency_usd_id,
+ 'company_id': self.env.ref('base.main_company').id
+ })
+ self.env['res.currency.rate'].create({
+ 'name': time.strftime('%Y') + '-08-01',
+ 'rate': 0.5,
+ 'currency_id': self.currency_usd_id,
+ 'company_id': self.env.ref('base.main_company').id
+ })
+ inv = self.create_invoice(invoice_amount=111, currency_id=self.currency_usd_id)
+ payment = self.env['account.payment'].create({
+ 'payment_type': 'inbound',
+ 'payment_method_id': self.env.ref('account.account_payment_method_manual_in').id,
+ 'partner_type': 'customer',
+ 'partner_id': self.partner_agrolait_id,
+ 'amount': 111,
+ 'currency_id': self.currency_usd_id,
+ 'journal_id': self.bank_journal_usd.id,
+ 'payment_date': time.strftime('%Y') + '-08-01',
+ })
+ payment.post()
+ credit_aml = payment.move_line_ids.filtered('credit')
+
+ # Check residual before assignation
+ self.assertAlmostEquals(inv.residual, 111)
+
+ # Assign credit, check exchange move and residual
+ inv.assign_outstanding_credit(credit_aml.id)
+ self.assertEqual(len(payment.move_line_ids.mapped('full_reconcile_id').exchange_move_id), 1)
+ self.assertAlmostEquals(inv.residual, 0)
+
+ # Unreconcile invoice and check residual
+ credit_aml.with_context(invoice_id=inv.id).remove_move_reconcile()
+ self.assertAlmostEquals(inv.residual, 111)
+
def test_partial_reconcile_currencies_02(self):
####
# Day 1: Invoice Cust/001 to customer (expressed in USD)
diff --git a/addons/account/views/partner_view.xml b/addons/account/views/partner_view.xml
index bc325f129bd..aa05415c852 100644
--- a/addons/account/views/partner_view.xml
+++ b/addons/account/views/partner_view.xml
@@ -125,7 +125,7 @@
<field name="arch" type="xml">
<div name="button_box" position="inside">
<button type="object" class="oe_stat_button" icon="fa-pencil-square-o" name="action_view_partner_invoices"
- attrs="{'invisible': [('customer', '=', False)]}">
+ attrs="{'invisible': [('customer', '=', False)]}" context="{'default_partner_id': active_id}">
<div class="o_form_field o_stat_info">
<span class="o_stat_value">
<field name="total_invoiced" widget='monetary' options="{'currency_field': 'currency_id'}"/>
diff --git a/addons/account_check_printing/i18n/nl.po b/addons/account_check_printing/i18n/nl.po
index a078c85b34f..19cee193768 100644
--- a/addons/account_check_printing/i18n/nl.po
+++ b/addons/account_check_printing/i18n/nl.po
@@ -284,7 +284,7 @@ msgstr "Cheques afdrukken"
#: model:ir.model.fields,field_description:account_check_printing.field_res_company__account_check_printing_date_label
#: model:ir.model.fields,field_description:account_check_printing.field_res_config_settings__account_check_printing_date_label
msgid "Print Date Label"
-msgstr ""
+msgstr "Print datum label"
#. module: account_check_printing
#: code:addons/account_check_printing/models/account_payment.py:101
@@ -302,7 +302,7 @@ msgstr "Betalingen voor meerdere facturen registreren"
#. module: account_check_printing
#: model:ir.model.fields,field_description:account_check_printing.field_res_company__account_check_printing_margin_right
msgid "Right Margin"
-msgstr ""
+msgstr "Rechtermarge"
#. module: account_check_printing
#: model:ir.model.fields,help:account_check_printing.field_res_company__account_check_printing_layout
diff --git a/addons/account_check_printing/models/account_payment.py b/addons/account_check_printing/models/account_payment.py
index b195814843f..15421a6e7c2 100644
--- a/addons/account_check_printing/models/account_payment.py
+++ b/addons/account_check_printing/models/account_payment.py
@@ -34,7 +34,7 @@ class AccountRegisterPayments(models.TransientModel):
res = super(AccountRegisterPayments, self)._prepare_payment_vals(invoices)
if self.payment_method_id == self.env.ref('account_check_printing.account_payment_method_check'):
res.update({
- 'check_manual_sequencing': self.check_manual_sequencing,
+ 'check_amount_in_words': self.currency_id.amount_to_text(res['amount']) if self.multi else self.check_amount_in_words,
})
return res
diff --git a/addons/account_invoicing/i18n/ru.po b/addons/account_invoicing/i18n/ru.po
index 27ecb02589e..4d8f39cfc84 100644
--- a/addons/account_invoicing/i18n/ru.po
+++ b/addons/account_invoicing/i18n/ru.po
@@ -3,14 +3,14 @@
# * account_invoicing
#
# Translators:
-# Dimko Pythonic <d.v.selitsky@gmail.com>, 2017
+# Dmitry sky <d.v.selitsky@gmail.com>, 2017
# Aidos Kakimzhanov <aidos.kakimzhan@gmail.com>, 2017
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-20 09:53+0000\n"
-"PO-Revision-Date: 2017-09-20 09:53+0000\n"
+"POT-Creation-Date: 2018-03-22 14:10+0000\n"
+"PO-Revision-Date: 2018-03-22 14:10+0000\n"
"Last-Translator: Aidos Kakimzhanov <aidos.kakimzhan@gmail.com>, 2017\n"
"Language-Team: Russian (https://www.transifex.com/odoo/teams/41243/ru/)\n"
"MIME-Version: 1.0\n"
diff --git a/addons/account_payment/i18n/zh_CN.po b/addons/account_payment/i18n/zh_CN.po
index c265e326625..9287935bb2d 100644
--- a/addons/account_payment/i18n/zh_CN.po
+++ b/addons/account_payment/i18n/zh_CN.po
@@ -11,13 +11,14 @@
# 老窦 北京 <2662059195@qq.com>, 2018
# liAnGjiA <liangjia@qq.com>, 2018
# e2f <projects@e2f.com>, 2018
+# John Lin <linyinhuan@139.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
-"Last-Translator: e2f <projects@e2f.com>, 2018\n"
+"Last-Translator: John Lin <linyinhuan@139.com>, 2018\n"
"Language-Team: Chinese (China) (https://www.transifex.com/odoo/teams/41243/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -168,7 +169,7 @@ msgstr "状态"
msgid ""
"The invoice was not confirmed despite response from the acquirer (%s): "
"invoice amount is %r but acquirer replied with %r."
-msgstr ""
+msgstr "该发票未被确认,尽管对方(%s)回复:发票金额 %r但对方回复%r。"
#. module: account_payment
#: model:ir.ui.view,arch_db:account_payment.portal_invoice_error
diff --git a/addons/account_voucher/i18n/nl.po b/addons/account_voucher/i18n/nl.po
index 74b270094e1..8afba2c4ac1 100644
--- a/addons/account_voucher/i18n/nl.po
+++ b/addons/account_voucher/i18n/nl.po
@@ -273,13 +273,13 @@ msgstr "Laatst bijgewerkt op"
#: code:addons/account_voucher/models/account_voucher.py:101
#, python-format
msgid "Missing Company"
-msgstr ""
+msgstr "Bedrijf ontbreekt"
#. module: account_voucher
#: code:addons/account_voucher/models/account_voucher.py:103
#, python-format
msgid "Missing Currency"
-msgstr ""
+msgstr "Valuta ontbreekt"
#. module: account_voucher
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__narration
diff --git a/addons/analytic/i18n/nl.po b/addons/analytic/i18n/nl.po
index 0060665cd6f..7124d47c778 100644
--- a/addons/analytic/i18n/nl.po
+++ b/addons/analytic/i18n/nl.po
@@ -344,12 +344,12 @@ msgstr "Naam"
#. module: analytic
#: model:ir.actions.act_window,help:analytic.account_analytic_line_action_entries
msgid "No activity yet"
-msgstr ""
+msgstr "Nog geen activiteit"
#. module: analytic
#: model:ir.actions.act_window,help:analytic.account_analytic_line_action
msgid "No activity yet on this account"
-msgstr ""
+msgstr "Nog geen activiteit voor deze kostenplaats"
#. module: analytic
#: model:ir.model.fields,field_description:analytic.field_account_analytic_group__parent_id
@@ -359,7 +359,7 @@ msgstr "Bovenliggend"
#. module: analytic
#: model:ir.model.fields,field_description:analytic.field_account_analytic_distribution__tag_id
msgid "Parent tag"
-msgstr ""
+msgstr "Bovenliggend label"
#. module: analytic
#: model:ir.model.fields,field_description:analytic.field_account_analytic_line__partner_id
diff --git a/addons/anonymization/i18n/nl.po b/addons/anonymization/i18n/nl.po
index 9dc9452114f..2b1e784a795 100644
--- a/addons/anonymization/i18n/nl.po
+++ b/addons/anonymization/i18n/nl.po
@@ -291,7 +291,7 @@ msgstr "Query"
#. module: anonymization
#: model:ir.model.fields,field_description:anonymization.field_ir_model_fields_anonymization_migration_fix__query_type
msgid "Query Type"
-msgstr ""
+msgstr "Query soort"
#. module: anonymization
#: model:ir.ui.view,arch_db:anonymization.view_ir_model_fields_anonymize_wizard_form
diff --git a/addons/barcodes/static/src/js/barcode_events.js b/addons/barcodes/static/src/js/barcode_events.js
index 71e07030ffd..a2e5808f8be 100644
--- a/addons/barcodes/static/src/js/barcode_events.js
+++ b/addons/barcodes/static/src/js/barcode_events.js
@@ -53,7 +53,7 @@ var BarcodeEvents = core.Class.extend(mixins.PropertiesMixin, {
navigator.userAgent.match(/iPod/i) ||
navigator.userAgent.match(/BlackBerry/i) ||
navigator.userAgent.match(/Windows Phone/i);
- this.isChromeMobile = isMobile && window.chrome;
+ this.isChromeMobile = isMobile && navigator.userAgent.match(/Chrome/i);
// Creates an input who will receive the barcode scanner value.
if (this.isChromeMobile) {
@@ -61,7 +61,9 @@ var BarcodeEvents = core.Class.extend(mixins.PropertiesMixin, {
name: 'barcode',
type: 'text',
css: {
- 'position': 'absolute',
+ 'position': 'fixed',
+ 'top': '50%',
+ 'transform': 'translateY(-50%)',
'opacity': 0,
},
});
diff --git a/addons/base_vat_autocomplete/models/res_partner.py b/addons/base_vat_autocomplete/models/res_partner.py
index f4afa29ef39..a143ed67568 100644
--- a/addons/base_vat_autocomplete/models/res_partner.py
+++ b/addons/base_vat_autocomplete/models/res_partner.py
@@ -12,6 +12,9 @@ _logger = logging.getLogger(__name__)
try:
import stdnum.eu.vat as stdnum_vat
+ if not hasattr(stdnum_vat, "country_codes"):
+ # stdnum version >= 1.9
+ stdnum_vat.country_codes = stdnum_vat._country_codes
except ImportError:
_logger.warning('Python `stdnum` library not found, unable to call VIES service to detect address based on VAT number.')
stdnum_vat = None
@@ -29,6 +32,11 @@ class ResPartner(models.Model):
cp = lines.pop()
city = lines.pop()
return (cp, city)
+ elif country == 'SE':
+ result = re.match('([0-9]{3}\s?[0-9]{2})\s?([A-Z]+)', lines[-1])
+ if result:
+ lines.pop()
+ return (result.group(1), result.group(2))
else:
result = re.match('((?:L-|AT-)?[0-9\-]+[A-Z]{,2}) (.+)', lines[-1])
if result:
diff --git a/addons/base_vat_autocomplete/views/res_company_view.xml b/addons/base_vat_autocomplete/views/res_company_view.xml
index d35b505da66..385716979ab 100644
--- a/addons/base_vat_autocomplete/views/res_company_view.xml
+++ b/addons/base_vat_autocomplete/views/res_company_view.xml
@@ -11,7 +11,7 @@
<field name="arch" type="xml">
<xpath expr="//field[@name='vat']" position="replace" />
<field name="partner_id" position="after">
- <field name="vat" />
+ <field name="vat" string="VAT"/>
</field>
</field>
</record>
diff --git a/addons/crm/i18n/fr.po b/addons/crm/i18n/fr.po
index 5396d477ca8..927944d3420 100644
--- a/addons/crm/i18n/fr.po
+++ b/addons/crm/i18n/fr.po
@@ -2492,7 +2492,7 @@ msgstr "Cet objectif n'existe pas."
#: model:ir.ui.view,arch_db:crm.crm_case_form_view_leads
#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
msgid "Title"
-msgstr "Civilité"
+msgstr "Titre"
#. module: crm
#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
diff --git a/addons/crm/i18n/nl.po b/addons/crm/i18n/nl.po
index 54a2c177c77..845479dbeba 100644
--- a/addons/crm/i18n/nl.po
+++ b/addons/crm/i18n/nl.po
@@ -500,7 +500,7 @@ msgstr ""
#: code:addons/crm/static/src/js/tour.js:54
#, python-format
msgid "Click on the opportunity to zoom in."
-msgstr ""
+msgstr "Klik op de prospect om in te zoomen."
#. module: crm
#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report__date_closed
@@ -1115,7 +1115,7 @@ msgstr "Hoog"
#. module: crm
#: model:ir.model.fields,help:crm.field_crm_team__dashboard_graph_group_pipeline
msgid "How this channel's dashboard graph will group the results."
-msgstr "Hoe dit kanaal zijn dashboard grafieken het resultaat groeperen."
+msgstr "Hoe dit kanaal zijn dashboard grafieken zal groeperen."
#. module: crm
#: model:ir.model.fields,field_description:crm.field_crm_activity_report__id
diff --git a/addons/delivery/i18n/nl.po b/addons/delivery/i18n/nl.po
index 0ec30a52699..29894eae5e4 100644
--- a/addons/delivery/i18n/nl.po
+++ b/addons/delivery/i18n/nl.po
@@ -482,7 +482,7 @@ msgstr "Lengte moet positief zijn"
#. module: delivery
#: model:ir.model.fields,help:delivery.field_delivery_carrier__debug_logging
msgid "Log requests in order to ease debugging"
-msgstr "Log aanvragen in volgorde om makkelijker fouten te kunnen traceren"
+msgstr "Log aanvragen om gemakkelijker fouten te kunnen traceren"
#. module: delivery
#: model:ir.ui.view,arch_db:delivery.view_picking_withcarrier_out_form
diff --git a/addons/delivery/i18n/tr.po b/addons/delivery/i18n/tr.po
index 7c1abce7d98..95001ab65ff 100644
--- a/addons/delivery/i18n/tr.po
+++ b/addons/delivery/i18n/tr.po
@@ -250,7 +250,7 @@ msgstr "Teslimat Paketi Seçim Sihirbazı"
#: model:ir.ui.menu,name:delivery.menu_delivery_packagings
#: model:ir.ui.view,arch_db:delivery.product_packaging_delivery_tree
msgid "Delivery Packages"
-msgstr ""
+msgstr "Teslimat Paketi"
#. module: delivery
#: model:ir.model.fields,field_description:delivery.field_choose_delivery_package__delivery_packaging_id
diff --git a/addons/delivery/i18n/zh_CN.po b/addons/delivery/i18n/zh_CN.po
index fec8b6eb997..534d92e166d 100644
--- a/addons/delivery/i18n/zh_CN.po
+++ b/addons/delivery/i18n/zh_CN.po
@@ -11,13 +11,14 @@
# 老窦 北京 <2662059195@qq.com>, 2018
# e2f <projects@e2f.com>, 2018
# e2f_cn c5 <jarvisn@ecinnovations.com>, 2018
+# John Lin <linyinhuan@139.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
-"Last-Translator: e2f_cn c5 <jarvisn@ecinnovations.com>, 2018\n"
+"Last-Translator: John Lin <linyinhuan@139.com>, 2018\n"
"Language-Team: Chinese (China) (https://www.transifex.com/odoo/teams/41243/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -720,7 +721,7 @@ msgstr "发货重量"
#: model:ir.ui.view,arch_db:delivery.report_package_barcode_delivery
#: model:ir.ui.view,arch_db:delivery.report_package_barcode_small_delivery
msgid "Shipping Weight:"
-msgstr ""
+msgstr "装运重量:"
#. module: delivery
#: model:ir.model.fields,help:delivery.field_product_product__hs_code
@@ -849,7 +850,7 @@ msgstr ""
#: model:ir.ui.view,arch_db:delivery.report_package_barcode_delivery
#: model:ir.ui.view,arch_db:delivery.report_package_barcode_small_delivery
msgid "Weight:"
-msgstr ""
+msgstr "重量:"
#. module: delivery
#: model:ir.model.fields,field_description:delivery.field_product_packaging__width
diff --git a/addons/delivery/models/stock_picking.py b/addons/delivery/models/stock_picking.py
index 395ca2f753a..f13d2465d6c 100644
--- a/addons/delivery/models/stock_picking.py
+++ b/addons/delivery/models/stock_picking.py
@@ -159,6 +159,8 @@ class StockPicking(models.Model):
def send_to_shipper(self):
self.ensure_one()
res = self.carrier_id.send_shipping(self)[0]
+ if self.carrier_id.free_over and self.sale_id._compute_amount_total_without_delivery() >= self.carrier_id.amount:
+ res['exact_price'] = 0.0
self.carrier_price = res['exact_price']
self.carrier_tracking_ref = res['tracking_number']
order_currency = self.sale_id.currency_id or self.company_id.currency_id
diff --git a/addons/delivery/tests/test_delivery_cost.py b/addons/delivery/tests/test_delivery_cost.py
index 67ff55339ba..7e496317279 100644
--- a/addons/delivery/tests/test_delivery_cost.py
+++ b/addons/delivery/tests/test_delivery_cost.py
@@ -30,7 +30,10 @@ class TestDeliveryCost(common.TransactionCase):
self.free_delivery = self.env.ref('delivery.free_delivery_carrier')
# as the tests hereunder assume all the prices in USD, we must ensure
# that the company actually uses USD
- self.env.user.company_id.write({'currency_id': self.env.ref('base.USD').id})
+ self.env.cr.execute(
+ "UPDATE res_company SET currency_id = %s WHERE id = %s",
+ [self.env.ref('base.USD').id, self.env.user.company_id.id])
+ self.pricelist.currency_id = self.env.ref('base.USD').id
def test_00_delivery_cost(self):
# In order to test Carrier Cost
diff --git a/addons/fleet/i18n/nl.po b/addons/fleet/i18n/nl.po
index 8edb02db928..72eef1fb731 100644
--- a/addons/fleet/i18n/nl.po
+++ b/addons/fleet/i18n/nl.po
@@ -363,7 +363,7 @@ msgstr ""
#. module: fleet
#: model:ir.actions.act_window,help:fleet.fleet_vehicle_costs_action
msgid "Create a new cost"
-msgstr ""
+msgstr "Maak een nieuwe kost"
#. module: fleet
#: model:ir.actions.act_window,help:fleet.fleet_vehicle_log_fuel_action
@@ -378,7 +378,7 @@ msgstr ""
#. module: fleet
#: model:ir.actions.act_window,help:fleet.fleet_vehicle_model_action
msgid "Create a new model"
-msgstr ""
+msgstr "Maak een nieuw model"
#. module: fleet
#: model:ir.actions.act_window,help:fleet.fleet_vehicle_odometer_action
diff --git a/addons/gamification/i18n/nl.po b/addons/gamification/i18n/nl.po
index 2ec3fb4eda0..ee201ef7b68 100644
--- a/addons/gamification/i18n/nl.po
+++ b/addons/gamification/i18n/nl.po
@@ -929,7 +929,7 @@ msgstr "Gebruiker aanmaken"
#. module: gamification
#: model:ir.actions.act_window,help:gamification.badge_list_action
msgid "Create a new badge"
-msgstr ""
+msgstr "Maak een nieuwe badge"
#. module: gamification
#: model:ir.actions.act_window,help:gamification.challenge_list_action
@@ -944,7 +944,7 @@ msgstr "Maak een nieuw doel"
#. module: gamification
#: model:ir.actions.act_window,help:gamification.goal_definition_list_action
msgid "Create a new goal definition"
-msgstr ""
+msgstr "Maak een nieuwe doeldefinitie aan"
#. module: gamification
#: model:ir.actions.act_window,help:gamification.action_new_simplified_res_users
diff --git a/addons/gamification/models/goal.py b/addons/gamification/models/goal.py
index 3c062401662..6cd52b2ab81 100644
--- a/addons/gamification/models/goal.py
+++ b/addons/gamification/models/goal.py
@@ -259,7 +259,7 @@ class Goal(models.Model):
If the end date is passed (at least +1 day, time not considered) without
the target value being reached, the goal is set as failed."""
goals_by_definition = {}
- for goal in self:
+ for goal in self.with_context(prefetch_fields=False):
goals_by_definition.setdefault(goal.definition_id, []).append(goal)
for definition, goals in goals_by_definition.items():
diff --git a/addons/gamification_sale_crm/i18n/ru.po b/addons/gamification_sale_crm/i18n/ru.po
index 4cc45095e3c..728f1a7db14 100644
--- a/addons/gamification_sale_crm/i18n/ru.po
+++ b/addons/gamification_sale_crm/i18n/ru.po
@@ -4,14 +4,15 @@
#
# Translators:
# Максим Дронь <dronmax@gmail.com>, 2017
-# Martin Trigaux <mat@odoo.com>, 2017
+# Martin Trigaux, 2017
+# sergeiruzkiicode <sergei.ruzki@icode.by>, 2018
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-20 09:53+0000\n"
-"PO-Revision-Date: 2017-09-20 09:53+0000\n"
-"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n"
+"POT-Creation-Date: 2018-03-22 14:10+0000\n"
+"PO-Revision-Date: 2018-03-22 14:10+0000\n"
+"Last-Translator: sergeiruzkiicode <sergei.ruzki@icode.by>, 2018\n"
"Language-Team: Russian (https://www.transifex.com/odoo/teams/41243/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -70,7 +71,7 @@ msgstr "Время для подготовки инициативы"
#. module: gamification_sale_crm
#: model:gamification.goal.definition,name:gamification_sale_crm.definition_crm_tot_customer_refunds
msgid "Total Customer Credit Notes"
-msgstr ""
+msgstr "Всего кредит-нот клиента"
#. module: gamification_sale_crm
#: model:gamification.challenge.line,name:gamification_sale_crm.line_crm_sale1
diff --git a/addons/hr/i18n/ru.po b/addons/hr/i18n/ru.po
index dcd02f55b1e..f31224ae3d0 100644
--- a/addons/hr/i18n/ru.po
+++ b/addons/hr/i18n/ru.po
@@ -14,13 +14,14 @@
# Denis Trepalin <zekarious@gmail.com>, 2017
# Masha Koc <mariya.kos.ua@gmail.com>, 2017
# Dmitry sky <d.v.selitsky@gmail.com>, 2017
+# sergeiruzkiicode <sergei.ruzki@icode.by>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
-"Last-Translator: Dmitry sky <d.v.selitsky@gmail.com>, 2017\n"
+"Last-Translator: sergeiruzkiicode <sergei.ruzki@icode.by>, 2018\n"
"Language-Team: Russian (https://www.transifex.com/odoo/teams/41243/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -130,7 +131,7 @@ msgstr "Компания"
#. module: hr
#: model:ir.model.fields,field_description:hr.field_res_config_settings__resource_calendar_id
msgid "Company Working Hours"
-msgstr ""
+msgstr "Рабочие часы компании"
#. module: hr
#: model:ir.model.fields,field_description:hr.field_hr_department__complete_name
@@ -287,6 +288,7 @@ msgid ""
"Enter here the private address of the employee, not the one linked to your "
"company."
msgstr ""
+"Сюда следует вводить личный адрес сотрудника, не связанный с компанией."
#. module: hr
#: code:addons/hr/models/hr.py:310
@@ -556,6 +558,9 @@ msgid ""
" related to employees by departments: expenses, timesheets,\n"
" leaves, recruitments, etc."
msgstr ""
+"В Odoo структура отдела используется, чтобы управлять всеми документами,\n"
+" относящимися к сотрудникам отдела: расходыми, табелями,\n"
+" отгулами, рекрутиногом и т.п."
#. module: hr
#: model:res.groups,name:hr.group_hr_user
@@ -595,12 +600,12 @@ msgstr "Должность"
#. module: hr
#: model:ir.model.fields,field_description:hr.field_hr_employee__address_home_id
msgid "Private Address"
-msgstr ""
+msgstr "Личный адрес"
#. module: hr
#: model:ir.ui.view,arch_db:hr.view_employee_form
msgid "Private Information"
-msgstr ""
+msgstr "Личная информация"
#. module: hr
#: model:ir.actions.act_window,help:hr.action_hr_job
@@ -658,6 +663,8 @@ msgid ""
"Set default calendar used to compute time allocation for leaves, timesheets,"
" ..."
msgstr ""
+"Выберите календарь по умолчанию, который используется для распределения "
+"рабочего времени табелях, отуглах и т.д."
#. module: hr
#: model:ir.model.fields,help:hr.field_hr_job__state
@@ -677,17 +684,17 @@ msgstr "Настройки"
#. module: hr
#: model:ir.model.fields,field_description:hr.field_res_config_settings__module_hr_org_chart
msgid "Show Organizational Chart"
-msgstr ""
+msgstr "Показать организационную структуру"
#. module: hr
#: model:ir.ui.view,arch_db:hr.res_config_settings_view_form
msgid "Show organizational chart on employee form"
-msgstr ""
+msgstr "Показать организационную структуру в карточке сотрудника"
#. module: hr
#: model:ir.ui.view,arch_db:hr.res_config_settings_view_form
msgid "Show organizational chart on employee form."
-msgstr ""
+msgstr "Показать организационную структуру в карточке сотрудника."
#. module: hr
#: selection:hr.employee,marital:0
@@ -760,7 +767,7 @@ msgstr "Теги"
#. module: hr
#: model:ir.model.fields,field_description:hr.field_hr_employee__is_address_home_a_company
msgid "The employee adress has a company linked"
-msgstr ""
+msgstr "Адрес сотрудника привязан к адресу компании"
#. module: hr
#: sql_constraint:hr.job:0
@@ -809,6 +816,9 @@ msgid ""
" This private address is used in the expense report reimbursement document.\n"
" It should be different from the work address."
msgstr ""
+"Введите личный(домашний) адрес сотрудника.\n"
+" Они используется в документах по возмещениям расходов и пр.\n"
+" Должен отличаться от рабочего адреса."
#. module: hr
#: model:ir.model.fields,field_description:hr.field_hr_employee__user_id
@@ -823,7 +833,7 @@ msgstr "Пользователи"
#. module: hr
#: model:ir.ui.view,arch_db:hr.hr_job_view_kanban
msgid "Vacancies :"
-msgstr ""
+msgstr "Вакансии :"
#. module: hr
#: model:ir.model.fields,field_description:hr.field_hr_employee__visa_expire
@@ -855,7 +865,7 @@ msgstr ""
#. module: hr
#: model:ir.model.fields,field_description:hr.field_hr_employee__address_id
msgid "Work Address"
-msgstr ""
+msgstr "Рабочий адрес"
#. module: hr
#: model:ir.model.fields,field_description:hr.field_hr_employee__work_email
@@ -865,7 +875,7 @@ msgstr "Рабочая эл. почта"
#. module: hr
#: model:ir.ui.view,arch_db:hr.view_employee_form
msgid "Work Information"
-msgstr ""
+msgstr "Информация по работе"
#. module: hr
#: model:ir.model.fields,field_description:hr.field_hr_employee__work_location
@@ -880,7 +890,7 @@ msgstr "Рабочий сотовый телефон"
#. module: hr
#: model:ir.ui.view,arch_db:hr.res_config_settings_view_form
msgid "Work Organization"
-msgstr ""
+msgstr "Организация работы"
#. module: hr
#: model:ir.ui.view,arch_db:hr.view_employee_form
diff --git a/addons/hr_contract/i18n/ru.po b/addons/hr_contract/i18n/ru.po
index 9fb3eaa80a4..f6dcc1db875 100644
--- a/addons/hr_contract/i18n/ru.po
+++ b/addons/hr_contract/i18n/ru.po
@@ -14,13 +14,14 @@
# Sergey <naviserg1@gmail.com>, 2017
# Gennady Marchenko <gennadym@gmail.com>, 2017
# Nikita Moshkalov <CLTanuki@gmail.com>, 2017
+# sergeiruzkiicode <sergei.ruzki@icode.by>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
-"Last-Translator: Nikita Moshkalov <CLTanuki@gmail.com>, 2017\n"
+"Last-Translator: sergeiruzkiicode <sergei.ruzki@icode.by>, 2018\n"
"Language-Team: Russian (https://www.transifex.com/odoo/teams/41243/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -187,7 +188,7 @@ msgstr "Отображаемое Имя"
#. module: hr_contract
#: model:ir.ui.view,arch_db:hr_contract.hr_contract_view_kanban
msgid "Edit Contract"
-msgstr ""
+msgstr "Редактировать договор"
#. module: hr_contract
#: model:ir.model,name:hr_contract.model_hr_employee
@@ -204,12 +205,12 @@ msgstr "Договор с сотрудником"
#. module: hr_contract
#: model:ir.model.fields,help:hr_contract.field_hr_contract__wage
msgid "Employee's monthly gross wage."
-msgstr ""
+msgstr "Месячная зарплата сотрудника брутто."
#. module: hr_contract
#: model:ir.model.fields,help:hr_contract.field_hr_contract__resource_calendar_id
msgid "Employee's working schedule."
-msgstr ""
+msgstr "График работы сотрудника"
#. module: hr_contract
#: model:ir.model.fields,field_description:hr_contract.field_hr_contract__date_end
@@ -219,17 +220,17 @@ msgstr "Дата окончания"
#. module: hr_contract
#: model:ir.model.fields,help:hr_contract.field_hr_contract__date_end
msgid "End date of the contract (if it's a fixed-term contract)."
-msgstr ""
+msgstr "Дата окончания контракта(контракт с фиксированным сроком)"
#. module: hr_contract
#: model:ir.model.fields,help:hr_contract.field_hr_contract__trial_date_end
msgid "End date of the trial period (if there is one)."
-msgstr ""
+msgstr "Дата окончания испытательного срока(если таковой имеется)"
#. module: hr_contract
#: model:ir.model.fields,field_description:hr_contract.field_hr_contract__trial_date_end
msgid "End of Trial Period"
-msgstr ""
+msgstr "Конец испытательного срока"
#. module: hr_contract
#: selection:hr.contract,state:0
@@ -326,7 +327,7 @@ msgstr "Дата медицинского осмотра"
#. module: hr_contract
#: model:ir.ui.view,arch_db:hr_contract.hr_contract_view_form
msgid "Monthly Advantages in Cash"
-msgstr ""
+msgstr "Месячные поощрения в деньгах"
#. module: hr_contract
#: selection:hr.contract,state:0
@@ -357,7 +358,7 @@ msgstr "Выполняется"
#. module: hr_contract
#: model:ir.ui.view,arch_db:hr_contract.hr_contract_view_form
msgid "Salary Information"
-msgstr ""
+msgstr "Информация по заработной плате"
#. module: hr_contract
#: model:ir.ui.view,arch_db:hr_contract.hr_contract_view_search
@@ -383,7 +384,7 @@ msgstr "Дата начала"
#. module: hr_contract
#: model:ir.model.fields,help:hr_contract.field_hr_contract__date_start
msgid "Start date of the contract."
-msgstr ""
+msgstr "Дата начала договора"
#. module: hr_contract
#: model:ir.ui.view,arch_db:hr_contract.hr_contract_view_search
diff --git a/addons/hr_expense/i18n/hu.po b/addons/hr_expense/i18n/hu.po
index c64915c2125..1d8e7ea2644 100644
--- a/addons/hr_expense/i18n/hu.po
+++ b/addons/hr_expense/i18n/hu.po
@@ -1187,7 +1187,7 @@ msgstr "A napló amit a kiadás elvégzése után használ."
#: code:addons/hr_expense/wizard/hr_expense_sheet_register_payment.py:35
#, python-format
msgid "The payment amount must be strictly positive."
-msgstr ""
+msgstr "A fizetés összege csak pozitív lehet"
#. module: hr_expense
#: model:ir.model.fields,help:hr_expense.field_hr_expense_sheet__bank_journal_id
diff --git a/addons/hr_expense/i18n/nl.po b/addons/hr_expense/i18n/nl.po
index cc758e9f644..f54f89db1c0 100644
--- a/addons/hr_expense/i18n/nl.po
+++ b/addons/hr_expense/i18n/nl.po
@@ -275,12 +275,12 @@ msgstr "Goedgekeurde declaraties"
#: model:ir.actions.act_window,help:hr_expense.hr_expense_actions_all
#: model:ir.actions.act_window,help:hr_expense.hr_expense_actions_my_unsubmitted
msgid "Create a new expense"
-msgstr ""
+msgstr "Maak een nieuwe uitgave"
#. module: hr_expense
#: model:ir.actions.act_window,help:hr_expense.hr_expense_product
msgid "Create a new expense category"
-msgstr ""
+msgstr "Maak een nieuwe uitgave categorie"
#. module: hr_expense
#: model:ir.actions.act_window,help:hr_expense.action_hr_expense_sheet_all_all
@@ -288,7 +288,7 @@ msgstr ""
#: model:ir.actions.act_window,help:hr_expense.action_hr_expense_sheet_all_to_post
#: model:ir.actions.act_window,help:hr_expense.action_hr_expense_sheet_my_all
msgid "Create a new expense report"
-msgstr ""
+msgstr "Maak een nieuw uitgave rapport"
#. module: hr_expense
#: model:ir.model.fields,field_description:hr_expense.field_hr_expense__create_uid
diff --git a/addons/hr_expense/models/hr_expense.py b/addons/hr_expense/models/hr_expense.py
index ea97525caf4..a0948a43ebc 100644
--- a/addons/hr_expense/models/hr_expense.py
+++ b/addons/hr_expense/models/hr_expense.py
@@ -418,6 +418,7 @@ class HrExpense(models.Model):
expense_description = expense_description.replace(product_code.group(), '')
products = self.env['product.product'].search([('default_code', 'ilike', product_code.group(1))]) or default_product
product = products.filtered(lambda p: p.default_code == product_code.group(1)) or products[0]
+ account = product.product_tmpl_id._get_product_accounts()['expense']
pattern = '[-+]?(\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?'
# Match the last occurence of a float in the string
@@ -444,6 +445,8 @@ class HrExpense(models.Model):
'unit_amount': price,
'company_id': employee.company_id.id,
})
+ if account:
+ custom_values['account_id'] = account.id
return super(HrExpense, self).message_new(msg_dict, custom_values)
diff --git a/addons/hr_gamification/i18n/ru.po b/addons/hr_gamification/i18n/ru.po
index b5cb3057cb8..3151c8d0e4f 100644
--- a/addons/hr_gamification/i18n/ru.po
+++ b/addons/hr_gamification/i18n/ru.po
@@ -9,13 +9,14 @@
# Collex100, 2017
# Sergey Vilizhanin <sv@grimmette.ru>, 2017
# Максим Дронь <dronmax@gmail.com>, 2017
+# sergeiruzkiicode <sergei.ruzki@icode.by>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
-"Last-Translator: Максим Дронь <dronmax@gmail.com>, 2017\n"
+"Last-Translator: sergeiruzkiicode <sergei.ruzki@icode.by>, 2018\n"
"Language-Team: Russian (https://www.transifex.com/odoo/teams/41243/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -160,7 +161,7 @@ msgstr "Награжденые"
#. module: hr_gamification
#: model:ir.model.fields,field_description:hr_gamification.field_gamification_badge__granted_employees_count
msgid "Granted Employees Count"
-msgstr ""
+msgstr "Количество сотрудников с наградами"
#. module: hr_gamification
#: model:ir.model.fields,field_description:hr_gamification.field_hr_employee__has_badges
diff --git a/addons/hr_holidays/i18n/nl.po b/addons/hr_holidays/i18n/nl.po
index 33cc5a9d3be..1b438212806 100644
--- a/addons/hr_holidays/i18n/nl.po
+++ b/addons/hr_holidays/i18n/nl.po
@@ -262,12 +262,12 @@ msgstr "Verloftoewijzing goedkeuren"
#. module: hr_holidays
#: model:mail.message.subtype,name:hr_holidays.mt_department_leave_allocation_confirmed
msgid "Allocations Confirmed"
-msgstr ""
+msgstr "Bevestigde verloven"
#. module: hr_holidays
#: model:mail.message.subtype,name:hr_holidays.mt_department_leave_allocation_first_validated
msgid "Allocations First Approval"
-msgstr ""
+msgstr "Verloven eerste goedkeuring"
#. module: hr_holidays
#: model:ir.ui.menu,name:hr_holidays.menu_open_department_leave_allocation_approve
@@ -319,7 +319,7 @@ msgstr "Goedgekeurd"
#. module: hr_holidays
#: model:ir.ui.view,arch_db:hr_holidays.view_hr_leave_allocation_filter
msgid "Approved Allocations"
-msgstr ""
+msgstr "Goedgekeurde verloven"
#. module: hr_holidays
#: model:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter
@@ -329,7 +329,7 @@ msgstr "Goedgekeurd verlof"
#. module: hr_holidays
#: model:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter_report
msgid "Approved Requests"
-msgstr ""
+msgstr "Goedgekeurde aanvragen"
#. module: hr_holidays
#: model:ir.ui.view,arch_db:hr_holidays.hr_holidays_leaves_assign_tree_view
diff --git a/addons/hr_holidays/i18n/ru.po b/addons/hr_holidays/i18n/ru.po
index 1d3178fdce9..1bbdb172458 100644
--- a/addons/hr_holidays/i18n/ru.po
+++ b/addons/hr_holidays/i18n/ru.po
@@ -16,13 +16,14 @@
# Алексей Билькевич (belskiy) <mmmbrsk@gmail.com>, 2017
# Viktor Pogrebniak <vp@aifil.ru>, 2017
# Max Belyanin <maxbelyanin@gmail.com>, 2017
+# sergeiruzkiicode <sergei.ruzki@icode.by>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
-"Last-Translator: Max Belyanin <maxbelyanin@gmail.com>, 2017\n"
+"Last-Translator: sergeiruzkiicode <sergei.ruzki@icode.by>, 2018\n"
"Language-Team: Russian (https://www.transifex.com/odoo/teams/41243/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -65,7 +66,7 @@ msgstr "%g оставаясь вне %g"
#: code:addons/hr_holidays/models/hr_leave.py:205
#, python-format
msgid "%s : %.2f day(s)"
-msgstr ""
+msgstr "%s : %.2f дней"
#. module: hr_holidays
#: code:addons/hr_holidays/models/hr_leave.py:207
@@ -105,12 +106,12 @@ msgstr "&lt;th class=\"text-center\" colspan="
#. module: hr_holidays
#: model:ir.ui.view,arch_db:hr_holidays.hr_leave_report_kanban
msgid "<small class=\"text-muted\">from</small>"
-msgstr ""
+msgstr "<small class=\"text-muted\">from</small>"
#. module: hr_holidays
#: model:ir.ui.view,arch_db:hr_holidays.hr_leave_report_kanban
msgid "<small class=\"text-muted\">to</small>"
-msgstr ""
+msgstr "<small class=\"text-muted\">to</small>"
#. module: hr_holidays
#: model:ir.ui.view,arch_db:hr_holidays.report_holidayssummary
@@ -260,7 +261,7 @@ msgstr "Распределение для %s"
#: code:addons/hr_holidays/models/hr_leave_allocation.py:114
#, python-format
msgid "Allocation of %s : %.2f day(s) To %s"
-msgstr ""
+msgstr "Планирование для %s : %.2f день(дней) до %s"
#. module: hr_holidays
#: model:ir.model.fields,field_description:hr_holidays.field_hr_department__allocation_to_approve_count
@@ -639,7 +640,7 @@ msgstr "Первое утверждение"
#: code:addons/hr_holidays/report/holidays_summary_report.py:112
#, python-format
msgid "Form content is missing, this report cannot be printed."
-msgstr ""
+msgstr "Не найдены данные в форме, отчет не сформирован"
#. module: hr_holidays
#: model:ir.model.fields,field_description:hr_holidays.field_hr_holidays_summary_dept__date_from
@@ -929,7 +930,7 @@ msgstr "Обзор отгулов"
#. module: hr_holidays
#: model:ir.ui.view,arch_db:hr_holidays.hr_holiday_status_view_kanban
msgid "Leaves Taken:"
-msgstr ""
+msgstr "Использованные отпуска:"
#. module: hr_holidays
#: model:ir.actions.act_window,name:hr_holidays.action_hr_holidays_summary_dept
@@ -963,7 +964,7 @@ msgstr "Отпуска."
#. module: hr_holidays
#: model:hr.leave.type,name:hr_holidays.holiday_status_cl
msgid "Legal Leaves 2018"
-msgstr ""
+msgstr "Обязательные отпуска 2018"
#. module: hr_holidays
#: selection:hr.leave.type,color_name:0
@@ -1027,7 +1028,7 @@ msgstr "Менеджеры"
#. module: hr_holidays
#: model:ir.ui.view,arch_db:hr_holidays.hr_holiday_status_view_kanban
msgid "Max Leaves:"
-msgstr ""
+msgstr "Макс. отпуск:"
#. module: hr_holidays
#: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_type__max_leaves
@@ -1124,6 +1125,7 @@ msgstr "Количество отпуска"
msgid ""
"Number of days of the leave request according to your working schedule."
msgstr ""
+"Количество рабочих дней по календарю, приходящихся на запрашиваемый период."
#. module: hr_holidays
#: model:res.groups,name:hr_holidays.group_hr_holidays_user
@@ -1148,6 +1150,10 @@ msgid ""
" type (recuperation, legal leaves, sickness) and the exact\n"
" number of open days related to your leave."
msgstr ""
+"После того, как вы запишите запрос на отпуск, он будет отправлен\n"
+" к менеджеру на утверждение. Убедитесь, что вы отсылаете запрос на отпуск\n"
+" на верное количество дней, а также правильного вида(по болезни, плановый \n"
+"\t\tотпуск, компенсация и т.п.)."
#. module: hr_holidays
#: code:addons/hr_holidays/models/hr_leave.py:366
@@ -1415,6 +1421,10 @@ msgid ""
"The status is 'Refused', when leave request is refused by manager.\n"
"The status is 'Approved', when leave request is approved by manager."
msgstr ""
+"Статус 'Запросить', когда запрос создан.\n"
+"Статус 'Утвердить', когда запрос подтвержден пользователем.\n"
+"Статус 'Отклонен', когда запрос отклонен менеджером.\n"
+"Статус 'Утверждён', когда запрос одобрен менеджером."
#. module: hr_holidays
#: model:ir.model.fields,help:hr_holidays.field_hr_leave__first_approver_id
@@ -1447,12 +1457,16 @@ msgstr ""
msgid ""
"This value is given by the sum of all leaves requests with a negative value."
msgstr ""
+"Это значение считается как сумма всех запросов на отпусков с отрицательным "
+"значением."
#. module: hr_holidays
#: model:ir.model.fields,help:hr_holidays.field_hr_leave_type__max_leaves
msgid ""
"This value is given by the sum of all leaves requests with a positive value."
msgstr ""
+"Это значение считается как сумма всех запросов на отпусков с положительным "
+"значением."
#. module: hr_holidays
#: selection:hr.leave,state:0 selection:hr.leave.allocation,state:0
@@ -1536,7 +1550,7 @@ msgstr "Проверить"
#: model:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter_report
#: model:ir.ui.view,arch_db:hr_holidays.view_hr_leave_allocation_filter
msgid "Validator"
-msgstr ""
+msgstr "Утверждающий"
#. module: hr_holidays
#: selection:hr.leave.type,color_name:0
diff --git a/addons/hr_payroll/i18n/ru.po b/addons/hr_payroll/i18n/ru.po
index 31124569917..10fea1d0e61 100644
--- a/addons/hr_payroll/i18n/ru.po
+++ b/addons/hr_payroll/i18n/ru.po
@@ -305,7 +305,7 @@ msgstr "Дочернее определение"
#. module: hr_payroll
#: model:ir.ui.view,arch_db:hr_payroll.res_config_settings_view_form
msgid "Choose a Payroll Localization"
-msgstr ""
+msgstr "Выберите локализацию расчетного листа"
#. module: hr_payroll
#: selection:hr.payslip.run,state:0
@@ -331,7 +331,7 @@ msgstr "Код"
#: model:ir.ui.view,arch_db:hr_payroll.hr_payroll_structure_view_kanban
#: model:ir.ui.view,arch_db:hr_payroll.hr_salary_rule_view_kanban
msgid "Code:"
-msgstr ""
+msgstr "Код:"
#. module: hr_payroll
#: model:ir.ui.view,arch_db:hr_payroll.view_hr_payslip_filter
@@ -656,7 +656,7 @@ msgstr ""
#: code:addons/hr_payroll/report/report_contribution_register.py:34
#, python-format
msgid "Form content is missing, this report cannot be printed."
-msgstr ""
+msgstr "Не найдены данные в форме, отчет не сформирован"
#. module: hr_payroll
#: model:ir.model.fields,field_description:hr_payroll.field_res_config_settings__module_l10n_fr_hr_payroll
@@ -1021,12 +1021,12 @@ msgstr "Платёжная ведомость"
#. module: hr_payroll
#: model:ir.ui.view,arch_db:hr_payroll.res_config_settings_view_form
msgid "Payroll Entries"
-msgstr ""
+msgstr "Строки платежной ведомости"
#. module: hr_payroll
#: model:ir.ui.view,arch_db:hr_payroll.res_config_settings_view_form
msgid "Payroll Rules"
-msgstr ""
+msgstr "Правила платежной ведомости"
#. module: hr_payroll
#: model:ir.ui.view,arch_db:hr_payroll.view_hr_payroll_structure_filter
@@ -1036,7 +1036,7 @@ msgstr "Структуры платежной ведомости"
#. module: hr_payroll
#: model:ir.ui.view,arch_db:hr_payroll.res_config_settings_view_form
msgid "Payroll rules that apply to your country"
-msgstr ""
+msgstr "Правила составления платежной ведомости в вашей стране"
#. module: hr_payroll
#: model:ir.actions.report,name:hr_payroll.action_report_payslip
@@ -1157,7 +1157,7 @@ msgstr "Период"
#. module: hr_payroll
#: model:ir.ui.view,arch_db:hr_payroll.res_config_settings_view_form
msgid "Post payroll slips in accounting"
-msgstr ""
+msgstr "Отправить расчетники в бухгалтерию"
#. module: hr_payroll
#: model:ir.ui.view,arch_db:hr_payroll.view_payslip_lines_contribution_register
diff --git a/addons/hr_timesheet/i18n/nl.po b/addons/hr_timesheet/i18n/nl.po
index 9b7f55431dc..151bb895ae7 100644
--- a/addons/hr_timesheet/i18n/nl.po
+++ b/addons/hr_timesheet/i18n/nl.po
@@ -233,7 +233,7 @@ msgstr "Project -"
#: model:ir.actions.act_window,help:hr_timesheet.timesheet_action_report_by_project
#: model:ir.actions.act_window,help:hr_timesheet.timesheet_action_report_by_task
msgid "Record a new activity"
-msgstr ""
+msgstr "Registreer een nieuwe activiteit"
#. module: hr_timesheet
#: model:ir.model.fields,field_description:hr_timesheet.field_report_project_task_user__remaining_hours
diff --git a/addons/hr_timesheet/i18n/ru.po b/addons/hr_timesheet/i18n/ru.po
index 3c9f2eb65cf..f1511f29a6d 100644
--- a/addons/hr_timesheet/i18n/ru.po
+++ b/addons/hr_timesheet/i18n/ru.po
@@ -12,13 +12,14 @@
# Masha Koc <mariya.kos.ua@gmail.com>, 2017
# Sergey Vilizhanin <sv@grimmette.ru>, 2017
# Max Belyanin <maxbelyanin@gmail.com>, 2017
+# sergeiruzkiicode <sergei.ruzki@icode.by>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
-"Last-Translator: Max Belyanin <maxbelyanin@gmail.com>, 2017\n"
+"Last-Translator: sergeiruzkiicode <sergei.ruzki@icode.by>, 2018\n"
"Language-Team: Russian (https://www.transifex.com/odoo/teams/41243/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -34,7 +35,7 @@ msgstr "<span class=\"o_label\">Табели</span>"
#. module: hr_timesheet
#: model:ir.ui.view,arch_db:hr_timesheet.hr_employee_view_form_inherit_timesheet
msgid "<span class=\"o_stat_text\">Timesheets</span>"
-msgstr ""
+msgstr "Табели"
#. module: hr_timesheet
#: model:ir.ui.view,arch_db:hr_timesheet.view_task_form2_inherited
@@ -91,7 +92,7 @@ msgstr "Apple App магазин"
#. module: hr_timesheet
#: model:ir.model.fields,field_description:hr_timesheet.field_res_config_settings__module_project_timesheet_synchro
msgid "Awesome Timesheet"
-msgstr ""
+msgstr "Шикарные табели"
#. module: hr_timesheet
#: model:ir.ui.view,arch_db:hr_timesheet.res_config_settings_view_form
@@ -114,7 +115,7 @@ msgstr "По Проекту"
#: model:ir.actions.act_window,name:hr_timesheet.timesheet_action_report_by_task
#: model:ir.ui.menu,name:hr_timesheet.timesheet_menu_report_timesheet_by_task
msgid "By Task"
-msgstr ""
+msgstr "По задаче"
#. module: hr_timesheet
#: model:ir.model.fields,help:hr_timesheet.field_project_task__total_hours_spent
@@ -269,11 +270,15 @@ msgid ""
"Timesheets app and invoice them based on a fixed price (ordered quantity) or"
" on the time spent (delivered quantity)"
msgstr ""
+"Продавайте услуги(например, проекты, обслуживание), записывайте затраченное "
+"время в приложение Табели и выставляйте счета на основании фиксированных "
+"цен(заказанного количества) или на основании затраченного "
+"времени(поставленного количества)"
#. module: hr_timesheet
#: model:ir.ui.view,arch_db:hr_timesheet.res_config_settings_view_form
msgid "Sell services and invoice time spent"
-msgstr ""
+msgstr "Продавайте услуги и выставляйте счета за время"
#. module: hr_timesheet
#: model:ir.actions.act_window,name:hr_timesheet.hr_timesheet_config_settings_action
@@ -299,7 +304,7 @@ msgstr ""
#. module: hr_timesheet
#: model:ir.ui.view,arch_db:hr_timesheet.res_config_settings_view_form
msgid "Synchronize time spent with web/mobile app"
-msgstr ""
+msgstr "Синхронизируйте затраты времени с веб/мобильным приложением"
#. module: hr_timesheet
#: model:ir.model,name:hr_timesheet.model_project_task
@@ -328,7 +333,7 @@ msgstr "Эта неделя"
#: code:addons/hr_timesheet/models/project.py:63
#, python-format
msgid "This task must have a project since they are linked to timesheets."
-msgstr ""
+msgstr "У задачи должен быть проект, раз она связана с табелями."
#. module: hr_timesheet
#: model:ir.ui.view,arch_db:hr_timesheet.report_timesheet
@@ -338,12 +343,12 @@ msgstr "Время"
#. module: hr_timesheet
#: model:ir.ui.view,arch_db:hr_timesheet.hr_timesheet_line_tree
msgid "Time (Hours)"
-msgstr ""
+msgstr "Время(часы)"
#. module: hr_timesheet
#: model:ir.model.fields,field_description:hr_timesheet.field_res_config_settings__module_sale_timesheet
msgid "Time Billing"
-msgstr ""
+msgstr "Биллинг времени"
#. module: hr_timesheet
#: model:ir.ui.menu,name:hr_timesheet.menu_hr_time_tracking
diff --git a/addons/iap/i18n/tr.po b/addons/iap/i18n/tr.po
index 117e4b5bf1c..0a841f08079 100644
--- a/addons/iap/i18n/tr.po
+++ b/addons/iap/i18n/tr.po
@@ -5,13 +5,14 @@
# Translators:
# Murat Kaplan <muratk@projetgrup.com>, 2017
# Umur Akın <umura@projetgrup.com>, 2018
+# Ertuğrul Güreş <ertugrulg@projetgrup.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
-"Last-Translator: Umur Akın <umura@projetgrup.com>, 2018\n"
+"Last-Translator: Ertuğrul Güreş <ertugrulg@projetgrup.com>, 2018\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -104,7 +105,7 @@ msgstr "Yetersiz Bakiye"
#: code:addons/iap/static/src/xml/iap_templates.xml:14
#, python-format
msgid "Insufficient credit to perform this service."
-msgstr ""
+msgstr "Bu hizmeti vermek için yetersiz kredi."
#. module: iap
#: model:ir.model.fields,field_description:iap.field_iap_account____last_update
diff --git a/addons/l10n_be/i18n_extra/nl_BE.po b/addons/l10n_be/i18n_extra/nl_BE.po
index 88d6c4b61ee..2a4b067ee33 100644
--- a/addons/l10n_be/i18n_extra/nl_BE.po
+++ b/addons/l10n_be/i18n_extra/nl_BE.po
@@ -18,935 +18,774 @@ msgstr ""
"X-Generator: Poedit 1.8.12\n"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-00
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-00
msgid "0% Biens d'investissement"
msgstr "0% Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-00-G
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-00-G
msgid "0% Biens divers"
msgstr "0% Diverse goederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-OUT-00-CC
#: model:account.tax.template,name:l10n_be.attn_VAT-OUT-00-CC
msgid "0% Cocont."
msgstr "0% Medecont."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-00-CC
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-00-CC
msgid "0% Cocont. - Biens d'investissement"
msgstr "0% Medecont. - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-00-CC
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-00-CC
msgid "0% Cocont. M."
msgstr "0% Medecont. G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-00-CC
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-00-CC
msgid "0% Cocont. S."
msgstr "0% Medecont. D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-00-EU
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-00-EU
msgid "0% EU - Biens d'investissement"
msgstr "0% EU - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-00-EU-G
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-00-EU-G
msgid "0% EU - Biens divers"
msgstr "0% EU - Diverse goederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-00-EU
-#: model:account.tax,name:l10n_be.1_attn_VAT-OUT-00-EU-L
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-00-EU
#: model:account.tax.template,name:l10n_be.attn_VAT-OUT-00-EU-L
msgid "0% EU M."
msgstr "0% EU G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-00-EU-S
-#: model:account.tax,name:l10n_be.1_attn_VAT-OUT-00-EU-S
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-00-EU-S
#: model:account.tax.template,name:l10n_be.attn_VAT-OUT-00-EU-S
msgid "0% EU S."
msgstr "0% EU D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-OUT-00-EU-T
#: model:account.tax.template,name:l10n_be.attn_VAT-OUT-00-EU-T
msgid "0% EU T."
msgstr "0% EU. T."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-00
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-00
msgid "0% M."
msgstr "0% G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-OUT-00-ROW
#: model:account.tax.template,name:l10n_be.attn_VAT-OUT-00-ROW
msgid "0% Non EU"
msgstr "0% Non EU"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-00-ROW-CC
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-00-ROW-CC
msgid "0% Non EU - Biens d'investissement"
msgstr "0% Niet EU - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-00-ROW-CC
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-00-ROW-CC
msgid "0% Non EU M."
msgstr "0% Non EU G. "
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-00-ROW-CC
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-00-ROW-CC
msgid "0% Non EU S."
msgstr "0% Non EU D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-00-S
-#: model:account.tax,name:l10n_be.1_attn_VAT-OUT-00-S
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-00-S
#: model:account.tax.template,name:l10n_be.attn_VAT-OUT-00-S
msgid "0% S."
msgstr "0% D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-OUT-12-L
#: model:account.tax.template,name:l10n_be.attn_VAT-OUT-12-L
msgid "12%"
msgstr "12%"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-12
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-12
msgid "12% Biens d'investissement"
msgstr "12% Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-12-G
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-12-G
msgid "12% Biens divers"
msgstr "12% Diverse goederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-12-CC
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-12-CC
msgid "12% Cocont. - Biens d'investissement"
msgstr "12% Medecont. - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-12-CC-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-12-CC-C1
msgid "12% Cocont. Déductible - Biens d'investissement"
msgstr "12% Medecont. Aftrekbaar - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-12-CC-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-12-CC-C1
msgid "12% Cocont. Déductible M."
msgstr "12% Medecont. Aftrekbaar G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-12-CC-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-12-CC-C1
msgid "12% Cocont. Déductible S."
msgstr "12% Medecont. Aftrekbaar D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-12-CC
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-12-CC
msgid "12% Cocont. M."
msgstr "12% Medecont. G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-12-CC-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-12-CC-C2
msgid "12% Cocont. Récupérable - Biens d'investissement"
msgstr "12% Medecont. Verhaalbaar - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-12-CC-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-12-CC-C2
msgid "12% Cocont. Récupérable M."
msgstr "12% Medecont. Verhaalbaar G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-12-CC-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-12-CC-C2
msgid "12% Cocont. Récupérable S."
msgstr "12% Medecont. Verhaalbaar D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-12-CC
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-12-CC
msgid "12% Cocont. S."
msgstr "12% Medecont. D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-12-EU
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-12-EU
msgid "12% EU - Biens d'investissement"
msgstr "12% EU - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-12-EU-G
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-12-EU-G
msgid "12% EU - Biens divers"
msgstr "12% EU - Diverse goederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-12-EU-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-12-EU-C1
msgid "12% EU Déductible - Biens d'investissement"
msgstr "12% EU Aftrekbaar - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-12-EU-G-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-12-EU-G-C1
msgid "12% EU Déductible - Biens divers"
msgstr "12% EU Aftrekbaar - Diverse goederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-12-EU-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-12-EU-C1
msgid "12% EU Déductible M."
msgstr "12% EU Aftrekbaar G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-12-EU-S-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-12-EU-S-C1
msgid "12% EU Déductible S."
msgstr "12% EU Aftrekbaar D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-12-EU
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-12-EU
msgid "12% EU M."
msgstr "12% EU G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-12-EU-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-12-EU-C2
msgid "12% EU Récupérable - Biens d'investissement"
msgstr "12% EU Verhaalbaar - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-12-EU-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-12-EU-C2
msgid "12% EU Récupérable M."
msgstr "12% EU Verhaalbaar G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-12-EU-S-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-12-EU-S-C2
msgid "12% EU Récupérable S."
msgstr "12% EU Verhaalbaar D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-12-EU-S
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-12-EU-S
msgid "12% EU S."
msgstr "12% EU D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-12
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-12
msgid "12% M."
msgstr "12% G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-12-ROW-CC
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-12-ROW-CC
msgid "12% Non EU - Biens d'investissement"
msgstr "12% Niet EU - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-12-ROW-CC-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-12-ROW-CC-C1
msgid "12% Non EU Déductible - Biens d'investissement"
msgstr "12% Niet EU Aftrekbaar - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-12-ROW-CC-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-12-ROW-CC-C1
msgid "12% Non EU Déductible M."
msgstr "12% Non EU Aftrekbaar G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-12-ROW-CC-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-12-ROW-CC-C1
msgid "12% Non EU Déductible S."
msgstr "12% Niet EU Aftrekbaar D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-12-ROW-CC
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-12-ROW-CC
msgid "12% Non EU M."
msgstr "12% Niet EU G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-12-ROW-CC-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-12-ROW-CC-C2
msgid "12% Non EU Récupérable - Biens d'investissement"
msgstr "12% Niet EU Verhaalbaar - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-12-ROW-CC-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-12-ROW-CC-C2
msgid "12% Non EU Récupérable M."
msgstr "12% Niet EU Verhaalbaar G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-12-ROW-CC-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-12-ROW-CC-C2
msgid "12% Non EU Récupérable S."
msgstr "12% Non EU Verhaalbaar D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-12-ROW-CC
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-12-ROW-CC
msgid "12% Non EU S."
msgstr "12% Niet EU D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-12-S
-#: model:account.tax,name:l10n_be.1_attn_VAT-OUT-12-S
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-12-S
#: model:account.tax.template,name:l10n_be.attn_VAT-OUT-12-S
msgid "12% S."
msgstr "12% D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-OUT-21-L
#: model:account.tax.template,name:l10n_be.attn_VAT-OUT-21-L
msgid "21%"
msgstr "21%"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-21
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-21
msgid "21% Biens d'investissement"
msgstr "21% Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-21-G
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-21-G
msgid "21% Biens divers"
msgstr "21% Diverse goederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-21-CC
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-21-CC
msgid "21% Cocont .S."
msgstr "21% Medecont. D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-21-CC
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-21-CC
msgid "21% Cocont. - Biens d'investissement"
msgstr "21% Medecont. - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-21-CC-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-21-CC-C1
msgid "21% Cocont. Déductible - Biens d'investissement"
msgstr "21% Medecont. Aftrekbaar - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-21-CC-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-21-CC-C1
msgid "21% Cocont. Déductible M."
msgstr "21% Medecont. Aftrekbaar G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-21-CC-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-21-CC-C1
msgid "21% Cocont. Déductible S."
msgstr "21% Medecont. Aftrekbaar D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-21-CC
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-21-CC
msgid "21% Cocont. M."
msgstr "21% Medecont. G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-21-CC-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-21-CC-C2
msgid "21% Cocont. Récupérable - Biens d'investissement"
msgstr "21% Medecont. Verhaalbaar - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-21-CC-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-21-CC-C2
msgid "21% Cocont. Récupérable M."
msgstr "21% Medecont. Verhaalbaar G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-21-CC-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-21-CC-C2
msgid "21% Cocont. Récupérable S."
msgstr "21% Medecont. Verhaalbaar D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-21-EU
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-21-EU
msgid "21% EU - Biens d'investissement"
msgstr "21% EU - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-21-EU-G
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-21-EU-G
msgid "21% EU - Biens divers"
msgstr "21% EU - Diverse goederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-21-EU-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-21-EU-C1
msgid "21% EU Déductible - Biens d'investissement"
msgstr "21% EU Aftrekbaar - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-21-EU-G-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-21-EU-G-C1
msgid "21% EU Déductible - Biens divers"
msgstr "21% EU Aftrekbaar - Diverse goederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-21-EU-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-21-EU-C1
msgid "21% EU Déductible M."
msgstr "21% EU Aftrekbaar G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-21-EU-S-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-21-EU-S-C1
msgid "21% EU Déductible S."
msgstr "21% EU Aftrekbaar D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-21-EU
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-21-EU
msgid "21% EU M."
msgstr "21% EU. G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-21-EU-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-21-EU-C2
msgid "21% EU Récupérable - Biens d'investissement"
msgstr "21% EU Verhaalbaar - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-21-EU-G-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-21-EU-G-C2
msgid "21% EU Récupérable - Biens divers"
msgstr "21% EU Verhaalbaar - Diverse goederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-21-EU-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-21-EU-C2
msgid "21% EU Récupérable M."
msgstr "21% EU Verhaalbaar G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-21-EU-S-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-21-EU-S-C2
msgid "21% EU Récupérable S."
msgstr "21% EU Verhaalbaar D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-21-EU-S
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-21-EU-S
msgid "21% EU S."
msgstr "21% EU D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-21
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-21
msgid "21% M."
msgstr "21% G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-21-ROW-CC
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-21-ROW-CC
msgid "21% Non EU - Biens d'investissement"
msgstr "21% Niet EU - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-21-ROW-CC-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-21-ROW-CC-C1
msgid "21% Non EU Déductible - Biens d'investissement"
msgstr "21% Non EU Aftrekbaar - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-21-ROW-CC-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-21-ROW-CC-C1
msgid "21% Non EU Déductible M."
msgstr "21% Non EU Aftrekbaar G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-21-ROW-CC-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-21-ROW-CC-C1
msgid "21% Non EU Déductible S."
msgstr "21% Non EU Aftrekbaar D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-21-ROW-CC
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-21-ROW-CC
msgid "21% Non EU M."
msgstr "21% Niet EU G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-21-ROW-CC-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-21-ROW-CC-C2
msgid "21% Non EU Récupérable - Biens d'investissement"
msgstr "21% Non EU Verhaalbaar - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-21-ROW-CC-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-21-ROW-CC-C2
msgid "21% Non EU Récupérable M."
msgstr "21% Non EU Verhaalbaar G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-21-ROW-CC-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-21-ROW-CC-C2
msgid "21% Non EU Récupérable S."
msgstr "21% Niet EU Verhaalbaar D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-21-ROW-CC
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-21-ROW-CC
msgid "21% Non EU S."
msgstr "21% Non EU D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-21-S
-#: model:account.tax,name:l10n_be.1_attn_VAT-OUT-21-S
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-21-S
#: model:account.tax.template,name:l10n_be.attn_VAT-OUT-21-S
msgid "21% S."
msgstr "21% D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_TVA-21-inclus-dans-prix
#: model:account.tax.template,name:l10n_be.attn_TVA-21-inclus-dans-prix
msgid "21% S. TTC"
msgstr "21% D. (Inclusief BTW)"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-CAR-EXC-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-CAR-EXC-C2
msgid "50% Déductible - Frais de voiture (Prix Excl.)"
msgstr "50% Aftrekbaar - Autokosten (Prijs Excl.)"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-CAR-EXC-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-CAR-EXC-C1
msgid "50% Non Déductible - Frais de voiture"
msgstr "50% Niet Aftrekbaar - Autokosten"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-CAR-EXC
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-CAR-EXC
msgid "50% Non Déductible - Frais de voiture (Prix Excl.)"
msgstr "50% Niet Aftrekbaar - Autokosten (Prijs Excl.)"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-06
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-06
msgid "6% Biens d'investissement"
msgstr "6% Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-06-G
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-06-G
msgid "6% Biens divers"
msgstr "6% Diverse goederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-06-CC
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-06-CC
msgid "6% Cocont. - Biens d'investissement"
msgstr "6% Medecont. - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-06-CC-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-06-CC-C1
msgid "6% Cocont. Déductible - Biens d'investissement"
msgstr "6% Medecont. Aftrekbaar - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-06-CC-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-06-CC-C1
msgid "6% Cocont. Déductible M."
msgstr "6% Medecont. Aftrekbaar G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-06-CC-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-06-CC-C1
msgid "6% Cocont. Déductible S."
msgstr "6% Medecont. Aftrekbaar D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-06-CC
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-06-CC
msgid "6% Cocont. M."
msgstr "6% Medecont. G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-06-CC-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-06-CC-C2
msgid "6% Cocont. Récupérable - Biens d'investissement"
msgstr "6% Medecont. Verhaalbaar - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-06-CC-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-06-CC-C2
msgid "6% Cocont. Récupérable M."
msgstr "6% Medecont. Verhaalbaar G. "
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-06-CC-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-06-CC-C2
msgid "6% Cocont. Récupérable S."
msgstr "6% Medecont. Verhaalbaar D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-06-CC
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-06-CC
msgid "6% Cocont. S."
msgstr "6% Medecont. D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-06-EU
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-06-EU
msgid "6% EU - Biens d'investissement"
msgstr "6% EU - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-06-EU-G
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-06-EU-G
msgid "6% EU - Biens divers"
msgstr "6% EU - Diverse goederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-06-EU-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-06-EU-C1
msgid "6% EU Déductible - Biens d'investissement"
msgstr "6% EU Aftrekbaar - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-06-EU-G-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-06-EU-G-C1
msgid "6% EU Déductible - Biens divers"
msgstr "6% EU Aftrekbaar - Diverse goederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-06-EU-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-06-EU-C1
msgid "6% EU Déductible M."
msgstr "6% EU Aftrekbaar G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-06-EU-S-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-06-EU-S-C1
msgid "6% EU Déductible S."
msgstr "6% EU Aftrekbaar D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-06-EU
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-06-EU
msgid "6% EU M."
msgstr "6% EU G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-06-EU-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-06-EU-C2
msgid "6% EU Récupérable - Biens d'investissement"
msgstr "6% EU Verhaalbaar - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-06-EU-G-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-06-EU-G-C2
msgid "6% EU Récupérable - Biens divers"
msgstr "6% EU Verhaalbaar - Diverse goederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-06-EU-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-06-EU-C2
msgid "6% EU Récupérable M."
msgstr "6% EU Verhaalbaar G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-06-EU-S-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-06-EU-S-C2
msgid "6% EU Récupérable S."
msgstr "6% EU Verhaalbaar D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-06-EU-S
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-06-EU-S
msgid "6% EU S."
msgstr "6% EU D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-06
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-06
msgid "6% M."
msgstr "6% G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-06-ROW-CC
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-06-ROW-CC
msgid "6% Non EU - Biens d'investissement"
msgstr "6% Niet EU - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-06-ROW-CC-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-06-ROW-CC-C1
msgid "6% Non EU Déductible - Biens d'investissement"
msgstr "6% Niet EU Aftrekbaar - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-06-ROW-CC-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-06-ROW-CC-C1
msgid "6% Non EU Déductible M."
msgstr "6% Niet EU Aftrekbaar G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-06-ROW-CC-C1
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-06-ROW-CC-C1
msgid "6% Non EU Déductible S."
msgstr "6% Niet EU Aftrekbaar D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-06-ROW-CC
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-06-ROW-CC
msgid "6% Non EU M."
msgstr "6% Niet EU G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V83-06-ROW-CC-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V83-06-ROW-CC-C2
msgid "6% Non EU Récupérable - Biens d'investissement"
msgstr "6% Non EU Verhaalbaar - Investeringsgoederen"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V81-06-ROW-CC-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V81-06-ROW-CC-C2
msgid "6% Non EU Récupérable M."
msgstr "6% Niet EU Verhaalbaar G."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-06-ROW-CC-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-06-ROW-CC-C2
msgid "6% Non EU Récupérable S."
msgstr "6% Niet EU Verhaalbaar D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-06-ROW-CC
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-06-ROW-CC
msgid "6% Non EU S."
msgstr "6% Niet EU D."
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-06-S
-#: model:account.tax,name:l10n_be.1_attn_VAT-OUT-06-S
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-06-S
#: model:account.tax.template,name:l10n_be.attn_VAT-OUT-06-S
msgid "6% S."
msgstr "6% D."
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a601
#: model:account.account.template,name:l10n_be.a601
msgid "Achats de fournitures"
msgstr "Aankopen van hulpstoffen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a604
#: model:account.account.template,name:l10n_be.a604
msgid "Achats de marchandises"
msgstr "Aankopen van handelsgoederen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a600
#: model:account.account.template,name:l10n_be.a600
msgid "Achats de matières premières"
msgstr "Aankopen van grondstoffen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a602
#: model:account.account.template,name:l10n_be.a602
msgid "Achats de services, travaux et études"
msgstr "Aankopen van diensten, werk en studies"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a446
#: model:account.account.template,name:l10n_be.a446
msgid "Acomptes reçus"
msgstr "Ontvangen voorschotten"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a176
#: model:account.account.template,name:l10n_be.a176
msgid "Acomptes reçus sur commandes"
msgstr "Ontvangen vooruitbetalingen op bestellingen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a406
#: model:account.account.template,name:l10n_be.a406
msgid "Acomptes versés"
msgstr "Vooruitbetalingen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a360
#: model:account.account.template,name:l10n_be.a360
msgid "Acomptes versés sur achats pour stocks"
msgstr "Vooruitbetalingen op aankopen voor aandelen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4550
#: model:account.account.template,name:l10n_be.a4550
msgid "Administrateurs, gérants et commissaires"
msgstr "Bestuurders, zaakvoerders en commissarissen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a2119
#: model:account.account.template,name:l10n_be.a2119
msgid "Amortissements sur concessions, brevets, etc..."
msgstr "Afschrijvingen op consessies, octrooien, licenties, ..."
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a2690
#: model:account.account.template,name:l10n_be.a2690
msgid "Amortissements sur frais d'aménagement des locaux pris en location"
msgstr "Op inrichtingskosten gehuurde lokalen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a2009
#: model:account.account.template,name:l10n_be.a2009
msgid "Amortissements sur frais de constitution et d'augmentation de capital"
msgstr "Afschrijvingen op oprichtingskosten en kapitaalverhoging"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a2109
#: model:account.account.template,name:l10n_be.a2109
msgid "Amortissements sur frais de recherche et de mise au point"
msgstr "Afschrijving van kosten van onderzoek en ontwikkeling"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a24190
#: model:account.account.template,name:l10n_be.a24190
msgid "Amortissements sur matériel automobile"
msgstr "Afschrijvingen op wagenuitrusting"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a24090
#: model:account.account.template,name:l10n_be.a24090
msgid "Amortissements sur mobilier"
msgstr "Afschrijvingen op meubilair"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a2529
#: model:account.account.template,name:l10n_be.a2529
msgid "Amortissements sur mobilier et matériel roulant en leasing"
msgstr "Afschrijvingen op geleasd rollend materieel"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a614
#: model:account.account.template,name:l10n_be.a614
msgid "Annonces, publicité, propagande et documentation"
msgstr "Advertenties, publiciteit, propaganda en documentatie"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a3100
#: model:account.account.template,name:l10n_be.a3100
msgid "Approvisionements et fournitures"
msgstr "Materialen en benodigdheden"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4160
#: model:account.account.template,name:l10n_be.a4160
msgid "Associés"
msgstr "Vennoten"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a45932
#: model:account.account.template,name:l10n_be.a45932
msgid "Assurance groupe "
msgstr "Groepsverzekering"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a45930
#: model:account.account.template,name:l10n_be.a45930
msgid "Assurance loi"
msgstr "Wetsverzekering"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a45931
#: model:account.account.template,name:l10n_be.a45931
msgid "Assurance salaire garanti "
msgstr "Verzekering gewaarborgd inkomen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a45933
#: model:account.account.template,name:l10n_be.a45933
msgid "Assurances individuelles"
msgstr "Individuele verzekering"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a41671
#: model:account.account.template,name:l10n_be.a41671
msgid "Autres créances"
msgstr "Overige vorderingen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a174
-#: model:account.account,name:l10n_be.1_a424
#: model:account.account.template,name:l10n_be.a174
#: model:account.account.template,name:l10n_be.a424
msgid "Autres emprunts"
msgstr "Overige leningen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4125
#: model:account.account.template,name:l10n_be.a4125
msgid "Autres impôts belges"
msgstr "Overige Belgische belastingen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a49102
-#: model:account.account,name:l10n_be.1_a740
#: model:account.account.template,name:l10n_be.a49102
#: model:account.account.template,name:l10n_be.a740
msgid "Autres produits d'exploitation"
msgstr "Andere bedrijfsopbrengsten"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4538
#: model:account.account.template,name:l10n_be.a4538
msgid "Autres précomptes retenus"
msgstr "Andere ingehouden voorheffingen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4161
#: model:account.account.template,name:l10n_be.a4161
msgid "Avances et prêts au personnel"
msgstr "Voorschotten en leningen aan het personeel"
@@ -1132,854 +971,701 @@ msgid "Belgium VAT Form: grid 88"
msgstr ""
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a140
#: model:account.account.template,name:l10n_be.a140
msgid "Bénéfice reporté"
msgstr "Overgedragen winst"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a790
#: model:account.account.template,name:l10n_be.a790
msgid "Bénéfice reporté de l'exercice précédent"
msgstr "Overgedragen winst van het vorige boekjaar"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a693
#: model:account.account.template,name:l10n_be.a693
msgid "Bénéfice à reporter"
msgstr "Over te dragen winst"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4594
#: model:account.account.template,name:l10n_be.a4594
msgid "Caisse d'assurances sociales pour travailleurs indépendants"
msgstr "Sociale kas voor zelfstandigen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a24105
#: model:account.account.template,name:l10n_be.a24105
msgid "Camions"
msgstr "Vrachtwagens"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a1000
#: model:account.account.template,name:l10n_be.a1000
msgid "Capital"
msgstr "Kapitaal"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a418
#: model:account.account.template,name:l10n_be.a418
msgid "Cautionnements versés en numéraires"
msgstr "Borgtochten betaald in contanten"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a6600
#: model:account.account.template,name:l10n_be.a6600
msgid "Charges exceptionelles"
msgstr "Uitzonderlijke kosten"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a6101
#: model:account.account.template,name:l10n_be.a6101
msgid "Charges locatives"
msgstr "Huurlasten"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a492
#: model:account.account.template,name:l10n_be.a492
msgid "Charges à imputer"
msgstr "Toe te rekenen kosten"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a490
#: model:account.account.template,name:l10n_be.a490
msgid "Charges à reporter"
msgstr "Over te dragen kosten"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a540
#: model:account.account.template,name:l10n_be.a540
msgid "Chèques à encaisser"
msgstr "Te incasseren cheques"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4000
#: model:account.account.template,name:l10n_be.a4000
msgid "Clients"
msgstr "Klanten"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a370
#: model:account.account.template,name:l10n_be.a370
msgid "Commandes en cours d'exécution"
msgstr "Lopende opdrachten"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a49101
#: model:account.account.template,name:l10n_be.a49101
msgid "Commissions à obtenir"
msgstr "Te ontvangen commissies"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a448
#: model:account.account.template,name:l10n_be.a448
msgid "Compensations fournisseurs"
msgstr "Compensaties leveranciers"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4112
-#: model:account.account,name:l10n_be.1_a4512
#: model:account.account.template,name:l10n_be.a4112
#: model:account.account.template,name:l10n_be.a4512
msgid "Compte courant administration T.V.A."
msgstr "Rekening Courant BTW-Administratie"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4163
#: model:account.account.template,name:l10n_be.a4163
msgid "Compte courant des administrateurs et gérants"
msgstr "Rekening courant bestuurders en zaakvoerders"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4162
#: model:account.account.template,name:l10n_be.a4162
msgid "Compte courant des associés en S.P.R.L."
msgstr "Rekening courant vennoten in B.V.B.A"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4990
#: model:account.account.template,name:l10n_be.a4990
msgid "Compte d'attente"
msgstr "Wachtrekening"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a2110
#: model:account.account.template,name:l10n_be.a2110
msgid "Concessions, brevets, licences, savoir-faire, marques, etc..."
msgstr "Consessies, octrooien, licenties, ..."
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a2501
#: model:account.account.template,name:l10n_be.a2501
msgid "Constructions"
msgstr "Gebouwen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a621
#: model:account.account.template,name:l10n_be.a621
msgid "Cotisations patronales d'assurances sociales"
msgstr "Werkgeversbijdragen voor sociale verzekeringen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a29000
#: model:account.account.template,name:l10n_be.a29000
msgid "Créances commerciales"
msgstr "Handelsvorderingen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a407
-#: model:account.account,name:l10n_be.1_a417
#: model:account.account.template,name:l10n_be.a407
#: model:account.account.template,name:l10n_be.a417
msgid "Créances douteuses"
msgstr "Dubieuze debiteuren"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4164
#: model:account.account.template,name:l10n_be.a4164
msgid "Créances sur sociétés apparentées"
msgstr "Vorderingen op gerelateerde bedrijven"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a1720
#: model:account.account.template,name:l10n_be.a1720
msgid "Dettes de location-financement de biens immobiliers"
msgstr "Leasingschulden van onroerende goederen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a1721
#: model:account.account.template,name:l10n_be.a1721
msgid "Dettes de location-financement de biens mobiliers"
msgstr "Leasingschulden van roerende goederen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a17300
#: model:account.account.template,name:l10n_be.a17300
msgid "Dettes en compte \\ Banque A"
msgstr "Schulden op rekeningen \\Bank A"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4597
#: model:account.account.template,name:l10n_be.a4597
msgid "Dettes et provisions sociales diverses"
msgstr "Diverse sociale schulden en provisies"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4500
#: model:account.account.template,name:l10n_be.a4500
msgid "Dettes fiscales estimées"
msgstr "Geraamd bedrag der belastingschulden"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a1722
#: model:account.account.template,name:l10n_be.a1722
msgid "Dettes sur droits réels sur immeubles"
msgstr "Schulden op zakelijke rechten op gebouwen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a654
-#: model:account.account,name:l10n_be.1_a754
#: model:account.account.template,name:l10n_be.a654
#: model:account.account.template,name:l10n_be.a754
msgid "Différences de change"
msgstr "Wisselresultaten"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4551
-#: model:account.account,name:l10n_be.1_a4560
#: model:account.account.template,name:l10n_be.a4551
#: model:account.account.template,name:l10n_be.a4560
msgid "Direction"
msgstr "Directiepersoneel"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a6302
#: model:account.account.template,name:l10n_be.a6302
msgid "Dotations aux amortissements sur immobilisations corporelles"
msgstr "Afschrijvingen op materiële vaste activa"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a6301
#: model:account.account.template,name:l10n_be.a6301
msgid "Dotations aux amortissements sur immobilisations incorporelles"
msgstr "Afschrijvingen op immateriële vaste activa"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a755
#: model:account.account.template,name:l10n_be.a755
msgid "Ecarts de conversion des devises"
msgstr "Resultaten uit de omrekening van vreemde valuta"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a175111
#: model:account.account.template,name:l10n_be.a175111
msgid "Effets à payer \\ Fournisseurs C.E.E."
msgstr "Te betalen wissels: Leveranciers van de EEG"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a175110
#: model:account.account.template,name:l10n_be.a175110
msgid "Effets à payer \\ Fournisseurs belges"
msgstr "Te betalen wissels: Belgische leveranciers"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a175112
#: model:account.account.template,name:l10n_be.a175112
msgid "Effets à payer \\ Fournisseurs importation"
msgstr "Te betalen wissels: Import leveranciers"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4166
#: model:account.account.template,name:l10n_be.a4166
msgid "Emballages et matériel à rendre"
msgstr "Terug te geven materiaal en verpakkingen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4552
-#: model:account.account,name:l10n_be.1_a4561
#: model:account.account.template,name:l10n_be.a4552
#: model:account.account.template,name:l10n_be.a4561
msgid "Employés"
msgstr "Bedienden"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a3200
#: model:account.account.template,name:l10n_be.a3200
msgid "En cours de fabrication"
msgstr "Goederen in bewerking"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a611
#: model:account.account.template,name:l10n_be.a611
msgid "Entretien et réparation"
msgstr "Onderhoud en herstellingen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a653
#: model:account.account.template,name:l10n_be.a653
msgid "Escomptes clients"
msgstr ""
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a757
#: model:account.account.template,name:l10n_be.a757
msgid "Escomptes obtenus"
msgstr "Bekomen kortingen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4230
#: model:account.account.template,name:l10n_be.a4230
msgid "Etablissements de crédit"
msgstr "Kredietinstellingen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a430
#: model:account.account.template,name:l10n_be.a430
msgid "Etablissements de crédit. Emprunts en compte à terme fixe"
msgstr "Kredietinstellingen - Leningen op rekeningen met vaste termijn"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a444
#: model:account.account.template,name:l10n_be.a444
msgid "Factures à recevoir"
msgstr "Te ontvangen facturen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4220
#: model:account.account.template,name:l10n_be.a4220
msgid "Financement de biens immobiliers"
msgstr "Financiering vastgoed"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4221
#: model:account.account.template,name:l10n_be.a4221
msgid "Financement de biens mobiliers"
msgstr "Financiering roerend goed"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a440
#: model:account.account.template,name:l10n_be.a440
msgid "Fournisseurs"
msgstr "Leveranciers"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a612
#: model:account.account.template,name:l10n_be.a612
msgid "Fournitures"
msgstr "Diverse leveringen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a260
#: model:account.account.template,name:l10n_be.a260
msgid "Frais d'aménagements de locaux pris en location"
msgstr "Inrichtingskosten gehuurde lokalen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a656
#: model:account.account.template,name:l10n_be.a656
msgid "Frais de banques, de chèques postaux"
msgstr "Bank en chequekosten"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a2000
#: model:account.account.template,name:l10n_be.a2000
msgid "Frais de constitution et d'augmentation de capital"
msgstr "Oprichtingskosten en kapitaalverhoging"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a2100
#: model:account.account.template,name:l10n_be.a2100
msgid "Frais de recherche et de mise au point"
msgstr "Kosten van onderzoek en ontwikkeling"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a3500
#: model:account.account.template,name:l10n_be.a3500
msgid "Immeubles destinés à la vente"
msgstr "Onroerende goederen bestemd voor verkoop"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a2800
#: model:account.account.template,name:l10n_be.a2800
msgid "Immobilisations Financières"
msgstr "Financiële vaste activa"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4120
#: model:account.account.template,name:l10n_be.a4120
msgid "Impôts belges sur le résultat"
msgstr "Belgische belastingen op het resultaat"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a6700
#: model:account.account.template,name:l10n_be.a6700
msgid "Impôts et précomptes dus ou versés"
msgstr "Verschuldigde of gestorte belastingen en voorheffingen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4128
#: model:account.account.template,name:l10n_be.a4128
msgid "Impôts étrangers"
msgstr "Buitenlandse belastingen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a6100
#: model:account.account.template,name:l10n_be.a6100
msgid "Loyers divers"
msgstr "Diverse huren"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a3400
#: model:account.account.template,name:l10n_be.a3400
msgid "Marchandises"
msgstr "Goederen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a300
#: model:account.account.template,name:l10n_be.a300
msgid "Matières premières"
msgstr "Grondstoffen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a24011
#: model:account.account.template,name:l10n_be.a24011
msgid "Matériel de bureau de bâtiments administratifs et commerciaux"
msgstr "Kantooruitrusting voor gebouwen met adminestratieve en commerciële functie"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a24010
#: model:account.account.template,name:l10n_be.a24010
msgid "Matériel de bureau de bâtiments industriels"
msgstr "Kantooruitrusting voor gebouwen met industriële functie"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a2521
#: model:account.account.template,name:l10n_be.a2521
msgid "Matériel roulant"
msgstr "Rollend materieel"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a2520
#: model:account.account.template,name:l10n_be.a2520
msgid "Mobilier"
msgstr "Meubilair"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a24001
#: model:account.account.template,name:l10n_be.a24001
msgid "Mobilier des bâtiments administratifs et commerciaux"
msgstr "Van administratieve en commerciële gebouwen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a24000
#: model:account.account.template,name:l10n_be.a24000
msgid "Mobilier des bâtiments industriels"
msgstr "Van industriële gebouwen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a151
#: model:account.account.template,name:l10n_be.a151
msgid "Montants transférés aux résultats"
msgstr "Bedragen komende van het resultaat"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4541
#: model:account.account.template,name:l10n_be.a4541
msgid "ONSS. 1er trimestre"
msgstr "R.S.Z. 1ste kwartaal"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4542
#: model:account.account.template,name:l10n_be.a4542
msgid "ONSS. 2ème trimestre"
msgstr "R.S.Z. 2de kwartaal"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4543
#: model:account.account.template,name:l10n_be.a4543
msgid "ONSS. 3ème trimestre"
msgstr "R.S.Z. 3de kwartaal"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4544
#: model:account.account.template,name:l10n_be.a4544
msgid "ONSS. 4ème trimestre"
msgstr "R.S.Z. 4de kwartaal"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4540
#: model:account.account.template,name:l10n_be.a4540
msgid "ONSS. Arriérés"
msgstr "Achterstallige bijdragen RSZ"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4553
-#: model:account.account,name:l10n_be.1_a4562
#: model:account.account.template,name:l10n_be.a4553
#: model:account.account.template,name:l10n_be.a4562
msgid "Ouvriers"
msgstr "Arbeiders"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a141
#: model:account.account.template,name:l10n_be.a141
msgid "Perte reportée"
msgstr "Overgedragen verlies (-)"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a690
#: model:account.account.template,name:l10n_be.a690
msgid "Perte reportée de l'exercice précédent"
msgstr "Overgedragen verlies van het vorige boekjaar"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a793
#: model:account.account.template,name:l10n_be.a793
msgid "Perte à reporter"
msgstr "Over te dragen verlies"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a2118
#: model:account.account.template,name:l10n_be.a2118
msgid "Plus-values actées sur concessions, brevets, etc..."
msgstr "Gerealiseerde meerwaarden op consessies, octrooien, licenties, ..."
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a2108
#: model:account.account.template,name:l10n_be.a2108
msgid "Plus-values actées sur frais de recherche et de mise au point"
msgstr "Gerealiseerde meerwaarden op onderzoek en ontwikkeling"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a2528
#: model:account.account.template,name:l10n_be.a2528
msgid "Plus-values actées sur mobilier et matériel roulant en leasing"
msgstr "Gerealiseerde meerwaarden op geleasd rollend materieel"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a752
#: model:account.account.template,name:l10n_be.a752
msgid "Plus-values sur réalisations d'actifs circulants"
msgstr "Meerwaarden op de realisatie van vlottende activa"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a7051
#: model:account.account.template,name:l10n_be.a7051
msgid "Prestations de services dans les pays membres de la C.E.E."
msgstr "Dienstverlening in lidstaten van de E.E.G."
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a7050
#: model:account.account.template,name:l10n_be.a7050
msgid "Prestations de services en Belgique"
msgstr "Dienstverlening in België"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a7052
#: model:account.account.template,name:l10n_be.a7052
msgid "Prestations de services en vue de l'exportation"
msgstr "Dienstverlening buiten de E.E.G. (export)"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a11
#: model:account.account.template,name:l10n_be.a11
msgid "Primes d'émission"
msgstr "Uitgifte premies"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4930
#: model:account.account.template,name:l10n_be.a4930
msgid "Produits d'exploitation à reporter"
msgstr "Over te dragen bedrijfsopbrengsten"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a751
#: model:account.account.template,name:l10n_be.a751
msgid "Produits des actifs circulants"
msgstr "Opbrengsten uit vlottende activa"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a756
#: model:account.account.template,name:l10n_be.a756
msgid "Produits des autres créances"
msgstr "Diverse financiële opbrengsten"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a7600
#: model:account.account.template,name:l10n_be.a7600
msgid "Produits exceptionnels"
msgstr "Uitzonderlijke opbrengsten"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a3300
#: model:account.account.template,name:l10n_be.a3300
msgid "Produits finis"
msgstr "Gereed product"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a404
-#: model:account.account,name:l10n_be.1_a414
#: model:account.account.template,name:l10n_be.a404
#: model:account.account.template,name:l10n_be.a414
msgid "Produits à recevoir"
msgstr "Te innen opbrengsten"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4590
#: model:account.account.template,name:l10n_be.a4590
msgid "Provision pour gratifications de fin d'année"
msgstr "Voorziening voor eindejaarspremie"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a1600
#: model:account.account.template,name:l10n_be.a1600
msgid "Provisions pour risques et charges"
msgstr "Voorzieningen voor risico's en kosten"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4533
#: model:account.account.template,name:l10n_be.a4533
msgid "Précompte mobilier retenu sur intérêts payés"
msgstr "Roerende voorheffing ingehouden op betaalde intresten"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4530
#: model:account.account.template,name:l10n_be.a4530
msgid "Précompte professionnel retenu sur rémunérations"
msgstr "Bedrijfsvoorheffing ingehouden op bezoldigingen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a791
#: model:account.account.template,name:l10n_be.a791
msgid "Prélèvement sur le capital et les primes d'émission"
msgstr "Onttrekking aan het kapitaal en aan de uitgiftepremies"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a780
#: model:account.account.template,name:l10n_be.a780
msgid "Prélèvements sur les impôts différés"
msgstr "Onttrekking aan de uitgestelde belastingen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a789
#: model:account.account.template,name:l10n_be.a789
msgid "Prélèvements sur les réserves immunisées"
msgstr "Onttrekking aan de reserves"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a706
#: model:account.account.template,name:l10n_be.a706
msgid "Pénalités et dédits obtenus par l'entreprise"
msgstr "Boeten en verbeurdverklaringen verkregen door de onderneming"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4168
#: model:account.account.template,name:l10n_be.a4168
msgid "Rabais, ristournes, remises à obtenir et autres avoirs non encore reçus"
msgstr "Kortingen, rabatten en andere nog te ontvangen tegoeden"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a7500
#: model:account.account.template,name:l10n_be.a7500
msgid "Revenus des actions"
msgstr "Opbrengsten uit aandelen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a7502
#: model:account.account.template,name:l10n_be.a7502
msgid "Revenus des créances à plus d'un an"
msgstr "Inkomsten uit schuld > 1 jaar"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a7501
#: model:account.account.template,name:l10n_be.a7501
msgid "Revenus des obligations"
msgstr "Opbrengsten uit obligaties"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a49100
#: model:account.account.template,name:l10n_be.a49100
msgid "Ristournes, rabais à obtenir"
msgstr "Te ontvangen kortingen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a329
-#: model:account.account,name:l10n_be.1_a419
#: model:account.account.template,name:l10n_be.a329
#: model:account.account.template,name:l10n_be.a419
msgid "Réductions de valeur actées"
msgstr "Geboekte waardeverminderingen (-)"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a6320
#: model:account.account.template,name:l10n_be.a6320
msgid "Réductions de valeur sur commandes en cours d'exécution"
msgstr "Waardeverminderingen op bestellingen in uitvoering"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a6310
#: model:account.account.template,name:l10n_be.a6310
msgid "Réductions de valeur sur stocks"
msgstr "Waardeverminderingen op voorraden"
#. module: l10n_be
-#: model:account.fiscal.position,name:l10n_be.1_fiscal_position_template_4
#: model:account.fiscal.position.template,name:l10n_be.fiscal_position_template_4
msgid "Régime Cocontractant"
msgstr "Medecontractant"
#. module: l10n_be
-#: model:account.fiscal.position,name:l10n_be.1_fiscal_position_template_2
#: model:account.fiscal.position.template,name:l10n_be.fiscal_position_template_2
msgid "Régime Extra-Communautaire"
msgstr "Export"
#. module: l10n_be
-#: model:account.fiscal.position,name:l10n_be.1_fiscal_position_template_3
#: model:account.fiscal.position.template,name:l10n_be.fiscal_position_template_3
msgid "Régime Intra-Communautaire"
msgstr "Intra-Communautair"
#. module: l10n_be
-#: model:account.fiscal.position,name:l10n_be.1_fiscal_position_template_1
#: model:account.fiscal.position.template,name:l10n_be.fiscal_position_template_1
msgid "Régime National"
msgstr "Nationaal"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V61
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V61
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V61
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V61
msgid "Régularisation en faveur de l'état"
msgstr ""
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V62
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V62
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V62
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V62
msgid "Régularisation en faveur du déclarant"
msgstr ""
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a7710
#: model:account.account.template,name:l10n_be.a7710
msgid "Régularisations d'impôts dus ou versés"
msgstr "Regularisering van verschuldigde of betaalde belastingen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a7711
#: model:account.account.template,name:l10n_be.a7711
msgid "Régularisations d'impôts estimés"
msgstr "Regularisering van geraamde belastingen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a6200
#: model:account.account.template,name:l10n_be.a6200
msgid "Rémunérations: Administrateurs ou gérants"
msgstr "Bezoldigingen: Bestuurders of zaakvoerders"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a6204
#: model:account.account.template,name:l10n_be.a6204
msgid "Rémunérations: Autres membres du personnel"
msgstr "Bezoldigingen: Andere personeelsleden, verbonden met een arbeidsovereenkomst"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a6202
#: model:account.account.template,name:l10n_be.a6202
msgid "Rémunérations: Employés"
msgstr "Bezoldigingen: Arbeiders"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a6203
#: model:account.account.template,name:l10n_be.a6203
msgid "Rémunérations: Ouvriers"
msgstr "Bezoldigingen: Bedienden"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a6201
#: model:account.account.template,name:l10n_be.a6201
msgid "Rémunérations: Personnel de direction"
msgstr "Bezoldigingen: Directiepersoneel"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a130
#: model:account.account.template,name:l10n_be.a130
msgid "Réserve légale"
msgstr "Wettelijke reserve"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a132
#: model:account.account.template,name:l10n_be.a132
msgid "Réserves immunisées"
msgstr "Belastingvrije reserves"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a613
#: model:account.account.template,name:l10n_be.a613
msgid "Rétributions de tiers"
msgstr "Vergoedingen aan derden"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a603
#: model:account.account.template,name:l10n_be.a603
msgid "Sous-traitances générales"
msgstr "Algemene onderaannemingen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a753
#: model:account.account.template,name:l10n_be.a753
msgid "Subsides en capital et en intérêts"
msgstr "Kapitaal- en interestsubsidies"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a150
#: model:account.account.template,name:l10n_be.a150
msgid "Subsides obtenus"
msgstr "Verkregen subsidies"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a41670
#: model:account.account.template,name:l10n_be.a41670
msgid "Subsides à recevoir"
msgstr "Te ontvangen subsidies"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a411059
#: model:account.account.template,name:l10n_be.a411059
msgid "T.V.A Déductible"
msgstr "Aftrekbare BTW"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a64012
#: model:account.account.template,name:l10n_be.a64012
msgid "T.V.A. non déductible"
msgstr "Niet aftrekbare BTW"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a451054
#: model:account.account.template,name:l10n_be.a451054
msgid "T.V.A. à payer"
msgstr "Te betalen BTW"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a451056
#: model:account.account.template,name:l10n_be.a451056
msgid "T.V.A. à payer - Cocontractant"
msgstr "Te betalen BTW - Medecontractant"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a451057
#: model:account.account.template,name:l10n_be.a451057
msgid "T.V.A. à payer - Import"
msgstr "Te betalen BTW - Import"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a451055
#: model:account.account.template,name:l10n_be.a451055
msgid "T.V.A. à payer - Intra-communautaire"
msgstr "Te betalen BTW - Intracommunautair"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-00
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-00-G
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-00-S
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-00
-#: model:account.tax,description:l10n_be.1_attn_VAT-OUT-00-L
-#: model:account.tax,description:l10n_be.1_attn_VAT-OUT-00-S
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-00
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-00-G
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-00-S
@@ -1990,10 +1676,6 @@ msgid "TVA 0%"
msgstr "BTW 0%"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-00-CC
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-00-CC
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-00-CC
-#: model:account.tax,description:l10n_be.1_attn_VAT-OUT-00-CC
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-00-CC
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-00-CC
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V83-00-CC
@@ -2002,13 +1684,6 @@ msgid "TVA 0% Cocont."
msgstr "BTW 0% Medecont."
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-00-EU
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-00-EU-G
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-00-EU-S
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-00-EU
-#: model:account.tax,description:l10n_be.1_attn_VAT-OUT-00-EU-L
-#: model:account.tax,description:l10n_be.1_attn_VAT-OUT-00-EU-S
-#: model:account.tax,description:l10n_be.1_attn_VAT-OUT-00-EU-T
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-00-EU
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-00-EU-G
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-00-EU-S
@@ -2020,10 +1695,6 @@ msgid "TVA 0% EU"
msgstr "BTW 0% EU"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-00-ROW-CC
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-00-ROW-CC
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-00-ROW-CC
-#: model:account.tax,description:l10n_be.1_attn_VAT-OUT-00-ROW
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-00-ROW-CC
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-00-ROW-CC
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V83-00-ROW-CC
@@ -2032,12 +1703,6 @@ msgid "TVA 0% Non EU"
msgstr "BTW 0% Non EU"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-12
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-12-G
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-12-S
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-12
-#: model:account.tax,description:l10n_be.1_attn_VAT-OUT-12-L
-#: model:account.tax,description:l10n_be.1_attn_VAT-OUT-12-S
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-12
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-12-G
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-12-S
@@ -2048,9 +1713,6 @@ msgid "TVA 12%"
msgstr "BTW 12%"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-12-CC
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-12-CC
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-12-CC
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-12-CC
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-12-CC
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V83-12-CC
@@ -2058,9 +1720,6 @@ msgid "TVA 12% Cocont."
msgstr "BTW 12% Medecont."
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-12-CC-C1
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-12-CC-C1
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-12-CC-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-12-CC-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-12-CC-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V83-12-CC-C1
@@ -2068,9 +1727,6 @@ msgid "TVA 12% Cocont. Déductible"
msgstr "BTW 12% Medecont. Aftrekbaar"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-12-CC-C2
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-12-CC-C2
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-12-CC-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-12-CC-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-12-CC-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V83-12-CC-C2
@@ -2078,10 +1734,6 @@ msgid "TVA 12% Cocont. Récupérable"
msgstr "BTW 12% Medecont. Verhaalbaar"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-12-EU
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-12-EU-G
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-12-EU-S
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-12-EU
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-12-EU
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-12-EU-G
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-12-EU-S
@@ -2090,10 +1742,6 @@ msgid "TVA 12% EU"
msgstr "BTW 12% EU"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-12-EU-C1
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-12-EU-G-C1
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-12-EU-S-C1
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-12-EU-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-12-EU-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-12-EU-G-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-12-EU-S-C1
@@ -2102,10 +1750,6 @@ msgid "TVA 12% EU Déductible"
msgstr "BTW 12% EU Aftrekbaar"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-12-EU-C2
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-12-EU-G-C2
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-12-EU-S-C2
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-12-EU-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-12-EU-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-12-EU-G-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-12-EU-S-C2
@@ -2114,15 +1758,11 @@ msgid "TVA 12% EU Récupérable"
msgstr "BTW 12% EU Verhaalbaar"
#. module: l10n_be
-#: model:account.tax,name:l10n_be.1_attn_VAT-IN-V82-12-EU-G-C2
#: model:account.tax.template,name:l10n_be.attn_VAT-IN-V82-12-EU-G-C2
msgid "TVA 12% EU Récupérable - Biens divers"
msgstr "BTW 12% EU Verhaalbaar - Diverse goederen"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-12-ROW-CC
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-12-ROW-CC
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-12-ROW-CC
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-12-ROW-CC
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-12-ROW-CC
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V83-12-ROW-CC
@@ -2130,9 +1770,6 @@ msgid "TVA 12% Non EU"
msgstr "BTW 12% Niet EU"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-12-ROW-CC-C1
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-12-ROW-CC-C1
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-12-ROW-CC-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-12-ROW-CC-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-12-ROW-CC-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V83-12-ROW-CC-C1
@@ -2140,9 +1777,6 @@ msgid "TVA 12% Non EU Déductible"
msgstr "BTW 12% Niet EU Aftrekbaar"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-12-ROW-CC-C2
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-12-ROW-CC-C2
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-12-ROW-CC-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-12-ROW-CC-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-12-ROW-CC-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V83-12-ROW-CC-C2
@@ -2150,12 +1784,6 @@ msgid "TVA 12% Non EU Récupérable"
msgstr "BTW 12% Niet EU Verhaalbaar"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-21
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-21-G
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-21-S
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-21
-#: model:account.tax,description:l10n_be.1_attn_VAT-OUT-21-L
-#: model:account.tax,description:l10n_be.1_attn_VAT-OUT-21-S
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-21
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-21-G
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-21-S
@@ -2166,9 +1794,6 @@ msgid "TVA 21%"
msgstr "BTW 21%"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-21-CC
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-21-CC
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-21-CC
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-21-CC
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-21-CC
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V83-21-CC
@@ -2176,9 +1801,6 @@ msgid "TVA 21% Cocont."
msgstr "BTW 21% Medecont."
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-21-CC-C1
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-21-CC-C1
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-21-CC-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-21-CC-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-21-CC-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V83-21-CC-C1
@@ -2186,9 +1808,6 @@ msgid "TVA 21% Cocont. Déductible"
msgstr "BTW 21% Medecont. Aftrekbaar"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-21-CC-C2
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-21-CC-C2
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-21-CC-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-21-CC-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-21-CC-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V83-21-CC-C2
@@ -2196,10 +1815,6 @@ msgid "TVA 21% Cocont. Récupérable"
msgstr "BTW 21% Medecont. Verhaalbaar"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-21-EU
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-21-EU-G
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-21-EU-S
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-21-EU
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-21-EU
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-21-EU-G
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-21-EU-S
@@ -2208,10 +1823,6 @@ msgid "TVA 21% EU"
msgstr "BTW 21% EU"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-21-EU-C1
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-21-EU-G-C1
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-21-EU-S-C1
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-21-EU-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-21-EU-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-21-EU-G-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-21-EU-S-C1
@@ -2220,10 +1831,6 @@ msgid "TVA 21% EU Déductible"
msgstr "BTW 21% EU Aftrekbaar"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-21-EU-C2
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-21-EU-G-C2
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-21-EU-S-C2
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-21-EU-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-21-EU-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-21-EU-G-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-21-EU-S-C2
@@ -2232,9 +1839,6 @@ msgid "TVA 21% EU Récupérable"
msgstr "BTW 21% EU Verhaalbaar"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-21-ROW-CC
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-21-ROW-CC
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-21-ROW-CC
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-21-ROW-CC
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-21-ROW-CC
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V83-21-ROW-CC
@@ -2242,9 +1846,6 @@ msgid "TVA 21% Non EU"
msgstr "BTW 21% Niet EU"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-21-ROW-CC-C1
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-21-ROW-CC-C1
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-21-ROW-CC-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-21-ROW-CC-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-21-ROW-CC-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V83-21-ROW-CC-C1
@@ -2252,9 +1853,6 @@ msgid "TVA 21% Non EU Déductible"
msgstr "BTW 21% Niet EU Aftrekbaar"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-21-ROW-CC-C2
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-21-ROW-CC-C2
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-21-ROW-CC-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-21-ROW-CC-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-21-ROW-CC-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V83-21-ROW-CC-C2
@@ -2262,30 +1860,21 @@ msgid "TVA 21% Non EU Récupérable"
msgstr "BTW 21% Niet EU Verhaalbaar"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_TVA-21-inclus-dans-prix
#: model:account.tax.template,description:l10n_be.attn_TVA-21-inclus-dans-prix
msgid "TVA 21% TTC"
msgstr "VAT 21% (inclusief BTW)"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-CAR-EXC-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-CAR-EXC-C2
msgid "TVA 50% Déductible - Frais de voiture (Prix Excl.)"
msgstr "BTW 5°% Aftrekbaar - Auto kosten (Prijs Excl.)"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-CAR-EXC
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-CAR-EXC
msgid "TVA 50% Non Déductible - Frais de voiture (Prix Excl.)"
msgstr "BTW 50% Niet Aftrekbaar - Auto kosten (Prijs Excl.)"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-06
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-06-G
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-06-S
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-06
-#: model:account.tax,description:l10n_be.1_attn_VAT-OUT-06-L
-#: model:account.tax,description:l10n_be.1_attn_VAT-OUT-06-S
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-06
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-06-G
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-06-S
@@ -2296,9 +1885,6 @@ msgid "TVA 6%"
msgstr "BTW 6%"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-06-CC
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-06-CC
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-06-CC
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-06-CC
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-06-CC
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V83-06-CC
@@ -2306,9 +1892,6 @@ msgid "TVA 6% Cocont."
msgstr "BTW 6% Medecont."
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-06-CC-C1
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-06-CC-C1
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-06-CC-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-06-CC-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-06-CC-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V83-06-CC-C1
@@ -2316,9 +1899,6 @@ msgid "TVA 6% Cocont. Déductible"
msgstr "BTW 6% Medecont. Aftrekbaar"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-06-CC-C2
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-06-CC-C2
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-06-CC-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-06-CC-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-06-CC-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V83-06-CC-C2
@@ -2326,10 +1906,6 @@ msgid "TVA 6% Cocont. Récupérable"
msgstr "BTW 6% Medecont. Verhaalbaar"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-06-EU
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-06-EU-G
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-06-EU-S
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-06-EU
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-06-EU
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-06-EU-G
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-06-EU-S
@@ -2338,10 +1914,6 @@ msgid "TVA 6% EU"
msgstr "BTW 6% EU"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-06-EU-C1
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-06-EU-G-C1
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-06-EU-S-C1
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-06-EU-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-06-EU-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-06-EU-G-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-06-EU-S-C1
@@ -2350,10 +1922,6 @@ msgid "TVA 6% EU Déductible"
msgstr "BTW 6% EU Aftrekbaar"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-06-EU-C2
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-06-EU-G-C2
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-06-EU-S-C2
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-06-EU-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-06-EU-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-06-EU-G-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-06-EU-S-C2
@@ -2362,9 +1930,6 @@ msgid "TVA 6% EU Récupérable"
msgstr "BTW 6% EU Verhaalbaar"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-06-ROW-CC
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-06-ROW-CC
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-06-ROW-CC
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-06-ROW-CC
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-06-ROW-CC
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V83-06-ROW-CC
@@ -2372,9 +1937,6 @@ msgid "TVA 6% Non EU"
msgstr "BTW 6% Niet EU"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-06-ROW-CC-C1
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-06-ROW-CC-C1
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-06-ROW-CC-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-06-ROW-CC-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-06-ROW-CC-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V83-06-ROW-CC-C1
@@ -2382,9 +1944,6 @@ msgid "TVA 6% Non EU Déductible"
msgstr "BTW 6% Niet EU Aftrekbaar"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V81-06-ROW-CC-C2
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-06-ROW-CC-C2
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V83-06-ROW-CC-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V81-06-ROW-CC-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-06-ROW-CC-C2
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V83-06-ROW-CC-C2
@@ -2392,73 +1951,61 @@ msgid "TVA 6% Non EU Récupérable"
msgstr "BTW 6% Niet EU Verhaalbaar"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a4118
#: model:account.account.template,name:l10n_be.a4118
msgid "Taxe d'égalisation due"
msgstr "Verschuldigde egalisatiebelasting"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a64000
#: model:account.account.template,name:l10n_be.a64000
msgid "Taxes sur autos et camions"
msgstr "Verkeersbelasting bedrijfswagens"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a2500
#: model:account.account.template,name:l10n_be.a2500
msgid "Terrains"
msgstr "Terreinen"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_trans
#: model:account.account.template,name:l10n_be.trans
msgid "Transferts"
msgstr "Transferten"
#. module: l10n_be
-#: model:account.tax,description:l10n_be.1_attn_VAT-IN-V82-CAR-EXC-C1
#: model:account.tax.template,description:l10n_be.attn_VAT-IN-V82-CAR-EXC-C1
msgid "VAT 50% Non Déductible - Frais de voiture"
msgstr "BTW 50% Niet Aftrekbaar - Auto kosten"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a7001
#: model:account.account.template,name:l10n_be.a7001
msgid "Ventes dans les pays membres de la C.E.E. (marchandises)"
msgstr "Verkopen: leden van de Europese gemeenschap (handelsgoederen)"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a7011
#: model:account.account.template,name:l10n_be.a7011
msgid "Ventes dans les pays membres de la C.E.E. (produits finis)"
msgstr "Verkopen: leden van de Europese gemeenschap (gereed product)"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a7000
#: model:account.account.template,name:l10n_be.a7000
msgid "Ventes en Belgique (marchandises)"
msgstr "Verkopen: België (handelsgoederen)"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a7010
#: model:account.account.template,name:l10n_be.a7010
msgid "Ventes en Belgique (produits finis)"
msgstr "Verkopen: België (gereed product)"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a7002
#: model:account.account.template,name:l10n_be.a7002
msgid "Ventes à l'exportation (marchandises)"
msgstr "Verkopen: export (handelsgoederen)"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a7012
#: model:account.account.template,name:l10n_be.a7012
msgid "Ventes à l'exportation (produits finis)"
msgstr "Verkopen: export (gereed product)"
#. module: l10n_be
-#: model:account.account,name:l10n_be.1_a24100
#: model:account.account.template,name:l10n_be.a24100
msgid "Voitures"
msgstr "Wagens"
diff --git a/addons/l10n_cr/data/l10n_cr_state_data.xml b/addons/l10n_cr/data/l10n_cr_state_data.xml
index 585012600b2..4a38f56de50 100644
--- a/addons/l10n_cr/data/l10n_cr_state_data.xml
+++ b/addons/l10n_cr/data/l10n_cr_state_data.xml
@@ -5,37 +5,37 @@
Update states
-->
<record id="state_SJ" model="res.country.state">
- <field name="code">SJ</field>
+ <field name="code">CR-SJ</field>
<field name="name">San Jos&#233;</field>
<field name="country_id" ref="base.cr"/>
</record>
<record id="state_A" model="res.country.state">
- <field name="code">A</field>
+ <field name="code">CR-A</field>
<field name="name">Alajuela</field>
<field name="country_id" ref="base.cr"/>
</record>
<record id="state_H" model="res.country.state">
- <field name="code">H</field>
+ <field name="code">CR-H</field>
<field name="name">Heredia</field>
<field name="country_id" ref="base.cr"/>
</record>
<record id="state_C" model="res.country.state">
- <field name="code">C</field>
+ <field name="code">CR-C</field>
<field name="name">Cartago</field>
<field name="country_id" ref="base.cr"/>
</record>
<record id="state_P" model="res.country.state">
- <field name="code">P</field>
+ <field name="code">CR-P</field>
<field name="name">Puntarenas</field>
<field name="country_id" ref="base.cr"/>
</record>
<record id="state_G" model="res.country.state">
- <field name="code">G</field>
+ <field name="code">CR-G</field>
<field name="name">Guanacaste</field>
<field name="country_id" ref="base.cr"/>
</record>
<record id="state_L" model="res.country.state">
- <field name="code">L</field>
+ <field name="code">CR-L</field>
<field name="name">Lim&#243;n</field>
<field name="country_id" ref="base.cr"/>
</record>
diff --git a/addons/l10n_do/models/chart_template.py b/addons/l10n_do/models/chart_template.py
index 73e99589873..97d0833fef6 100644
--- a/addons/l10n_do/models/chart_template.py
+++ b/addons/l10n_do/models/chart_template.py
@@ -13,6 +13,49 @@ class WizardMultiChartsAccounts(models.TransientModel):
return [
{'acc_name': _('Cash'), 'account_type': 'cash'},
{'acc_name': _('Caja Chica'), 'account_type': 'cash'},
+ {'acc_name': _('Cheques Clientes'), 'account_type': 'cash'},
{'acc_name': _('Bank'), 'account_type': 'bank'}
]
return super(WizardMultiChartsAccounts, self)._get_default_bank_account_ids()
+
+
+class AccountChartTemplate(models.Model):
+ _inherit = "account.chart.template"
+
+ @api.multi
+ def _prepare_all_journals(self, acc_template_ref, company, journals_dict=None):
+ """Create fiscal journals for buys"""
+ res = super(AccountChartTemplate, self)._prepare_all_journals(
+ acc_template_ref, company, journals_dict=journals_dict)
+ if not self == self.env.ref('l10n_do.do_chart_template'):
+ return res
+ for journal in res:
+ if journal['code'] == 'FACT':
+ journal['name'] = _('Compras Fiscales')
+ res += [{
+ 'type': 'purchase',
+ 'name': _('Compras Informales'),
+ 'code': 'CINF',
+ 'company_id': company.id,
+ 'show_on_dashboard': True
+ }, {
+ 'type': 'purchase',
+ 'name': _('Gastos Menores'),
+ 'code': 'GASM',
+ 'company_id': company.id,
+ 'show_on_dashboard': True
+ }, {
+ 'type': 'purchase',
+ 'name': _('Compras al Exterior'),
+ 'code': 'CEXT',
+ 'company_id': company.id,
+ 'show_on_dashboard': True
+ }, {
+ 'type': 'purchase',
+ 'name': _('Gastos No Deducibles'),
+ 'code': 'GASTO',
+ 'company_id': company.id,
+ 'show_on_dashboard': True
+ }]
+ return res
+
diff --git a/addons/l10n_fr_certification/data/account_move.xml b/addons/l10n_fr_certification/data/account_move.xml
index 2794e6364f9..c4d735d2b14 100644
--- a/addons/l10n_fr_certification/data/account_move.xml
+++ b/addons/l10n_fr_certification/data/account_move.xml
@@ -3,6 +3,7 @@
<field name="name">Data Inalterability Check</field>
<field name="model_id" ref="account.model_account_move"/>
<field name="type">ir.actions.server</field>
+ <field name="state">code</field>
<field name="code">
action = env['account.move']._check_hash_integrity(env.user.company_id.id)
</field>
@@ -12,6 +13,7 @@
<field name="name">Get the certification now!</field>
<field name="type">ir.actions.server</field>
<field name="model_id" ref="account.model_res_company"/>
+ <field name="state">code</field>
<field name="code">
db_uuid = env['ir.config_parameter'].sudo().get_param('database.uuid')
action = {"type": "ir.actions.act_url",
diff --git a/addons/l10n_fr_pos_cert/data/pos_inalterability.xml b/addons/l10n_fr_pos_cert/data/pos_inalterability.xml
index ace4c3de24d..377204b73c6 100644
--- a/addons/l10n_fr_pos_cert/data/pos_inalterability.xml
+++ b/addons/l10n_fr_pos_cert/data/pos_inalterability.xml
@@ -8,6 +8,7 @@
<field name="name">Pos Orders Inalterability Check</field>
<field name="model_id" ref="point_of_sale.model_pos_order"/>
<field name="type">ir.actions.server</field>
+ <field name="state">code</field>
<field name="code">
action = env['pos.order']._check_hash_integrity(env.user.company_id.id)
</field>
diff --git a/addons/l10n_multilang/models/l10n_multilang.py b/addons/l10n_multilang/models/l10n_multilang.py
index 0c096c4cdf3..4bde8505d5c 100644
--- a/addons/l10n_multilang/models/l10n_multilang.py
+++ b/addons/l10n_multilang/models/l10n_multilang.py
@@ -32,14 +32,14 @@ class AccountChartTemplate(models.Model):
for element in in_ids.with_context(lang=None):
if value[element.id]:
#copy Translation from Source to Destination object
- xlat_obj.create({
- 'name': out_ids._name + ',' + in_field,
- 'type': 'model',
- 'res_id': out_ids[counter].id,
- 'lang': lang,
- 'src': element[in_field],
- 'value': value[element.id],
- })
+ xlat_obj._set_ids(
+ out_ids._name + ',' + in_field,
+ 'model',
+ lang,
+ out_ids[counter].ids,
+ value[element.id],
+ element[in_field]
+ )
else:
_logger.info('Language: %s. Translation from template: there is no translation available for %s!' % (lang, element[in_field]))
counter += 1
diff --git a/addons/mail/models/ir_model.py b/addons/mail/models/ir_model.py
index 04529610f0e..0b029f3e1a1 100644
--- a/addons/mail/models/ir_model.py
+++ b/addons/mail/models/ir_model.py
@@ -52,12 +52,6 @@ class IrModel(models.Model):
model_class._inherit = parents + ['mail.thread']
return model_class
- def unlink(self):
- # Delete followers for models that will be unlinked.
- query = "DELETE FROM mail_followers WHERE res_model IN %s"
- self.env.cr.execute(query, [tuple(self.mapped('model'))])
- return super(IrModel, self).unlink()
-
class IrModelField(models.Model):
_inherit = 'ir.model.fields'
diff --git a/addons/mail/models/mail_activity.py b/addons/mail/models/mail_activity.py
index 9cc9e8699a0..7b3cb76aa6d 100644
--- a/addons/mail/models/mail_activity.py
+++ b/addons/mail/models/mail_activity.py
@@ -89,7 +89,7 @@ class MailActivity(models.Model):
summary = fields.Char('Summary')
note = fields.Html('Note')
feedback = fields.Html('Feedback')
- date_deadline = fields.Date('Due Date', index=True, required=True, default=fields.Date.today)
+ date_deadline = fields.Date('Due Date', index=True, required=True, default=fields.Date.context_today)
automated = fields.Boolean(
'Automated activity', readonly=True,
help='Indicates this activity has been created automatically and not by any user.')
@@ -154,7 +154,8 @@ class MailActivity(models.Model):
@api.onchange('recommended_activity_type_id')
def _onchange_recommended_activity_type_id(self):
- self.activity_type_id = self.recommended_activity_type_id
+ if self.recommended_activity_type_id:
+ self.activity_type_id = self.recommended_activity_type_id
@api.multi
def _check_access(self, operation):
diff --git a/addons/mail/models/res_users.py b/addons/mail/models/res_users.py
index 2068e66c834..0d6ea26579c 100644
--- a/addons/mail/models/res_users.py
+++ b/addons/mail/models/res_users.py
@@ -75,16 +75,19 @@ class Users(models.Model):
def activity_user_count(self):
query = """SELECT m.id, count(*), act.res_model as model,
CASE
- WHEN now()::date - act.date_deadline::date = 0 Then 'today'
- WHEN now()::date - act.date_deadline::date > 0 Then 'overdue'
- WHEN now()::date - act.date_deadline::date < 0 Then 'planned'
+ WHEN %(today)s::date - act.date_deadline::date = 0 Then 'today'
+ WHEN %(today)s::date - act.date_deadline::date > 0 Then 'overdue'
+ WHEN %(today)s::date - act.date_deadline::date < 0 Then 'planned'
END AS states
FROM mail_activity AS act
JOIN ir_model AS m ON act.res_model_id = m.id
- WHERE user_id = %s
+ WHERE user_id = %(user_id)s
GROUP BY m.id, states, act.res_model;
"""
- self.env.cr.execute(query, [self.env.uid])
+ self.env.cr.execute(query, {
+ 'today': fields.Date.context_today(self),
+ 'user_id': self.env.uid,
+ })
activity_data = self.env.cr.dictfetchall()
model_ids = [a['id'] for a in activity_data]
model_names = {n[0]: n[1] for n in self.env['ir.model'].browse(model_ids).name_get()}
diff --git a/addons/mail/static/src/js/chat_window.js b/addons/mail/static/src/js/chat_window.js
index 9f09eb390b0..9e080f3a248 100644
--- a/addons/mail/static/src/js/chat_window.js
+++ b/addons/mail/static/src/js/chat_window.js
@@ -16,7 +16,8 @@ var HEIGHT_FOLDED = '34px';
return Widget.extend({
template: "mail.ChatWindow",
custom_events: {
- escape_pressed: '_onEscapePressed'
+ escape_pressed: '_onEscapePressed',
+ document_viewer_closed: '_onDocumentViewerClose',
},
events: {
'click .o_chat_composer': '_onComposerClick',
@@ -182,6 +183,9 @@ return Widget.extend({
}
this.focus_input();
},
+ _onDocumentViewerClose: function (ev) {
+ this.focus_input();
+ },
/**
* @private
*/
diff --git a/addons/mail/static/src/js/composer.js b/addons/mail/static/src/js/composer.js
index 3a7b9c320e1..8354fe610b5 100644
--- a/addons/mail/static/src/js/composer.js
+++ b/addons/mail/static/src/js/composer.js
@@ -565,6 +565,9 @@ var BasicComposer = Widget.extend({
on_click_add_attachment: function () {
this.$('input.o_input_file').click();
this.$input.focus();
+ // set ignoreEscape to avoid escape_pressed event when file selector dialog is opened
+ // when user press escape to cancel file selector dialog then escape_pressed event should not be trigerred
+ this.ignoreEscape = true;
},
setState: function (state) {
@@ -635,6 +638,8 @@ var BasicComposer = Widget.extend({
if (this.mention_manager.is_open()) {
event.stopPropagation();
this.mention_manager.reset_suggestions();
+ } else if (this.ignoreEscape) {
+ this.ignoreEscape = false;
} else {
this.trigger_up("escape_pressed");
}
@@ -871,6 +876,7 @@ var BasicComposer = Widget.extend({
* @param {MouseEvent} event
*/
_onAttachmentView: function (event) {
+ event.stopPropagation();
var activeAttachmentID = $(event.currentTarget).data('id');
var attachments = this.get('attachment_ids');
if (activeAttachmentID) {
diff --git a/addons/mail/static/src/js/document_viewer.js b/addons/mail/static/src/js/document_viewer.js
index d03b4811c76..3aa7e25c399 100644
--- a/addons/mail/static/src/js/document_viewer.js
+++ b/addons/mail/static/src/js/document_viewer.js
@@ -26,6 +26,7 @@ var DocumentViewer = Widget.extend({
'DOMMouseScroll .o_viewer_content': '_onScroll', // Firefox
'mousewheel .o_viewer_content': '_onScroll', // Chrome, Safari, IE
'keydown': '_onKeydown',
+ 'keyup': '_onKeyUp',
'mousedown .o_viewer_img': '_onStartDrag',
'mousemove .o_viewer_content': '_onDrag',
'mouseup .o_viewer_content': '_onEndDrag'
@@ -156,6 +157,7 @@ var DocumentViewer = Widget.extend({
_onClose: function (e) {
e.preventDefault();
this.$el.modal('hide');
+ this.trigger_up('document_viewer_closed');
},
/**
* When popup close complete destroyed modal even DOM footprint too
@@ -239,6 +241,20 @@ var DocumentViewer = Widget.extend({
}
},
/**
+ * Close popup on ESCAPE keyup
+ *
+ * @private
+ * @param {KeyEvent} e
+ */
+ _onKeyUp: function (e) {
+ switch (e.which) {
+ case $.ui.keyCode.ESCAPE:
+ e.preventDefault();
+ this._onClose(e);
+ break;
+ }
+ },
+ /**
* @private
* @param {MouseEvent} e
*/
diff --git a/addons/mail/static/src/js/services/chat_manager.js b/addons/mail/static/src/js/services/chat_manager.js
index 1abcd995084..6327af9ab08 100644
--- a/addons/mail/static/src/js/services/chat_manager.js
+++ b/addons/mail/static/src/js/services/chat_manager.js
@@ -1357,7 +1357,15 @@ var ChatManager = AbstractService.extend({
//add o_mail_emoji class on each unicode to manage size and font
var unicode = String(value);
var regexp = new RegExp("(?:^|\\s|<[a-z]*>)(" + unicode + ")(?=\\s|$|</[a-z]*>)", "g");
+ var msg_bak = msg.body;
msg.body = msg.body.replace(regexp, ' <span class="o_mail_emoji">'+unicode+'</span> ');
+ // Idiot-proof limit. If the user had the amazing idea of copy-pasting thousands of emojis,
+ // the image rendering can lead to memory overflow errors on some browsers (e.g. Chrome).
+ // Set an arbitrary limit to 200 from which we simply don't replace them (anyway, they are
+ // already replaced by the unicode counterpart).
+ if (_.str.count(msg.body, 'o_mail_emoji') > 200) {
+ msg.body = msg_bak;
+ }
});
function propertyDescr(channel) {
return {
diff --git a/addons/mail/static/src/js/thread.js b/addons/mail/static/src/js/thread.js
index d4bd448d2f8..f34823ff9fc 100644
--- a/addons/mail/static/src/js/thread.js
+++ b/addons/mail/static/src/js/thread.js
@@ -380,6 +380,7 @@ var Thread = Widget.extend({
* @param {MouseEvent} event
*/
_onAttachmentView: function (event) {
+ event.stopPropagation();
var activeAttachmentID = $(event.currentTarget).data('id');
if (activeAttachmentID) {
var attachmentViewer = new DocumentViewer(this, this.attachments, activeAttachmentID);
diff --git a/addons/mail/static/src/less/composer.less b/addons/mail/static/src/less/composer.less
index fc4cea97166..eb80e9e2691 100644
--- a/addons/mail/static/src/less/composer.less
+++ b/addons/mail/static/src/less/composer.less
@@ -16,7 +16,6 @@
position: relative;
.o-flex(0, 0, auto);
.o-flex-display();
- margin: 1px 0;
border-top: none;
background: @gray-lighter;
@@ -51,10 +50,12 @@
cursor: text;
display: inline-block;
height: 100%;
- padding: 0px 0px @o-mail-chatter-gap;
white-space: pre-wrap;
word-break: break-all;
}
+ .o_composer_text_field {
+ padding: 0 0 @o-mail-chatter-gap;
+ }
.o_composer_mention_dropdown .o_mention_proposition > a {
.o-text-overflow();
width: 100%;
@@ -163,7 +164,6 @@
.o_composer {
display: flex;
min-height: 40px;
- padding: @o-mail-chatter-gap @o-mail-chatter-gap 0 @o-mail-chatter-gap;
border-radius: 2px 0 0 2px;
border-right-width: 0;
}
@@ -175,6 +175,7 @@
.o-flex-flow(row, wrap);
}
.o_composer_text_field {
+ padding: @o-mail-chatter-gap;
.o-flex(1, 1, 50%);
}
.o_chatter_composer_tools {
@@ -187,8 +188,8 @@
.o_chatter_composer_tools {
border: none;
border-left: 1px solid @gray-lighter-dark;
+ padding-top: @o-mail-chatter-gap*0.5;
padding-left: @o-mail-chatter-gap*0.5;
- .o-transform(translateY(-@o-mail-chatter-gap*0.5));
}
.o_composer_button_send {
@@ -212,6 +213,7 @@
border-bottom-width: 1px;
}
.o_composer_input {
+ padding: @o-mail-chatter-gap;
.o-flex-flow(row, nowrap);
.o_chatter_composer_tools {
diff --git a/addons/mail/static/src/xml/thread.xml b/addons/mail/static/src/xml/thread.xml
index 118e96da8ff..d13508b7e1b 100644
--- a/addons/mail/static/src/xml/thread.xml
+++ b/addons/mail/static/src/xml/thread.xml
@@ -61,7 +61,7 @@
</t>
<t t-name="DocumentViewer">
- <div class="modal o_modal_fullscreen" tabindex="-1" role="dialog" aria-hidden="true">
+ <div class="modal o_modal_fullscreen" tabindex="-1" data-keyboard="false" role="dialog" aria-hidden="true">
<t t-call="DocumentViewer.Content"/>
<t t-if="widget.attachment.length != 1">
diff --git a/addons/mail/static/tests/chat_window_tests.js b/addons/mail/static/tests/chat_window_tests.js
index 05df8461d18..578d0079b43 100644
--- a/addons/mail/static/tests/chat_window_tests.js
+++ b/addons/mail/static/tests/chat_window_tests.js
@@ -62,6 +62,84 @@ QUnit.module('mail', {
parent.destroy();
});
+ QUnit.test('open document viewer and close using ESCAPE key should reset focus to chat window', function (assert) {
+ assert.expect(6);
+
+ function createParent(params) {
+ var widget = new Widget();
+
+ testUtils.addMockEnvironment(widget, params);
+ return widget;
+ }
+ var messages = [{
+ attachment_ids: [{
+ filename: 'image1.jpg',
+ id:1,
+ mimetype: 'image/jpeg',
+ name: 'Test Image 1',
+ url: '/web/content/1?download=true'
+ }],
+ author_id: ["1", "John Doe"],
+ body: "A message",
+ date: moment("2016-12-20 09:35:40"),
+ displayed_author: "John Doe",
+ id: 1,
+ is_note: false,
+ is_starred: false,
+ model: 'partner',
+ res_id: 2
+ }];
+ var parent = createParent({
+ mockRPC: function (route, args) {
+ if(_.str.contains(route, '/mail/attachment/preview/') ||
+ _.str.contains(route, '/web/static/lib/pdfjs/web/viewer.html')){
+ var canvas = document.createElement('canvas');
+ return $.when(canvas.toDataURL());
+ }
+ return this._super.apply(this, arguments);
+ },
+ data: {},
+ });
+
+ var chatWindow = new ChatWindow(parent, 1, "user", false, messages.length, {});
+ chatWindow.appendTo($('#qunit-fixture'));
+ chatWindow.render(messages);
+
+ testUtils.intercept(chatWindow, 'get_messages', function(event) {
+ event.stopPropagation();
+ var requested_msgs = _.filter(messages, function (msg) {
+ return _.contains(event.data.options.ids, msg.id);
+ });
+ event.data.callback($.when(requested_msgs));
+ }, true);
+
+ testUtils.intercept(chatWindow, 'get_bus', function(event) {
+ event.stopPropagation();
+ event.data.callback(new Bus());
+ }, true);
+
+ chatWindow.on('document_viewer_closed', null, function () {
+ assert.ok(true, "chat window should trigger a close document viewer event");
+ });
+ assert.strictEqual(chatWindow.$('.o_thread_message .o_attachment').length, 1,
+ "there should be three attachment on message");
+ // click on first image attachement
+ chatWindow.$('.o_thread_message .o_attachment .o_image_box .o_image_overlay').first().click();
+ // check focus is on document viewer popup and then press escape to close it
+ assert.strictEqual(document.activeElement, $('.o_modal_fullscreen')[0], "Modal popup should have focus");
+ assert.strictEqual($('.o_modal_fullscreen img.o_viewer_img[src*="/web/image/1?unique=1"]').length, 1,
+ "Modal popup should open with first image src");
+ // trigger ESCAPE keyup on document viewer popup
+ var upKeyEvent = jQuery.Event("keyup", {which: 27});
+ $('.o_modal_fullscreen').trigger(upKeyEvent);
+ assert.strictEqual(document.activeElement, chatWindow.$input[0],
+ "input should be focused");
+ var upKeyEvent = jQuery.Event( "keyup", {which: 27});
+ chatWindow.$('.o_composer_input').trigger(upKeyEvent);
+ assert.strictEqual(chatWindow.folded, false, "Closed chat Window");
+ parent.destroy();
+ });
+
QUnit.test('chat window\'s input can still be focused when the UI is blocked', function (assert) {
assert.expect(2);
diff --git a/addons/maintenance/i18n/nl.po b/addons/maintenance/i18n/nl.po
index a2daf9dcdec..d3c25d13c22 100644
--- a/addons/maintenance/i18n/nl.po
+++ b/addons/maintenance/i18n/nl.po
@@ -274,7 +274,7 @@ msgstr "Aangemaakt door"
#. module: maintenance
#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__owner_user_id
msgid "Created by User"
-msgstr ""
+msgstr "Aangemaakt door gebruiker"
#. module: maintenance
#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__create_date
diff --git a/addons/mrp/i18n/nl.po b/addons/mrp/i18n/nl.po
index e312a01bcd2..a9638223b4f 100644
--- a/addons/mrp/i18n/nl.po
+++ b/addons/mrp/i18n/nl.po
@@ -292,7 +292,7 @@ msgstr "Voeg een omschrijving toe..."
#. module: mrp
#: model:ir.actions.act_window,help:mrp.action_work_orders
msgid "Add a work center"
-msgstr ""
+msgstr "Voeg een werkcenter toe"
#. module: mrp
#: model:ir.ui.view,arch_db:mrp.res_config_settings_view_form
diff --git a/addons/mrp/models/mrp_production.py b/addons/mrp/models/mrp_production.py
index aee988d09f8..7b1876cd211 100644
--- a/addons/mrp/models/mrp_production.py
+++ b/addons/mrp/models/mrp_production.py
@@ -557,7 +557,7 @@ class MrpProduction(models.Model):
order._cal_price(moves_to_do)
moves_to_finish = order.move_finished_ids.filtered(lambda x: x.state not in ('done','cancel'))
moves_to_finish._action_done()
- #order.action_assign()
+ order.action_assign()
consume_move_lines = moves_to_do.mapped('active_move_line_ids')
for moveline in moves_to_finish.mapped('active_move_line_ids'):
if moveline.product_id == order.product_id and moveline.move_id.has_tracking != 'none':
diff --git a/addons/mrp/models/mrp_workorder.py b/addons/mrp/models/mrp_workorder.py
index c6ec88533ec..b8f826caec2 100644
--- a/addons/mrp/models/mrp_workorder.py
+++ b/addons/mrp/models/mrp_workorder.py
@@ -290,6 +290,18 @@ class MrpWorkorder(models.Model):
self.final_lot_id = self.env['stock.production.lot'].search([('use_next_on_work_order_id', '=', self.id)],
order='create_date, id', limit=1)
+ def _get_byproduct_move_line(self, by_product_move, quantity):
+ return {
+ 'move_id': by_product_move.id,
+ 'product_id': by_product_move.product_id.id,
+ 'product_uom_qty': quantity,
+ 'product_uom_id': by_product_move.product_uom.id,
+ 'qty_done': quantity,
+ 'workorder_id': self.id,
+ 'location_id': by_product_move.location_id.id,
+ 'location_dest_id': by_product_move.location_dest_id.id,
+ }
+
@api.multi
def record_production(self):
self.ensure_one()
@@ -367,8 +379,14 @@ class MrpWorkorder(models.Model):
if not self.next_work_order_id:
for by_product_move in self.production_id.move_finished_ids.filtered(lambda x: (x.product_id.id != self.production_id.product_id.id) and (x.state not in ('done', 'cancel'))):
- if by_product_move.has_tracking == 'none':
- by_product_move.quantity_done += self.qty_producing * by_product_move.unit_factor
+ if by_product_move.has_tracking != 'serial':
+ values = self._get_byproduct_move_line(by_product_move, self.qty_producing * by_product_move.unit_factor)
+ self.env['stock.move.line'].create(values)
+ elif by_product_move.has_tracking == 'serial':
+ qty_todo = by_product_move.product_uom._compute_quantity(self.qty_producing * by_product_move.unit_factor, by_product_move.product_id.uom_id)
+ for i in range(0, int(float_round(qty_todo, precision_digits=0))):
+ values = self._get_byproduct_move_line(by_product_move, 1)
+ self.env['stock.move.line'].create(values)
# Update workorder quantity produced
self.qty_produced += self.qty_producing
diff --git a/addons/mrp/wizard/mrp_product_produce.py b/addons/mrp/wizard/mrp_product_produce.py
index 1c570d858cc..57bffd5d2fe 100644
--- a/addons/mrp/wizard/mrp_product_produce.py
+++ b/addons/mrp/wizard/mrp_product_produce.py
@@ -38,7 +38,8 @@ class MrpProductProduce(models.TransientModel):
if 'produce_line_ids' in fields:
lines = []
for move in production.move_raw_ids.filtered(lambda x: (x.product_id.tracking != 'none') and x.state not in ('done', 'cancel') and x.bom_line_id):
- qty_to_consume = todo_quantity / move.bom_line_id.bom_id.product_qty * move.bom_line_id.product_qty
+ qty_to_consume = float_round(todo_quantity / move.bom_line_id.bom_id.product_qty * move.bom_line_id.product_qty,
+ precision_rounding=move.product_uom.rounding, rounding_method="UP")
for move_line in move.move_line_ids:
if float_compare(qty_to_consume, 0.0, precision_rounding=move.product_uom.rounding) <= 0:
break
@@ -176,9 +177,9 @@ class MrpProductProduceLine(models.TransientModel):
product_produce_id = fields.Many2one('mrp.product.produce')
product_id = fields.Many2one('product.product', 'Product')
lot_id = fields.Many2one('stock.production.lot', 'Lot')
- qty_to_consume = fields.Float('To Consume')
+ qty_to_consume = fields.Float('To Consume', digits=dp.get_precision('Product Unit of Measure'))
product_uom_id = fields.Many2one('uom.uom', 'Unit of Measure')
- qty_done = fields.Float('Done')
+ qty_done = fields.Float('Done', digits=dp.get_precision('Product Unit of Measure'))
move_id = fields.Many2one('stock.move')
@api.onchange('lot_id')
diff --git a/addons/payment/i18n/nl.po b/addons/payment/i18n/nl.po
index 409870af690..33c1bf176a7 100644
--- a/addons/payment/i18n/nl.po
+++ b/addons/payment/i18n/nl.po
@@ -77,7 +77,7 @@ msgstr "<i>Annuleer,</i> Uw betaling is geannuleerd."
msgid ""
"<i>Done,</i> Your online payment has been successfully processed. Thank you "
"for your order."
-msgstr "Gelukt,</i> Uw online betaling is geslaagd. bedankt voor uw opdracht."
+msgstr "Gelukt,</i> Uw online betaling is geslaagd. Bedankt voor uw opdracht."
#. module: payment
#: code:addons/payment/models/payment_acquirer.py:117
@@ -351,7 +351,7 @@ msgstr "Kan de betaling niet verwerken"
#: code:addons/payment/controllers/portal.py:110
#, python-format
msgid "Cannot setup the payment."
-msgstr ""
+msgstr "Kan de betaling niet opzetten."
#. module: payment
#: model:ir.model.fields,field_description:payment.field_payment_acquirer__capture_manually
@@ -643,7 +643,7 @@ msgid ""
"If you leave it empty, the payment acquirer will be available for all the "
"countries."
msgstr ""
-"Indien u het leeg, is de betalingsverwerker beschikbaar in alle landen."
+"Indien u dit leeg laat, is de betalingsverwerker beschikbaar in alle landen."
#. module: payment
#: model:ir.model.fields,field_description:payment.field_payment_acquirer__image
diff --git a/addons/payment/i18n/tr.po b/addons/payment/i18n/tr.po
index 2f65714d7fe..f5e03727ead 100644
--- a/addons/payment/i18n/tr.po
+++ b/addons/payment/i18n/tr.po
@@ -16,13 +16,14 @@
# Doğan Altunbay <doganaltunbay@gmail.com>, 2017
# Levent Karakaş <levent@mektup.at>, 2017
# Umur Akın <umura@projetgrup.com>, 2018
+# Ertuğrul Güreş <ertugrulg@projetgrup.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
-"Last-Translator: Umur Akın <umura@projetgrup.com>, 2018\n"
+"Last-Translator: Ertuğrul Güreş <ertugrulg@projetgrup.com>, 2018\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -222,7 +223,7 @@ msgstr "Alıcılar"
#. module: payment
#: model:ir.ui.view,arch_db:payment.payment_icon_form_view
msgid "Acquirers list"
-msgstr ""
+msgstr "Alıcılar Listesi"
#. module: payment
#: model:ir.ui.view,arch_db:payment.acquirer_kanban
diff --git a/addons/payment/models/__init__.py b/addons/payment/models/__init__.py
index 3a1c7ce052a..ed704df85d1 100644
--- a/addons/payment/models/__init__.py
+++ b/addons/payment/models/__init__.py
@@ -3,3 +3,4 @@
from . import payment_acquirer
from . import res_partner
from . import account_payment
+from . import chart_template
diff --git a/addons/payment/models/chart_template.py b/addons/payment/models/chart_template.py
new file mode 100644
index 00000000000..515103316be
--- /dev/null
+++ b/addons/payment/models/chart_template.py
@@ -0,0 +1,14 @@
+# -*- coding: utf-8 -*-
+
+from odoo import api, fields, models, _
+
+
+class WizardMultiChartsAccounts(models.TransientModel):
+ _inherit = 'wizard.multi.charts.accounts'
+
+ @api.multi
+ def _create_bank_journals_from_o2m(self, company, acc_template_ref):
+ res = super(WizardMultiChartsAccounts, self)._create_bank_journals_from_o2m(company, acc_template_ref)
+
+ # Try to generate the missing journals
+ return res + self.env['payment.acquirer']._create_missing_journal_for_acquirers(company=company)
diff --git a/addons/payment/models/payment_acquirer.py b/addons/payment/models/payment_acquirer.py
index a67aea945d7..2d07a174a7e 100644
--- a/addons/payment/models/payment_acquirer.py
+++ b/addons/payment/models/payment_acquirer.py
@@ -9,6 +9,7 @@ from odoo import api, exceptions, fields, models, _
from odoo.tools import consteq, float_round, image_resize_images, image_resize_image, ustr
from odoo.addons.base.models import ir_module
from odoo.exceptions import ValidationError
+from odoo import api, SUPERUSER_ID
_logger = logging.getLogger(__name__)
@@ -21,6 +22,11 @@ def _partner_split_name(partner_name):
return [' '.join(partner_name.split()[:-1]), ' '.join(partner_name.split()[-1:])]
+def create_missing_journal_for_acquirers(cr, registry):
+ env = api.Environment(cr, SUPERUSER_ID, {})
+ env['payment.acquirer']._create_missing_journal_for_acquirers()
+
+
class PaymentAcquirer(models.Model):
""" Acquirer Model. Each specific acquirer can extend the model by adding
its own fields, using the acquirer_name as a prefix for the new fields.
@@ -52,6 +58,9 @@ class PaymentAcquirer(models.Model):
_description = 'Payment Acquirer'
_order = 'website_published desc, sequence, name'
+ def _get_default_view_template_id(self):
+ return self.env.ref('payment.default_acquirer_button', raise_if_not_found=False)
+
name = fields.Char('Name', required=True, translate=True)
description = fields.Html('Description')
sequence = fields.Integer('Sequence', default=10, help="Determine the display order")
@@ -62,7 +71,8 @@ class PaymentAcquirer(models.Model):
'res.company', 'Company',
default=lambda self: self.env.user.company_id.id, required=True)
view_template_id = fields.Many2one(
- 'ir.ui.view', 'Form Button Template', required=True)
+ 'ir.ui.view', 'Form Button Template', required=True,
+ default=_get_default_view_template_id)
registration_view_template_id = fields.Many2one(
'ir.ui.view', 'S2S Form Template', domain=[('type', '=', 'qweb')],
help="Template for method registration")
@@ -197,6 +207,58 @@ class PaymentAcquirer(models.Model):
"""
return dict(authorize=[], tokenize=[], fees=[])
+ @api.multi
+ def _prepare_account_journal_vals(self):
+ '''Prepare the values to create the acquirer's journal.
+ :return: a dictionary to create a account.journal record.
+ '''
+ self.ensure_one()
+ account_vals = self.env['account.journal']._prepare_liquidity_account(
+ self.name, self.company_id, None, 'bank')
+ account_vals['user_type_id'] = self.env.ref('account.data_account_type_current_assets').id
+ account_vals['reconcile'] = True
+ account = self.env['account.account'].create(account_vals)
+ return {
+ 'name': self.name,
+ 'code': self.name.upper(),
+ 'sequence': 999,
+ 'type': 'bank',
+ 'company_id': self.company_id.id,
+ 'default_debit_account_id': account.id,
+ 'default_credit_account_id': account.id,
+ # Show the journal on dashboard if the acquirer is published on the website.
+ 'show_on_dashboard': self.website_published,
+ # Don't show payment methods in the backend.
+ 'inbound_payment_method_ids': [],
+ 'outbound_payment_method_ids': [],
+ }
+
+ @api.model
+ def _create_missing_journal_for_acquirers(self, company=None):
+ '''Create the journal for active acquirers.
+ We want one journal per acquirer. However, we can't create them during the 'create' of the payment.acquirer
+ because every acquirers are defined on the 'payment' module but is active only when installing their own module
+ (e.g. payment_paypal for Paypal). We can't do that in such modules because we have no guarantee the chart template
+ is already installed.
+ '''
+ # Search for installed acquirers modules.
+ # If this method is triggered by a post_init_hook, the module is 'to install'.
+ # If the trigger comes from the chart template wizard, the modules are already installed.
+ acquirer_modules = self.env['ir.module.module'].search(
+ [('name', 'like', 'payment_%'), ('state', 'in', ('to install', 'installed'))])
+ acquirer_names = [a.name.split('_')[1] for a in acquirer_modules]
+
+ # Search for acquirers having no journal
+ company = company or self.env.user.company_id
+ acquirers = self.env['payment.acquirer'].search(
+ [('provider', 'in', acquirer_names), ('journal_id', '=', False), ('company_id', '=', company.id)])
+
+ journals = self.env['account.journal']
+ for acquirer in acquirers.filtered(lambda l: not l.journal_id and l.company_id.chart_template_id):
+ acquirer.journal_id = self.env['account.journal'].create(acquirer._prepare_account_journal_vals())
+ journals += acquirer.journal_id
+ return journals
+
@api.model
def create(self, vals):
image_resize_images(vals)
@@ -209,7 +271,13 @@ class PaymentAcquirer(models.Model):
@api.multi
def toggle_website_published(self):
- self.write({'website_published': not self.website_published})
+ ''' When clicking on the website publish toggle button, the website_published is reversed and
+ the acquirer journal is set or not in favorite on the dashboard.
+ '''
+ self.ensure_one()
+ self.website_published = not self.website_published
+ if self.journal_id:
+ self.journal_id.show_on_dashboard = self.website_published
return True
@api.multi
diff --git a/addons/payment/views/payment_views.xml b/addons/payment/views/payment_views.xml
index e6681c37ca6..40a5e3e931a 100644
--- a/addons/payment/views/payment_views.xml
+++ b/addons/payment/views/payment_views.xml
@@ -81,7 +81,7 @@
</page>
<page string="Configuration">
<group name="acquirer_config">
- <field name="journal_id" context="{'default_type': 'bank'}" required="1"/>
+ <field name="journal_id" context="{'default_type': 'bank'}"/>
<field name="capture_manually" attrs="{'invisible': [('authorize_implemented', '=', False)]}"/>
<field name="save_token" widget="radio" attrs="{'invisible': ['|', ('token_implemented', '=', False), ('payment_flow', '=', 's2s')]}"/>
<field name="fees_active" attrs="{'invisible': [('fees_implemented', '=', False)]}"/>
@@ -113,7 +113,7 @@
</div>
<field name="registration_view_template_id" groups="base.group_no_one"/>
<field name="payment_icon_ids" widget="many2many_tags"/>
- <field name="payment_flow" widget="radio"/>
+ <field name="payment_flow" widget="radio" attrs="{'invisible': [('token_implemented', '=', False)]}"/>
</group>
</page>
</notebook>
diff --git a/addons/payment_adyen/__init__.py b/addons/payment_adyen/__init__.py
index 8c67f893b37..f2ff55f0433 100644
--- a/addons/payment_adyen/__init__.py
+++ b/addons/payment_adyen/__init__.py
@@ -3,3 +3,4 @@
from . import models
from . import controllers
+from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers
diff --git a/addons/payment_adyen/__manifest__.py b/addons/payment_adyen/__manifest__.py
index 1e26a8808ca..8b04a9834e2 100644
--- a/addons/payment_adyen/__manifest__.py
+++ b/addons/payment_adyen/__manifest__.py
@@ -13,4 +13,5 @@
'data/payment_acquirer_data.xml',
],
'installable': True,
+ 'post_init_hook': 'create_missing_journal_for_acquirers',
}
diff --git a/addons/payment_authorize/__init__.py b/addons/payment_authorize/__init__.py
index 8c67f893b37..f2ff55f0433 100644
--- a/addons/payment_authorize/__init__.py
+++ b/addons/payment_authorize/__init__.py
@@ -3,3 +3,4 @@
from . import models
from . import controllers
+from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers
diff --git a/addons/payment_authorize/__manifest__.py b/addons/payment_authorize/__manifest__.py
index 4a8eafa8b73..af6c1e946b9 100644
--- a/addons/payment_authorize/__manifest__.py
+++ b/addons/payment_authorize/__manifest__.py
@@ -13,4 +13,5 @@
'data/payment_acquirer_data.xml',
],
'installable': True,
+ 'post_init_hook': 'create_missing_journal_for_acquirers',
}
diff --git a/addons/payment_buckaroo/__init__.py b/addons/payment_buckaroo/__init__.py
index 8c67f893b37..f2ff55f0433 100644
--- a/addons/payment_buckaroo/__init__.py
+++ b/addons/payment_buckaroo/__init__.py
@@ -3,3 +3,4 @@
from . import models
from . import controllers
+from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers
diff --git a/addons/payment_buckaroo/__manifest__.py b/addons/payment_buckaroo/__manifest__.py
index 3e56a451c52..f08e9152473 100644
--- a/addons/payment_buckaroo/__manifest__.py
+++ b/addons/payment_buckaroo/__manifest__.py
@@ -13,4 +13,5 @@
'data/payment_acquirer_data.xml',
],
'installable': True,
+ 'post_init_hook': 'create_missing_journal_for_acquirers',
}
diff --git a/addons/payment_ogone/__init__.py b/addons/payment_ogone/__init__.py
index 8c67f893b37..f2ff55f0433 100644
--- a/addons/payment_ogone/__init__.py
+++ b/addons/payment_ogone/__init__.py
@@ -3,3 +3,4 @@
from . import models
from . import controllers
+from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers
diff --git a/addons/payment_ogone/__manifest__.py b/addons/payment_ogone/__manifest__.py
index 1fd1ee9c55b..3866d1e115b 100644
--- a/addons/payment_ogone/__manifest__.py
+++ b/addons/payment_ogone/__manifest__.py
@@ -13,4 +13,5 @@
'data/payment_acquirer_data.xml',
],
'installable': True,
+ 'post_init_hook': 'create_missing_journal_for_acquirers',
}
diff --git a/addons/payment_ogone/i18n/tr.po b/addons/payment_ogone/i18n/tr.po
index 62d6105cf8c..0a5ed6aecde 100644
--- a/addons/payment_ogone/i18n/tr.po
+++ b/addons/payment_ogone/i18n/tr.po
@@ -8,13 +8,14 @@
# Ediz Duman <neps1192@gmail.com>, 2017
# Murat Kaplan <muratk@projetgrup.com>, 2017
# Umur Akın <umura@projetgrup.com>, 2018
+# Ertuğrul Güreş <ertugrulg@projetgrup.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
-"Last-Translator: Umur Akın <umura@projetgrup.com>, 2018\n"
+"Last-Translator: Ertuğrul Güreş <ertugrulg@projetgrup.com>, 2018\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -47,7 +48,7 @@ msgstr "API Kullanıcı Şifresi"
#. module: payment_ogone
#: model:ir.model.fields,field_description:payment_ogone.field_payment_acquirer__ogone_alias_usage
msgid "Alias Usage"
-msgstr ""
+msgstr "Alias ​​Kullanımı"
#. module: payment_ogone
#: model:ir.ui.view,arch_db:payment_ogone.ogone_s2s_form
diff --git a/addons/payment_paypal/__init__.py b/addons/payment_paypal/__init__.py
index 8c67f893b37..f2ff55f0433 100644
--- a/addons/payment_paypal/__init__.py
+++ b/addons/payment_paypal/__init__.py
@@ -3,3 +3,4 @@
from . import models
from . import controllers
+from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers
diff --git a/addons/payment_paypal/__manifest__.py b/addons/payment_paypal/__manifest__.py
index 352b130e051..bf2e9e90b51 100644
--- a/addons/payment_paypal/__manifest__.py
+++ b/addons/payment_paypal/__manifest__.py
@@ -13,4 +13,5 @@
'data/payment_acquirer_data.xml',
],
'installable': True,
+ 'post_init_hook': 'create_missing_journal_for_acquirers',
}
diff --git a/addons/payment_payumoney/__init__.py b/addons/payment_payumoney/__init__.py
index 8c67f893b37..f2ff55f0433 100644
--- a/addons/payment_payumoney/__init__.py
+++ b/addons/payment_payumoney/__init__.py
@@ -3,3 +3,4 @@
from . import models
from . import controllers
+from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers
diff --git a/addons/payment_payumoney/__manifest__.py b/addons/payment_payumoney/__manifest__.py
index 794ba6b6de1..66f83456fcb 100644
--- a/addons/payment_payumoney/__manifest__.py
+++ b/addons/payment_payumoney/__manifest__.py
@@ -16,4 +16,5 @@
'views/payment_payumoney_templates.xml',
'data/payment_acquirer_data.xml',
],
+ 'post_init_hook': 'create_missing_journal_for_acquirers',
}
diff --git a/addons/payment_sips/__init__.py b/addons/payment_sips/__init__.py
index f7209b17100..c7d74c9c782 100644
--- a/addons/payment_sips/__init__.py
+++ b/addons/payment_sips/__init__.py
@@ -1,2 +1,3 @@
from . import models
from . import controllers
+from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers
diff --git a/addons/payment_sips/__manifest__.py b/addons/payment_sips/__manifest__.py
index 6039f962009..2764807c5ea 100644
--- a/addons/payment_sips/__manifest__.py
+++ b/addons/payment_sips/__manifest__.py
@@ -20,4 +20,5 @@ payments acquirer using Worldline SIPS.""",
'data/payment_acquirer_data.xml',
],
'installable': True,
+ 'post_init_hook': 'create_missing_journal_for_acquirers',
}
diff --git a/addons/payment_stripe/__init__.py b/addons/payment_stripe/__init__.py
index 8c67f893b37..f2ff55f0433 100644
--- a/addons/payment_stripe/__init__.py
+++ b/addons/payment_stripe/__init__.py
@@ -3,3 +3,4 @@
from . import models
from . import controllers
+from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers
diff --git a/addons/payment_stripe/__manifest__.py b/addons/payment_stripe/__manifest__.py
index 6eb664791cb..247fe74859b 100644
--- a/addons/payment_stripe/__manifest__.py
+++ b/addons/payment_stripe/__manifest__.py
@@ -14,4 +14,5 @@
],
'images': ['static/description/icon.png'],
'installable': True,
+ 'post_init_hook': 'create_missing_journal_for_acquirers',
}
diff --git a/addons/payment_transfer/__init__.py b/addons/payment_transfer/__init__.py
index 8c67f893b37..f2ff55f0433 100644
--- a/addons/payment_transfer/__init__.py
+++ b/addons/payment_transfer/__init__.py
@@ -3,3 +3,4 @@
from . import models
from . import controllers
+from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers
diff --git a/addons/payment_transfer/__manifest__.py b/addons/payment_transfer/__manifest__.py
index 9f8704467dc..530fe49ede4 100644
--- a/addons/payment_transfer/__manifest__.py
+++ b/addons/payment_transfer/__manifest__.py
@@ -14,4 +14,5 @@
],
'installable': True,
'auto_install': True,
+ 'post_init_hook': 'create_missing_journal_for_acquirers',
}
diff --git a/addons/payment_transfer/models/payment.py b/addons/payment_transfer/models/payment.py
index 00a34ac0ad4..18c74d2246d 100644
--- a/addons/payment_transfer/models/payment.py
+++ b/addons/payment_transfer/models/payment.py
@@ -15,6 +15,19 @@ class TransferPaymentAcquirer(models.Model):
provider = fields.Selection(selection_add=[('transfer', 'Wire Transfer')], default='transfer')
+ @api.model
+ def _create_missing_journal_for_acquirers(self, company=None):
+ # By default, the wire transfer method uses the default Bank journal.
+ company = company or self.env.user.company_id
+ acquirers = self.env['payment.acquirer'].search(
+ [('provider', '=', 'transfer'), ('journal_id', '=', False), ('company_id', '=', company.id)])
+
+ bank_journal = self.env['account.journal'].search(
+ [('type', '=', 'bank'), ('company_id', '=', company.id)], limit=1)
+ if bank_journal:
+ acquirers.write({'journal_id': bank_journal.id})
+ return super(TransferPaymentAcquirer, self)._create_missing_journal_for_acquirers(company=company)
+
def transfer_get_form_action_url(self):
return '/payment/transfer/feedback'
diff --git a/addons/point_of_sale/i18n/nl.po b/addons/point_of_sale/i18n/nl.po
index 31e32cc7815..85cd5756e51 100644
--- a/addons/point_of_sale/i18n/nl.po
+++ b/addons/point_of_sale/i18n/nl.po
@@ -383,7 +383,7 @@ msgstr "Voeg een aangepaste tekst doe aan de hoofding en het voeteinde"
#. module: point_of_sale
#: model:ir.actions.act_window,help:point_of_sale.action_account_journal_form
msgid "Add a new payment method"
-msgstr ""
+msgstr "Voeg een nieuwe betaling toe"
#. module: point_of_sale
#. openerp-web
@@ -1259,7 +1259,7 @@ msgid ""
" devices already benefit from a native keyboard."
msgstr ""
"Schakel deze optie niet in als u bestellingen via smartphones of tablets "
-"opneemt. Dergelijke apparaten beschikken al van een eigen toetsenbord."
+"opneemt. Dergelijke apparaten beschikken al over een eigen toetsenbord."
#. module: point_of_sale
#: model:ir.ui.view,arch_db:point_of_sale.view_pos_order_filter
diff --git a/addons/point_of_sale/i18n/tr.po b/addons/point_of_sale/i18n/tr.po
index 555c69377cb..4b4e51b656a 100644
--- a/addons/point_of_sale/i18n/tr.po
+++ b/addons/point_of_sale/i18n/tr.po
@@ -4213,6 +4213,8 @@ msgstr "Şirketiniz için bir logo ya da bir layout ayarlamalısınız."
#, python-format
msgid "You have to set your reports's header and footer layout."
msgstr ""
+"Raporlarınız için üst bilgi ve alt bilgi satırlarını ayalamanız "
+"gerekmektedir."
#. module: point_of_sale
#: model:ir.actions.act_window,help:point_of_sale.product_product_action
diff --git a/addons/portal/i18n/tr.po b/addons/portal/i18n/tr.po
index fff747eca1c..6ea7eb0fe95 100644
--- a/addons/portal/i18n/tr.po
+++ b/addons/portal/i18n/tr.po
@@ -13,13 +13,14 @@
# Saban Yildiz <sabany@projetgrup.com>, 2017
# Güven YILMAZ <guvenyilmaz@outlook.com.tr>, 2017
# Umur Akın <umura@projetgrup.com>, 2018
+# Ertuğrul Güreş <ertugrulg@projetgrup.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:11+0000\n"
"PO-Revision-Date: 2018-03-22 14:11+0000\n"
-"Last-Translator: Umur Akın <umura@projetgrup.com>, 2018\n"
+"Last-Translator: Ertuğrul Güreş <ertugrulg@projetgrup.com>, 2018\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -102,7 +103,7 @@ msgstr "Temizle"
#: code:addons/portal/static/src/xml/portal_signature.xml:27
#, python-format
msgid "Click here to see your document."
-msgstr ""
+msgstr "Dokümanınızı görmek için buraya tıklayınız."
#. module: portal
#: model:ir.ui.view,arch_db:portal.portal_my_details
diff --git a/addons/pos_mercury/i18n/nl.po b/addons/pos_mercury/i18n/nl.po
index 6bd7f608e51..ade5d5a3a94 100644
--- a/addons/pos_mercury/i18n/nl.po
+++ b/addons/pos_mercury/i18n/nl.po
@@ -363,7 +363,7 @@ msgstr "Kassa orders"
#: code:addons/pos_mercury/static/src/js/pos_mercury.js:345
#, python-format
msgid "Refunds not supported"
-msgstr ""
+msgstr "Terugbetalingen niet ondersteund"
#. module: pos_mercury
#. openerp-web
diff --git a/addons/pos_restaurant/i18n/nl.po b/addons/pos_restaurant/i18n/nl.po
index b77943a4977..38755445085 100644
--- a/addons/pos_restaurant/i18n/nl.po
+++ b/addons/pos_restaurant/i18n/nl.po
@@ -381,7 +381,7 @@ msgstr "Order"
#. module: pos_restaurant
#: model:ir.model.fields,field_description:pos_restaurant.field_pos_config__is_order_printer
msgid "Order Printer"
-msgstr ""
+msgstr "Order Printer"
#. module: pos_restaurant
#: model:ir.actions.act_window,name:pos_restaurant.action_restaurant_printer_form
diff --git a/addons/pos_sale/i18n/tr.po b/addons/pos_sale/i18n/tr.po
index 053faa7efc2..f78f8804d8b 100644
--- a/addons/pos_sale/i18n/tr.po
+++ b/addons/pos_sale/i18n/tr.po
@@ -6,13 +6,14 @@
# Güven YILMAZ <guvenyilmaz@outlook.com.tr>, 2017
# Murat Kaplan <muratk@projetgrup.com>, 2017
# Martin Trigaux, 2017
+# Ertuğrul Güreş <ertugrulg@projetgrup.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:09+0000\n"
"PO-Revision-Date: 2018-03-22 14:09+0000\n"
-"Last-Translator: Martin Trigaux, 2017\n"
+"Last-Translator: Ertuğrul Güreş <ertugrulg@projetgrup.com>, 2018\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -23,7 +24,7 @@ msgstr ""
#. module: pos_sale
#: model:ir.model,name:pos_sale.model_report_all_channels_sales
msgid "All sales orders grouped by sales channels"
-msgstr ""
+msgstr "Tüm satış siparişleri satış kanalları tarafından gruplandırıldı"
#. module: pos_sale
#: code:addons/pos_sale/models/crm_team.py:103
diff --git a/addons/product/i18n/tr.po b/addons/product/i18n/tr.po
index b0d08e45a04..8135c6aed69 100644
--- a/addons/product/i18n/tr.po
+++ b/addons/product/i18n/tr.po
@@ -1900,6 +1900,8 @@ msgid ""
"This vendor's product code will be used when printing a request for "
"quotation. Keep empty to use the internal one."
msgstr ""
+"Bu tedarikçi ürün kodu bir teklif ihtiyacı için yazdırılırken "
+"kullanılacaktır. İçini kullanmak için boş tutunuz."
#. module: product
#: model:ir.model.fields,help:product.field_product_supplierinfo__product_name
@@ -1907,6 +1909,8 @@ msgid ""
"This vendor's product name will be used when printing a request for "
"quotation. Keep empty to use the internal one."
msgstr ""
+"Bu tedarikçi ürün adı, bir teklif ihtiyacı için yazdırılırken "
+"kullanılacaktır. İçini kullanmak için boş tutunuz."
#. module: product
#: model:ir.ui.view,arch_db:product.product_template_search_view
@@ -2019,7 +2023,7 @@ msgstr "Varyant Fiyatları"
#: model:ir.model.fields,field_description:product.field_product_product__variant_seller_ids
#: model:ir.model.fields,field_description:product.field_product_template__variant_seller_ids
msgid "Variant Seller"
-msgstr ""
+msgstr "Satıcı Varyantı"
#. module: product
#: model:ir.actions.act_window,name:product.product_attribute_value_action
@@ -2154,6 +2158,8 @@ msgstr "Şirketiniz için bir logo ya da bir layout ayarlamalısınız."
#, python-format
msgid "You have to set your reports's header and footer layout."
msgstr ""
+"Raporlarınız için üst bilgi ve alt bilgi satırlarını ayalamanız "
+"gerekmektedir."
#. module: product
#: model:ir.actions.act_window,help:product.product_uom_form_action
@@ -2161,6 +2167,8 @@ msgid ""
"You must define a conversion rate between several Units of\n"
" Measure within the same category."
msgstr ""
+"Aynı kategori dahilinde bazı Ölçü Birimleri arasında değişim oranı "
+"tanımlanmalı."
#. module: product
#: model:ir.actions.act_window,help:product.product_normal_action
@@ -2187,6 +2195,8 @@ msgid ""
"You must define at least one product category in order to be able to create "
"products."
msgstr ""
+"Ürünleri oluşturabilmek için en az bir ürün kategorisi tanımlamanız "
+"gerekmektedir."
#. module: product
#: model:product.uom,name:product.product_uom_cm
@@ -2206,7 +2216,7 @@ msgstr "decimal.precision"
#. module: product
#: model:ir.ui.view,arch_db:product.product_category_form_view
msgid "e.g. Lamps"
-msgstr ""
+msgstr "Örn. Aydınlatma"
#. module: product
#: model:ir.ui.view,arch_db:product.product_variant_easy_edit_view
@@ -2216,7 +2226,7 @@ msgstr ""
#. module: product
#: model:ir.ui.view,arch_db:product.product_pricelist_view
msgid "e.g. USD Retailers"
-msgstr ""
+msgstr "Örn. Dolar Perakendeceliği"
#. module: product
#: model:ir.ui.view,arch_db:product.product_uom_form_view
diff --git a/addons/product/models/product.py b/addons/product/models/product.py
index c2ada1fe7b6..dd0f2a4817a 100644
--- a/addons/product/models/product.py
+++ b/addons/product/models/product.py
@@ -228,9 +228,9 @@ class ProductProduct(models.Model):
for supplier_info in self.seller_ids:
if supplier_info.name.id == self._context.get('partner_id'):
product_name = supplier_info.product_name or self.default_code
+ self.partner_ref = '%s%s' % (self.code and '[%s] ' % self.code or '', product_name)
else:
- product_name = self.name
- self.partner_ref = '%s%s' % (self.code and '[%s] ' % self.code or '', product_name)
+ self.partner_ref = self.name_get()[0][1]
@api.one
@api.depends('image_variant', 'product_tmpl_id.image')
@@ -430,7 +430,12 @@ class ProductProduct(models.Model):
limit2 = (limit - len(products)) if limit else False
products += self.search(args + [('name', operator, name), ('id', 'not in', products.ids)], limit=limit2)
elif not products and operator in expression.NEGATIVE_TERM_OPERATORS:
- products = self.search(args + ['&', ('default_code', operator, name), ('name', operator, name)], limit=limit)
+ domain = expression.OR([
+ ['&', ('default_code', operator, name), ('name', operator, name)],
+ ['&', ('default_code', '=', False), ('name', operator, name)],
+ ])
+ domain = expression.AND([args, domain])
+ products = self.search(domain, limit=limit)
if not products and operator in positive_operators:
ptrn = re.compile('(\[(.*?)\])')
res = ptrn.search(name)
diff --git a/addons/product/tests/test_variants.py b/addons/product/tests/test_variants.py
index 7917a0d4a2b..804bbc55c95 100644
--- a/addons/product/tests/test_variants.py
+++ b/addons/product/tests/test_variants.py
@@ -40,6 +40,15 @@ class TestVariantsSearch(TransactionCase):
self.assertIn(self.product_shirt_template, search_value,
'Shirt should be found searching L')
+ def test_name_search(self):
+ self.product_slip_template = self.env['product.template'].create({
+ 'name': 'Slip',
+ })
+ res = self.env['product.product'].name_search('Shirt', [], 'not ilike', None)
+ res_ids = [r[0] for r in res]
+ self.assertIn(self.product_slip_template.product_variant_ids.id, res_ids,
+ 'Slip should be found searching \'not ilike\'')
+
class TestVariants(common.TestProductCommon):
diff --git a/addons/product_expiry/i18n/tr.po b/addons/product_expiry/i18n/tr.po
index 750c0e21302..450843980a7 100644
--- a/addons/product_expiry/i18n/tr.po
+++ b/addons/product_expiry/i18n/tr.po
@@ -6,13 +6,14 @@
# Martin Trigaux, 2017
# Murat Kaplan <muratk@projetgrup.com>, 2017
# Fırat Kaya <firat.kaya@mechsoft.com.tr>, 2017
+# Umur Akın <umura@projetgrup.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
-"Last-Translator: Fırat Kaya <firat.kaya@mechsoft.com.tr>, 2017\n"
+"Last-Translator: Umur Akın <umura@projetgrup.com>, 2018\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -56,6 +57,8 @@ msgid ""
"Date to determine the expired lots and serial numbers using the filter "
"\"Expiration Alerts\"."
msgstr ""
+"Günü geçmiş lotları ve seri numaralarını, \"Son Kullanma Uyarıları\" "
+"filtresini kullanarak belirleme tarihi."
#. module: product_expiry
#: model:ir.ui.view,arch_db:product_expiry.view_move_form_expiry
@@ -85,6 +88,7 @@ msgstr "Lot/Seri"
msgid ""
"Number of days before an alert should be raised on the lot/serial number."
msgstr ""
+"Bir uyarıdan önceki günlerin sayısı lot/seri numaralarında yükseltilmeli."
#. module: product_expiry
#: model:ir.model.fields,help:product_expiry.field_product_product__life_time
@@ -93,6 +97,8 @@ msgid ""
"Number of days before the goods may become dangerous and must not be "
"consumed. It will be computed on the lot/serial number."
msgstr ""
+"Mallar tehlikeli hale gelmeden ve tüketilmek zorunda olmadan önceki günlerin"
+" sayısı. Bu sayı lot/seri numaralarından hesaplanacaktır."
#. module: product_expiry
#: model:ir.model.fields,help:product_expiry.field_product_product__removal_time
@@ -119,7 +125,7 @@ msgstr "Ürün Uyarı Zamanı"
#. module: product_expiry
#: model:ir.model.fields,field_description:product_expiry.field_stock_production_lot__product_expiry_alert
msgid "Product Expiry Alert"
-msgstr ""
+msgstr "Ürün Son Kullanım Uyarısı"
#. module: product_expiry
#: model:ir.model.fields,field_description:product_expiry.field_product_product__life_time
@@ -158,7 +164,7 @@ msgstr "Kaldırma Tarihi"
#. module: product_expiry
#: model:ir.model.fields,help:product_expiry.field_stock_production_lot__product_expiry_alert
msgid "The Alert Date has been reached."
-msgstr ""
+msgstr "Uyarı Tarihine ulaşıldı."
#. module: product_expiry
#: model:ir.model.fields,help:product_expiry.field_stock_production_lot__life_date
diff --git a/addons/project/i18n/nl.po b/addons/project/i18n/nl.po
index 926376cb8d2..8b4fbdc2818 100644
--- a/addons/project/i18n/nl.po
+++ b/addons/project/i18n/nl.po
@@ -509,7 +509,7 @@ msgstr "Geavanceerd"
#: code:addons/project/static/src/js/project_task_kanban_examples.js:34
#, python-format
msgid "Agile"
-msgstr ""
+msgstr "Agile"
#. module: project
#: model:ir.model.fields,field_description:project.field_project_project__alias_id
diff --git a/addons/project/i18n/tr.po b/addons/project/i18n/tr.po
index 72e797d434a..4e4795b6648 100644
--- a/addons/project/i18n/tr.po
+++ b/addons/project/i18n/tr.po
@@ -218,12 +218,12 @@ msgstr "Görev #"
#. module: project
#: model:ir.model.fields,field_description:project.field_report_project_task_user__working_days_open
msgid "# Working Days to Assign"
-msgstr ""
+msgstr "# Atanacak İş Günleri"
#. module: project
#: model:ir.model.fields,field_description:project.field_report_project_task_user__working_days_close
msgid "# Working Days to Close"
-msgstr ""
+msgstr "# Yaklaşan İş Günleri"
#. module: project
#: model:ir.model.fields,field_description:project.field_report_project_task_user__nbr
@@ -501,7 +501,7 @@ msgstr "Arşiv"
#. module: project
#: model:ir.ui.view,arch_db:project.view_task_form2
msgid "Assign to Me"
-msgstr ""
+msgstr "Bana Ata"
#. module: project
#: model:ir.model.fields,field_description:project.field_report_project_task_user__date_start
@@ -554,7 +554,7 @@ msgstr "Ek"
#. module: project
#: model:ir.model.fields,help:project.field_project_task__attachment_ids
msgid "Attachment that don't come from message."
-msgstr ""
+msgstr "Mesajdan gelmeyen ek."
#. module: project
#: code:addons/project/models/project.py:119
@@ -767,7 +767,7 @@ msgstr ""
#. module: project
#: model:ir.model.fields,field_description:project.field_project_task__displayed_image_id
msgid "Cover Image"
-msgstr ""
+msgstr "Kapak Resmi"
#. module: project
#: model:ir.ui.view,arch_db:project.project_project_view_form_simplified
@@ -803,7 +803,7 @@ msgstr ""
#. module: project
#: model:ir.actions.act_window,help:project.action_view_task
msgid "Create a new task"
-msgstr ""
+msgstr "Yeni görev oluştur"
#. module: project
#: model:ir.model.fields,field_description:project.field_project_project__create_uid
@@ -1110,6 +1110,8 @@ msgid ""
"Explanation text to help users using the star on tasks or issues in this "
"stage."
msgstr ""
+"Açıklama metni, bu aşamadaki görev ya da olaylardaki yıldızı kullanan "
+"kullanıcılara yardım eder."
#. module: project
#: model:ir.ui.view,arch_db:project.view_task_project_user_search
@@ -1210,17 +1212,17 @@ msgstr "Yeşil"
#. module: project
#: model:ir.model.fields,field_description:project.field_project_task_type__legend_done
msgid "Green Kanban Label"
-msgstr ""
+msgstr "Yeşil Kanban Etiketi"
#. module: project
#: selection:project.task,kanban_state:0
msgid "Grey"
-msgstr ""
+msgstr "Gri"
#. module: project
#: model:ir.model.fields,field_description:project.field_project_task_type__legend_normal
msgid "Grey Kanban Label"
-msgstr ""
+msgstr "Gri Kanban Etiketi"
#. module: project
#: model:ir.model.fields,field_description:project.field_project_project__group_id
@@ -1589,7 +1591,7 @@ msgstr "Favorilerim"
#. module: project
#: model:ir.ui.view,arch_db:project.view_task_search_form
msgid "My Followed Tasks"
-msgstr ""
+msgstr "Takip Ettiğim Görevler"
#. module: project
#: model:ir.actions.act_window,name:project.project_task_action_activity
@@ -1612,7 +1614,7 @@ msgstr "Adı"
#. module: project
#: model:ir.ui.view,arch_db:project.edit_project
msgid "Name of the tasks :"
-msgstr ""
+msgstr "Görevlerin adı:"
#. module: project
#. openerp-web
@@ -1954,7 +1956,7 @@ msgstr "Proje görevleri"
#. module: project
#: model:ir.actions.server,name:project.ir_actions_server_project_sample
msgid "Project: Activate Sample Project"
-msgstr ""
+msgstr "Proje: Örnek Projeyi Etkinleştir"
#. module: project
#: model:ir.actions.server,name:project.ir_cron_rating_project_ir_actions_server
@@ -2065,7 +2067,7 @@ msgstr "Konu Kayıt ID"
#. module: project
#: model:ir.ui.view,arch_db:project.view_task_kanban
msgid "Record's Colour"
-msgstr ""
+msgstr "Kayıt Rengi"
#. module: project
#: selection:project.task,kanban_state:0
@@ -2075,7 +2077,7 @@ msgstr "Kırmızı"
#. module: project
#: model:ir.model.fields,field_description:project.field_project_task_type__legend_blocked
msgid "Red Kanban Label"
-msgstr ""
+msgstr "Kırmızı Kanban Etiketi"
#. module: project
#: model:ir.ui.view,arch_db:project.portal_my_tasks
@@ -2183,7 +2185,7 @@ msgstr "Mesajlarda Ara"
#: code:addons/project/controllers/portal.py:95
#, python-format
msgid "Search in Stages"
-msgstr ""
+msgstr "Aşamalarda Ara"
#. module: project
#. openerp-web
@@ -2250,7 +2252,7 @@ msgstr ""
#. module: project
#: model:ir.ui.view,arch_db:project.res_config_settings_view_form
msgid "Split your tasks to organize your work into sub-milestones"
-msgstr ""
+msgstr "Görevinizi ayırarak alt-görevler halinde işinizi organize edin."
#. module: project
#: code:addons/project/controllers/portal.py:85
@@ -2297,7 +2299,7 @@ msgstr "Yıldızlı"
#. module: project
#: model:ir.model.fields,field_description:project.field_project_task_type__legend_priority
msgid "Starred Explanation"
-msgstr ""
+msgstr "Yıldızlı Açıklama"
#. module: project
#: model:ir.model.fields,field_description:project.field_project_project__date_start
@@ -2646,7 +2648,7 @@ msgstr "Görev Zaman Tahmini"
#. module: project
#: model:ir.ui.view,arch_db:project.res_config_settings_view_form
msgid "Time Management"
-msgstr ""
+msgstr "Zaman Yönetimi"
#. module: project
#: model:ir.ui.view,arch_db:project.edit_project
@@ -2710,7 +2712,7 @@ msgstr "Görevlerdeki müşteri memnuniyetini takip edin"
#. module: project
#: model:ir.ui.view,arch_db:project.res_config_settings_view_form
msgid "Track time spent on projects and tasks"
-msgstr ""
+msgstr "Projelerde ve görevlerde harcanan zamanı izleyin."
#. module: project
#: selection:project.project,rating_status_period:0
@@ -2755,7 +2757,7 @@ msgstr "Görevleri şu şekilde kullanın:"
#. module: project
#: model:ir.ui.view,arch_db:project.res_config_settings_view_form
msgid "Use collaborative rich text pads on tasks"
-msgstr ""
+msgstr "Görevlerde işbirlikçi zengin metin pedleri kullanın"
#. module: project
#. openerp-web
@@ -2845,32 +2847,32 @@ msgstr "Çalışma Süresi"
#. module: project
#: model:ir.ui.view,arch_db:project.view_task_form2
msgid "Working Time to Assign"
-msgstr ""
+msgstr "Atanan Çalışma Süresi"
#. module: project
#: model:ir.ui.view,arch_db:project.view_task_form2
msgid "Working Time to Close"
-msgstr ""
+msgstr "Kapatmak İçin Çalışma Süresi"
#. module: project
#: model:ir.model.fields,field_description:project.field_project_task__working_days_open
msgid "Working days to assign"
-msgstr ""
+msgstr "Atanan Çalışma Günleri"
#. module: project
#: model:ir.model.fields,field_description:project.field_project_task__working_days_close
msgid "Working days to close"
-msgstr ""
+msgstr "Kapatmak için çalışma günleri"
#. module: project
#: model:ir.model.fields,field_description:project.field_project_task__working_hours_open
msgid "Working hours to assign"
-msgstr ""
+msgstr "Atanan Çalışma Saatleri"
#. module: project
#: model:ir.model.fields,field_description:project.field_project_task__working_hours_close
msgid "Working hours to close"
-msgstr ""
+msgstr "Kapatmak için çalışma saatleri"
#. module: project
#: model:ir.filters,name:project.filter_task_report_workload
@@ -2880,7 +2882,7 @@ msgstr "İş Yükü"
#. module: project
#: model:ir.model.fields,field_description:project.field_project_task__write_date
msgid "Write Date"
-msgstr ""
+msgstr "Yazma Tarihi"
#. module: project
#. openerp-web
diff --git a/addons/project_timesheet_holidays/i18n/tr.po b/addons/project_timesheet_holidays/i18n/tr.po
index f1b0d00972f..3b662680603 100644
--- a/addons/project_timesheet_holidays/i18n/tr.po
+++ b/addons/project_timesheet_holidays/i18n/tr.po
@@ -5,15 +5,16 @@
# Translators:
# Murat Kaplan <muratk@projetgrup.com>, 2017
# Ediz Duman <neps1192@gmail.com>, 2017
-# Martin Trigaux <mat@odoo.com>, 2017
+# Martin Trigaux, 2017
# Levent Karakaş <levent@mektup.at>, 2017
+# Umur Akın <umura@projetgrup.com>, 2018
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-20 09:53+0000\n"
-"PO-Revision-Date: 2017-09-20 09:53+0000\n"
-"Last-Translator: Levent Karakaş <levent@mektup.at>, 2017\n"
+"POT-Creation-Date: 2018-03-22 14:10+0000\n"
+"PO-Revision-Date: 2018-03-22 14:10+0000\n"
+"Last-Translator: Umur Akın <umura@projetgrup.com>, 2018\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -27,7 +28,7 @@ msgid "Analytic Line"
msgstr "Analitik Satırı"
#. module: project_timesheet_holidays
-#: model:ir.model.fields,field_description:project_timesheet_holidays.field_hr_holidays_timesheet_ids
+#: model:ir.model.fields,field_description:project_timesheet_holidays.field_hr_leave__timesheet_ids
msgid "Analytic Lines"
msgstr "Analitik Satırları"
@@ -37,63 +38,67 @@ msgid "Companies"
msgstr "Şirketler"
#. module: project_timesheet_holidays
-#: model:ir.model.fields,help:project_timesheet_holidays.field_res_company_leave_timesheet_project_id
-#: model:ir.model.fields,help:project_timesheet_holidays.field_res_config_settings_leave_timesheet_project_id
+#: model:ir.model.fields,help:project_timesheet_holidays.field_res_company__leave_timesheet_project_id
+#: model:ir.model.fields,help:project_timesheet_holidays.field_res_config_settings__leave_timesheet_project_id
msgid "Default project value for timesheet generated from leave type."
msgstr ""
+"Ayrılma türünden oluşturulan zaman çizelgesi için varsayılan proje değeri."
#. module: project_timesheet_holidays
-#: code:addons/project_timesheet_holidays/models/hr_holidays.py:30
+#: code:addons/project_timesheet_holidays/models/hr_holidays.py:38
#, python-format
msgid ""
"For the leaves to generate timesheet, the internal project and task are "
"requried."
msgstr ""
+"Ayrılmalar için zaman çizelgesi, iç proje ve görev oluşturmak gereklidir."
#. module: project_timesheet_holidays
-#: model:ir.model.fields,field_description:project_timesheet_holidays.field_hr_holidays_status_timesheet_generate
+#: model:ir.model.fields,field_description:project_timesheet_holidays.field_hr_leave_type__timesheet_generate
msgid "Generate Timesheet"
-msgstr ""
+msgstr "Zaman Çizelgesi Oluştur"
#. module: project_timesheet_holidays
-#: model:ir.model.fields,help:project_timesheet_holidays.field_hr_holidays_status_timesheet_generate
+#: model:ir.model.fields,help:project_timesheet_holidays.field_hr_leave_type__timesheet_generate
msgid ""
"If checked, when validating a leave, timesheet will be generated in the "
"Vacation Project of the company."
msgstr ""
+"Eğer işaretli ise, bir ayrılma onaylandığında, şirketin İzin Projesi içinde "
+"zaman çizelgesi oluşturulacak."
#. module: project_timesheet_holidays
#: code:addons/project_timesheet_holidays/models/res_company.py:30
-#: model:ir.model.fields,field_description:project_timesheet_holidays.field_hr_holidays_status_timesheet_project_id
-#: model:ir.model.fields,field_description:project_timesheet_holidays.field_res_company_leave_timesheet_project_id
-#: model:ir.model.fields,field_description:project_timesheet_holidays.field_res_config_settings_leave_timesheet_project_id
+#: model:ir.model.fields,field_description:project_timesheet_holidays.field_hr_leave_type__timesheet_project_id
+#: model:ir.model.fields,field_description:project_timesheet_holidays.field_res_company__leave_timesheet_project_id
+#: model:ir.model.fields,field_description:project_timesheet_holidays.field_res_config_settings__leave_timesheet_project_id
#, python-format
msgid "Internal Project"
-msgstr ""
+msgstr "İç Proje"
#. module: project_timesheet_holidays
-#: model:ir.model.fields,field_description:project_timesheet_holidays.field_hr_holidays_status_timesheet_task_id
+#: model:ir.model.fields,field_description:project_timesheet_holidays.field_hr_leave_type__timesheet_task_id
msgid "Internal Task for timesheet"
-msgstr ""
+msgstr "Zaman Çizelgesi için İç Görev"
#. module: project_timesheet_holidays
-#: model:ir.model,name:project_timesheet_holidays.model_hr_holidays
+#: model:ir.model,name:project_timesheet_holidays.model_hr_leave
msgid "Leave"
msgstr "İzin"
#. module: project_timesheet_holidays
-#: model:ir.model.fields,field_description:project_timesheet_holidays.field_account_analytic_line_holiday_id
+#: model:ir.model.fields,field_description:project_timesheet_holidays.field_account_analytic_line__holiday_id
msgid "Leave Request"
msgstr "İzni İsteği"
#. module: project_timesheet_holidays
-#: model:ir.model.fields,field_description:project_timesheet_holidays.field_res_company_leave_timesheet_task_id
-#: model:ir.model.fields,field_description:project_timesheet_holidays.field_res_config_settings_leave_timesheet_task_id
+#: model:ir.model.fields,field_description:project_timesheet_holidays.field_res_company__leave_timesheet_task_id
+#: model:ir.model.fields,field_description:project_timesheet_holidays.field_res_config_settings__leave_timesheet_task_id
msgid "Leave Task"
-msgstr ""
+msgstr "Görevden Ayrıl"
#. module: project_timesheet_holidays
-#: model:ir.model,name:project_timesheet_holidays.model_hr_holidays_status
+#: model:ir.model,name:project_timesheet_holidays.model_hr_leave_type
msgid "Leave Type"
msgstr "İzin Türü"
@@ -114,10 +119,11 @@ msgid "Task"
msgstr "Görev"
#. module: project_timesheet_holidays
-#: model:ir.model.fields,help:project_timesheet_holidays.field_hr_holidays_status_timesheet_project_id
+#: model:ir.model.fields,help:project_timesheet_holidays.field_hr_leave_type__timesheet_project_id
msgid ""
"The project will contain the timesheet generated when a leave is validated."
msgstr ""
+"Bırakma onaylandığında, proje, oluşturulmuş zaman çizelgesi içerecektir."
#. module: project_timesheet_holidays
#: model:ir.ui.view,arch_db:project_timesheet_holidays.hr_holiday_status_view_form_inherit
@@ -131,6 +137,8 @@ msgid ""
"You cannot delete timesheet lines attached to a leaves. Please cancel the "
"leaves instead."
msgstr ""
+"İzin eklenmiş zaman çizelgesi satırını silemezsiniz. Onun yerine lütfen izni"
+" iptal edin."
#. module: project_timesheet_holidays
#: model:ir.model,name:project_timesheet_holidays.model_res_config_settings
diff --git a/addons/purchase/i18n/fr.po b/addons/purchase/i18n/fr.po
index afb55a59fbb..9483e418eaf 100644
--- a/addons/purchase/i18n/fr.po
+++ b/addons/purchase/i18n/fr.po
@@ -85,6 +85,32 @@ msgid ""
"% endif\n"
"</p>\n"
msgstr ""
+"\n"
+"<p>Cher\n"
+"% if object.partner_id.is_company and object.partner_id.child_ids:\n"
+" ${object.partner_id.child_ids[0].name}\n"
+"% else :\n"
+" ${object.partner_id.name}\n"
+"% endif\n"
+",</p><p>\n"
+"Veuillez trouvez ci-joint une ${object.state in ('draft', 'sent') and 'demande de devis' or 'confirmation de commande d\\'achat'} <strong>${object.name}</strong>\n"
+"% if object.partner_ref:\n"
+" référence : ${object.partner_ref}\n"
+"% endif\n"
+"% if object.origin:\n"
+" (RFQ origin: ${object.origin})\n"
+"% endif\n"
+"d'un montant de <strong>${format_amount(object.amount_total, object.currency_id)}</strong>\n"
+"émanant de ${object.company_id.name}.\n"
+"</p>\n"
+"\n"
+"<p>N'hésitez pas à nous contacter si vous avez d'autres questions.</p>\n"
+"<p>Cordialement,</p>\n"
+"<p style=\"color:#888888;\">\n"
+"% if object.user_id and object.user_id.signature:\n"
+" ${object.user_id.signature | safe}\n"
+"% endif\n"
+"</p>\n"
#. module: purchase
#: model:mail.template,body_html:purchase.email_template_edi_purchase_done
@@ -110,6 +136,26 @@ msgid ""
"<p>You can reply to this email if you have any questions.</p>\n"
"<p>Thank you,</p>\n"
msgstr ""
+"\n"
+"<p>Cher ${object.partner_id.name} \n"
+"% if object.partner_id.parent_id:\n"
+" (<i>${object.partner_id.parent_id.name}</i>)\n"
+"% endif\n"
+",</p>\n"
+"<p>\n"
+"Veuillez trouver ci-joint une <strong>${object.state in ('draft', 'sent') and 'demande de devis' or 'confirmation de commande d\\'achat'} ${object.name}</strong>\n"
+"% if object.partner_ref:\n"
+" réfrence : ${object.partner_ref}\n"
+"% endif\n"
+"% if object.origin:\n"
+" (correspondant à la demande de devis : ${object.origin})\n"
+"% endif\n"
+"émanant de ${object.company_id.name}.\n"
+"Son montant s'élève à <strong>${format_amount(object.amount_total, object.currency_id)}</strong>.\n"
+"</p>\n"
+"\n"
+"<p>N'hésitez pas à répondre à ce mail pour toute demande.</p>\n"
+"<p>Cordialement,</p>\n"
#. module: purchase
#: code:addons/purchase/models/stock.py:100
diff --git a/addons/purchase/i18n/tr.po b/addons/purchase/i18n/tr.po
index 5fb520d7408..ef8d381e433 100644
--- a/addons/purchase/i18n/tr.po
+++ b/addons/purchase/i18n/tr.po
@@ -14,13 +14,15 @@
# Mehmet Demirel <mdemirell@gmail.com>, 2017
# Levent Karakaş <levent@mektup.at>, 2018
# Saban Yildiz <sabany@projetgrup.com>, 2018
+# Umur Akın <umura@projetgrup.com>, 2018
+# Ertuğrul Güreş <ertugrulg@projetgrup.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
-"Last-Translator: Saban Yildiz <sabany@projetgrup.com>, 2018\n"
+"Last-Translator: Ertuğrul Güreş <ertugrulg@projetgrup.com>, 2018\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -566,6 +568,8 @@ msgid ""
"Depicts the date where the Quotation should be validated and converted into "
"a purchase order."
msgstr ""
+"Teklifin onaylanması ve satın alma siparişine dönüştürülmesi gereken tarihi "
+"gösterir."
#. module: purchase
#: model:ir.model.fields,field_description:purchase.field_purchase_order_line__name
@@ -625,6 +629,8 @@ msgid ""
"Encoding help. When selected, the associated purchase order lines are added "
"to the vendor bill. Several PO can be selected."
msgstr ""
+"Kodlama yardımı. Seçildiği zaman, ilişkili satın alma sipariş satırları "
+"tedarikçi faturasına eklenir. Bir çok PO seçilebilir."
#. module: purchase
#: model:ir.ui.view,arch_db:purchase.exception_on_po
@@ -668,6 +674,7 @@ msgstr "Sonraki Aktiviteler"
#: selection:res.company,po_double_validation:0
msgid "Get 2 levels of approvals to confirm a purchase order"
msgstr ""
+"Bir satın alma siparişinin onaylanması için 2 onay seviyesi almak gerekir."
#. module: purchase
#: model:ir.ui.view,arch_db:purchase.res_config_settings_view_form_purchase
@@ -884,6 +891,9 @@ msgid ""
"Orders for procuring products, they will be scheduled that many days earlier"
" to cope with unexpected vendor delays."
msgstr ""
+"Satıcı teslimat süreleri için hata payı. Sistem, ürün tedarik etmek için "
+"Satın Alma Siparişleri ürettiğinde, beklenmedik satıcı gecikmeleriyle başa "
+"çıkacakları günler öncesinden planlanacaktır."
#. module: purchase
#: model:ir.model.fields,help:purchase.field_res_config_settings__use_po_lead
@@ -920,7 +930,7 @@ msgstr "Min. Envanter Kuralı"
#: model:ir.model.fields,help:purchase.field_res_company__po_double_validation_amount
#: model:ir.model.fields,help:purchase.field_res_config_settings__po_double_validation_amount
msgid "Minimum amount for which a double validation is required"
-msgstr ""
+msgstr " Çift doğrulama gerektiren minimum miktar"
#. module: purchase
#: model:ir.filters,name:purchase.filter_purchase_order_monthly_purchases
@@ -1228,6 +1238,10 @@ msgid ""
"purchase history and performance. From this menu you can track your "
"negotiation performance, the delivery performance of your vendors, etc."
msgstr ""
+"Satınalma Analizi, şirket satın alma geçmişinizi ve performansınızı kolayca "
+"kontrol etmenizi ve analiz etmenizi sağlar. Bu menüden görüşme "
+"performansınızı, satıcılarınızın teslim performanslarını vb. "
+"Izleyebilirsiniz."
#. module: purchase
#: model:ir.model.fields,field_description:purchase.field_res_company__po_lead
@@ -1303,6 +1317,8 @@ msgid ""
"Purchase Order Modification used when you want to purchase order editable "
"after confirm"
msgstr ""
+"Onaydan sonra satın alma siparişi vermek istediğinizde düzenlenebilir olması"
+" için Satın Alma Siparişi Değiştirme kullanılır."
#. module: purchase
#: model:ir.actions.act_window,name:purchase.purchase_form_action
@@ -1344,7 +1360,7 @@ msgstr ""
#. module: purchase
#: model:ir.ui.view,arch_db:purchase.view_purchase_order_filter
msgid "Purchase orders that have been invoiced."
-msgstr ""
+msgstr "Faturalanan satın alma siparişi."
#. module: purchase
#: model:ir.ui.view,arch_db:purchase.view_purchase_order_filter
@@ -1380,6 +1396,8 @@ msgid ""
"Put an address if you want to deliver directly from the vendor to the "
"customer. Otherwise, keep empty to deliver to your own company."
msgstr ""
+"Eğer doğrudan tedarikçiden müşteriye teslimat olmasını istiyorsanız, adres "
+"girin. Eğer boş tutarsanız şirketinize teslimat olur."
#. module: purchase
#: model:ir.ui.view,arch_db:purchase.res_config_settings_view_form_purchase
@@ -1558,7 +1576,7 @@ msgstr "Satınalma Siparişi Ara"
#. module: purchase
#: model:ir.model.fields,field_description:purchase.field_res_config_settings__use_po_lead
msgid "Security Lead Time for Purchase"
-msgstr ""
+msgstr "Satın Alma için Teslimat Zaman Güvenliği"
#. module: purchase
#: model:ir.model.fields,help:purchase.field_product_product__purchase_line_warn
@@ -1669,7 +1687,7 @@ msgstr "Vergiler:"
#. module: purchase
#: model:ir.model.fields,help:purchase.field_purchase_order__default_location_dest_id_usage
msgid "Technical field used to display the Drop Ship Address"
-msgstr ""
+msgstr "Teslimat Bırakma Adresini görüntülemek için kullanılan teknik alan"
#. module: purchase
#: model:ir.model.fields,field_description:purchase.field_purchase_order__notes
@@ -1703,6 +1721,9 @@ msgid ""
" converted into a purchase order, you will be able to control the receipt\n"
" of the products and the vendor bill."
msgstr ""
+"Teklif için gerekli ilk adım satın alma adımı. Satın alma siparişine "
+"dönüştürüldükten sonra, ürün makbuzunu ve tedarikçi faturasını kontrol "
+"edebileceksiniz."
#. module: purchase
#: code:addons/purchase/models/purchase.py:931
@@ -1718,6 +1739,8 @@ msgid ""
"This account will be used to value price difference between purchase price "
"and accounting cost."
msgstr ""
+"Bu hesap, satın alma fiyatı ile muhasebe maliyeti arasındaki fiyat farkı "
+"değeri için kullanılacaktır."
#. module: purchase
#: model:ir.model.fields,help:purchase.field_product_product__property_account_creditor_price_difference
@@ -1773,7 +1796,7 @@ msgstr "Buraya yazacağınız açıklamalar satınalma siparişlerinde görünec
#: code:addons/purchase/models/account_invoice.py:216
#, python-format
msgid "This vendor bill has been created from: %s"
-msgstr ""
+msgstr "Bu satıcı faturası üzerinden oluşturuldu: %s"
#. module: purchase
#: code:addons/purchase/models/account_invoice.py:230
diff --git a/addons/purchase/models/account_invoice.py b/addons/purchase/models/account_invoice.py
index f2636e003ff..36dad6857f5 100644
--- a/addons/purchase/models/account_invoice.py
+++ b/addons/purchase/models/account_invoice.py
@@ -172,6 +172,11 @@ class AccountInvoice(models.Model):
stock_move_obj = self.env['stock.move']
valuation_stock_move = stock_move_obj.search([('purchase_line_id', '=', i_line.purchase_line_id.id), ('state', '=', 'done')])
+ if self.type == 'in_refund':
+ valuation_stock_move = valuation_stock_move.filtered(lambda m: m._is_out())
+ elif self.type == 'in_invoice':
+ valuation_stock_move = valuation_stock_move.filtered(lambda m: m._is_in())
+
if valuation_stock_move:
valuation_price_unit_total = 0
valuation_total_qty = 0
diff --git a/addons/purchase/models/purchase.py b/addons/purchase/models/purchase.py
index c3cb22e2694..c520e6914b3 100644
--- a/addons/purchase/models/purchase.py
+++ b/addons/purchase/models/purchase.py
@@ -92,7 +92,7 @@ class PurchaseOrder(models.Model):
@api.depends('picking_ids', 'picking_ids.state')
def _compute_is_shipped(self):
for order in self:
- if order.picking_ids and all([x.state == 'done' for x in order.picking_ids]):
+ if order.picking_ids and all([x.state in ['done', 'cancel'] for x in order.picking_ids]):
order.is_shipped = True
READONLY_STATES = {
@@ -1055,7 +1055,7 @@ class ProcurementRule(models.Model):
gpo = self.group_propagation_option
group = (gpo == 'fixed' and self.group_id.id) or \
- (gpo == 'propagate' and 'group_id' in values and values['group_id'].id) or False
+ (gpo == 'propagate' and values.get('group_id') and values['group_id'].id) or False
return {
'partner_id': partner.id,
diff --git a/addons/purchase/tests/test_stockvaluation.py b/addons/purchase/tests/test_stockvaluation.py
index cb5e4b2040e..1471fafbba1 100644
--- a/addons/purchase/tests/test_stockvaluation.py
+++ b/addons/purchase/tests/test_stockvaluation.py
@@ -4,7 +4,8 @@
import time
from datetime import datetime
-from odoo.tests.common import TransactionCase
+from odoo.tests.common import TransactionCase, tagged
+from odoo.addons.account.tests.account_test_classes import AccountingTestCase
from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT
@@ -271,3 +272,140 @@ class TestStockValuation(TransactionCase):
self.assertEqual(move2.price_unit, 100)
self.assertEqual(move2.product_qty, 5)
+
+@tagged('post_install', '-at_install')
+class TestStockValuationWithCOA(AccountingTestCase):
+ def setUp(self):
+ super(TestStockValuationWithCOA, self).setUp()
+ self.supplier_location = self.env.ref('stock.stock_location_suppliers')
+ self.stock_location = self.env.ref('stock.stock_location_stock')
+ self.partner_id = self.env.ref('base.res_partner_1')
+ self.product1 = self.env.ref('product.product_product_8')
+ Account = self.env['account.account']
+ self.stock_input_account = Account.create({
+ 'name': 'Stock Input',
+ 'code': 'StockIn',
+ 'user_type_id': self.env.ref('account.data_account_type_current_assets').id,
+ })
+ self.stock_output_account = Account.create({
+ 'name': 'Stock Output',
+ 'code': 'StockOut',
+ 'user_type_id': self.env.ref('account.data_account_type_current_assets').id,
+ })
+ self.stock_valuation_account = Account.create({
+ 'name': 'Stock Valuation',
+ 'code': 'Stock Valuation',
+ 'user_type_id': self.env.ref('account.data_account_type_current_assets').id,
+ })
+ self.stock_journal = self.env['account.journal'].create({
+ 'name': 'Stock Journal',
+ 'code': 'STJTEST',
+ 'type': 'general',
+ })
+ self.product1.categ_id.write({
+ 'property_stock_account_input_categ_id': self.stock_input_account.id,
+ 'property_stock_account_output_categ_id': self.stock_output_account.id,
+ 'property_stock_valuation_account_id': self.stock_valuation_account.id,
+ 'property_stock_journal': self.stock_journal.id,
+ })
+
+ def test_fifo_anglosaxon_return(self):
+ self.env.user.company_id.anglo_saxon_accounting = True
+ self.product1.product_tmpl_id.cost_method = 'fifo'
+ self.product1.product_tmpl_id.valuation = 'real_time'
+ self.product1.product_tmpl_id.invoice_policy = 'delivery'
+ price_diff_account = self.env['account.account'].create({
+ 'name': 'price diff account',
+ 'code': 'price diff account',
+ 'user_type_id': self.env.ref('account.data_account_type_current_assets').id,
+ })
+ self.product1.property_account_creditor_price_difference = price_diff_account
+
+ # Receive 10@10 ; create the vendor bill
+ po1 = self.env['purchase.order'].create({
+ 'partner_id': self.partner_id.id,
+ 'order_line': [
+ (0, 0, {
+ 'name': self.product1.name,
+ 'product_id': self.product1.id,
+ 'product_qty': 10.0,
+ 'product_uom': self.product1.uom_po_id.id,
+ 'price_unit': 10.0,
+ 'date_planned': datetime.today().strftime(DEFAULT_SERVER_DATETIME_FORMAT),
+ }),
+ ],
+ })
+ po1.button_confirm()
+ receipt_po1 = po1.picking_ids[0]
+ receipt_po1.move_lines.quantity_done = 10
+ receipt_po1.button_validate()
+
+ invoice_po1 = self.env['account.invoice'].create({
+ 'partner_id': self.partner_id.id,
+ 'purchase_id': po1.id,
+ 'account_id': self.partner_id.property_account_payable_id.id,
+ 'type': 'in_invoice',
+ })
+ invoice_po1.purchase_order_change()
+ invoice_po1.action_invoice_open()
+
+ # Receive 10@20 ; create the vendor bill
+ po2 = self.env['purchase.order'].create({
+ 'partner_id': self.partner_id.id,
+ 'order_line': [
+ (0, 0, {
+ 'name': self.product1.name,
+ 'product_id': self.product1.id,
+ 'product_qty': 10.0,
+ 'product_uom': self.product1.uom_po_id.id,
+ 'price_unit': 20.0,
+ 'date_planned': datetime.today().strftime(DEFAULT_SERVER_DATETIME_FORMAT),
+ }),
+ ],
+ })
+ po2.button_confirm()
+ receipt_po2 = po2.picking_ids[0]
+ receipt_po2.move_lines.quantity_done = 10
+ receipt_po2.button_validate()
+
+ invoice_po2 = self.env['account.invoice'].create({
+ 'partner_id': self.partner_id.id,
+ 'purchase_id': po2.id,
+ 'account_id': self.partner_id.property_account_payable_id.id,
+ 'type': 'in_invoice',
+ })
+ invoice_po2.purchase_order_change()
+ invoice_po2.action_invoice_open()
+
+ # valuation of product1 should be 300
+ self.assertEqual(self.product1.stock_value, 300)
+
+ # return the second po
+ stock_return_picking = self.env['stock.return.picking']\
+ .with_context(active_ids=receipt_po2.ids, active_id=receipt_po2.ids[0])\
+ .create({})
+ stock_return_picking.product_return_moves.quantity = 10
+ stock_return_picking_action = stock_return_picking.create_returns()
+ return_pick = self.env['stock.picking'].browse(stock_return_picking_action['res_id'])
+ return_pick.move_lines[0].move_line_ids[0].qty_done = 10
+ return_pick.do_transfer()
+
+ # valuation of product1 should be 200 as the first items will be sent out
+ self.assertEqual(self.product1.stock_value, 200)
+
+ # create a credit note for po2
+ creditnote_po2 = self.env['account.invoice'].create({
+ 'partner_id': self.partner_id.id,
+ 'purchase_id': po2.id,
+ 'account_id': self.partner_id.property_account_payable_id.id,
+ 'type': 'in_refund',
+ })
+
+ creditnote_po2.purchase_order_change()
+ creditnote_po2.invoice_line_ids[0].quantity = 10
+ creditnote_po2.action_invoice_open()
+
+ # check the anglo saxon entries
+ price_diff_entry = self.env['account.move.line'].search([('account_id', '=', price_diff_account.id)])
+ self.assertEqual(price_diff_entry.credit, 100)
+
diff --git a/addons/purchase/views/portal_templates.xml b/addons/purchase/views/portal_templates.xml
index 664fef96626..9bded7c7de0 100644
--- a/addons/purchase/views/portal_templates.xml
+++ b/addons/purchase/views/portal_templates.xml
@@ -44,6 +44,9 @@
</td>
<td><span t-field="order.date_order"/></td>
<td>
+ <t t-if="order.invoice_status == 'to invoice'">
+ <span class="label label-info"><i class="fa fa-fw fa-file-text"/> Waiting for Bill</span>
+ </t>
<t t-if="order.state == 'cancel'">
<span class="label label-default"><i class="fa fa-fw fa-remove"/> Cancelled</span>
</t>
diff --git a/addons/purchase_requisition/i18n/ru.po b/addons/purchase_requisition/i18n/ru.po
index 97d091327ff..23255945053 100644
--- a/addons/purchase_requisition/i18n/ru.po
+++ b/addons/purchase_requisition/i18n/ru.po
@@ -111,7 +111,7 @@ msgstr "Тип соглашения"
#. module: purchase_requisition
#: model:ir.ui.view,arch_db:purchase_requisition.res_config_settings_view_form
msgid "Agreement Types"
-msgstr ""
+msgstr "Типы соглашений"
#. module: purchase_requisition
#: model:ir.model.fields,field_description:purchase_requisition.field_purchase_requisition_line__account_analytic_id
diff --git a/addons/purchase_requisition/i18n/tr.po b/addons/purchase_requisition/i18n/tr.po
index fb968a38fe4..6a04f3fa2f7 100644
--- a/addons/purchase_requisition/i18n/tr.po
+++ b/addons/purchase_requisition/i18n/tr.po
@@ -130,7 +130,7 @@ msgstr "Tedarikçi Seçimi"
#. module: purchase_requisition
#: model:purchase.requisition.type,name:purchase_requisition.type_single
msgid "Blanket Order"
-msgstr ""
+msgstr "Açık Sipariş"
#. module: purchase_requisition
#: model:ir.model.fields,field_description:purchase_requisition.field_product_supplierinfo__purchase_requisition_id
@@ -141,7 +141,7 @@ msgstr ""
#: model:ir.actions.report,name:purchase_requisition.action_report_purchase_requisitions
#: model:ir.ui.view,arch_db:purchase_requisition.report_purchaserequisitions
msgid "Call for Tenders"
-msgstr ""
+msgstr "Teklif Çağrısı"
#. module: purchase_requisition
#: model:ir.ui.view,arch_db:purchase_requisition.view_purchase_requisition_form
@@ -158,7 +158,7 @@ msgstr "İptal Edildi"
#: code:addons/purchase_requisition/models/purchase_requisition.py:115
#, python-format
msgid "Cancelled by the agreement associated to this quotation."
-msgstr ""
+msgstr "Bu teklifle ilişkili anlaşma tarafından iptal edildi."
#. module: purchase_requisition
#: model:ir.ui.view,arch_db:purchase_requisition.view_purchase_requisition_form
@@ -238,7 +238,7 @@ msgstr "Görünüm Adı"
#. module: purchase_requisition
#: selection:purchase.requisition.type,line_copy:0
msgid "Do not create RfQ lines automatically"
-msgstr ""
+msgstr "Otomatik olarak RfQ satırı oluşturamazsınız."
#. module: purchase_requisition
#: model:ir.ui.view,arch_db:purchase_requisition.view_purchase_requisition_filter
@@ -248,7 +248,7 @@ msgstr "Biten"
#. module: purchase_requisition
#: model:ir.model.fields,field_description:purchase_requisition.field_purchase_requisition_line__move_dest_id
msgid "Downstream Move"
-msgstr ""
+msgstr "Satışa Dönük Hareket"
#. module: purchase_requisition
#: model:ir.ui.view,arch_db:purchase_requisition.view_purchase_requisition_filter
@@ -266,7 +266,7 @@ msgstr "Bitiş Ayı"
#: model:ir.actions.act_window,help:purchase_requisition.action_purchase_requisition
msgid ""
"Example of purchase agreements include call for tenders and blanket orders."
-msgstr ""
+msgstr "Satın alma anlaşma örnekleri teklif çağrısı ve açık sipariş içerir."
#. module: purchase_requisition
#: model:ir.actions.act_window,help:purchase_requisition.action_purchase_requisition
@@ -275,6 +275,9 @@ msgid ""
" (e.g. a year) and you order products within this agreement, benefiting\n"
" from the negociated prices."
msgstr ""
+"Açık Sipariş için, belirli zaman aralıkları için bir sözleşme kaydedebilir "
+"ve bu anlaşma daghilindeki ürünler belirlenen fiyattan sipariş "
+"edebilirsiniz."
#. module: purchase_requisition
#: model:ir.ui.view,arch_db:purchase_requisition.view_purchase_requisition_filter
@@ -296,11 +299,15 @@ msgid ""
" been registered, you can review and compare them and you can\n"
" validate some and cancel others."
msgstr ""
+"Bir teklif çağrısında, ihtiyacınız olan ürünü kaydedebilir ve tedarikçiler "
+"için RfQ lar oluşturabilirsiniz. Teklifler kaydedildikten sonra bunları "
+"inceleyebilir ve karşılaştırabilir, bazılarını doğrulayabilir ve diğerlerini"
+" iptal edebilirsiniz."
#. module: purchase_requisition
#: model:ir.ui.view,arch_db:purchase_requisition.view_purchase_requisition_filter
msgid "In negotiation"
-msgstr ""
+msgstr "Müzakerede"
#. module: purchase_requisition
#: model:ir.model,name:purchase_requisition.model_product_supplierinfo
@@ -356,7 +363,7 @@ msgstr "Yeni Teklif"
#. module: purchase_requisition
#: model:ir.model.fields,field_description:purchase_requisition.field_purchase_requisition__order_count
msgid "Number of Orders"
-msgstr ""
+msgstr "Sipariş Sayısı"
#. module: purchase_requisition
#: selection:purchase.requisition,state:0
@@ -491,7 +498,7 @@ msgstr "Satınalma Talep Satırı"
#. module: purchase_requisition
#: model:purchase.requisition.type,name:purchase_requisition.type_multi
msgid "Purchase Tender"
-msgstr ""
+msgstr "Satın Alma Teklifi"
#. module: purchase_requisition
#: model:ir.actions.act_window,name:purchase_requisition.act_res_partner_2_purchase_order
@@ -576,6 +583,8 @@ msgid ""
"\n"
" Select multiple RFQ: allows multiple purchase orders. On confirmation of a purchase order it does not cancel the remaining orders"
msgstr ""
+"Sadece bir teklif talebi (özel) seçin: Satın alma siparişi onaylandığında, kalan satın alma siparişini iptal edin.\n"
+"Birden çok RFQ seçin: Birden fazla satın alma siparişine izin verir. Satın alma siparişinin onaylanması durumunda kalan siparişler iptal edilmez."
#. module: purchase_requisition
#: model:ir.model.fields,field_description:purchase_requisition.field_purchase_requisition_type__sequence
@@ -585,7 +594,7 @@ msgstr "Sıra"
#. module: purchase_requisition
#: selection:purchase.requisition.type,quantity_copy:0
msgid "Set quantities manually"
-msgstr ""
+msgstr "Miktarı manuel olarak ayarlayın"
#. module: purchase_requisition
#: model:ir.ui.view,arch_db:purchase_requisition.view_purchase_requisition_filter
@@ -632,7 +641,7 @@ msgstr "Şartlar ve Koşullar"
#: model:ir.model.fields,help:purchase_requisition.field_purchase_requisition__schedule_date
msgid ""
"The expected and scheduled delivery date where all the products are received"
-msgstr ""
+msgstr "Tüm ürünlerin alındığı beklenen ve planlanan teslimat tarihi ."
#. module: purchase_requisition
#: code:addons/purchase_requisition/models/purchase_requisition.py:94
@@ -660,12 +669,12 @@ msgstr "Birim Fiyat"
#. module: purchase_requisition
#: selection:purchase.requisition.type,line_copy:0
msgid "Use lines of agreement"
-msgstr ""
+msgstr "Anlaşma satırları kullan"
#. module: purchase_requisition
#: selection:purchase.requisition.type,quantity_copy:0
msgid "Use quantities of agreement"
-msgstr ""
+msgstr "Anlaşma miktarı kullan"
#. module: purchase_requisition
#: model:ir.ui.view,arch_db:purchase_requisition.view_purchase_requisition_form
@@ -721,6 +730,8 @@ msgid ""
"You have to cancel or validate every RfQ before closing the purchase "
"requisition."
msgstr ""
+"Satın alma isteği kapanmadan önce, her RfQ ya iptal etmeli ya da "
+"onaylamalısınız."
#. module: purchase_requisition
#: model:ir.ui.view,arch_db:purchase_requisition.view_purchase_requisition_form
diff --git a/addons/rating/i18n/nl.po b/addons/rating/i18n/nl.po
index b4c89a08c16..4baa8d1da76 100644
--- a/addons/rating/i18n/nl.po
+++ b/addons/rating/i18n/nl.po
@@ -286,7 +286,7 @@ msgstr "Beoordeling Mixin"
#. module: rating
#: model:ir.model.fields,field_description:rating.field_rating_rating__rating
msgid "Rating Number"
-msgstr ""
+msgstr "Beoordelingscijfer"
#. module: rating
#: model:ir.model.fields,field_description:rating.field_mail_compose_message__rating_value
diff --git a/addons/resource/i18n/tr.po b/addons/resource/i18n/tr.po
index 310029d221f..7e79c010fa2 100644
--- a/addons/resource/i18n/tr.po
+++ b/addons/resource/i18n/tr.po
@@ -12,13 +12,14 @@
# Güven YILMAZ <guvenyilmaz@outlook.com.tr>, 2017
# Ayhan KIZILTAN <akiziltan76@hotmail.com>, 2017
# Gökhan Erdoğdu <gokhan.erdogdu@mechsoft.com.tr>, 2017
+# Umur Akın <umura@projetgrup.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
-"Last-Translator: Gökhan Erdoğdu <gokhan.erdogdu@mechsoft.com.tr>, 2017\n"
+"Last-Translator: Umur Akın <umura@projetgrup.com>, 2018\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -98,7 +99,7 @@ msgstr "Haftanın Günü"
#: model:ir.model.fields,field_description:resource.field_res_company__resource_calendar_id
#: model:ir.model.fields,field_description:resource.field_res_users__resource_calendar_id
msgid "Default Working Hours"
-msgstr ""
+msgstr "Varsayılan Çalışma Saatleri"
#. module: resource
#: model:ir.model.fields,help:resource.field_hr_employee__resource_calendar_id
@@ -155,13 +156,13 @@ msgstr "Cuma"
#: code:addons/resource/models/resource.py:79
#, python-format
msgid "Friday Evening"
-msgstr ""
+msgstr "Cuma Akşamı"
#. module: resource
#: code:addons/resource/models/resource.py:78
#, python-format
msgid "Friday Morning"
-msgstr ""
+msgstr "Cuma Sabahı"
#. module: resource
#: model:ir.model.fields,field_description:resource.field_resource_calendar__global_leave_ids
@@ -278,13 +279,13 @@ msgstr "Pazartesi"
#: code:addons/resource/models/resource.py:71
#, python-format
msgid "Monday Evening"
-msgstr ""
+msgstr "Pazartesi Akşamı"
#. module: resource
#: code:addons/resource/models/resource.py:70
#, python-format
msgid "Monday Morning"
-msgstr ""
+msgstr "Pazartesi Sabahı"
#. module: resource
#: model:ir.model.fields,field_description:resource.field_resource_calendar__name
@@ -340,7 +341,7 @@ msgstr "Kaynak İzinler"
#. module: resource
#: model:ir.model,name:resource.model_resource_mixin
msgid "Resource Mixin"
-msgstr ""
+msgstr "Kaynak Karışımı"
#. module: resource
#: model:ir.model.fields,field_description:resource.field_resource_resource__resource_type
@@ -402,7 +403,7 @@ msgstr "Çalışma Süresi Ara"
#: code:addons/resource/models/res_company.py:23
#, python-format
msgid "Standard 40 hours/week"
-msgstr ""
+msgstr "Standart 40 saat/hafta"
#. module: resource
#: model:ir.model.fields,field_description:resource.field_resource_calendar_leaves__date_from
@@ -432,13 +433,13 @@ msgstr "Pazar"
#. module: resource
#: model:ir.model,name:resource.model_resource_test
msgid "Test Resource Model"
-msgstr ""
+msgstr "Test Kaynak Modeli"
#. module: resource
#: code:addons/resource/models/resource.py:711
#, python-format
msgid "The efficiency factor cannot be equal to 0."
-msgstr ""
+msgstr "Etki faktörü sıfıra eşit olamaz"
#. module: resource
#: code:addons/resource/models/resource.py:668
@@ -469,18 +470,18 @@ msgstr "Perşembe"
#: code:addons/resource/models/resource.py:77
#, python-format
msgid "Thursday Evening"
-msgstr ""
+msgstr "Salı Akşamı"
#. module: resource
#: code:addons/resource/models/resource.py:76
#, python-format
msgid "Thursday Morning"
-msgstr ""
+msgstr "Perşembe Sabahı"
#. module: resource
#: sql_constraint:resource.resource:0
msgid "Time efficiency must be strictly positive"
-msgstr ""
+msgstr "Zaman etkinliği mutlaka pozitif olmalı"
#. module: resource
#: model:ir.model.fields,field_description:resource.field_resource_calendar_leaves__tz
@@ -503,13 +504,13 @@ msgstr "Salı"
#: code:addons/resource/models/resource.py:73
#, python-format
msgid "Tuesday Evening"
-msgstr ""
+msgstr "Salı Akşamı"
#. module: resource
#: code:addons/resource/models/resource.py:72
#, python-format
msgid "Tuesday Morning"
-msgstr ""
+msgstr "Salı Sabahı"
#. module: resource
#: model:ir.ui.view,arch_db:resource.view_resource_resource_search
@@ -536,13 +537,13 @@ msgstr "Çarşamba"
#: code:addons/resource/models/resource.py:75
#, python-format
msgid "Wednesday Evening"
-msgstr ""
+msgstr "Çarşamba Akşamı"
#. module: resource
#: code:addons/resource/models/resource.py:74
#, python-format
msgid "Wednesday Morning"
-msgstr ""
+msgstr "Çarşamba Sabahı"
#. module: resource
#: model:ir.model,name:resource.model_resource_calendar_attendance
@@ -552,7 +553,7 @@ msgstr "Çalışma Ayrıntısı"
#. module: resource
#: model:ir.ui.view,arch_db:resource.resource_calendar_form
msgid "Work Resources"
-msgstr ""
+msgstr "İş Kaynakları"
#. module: resource
#: model:ir.model.fields,field_description:resource.field_resource_calendar_attendance__hour_from
diff --git a/addons/sale/i18n/tr.po b/addons/sale/i18n/tr.po
index e927411e0ea..7d1a01a26a4 100644
--- a/addons/sale/i18n/tr.po
+++ b/addons/sale/i18n/tr.po
@@ -19,13 +19,15 @@
# Güven YILMAZ <guvenyilmaz@outlook.com.tr>, 2017
# Alexander B. <road2monstercat@gmail.com>, 2017
# selim kartal <kartalselim37@gmail.com>, 2017
+# Ertuğrul Güreş <ertugrulg@projetgrup.com>, 2018
+# Umur Akın <umura@projetgrup.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
-"Last-Translator: selim kartal <kartalselim37@gmail.com>, 2017\n"
+"Last-Translator: Umur Akın <umura@projetgrup.com>, 2018\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -318,7 +320,7 @@ msgstr "<strong>Referans Numaranız:</strong>"
#. module: sale
#: selection:res.config.settings,sale_pricelist_setting:0
msgid "A single sales price per product"
-msgstr ""
+msgstr "Ürün başına tek bir satış fiyatı"
#. module: sale
#: model:ir.actions.act_window,help:sale.action_orders_upselling
@@ -386,7 +388,7 @@ msgstr "Avans: %s"
#. module: sale
#: model:ir.model,name:sale.model_report_all_channels_sales
msgid "All sales orders grouped by sales channels"
-msgstr ""
+msgstr "Tüm satış siparişleri satış kanalları tarafından gruplandırıldı"
#. module: sale
#: model:ir.ui.view,arch_db:sale.res_config_settings_view_form
@@ -1473,7 +1475,7 @@ msgstr "Sipariş #"
#. module: sale
#: model:ir.model.fields,field_description:sale.field_sale_advance_payment_inv__count
msgid "Order Count"
-msgstr ""
+msgstr "Sipariş Sayımı"
#. module: sale
#: code:addons/sale/controllers/portal.py:86
@@ -2520,7 +2522,7 @@ msgstr ""
#: code:addons/sale/models/sale.py:431 code:addons/sale/models/sale.py:435
#, python-format
msgid "There is no invoiceable line."
-msgstr ""
+msgstr "Burada faturalanabilir satır yok."
#. module: sale
#: model:ir.ui.view,arch_db:sale.portal_order_error
diff --git a/addons/sale/models/sale.py b/addons/sale/models/sale.py
index 843b091c4d2..43253923f36 100644
--- a/addons/sale/models/sale.py
+++ b/addons/sale/models/sale.py
@@ -426,6 +426,9 @@ class SaleOrder(models.Model):
precision = self.env['decimal.precision'].precision_get('Product Unit of Measure')
invoices = {}
references = {}
+ invoices_origin = {}
+ invoices_name = {}
+
for order in self:
group_key = order.id if grouped else (order.partner_invoice_id.id, order.currency_id.id)
for line in order.order_line.sorted(key=lambda l: l.qty_to_invoice < 0):
@@ -436,13 +439,14 @@ class SaleOrder(models.Model):
invoice = inv_obj.create(inv_data)
references[invoice] = order
invoices[group_key] = invoice
+ invoices_origin[group_key] = [invoice.origin]
+ invoices_name[group_key] = [invoice.name]
elif group_key in invoices:
- vals = {}
- if order.name not in invoices[group_key].origin.split(', '):
- vals['origin'] = invoices[group_key].origin + ', ' + order.name
- if order.client_order_ref and order.client_order_ref not in invoices[group_key].name.split(', ') and order.client_order_ref != invoices[group_key].name:
- vals['name'] = invoices[group_key].name + ', ' + order.client_order_ref
- invoices[group_key].write(vals)
+ if order.name not in invoices_origin[group_key]:
+ invoices_origin[group_key].append(order.name)
+ if order.client_order_ref and order.client_order_ref not in invoices_name[group_key]:
+ invoices_name[group_key].append(order.client_order_ref)
+
if line.qty_to_invoice > 0:
line.invoice_line_create(invoices[group_key].id, line.qty_to_invoice)
elif line.qty_to_invoice < 0 and final:
@@ -452,6 +456,10 @@ class SaleOrder(models.Model):
if order not in references[invoices[group_key]]:
references[invoices[group_key]] |= order
+ for group_key in invoices:
+ invoices[group_key].write({'name': ', '.join(invoices_name[group_key]),
+ 'origin': ', '.join(invoices_origin[group_key])})
+
if not invoices:
raise UserError(_('There is no invoiceable line.'))
diff --git a/addons/sale_crm/i18n/tr.po b/addons/sale_crm/i18n/tr.po
index b3a2b14bda4..7c9eb2ca7da 100644
--- a/addons/sale_crm/i18n/tr.po
+++ b/addons/sale_crm/i18n/tr.po
@@ -8,14 +8,15 @@
# Esin Kandemir <esaykandemir@gmail.com>, 2017
# Ediz Duman <neps1192@gmail.com>, 2017
# Murat Kaplan <muratk@projetgrup.com>, 2017
-# Martin Trigaux <mat@odoo.com>, 2017
+# Martin Trigaux, 2017
+# Umur Akın <umura@projetgrup.com>, 2018
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server saas~11.1\n"
+"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-12-13 14:37+0000\n"
-"PO-Revision-Date: 2017-12-13 14:37+0000\n"
-"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n"
+"POT-Creation-Date: 2018-03-22 14:10+0000\n"
+"PO-Revision-Date: 2018-03-22 14:10+0000\n"
+"Last-Translator: Umur Akın <umura@projetgrup.com>, 2018\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -39,9 +40,9 @@ msgid "Invoice"
msgstr "Fatura"
#. module: sale_crm
-#: model:ir.model.fields,field_description:sale_crm.field_res_users_target_sales_invoiced
+#: model:ir.model.fields,field_description:sale_crm.field_res_users__target_sales_invoiced
msgid "Invoiced in Sales Orders Target"
-msgstr ""
+msgstr "Satış Siparişi Hedefinde Faturalandı"
#. module: sale_crm
#: model:ir.model,name:sale_crm.model_crm_lead
@@ -64,17 +65,17 @@ msgid "New Quotation"
msgstr "Yeni Teklif"
#. module: sale_crm
-#: model:ir.model.fields,field_description:sale_crm.field_crm_lead_sale_number
+#: model:ir.model.fields,field_description:sale_crm.field_crm_lead__sale_number
msgid "Number of Quotations"
msgstr "Teklif Sayısı"
#. module: sale_crm
-#: model:ir.model.fields,field_description:sale_crm.field_sale_order_opportunity_id
+#: model:ir.model.fields,field_description:sale_crm.field_sale_order__opportunity_id
msgid "Opportunity"
msgstr "Fırsat"
#. module: sale_crm
-#: model:ir.model.fields,field_description:sale_crm.field_crm_lead_order_ids
+#: model:ir.model.fields,field_description:sale_crm.field_crm_lead__order_ids
msgid "Orders"
msgstr "Siparişler"
@@ -99,7 +100,7 @@ msgstr "Teklifler"
#. module: sale_crm
#: model:ir.actions.act_window,name:sale_crm.sale_action_orders
msgid "Sale orders"
-msgstr ""
+msgstr "Satış siparişleri"
#. module: sale_crm
#: model:ir.model,name:sale_crm.model_crm_team
@@ -107,17 +108,17 @@ msgid "Sales Channel"
msgstr "Satış Ekibi"
#. module: sale_crm
-#: model:ir.model.fields,field_description:sale_crm.field_crm_lead_sale_amount_total
+#: model:ir.model.fields,field_description:sale_crm.field_crm_lead__sale_amount_total
msgid "Sum of Orders"
msgstr "Siparişlerin Toplamı"
#. module: sale_crm
-#: model:ir.model.fields,field_description:sale_crm.field_sale_order_tag_ids
+#: model:ir.model.fields,field_description:sale_crm.field_sale_order__tag_ids
msgid "Tags"
msgstr "Etiketler"
#. module: sale_crm
-#: model:ir.model.fields,help:sale_crm.field_crm_lead_sale_amount_total
+#: model:ir.model.fields,help:sale_crm.field_crm_lead__sale_amount_total
msgid "Untaxed Total of Confirmed Orders"
msgstr "Onaylı Siparişlerin Vergi Hariç Toplamı"
diff --git a/addons/sale_payment/i18n/tr.po b/addons/sale_payment/i18n/tr.po
index 3eb03b35e68..115b2b54e86 100644
--- a/addons/sale_payment/i18n/tr.po
+++ b/addons/sale_payment/i18n/tr.po
@@ -109,7 +109,7 @@ msgstr ""
#. module: sale_payment
#: model:ir.ui.view,arch_db:sale_payment.crm_team_salesteams_view_kanban_inherit_website_portal_sale
msgid "Awaiting Payments"
-msgstr ""
+msgstr "Beklemedeki Ödemeler"
#. module: sale_payment
#: code:addons/sale_payment/controllers/payment.py:52
@@ -145,7 +145,7 @@ msgstr ""
#: code:addons/sale_payment/controllers/payment.py:49
#, python-format
msgid "Pay"
-msgstr ""
+msgstr "Öde"
#. module: sale_payment
#: code:addons/sale_payment/models/payment.py:201
@@ -196,7 +196,7 @@ msgstr "Teklif"
#. module: sale_payment
#: model:ir.model.fields,field_description:sale_payment.field_payment_transaction__so_state
msgid "Sale Order State"
-msgstr ""
+msgstr "Satış Siparişi Durumu"
#. module: sale_payment
#: model:ir.model,name:sale_payment.model_crm_team
diff --git a/addons/sale_payment/models/payment.py b/addons/sale_payment/models/payment.py
index 8076addab09..831af37550f 100644
--- a/addons/sale_payment/models/payment.py
+++ b/addons/sale_payment/models/payment.py
@@ -3,6 +3,7 @@
import logging
from odoo import api, fields, models, _
+from odoo.exceptions import UserError
from odoo.tools import float_compare
_logger = logging.getLogger(__name__)
@@ -84,8 +85,16 @@ class PaymentTransaction(models.Model):
# force_company needed for company_dependent fields
ctx_company = {'company_id': self.sale_order_id.company_id.id,
'force_company': self.sale_order_id.company_id.id}
- created_invoice = self.sale_order_id.with_context(**ctx_company).action_invoice_create()
- created_invoice = self.env['account.invoice'].browse(created_invoice).with_context(**ctx_company)
+
+ # We might fail to create the invoice because there is no invoiceable lines. This will
+ # raise a UserError and break the workflow. Better catch the error.
+ try:
+ created_invoice = self.sale_order_id.with_context(**ctx_company).action_invoice_create()
+ created_invoice = self.env['account.invoice'].browse(created_invoice).with_context(**ctx_company)
+ except UserError:
+ _logger.warning('<%s> transaction completed, could not auto-generate invoice for %s (ID %s)',
+ self.acquirer_id.provider, self.sale_order_id.name, self.sale_order_id.id, exc_info=True)
+ return
if created_invoice:
_logger.info('<%s> transaction completed, auto-generated invoice %s (ID %s) for %s (ID %s)',
diff --git a/addons/sale_stock/i18n/nl.po b/addons/sale_stock/i18n/nl.po
index e6f44988c9f..1ae548aa691 100644
--- a/addons/sale_stock/i18n/nl.po
+++ b/addons/sale_stock/i18n/nl.po
@@ -290,7 +290,7 @@ msgstr "Verpakking"
#. module: sale_stock
#: model:ir.model.fields,field_description:sale_stock.field_res_config_settings__default_picking_policy
msgid "Picking Policy"
-msgstr ""
+msgstr "Levering policy"
#. module: sale_stock
#: model:ir.model.fields,field_description:sale_stock.field_sale_order__picking_ids
diff --git a/addons/sale_stock/i18n/tr.po b/addons/sale_stock/i18n/tr.po
index 85113c732d6..207a5953d2f 100644
--- a/addons/sale_stock/i18n/tr.po
+++ b/addons/sale_stock/i18n/tr.po
@@ -9,13 +9,14 @@
# Güven YILMAZ <guvenyilmaz@outlook.com.tr>, 2017
# Hüseyin Cem Aras <hcemaras@gmail.com>, 2017
# Ayhan KIZILTAN <akiziltan76@hotmail.com>, 2018
+# Umur Akın <umura@projetgrup.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
-"Last-Translator: Ayhan KIZILTAN <akiziltan76@hotmail.com>, 2018\n"
+"Last-Translator: Umur Akın <umura@projetgrup.com>, 2018\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -242,6 +243,9 @@ msgid ""
"for delivery that many days earlier than the actual promised date, to cope "
"with unexpected delays in the supply chain."
msgstr ""
+"Müşterilere söz verilen tarihler için hata payı. Ürünler, tedarik zincirinde"
+" beklenmedik gecikmelerle başa çıkmak için gerçek vaat edilen tarihten "
+"önceki günlerden daha uzun bir süre önce teslimat için planlanacaktır."
#. module: sale_stock
#: model:ir.model.fields,help:sale_stock.field_res_company__security_lead
diff --git a/addons/sale_timesheet/i18n/tr.po b/addons/sale_timesheet/i18n/tr.po
index db55029396b..5095908ef3f 100644
--- a/addons/sale_timesheet/i18n/tr.po
+++ b/addons/sale_timesheet/i18n/tr.po
@@ -8,13 +8,14 @@
# Gökhan Erdoğdu <gokhan.erdogdu@mechsoft.com.tr>, 2017
# Murat Kaplan <muratk@projetgrup.com>, 2017
# Martin Trigaux, 2017
+# Umur Akın <umura@projetgrup.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
-"Last-Translator: Martin Trigaux, 2017\n"
+"Last-Translator: Umur Akın <umura@projetgrup.com>, 2018\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -180,7 +181,7 @@ msgstr "Faturalanan"
#. module: sale_timesheet
#: model:ir.model.fields,field_description:sale_timesheet.field_sale_order_line__is_service
msgid "Is a Service"
-msgstr ""
+msgstr "Hizmet "
#. module: sale_timesheet
#: model:ir.ui.view,arch_db:sale_timesheet.product_template_search_view_sale_timesheet
@@ -226,6 +227,8 @@ msgid ""
"On Sales order confirmation, this product can generate a project and/or "
"task. From those, you can track the service you are selling."
msgstr ""
+"Satış siparişi onayının üzerine, bu ürün bir proje/görev oluşturabilir. "
+"Bunlardan, sattığınız hizmeti takip edebilirsiniz."
#. module: sale_timesheet
#: selection:product.template,service_policy:0
@@ -442,7 +445,7 @@ msgstr "Zaman Çizelgesi"
#. module: sale_timesheet
#: model:ir.model.fields,field_description:sale_timesheet.field_hr_employee__timesheet_cost
msgid "Timesheet Cost"
-msgstr ""
+msgstr "Zaman Çizelgesi Maliyeti"
#. module: sale_timesheet
#: model:ir.model.fields,field_description:sale_timesheet.field_sale_order__timesheet_count
@@ -452,7 +455,7 @@ msgstr "Zaman Çizelgesi etkinlikler"
#. module: sale_timesheet
#: model:ir.model.fields,field_description:sale_timesheet.field_sale_order__timesheet_ids
msgid "Timesheet activities associated to this sale"
-msgstr ""
+msgstr "Zaman çizelgesi etkinlikleri bu satışla birleştirildi."
#. module: sale_timesheet
#: code:addons/sale_timesheet/controllers/main.py:105
diff --git a/addons/sale_timesheet/models/project.py b/addons/sale_timesheet/models/project.py
index 4d3a45876f7..2750a45a00b 100644
--- a/addons/sale_timesheet/models/project.py
+++ b/addons/sale_timesheet/models/project.py
@@ -95,7 +95,7 @@ class ProjectTask(models.Model):
@api.model
def create(self, values):
# sub task has the same so line than their parent
- if 'parent_id' in values:
+ if 'parent_id' in values and values['parent_id']:
values['sale_line_id'] = self.env['project.task'].browse(values['parent_id']).sudo().sale_line_id.id
return super(ProjectTask, self).create(values)
diff --git a/addons/sales_team/i18n/tr.po b/addons/sales_team/i18n/tr.po
index 280dc80f495..24147a59be2 100644
--- a/addons/sales_team/i18n/tr.po
+++ b/addons/sales_team/i18n/tr.po
@@ -9,13 +9,14 @@
# Ediz Duman <neps1192@gmail.com>, 2017
# Levent Karakaş <levent@mektup.at>, 2017
# Ayhan KIZILTAN <akiziltan76@hotmail.com>, 2017
+# Umur Akın <umura@projetgrup.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
-"Last-Translator: Ayhan KIZILTAN <akiziltan76@hotmail.com>, 2017\n"
+"Last-Translator: Umur Akın <umura@projetgrup.com>, 2018\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -153,13 +154,15 @@ msgstr "Görünüm Adı"
#. module: sales_team
#: model:ir.model.fields,field_description:sales_team.field_crm_team__favorite_user_ids
msgid "Favorite Members"
-msgstr ""
+msgstr "Favori Üyeler"
#. module: sales_team
#: model:ir.model.fields,help:sales_team.field_crm_team__is_favorite
msgid ""
"Favorite teams to display them in the dashboard and access them easily."
msgstr ""
+"Favori takımlarınızı panelde görüntüleyebilir ve onlara kolayca "
+"erişebilirsiniz."
#. module: sales_team
#: model:ir.ui.view,arch_db:sales_team.crm_team_view_form
@@ -202,6 +205,8 @@ msgid ""
"If set, this sales channel will be used for sales and assignations related "
"to this partner"
msgstr ""
+"Eğer ayarlanırsa, bu satış kanalı satış ve iş ortağı ile ilgili atamalar "
+"için kullanılacaktır."
#. module: sales_team
#: model:ir.model.fields,help:sales_team.field_crm_team__active
@@ -209,6 +214,8 @@ msgid ""
"If the active field is set to false, it will allow you to hide the sales "
"channel without removing it."
msgstr ""
+"Eğer etkin alan yanlış olarak ayarlanırsa, bu satış kanalını kaldırmadan "
+"gizlemenize izin verecektir."
#. module: sales_team
#: selection:crm.team,dashboard_graph_model:0
@@ -243,7 +250,7 @@ msgstr "Son Hafta"
#. module: sales_team
#: selection:crm.team,dashboard_graph_period:0
msgid "Last Year"
-msgstr ""
+msgstr "Geçen Sene"
#. module: sales_team
#: selection:crm.team,dashboard_graph_type:0
@@ -269,7 +276,7 @@ msgstr "Favorilerim"
#: code:addons/sales_team/models/crm_team.py:255
#, python-format
msgid "Not Defined"
-msgstr ""
+msgstr "Tanımlanmamış"
#. module: sales_team
#: selection:crm.team,dashboard_graph_model:0
@@ -314,6 +321,8 @@ msgid ""
"Sales Channel the user is member of. Used to compute the members of a sales "
"channel through the inverse one2many"
msgstr ""
+"Satış kanalı kullanıcı üyesidir. Ters one2many üzerinden satış kanalı "
+"üyelerini hesaplamak için kullanılır."
#. module: sales_team
#: model:ir.actions.act_window,name:sales_team.sales_team_config_action
@@ -353,7 +362,7 @@ msgstr "Ayarlar"
#. module: sales_team
#: model:ir.model.fields,field_description:sales_team.field_crm_team__is_favorite
msgid "Show on dashboard"
-msgstr ""
+msgstr "Panelde göster"
#. module: sales_team
#: model:ir.ui.view,arch_db:sales_team.crm_team_salesteams_search
@@ -368,7 +377,7 @@ msgstr "Satış Ekip Üyeleri"
#. module: sales_team
#: model:ir.model.fields,help:sales_team.field_crm_team__color
msgid "The color of the channel"
-msgstr ""
+msgstr "Kanalın rengi"
#. module: sales_team
#: model:ir.model.fields,help:sales_team.field_crm_team__reply_to
@@ -376,11 +385,13 @@ msgid ""
"The email address put in the 'Reply-To' of all emails sent by Odoo about "
"cases in this sales channel"
msgstr ""
+"Odoo tarafından bu satış kanalındaki vakalarla ilgili gönderilen tüm "
+"e-postaların 'Yanıt Ver' bölümünde yer alan e-posta adresi"
#. module: sales_team
#: model:ir.model.fields,help:sales_team.field_crm_team__dashboard_graph_model
msgid "The graph this channel will display in the Dashboard.\n"
-msgstr ""
+msgstr "Bu kanal grafiği panel üzerinde gösterilecek.\n"
#. module: sales_team
#: model:ir.model.fields,help:sales_team.field_crm_team__dashboard_graph_period
@@ -390,13 +401,13 @@ msgstr "UNTRANSLATED"
#. module: sales_team
#: model:ir.model.fields,help:sales_team.field_crm_team__dashboard_graph_type
msgid "The type of graph this channel will display in the dashboard."
-msgstr ""
+msgstr "Bu kanalın grafik türü panel üzerinde gösterilecek."
#. module: sales_team
#: model:ir.model.fields,help:sales_team.field_crm_team__team_type
msgid ""
"The type of this channel, it will define the resources this channel uses."
-msgstr ""
+msgstr "Bu kanalın türü, kanalın kullandığı kaynakları tanımlayacaktır."
#. module: sales_team
#: model:ir.model.fields,field_description:sales_team.field_crm_team__dashboard_graph_type
@@ -417,6 +428,8 @@ msgid ""
"Use sales channels to organize your sales departments. \n"
" Each channel will work with a separate pipeline."
msgstr ""
+"Satış departmanınızı organize etmek için satış kanallarını kullanın\n"
+"Her kanal ayrı kanallar ile çalışır."
#. module: sales_team
#: model:res.groups,name:sales_team.group_sale_salesman_all_leads
diff --git a/addons/stock/i18n/nl.po b/addons/stock/i18n/nl.po
index c5d9c07c801..90ec0e3c55a 100644
--- a/addons/stock/i18n/nl.po
+++ b/addons/stock/i18n/nl.po
@@ -366,17 +366,17 @@ msgstr "Actief"
#. module: stock
#: model:ir.actions.act_window,help:stock.action_production_lot_form
msgid "Add a lot/serial number"
-msgstr ""
+msgstr "Voeg een partij/serienummer toe"
#. module: stock
#: model:ir.actions.act_window,help:stock.action_location_form
msgid "Add a new location"
-msgstr ""
+msgstr "Voeg een nieuwe locatie toe"
#. module: stock
#: model:ir.actions.act_window,help:stock.action_routes_form
msgid "Add a new route"
-msgstr ""
+msgstr "Voeg een nieuwe route toe"
#. module: stock
#: model:ir.model.fields,help:stock.field_res_config_settings__group_stock_adv_location
diff --git a/addons/stock/i18n/tr.po b/addons/stock/i18n/tr.po
index 0c1443817db..5eb3786cd5d 100644
--- a/addons/stock/i18n/tr.po
+++ b/addons/stock/i18n/tr.po
@@ -43,6 +43,9 @@ msgid ""
"\n"
"Blocking: %s"
msgstr ""
+"\n"
+"\n"
+"Bloklama: %s"
#. module: stock
#: code:addons/stock/models/stock_move.py:320
@@ -66,6 +69,12 @@ msgid ""
" * Done: has been processed, can't be modified or cancelled anymore.\n"
" * Cancelled: has been cancelled, can't be confirmed anymore."
msgstr ""
+" * Taslak: henüz onaylanmamış ve onaylanana kadar planlanmayacaktır\n"
+"* Başka Bir İşlem Bekliyor: otomatik olarak hazır olmadan önce yürütülmek üzere başka bir hareket bekliyor (örn. Sipariş Verme Akışı)\n"
+"* Bekliyor: Eğer göndermek için hazır değilse, gerekli ürünler saklanamaz\n"
+"* Hazır: Ürün saklanmış ve gönderilmeye hazır. Eğer sevkıyat poliçesi 'olabildiğince çabuk' ise herhangi bir ürün saklandığında gönderilecektir. \n"
+"* Yapıldı: işlem gerçekleşmiş, değiştirilemez ve iptal edilemez.\n"
+"* İptal Edildi: iptal edilmiştir, artık onaylanamaz."
#. module: stock
#: model:ir.ui.view,arch_db:stock.view_move_picking_form
@@ -112,6 +121,14 @@ msgid ""
"* Production: Virtual counterpart location for production operations: this location consumes the raw material and produces finished products\n"
"* Transit Location: Counterpart location that should be used in inter-company or inter-warehouses operations"
msgstr ""
+"* Tedarikçi Lokasyonu: Tedarikçilerinizden gelen ürünlerin kaynak konumunu temsil eden sanal konum\n"
+"* Görünüm: Deponuz için, alt konumlarını birleştiren bir hiyerarşik yapı oluşturan sanal konum; doğrudan ürünleri içeremez\n"
+"* İç Konum: Kendi depolarınızdaki fiziksel konumlar,\n"
+"* Müşteri Konumu: Müşterilerinize gönderilen ürünler için hedef konumu temsil eden sanal konum\n"
+"* Envanter: Stok seviyelerini düzeltmek için envanter operasyonları muadili olarak görev yapan sanal konum(Fiziksel envanterler)\n"
+"* Satınalma: Kaynak (tedarikçi veya üretim) henüz bilinmiyorken satınalma operasyonları geçici muadili olarak görev yapan sanal konum. Satınalma zamanlayıcısı çalışmayı durdurduğunda, bu konum boş olmalıdır.\n"
+"* Üretim: Üretim operasyonları için sanal muadil: bu konum işlenmemiş materyalleri sarf ederek tamamlanmış ürün oluşturur\n"
+"* Transit Konumları: Şirket içi veya depolar arası operasyonlarda kullanılması gereken muhatap konum "
#. module: stock
#: model:ir.ui.view,arch_db:stock.exception_on_picking
@@ -294,13 +311,13 @@ msgstr "Paket"
#: code:addons/stock/models/stock_move_line.py:94
#, python-format
msgid "A done move line should never have a reserved quantity."
-msgstr ""
+msgstr "Bir bitmiş hareket satırında rezerve edilmiş miktar olmamalıdır."
#. module: stock
#: code:addons/stock/models/stock_quant.py:80
#, python-format
msgid "A serial number should only be linked to a single product."
-msgstr ""
+msgstr "Bir seri numarası sadece bir ürüne bağlanmış olmalıdır."
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_move__product_type
@@ -358,6 +375,8 @@ msgid ""
"Add and customize route operations to process product moves in your warehouse(s): e.g. unload > quality control > stock for incoming products, pick > pack > ship for outgoing products. \n"
" You can also set putaway strategies on warehouse locations in order to send incoming products into specific child locations straight away (e.g. specific bins, racks)."
msgstr ""
+"Deponuzda ki ürün hareketleri işlemlerini yönetmek için rota ekleyin ve özelleştirin: Örn. Mal kabul > kalite kontrol > gelen ürünlerin depolanması, seçim > paketleme > giden ürünün sevkıyatı.\n"
+"Ayrıca gelen ürünleri göndermek için belirli alt konumları depo konum stratejinizde ayarlayabilirsiniz. ( Örn. belirli ambarlar, raflar)"
#. module: stock
#: model:ir.ui.view,arch_db:stock.res_config_settings_view_form
@@ -368,6 +387,8 @@ msgid ""
"strategies on warehouse locations in order to send incoming products into "
"specific child locations straight away (e.g. specific bins, racks)."
msgstr ""
+"Deponuzda ki ürün hareketleri işlemlerini yönetmek için rota ekleyin ve özelleştirin: Örn. Mal kabul > kalite kontrol > gelen ürünlerin depolanması, seçim > paketleme > giden ürünün sevkıyatı.\n"
+"Ayrıca gelen ürünleri göndermek için belirli alt konumları depo konum stratejinizde ayarlayabilirsiniz. ( Örn. belirli ambarlar, raflar)"
#. module: stock
#: model:ir.ui.view,arch_db:stock.view_picking_form
@@ -439,7 +460,7 @@ msgstr "Tüm iade hareketleri"
#: code:addons/stock/models/stock_quant.py:86
#, python-format
msgid "An incoming date cannot be set to an untracked product."
-msgstr ""
+msgstr "Geliş tarihi izlenmeyen ürüne ayarlanamaz."
#. module: stock
#: model:ir.ui.view,arch_db:stock.stock_location_route_form_view
@@ -484,6 +505,8 @@ msgid ""
"Are you sure you want to confirm this operation? This may lead to "
"inconsistencies in your inventory."
msgstr ""
+"Bu operasyonu onaylamak istediğinize emin misiniz? Bu stoğunuzda "
+"tutarsızlığa neden olabilir."
#. module: stock
#: model:ir.ui.view,arch_db:stock.view_overprocessed_transfer
@@ -662,6 +685,11 @@ msgid ""
"current stock) to gather products. If we want to chain moves and have this "
"one to wait for the previous, this second option should be chosen."
msgstr ""
+"Varsayılan olarak, sistem kaynak konumdaki stoktan alacak ve pasif olarak "
+"stok durumunun uygun olmasını bekleyecektir. Diğer olasılık, ürün toplamak "
+"için kaynak konumda doğrudan bir satınalma yaratmanıza (dolayısıyla mevcut "
+"stoğunuzu yok saymanıza) olanak tanır. Bağlantılı hareket oluşturmak ve bir "
+"önceki hareketi beklemek istiyorsak, bu ikinci seçenek daha uygun olabilir."
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_location__active
@@ -770,12 +798,12 @@ msgstr "Ürün Miktarını Değiştir"
#. module: stock
#: model:ir.ui.view,arch_db:stock.res_config_settings_view_form
msgid "Change must be higher than"
-msgstr ""
+msgstr "Değişiklik daha yüksek olmalıdır"
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_move_line__move_id
msgid "Change to a better name"
-msgstr ""
+msgstr "Daha iyi bir isimle değiştir"
#. module: stock
#: model:ir.ui.view,arch_db:stock.view_picking_form
@@ -785,7 +813,7 @@ msgstr "Uygunluk Kontrolü"
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_picking__has_packages
msgid "Check the existence of destination packages on move lines"
-msgstr ""
+msgstr "Hareket satırlarındaki paketlerin var olan duraklarını kontrol edin."
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_picking__move_line_exist
@@ -1000,7 +1028,7 @@ msgstr "Bekleyen Transfer Sayısı"
#. module: stock
#: model:ir.ui.view,arch_db:stock.view_template_property_form
msgid "Counterpart Locations"
-msgstr ""
+msgstr "Karşı Konum"
#. module: stock
#: model:ir.ui.view,arch_db:stock.view_backorder_confirmation
@@ -1193,7 +1221,7 @@ msgstr "Kümülatif Miktar"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_quant_package__current_destination_location_id
msgid "Current Destination Location"
-msgstr ""
+msgstr "Mevcut Hedef Konumu"
#. module: stock
#: selection:stock.quantity.history,compute_at_date:0
@@ -1213,7 +1241,7 @@ msgstr "Mevcut Transfer Hareketi"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_quant_package__current_source_location_id
msgid "Current Source Location"
-msgstr ""
+msgstr "Mevcut Kaynak Konumu"
#. module: stock
#: model:ir.actions.act_window,name:stock.location_open_quants
@@ -1489,7 +1517,7 @@ msgstr "Teslimat Emirleri"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_res_config_settings__group_stock_tracking_lot
msgid "Delivery Packages"
-msgstr ""
+msgstr "Teslimat Paketi"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_warehouse__delivery_route_id
@@ -1583,13 +1611,13 @@ msgstr "Hedef Konum"
#. module: stock
#: model:ir.ui.view,arch_db:stock.message_body
msgid "Destination Location:"
-msgstr ""
+msgstr "Hedef Konum :"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_move__move_dest_ids
#: model:ir.ui.view,arch_db:stock.view_move_form
msgid "Destination Moves"
-msgstr ""
+msgstr "Hedef Hareket"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_move_line__result_package_id
@@ -1600,7 +1628,7 @@ msgstr "Hedef Paketi"
#. module: stock
#: model:ir.ui.view,arch_db:stock.message_body
msgid "Destination Package :"
-msgstr ""
+msgstr "Hedef Paketi :"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_move__route_ids
@@ -1612,7 +1640,7 @@ msgstr "Hedef rota"
#: model:ir.ui.view,arch_db:stock.view_picking_form
#, python-format
msgid "Detailed Operations"
-msgstr ""
+msgstr "Detaylı Operasyonlar"
#. module: stock
#: model:ir.ui.view,arch_db:stock.stock_location_path_form
@@ -1622,7 +1650,7 @@ msgstr "Detaylar"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_move__show_details_visible
msgid "Details Visible"
-msgstr ""
+msgstr "Görünür Detaylar"
#. module: stock
#: model:ir.model.fields,help:stock.field_procurement_rule__procure_method
@@ -1703,7 +1731,7 @@ msgstr "Tarihe Göre Tamamlanan Transferler "
#. module: stock
#: model:ir.ui.view,arch_db:stock.res_config_settings_view_form
msgid "Don’t propagate scheduling changes through chains of operations"
-msgstr ""
+msgstr "Zamanlama değişikliklerini işlem zincirleriyle yaymayın"
#. module: stock
#: model:ir.ui.view,arch_db:stock.view_picking_internal_search
@@ -1725,12 +1753,12 @@ msgstr "EX WORKS"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_picking__entire_package_ids
msgid "Entire Package"
-msgstr ""
+msgstr "Bütün Paket"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_picking__entire_package_detail_ids
msgid "Entire Package Detail"
-msgstr ""
+msgstr "Bütün Paket Detayı"
#. module: stock
#. openerp-web
@@ -1885,12 +1913,12 @@ msgstr "Kimden:"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_move_line__from_loc
msgid "From Loc"
-msgstr ""
+msgstr "Nereden?"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_move__show_reserved_availability
msgid "From Supplier"
-msgstr ""
+msgstr "Tedarikçiden"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_location__complete_name
@@ -1943,6 +1971,7 @@ msgstr ""
#: model:ir.ui.view,arch_db:stock.res_config_settings_view_form
msgid "Get informative or blocking warnings on partners"
msgstr ""
+"İş ortaklarınız hakkında bilgilendirici ya da engelleyici uyarıları alın."
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_fixed_putaway_strat__sequence
@@ -2000,7 +2029,7 @@ msgstr "Paket İşlemi mi?"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_picking__has_packages
msgid "Has Packages"
-msgstr ""
+msgstr "Paketleri Var"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_picking__has_scrap_move
@@ -2143,6 +2172,8 @@ msgid ""
"If the picking is unlocked you can edit initial demand (for a draft picking)"
" or done quantities (for a done picking)."
msgstr ""
+"Eğer seçim kilitlenmemiş ise,ilk talebi düzenleyebilir (bir taslak seçimi "
+"için) ya da miktarı tamamlayabilirsiniz (yapılmış seçimler için)."
#. module: stock
#: model:ir.ui.view,arch_db:stock.stock_location_path_filter
@@ -2156,6 +2187,8 @@ msgid ""
"If this checkbox is ticked, Odoo will show which products are reserved "
"(lot/serial number, source location, source package)."
msgstr ""
+"Eğer kutucuk işaretli ise, Odoo odoo hangi ürünlerin rezerve olduğunu "
+"gösterecek (lot/seri numarası, kaynak konumu, kaynak paketi)."
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_move__show_operations
@@ -2165,6 +2198,9 @@ msgid ""
" operations. If not, the picking lines will represent an aggregate of "
"detailed stock operations."
msgstr ""
+"Eğer kutucuk işaretli ise, seçim satırları detaylı stok operasyonlarını "
+"temsil eder. Eğer değilse, seçim satırları stok işlemlerinin bir toplamını "
+"temsil eder."
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_picking_type__use_create_lots
@@ -2238,12 +2274,12 @@ msgstr "Hemen transfer?"
#. module: stock
#: selection:res.config.settings,module_procurement_jit:0
msgid "Immediately after sales order confirmation"
-msgstr ""
+msgstr "Satış sipariş onayından hemen sonra "
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_move_line__in_entire_package
msgid "In Entire Package"
-msgstr ""
+msgstr "Bütün Paket İçinde"
#. module: stock
#: selection:stock.inventory,state:0
@@ -2489,7 +2525,7 @@ msgstr "Envanter Satırı"
#. module: stock
#: model:ir.actions.act_window,name:stock.action_inventory_line_tree
msgid "Inventory Lines"
-msgstr ""
+msgstr "Envanter Satırları"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_product_product__property_stock_inventory
@@ -2511,7 +2547,7 @@ msgstr "Envanter Zararı"
#. module: stock
#: model:ir.ui.view,arch_db:stock.view_inventory_filter
msgid "Inventory Product"
-msgstr ""
+msgstr "Stok Ürün"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_inventory__name
@@ -2570,7 +2606,7 @@ msgstr "Kilitli"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_quant_package__is_processed
msgid "Is Processed"
-msgstr ""
+msgstr "İşlendi"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_location__return_location
@@ -2586,12 +2622,12 @@ msgstr "Hurda Konumu Mu?"
#: model:ir.model.fields,field_description:stock.field_stock_move__is_initial_demand_editable
#: model:ir.model.fields,field_description:stock.field_stock_move_line__is_initial_demand_editable
msgid "Is initial demand editable"
-msgstr ""
+msgstr "İlk talep düzenlenebilir"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_move__is_quantity_done_editable
msgid "Is quantity done editable"
-msgstr ""
+msgstr "Gerçekleşmiş miktar düzenlenebilir"
#. module: stock
#: code:addons/stock/models/stock_quant.py:258
@@ -2787,7 +2823,7 @@ msgstr "Bağlantılı Hareketler"
#. module: stock
#: model:ir.ui.view,arch_db:stock.view_inventory_form
msgid "List view of lines"
-msgstr ""
+msgstr "Satırların görünümünü düzenle"
#. module: stock
#: model:ir.ui.view,arch_db:stock.view_location_form
@@ -2903,7 +2939,7 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.message_body
msgid "Lot/Serial :"
-msgstr ""
+msgstr "Lot/Seri"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_change_product_qty__lot_id
@@ -2987,12 +3023,12 @@ msgstr "Lot / Seri Numaralarını Yönet"
#. module: stock
#: model:res.groups,name:stock.group_stock_multi_locations
msgid "Manage Multiple Stock Locations"
-msgstr ""
+msgstr "Birden Fazla Stok Konumu Yönetin"
#. module: stock
#: model:res.groups,name:stock.group_stock_multi_warehouses
msgid "Manage Multiple Warehouses"
-msgstr ""
+msgstr "Birden Fazla Depo Yönetin"
#. module: stock
#: model:res.groups,name:stock.group_tracking_lot
@@ -3027,7 +3063,7 @@ msgstr "Manuel Operasyon"
#. module: stock
#: selection:res.config.settings,module_procurement_jit:0
msgid "Manually or based on automatic scheduler"
-msgstr ""
+msgstr "Manuel ya da otomatik zamanlayıcı"
#. module: stock
#: selection:procurement.rule,action:0
@@ -3121,7 +3157,7 @@ msgstr "Hareket"
#. module: stock
#: model:ir.ui.view,arch_db:stock.view_stock_move_operations
msgid "Move Detail"
-msgstr ""
+msgstr "Hareket Detayı"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_picking__picking_type_entire_packs
@@ -3149,7 +3185,7 @@ msgstr ""
#: model:ir.ui.view,arch_db:stock.view_move_line_form
#: model:ir.ui.view,arch_db:stock.view_move_line_tree
msgid "Move Lines"
-msgstr ""
+msgstr "Hareket Satırları"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_procurement_rule__procure_method
@@ -3194,12 +3230,12 @@ msgstr ""
#. module: stock
#: model:ir.model.fields,field_description:stock.field_res_config_settings__group_stock_adv_location
msgid "Multi-Step Routes"
-msgstr ""
+msgstr "Çok Adımlı Rotalar"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_res_config_settings__group_stock_multi_warehouses
msgid "Multi-Warehouses"
-msgstr ""
+msgstr "Çoklu Depo"
#. module: stock
#: model:ir.ui.view,arch_db:stock.view_picking_internal_search
@@ -3234,7 +3270,7 @@ msgstr "Yeni"
#: code:addons/stock/models/stock_picking.py:634
#, python-format
msgid "New Move:"
-msgstr ""
+msgstr "Yeni Hareket :"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_change_product_qty__new_quantity
@@ -3264,7 +3300,7 @@ msgstr "Uyarı Yok"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_res_config_settings__use_propagation_minimum_delta
msgid "No Rescheduling Propagation"
-msgstr ""
+msgstr "Planlanmayan Yayılma"
#. module: stock
#: selection:product.template,tracking:0
@@ -3285,14 +3321,14 @@ msgstr "Eksi(-) miktara izin verilmez"
#. module: stock
#: model:ir.ui.view,arch_db:stock.report_stock_inventory
msgid "No operation made on this lot."
-msgstr ""
+msgstr "Bu lotta operasyon yapılmadı"
#. module: stock
#: code:addons/stock/models/procurement.py:184
#, python-format
msgid ""
"No procurement rule found. Please verify the configuration of your routes"
-msgstr ""
+msgstr "Satış kuralı bulunamadı. Lütfen rota yapılandırmalarınızı doğrulayın."
#. module: stock
#: code:addons/stock/wizard/stock_picking_return.py:58
@@ -3331,7 +3367,7 @@ msgstr "Notlar"
#: code:addons/stock/models/stock_picking.py:582
#, python-format
msgid "Nothing to check the availability for."
-msgstr ""
+msgstr "Uygunluğu kontrol edebilecek bir şey yok."
#. module: stock
#: model:ir.model.fields,field_description:stock.field_procurement_rule__delay
@@ -3400,7 +3436,7 @@ msgstr "Bir ürün kategorisi"
#: code:addons/stock/models/stock_inventory.py:111
#, python-format
msgid "One product for a specific owner"
-msgstr ""
+msgstr "Belirli mal sahibi için bir ürün"
#. module: stock
#: code:addons/stock/models/stock_inventory.py:107
@@ -3429,6 +3465,7 @@ msgid ""
"Operation Type determines the way the picking should be shown in the view, "
"reports, ..."
msgstr ""
+"Operasyon türü toplama yolunun raporlarda gösterilme biçimini belirler,..."
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_picking_type__return_picking_type_id
@@ -3507,7 +3544,7 @@ msgstr "Siparişin Miktarı"
#. module: stock
#: model:ir.ui.view,arch_db:stock.view_move_search
msgid "Orders processed today or scheduled for today"
-msgstr ""
+msgstr "Bugün işlenen ya da bugün planlanan siparişler"
#. module: stock
#: model:ir.ui.view,arch_db:stock.view_move_form
@@ -3567,7 +3604,7 @@ msgstr "Çıkış Konumu"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_overprocessed_transfer__overprocessed_product_name
msgid "Overprocessed Product Name"
-msgstr ""
+msgstr "Fazla işlem görmüş ürün adı"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_inventory_line__partner_id
@@ -3590,7 +3627,7 @@ msgstr "Sahibi "
#. module: stock
#: model:ir.ui.view,arch_db:stock.message_body
msgid "Owner :"
-msgstr ""
+msgstr "Mal Sahibi :"
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_location__partner_id
@@ -3613,7 +3650,7 @@ msgstr "Kâr&Zarar Miktarı"
#: code:addons/stock/static/src/xml/stock_traceability_report_backend.xml:6
#, python-format
msgid "PRINT"
-msgstr ""
+msgstr "YAZDIR"
#. module: stock
#: code:addons/stock/models/stock_warehouse.py:216
@@ -3654,7 +3691,7 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.report_package_barcode
msgid "Package Content"
-msgstr ""
+msgstr "Paket İçeriği"
#. module: stock
#: model:ir.ui.view,arch_db:stock.quant_package_search_view
@@ -3670,7 +3707,7 @@ msgstr "Paket Referansı"
#. module: stock
#: model:ir.ui.view,arch_db:stock.report_package_barcode_small
msgid "Package Reference:"
-msgstr ""
+msgstr "Paket Referansı:"
#. module: stock
#: model:ir.ui.view,arch_db:stock.view_quant_package_form
@@ -3686,7 +3723,7 @@ msgstr "Paket Türü"
#: model:ir.ui.view,arch_db:stock.report_package_barcode
#: model:ir.ui.view,arch_db:stock.report_package_barcode_small
msgid "Package Type:"
-msgstr ""
+msgstr "Paket Türü"
#. module: stock
#: model:ir.actions.act_window,name:stock.action_package_view
@@ -3877,13 +3914,13 @@ msgstr "Pivot"
#. module: stock
#: model:ir.ui.view,arch_db:stock.stock_picking_type_kanban
msgid "Planned Transfer"
-msgstr ""
+msgstr "Planlanan Transfer"
#. module: stock
#: code:addons/stock/models/stock_picking.py:693
#, python-format
msgid "Please add some lines to move"
-msgstr ""
+msgstr "Hareket için lütfen satır ekleyiniz."
#. module: stock
#: code:addons/stock/models/stock_picking.py:1018
@@ -3900,7 +3937,7 @@ msgstr "Lütfen sıfır olmayan bir miktar girin."
#. module: stock
#: model:ir.ui.view,arch_db:stock.quant_search_view
msgid "Positive Stock"
-msgstr ""
+msgstr "Pozitif Stok"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_move__product_packaging
@@ -3910,7 +3947,7 @@ msgstr "Tercih Edilen Paketleme"
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_move__route_ids
msgid "Preferred route"
-msgstr ""
+msgstr "Tercih edilen rota"
#. module: stock
#: model:ir.ui.view,arch_db:stock.view_picking_form
@@ -3941,17 +3978,17 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.res_config_settings_view_form
msgid "Process operations faster with barcodes"
-msgstr ""
+msgstr "İşlem operasyonları barkodlarla birlikte daha hızlı"
#. module: stock
#: model:ir.ui.view,arch_db:stock.res_config_settings_view_form
msgid "Process picking in batch per worker"
-msgstr ""
+msgstr "Toplama işlemlerini, çalışan başına toplama olarak işleyin."
#. module: stock
#: model:ir.ui.view,arch_db:stock.view_overprocessed_transfer
msgid "Processed more than initial demand"
-msgstr ""
+msgstr "İlk talepten daha fazla ürün işlendi."
#. module: stock
#: selection:stock.location,usage:0
@@ -4010,7 +4047,7 @@ msgstr "Tedarikler"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_move_line__produce_line_ids
msgid "Produce Line"
-msgstr ""
+msgstr "Üretim Hattı "
#. module: stock
#: code:addons/stock/models/product.py:347
@@ -4123,11 +4160,13 @@ msgid ""
"Product this lot/serial number contains. You cannot change it anymore if it "
"has already been moved."
msgstr ""
+"Ürün bu lot/seri numaralarını içeriyor. Eğer numaralar taşındıysa bunu "
+"değiştiremezsiniz."
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_move__has_tracking
msgid "Product with Tracking"
-msgstr ""
+msgstr "İzlenen Ürün"
#. module: stock
#: model:stock.location,name:stock.location_production
@@ -4215,12 +4254,12 @@ msgstr "Yerleştirme Strateji"
#. module: stock
#: model:ir.ui.view,arch_db:stock.view_picking_form
msgid "Put in Pack"
-msgstr ""
+msgstr "Pakete Koy"
#. module: stock
#: model:ir.ui.view,arch_db:stock.res_config_settings_view_form
msgid "Put your products in packs (e.g. parcels, boxes) and track them"
-msgstr ""
+msgstr "Ürünlerinizi pakete koyun (örn: koliler, kutular) ve onları izleyin"
#. module: stock
#: model:ir.ui.view,arch_db:stock.view_putaway
@@ -4255,7 +4294,7 @@ msgstr "Kalite Kontrol Konumu"
#: model:ir.model.fields,field_description:stock.field_stock_warn_insufficient_qty_scrap__quant_ids
#: model:ir.model.fields,field_description:stock.field_stock_warn_insufficient_qty_unbuild__quant_ids
msgid "Quant"
-msgstr ""
+msgstr "Miktar"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_report_stock_forecast__quantity
@@ -4274,7 +4313,7 @@ msgstr "Adet"
#. module: stock
#: model:ir.ui.view,arch_db:stock.message_body
msgid "Quantity :"
-msgstr ""
+msgstr "Miktar :"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_move__quantity_done
@@ -4313,7 +4352,7 @@ msgstr "Miktar eksi olamaz"
#: code:addons/stock/models/stock_move.py:624
#, python-format
msgid "Quantity decreased!"
-msgstr ""
+msgstr "Miktar azaldı!"
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_move__availability
@@ -4333,6 +4372,10 @@ msgid ""
"In a context with a single Warehouse, this includes goods arriving to the Stock Location of this Warehouse, or any of its children.\n"
"Otherwise, this includes goods arriving to any Stock Location with 'internal' type."
msgstr ""
+"Gelmesi gereken ürünlerin miktarı\n"
+"Tek Stok Konumu içeriğinde, bu konuma gelen malları ve alt malları içerir.\n"
+"Tek Depolu içeriğinde, bu Depo Konumuna gelen malları ve alt malları içerir.\n"
+"Yoksa 'iç Tipli' mallar herhangi bir Stok Konumuna gelebilir."
#. module: stock
#: model:ir.model.fields,help:stock.field_product_product__outgoing_qty
@@ -4342,6 +4385,10 @@ msgid ""
"In a context with a single Warehouse, this includes goods leaving the Stock Location of this Warehouse, or any of its children.\n"
"Otherwise, this includes goods leaving any Stock Location with 'internal' type."
msgstr ""
+"Gitmesii gereken ürünlerin miktarı\n"
+"Tek Stok Konumu içeriğinde, bu konumdan giden malları ve alt malları içerir.\n"
+"Tek Depolu içeriğinde, bu Depo Konumundan giden malları ve alt malları içerir.\n"
+"Yoksa 'iç Tipli' mallar herhangi bir Stok Konumuna gelebilir."
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_quant__quantity
@@ -4356,6 +4403,7 @@ msgid ""
"Quantity of reserved products in this quant, in the default unit of measure "
"of the product"
msgstr ""
+"Ürünün varsayılan ölçü biriminde, bu miktardaki ayrılmış ürünlerin miktarı."
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_move__reserved_availability
@@ -4374,7 +4422,7 @@ msgstr "Stoklar"
#: code:addons/stock/models/stock_quant.py:74
#, python-format
msgid "Quants cannot be created for consumables or services."
-msgstr ""
+msgstr "Miktarlar hizmet ya da tüketilebilirlik için oluşturulamaz."
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_picking_type__rate_picking_backorders
@@ -4404,7 +4452,7 @@ msgstr "Gerçek Miktar"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_move_line__product_qty
msgid "Real Reserved Quantity"
-msgstr ""
+msgstr "Gerçek Rezerve Miktarı"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_warehouse__reception_route_id
@@ -4492,7 +4540,7 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.view_picking_form
msgid "Register lots, packs, location"
-msgstr ""
+msgstr "Lot, ambalaj, konum kaydet."
#. module: stock
#: model:ir.ui.view,arch_db:stock.view_picking_internal_search
@@ -4557,6 +4605,8 @@ msgid ""
"Rescheduling applies to any chain of operations (e.g. Make To Order, Pick Pack Ship). In the case of MTO sales, a vendor delay (updated incoming date) impacts the expected delivery date to the customer. \n"
" This option allows to not propagate the rescheduling if the change is not critical."
msgstr ""
+"Yeniden planlama herhangi bir operasyon zincirine uygular (örn: Sipariş Emri, Topla, Paketle, Sevk Et). MTO satışları için, müşteri için beklenen teslimat tarihini, bir tedarikçi gecikmesi etkiler (gelecek zamana güncellenen) .\n"
+"Eğer değişim çok önemli değilse, bu seçenek yeniden planlamanın yayılmasına izin vermez."
#. module: stock
#: model:ir.ui.view,arch_db:stock.res_config_settings_view_form
@@ -4566,6 +4616,8 @@ msgid ""
" impacts the expected delivery date to the customer. This option allows to "
"not propagate the rescheduling if the change is not critical."
msgstr ""
+"Yeniden planlama herhangi bir operasyon zincirine uygular (örn: Sipariş Emri, Topla- Paketle- Sevk Et). MTO satışları için, müşteri için beklenen teslimat tarihini, bir tedarikçi gecikmesi etkiler (gelecek zamana güncellenen) .\n"
+"Eğer değişim çok önemli değilse, bu seçenek yeniden planlamanın yayılmasına izin vermez."
#. module: stock
#: model:ir.model.fields,field_description:stock.field_res_config_settings__module_procurement_jit
@@ -4575,7 +4627,7 @@ msgstr "Rezervasyon"
#. module: stock
#: model:ir.ui.view,arch_db:stock.quant_search_view
msgid "Reservations"
-msgstr ""
+msgstr "Rezervasyonlar"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_move_line__product_uom_qty
@@ -4588,7 +4640,7 @@ msgstr "Rezerve"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_quant__reserved_quantity
msgid "Reserved Quantity"
-msgstr ""
+msgstr "Ayrılan Miktar"
#. module: stock
#: model:ir.model.fields,help:stock.field_res_config_settings__module_procurement_jit
@@ -4597,6 +4649,10 @@ msgid ""
"is advised to better manage priorities in case of long customer lead times "
"or/and frequent stock-outs."
msgstr ""
+"Teslimat emirlerinde manuel olarak rezerve ederek veya stok planlayıcısını "
+"çalıştırmak, müşteri güvenli teslimat tampon süresinin uzun olması ve / veya"
+" stokların sık sık tükenmesi durumunda önceliklerin daha iyi yönetilmesini "
+"sağlar."
#. module: stock
#: model:ir.model.fields,field_description:stock.field_product_product__responsible_id
@@ -4789,6 +4845,8 @@ msgid ""
"Scrapping a product will remove it from your stock. The product will\n"
" end up in a scrap location that can be used for reporting purpose."
msgstr ""
+"Hurdaya çıkan bir ürün stoktan düşülecektir. Ürün raporlama amacıyla "
+"kullanılmak hurda konumuna düşecek. "
#. module: stock
#: model:ir.ui.view,arch_db:stock.view_picking_form
@@ -4803,7 +4861,7 @@ msgstr "Envanter Arama"
#. module: stock
#: model:ir.ui.view,arch_db:stock.stock_inventory_line_search
msgid "Search Inventory Lines"
-msgstr ""
+msgstr "Stok Satırları Arama "
#. module: stock
#: model:ir.ui.view,arch_db:stock.view_procurement_rule_filter
@@ -4896,12 +4954,12 @@ msgstr "İlgili Depo"
#. module: stock
#: model:ir.ui.view,arch_db:stock.res_config_settings_view_form
msgid "Set Putaway Strategies on Locations"
-msgstr ""
+msgstr "Konumlardaki Yerleştirme Stratejilerini Ayarlama"
#. module: stock
#: model:ir.ui.view,arch_db:stock.res_config_settings_view_form
msgid "Set Warehouse Routes"
-msgstr ""
+msgstr "Depo Rotalarını Ayarla"
#. module: stock
#: model:ir.model.fields,help:stock.field_product_category__removal_strategy_id
@@ -4920,7 +4978,7 @@ msgstr ""
#. module: stock
#: model:ir.ui.view,arch_db:stock.res_config_settings_view_form
msgid "Set owner on stored products"
-msgstr ""
+msgstr "Depolanmış ürünlerin sahibini ayarla."
#. module: stock
#: model:ir.ui.view,arch_db:stock.res_config_settings_view_form
@@ -4982,6 +5040,10 @@ msgid ""
" labels and request carrier picking at your warehouse to ship to the "
"customer. Apply shipping connector from delivery methods."
msgstr ""
+"Nakliye bağlantıları, doğru nakliye maliyetlerini hesaplamaya, gönderim "
+"etiketlerini basmaya ve müşteriye gönderilmek üzere depoda taşıyıcı seçimini"
+" talep etmeyi sağlar. Gönderim bağlantılarını teslimat yöntemlerinden "
+"uygulayın."
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_warehouse__code
@@ -4996,7 +5058,7 @@ msgstr "Kısa adı depo tanımlamak için kullanın"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_picking__show_check_availability
msgid "Show Check Availability"
-msgstr ""
+msgstr "Uygunluk Kontrolünü Göster"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_move__show_operations
@@ -5007,17 +5069,17 @@ msgstr "Operasyon Detaylarını Göster"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_picking__show_lots_text
msgid "Show Lots Text"
-msgstr ""
+msgstr "Lot Metinlerini Göster"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_picking__show_mark_as_todo
msgid "Show Mark As Todo"
-msgstr ""
+msgstr "Yapılacak Olarak İşaretlenenleri Göster"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_picking__show_operations
msgid "Show Operations"
-msgstr ""
+msgstr "Operasyonları Göster"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_picking_type__show_reserved
@@ -5027,7 +5089,7 @@ msgstr "Rezerveyi Göster"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_picking__show_validate
msgid "Show Validate"
-msgstr ""
+msgstr "Doğrulamayı Göster"
#. module: stock
#: model:ir.ui.view,arch_db:stock.view_picking_internal_search
@@ -5063,7 +5125,7 @@ msgstr "Kaynak Konumu"
#. module: stock
#: model:ir.ui.view,arch_db:stock.message_body
msgid "Source Location:"
-msgstr ""
+msgstr "Kaynak Konumu :"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_move_line__package_id
@@ -5074,7 +5136,7 @@ msgstr "Kaynak Paket"
#. module: stock
#: model:ir.ui.view,arch_db:stock.message_body
msgid "Source Package :"
-msgstr ""
+msgstr "Kaynak Paketi :"
#. module: stock
#: model:ir.model.fields,help:stock.field_procurement_rule__location_src_id
@@ -5232,7 +5294,7 @@ msgstr "Stok Miktarı"
#. module: stock
#: model:ir.model,name:stock.model_stock_quantity_history
msgid "Stock Quantity History"
-msgstr ""
+msgstr "Stok Miktarının Geçmişi"
#. module: stock
#: model:ir.ui.view,arch_db:stock.view_move_search
@@ -5266,6 +5328,8 @@ msgid ""
"Store products in specific locations of your warehouse (e.g. bins, racks) "
"and to track inventory accordingly."
msgstr ""
+"Ürünlei deponuzda belirli konumlarda depolayın ( varil, raf vs) ve stoğunuza"
+" göre takip edin."
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_location_route__supplied_wh_id
@@ -5315,6 +5379,8 @@ msgid ""
"Technical field used to compute whether the check availability button should"
" be shown."
msgstr ""
+"Kontrol kullanılabilirlik düğmesinin gösterilip gösterilmeyeceğini "
+"hesaplamak için kullanılan teknik alan."
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_picking__show_mark_as_todo
@@ -5322,11 +5388,14 @@ msgid ""
"Technical field used to compute whether the mark as todo button should be "
"shown."
msgstr ""
+"Yapılacak olarak işaretlenen düğmenin gösterilip gösterilmeyeceğini "
+"hesaplamak için kullanılan teknik alan."
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_picking__show_validate
msgid "Technical field used to compute whether the validate should be shown."
msgstr ""
+"Onayın gösterilip gösterilmeyeceğini hesaplamak için kullanılan teknik alan."
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_move__restrict_partner_id
@@ -5352,12 +5421,12 @@ msgstr ""
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_move_line__produce_line_ids
msgid "Technical link to see which line was produced with this. "
-msgstr ""
+msgstr "Bununla hangi hattın üretildiğini görmek için teknik bağlantı."
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_move_line__consume_line_ids
msgid "Technical link to see who consumed what. "
-msgstr ""
+msgstr "Kimin ne tükettiğini görmek için teknik bağlantı."
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_move__product_tmpl_id
@@ -5382,6 +5451,9 @@ msgid ""
" With 'Automatic No Step Added', the location is replaced in the original "
"move."
msgstr ""
+"'Manuel Operasyon' değeri,mevcut adımdan sonra bir stok hareketi "
+"oluşturacaktır. 'Otomatik Adım Ekleme Yok' ile, konum orijinal harekette "
+"değiştirilir."
#. module: stock
#: code:addons/stock/models/stock_picking.py:829
@@ -5441,6 +5513,13 @@ msgid ""
"point. That way, it is always known where we need to go and that is why they"
" are preferred over push rules."
msgstr ""
+"Bir satış siparişi, yeniden sipariş kuralı, başka hareketler gibi satışlar "
+"tarafından temsil edilen talep, çözüm için satın alma kuralının "
+"uygulanmasına ihtiyaç duyar. Satın alma kuralının uygulanmasına bağlı "
+"olarak bir satın alma siparişini, üretim siparişini ya da başka bir hareketi"
+" tetikler. Bu yol, ters siparişteki başlangıç noktasındaki orijinal talep "
+"ile bitiş noktasına kadar zincir oluşturan yoldur. Bu yol,her zaman nereye "
+"gidilmesi gerektiğini ve bu yüzden itme kuralları sayesinde tercih edilir."
#. module: stock
#: model:ir.ui.view,arch_db:stock.product_category_form_view_inherit
@@ -5474,6 +5553,10 @@ msgid ""
" On the operation type you could e.g. specify if packing is needed by default,\n"
" if it should show the customer."
msgstr ""
+"Operasyon türü sistemi, her stok operasyonunda, görünümlerini buna göre "
+"değiştirecek belirli bir türe atamanıza izin verir. Operasyon tipinde, "
+"örneğin müşteriye göstermesi gerekiyorsa, paketlemede varsayılan olarak "
+"gerekli olup olmadığını belirtebilirsiniz."
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_quant__package_id
@@ -5505,7 +5588,7 @@ msgstr "Bu stok hareketini oluşturan satınalma kuralı"
#. module: stock
#: model:ir.ui.view,arch_db:stock.stock_warn_insufficient_qty_form_view
msgid "The product"
-msgstr ""
+msgstr "Ürün"
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_move__push_rule_id
@@ -5593,6 +5676,9 @@ msgid ""
"routes put another location. If it is empty, it will check for the customer "
"location on the partner. "
msgstr ""
+"Bu operasyon türü ile manuel toplama oluşturduğunuzda, bu varsayılan hedef "
+"konumdur. Ancak değiştirmek mümkündür veya başka rotalar seçilebilir. Boş "
+"ise, iş ortağı kartının üzerindeki müşteri konumunu kontrol edecektir"
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_picking_type__default_location_src_id
@@ -5602,6 +5688,9 @@ msgid ""
"put another location. If it is empty, it will check for the supplier "
"location on the partner. "
msgstr ""
+"Bu operasyon türü ile manuel toplama oluşturduğunuzda, bu varsayılan hedef "
+"konumdur. Ancak değiştirmek mümkündür veya başka rotalar seçilebilir. Boş "
+"ise, iş ortağı kartının üzerindeki müşteri konumunu kontrol edecektir"
#. module: stock
#: model:ir.actions.act_window,help:stock.action_production_lot_form
@@ -5615,7 +5704,7 @@ msgstr ""
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_location_path__picking_type_id
msgid "This is the operation type that will be put on the stock moves"
-msgstr ""
+msgstr "Bu, stok hareketlerine koyulacak olan bir operasyon türüdür."
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_quant__owner_id
@@ -5649,7 +5738,7 @@ msgstr ""
#, python-format
msgid ""
"This location's usage cannot be changed to view as it contains products."
-msgstr ""
+msgstr "Bu konum kullanımı, ürünleri içerdiğinden görüntüyü değiştiremez."
#. module: stock
#: model:ir.actions.act_window,help:stock.stock_move_action
@@ -5768,12 +5857,15 @@ msgid ""
"Those are the entire packages of a picking shown in the view of detailed "
"operations"
msgstr ""
+"Bunlar, detaylı operasyon görüntüsünde gösterilen toplama paketlerinin "
+"tümüdür."
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_picking__entire_package_ids
msgid ""
"Those are the entire packages of a picking shown in the view of operations"
msgstr ""
+"Bunlar, operasyon görüntüsünde gösterilen toplama paketlerinin tümüdür."
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_move_line__location_dest_id
@@ -5795,7 +5887,7 @@ msgstr "Yapılacak"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_move_line__to_loc
msgid "To Loc"
-msgstr ""
+msgstr "Nereye?"
#. module: stock
#: model:ir.ui.view,arch_db:stock.stock_picking_type_kanban
@@ -5843,6 +5935,8 @@ msgid ""
"Track following dates on lots & serial numbers: best before, removal, end of life, alert. \n"
" Such dates are set automatically at lot/serial number creation based on values set on the product (in days)."
msgstr ""
+"Devam eden seri numaraları ve lotlar üzerindeki tarihleri izleyin: Önceki en iyi, çıkarılan, ömrünün bitmesi, uyarı.\n"
+"Bu tarihler ürün değerlerine bağlı olarak oluşturulan seri/lot numaralarında otomatik olarak ayarlanır."
#. module: stock
#: model:ir.ui.view,arch_db:stock.res_config_settings_view_form
@@ -5851,11 +5945,14 @@ msgid ""
" life, alert. Such dates are set automatically at lot/serial number creation"
" based on values set on the product (in days)."
msgstr ""
+"Devam eden seri numaraları ve lotlar üzerindeki tarihleri izleyin: Önceki en"
+" iyi, çıkarılan, ömrünün bitmesi, uyarı. Bu tarihler ürün değerlerine bağlı "
+"olarak oluşturulan seri/lot numaralarında otomatik olarak ayarlanır."
#. module: stock
#: model:ir.ui.view,arch_db:stock.res_config_settings_view_form
msgid "Track product location in your warehouse"
-msgstr ""
+msgstr "Deponuzdaki ürün konumunu izleyin"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_product_product__tracking
@@ -6052,7 +6149,7 @@ msgstr "Varolan Lot/seri numaraları kullanın"
#. module: stock
#: model:ir.ui.view,arch_db:stock.res_config_settings_view_form
msgid "Use your own routes and putaway strategies"
-msgstr ""
+msgstr "Kendi rotanızı ve yerleştirme stratejinizi kullanın"
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_picking_type__sequence
@@ -6256,6 +6353,12 @@ msgid ""
"finished product manual manufacturing order. In other cases, it is important"
" to use pull rules where you know where you are going based on a demand."
msgstr ""
+"Bir hareketin bir konuma öngörüldüğü zaman, itme kuralı bir sonraki konuma "
+"otomatik olarak bir hareket oluşturacaktır. Bu esas olarak sadece manuel "
+"işlemler oluştururken gereklidir, örn. 2/3 adımlı manuel satın alma siparişi"
+" veya 2/3 adımlı ürün manuel bitmiş ürün siparişi. Diğer durumlarda, talep "
+"üzerine nereye gideceğinizi bildiğiniz durumlarda çekme kurallarını "
+"kullanmak önemlidir."
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_location_route__warehouse_selectable
@@ -6306,6 +6409,8 @@ msgid ""
"When the picking is not done this allows changing the initial demand. When "
"the picking is done this allows changing the done quantities."
msgstr ""
+"Toplama tamamlanmamış ise, başlangıç talebinin değişmesine izin verir. Eğer "
+"toplama tamamlanmış ise, tamamlanmış miktarların değişimine izin verir."
#. module: stock
#: model:ir.model.fields,help:stock.field_stock_warehouse_orderpoint__product_min_qty
@@ -6349,7 +6454,7 @@ msgstr ""
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_move__additional
msgid "Whether the move was added after the picking's confirmation"
-msgstr ""
+msgstr "Toplama onayından sonra hareket eklenip eklenmediği"
#. module: stock
#: model:ir.model.fields,field_description:stock.field_stock_return_picking_line__wizard_id
@@ -6372,6 +6477,11 @@ msgid ""
"valuate your stock or change its rounding precision to a smaller value "
"(example: 0.00001)."
msgstr ""
+"Ürün stoğunuz için kullandığınızdan daha küçük bir ölçü birimi "
+"kullanıyorsunuz. Bu ayrılan miktardaki yuvarlama problemine sebep olabilir! "
+"Stoğunuzu değerlendirmek ya da daha küçük bir değer için yuvarlama "
+"hassasiyetinizi daha küçük bir değere değiştirmek için, olabilecek daha "
+"küçük bir ölçü birimin kullanmalısınız. (örn: 0.00001)"
#. module: stock
#: model:ir.actions.act_window,help:stock.action_routes_form
@@ -6395,6 +6505,9 @@ msgid ""
"stock move. If you need to change the type, you should first unreserve the "
"stock move."
msgstr ""
+"Stok hareketlerinde mevcut olarak ayrılmış bir ürün türünü "
+"değiştiremezsiniz. Eğer tür değişikliğine ihtiyacınız varsa, stok "
+"hareketlerinde ayrılmayan olarak belirlemelisiniz."
#. module: stock
#: code:addons/stock/models/product.py:510
@@ -6415,18 +6528,20 @@ msgid ""
"You can not delete product moves if the picking is done. You can only "
"correct the done quantities."
msgstr ""
+"Eğer toplanma tamamlanmışsa, ürün hareketini silemezsiniz. Sadece "
+"tamamlanmış miktarı düzeltebilirsiniz."
#. module: stock
#: code:addons/stock/models/stock_move_line.py:153
#, python-format
msgid "You can not enter negative quantities!"
-msgstr ""
+msgstr "Negatif miktar giremezsiniz!"
#. module: stock
#: code:addons/stock/models/stock_inventory.py:381
#, python-format
msgid "You can only adjust stockable products."
-msgstr ""
+msgstr "Sadece stoklanabilir ürünleri ayarlayabilirsiniz."
#. module: stock
#: code:addons/stock/models/stock_move.py:1077
@@ -6491,6 +6606,8 @@ msgid ""
"You cannot take products from or deliver products to a location of type "
"\"view\"."
msgstr ""
+"Ürünleri \"görünüm\" türündeki bir yere götüremez veya ürünlere teslim "
+"edemezsiniz."
#. module: stock
#: code:addons/stock/models/stock_move_line.py:128
@@ -6500,6 +6617,8 @@ msgid ""
"You cannot use the same serial number twice. Please correct the serial "
"numbers encoded."
msgstr ""
+"Aynı seri numarasını iki kere kullanamazsınız. Lütfen kodlanmış seri "
+"numarasını düzeltin."
#. module: stock
#: code:addons/stock/models/stock_picking.py:716
@@ -6550,7 +6669,7 @@ msgstr "İlk talepten daha az ürün işlediniz."
msgid ""
"You have processed more than what was initially\n"
" planned for the product"
-msgstr ""
+msgstr "Ürün için en başta ne planlandıysa bundan daha fazlasını yaptınız"
#. module: stock
#: code:addons/stock/models/product.py:304
@@ -6583,7 +6702,7 @@ msgstr ""
#: code:addons/stock/models/stock_location.py:96
#, python-format
msgid "You have to set a name for this location."
-msgstr ""
+msgstr "Bu konum için bir isim ayarlayın."
#. module: stock
#: code:addons/stock/wizard/stock_picking_return.py:46
@@ -6616,7 +6735,7 @@ msgstr ""
#: code:addons/stock/models/stock_move.py:1061
#, python-format
msgid "You should not put the contents of a package in different locations."
-msgstr ""
+msgstr "Farklı konumlara, bir paket içeriği koymamalısınız."
#. module: stock
#: code:addons/stock/models/product.py:371
@@ -6626,6 +6745,8 @@ msgid ""
"You still have some active reordering rules on this product. Please archive "
"or delete them first."
msgstr ""
+"Bu ürün için hala bazı aktif ihtiyaç kurallarınız var. Lütfen önce bunları "
+"silin ya da arşivleyin."
#. module: stock
#: code:addons/stock/models/stock_move.py:330
@@ -6669,7 +6790,7 @@ msgstr "gün"
#. module: stock
#: model:ir.ui.view,arch_db:stock.res_config_settings_view_form
msgid "days to be propagated"
-msgstr ""
+msgstr "Yayılma günleri"
#. module: stock
#: model:ir.ui.view,arch_db:stock.view_inventory_form
@@ -6695,12 +6816,12 @@ msgstr "örn. PO0032"
#. module: stock
#: model:ir.ui.view,arch_db:stock.stock_warn_insufficient_qty_form_view
msgid "in"
-msgstr ""
+msgstr "içinde"
#. module: stock
#: model:ir.ui.view,arch_db:stock.stock_warn_insufficient_qty_form_view
msgid "is not available in sufficient quantity"
-msgstr ""
+msgstr "yeterli miktar mevcut değil"
#. module: stock
#: model:ir.ui.view,arch_db:stock.exception_on_picking
diff --git a/addons/stock/models/procurement.py b/addons/stock/models/procurement.py
index ba047badef8..fd08b362949 100644
--- a/addons/stock/models/procurement.py
+++ b/addons/stock/models/procurement.py
@@ -77,7 +77,7 @@ class ProcurementRule(models.Model):
data = self._get_stock_move_values(product_id, product_qty, product_uom, location_id, name, origin, values, group_id)
# Since action_confirm launch following procurement_group we should activate it.
- move = self.env['stock.move'].sudo().create(data)
+ move = self.env['stock.move'].sudo().with_context(force_company=data.get('company_id', False)).create(data)
move._action_confirm()
return True
diff --git a/addons/stock/models/product.py b/addons/stock/models/product.py
index 4146e2ef586..75223abea24 100644
--- a/addons/stock/models/product.py
+++ b/addons/stock/models/product.py
@@ -411,8 +411,11 @@ class ProductTemplate(models.Model):
outgoing_qty = fields.Float(
'Outgoing', compute='_compute_quantities', search='_search_outgoing_qty',
digits=dp.get_precision('Product Unit of Measure'))
- location_id = fields.Many2one('stock.location', 'Location')
- warehouse_id = fields.Many2one('stock.warehouse', 'Warehouse')
+ # The goal of these fields is not to be able to search a location_id/warehouse_id but
+ # to properly make these fields "dummy": only used to put some keys in context from
+ # the search view in order to influence computed field
+ location_id = fields.Many2one('stock.location', 'Location', store=False, search=lambda operator, operand, vals: [])
+ warehouse_id = fields.Many2one('stock.warehouse', 'Warehouse', store=False, search=lambda operator, operand, vals: [])
route_ids = fields.Many2many(
'stock.location.route', 'stock_route_product', 'product_id', 'route_id', 'Routes',
domain=[('product_selectable', '=', True)],
@@ -504,7 +507,7 @@ class ProductTemplate(models.Model):
if 'uom_id' in vals:
new_uom = self.env['uom.uom'].browse(vals['uom_id'])
updated = self.filtered(lambda template: template.uom_id != new_uom)
- done_moves = self.env['stock.move'].search([('product_id', 'in', updated.mapped('product_variant_ids').ids)], limit=1)
+ done_moves = self.env['stock.move'].search([('product_id', 'in', updated.with_context(active_test=False).mapped('product_variant_ids').ids)], limit=1)
if done_moves:
raise UserError(_("You can not change the unit of measure of a product that has already been used in a done stock move. If you need to change the unit of measure, you may deactivate this product."))
if 'type' in vals and vals['type'] != 'product' and sum(self.mapped('nbr_reordering_rules')) != 0:
diff --git a/addons/stock/models/stock_move.py b/addons/stock/models/stock_move.py
index 78b6f34c938..fdbf05f1866 100644
--- a/addons/stock/models/stock_move.py
+++ b/addons/stock/models/stock_move.py
@@ -487,9 +487,19 @@ class StockMove(models.Model):
}
def _do_unreserve(self):
- if any(move.state in ('done', 'cancel') for move in self):
- raise UserError(_('Cannot unreserve a done move'))
- self.mapped('move_line_ids').unlink()
+ moves_to_unreserve = self.env['stock.move']
+ for move in self:
+ if move.state == 'cancel':
+ # We may have cancelled move in an open picking in a "propagate_cancel" scenario.
+ continue
+ if move.state == 'done':
+ if move.scrapped:
+ # We may have done move in an open picking in a scrap scenario.
+ continue
+ else:
+ raise UserError(_('Cannot unreserve a done move'))
+ moves_to_unreserve |= move
+ moves_to_unreserve.mapped('move_line_ids').unlink()
return True
def _push_apply(self):
@@ -590,7 +600,7 @@ class StockMove(models.Model):
# We are using propagate to False in order to not cancel destination moves merged in moves[0]
moves_to_unlink.write({'propagate': False})
moves_to_unlink._action_cancel()
- moves_to_unlink.unlink()
+ moves_to_unlink.sudo().unlink()
return (self | self.env['stock.move'].concat(*moves_to_merge)) - moves_to_unlink
def _get_relevant_state_among_moves(self):
@@ -811,7 +821,12 @@ class StockMove(models.Model):
}
if quantity:
uom_quantity = self.product_id.uom_id._compute_quantity(quantity, self.product_uom, rounding_method='HALF-UP')
- vals = dict(vals, product_uom_qty=uom_quantity)
+ uom_quantity_back_to_product_uom = self.product_uom._compute_quantity(uom_quantity, self.product_id.uom_id, rounding_method='HALF-UP')
+ rounding = self.env['decimal.precision'].precision_get('Product Unit of Measure')
+ if float_compare(quantity, uom_quantity_back_to_product_uom, precision_digits=rounding) == 0:
+ vals = dict(vals, product_uom_qty=uom_quantity)
+ else:
+ vals = dict(vals, product_uom_qty=quantity, product_uom_id=self.product_id.uom_id.id)
if reserved_quant:
vals = dict(
vals,
@@ -841,11 +856,20 @@ class StockMove(models.Model):
# is if the move's unit of measure's rounding does not allow fractional reservation. We chose
# to convert `taken_quantity` to the move's unit of measure with a down rounding method and
# then get it back in the quants unit of measure with an half-up rounding_method. This
- # way, we'll never reserve more than allowed.
- taken_quantity_move_uom = self.product_id.uom_id._compute_quantity(taken_quantity, self.product_uom, rounding_method='DOWN')
- taken_quantity = self.product_uom._compute_quantity(taken_quantity_move_uom, self.product_id.uom_id, rounding_method='HALF-UP')
+ # way, we'll never reserve more than allowed. We do not apply this logic if
+ # `available_quantity` is brought by a chained move line. In this case, `_prepare_move_line_vals`
+ # will take care of changing the UOM to the UOM of the product.
+ if not strict:
+ taken_quantity_move_uom = self.product_id.uom_id._compute_quantity(taken_quantity, self.product_uom, rounding_method='DOWN')
+ taken_quantity = self.product_uom._compute_quantity(taken_quantity_move_uom, self.product_id.uom_id, rounding_method='HALF-UP')
quants = []
+
+ if self.product_id.tracking == 'serial':
+ rounding = self.env['decimal.precision'].precision_get('Product Unit of Measure')
+ if float_compare(taken_quantity, int(taken_quantity), precision_digits=rounding) != 0:
+ taken_quantity = 0
+
try:
if not float_is_zero(taken_quantity, precision_rounding=self.product_id.uom_id.rounding):
quants = self.env['stock.quant']._update_reserved_quantity(
@@ -865,7 +889,7 @@ class StockMove(models.Model):
to_update = self.move_line_ids.filtered(lambda m: m.product_id.tracking != 'serial' and
m.location_id.id == reserved_quant.location_id.id and m.lot_id.id == reserved_quant.lot_id.id and m.package_id.id == reserved_quant.package_id.id and m.owner_id.id == reserved_quant.owner_id.id)
if to_update:
- to_update[0].with_context(bypass_reservation_update=True).product_uom_qty += self.product_id.uom_id._compute_quantity(quantity, self.product_uom, rounding_method='HALF-UP')
+ to_update[0].with_context(bypass_reservation_update=True).product_uom_qty += self.product_id.uom_id._compute_quantity(quantity, to_update[0].product_uom_id, rounding_method='HALF-UP')
else:
if self.product_id.tracking == 'serial':
for i in range(0, int(quantity)):
@@ -883,7 +907,7 @@ class StockMove(models.Model):
assigned_moves = self.env['stock.move']
partially_available_moves = self.env['stock.move']
for move in self.filtered(lambda m: m.state in ['confirmed', 'waiting', 'partially_available']):
- if move.location_id.usage in ('supplier', 'inventory', 'production', 'customer')\
+ if move.location_id.should_bypass_reservation()\
or move.product_id.type == 'consu':
# create the move line(s) but do not impact quants
if move.product_id.tracking == 'serial' and (move.picking_type_id.use_create_lots or move.picking_type_id.use_existing_lots):
@@ -1022,8 +1046,8 @@ class StockMove(models.Model):
# create the extra moves
extra_move_quantity = float_round(
self.quantity_done - self.product_uom_qty,
- precision_rounding=self.product_uom.rounding,
- rounding_method ='UP')
+ precision_rounding=rounding,
+ rounding_method='HALF-UP')
extra_move_vals = self._prepare_extra_move_vals(extra_move_quantity)
extra_move = self.copy(default=extra_move_vals)
if extra_move.picking_id:
@@ -1093,7 +1117,7 @@ class StockMove(models.Model):
pass
# If you were already putting stock.move.lots on the next one in the work order, transfer those to the new move
- move.move_line_ids.filtered(lambda x: x.qty_done == 0.0).write({'move_id': new_move})
+ move.move_line_ids.filtered(lambda x: x.qty_done == 0.0).write({'move_id': new_move, 'product_uom_qty': 0})
move.move_line_ids._action_done()
# Check the consistency of the result packages; there should be an unique location across
# the contained quants.
diff --git a/addons/stock/models/stock_quant.py b/addons/stock/models/stock_quant.py
index 11b34b51413..7b82cb01f79 100644
--- a/addons/stock/models/stock_quant.py
+++ b/addons/stock/models/stock_quant.py
@@ -253,13 +253,21 @@ class StockQuant(models.Model):
self = self.sudo()
rounding = product_id.uom_id.rounding
quants = self._gather(product_id, location_id, lot_id=lot_id, package_id=package_id, owner_id=owner_id, strict=strict)
- available_quantity = self._get_available_quantity(product_id, location_id, lot_id=lot_id, package_id=package_id, owner_id=owner_id, strict=strict)
- if float_compare(quantity, 0, precision_rounding=rounding) > 0 and float_compare(quantity, available_quantity, precision_rounding=rounding) > 0:
- raise UserError(_('It is not possible to reserve more products of %s than you have in stock.') % (', '.join(quants.mapped('product_id').mapped('display_name'))))
- elif float_compare(quantity, 0, precision_rounding=rounding) < 0 and float_compare(abs(quantity), sum(quants.mapped('reserved_quantity')), precision_rounding=rounding) > 0:
- raise UserError(_('It is not possible to unreserve more products of %s than you have in stock.') % (', '.join(quants.mapped('product_id').mapped('display_name'))))
-
reserved_quants = []
+
+ if float_compare(quantity, 0, precision_rounding=rounding) > 0:
+ # if we want to reserve
+ available_quantity = self._get_available_quantity(product_id, location_id, lot_id=lot_id, package_id=package_id, owner_id=owner_id, strict=strict)
+ if float_compare(quantity, available_quantity, precision_rounding=rounding) > 0:
+ raise UserError(_('It is not possible to reserve more products of %s than you have in stock.') % (', '.join(quants.mapped('product_id').mapped('display_name'))))
+ elif float_compare(quantity, 0, precision_rounding=rounding) < 0:
+ # if we want to unreserve
+ available_quantity = sum(quants.mapped('reserved_quantity'))
+ if float_compare(abs(quantity), available_quantity, precision_rounding=rounding) > 0:
+ raise UserError(_('It is not possible to unreserve more products of %s than you have in stock.') % (', '.join(quants.mapped('product_id').mapped('display_name'))))
+ else:
+ return reserved_quants
+
for quant in quants:
if float_compare(quantity, 0, precision_rounding=rounding) > 0:
max_quantity_on_quant = quant.quantity - quant.reserved_quantity
diff --git a/addons/stock/models/stock_warehouse.py b/addons/stock/models/stock_warehouse.py
index a69813c218d..7fc13f8b07c 100644
--- a/addons/stock/models/stock_warehouse.py
+++ b/addons/stock/models/stock_warehouse.py
@@ -150,11 +150,14 @@ class Warehouse(models.Model):
# If another partner assigned
if vals.get('partner_id'):
warehouses._update_partner_data(vals['partner_id'], vals.get('company_id'))
+
res = super(Warehouse, self).write(vals)
# check if we need to delete and recreate route
if vals.get('reception_steps') or vals.get('delivery_steps'):
- warehouses._update_routes()
+ route_vals = warehouses._update_routes()
+ if route_vals:
+ self.write(route_vals)
if vals.get('resupply_wh_ids') and not vals.get('resupply_route_ids'):
for warehouse in warehouses:
@@ -280,7 +283,7 @@ class Warehouse(models.Model):
reception_route.pull_ids.write({'active': False})
reception_route.push_ids.write({'active': False})
else:
- reception_route = self.env['stock.location.route'].create(warehouse._get_reception_delivery_route_values(warehouse.reception_steps))
+ warehouse.reception_route_id = reception_route = self.env['stock.location.route'].create(warehouse._get_reception_delivery_route_values(warehouse.reception_steps))
# push / procurement (pull) rules for reception
routings = routes_data[warehouse.id][warehouse.reception_steps]
push_rules_list, pull_rules_list = warehouse._get_push_pull_rules_values(
@@ -593,11 +596,18 @@ class Warehouse(models.Model):
routes_data = self.get_routes_dict()
# change the default source and destination location and (de)activate operation types
self._update_picking_type()
- self._create_or_update_delivery_route(routes_data)
- self._create_or_update_reception_route(routes_data)
- self._create_or_update_crossdock_route(routes_data)
- self._create_or_update_mto_pull(routes_data)
- return True
+ delivery_route = self._create_or_update_delivery_route(routes_data)
+ reception_route = self._create_or_update_reception_route(routes_data)
+ crossdock_route = self._create_or_update_crossdock_route(routes_data)
+ mto_pull = self._create_or_update_mto_pull(routes_data)
+
+ return {
+ 'route_ids': [(4, route.id) for route in reception_route | delivery_route | crossdock_route],
+ 'mto_pull_id': mto_pull.id,
+ 'reception_route_id': reception_route.id,
+ 'delivery_route_id': delivery_route.id,
+ 'crossdock_route_id': crossdock_route.id,
+ }
@api.one
def _update_picking_type(self):
diff --git a/addons/stock/tests/test_move.py b/addons/stock/tests/test_move.py
index a98ed3fd72c..7f1cc17b0cf 100644
--- a/addons/stock/tests/test_move.py
+++ b/addons/stock/tests/test_move.py
@@ -1033,6 +1033,47 @@ class StockMove(TransactionCase):
move._action_done()
self.assertEqual(self.env['stock.quant']._get_available_quantity(self.product1, self.customer_location), 12.0)
+ def test_availability_7(self):
+ """ Check that, in the scenario where a move is in a bigger uom than the uom of the quants
+ and this uom only allows entire numbers, we only reserve quantity honouring the uom's
+ rounding even if the quantity is set across multiple quants.
+ """
+ # on the dozen uom, set the rounding set 1.0
+ self.uom_dozen.rounding = 1
+
+ # make 12 quants of 1
+ for i in range(1, 13):
+ lot_id = self.env['stock.production.lot'].create({
+ 'name': 'lot%s' % str(i),
+ 'product_id': self.product2.id,
+ })
+ self.env['stock.quant']._update_available_quantity(self.product2, self.stock_location, 1.0, lot_id=lot_id)
+
+ # the move should be reserved
+ move = self.env['stock.move'].create({
+ 'name': 'test_availability_7',
+ 'location_id': self.stock_location.id,
+ 'location_dest_id': self.customer_location.id,
+ 'product_id': self.product2.id,
+ 'product_uom': self.uom_dozen.id,
+ 'product_uom_qty': 1,
+ })
+ move._action_confirm()
+ move._action_assign()
+ self.assertEqual(move.state, 'assigned')
+ self.assertEqual(len(move.move_line_ids.mapped('product_uom_id')), 1)
+ self.assertEqual(move.move_line_ids.mapped('product_uom_id'), self.uom_unit)
+
+ for move_line in move.move_line_ids:
+ move_line.qty_done = 1
+ move._action_done()
+
+ self.assertEqual(move.product_uom_qty, 1)
+ self.assertEqual(move.product_uom.id, self.uom_dozen.id)
+ self.assertEqual(move.state, 'done')
+ self.assertEqual(self.env['stock.quant']._get_available_quantity(self.product2, self.customer_location), 12.0)
+ self.assertEqual(len(self.env['stock.quant']._gather(self.product2, self.customer_location)), 12)
+
def test_unreserve_1(self):
""" Check that unreserving a stock move sets the products reserved as available and
set the state back to confirmed.
@@ -1228,6 +1269,47 @@ class StockMove(TransactionCase):
for quant in quants:
self.assertEqual(quant.reserved_quantity, 0)
+ def test_unreserve_6(self):
+ """ In a situation with a negative and a positive quant, reserve and unreserve.
+ """
+ q1 = self.env['stock.quant'].create({
+ 'product_id': self.product1.id,
+ 'location_id': self.stock_location.id,
+ 'quantity': -10,
+ 'reserved_quantity': 0,
+ })
+
+ q2 = self.env['stock.quant'].create({
+ 'product_id': self.product1.id,
+ 'location_id': self.stock_location.id,
+ 'quantity': 30.0,
+ 'reserved_quantity': 10.0,
+ })
+
+ self.assertEqual(self.env['stock.quant']._get_available_quantity(self.product1, self.stock_location), 10.0)
+
+ move1 = self.env['stock.move'].create({
+ 'name': 'test_unreserve_6',
+ 'location_id': self.stock_location.id,
+ 'location_dest_id': self.customer_location.id,
+ 'product_id': self.product1.id,
+ 'product_uom': self.uom_unit.id,
+ 'product_uom_qty': 10.0,
+ })
+ move1._action_confirm()
+ move1._action_assign()
+ self.assertEqual(move1.state, 'assigned')
+ self.assertEqual(len(move1.move_line_ids), 1)
+ self.assertEqual(move1.move_line_ids.product_qty, 10)
+ self.assertEqual(self.env['stock.quant']._get_available_quantity(self.product1, self.stock_location), 0.0)
+ self.assertEqual(q2.reserved_quantity, 20)
+
+ move1._do_unreserve()
+ self.assertEqual(move1.state, 'confirmed')
+ self.assertEqual(len(move1.move_line_ids), 0)
+ self.assertEqual(self.env['stock.quant']._get_available_quantity(self.product1, self.stock_location), 10.0)
+ self.assertEqual(q2.reserved_quantity, 10)
+
def test_link_assign_1(self):
""" Test the assignment mechanism when two chained stock moves try to move one unit of an
untracked product.
@@ -1635,7 +1717,10 @@ class StockMove(TransactionCase):
# the second move should not be reservable because of the rounding on the dozen
move_pack_cust._action_assign()
- self.assertEqual(move_pack_cust.state, 'waiting')
+ self.assertEqual(move_pack_cust.state, 'partially_available')
+ move_line_pack_cust = move_pack_cust.move_line_ids
+ self.assertEqual(move_line_pack_cust.product_uom_qty, 6)
+ self.assertEqual(move_line_pack_cust.product_uom_id.id, self.uom_unit.id)
# move a dozen on the backorder to see how we handle the extra move
backorder = self.env['stock.picking'].search([('backorder_id', '=', picking_stock_pack.id)])
@@ -1663,6 +1748,152 @@ class StockMove(TransactionCase):
# the second move should now be reservable
move_pack_cust._action_assign()
self.assertEqual(move_pack_cust.state, 'assigned')
+ self.assertEqual(move_line_pack_cust.product_uom_qty, 12)
+ self.assertEqual(move_line_pack_cust.product_uom_id.id, self.uom_unit.id)
+ self.assertEqual(self.env['stock.quant']._get_available_quantity(self.product1, move_stock_pack.location_dest_id), 6)
+
+ def test_link_assign_8(self):
+ """ Set the rounding of the dozen to 1.0, create a chain of two move for a dozen, the product
+ concerned is tracked by serial number. Check that the flow is ok.
+ """
+ # on the dozen uom, set the rounding set 1.0
+ self.uom_dozen.rounding = 1
+
+ # 6 units are available in stock
+ for i in range(1, 13):
+ lot_id = self.env['stock.production.lot'].create({
+ 'name': 'lot%s' % str(i),
+ 'product_id': self.product2.id,
+ })
+ self.env['stock.quant']._update_available_quantity(self.product2, self.stock_location, 1.0, lot_id=lot_id)
+
+ # create pickings and moves for a pick -> pack mto scenario
+ picking_stock_pack = self.env['stock.picking'].create({
+ 'location_id': self.stock_location.id,
+ 'location_dest_id': self.pack_location.id,
+ 'picking_type_id': self.env.ref('stock.picking_type_internal').id,
+ })
+ move_stock_pack = self.env['stock.move'].create({
+ 'name': 'test_link_assign_7',
+ 'location_id': self.stock_location.id,
+ 'location_dest_id': self.pack_location.id,
+ 'product_id': self.product2.id,
+ 'product_uom': self.uom_dozen.id,
+ 'product_uom_qty': 1.0,
+ 'picking_id': picking_stock_pack.id,
+ })
+ picking_pack_cust = self.env['stock.picking'].create({
+ 'location_id': self.pack_location.id,
+ 'location_dest_id': self.customer_location.id,
+ 'picking_type_id': self.env.ref('stock.picking_type_out').id,
+ })
+ move_pack_cust = self.env['stock.move'].create({
+ 'name': 'test_link_assign_7',
+ 'location_id': self.pack_location.id,
+ 'location_dest_id': self.customer_location.id,
+ 'product_id': self.product2.id,
+ 'product_uom': self.uom_dozen.id,
+ 'product_uom_qty': 1.0,
+ 'picking_id': picking_pack_cust.id,
+ })
+ move_stock_pack.write({'move_dest_ids': [(4, move_pack_cust.id, 0)]})
+ move_pack_cust.write({'move_orig_ids': [(4, move_stock_pack.id, 0)]})
+ (move_stock_pack + move_pack_cust)._action_confirm()
+
+ move_stock_pack._action_assign()
+ self.assertEqual(move_stock_pack.state, 'assigned')
+ move_pack_cust._action_assign()
+ self.assertEqual(move_pack_cust.state, 'waiting')
+
+ for ml in move_stock_pack.move_line_ids:
+ ml.qty_done = 1
+ picking_stock_pack.button_validate()
+ self.assertEqual(move_pack_cust.state, 'assigned')
+ for ml in move_pack_cust.move_line_ids:
+ self.assertEqual(ml.product_uom_qty, 1)
+ self.assertEqual(ml.product_uom_id.id, self.uom_unit.id)
+ self.assertTrue(bool(ml.lot_id.id))
+
+ def test_link_assign_9(self):
+ """ Create an uom "3 units" which is 3 times the units but without rounding. Create 3
+ quants in stock and two chained moves. The first move will bring the 3 quants but the
+ second only validate 2 and create a backorder for the last one. Check that the reservation
+ is correctly cleared up for the last one.
+ """
+ uom_3units = self.env['product.uom'].create({
+ 'name': '3 units',
+ 'category_id': self.uom_unit.category_id.id,
+ 'factor_inv': 3,
+ 'rounding': 1,
+ })
+ for i in range(1, 4):
+ lot_id = self.env['stock.production.lot'].create({
+ 'name': 'lot%s' % str(i),
+ 'product_id': self.product2.id,
+ })
+ self.env['stock.quant']._update_available_quantity(self.product2, self.stock_location, 1.0, lot_id=lot_id)
+
+ picking_stock_pack = self.env['stock.picking'].create({
+ 'location_id': self.stock_location.id,
+ 'location_dest_id': self.pack_location.id,
+ 'picking_type_id': self.env.ref('stock.picking_type_internal').id,
+ })
+ move_stock_pack = self.env['stock.move'].create({
+ 'name': 'test_link_assign_9',
+ 'location_id': self.stock_location.id,
+ 'location_dest_id': self.pack_location.id,
+ 'product_id': self.product2.id,
+ 'product_uom': uom_3units.id,
+ 'product_uom_qty': 1.0,
+ 'picking_id': picking_stock_pack.id,
+ })
+ picking_pack_cust = self.env['stock.picking'].create({
+ 'location_id': self.pack_location.id,
+ 'location_dest_id': self.customer_location.id,
+ 'picking_type_id': self.env.ref('stock.picking_type_out').id,
+ })
+ move_pack_cust = self.env['stock.move'].create({
+ 'name': 'test_link_assign_0',
+ 'location_id': self.pack_location.id,
+ 'location_dest_id': self.customer_location.id,
+ 'product_id': self.product2.id,
+ 'product_uom': uom_3units.id,
+ 'product_uom_qty': 1.0,
+ 'picking_id': picking_pack_cust.id,
+ })
+ move_stock_pack.write({'move_dest_ids': [(4, move_pack_cust.id, 0)]})
+ move_pack_cust.write({'move_orig_ids': [(4, move_stock_pack.id, 0)]})
+ (move_stock_pack + move_pack_cust)._action_confirm()
+
+ picking_stock_pack.action_assign()
+ for ml in picking_stock_pack.move_lines.move_line_ids:
+ ml.qty_done = 1
+ picking_stock_pack.button_validate()
+ self.assertEqual(picking_pack_cust.state, 'assigned')
+ for ml in picking_pack_cust.move_lines.move_line_ids:
+ if ml.lot_id.name != 'lot3':
+ ml.qty_done = 1
+ res_dict_for_back_order = picking_pack_cust.button_validate()
+ backorder_wizard = self.env[(res_dict_for_back_order.get('res_model'))].browse(res_dict_for_back_order.get('res_id'))
+ backorder_wizard.with_context(debug=True).process()
+ backorder = self.env['stock.picking'].search([('backorder_id', '=', picking_pack_cust.id)])
+ backordered_ml = backorder.move_line_ids
+ quant_lot3 = self.env['stock.quant'].search([('lot_id', '=', backordered_ml.lot_id.id)])
+
+ # due to the rounding, the backordered quantity is 0.999 ; we shoudln't be able to reserve
+ # 0.999 on a tracked by serial number quant
+ self.assertEqual(backordered_ml.product_uom_qty, 0)
+ self.assertTrue(backordered_ml.lot_id)
+
+ # force the serial number and validate
+ backordered_ml.qty_done = 1
+
+ overprocessed_wizard = backorder.button_validate()
+ overprocessed_wizard = self.env['stock.overprocessed.transfer'].browse(overprocessed_wizard['res_id'])
+ overprocessed_wizard.action_confirm()
+
+ self.assertEqual(self.env['stock.quant']._get_available_quantity(self.product2, self.customer_location), 3)
+ self.assertEqual(self.env['stock.quant']._get_available_quantity(self.product2, self.pack_location), 0)
def test_use_unreserved_move_line_1(self):
""" Test that validating a stock move linked to an untracked product reserved by another one
@@ -3474,39 +3705,6 @@ class StockMove(TransactionCase):
self.assertEqual(self.product1.qty_available, 5.0)
self.assertEqual(self.product1.with_context(company_owned=True).qty_available, 10.0)
- def test_split_1(self):
- """ When we split a move line and having one without quantity done, we want to keep reservation
- on the new one as it has not been unreserved during the copy.
- """
- move1 = self.env['stock.move'].create({
- 'name': 'test_split_1',
- 'location_id': self.stock_location.id,
- 'location_dest_id': self.customer_location.id,
- 'product_id': self.product1.id,
- 'product_uom': self.uom_unit.id,
- 'product_uom_qty': 10.0,
- 'picking_type_id': self.env.ref('stock.picking_type_in').id,
- })
-
- self.env['stock.quant']._update_available_quantity(self.product1, self.stock_location, 10)
-
- move1._action_confirm()
- move1._action_assign()
- move_line = move1.move_line_ids
-
- default = {'product_uom_qty': 3,
- 'qty_done': 3}
- move_line.copy(default=default)
- move_line.with_context(bypass_reservation_update=True).write({'product_uom_qty': 7, 'qty_done': 0})
- move1._action_done()
-
- new_move = self.env['stock.move'].search([('name', '=', 'test_split_1'), ('state', '=', 'confirmed')])
-
- self.assertEqual(move1.move_line_ids.product_uom_qty, 0.0)
- self.assertEqual(move1.move_line_ids.qty_done, 3.0)
- self.assertEqual(new_move.move_line_ids.product_uom_qty, 7.0)
- self.assertEqual(new_move.move_line_ids.qty_done, 0.0)
-
def test_edit_initial_demand_1(self):
""" Increase initial demand once everything is reserved and check if
the existing move_line is updated.
diff --git a/addons/stock/tests/test_move2.py b/addons/stock/tests/test_move2.py
index 660aff0619d..53081b78761 100644
--- a/addons/stock/tests/test_move2.py
+++ b/addons/stock/tests/test_move2.py
@@ -1059,6 +1059,38 @@ class TestSinglePicking(TestStockCommon):
for move in delivery.move_lines:
self.assertEqual(move.quantity_done, move.product_uom_qty, 'Initial demand should be equals to quantity done')
+ def test_extra_move_5(self):
+ """ Create a picking a move that is problematic with
+ rounding (5.95 - 5.5 = 0.4500000000000002). Ensure that
+ initial demand is corrct afer action_done and backoder
+ are not created.
+ """
+ delivery = self.env['stock.picking'].create({
+ 'location_id': self.stock_location,
+ 'location_dest_id': self.customer_location,
+ 'partner_id': self.partner_delta_id,
+ 'picking_type_id': self.picking_type_out,
+ })
+ self.MoveObj.create({
+ 'name': self.productA.name,
+ 'product_id': self.productA.id,
+ 'product_uom_qty': 5.5,
+ 'quantity_done': 5.95,
+ 'product_uom': self.productA.uom_id.id,
+ 'picking_id': delivery.id,
+ 'location_id': self.stock_location,
+ 'location_dest_id': self.customer_location,
+ })
+ stock_location = self.env['stock.location'].browse(self.stock_location)
+ self.env['stock.quant']._update_available_quantity(self.productA, stock_location, 5.5)
+ delivery.action_confirm()
+ delivery.action_assign()
+ delivery.action_done()
+ self.assertEqual(delivery.move_lines.product_uom_qty, 5.95, 'Move initial demand should be 5.95')
+
+ back_order = self.env['stock.picking'].search([('backorder_id', '=', delivery.id)])
+ self.assertFalse(back_order, 'There should be no back order')
+
def test_recheck_availability_1(self):
""" Check the good behavior of check availability. I create a DO for 2 unit with
only one in stock. After the first check availability, I should have 1 reserved
diff --git a/addons/stock_account/i18n/tr.po b/addons/stock_account/i18n/tr.po
index 28995f7d032..e35c1661e90 100644
--- a/addons/stock_account/i18n/tr.po
+++ b/addons/stock_account/i18n/tr.po
@@ -11,13 +11,14 @@
# gezgin biri <gezginbiri@hotmail.com>, 2017
# Ahmet Altinisik <aaltinisik@altinkaya.com.tr>, 2017
# Fırat Kaya <firat.kaya@mechsoft.com.tr>, 2017
+# Umur Akın <umura@projetgrup.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:09+0000\n"
"PO-Revision-Date: 2018-03-22 14:09+0000\n"
-"Last-Translator: Fırat Kaya <firat.kaya@mechsoft.com.tr>, 2017\n"
+"Last-Translator: Umur Akın <umura@projetgrup.com>, 2018\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -33,7 +34,7 @@ msgstr "Muhasebe Kaydı"
#. module: stock_account
#: model:ir.model.fields,field_description:stock_account.field_stock_move__account_move_ids
msgid "Account Move"
-msgstr ""
+msgstr "Hesap Hareketi"
#. module: stock_account
#: model:ir.ui.view,arch_db:stock_account.view_category_property_form
@@ -61,13 +62,13 @@ msgstr ""
#. module: stock_account
#: selection:product.category,property_valuation:0
msgid "Automated"
-msgstr ""
+msgstr "Otomatikleşmiş"
#. module: stock_account
#: selection:product.category,property_cost_method:0
#: selection:product.template,property_cost_method:0
msgid "Average Cost (AVCO)"
-msgstr ""
+msgstr "Ortalama Maliyet (AVCO)"
#. module: stock_account
#: model:ir.ui.view,arch_db:stock_account.view_change_standard_price
@@ -114,6 +115,8 @@ msgid ""
"Changing your cost method is an important change that will impact your "
"inventory valuation. Are you sure you want to make that change?"
msgstr ""
+"Maliyet yönteminizi değiştirmek, stok değerlerinize önemli etki yapabilecek "
+"bir değişikliktir."
#. module: stock_account
#: model:ir.model.fields,help:stock_account.field_stock_inventory__accounting_date
@@ -148,7 +151,7 @@ msgstr "Maliyet Yöntemi"
#. module: stock_account
#: model:ir.ui.view,arch_db:stock_account.res_config_settings_view_form
msgid "Costing"
-msgstr ""
+msgstr "Malyetlendirme"
#. module: stock_account
#: model:ir.model.fields,field_description:stock_account.field_product_category__property_cost_method
@@ -196,7 +199,7 @@ msgstr "Görünüm Adı"
#: selection:product.category,property_cost_method:0
#: selection:product.template,property_cost_method:0
msgid "First In First Out (FIFO)"
-msgstr ""
+msgstr "First in First Out (FIFO)"
#. module: stock_account
#: model:ir.model.fields,field_description:stock_account.field_stock_inventory__accounting_date
@@ -220,7 +223,7 @@ msgstr ""
#. module: stock_account
#: model:ir.actions.act_window,help:stock_account.product_valuation_action
msgid "If there are products, you will see its name and valuation."
-msgstr ""
+msgstr "Eğer burada ürünler varsa, adını ve değerini göreceksiniz."
#. module: stock_account
#: model:ir.ui.view,arch_db:stock_account.res_config_settings_view_form
@@ -290,6 +293,7 @@ msgid ""
"Manual: The accounting entries to value the inventory are not posted automatically.\n"
" Automated: An accounting entry is automatically created to value the inventory when a product enters or leaves the company."
msgstr ""
+"Manuel: Stok değer veren muhasebe kayıtları,otomatik olarak postalanmaz."
#. module: stock_account
#: model:ir.model.fields,help:stock_account.field_product_category__property_valuation
@@ -298,6 +302,8 @@ msgid ""
" Automated: An accounting entry is automatically created to value the inventory when a product enters or leaves the company.\n"
" "
msgstr ""
+"Manuel: Stok değeri veren muhasebe kayıtları,otomatik olarak postalanmaz. \n"
+"Otomatik: Bir ürün şirkete girdiğinde veya şirketten ayrıldığında envantere değer vermek için otomatik olarak bir muhasebe girişi oluşturulur. "
#. module: stock_account
#: model:ir.ui.view,arch_db:stock_account.view_move_tree_valuation
@@ -412,6 +418,7 @@ msgid ""
" Average Cost (AVCO): The products are valued at weighted average cost.\n"
" First In First Out (FIFO): The products are valued supposing those that enter the company first will also leave it first."
msgstr ""
+"Standart Fiyat : Ürünler tanımlanan standart maliyetlerine göre değerlenir."
#. module: stock_account
#: model:ir.model.fields,help:stock_account.field_product_category__property_cost_method
@@ -421,6 +428,9 @@ msgid ""
" First In First Out (FIFO): The products are valued supposing those that enter the company first will also leave it first.\n"
" "
msgstr ""
+"Standart Fiyat : Ürünler tanımlanan standart maliyetlerine göre değerlenir.\n"
+"Ortalama Maliyet (AVCO): Ürünler ağırlıklı ortalama maliyetine göre değerlenir.\n"
+"First in First Out (FIFO): Ürünler, şirkete önce girenlerin, ilk önce de bırakacaklarını var sayar."
#. module: stock_account
#: model:ir.model.fields,field_description:stock_account.field_product_category__property_stock_account_input_categ_id
@@ -461,7 +471,7 @@ msgstr "Stok Çıkış Hesabı"
#: model:ir.ui.view,arch_db:stock_account.view_move_tree_valuation
#: model:ir.ui.view,arch_db:stock_account.view_template_property_form
msgid "Stock Valuation"
-msgstr ""
+msgstr "Stok Değerleme"
#. module: stock_account
#: model:ir.model.fields,field_description:stock_account.field_product_category__property_stock_valuation_account_id
@@ -481,7 +491,7 @@ msgstr "Stok Değerleme Hesabı (Çıkan)"
#. module: stock_account
#: model:ir.actions.server,name:stock_account.action_stock_account_valuation_report
msgid "Stock Valuation Report"
-msgstr ""
+msgstr "Stok Değerleme Raporu"
#. module: stock_account
#: model:ir.model,name:stock_account.model_account_chart_template
@@ -503,6 +513,8 @@ msgid ""
"The move lines are not in a consistent state: some are entering and other "
"are leaving the company. "
msgstr ""
+"Hareket satırları istikrarlı bir durumda değildir: Bazıları girilir, "
+"diğerleri şirketten ayrılır."
#. module: stock_account
#: code:addons/stock_account/models/stock.py:343
@@ -512,6 +524,9 @@ msgid ""
"intercompany in a single step while they should go through the intercompany "
"transit location."
msgstr ""
+"Hareket çizgileri tutarlı bir durumda değil: şirketler arası geçiş "
+"konumundan geçmeleri gerektiğinde tek bir adımda şirketler arası ilişkiler "
+"yapıyorlar."
#. module: stock_account
#: code:addons/stock_account/models/stock.py:341
@@ -520,12 +535,14 @@ msgid ""
"The move lines are not in a consistent states: they do not share the same "
"origin or destination company."
msgstr ""
+"Hareket satırları istikrarlı bir durumda değil: aynı başlangıcı ya da hedefi"
+" paylaşmıyorlar. "
#. module: stock_account
#: model:ir.model.fields,field_description:stock_account.field_stock_move__to_refund
#: model:ir.model.fields,field_description:stock_account.field_stock_return_picking_line__to_refund
msgid "To Refund (update SO/PO)"
-msgstr ""
+msgstr "İade (Satış/Satın Alma Siparişlerinde İade)"
#. module: stock_account
#: model:ir.ui.view,arch_db:stock_account.product_valuation_tree
@@ -539,6 +556,8 @@ msgid ""
"Trigger a decrease of the delivered/received quantity in the associated Sale"
" Order/Purchase Order"
msgstr ""
+"ilişkili Satış/Satın Alma Siparişinde ki teslimat/alınan miktarındaki düşüşü"
+" tetikle."
#. module: stock_account
#: model:ir.ui.view,arch_db:stock_account.view_move_tree_valuation
@@ -548,7 +567,7 @@ msgstr "Ölçü Birimi"
#. module: stock_account
#: model:ir.ui.view,arch_db:stock_account.view_template_property_form
msgid "Update Cost"
-msgstr ""
+msgstr "Maliyeti Güncelle"
#. module: stock_account
#: model:ir.model.fields,help:stock_account.field_stock_location__valuation_in_account_id
diff --git a/addons/stock_account/models/stock.py b/addons/stock_account/models/stock.py
index 60f534bf298..039a934d1bf 100644
--- a/addons/stock_account/models/stock.py
+++ b/addons/stock_account/models/stock.py
@@ -260,7 +260,7 @@ class StockMove(models.Model):
# Update the standard price with the price of the last used candidate, if any.
if new_standard_price and move.product_id.cost_method == 'fifo':
- move.product_id.standard_price = new_standard_price
+ move.product_id.sudo().standard_price = new_standard_price
# If there's still quantity to value but we're out of candidates, we fall in the
# negative stock use case. We chose to value the out move at the price of the
@@ -312,7 +312,9 @@ class StockMove(models.Model):
self.write(vals)
elif self._is_out():
valued_move_lines = self.move_line_ids.filtered(lambda ml: ml.location_id._should_be_valued() and not ml.location_dest_id._should_be_valued() and not ml.owner_id)
- valued_quantity = sum(valued_move_lines.mapped('qty_done'))
+ valued_quantity = 0
+ for valued_move_line in valued_move_lines:
+ valued_quantity += valued_move_line.product_uom_id._compute_quantity(valued_move_line.qty_done, self.product_id.uom_id)
self.env['stock.move']._run_fifo(self, quantity=quantity)
if self.product_id.cost_method in ['standard', 'average']:
curr_rounding = self.company_id.currency_id.rounding
@@ -523,17 +525,6 @@ class StockMove(models.Model):
raise UserError(_("The cost of %s is currently equal to 0. Change the cost or the configuration of your product to avoid an incorrect valuation.") % (self.product_id.name,))
credit_value = debit_value
- if self.product_id.cost_method == 'average' and self.company_id.anglo_saxon_accounting:
- # in case of a supplier return in anglo saxon mode, for products in average costing method, the stock_input
- # account books the real purchase price, while the stock account books the average price. The difference is
- # booked in the dedicated price difference account.
- if self.location_dest_id.usage == 'supplier' and self.origin_returned_move_id and self.origin_returned_move_id.purchase_line_id:
- debit_value = self.origin_returned_move_id.price_unit * qty
- # in case of a customer return in anglo saxon mode, for products in average costing method, the stock valuation
- # is made using the original average price to negate the delivery effect.
- if self.location_id.usage == 'customer' and self.origin_returned_move_id:
- debit_value = self.origin_returned_move_id.price_unit * qty
- credit_value = debit_value
valuation_partner_id = self._get_partner_id_for_valuation_lines()
res = [(0, 0, line_vals) for line_vals in self._generate_valuation_lines_data(valuation_partner_id, qty, debit_value, credit_value, debit_account_id, credit_account_id).values()]
@@ -617,7 +608,7 @@ class StockMove(models.Model):
move_lines = self.with_context(forced_ref=ref)._prepare_account_move_line(quantity, abs(self.value), credit_account_id, debit_account_id)
if move_lines:
date = self._context.get('force_period_date', fields.Date.context_today(self))
- new_account_move = AccountMove.create({
+ new_account_move = AccountMove.sudo().create({
'journal_id': journal_id,
'line_ids': move_lines,
'date': date,
diff --git a/addons/stock_landed_costs/i18n/tr.po b/addons/stock_landed_costs/i18n/tr.po
index 9da45985e24..f65bb56ac38 100644
--- a/addons/stock_landed_costs/i18n/tr.po
+++ b/addons/stock_landed_costs/i18n/tr.po
@@ -12,13 +12,14 @@
# Ahmet Altinisik <aaltinisik@altinkaya.com.tr>, 2017
# Ramiz Deniz Öner <deniz@denizoner.com>, 2017
# Güven YILMAZ <guvenyilmaz@outlook.com.tr>, 2017
+# Umur Akın <umura@projetgrup.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
-"Last-Translator: Güven YILMAZ <guvenyilmaz@outlook.com.tr>, 2017\n"
+"Last-Translator: Umur Akın <umura@projetgrup.com>, 2018\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -112,6 +113,8 @@ msgid ""
"Cost and adjustments lines do not match. You should maybe recompute the "
"landed costs."
msgstr ""
+"Maliyet ve ayarlama satırları eşleşmiyor. Belki de teslim alma maliyetlerini"
+" yeniden hesaplamalısınız."
#. module: stock_landed_costs
#: model:ir.actions.act_window,help:stock_landed_costs.action_stock_landed_cost
@@ -183,6 +186,11 @@ msgid ""
"By Weight : Cost will be divided depending on its weight.\n"
"By Volume : Cost will be divided depending on its volume."
msgstr ""
+"Eşit: Maliyet eşit olarak ayrılır.\n"
+"Miktar: Maliyet ürünlerin miktarına göre ayrılır.\n"
+"Mevcut Maliyet: Maliyet ürünlerin mevcut maliyetine göre ayrılır.\n"
+"Ağırlık: Maliyet ağırlığa bağlı olarak ayrılır.\n"
+"Hacim: Maliyet hacme bağlı olarak ayrılır."
#. module: stock_landed_costs
#: model:ir.model.fields,field_description:stock_landed_costs.field_stock_valuation_adjustment_lines__final_cost
@@ -225,7 +233,7 @@ msgstr "Envanter Değeri"
#: model:ir.model.fields,field_description:stock_landed_costs.field_product_product__landed_cost_ok
#: model:ir.model.fields,field_description:stock_landed_costs.field_product_template__landed_cost_ok
msgid "Is a Landed Cost"
-msgstr ""
+msgstr "Bir maliyet yüklemesi mi"
#. module: stock_landed_costs
#: model:ir.model.fields,field_description:stock_landed_costs.field_stock_landed_cost__description
@@ -320,6 +328,8 @@ msgstr "Yeni"
msgid ""
"No valuation adjustments lines. You should maybe recompute the landed costs."
msgstr ""
+"Değerleme ayarlama satırı yok. Belki maliyet yüklemeyi tekrar "
+"hesaplamalısınız."
#. module: stock_landed_costs
#: code:addons/stock_landed_costs/models/stock_landed_cost.py:87
@@ -417,6 +427,10 @@ msgid ""
" time valuation with real price costing method. Please make sure it is the "
"case, or you selected the correct picking"
msgstr ""
+"Seçilen toplama maliyet yüklemeye etki edebilen bir hareket içermez. Maliyet"
+" yükleme, sadece gerçek zamanlı fiyat yöntemi ile gerçek zamanlı "
+"değerlemenin ürün yapılandırması ile mümkündür. Lütfen durumun doğru "
+"olduğundan veya doğru toplamayı seçtiğinizden emin olun ."
#. module: stock_landed_costs
#: model:ir.model.fields,field_description:stock_landed_costs.field_stock_landed_cost__amount_total
diff --git a/addons/stock_picking_batch/i18n/tr.po b/addons/stock_picking_batch/i18n/tr.po
index b7359c9f7a7..b3cdbdccff0 100644
--- a/addons/stock_picking_batch/i18n/tr.po
+++ b/addons/stock_picking_batch/i18n/tr.po
@@ -9,13 +9,14 @@
# Martin Trigaux, 2017
# Güven YILMAZ <guvenyilmaz@outlook.com.tr>, 2017
# Ramiz Deniz Öner <deniz@denizoner.com>, 2017
+# Umur Akın <umura@projetgrup.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
-"Last-Translator: Ramiz Deniz Öner <deniz@denizoner.com>, 2017\n"
+"Last-Translator: Umur Akın <umura@projetgrup.com>, 2018\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -38,7 +39,7 @@ msgstr "Transferleri toplu transfere ekle"
#: model:ir.actions.act_window,name:stock_picking_batch.stock_picking_to_batch_action_stock_picking
#: model:ir.ui.view,arch_db:stock_picking_batch.stock_picking_to_batch_form
msgid "Add to Batch"
-msgstr ""
+msgstr "Toplu İş Ekleyin"
#. module: stock_picking_batch
#: model:ir.ui.view,arch_db:stock_picking_batch.view_picking_internal_search_inherit_stock_picking_batch
@@ -205,7 +206,7 @@ msgstr "Bu toplu transferden sorumlu kişi"
#. module: stock_picking_batch
#: model:ir.model.fields,field_description:stock_picking_batch.field_stock_immediate_transfer__pick_to_backorder_ids
msgid "Pick To Backorder"
-msgstr ""
+msgstr "Ön Siparişleri Topla"
#. module: stock_picking_batch
#: model:ir.model.fields,help:stock_picking_batch.field_stock_immediate_transfer__pick_to_backorder_ids
@@ -241,7 +242,7 @@ msgstr "Toplu Transfer Ara"
#. module: stock_picking_batch
#: model:ir.ui.view,arch_db:stock_picking_batch.stock_picking_to_batch_form
msgid "Select a batch"
-msgstr ""
+msgstr "Bir Toplu İş Seç"
#. module: stock_picking_batch
#: code:addons/stock_picking_batch/models/stock_picking_batch.py:59
@@ -250,6 +251,8 @@ msgid ""
"Some pickings are still waiting for goods. Please check or force their "
"availability before setting this batch to done."
msgstr ""
+"Bazı toplamalar hala malzemeler için bekliyor. Lütfen bu toplu işlemi "
+"tamamlandı yapmadan önce uyumluluğunu kontrol edin veya zorlayın."
#. module: stock_picking_batch
#: code:addons/stock_picking_batch/models/stock_picking_batch.py:77
@@ -287,6 +290,10 @@ msgid ""
" It may also be useful to assign jobs (one person = one batch) or\n"
" help the timing management of operations (tasks to be done at 1pm)."
msgstr ""
+"Toplu transferlerin amacı birlikte tamamlanan olarak grup operasyon "
+"verimliliklerini arttırmaktır. Bu personele iş atamalarında ya da "
+"operasyonların zaman yönetiminde kullanışlı olabilir (saat 1 de bitti olarak"
+" görevlendir)."
#. module: stock_picking_batch
#: model:ir.model,name:stock_picking_batch.model_stock_picking
diff --git a/addons/survey/i18n/fr.po b/addons/survey/i18n/fr.po
index 7de065546cd..e8adefac7d0 100644
--- a/addons/survey/i18n/fr.po
+++ b/addons/survey/i18n/fr.po
@@ -1598,7 +1598,7 @@ msgstr "Ce sondage n'est ouvert qu'aux utilisateurs enregistrés. Veuillez "
#: model:ir.model.fields,field_description:survey.field_survey_survey__title
#: model:ir.ui.view,arch_db:survey.survey_survey_view_search
msgid "Title"
-msgstr "Civilité"
+msgstr "Titre"
#. module: survey
#: model:ir.ui.view,arch_db:survey.survey_survey_view_search
diff --git a/addons/survey/i18n/tr.po b/addons/survey/i18n/tr.po
index 06576205c1e..6b65dfade66 100644
--- a/addons/survey/i18n/tr.po
+++ b/addons/survey/i18n/tr.po
@@ -14,13 +14,14 @@
# Fırat Kaya <firat.kaya@mechsoft.com.tr>, 2017
# Saban Yildiz <sabany@projetgrup.com>, 2017
# Ahmet Altinisik <aaltinisik@altinkaya.com.tr>, 2017
+# Umur Akın <umura@projetgrup.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:11+0000\n"
"PO-Revision-Date: 2018-03-22 14:11+0000\n"
-"Last-Translator: Ahmet Altinisik <aaltinisik@altinkaya.com.tr>, 2017\n"
+"Last-Translator: Umur Akın <umura@projetgrup.com>, 2018\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -207,6 +208,8 @@ msgid ""
"A positive score indicates a correct choice; a negative or null score "
"indicates a wrong answer"
msgstr ""
+"Bir pozitif skor doğru seçimi gösterir; bir negatif ya da sıfır puan yanlış "
+"bir cevabı gösterir."
#. module: survey
#: model:ir.ui.view,arch_db:survey.page
@@ -235,6 +238,8 @@ msgid ""
"Add a list of email of recipients (will not be converted into contacts). "
"Separated by commas, semicolons or newline..."
msgstr ""
+"Alıcıların e-postalarının bir listesini ekleyin ( kişiye dönüştürülemez). "
+"Virgül, noktalı virgül veya satır sonu ile ayrılmış ."
#. module: survey
#: model:ir.actions.act_window,help:survey.action_survey_form
@@ -244,7 +249,7 @@ msgstr ""
#. module: survey
#: model:ir.ui.view,arch_db:survey.survey_email_compose_message
msgid "Add existing contacts..."
-msgstr ""
+msgstr "Varolan kişileri ekle"
#. module: survey
#: model:ir.ui.view,arch_db:survey.survey_question_form
@@ -317,7 +322,7 @@ msgstr "İptal"
#. module: survey
#: model:ir.ui.view,arch_db:survey.survey_question_form
msgid "Choices"
-msgstr ""
+msgstr "Seçimler"
#. module: survey
#: model:ir.ui.view,arch_db:survey.simple_choice
@@ -464,6 +469,8 @@ msgid ""
"Deadline to which the invitation to respond for this survey is valid. If the"
" field is empty, the invitation is still valid."
msgstr ""
+"Bu anket için yanıt vermek için davet geçerli olduğu son tarih. Alan boşsa, "
+"davet hala geçerli."
#. module: survey
#: model:ir.model.fields,field_description:survey.field_survey_mail_compose_message__date_deadline
@@ -490,7 +497,7 @@ msgstr "Tasarım"
#. module: survey
#: model:ir.ui.view,arch_db:survey.survey_form
msgid "Design Survey"
-msgstr ""
+msgstr "Anket Tasarla"
#. module: survey
#: model:ir.actions.act_window,help:survey.action_survey_form
@@ -498,6 +505,8 @@ msgid ""
"Design easily your survey, send invitations to answer by email and analyse "
"answers."
msgstr ""
+"Anketinizi kolayca tasarlayın, e-mail ile cevaplamak üzere davet gönderin ve"
+" cevapları analiz edin."
#. module: survey
#: model:ir.model.fields,field_description:survey.field_survey_question__display_mode
@@ -661,7 +670,7 @@ msgstr "Davetiyeler gönderildi"
#. module: survey
#: model:ir.model.fields,field_description:survey.field_survey_survey__is_closed
msgid "Is closed"
-msgstr ""
+msgstr "Kapalı"
#. module: survey
#: model:ir.model.fields,field_description:survey.field_survey_survey__designed
@@ -820,7 +829,7 @@ msgstr "En küçük değer"
#. module: survey
#: selection:survey.question,type:0
msgid "Multiple Lines Text Box"
-msgstr ""
+msgstr "Çok Satırlı Metin Kutusu"
#. module: survey
#: selection:survey.question,type:0
@@ -1066,7 +1075,7 @@ msgstr "Soru"
#. module: survey
#: model:ir.model.fields,field_description:survey.field_survey_label__question_id_2
msgid "Question 2"
-msgstr ""
+msgstr "Soru 2"
#. module: survey
#: model:ir.model.fields,field_description:survey.field_survey_question__question
@@ -1091,12 +1100,12 @@ msgstr "Sorular"
#. module: survey
#: model:ir.model.fields,field_description:survey.field_survey_survey__quizz_mode
msgid "Quizz Mode"
-msgstr ""
+msgstr "Quiz Modu"
#. module: survey
#: selection:survey.question,display_mode:0
msgid "Radio Buttons"
-msgstr ""
+msgstr "Radyo Düğmesi"
#. module: survey
#: model:ir.model.fields,field_description:survey.field_survey_survey__result_url
@@ -1111,17 +1120,17 @@ msgstr "Satır cevap"
#. module: survey
#: model:ir.ui.view,arch_db:survey.survey_question_form
msgid "Row1"
-msgstr ""
+msgstr "Satır 1"
#. module: survey
#: model:ir.ui.view,arch_db:survey.survey_question_form
msgid "Row2"
-msgstr ""
+msgstr "Satır 2"
#. module: survey
#: model:ir.ui.view,arch_db:survey.survey_question_form
msgid "Row3"
-msgstr ""
+msgstr "Satır 3"
#. module: survey
#: model:ir.ui.view,arch_db:survey.survey_question_form
@@ -1151,12 +1160,12 @@ msgstr "Test için Puan"
#. module: survey
#: model:ir.model.fields,field_description:survey.field_survey_label__quizz_mark
msgid "Score for this choice"
-msgstr ""
+msgstr "Bu seçim için puan"
#. module: survey
#: model:ir.model.fields,field_description:survey.field_survey_user_input_line__quizz_mark
msgid "Score given for this choice"
-msgstr ""
+msgstr "Verilen bu seçeneğin skoru"
#. module: survey
#: model:ir.ui.view,arch_db:survey.survey_label_search
@@ -1255,7 +1264,7 @@ msgstr "Bir sonraki eylem tarihi bugünden önce olan tüm kayıtları göster"
#. module: survey
#: selection:survey.question,type:0
msgid "Single Line Text Box"
-msgstr ""
+msgstr "Tek Satırlı Metin Kutusu"
#. module: survey
#: model:ir.model.fields,field_description:survey.field_survey_user_input_line__skipped
@@ -1408,7 +1417,7 @@ msgstr "Anket Sayfası"
#. module: survey
#: model:ir.actions.server,name:survey.survey_action_server_clean_test_answers
msgid "Survey: Clean test answers"
-msgstr ""
+msgstr "Anket: Test cevaplarını temizle"
#. module: survey
#: model:ir.actions.act_window,name:survey.action_survey_form
@@ -1492,7 +1501,7 @@ msgstr "Bu cevap e-posta adresi olmalıdır."
#: code:addons/survey/tests/test_survey.py:107
#, python-format
msgid "This is not a date"
-msgstr ""
+msgstr "Bu bir tarih değildir."
#. module: survey
#: code:addons/survey/models/survey.py:564
@@ -1507,6 +1516,8 @@ msgid ""
"This list of emails of recipients will not be converted in contacts. "
"Emails must be separated by commas, semicolons or newline."
msgstr ""
+"Alıcıların bu e-mail listesi kişilere dönüştürülemez. E-postalar virgül, "
+"noktalı virgül yada satır başı ile ayrılmalıdır."
#. module: survey
#: model:ir.model.fields,help:survey.field_survey_survey__thank_you_message
@@ -1568,7 +1579,7 @@ msgstr "Yanıt türleri"
#. module: survey
#: model:ir.ui.view,arch_db:survey.survey_survey_view_search
msgid "Upcoming Activities"
-msgstr ""
+msgstr "Yaklaşan Aktiviteler"
#. module: survey
#: model:ir.ui.view,arch_db:survey.survey_email_compose_message
@@ -1579,7 +1590,7 @@ msgstr "Şablonu Kullan"
#: model:ir.model.fields,help:survey.field_survey_question__description
msgid ""
"Use this field to add additional explanations about your question"
-msgstr ""
+msgstr "Sorunuz hakkında ek açıklamalar eklemek için bu alanı kullanın"
#. module: survey
#: model:res.groups,name:survey.group_survey_user
@@ -1641,7 +1652,7 @@ msgstr "Girdisini doğrulamak"
#. module: survey
#: model:ir.model.fields,field_description:survey.field_survey_question__validation_error_msg
msgid "Validation Error message"
-msgstr ""
+msgstr "Doğrulama hatası mesajı"
#. module: survey
#: model:ir.ui.view,arch_db:survey.survey_user_input_form
@@ -1672,6 +1683,9 @@ msgid ""
"feedback, recruitment interviews, employee's periodical evaluations, "
"marketing campaigns, etc."
msgstr ""
+"Farklı amaçlar için anketler oluşturabilirsin: müşteri görüşleri, servis "
+"geri bildirimleri, işe alım görüşmeleri, periyodik personel "
+"değerlendirmeleri, pazarlama kampanyaları gibi."
#. module: survey
#: model:ir.ui.view,arch_db:survey.survey_email_compose_message
@@ -1681,6 +1695,10 @@ msgid ""
"want with the public web link (in this case, the \"Login Required\" setting "
"must be disabled)."
msgstr ""
+"Anketinizin web linkini genele ve/veya özel davetle ilgili kişiye "
+"paylaşabilirsiniz. İnsanlar, davet başına bir kez cevap verebilir ve genel "
+"web linki ile istedikleri zaman cevap verebilirler ( bu durumda, 'Üye Girişi"
+" Gereklidir' uyarısı pasif yapılmalıdır)"
#. module: survey
#: code:addons/survey/models/survey.py:315
@@ -1702,7 +1720,7 @@ msgstr "Seni attı"
#. module: survey
#: model:ir.ui.view,arch_db:survey.survey_question_form
msgid "ans"
-msgstr ""
+msgstr "cevap"
#. module: survey
#: model:ir.model,name:survey.model_ir_autovacuum
diff --git a/addons/utm/i18n/nl.po b/addons/utm/i18n/nl.po
index be50e48c0f6..4e6816d3cf3 100644
--- a/addons/utm/i18n/nl.po
+++ b/addons/utm/i18n/nl.po
@@ -227,7 +227,7 @@ msgid ""
" e.g. Fall_Drive, Christmas_Special"
msgstr ""
"Dit is een naam die u helpt bij het volgen van uw verschillende campagne "
-"inspanningen, bijvoorbeeld Herst_Rit, Kerstmis_Special"
+"inspanningen, bijvoorbeeld Herfst_Rit, Kerstmis_Special"
#. module: utm
#: model:ir.model.fields,help:utm.field_account_invoice__medium_id
diff --git a/addons/utm/i18n/tr.po b/addons/utm/i18n/tr.po
index 7ac76c78f80..d3346a943e8 100644
--- a/addons/utm/i18n/tr.po
+++ b/addons/utm/i18n/tr.po
@@ -10,13 +10,14 @@
# Murat Kaplan <muratk@projetgrup.com>, 2017
# Ayhan KIZILTAN <akiziltan76@hotmail.com>, 2017
# Ramiz Deniz Öner <deniz@denizoner.com>, 2017
+# Umur Akın <umura@projetgrup.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
-"Last-Translator: Ramiz Deniz Öner <deniz@denizoner.com>, 2017\n"
+"Last-Translator: Umur Akın <umura@projetgrup.com>, 2018\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -228,6 +229,8 @@ msgid ""
"This is a name that helps you keep track of your different campaign efforts,"
" e.g. Fall_Drive, Christmas_Special"
msgstr ""
+"Farklı kampanya çabalarınızı izlemenize yardımcı olacak bir isimdir Örn: "
+"Sonbahar_Sürüşü, Yılbaşı_Özel"
#. module: utm
#: model:ir.model.fields,help:utm.field_account_invoice__medium_id
@@ -237,7 +240,7 @@ msgstr ""
#: model:ir.model.fields,help:utm.field_sale_order__medium_id
#: model:ir.model.fields,help:utm.field_utm_mixin__medium_id
msgid "This is the method of delivery, e.g. Postcard, Email, or Banner Ad"
-msgstr ""
+msgstr "Bu teslimat yöntemidir. örn: Postakartı, Eposta yada Banner reklamı"
#. module: utm
#: model:ir.model.fields,help:utm.field_account_invoice__source_id
@@ -250,6 +253,8 @@ msgid ""
"This is the source of the link, e.g. Search Engine, another domain, or name "
"of email list"
msgstr ""
+"Bu bağlantı kaynağıdır. örn: Arama Motoru, başka alan adı yada bir e-posta "
+"listesi adı"
#. module: utm
#: model:utm.source,name:utm.utm_source_twitter
@@ -259,9 +264,9 @@ msgstr "Twitter"
#. module: utm
#: model:ir.ui.menu,name:utm.marketing_utm
msgid "UTMs"
-msgstr ""
+msgstr "UTMs"
#. module: utm
#: model:ir.model,name:utm.model_utm_mixin
msgid "utm.mixin"
-msgstr ""
+msgstr "utm.mixin"
diff --git a/addons/web/i18n/nl.po b/addons/web/i18n/nl.po
index 9b960e441ac..068c20c10e5 100644
--- a/addons/web/i18n/nl.po
+++ b/addons/web/i18n/nl.po
@@ -333,7 +333,7 @@ msgstr "Conditie toevoegen"
#: code:addons/web/static/src/xml/kanban.xml:44
#, python-format
msgid "Add a new Column"
-msgstr ""
+msgstr "Nieuwe kolom toevoegen"
#. module: web
#. openerp-web
diff --git a/addons/web/i18n/tr.po b/addons/web/i18n/tr.po
index fca1a956f29..3b883a5c214 100644
--- a/addons/web/i18n/tr.po
+++ b/addons/web/i18n/tr.po
@@ -52,7 +52,7 @@ msgstr " [Bana]"
#: code:addons/web/static/src/js/chrome/search_filters.js:226
#, python-format
msgid " and "
-msgstr ""
+msgstr "ve"
#. module: web
#. openerp-web
@@ -218,7 +218,7 @@ msgstr "(etiketyok)"
#: code:addons/web/static/src/js/fields/field_utils.js:256
#, python-format
msgid "1 record"
-msgstr ""
+msgstr "1 kayıt"
#. module: web
#: model:ir.ui.view,arch_db:web.menu_secondary
@@ -244,14 +244,14 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:604
#, python-format
msgid "ALL"
-msgstr ""
+msgstr "Tümü"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:605
#, python-format
msgid "ANY"
-msgstr ""
+msgstr "Hiçbiri"
#. module: web
#. openerp-web
@@ -300,7 +300,7 @@ msgstr "Etkinleştir"
#: code:addons/web/static/src/xml/base.xml:228
#, python-format
msgid "Activate Assets Debugging"
-msgstr ""
+msgstr "Varlıklar Ayıklamasını Etkinleştir"
#. module: web
#. openerp-web
@@ -361,21 +361,21 @@ msgstr "Özelleşmiş grup ekle"
#: code:addons/web/static/src/xml/base.xml:612
#, python-format
msgid "Add filter"
-msgstr ""
+msgstr "Filtre ekle"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:672
#, python-format
msgid "Add new value"
-msgstr ""
+msgstr "Yeni değer ekle"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:1578
#, python-format
msgid "Add to Favorites"
-msgstr ""
+msgstr "Favorilerinize Ekleyin"
#. module: web
#. openerp-web
@@ -433,7 +433,7 @@ msgstr "Tüm kullanıcılar"
#: code:addons/web/static/src/xml/base.xml:145
#, python-format
msgid "An error occurred"
-msgstr ""
+msgstr "Bir hata oluştu"
#. module: web
#. openerp-web
@@ -443,6 +443,8 @@ msgid ""
"An unknown CORS error occured. The error probably originates from a "
"JavaScript file served from a different origin."
msgstr ""
+"Bilinmeyen bir CORS hatası oluştur. Hata muhtemelen farklı orijinlerden "
+"hizmet veren JavaScript dosyalarından dolayı oluştu."
#. module: web
#. openerp-web
@@ -595,7 +597,7 @@ msgstr "İptal"
#: code:addons/web/static/src/js/views/graph/graph_renderer.js:70
#, python-format
msgid "Cannot render chart with mode : "
-msgstr ""
+msgstr "Mod ile çizelge oluşturulamaz: "
#. module: web
#. openerp-web
@@ -713,7 +715,7 @@ msgstr "Kopyalandı!"
#: code:addons/web/static/src/xml/base.xml:143
#, python-format
msgid "Copy the full error to clipboard"
-msgstr ""
+msgstr "Tüm hataları panele kopyala"
#. module: web
#. openerp-web
@@ -760,7 +762,7 @@ msgstr "Oluştur"
#: code:addons/web/static/src/js/views/form/form_controller.js:502
#, python-format
msgid "Create "
-msgstr ""
+msgstr "Oluştur"
#. module: web
#. openerp-web
@@ -895,7 +897,7 @@ msgstr "Vazgeç"
#: code:addons/web/static/src/js/widgets/data_export.js:336
#, python-format
msgid "Do you really want to delete this export template?"
-msgstr ""
+msgstr "Bu dışa aktarma şablonunu gerçekten silmek istiyor musunuz?"
#. module: web
#. openerp-web
@@ -923,7 +925,7 @@ msgstr "Domain"
#: code:addons/web/static/src/js/widgets/domain_selector.js:520
#, python-format
msgid "Domain error"
-msgstr ""
+msgstr "Domain hatası"
#. module: web
#. openerp-web
@@ -977,7 +979,7 @@ msgstr "İşlemi Düzenle"
#: code:addons/web/static/src/xml/base.xml:273
#, python-format
msgid "Edit Calendar view"
-msgstr ""
+msgstr "Takvim düzenleme görüntüsü"
#. module: web
#. openerp-web
@@ -991,49 +993,49 @@ msgstr "Kolonu Düzenle"
#: code:addons/web/static/src/xml/base.xml:580
#, python-format
msgid "Edit Domain"
-msgstr ""
+msgstr "Domain Düzenle"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:267
#, python-format
msgid "Edit Form view"
-msgstr ""
+msgstr "Form görünümünü düzenle"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:271
#, python-format
msgid "Edit Gantt view"
-msgstr ""
+msgstr "Gantt görünümünü düzenle"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:270
#, python-format
msgid "Edit Graph view"
-msgstr ""
+msgstr "Grafik görünümünü düzenle"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:269
#, python-format
msgid "Edit Kanban view"
-msgstr ""
+msgstr "Kanban görünümünü düzenle"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:268
#, python-format
msgid "Edit List view"
-msgstr ""
+msgstr "Liste görünümünü düzenle"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:272
#, python-format
msgid "Edit Pivot view"
-msgstr ""
+msgstr "Pivot görünümünü düzenle"
#. module: web
#. openerp-web
@@ -1054,7 +1056,7 @@ msgstr "Aşamayı Düzenle"
#: code:addons/web/static/src/xml/base.xml:274
#, python-format
msgid "Edit view, type:"
-msgstr ""
+msgstr "görünümü düzenle, tür:"
#. module: web
#: model:ir.ui.view,arch_db:web.login
@@ -1100,7 +1102,7 @@ msgstr "Herkesin takvimi"
#: code:addons/web/static/src/js/views/calendar/calendar_model.js:507
#, python-format
msgid "Everything"
-msgstr ""
+msgstr "Herşey"
#. module: web
#. openerp-web
@@ -1287,6 +1289,9 @@ msgid ""
"\n"
"Tip: try to flip axis, filter further or reduce the number of measures."
msgstr ""
+"Excel uyumluluğu için, 256 sütundan daha fazla ise dışa aktarılamaz.\n"
+"\n"
+"İpucu: ekseni çevirmeye, daha fazla filtrelemeye veya önlem sayısını azaltmaya çalışın."
#. module: web
#. openerp-web
@@ -1356,7 +1361,7 @@ msgstr ""
#: code:addons/web/static/src/js/core/dialog.js:250
#, python-format
msgid "I am sure about this."
-msgstr ""
+msgstr "Bu konu hakkında eminim."
#. module: web
#. openerp-web
@@ -1402,13 +1407,15 @@ msgid ""
"Invalid database name. Only alphanumerical characters, underscore, hyphen "
"and dot are allowed."
msgstr ""
+"Geçersiz veritabanı adı. Yalnızca alfasayısal karakterler, alt çizgi, tire "
+"ve nokta izin verilir."
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:578
#, python-format
msgid "Invalid domain"
-msgstr ""
+msgstr "Geçersiz Domain"
#. module: web
#. openerp-web
@@ -1416,21 +1423,21 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:709
#, python-format
msgid "Invalid field chain"
-msgstr ""
+msgstr "Geçersiz alan zinciri"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/graph/graph_renderer.js:69
#, python-format
msgid "Invalid mode for chart"
-msgstr ""
+msgstr "Çizelge için geçersiz mod"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/widgets/debug_manager.js:207
#, python-format
msgid "JS Mobile Tests"
-msgstr ""
+msgstr "JS Mobil Testleri"
#. module: web
#. openerp-web
@@ -1537,7 +1544,7 @@ msgstr "M2O arama alanları henüz çok öntanımlı değerleri desteklemiyor"
#. module: web
#: model:ir.ui.view,arch_db:web.external_layout_boxed
msgid "Mail:"
-msgstr ""
+msgstr "Mail:"
#. module: web
#: model:ir.ui.view,arch_db:web.login_layout
@@ -1557,21 +1564,21 @@ msgstr "Filtreleri Yönet"
#: code:addons/web/static/src/xml/base.xml:611
#, python-format
msgid "Match"
-msgstr ""
+msgstr "Eşleştir"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:618
#, python-format
msgid "Match records with"
-msgstr ""
+msgstr "Kayıtları eşleştir"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:616
#, python-format
msgid "Match records with the following rule:"
-msgstr ""
+msgstr "Kayıtları takip eden kuralla birlikte eşleştir:"
#. module: web
#. openerp-web
@@ -1678,7 +1685,7 @@ msgstr "Odoo.com hesabım"
#: code:addons/web/static/src/xml/base.xml:606
#, python-format
msgid "NONE"
-msgstr ""
+msgstr "Hiç"
#. module: web
#. openerp-web
@@ -1735,7 +1742,7 @@ msgstr "Gösterilecek veri yok"
#: code:addons/web/static/src/js/widgets/debug_manager.js:355
#, python-format
msgid "No metadata available"
-msgstr ""
+msgstr "Kılavuz bilgi yok"
#. module: web
#. openerp-web
@@ -1794,7 +1801,7 @@ msgstr "Odoo Apps yakında hazır olacak"
#: code:addons/web/static/src/js/services/crash_manager.js:156
#, python-format
msgid "Odoo Client Error"
-msgstr ""
+msgstr "Odoo Müşteri Hatası"
#. module: web
#. openerp-web
@@ -1808,14 +1815,14 @@ msgstr "Odoo Enterprise"
#: code:addons/web/static/src/js/services/crash_manager.js:118
#, python-format
msgid "Odoo Error"
-msgstr ""
+msgstr "Odoo Hatası"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/services/crash_manager.js:58
#, python-format
msgid "Odoo Session Expired"
-msgstr ""
+msgstr "Odoo Oturumu Sonlandı"
#. module: web
#. openerp-web
@@ -1823,7 +1830,7 @@ msgstr ""
#: code:addons/web/static/src/js/services/crash_manager.js:197
#, python-format
msgid "Odoo Warning"
-msgstr ""
+msgstr "Odoo Uyarısı"
#. module: web
#. openerp-web
@@ -1878,6 +1885,8 @@ msgstr "Sadece tamsayı değeri geçerli olmalıdır."
msgid ""
"Only employee can access this database. Please contact the administrator."
msgstr ""
+"Bu veri tabanına sadece personel erişebilir. Lütfen yöneticinizle bağlantıya"
+" geçin."
#. module: web
#. openerp-web
@@ -1983,7 +1992,7 @@ msgstr "Pivot"
#: code:addons/web/static/src/js/views/list/list_renderer.js:333
#, python-format
msgid "Please click on the \"save\" button first"
-msgstr ""
+msgstr "Lütfen ilk önce 'kaydet' butonuna basın."
#. module: web
#. openerp-web
@@ -2038,6 +2047,7 @@ msgstr ""
msgid ""
"Please use the copy button to report the error to your support service."
msgstr ""
+"Lütfen destek serisine hatayı raporlamak için kopyala butonunu kullanın."
#. module: web
#: model:ir.ui.view,arch_db:web.menu_secondary
@@ -2093,7 +2103,7 @@ msgstr ""
#: code:addons/web/static/src/js/widgets/model_field_selector.js:455
#, python-format
msgid "Relation not allowed"
-msgstr ""
+msgstr "Bağlantıya izin verilmiyor"
#. module: web
#. openerp-web
@@ -2149,7 +2159,7 @@ msgstr "Geriyükle"
#: code:addons/web/static/src/xml/base.xml:220
#, python-format
msgid "Run JS Mobile Tests"
-msgstr ""
+msgstr "JS Mobil Testlerini Başlat"
#. module: web
#. openerp-web
@@ -2261,7 +2271,7 @@ msgstr "Ara: "
#: code:addons/web/static/src/xml/base.xml:150
#, python-format
msgid "See details"
-msgstr ""
+msgstr "Detayları gör."
#. module: web
#. openerp-web
@@ -2282,7 +2292,7 @@ msgstr "Seç <i class=\"fa fa-database\"/>"
#: code:addons/web/static/src/xml/base.xml:582
#, python-format
msgid "Select a model to add a filter."
-msgstr ""
+msgstr "Filtre eklemek için bir model seçin."
#. module: web
#. openerp-web
@@ -2400,7 +2410,7 @@ msgstr "Aç"
#: code:addons/web/static/src/js/widgets/domain_selector.js:567
#, python-format
msgid "Syntax error"
-msgstr ""
+msgstr "Söz dizimi hatası"
#. module: web
#. openerp-web
@@ -2414,7 +2424,7 @@ msgstr "Çay içmek için bir dakika mola verin,<br /> çünkü yükleniyor..."
#: code:addons/web/static/src/js/widgets/switch_company_menu.js:44
#, python-format
msgid "Tap on the list to change company"
-msgstr ""
+msgstr "Şirket değiştirmek için listeye dokunun."
#. module: web
#. openerp-web
@@ -2435,7 +2445,7 @@ msgstr "Tel:"
#: code:addons/web/static/src/js/widgets/domain_selector.js:567
#, python-format
msgid "The domain you entered is not properly formed"
-msgstr ""
+msgstr "Girdiğiniz domain düzgünce kurulamadı."
#. module: web
#. openerp-web
@@ -2445,6 +2455,8 @@ msgid ""
"The field chain is not valid. Did you maybe use a non-existing field name or"
" followed a non-relational field?"
msgstr ""
+"Alan zinciri geçersizdir. Belki var olmayan alan adı kullandınız yada "
+"ilişkisi olmayan alanı takip ettiniz."
#. module: web
#. openerp-web
@@ -2481,6 +2493,8 @@ msgid ""
"The record has been modified, your changes will be discarded. Do you want to"
" proceed?"
msgstr ""
+"Kayıt değiştirildi, değişikliklerinizi kaybedeceksiniz. Devam etmek istiyor "
+"musunuz?"
#. module: web
#. openerp-web
@@ -2519,7 +2533,7 @@ msgstr "Dosyanızı yüklerken bir problem oluştu"
#: code:addons/web/static/src/js/widgets/domain_selector.js:459
#, python-format
msgid "This domain is not supported."
-msgstr ""
+msgstr "Bu domain alanı desteklenmiyor."
#. module: web
#. openerp-web
@@ -2595,7 +2609,7 @@ msgstr "Silsile takibi:"
#: code:addons/web/static/src/js/fields/field_utils.js:62
#, python-format
msgid "True"
-msgstr ""
+msgstr "Doğru"
#. module: web
#. openerp-web
@@ -2662,7 +2676,7 @@ msgstr "Tanımlanmamış"
#: code:addons/web/static/src/js/chrome/abstract_web_client.js:191
#, python-format
msgid "Unknown CORS error"
-msgstr ""
+msgstr "Bilinmeyen CORS hatası"
#. module: web
#. openerp-web
@@ -2683,7 +2697,7 @@ msgstr "Adsız"
#: code:addons/web/static/src/js/views/pivot/pivot_view.js:93
#, python-format
msgid "Untitled"
-msgstr ""
+msgstr "Başlıksız"
#. module: web
#. openerp-web
@@ -2764,23 +2778,23 @@ msgstr "Uyarı"
#. module: web
#: model:ir.ui.view,arch_db:web.benchmark_suite
msgid "Web Benchmarks"
-msgstr ""
+msgstr "Web Karşılaştırması"
#. module: web
#: model:ir.ui.view,arch_db:web.qunit_mobile_suite
msgid "Web Mobile Tests"
-msgstr ""
+msgstr "Web Mobil Testleri"
#. module: web
#: model:ir.ui.view,arch_db:web.qunit_suite
msgid "Web Tests"
-msgstr ""
+msgstr "Web Testleri"
#. module: web
#: model:ir.ui.view,arch_db:web.external_layout_boxed
#: model:ir.ui.view,arch_db:web.external_layout_standard
msgid "Web:"
-msgstr ""
+msgstr "Web:"
#. module: web
#. openerp-web
@@ -2866,7 +2880,7 @@ msgstr ""
#: code:addons/web/static/src/js/widgets/model_field_selector.js:455
#, python-format
msgid "You cannot follow relations for this field chain construction"
-msgstr ""
+msgstr "Bu alan zinciri yapısı ilişkilerini takip edemezsiniz."
#. module: web
#: code:addons/web/controllers/main.py:793
@@ -2964,7 +2978,7 @@ msgstr "yaklaşık bir saat önce"
#: code:addons/web/static/src/xml/base.xml:611
#, python-format
msgid "all records"
-msgstr ""
+msgstr "tüm kayıtlar"
#. module: web
#: model:ir.model,name:web.model_base
@@ -3021,7 +3035,7 @@ msgstr "büyük ya da eşittir"
#: code:addons/web/static/src/js/widgets/domain_selector.js:25
#, python-format
msgid "in"
-msgstr ""
+msgstr "içinde"
#. module: web
#: model:ir.model,name:web.model_ir_qweb_field_image
@@ -3043,14 +3057,14 @@ msgstr "olan"
#: code:addons/web/static/src/js/chrome/search_filters.js:183
#, python-format
msgid "is after"
-msgstr ""
+msgstr "sonrası"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome/search_filters.js:184
#, python-format
msgid "is before"
-msgstr ""
+msgstr "öncesi"
#. module: web
#. openerp-web
@@ -3137,7 +3151,7 @@ msgstr "doğrudur"
#: code:addons/web/static/src/js/core/utils.js:127
#, python-format
msgid "kMGTPE"
-msgstr ""
+msgstr "kMGTPE"
#. module: web
#. openerp-web
@@ -3167,7 +3181,7 @@ msgstr "küçük ya da eşittir"
#: code:addons/web/static/src/xml/base.xml:701
#, python-format
msgid "not"
-msgstr ""
+msgstr "değildir"
#. module: web
#. openerp-web
@@ -3188,28 +3202,28 @@ msgstr "geçerli bir sayı değil"
#: code:addons/web/static/src/js/widgets/domain_selector.js:26
#, python-format
msgid "not in"
-msgstr ""
+msgstr "içinde değil"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/widgets/domain_selector.js:658
#, python-format
msgid "not set (false)"
-msgstr ""
+msgstr "ayarlanmaz (yanlış)"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:620
#, python-format
msgid "of the following rules:"
-msgstr ""
+msgstr "takip eden kuralların:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:635
#, python-format
msgid "of:"
-msgstr ""
+msgstr "ile ilgili:"
#. module: web
#. openerp-web
@@ -3224,14 +3238,14 @@ msgstr "veya"
#: code:addons/web/static/src/js/widgets/domain_selector.js:29
#, python-format
msgid "parent of"
-msgstr ""
+msgstr "üstü olarak"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:576
#, python-format
msgid "record(s)"
-msgstr ""
+msgstr "kayıtlar"
#. module: web
#. openerp-web
@@ -3245,11 +3259,11 @@ msgstr "kalan)"
#: code:addons/web/static/src/xml/base.xml:701
#, python-format
msgid "set"
-msgstr ""
+msgstr "ayar"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/widgets/domain_selector.js:658
#, python-format
msgid "set (true)"
-msgstr ""
+msgstr "ayarla (doğru)"
diff --git a/addons/web/static/src/js/core/ajax.js b/addons/web/static/src/js/core/ajax.js
index 0ee6d2ad1ed..2912b319df2 100644
--- a/addons/web/static/src/js/core/ajax.js
+++ b/addons/web/static/src/js/core/ajax.js
@@ -260,8 +260,12 @@ function get_file(options) {
if (options.error) {
var body = this.contentDocument.body;
var nodes = body.children.length === 0 ? body.childNodes : body.children;
- var node = nodes[1] || nodes[0];
- options.error(JSON.parse(node.textContent));
+ options.error({
+ message: nodes.length > 1 ? nodes[1].textContent : '',
+ data: {
+ title: nodes.length > 0 ? nodes[0].textContent : '',
+ },
+ });
}
} finally {
complete();
diff --git a/addons/web/static/src/js/fields/relational_fields.js b/addons/web/static/src/js/fields/relational_fields.js
index 423dbf40235..21a19e96263 100644
--- a/addons/web/static/src/js/fields/relational_fields.js
+++ b/addons/web/static/src/js/fields/relational_fields.js
@@ -340,8 +340,8 @@ var FieldMany2One = AbstractField.extend({
_renderReadonly: function () {
var value = _.escape((this.m2o_value || "").trim()).split("\n").join("<br/>");
this.$el.html(value);
- if (!this.nodeOptions.no_open) {
- this.$el.attr('href', '#');
+ if (!this.nodeOptions.no_open && this.value) {
+ this.$el.attr('href', _.str.sprintf('#id=%s&model=%s', this.value.res_id, this.field.relation));
this.$el.addClass('o_form_uri');
}
},
@@ -1332,10 +1332,7 @@ var FieldOne2Many = FieldX2Many.extend({
var self = this;
var id = ev.data.id;
- var onSaved = function (record, hasChanged) {
- if (!hasChanged) {
- return;
- }
+ var onSaved = function (record) {
if (_.some(self.value.data, {id: record.id})) {
// the record already exists in the relation, so trigger an
// empty 'UPDATE' operation when the user clicks on 'Save' in
diff --git a/addons/web/static/src/js/views/basic/basic_model.js b/addons/web/static/src/js/views/basic/basic_model.js
index 75ec31d5deb..d7cc08ea974 100644
--- a/addons/web/static/src/js/views/basic/basic_model.js
+++ b/addons/web/static/src/js/views/basic/basic_model.js
@@ -1068,7 +1068,13 @@ var BasicModel = AbstractModel.extend({
addFieldsInfo: function (recordID, viewInfo) {
var record = this.localData[recordID];
record.fields = _.extend({}, record.fields, viewInfo.fields);
- record.fieldsInfo = _.extend({}, record.fieldsInfo, viewInfo.fieldsInfo);
+ // complete the given fieldsInfo with the fields of the main view, so
+ // that those field will be reloaded if a reload is triggered by the
+ // secondary view
+ var fieldsInfo = _.mapObject(viewInfo.fieldsInfo, function (fieldsInfo) {
+ return _.defaults({}, fieldsInfo, record.fieldsInfo[record.viewType]);
+ });
+ record.fieldsInfo = _.extend({}, record.fieldsInfo, fieldsInfo);
},
/**
* For list resources, this freezes the current records order.
@@ -2010,7 +2016,8 @@ var BasicModel = AbstractModel.extend({
*/
_fetchRecord: function (record, options) {
var self = this;
- var fieldNames = options && options.fieldNames || record.getFieldNames();
+ options = options || {};
+ var fieldNames = options.fieldNames || record.getFieldNames(options);
fieldNames = _.uniq(fieldNames.concat(['display_name']));
return this._rpc({
model: record.model,
@@ -2510,8 +2517,9 @@ var BasicModel = AbstractModel.extend({
_fetchX2Manys: function (record, options) {
var self = this;
var defs = [];
- var fieldNames = options && options.fieldNames || record.getFieldNames();
- var viewType = options && options.viewType || record.viewType;
+ options = options || {};
+ var fieldNames = options.fieldNames || record.getFieldNames(options);
+ var viewType = options.viewType || record.viewType;
_.each(fieldNames, function (fieldName) {
var field = record.fields[fieldName];
if (field.type === 'one2many' || field.type === 'many2many') {
@@ -3034,11 +3042,15 @@ var BasicModel = AbstractModel.extend({
* default view type.
*
* @param {Object} element an element from the localData
+ * @param {Object} [options]
+ * @param {Object} [options.viewType] current viewType. If not set, we will
+ * assume main viewType from the record
* @returns {string[]} the list of field names
*/
- _getFieldNames: function (element) {
+ _getFieldNames: function (element, options) {
var fieldsInfo = element.fieldsInfo;
- return Object.keys(fieldsInfo && fieldsInfo[element.viewType] || {});
+ var viewType = options && options.viewType || element.viewType;
+ return Object.keys(fieldsInfo && fieldsInfo[viewType] || {});
},
/**
* Evaluate the record evaluation context. This method is supposed to be
@@ -3533,13 +3545,16 @@ var BasicModel = AbstractModel.extend({
* @see _fetchRecord @see _makeDefaultRecord
*
* @param {Object} record
- * @param {Object} record
+ * @param {Object} [options]
+ * @param {Object} [options.viewType] current viewType. If not set, we will
+ * assume main viewType from the record
* @returns {Deferred<Object>} resolves to the finished resource
*/
_postprocess: function (record, options) {
var self = this;
var defs = [];
- _.each(record.getFieldNames(), function (name) {
+
+ _.each(record.getFieldNames(options), function (name) {
var field = record.fields[name];
var fieldInfo = record.fieldsInfo[record.viewType][name] || {};
var options = fieldInfo.options || {};
@@ -3879,14 +3894,20 @@ var BasicModel = AbstractModel.extend({
var emptyGroupsIDs = _.difference(_.pluck(previousGroups, 'id'), list.data);
_.each(emptyGroupsIDs, function (groupID) {
list.data.push(groupID);
+ var emptyGroup = self.localData[groupID];
+ // this attribute hasn't been updated in the previous
+ // loop for empty groups
+ emptyGroup.aggregateValues = {};
});
}
return $.when.apply($, defs).then(function () {
- // generate the res_ids of the main list, being the concatenation
- // of the fetched res_ids in each group
- list.res_ids = _.flatten(_.map(arguments, function (group) {
- return group ? group.res_ids : [];
- }));
+ if (!options || !options.onlyGroups) {
+ // generate the res_ids of the main list, being the concatenation
+ // of the fetched res_ids in each group
+ list.res_ids = _.flatten(_.map(arguments, function (group) {
+ return group ? group.res_ids : [];
+ }));
+ }
return list;
});
});
diff --git a/addons/web/static/src/js/views/calendar/calendar_view.js b/addons/web/static/src/js/views/calendar/calendar_view.js
index a813a626565..6c12d508937 100644
--- a/addons/web/static/src/js/views/calendar/calendar_view.js
+++ b/addons/web/static/src/js/views/calendar/calendar_view.js
@@ -118,8 +118,20 @@ var CalendarView = AbstractView.extend({
//if quick_add = is NOT False and IS specified in view, we this one for widgets.QuickCreate'
this.controllerParams.quickAddPop = (!('quick_add' in attrs) || utils.toBoolElse(attrs.quick_add+'', true));
this.controllerParams.disableQuickCreate = params.disable_quick_create || !this.controllerParams.quickAddPop;
- // If this field is set ot true, we don't open the event in form view, but in a popup with the view_id passed by this parameter
- this.controllerParams.formViewId = !attrs.form_view_id || !utils.toBoolElse(attrs.form_view_id, true) ? false : attrs.form_view_id;
+
+ // If form_view_id is set, then the calendar view will open a form view
+ // with this id, when it needs to edit or create an event.
+ this.controllerParams.formViewId =
+ attrs.form_view_id ? parseInt(attrs.form_view_id, 10) : false;
+ if (!this.controllerParams.formViewId && params.action) {
+ var formViewDescr = _.find(params.action.views, function (v) {
+ return v[1] === 'form';
+ });
+ if (formViewDescr) {
+ this.controllerParams.formViewId = formViewDescr[0];
+ }
+ }
+
this.controllerParams.readonlyFormViewId = !attrs.readonly_form_view_id || !utils.toBoolElse(attrs.readonly_form_view_id, true) ? false : attrs.readonly_form_view_id;
this.controllerParams.eventOpenPopup = utils.toBoolElse(attrs.event_open_popup || '', false);
this.controllerParams.mapping = mapping;
diff --git a/addons/web/static/src/js/views/form/form_controller.js b/addons/web/static/src/js/views/form/form_controller.js
index e66194dcf99..3fefd7ca173 100644
--- a/addons/web/static/src/js/views/form/form_controller.js
+++ b/addons/web/static/src/js/views/form/form_controller.js
@@ -232,6 +232,16 @@ var FormController = BasicController.extend({
return changedFields;
});
},
+ /**
+ * Overrides to force the viewType to 'form', so that we ensure that the
+ * correct fields are reloaded (this is only useful for one2many form views).
+ *
+ * @override
+ */
+ update: function (params, options) {
+ params = _.extend({viewType: 'form'}, params);
+ return this._super(params, options);
+ },
//--------------------------------------------------------------------------
// Private
diff --git a/addons/web/static/src/js/views/form/form_view.js b/addons/web/static/src/js/views/form/form_view.js
index 10fc9a12b20..d8693586590 100644
--- a/addons/web/static/src/js/views/form/form_view.js
+++ b/addons/web/static/src/js/views/form/form_view.js
@@ -73,6 +73,14 @@ var FormView = BasicView.extend({
_.each(this.loadParams.fieldsInfo.form, function (attrs, fieldName) {
var field = fields[fieldName];
+ if (!field) {
+ // when a one2many record is opened in a form view, the fields
+ // of the main one2many view (list or kanban) are added to the
+ // fieldsInfo of its form view, but those fields aren't in the
+ // loadParams.fields, as they are not displayed in the view, so
+ // we can ignore them.
+ return;
+ }
if (field.type !== 'one2many' && field.type !== 'many2many') {
return;
}
diff --git a/addons/web/static/src/js/views/kanban/kanban_model.js b/addons/web/static/src/js/views/kanban/kanban_model.js
index 411d4cc7b14..6c4ea1f133c 100644
--- a/addons/web/static/src/js/views/kanban/kanban_model.js
+++ b/addons/web/static/src/js/views/kanban/kanban_model.js
@@ -398,9 +398,8 @@ var KanbanModel = BasicModel.extend({
return $.when();
},
/**
- * Reloads all progressbar data if the given id is a record's one. This is
- * done after given deferred and insures that the given deferred's result is
- * not lost.
+ * Reloads all progressbar data. This is done after given deferred and
+ * insures that the given deferred's result is not lost.
*
* @private
* @param {string} recordID
@@ -409,7 +408,9 @@ var KanbanModel = BasicModel.extend({
*/
_reloadProgressBarGroupFromRecord: function (recordID, def) {
var element = this.localData[recordID];
- if (element.type !== 'record') {
+ if (element.type === 'list' && !element.parentID) {
+ // we are reloading the whole view, so there is no need to manually
+ // reload the progressbars
return def;
}
diff --git a/addons/web/static/src/js/views/list/list_editable_renderer.js b/addons/web/static/src/js/views/list/list_editable_renderer.js
index f3dc79cd4bf..a12b85abdd0 100644
--- a/addons/web/static/src/js/views/list/list_editable_renderer.js
+++ b/addons/web/static/src/js/views/list/list_editable_renderer.js
@@ -538,8 +538,13 @@ ListRenderer.include({
* @returns {Deferred} this deferred is resolved immediately
*/
_renderView: function () {
+ var self = this;
this.currentRow = null;
- return this._super.apply(this, arguments);
+ return this._super.apply(this, arguments).then(function () {
+ if (self._isEditable()) {
+ self.$('table').addClass('o_editable_list');
+ }
+ });
},
/**
* Force the resequencing of the items in the list.
diff --git a/addons/web/static/src/js/views/pivot/pivot_model.js b/addons/web/static/src/js/views/pivot/pivot_model.js
index 4a5d9b45b4a..b45f7a9ffdf 100644
--- a/addons/web/static/src/js/views/pivot/pivot_model.js
+++ b/addons/web/static/src/js/views/pivot/pivot_model.js
@@ -17,6 +17,7 @@ odoo.define('web.PivotModel', function (require) {
*/
var AbstractModel = require('web.AbstractModel');
+var concurrency = require('web.concurrency');
var core = require('web.core');
var session = require('web.session');
var utils = require('web.utils');
@@ -32,6 +33,7 @@ var PivotModel = AbstractModel.extend({
this._super.apply(this, arguments);
this.numbering = {};
this.data = null;
+ this._loadDataDropPrevious = new concurrency.DropPrevious();
},
//--------------------------------------------------------------------------
@@ -556,7 +558,7 @@ var PivotModel = AbstractModel.extend({
}
}
- return $.when.apply(null, groupBys.map(function (groupBy) {
+ return this._loadDataDropPrevious.add($.when.apply(null, groupBys.map(function (groupBy) {
return self._rpc({
model: self.modelName,
method: 'read_group',
@@ -566,7 +568,7 @@ var PivotModel = AbstractModel.extend({
groupBy: groupBy,
lazy: false,
});
- })).then(function () {
+ }))).then(function () {
var data = Array.prototype.slice.call(arguments);
if (data[0][0].__count === 0) {
self.data.has_data = false;
diff --git a/addons/web/static/src/less/list_view.less b/addons/web/static/src/less/list_view.less
index b5237d305cb..666b4a8e116 100644
--- a/addons/web/static/src/less/list_view.less
+++ b/addons/web/static/src/less/list_view.less
@@ -6,6 +6,14 @@
background-color: @odoo-view-background-color;
margin-bottom: 0px;
+ // Checkbox in editable list
+ // should be clickable and activate the row
+ &.o_editable_list .o_data_row:not(.o_selected_row) .o_data_cell {
+ .o_checkbox:not(.o_readonly_modifier) {
+ pointer-events: none;
+ }
+ }
+
&.table {
td, th {
vertical-align: middle;
diff --git a/addons/web/static/tests/fields/relational_fields_tests.js b/addons/web/static/tests/fields/relational_fields_tests.js
index 4ba6c124db2..b8358796b7f 100644
--- a/addons/web/static/tests/fields/relational_fields_tests.js
+++ b/addons/web/static/tests/fields/relational_fields_tests.js
@@ -599,6 +599,35 @@ QUnit.module('relational_fields', {
form.destroy();
});
+ QUnit.test('many2one in non edit mode', function (assert) {
+ assert.expect(3);
+
+ var form = createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '<form string="Partners">' +
+ '<field name="trululu"/>' +
+ '</form>',
+ res_id: 1,
+ });
+
+ assert.strictEqual(form.$('a.o_form_uri').length, 1,
+ "should display 1 m2o link in form");
+ assert.strictEqual(form.$('a.o_form_uri').attr('href'), "#id=4&model=partner",
+ "href should contain id and model");
+
+ // Remove value from many2one and then save, there should not have href with id and model on m2o anchor
+ form.$buttons.find('.o_form_button_edit').click();
+ form.$('.o_field_many2one input').val('').trigger('keyup').trigger('focusout');
+ form.$buttons.find('.o_form_button_save').click();
+
+ assert.strictEqual(form.$('a.o_form_uri').attr('href'), "#",
+ "href should have #");
+
+ form.destroy();
+ });
+
QUnit.test('many2one searches with correct value', function (assert) {
var done = assert.async();
assert.expect(6);
@@ -5731,7 +5760,7 @@ QUnit.module('relational_fields', {
rpcCount++;
if (args.method === 'write') {
assert.deepEqual(args.args[1].p, [[0, args.args[1].p[0][1], {
- int_field: 123, product_id: 41
+ foo: false, int_field: 123, product_id: 41,
}]]);
}
return this._super(route, args);
@@ -8889,6 +8918,74 @@ QUnit.module('relational_fields', {
form.destroy();
});
+ QUnit.test('one2many form view with action button', function (assert) {
+ // once the action button is clicked, the record is reloaded (via the
+ // on_close handler, executed because the python method does not return
+ // any action, or an ir.action.act_window_close) ; this test ensures that
+ // it reloads the fields of the opened view (i.e. the form in this case).
+ // See https://github.com/odoo/odoo/issues/24189
+ assert.expect(7);
+
+ var data = this.data;
+ data.partner.records[0].p = [2];
+
+ var form = createView({
+ View: FormView,
+ model: 'partner',
+ data: data,
+ res_id: 1,
+ arch: '<form string="Partners">' +
+ '<field name="p">' +
+ '<tree><field name="display_name"/></tree>' +
+ '<form>' +
+ '<button type="action" string="Set Timmy"/>' +
+ '<field name="timmy"/>' +
+ '</form>' +
+ '</field>' +
+ '</form>',
+ archs: {
+ 'partner_type,false,list': '<tree><field name="display_name"/></tree>',
+ },
+ intercepts: {
+ execute_action: function (ev) {
+ data.partner.records[1].display_name = 'new name';
+ data.partner.records[1].timmy = [12];
+ ev.data.on_closed();
+ },
+ },
+ viewOptions: {
+ mode: 'edit',
+ },
+ });
+
+ assert.strictEqual(form.$('.o_data_row').length, 1,
+ "there should be one record in the one2many");
+ assert.strictEqual(form.$('.o_data_cell').text(), 'second record',
+ "initial display_name of o2m record should be correct");
+
+ // open one2many record in form view
+ form.$('.o_data_cell:first').click();
+ assert.strictEqual($('.modal .o_form_view').length, 1,
+ "should have opened the form view in a dialog");
+ assert.strictEqual($('.modal .o_form_view .o_data_row').length, 0,
+ "there should be no record in the many2many");
+
+ // click on the action button
+ $('.modal .o_form_view button').click();
+ assert.strictEqual($('.modal .o_data_row').length, 1,
+ "fields in the o2m form view should have been read");
+ assert.strictEqual($('.modal .o_data_cell').text(), 'gold',
+ "many2many subrecord should have been fetched");
+
+ // save the dialog
+ $('.modal .modal-footer .btn-primary').click();
+
+ assert.strictEqual(form.$('.o_data_cell').text(), 'new name',
+ "fields in the o2m list view should have been read as well");
+
+ form.destroy();
+ });
+
QUnit.module('FieldMany2Many');
QUnit.test('many2many kanban: edition', function (assert) {
diff --git a/addons/web/static/tests/helpers/mock_server.js b/addons/web/static/tests/helpers/mock_server.js
index 148b7452678..d5dda53a6e4 100644
--- a/addons/web/static/tests/helpers/mock_server.js
+++ b/addons/web/static/tests/helpers/mock_server.js
@@ -116,12 +116,12 @@ var MockServer = Class.extend({
console.log('%c[rpc] response' + route, 'color: blue; font-weight: bold;', JSON.parse(resultString));
}
return JSON.parse(resultString);
- }).fail(function (result) {
+ }, function (result, event) {
var errorString = JSON.stringify(result || false);
if (debug) {
console.log('%c[rpc] response (error) ' + route, 'color: orange; font-weight: bold;', JSON.parse(errorString));
}
- return JSON.parse(errorString);
+ return $.Deferred().reject(errorString, event || $.Event());
});
},
@@ -834,7 +834,7 @@ var MockServer = Class.extend({
*/
_mockReadProgressBar: function (model, kwargs) {
var domain = kwargs.domain;
- var groupBy = kwargs.groupBy;
+ var groupBy = kwargs.group_by;
var progress_bar = kwargs.progress_bar;
var records = this._getRecords(model, domain || []);
diff --git a/addons/web/static/tests/views/calendar_tests.js b/addons/web/static/tests/views/calendar_tests.js
index f24039f2d8d..2da5fbd722d 100644
--- a/addons/web/static/tests/views/calendar_tests.js
+++ b/addons/web/static/tests/views/calendar_tests.js
@@ -1875,6 +1875,101 @@ QUnit.module('Views', {
calendar.destroy();
});
+
+ QUnit.test('form_view_id attribute works (for creating events)', function (assert) {
+ assert.expect(1);
+
+ var calendar = createView({
+ View: CalendarView,
+ model: 'event',
+ data: this.data,
+ arch: '<calendar class="o_calendar_test" '+
+ 'date_start="start" '+
+ 'date_stop="stop" '+
+ 'mode="month" '+
+ 'form_view_id="42">'+
+ '<field name="name"/>'+
+ '</calendar>',
+ archs: archs,
+ viewOptions: {
+ initialDate: initialDate,
+ },
+ mockRPC: function (route, args) {
+ if (args.method === "create") {
+ // we simulate here the case where a create call with just
+ // the field name fails. This is a normal flow, the server
+ // reject the create rpc (quick create), then the web client
+ // fall back to a form view. This happens typically when a
+ // model has required fields
+ return $.Deferred().reject('None shall pass!');
+ }
+ return this._super(route, args);
+ },
+ intercepts: {
+ do_action: function (event) {
+ assert.strictEqual(event.data.action.views[0][0], 42,
+ "should do a do_action with view id 42");
+ },
+ },
+ });
+
+ var $cell = calendar.$('.fc-day-grid .fc-row:eq(2) .fc-day:eq(2)');
+ testUtils.triggerMouseEvent($cell, "mousedown");
+ testUtils.triggerMouseEvent($cell, "mouseup");
+ var $input = $('.modal-body input:first');
+ $input.val("It's just a fleshwound").trigger('input');
+ $('.modal button.btn:contains(Create)').trigger('click');
+
+ calendar.destroy();
+ });
+
+ QUnit.test('calendar fallback to form view id in action if necessary', function (assert) {
+ assert.expect(1);
+
+ var calendar = createView({
+ View: CalendarView,
+ model: 'event',
+ data: this.data,
+ arch: '<calendar class="o_calendar_test" '+
+ 'date_start="start" '+
+ 'date_stop="stop" '+
+ 'mode="month"> '+
+ '<field name="name"/>'+
+ '</calendar>',
+ archs: archs,
+ viewOptions: {
+ initialDate: initialDate,
+ action: {views: [[1, 'kanban'], [43, 'form']]}
+ },
+ mockRPC: function (route, args) {
+ if (args.method === "create") {
+ // we simulate here the case where a create call with just
+ // the field name fails. This is a normal flow, the server
+ // reject the create rpc (quick create), then the web client
+ // fall back to a form view. This happens typically when a
+ // model has required fields
+ return $.Deferred().reject('None shall pass!');
+ }
+ return this._super(route, args);
+ },
+ intercepts: {
+ do_action: function (event) {
+ assert.strictEqual(event.data.action.views[0][0], 43,
+ "should do a do_action with view id 43");
+ },
+ },
+ });
+
+ var $cell = calendar.$('.fc-day-grid .fc-row:eq(2) .fc-day:eq(2)');
+ testUtils.triggerMouseEvent($cell, "mousedown");
+ testUtils.triggerMouseEvent($cell, "mouseup");
+ var $input = $('.modal-body input:first');
+ $input.val("It's just a fleshwound").trigger('input');
+ $('.modal button.btn:contains(Create)').trigger('click');
+
+ calendar.destroy();
+ });
+
});
});
diff --git a/addons/web/static/tests/views/kanban_tests.js b/addons/web/static/tests/views/kanban_tests.js
index 9a5f9f8f0a0..04a117f97b6 100644
--- a/addons/web/static/tests/views/kanban_tests.js
+++ b/addons/web/static/tests/views/kanban_tests.js
@@ -3222,6 +3222,132 @@ QUnit.module('Views', {
kanban.destroy();
});
+ // XXX test deactivated in saas~11.2 as kanban archiving has been removed (and readded in saas~11.4)
+ QUnit.skip('column progressbars on archiving records update counter', function (assert) {
+ assert.expect(4);
+
+ // add active field on partner model and make all records active
+ this.data.partner.fields.active = {string: 'Active', type: 'char', default: true};
+
+ var kanban = createView({
+ View: KanbanView,
+ model: 'partner',
+ data: this.data,
+ arch:
+ '<kanban>' +
+ '<field name="active"/>' +
+ '<field name="bar"/>' +
+ '<field name="int_field"/>' +
+ '<progressbar field="foo" colors=\'{"yop": "success", "gnap": "warning", "blip": "danger"}\' sum_field="int_field"/>' +
+ '<templates><t t-name="kanban-box">' +
+ '<div>' +
+ '<field name="name"/>' +
+ '</div>' +
+ '</t></templates>' +
+ '</kanban>',
+ groupBy: ['bar'],
+ });
+
+ assert.strictEqual(kanban.$('.o_kanban_group:eq(1) .o_kanban_counter_side').text(), "36",
+ "counter should contain the correct value");
+ assert.strictEqual(kanban.$('.o_kanban_group:eq(1) .o_kanban_counter_progress > .progress-bar:first').data('originalTitle'), "1 yop",
+ "the counter progressbars should be correctly displayed");
+
+ // archive all records of the second columns
+ kanban.$('.o_kanban_group:eq(1) .o_column_archive').click();
+
+ assert.strictEqual(kanban.$('.o_kanban_group:eq(1) .o_kanban_counter_side').text(), "0",
+ "counter should contain the correct value");
+ assert.strictEqual(kanban.$('.o_kanban_group:eq(1) .o_kanban_counter_progress > .progress-bar:first').data('originalTitle'), "0 yop",
+ "the counter progressbars should have been correctly updated");
+
+ kanban.destroy();
+ });
+
+ QUnit.skip('kanban with progressbars: correctly update env when archiving records', function (assert) {
+ assert.expect(3);
+
+ // add active field on partner model and make all records active
+ this.data.partner.fields.active = {string: 'Active', type: 'char', default: true};
+
+ var kanban = createView({
+ View: KanbanView,
+ model: 'partner',
+ data: this.data,
+ arch:
+ '<kanban>' +
+ '<field name="active"/>' +
+ '<field name="bar"/>' +
+ '<field name="int_field"/>' +
+ '<progressbar field="foo" colors=\'{"yop": "success", "gnap": "warning", "blip": "danger"}\' sum_field="int_field"/>' +
+ '<templates><t t-name="kanban-box">' +
+ '<div>' +
+ '<field name="name"/>' +
+ '</div>' +
+ '</t></templates>' +
+ '</kanban>',
+ groupBy: ['bar'],
+ intercepts: {
+ env_updated: function (ev) {
+ assert.step(ev.data.ids);
+ },
+ },
+ });
+
+ // archive all records of the first column
+ kanban.$('.o_kanban_group:first .o_column_archive').click();
+
+ assert.verifySteps([
+ [1, 2, 3, 4],
+ [1, 2, 3],
+ ]);
+
+ kanban.destroy();
+ });
+
+ QUnit.test('RPCs when (re)loading kanban view progressbars', function (assert) {
+ assert.expect(9);
+
+ var kanban = createView({
+ View: KanbanView,
+ model: 'partner',
+ data: this.data,
+ arch:
+ '<kanban>' +
+ '<field name="bar"/>' +
+ '<field name="int_field"/>' +
+ '<progressbar field="foo" colors=\'{"yop": "success", "gnap": "warning", "blip": "danger"}\' sum_field="int_field"/>' +
+ '<templates><t t-name="kanban-box">' +
+ '<div>' +
+ '<field name="name"/>' +
+ '</div>' +
+ '</t></templates>' +
+ '</kanban>',
+ groupBy: ['bar'],
+ mockRPC: function (route, args) {
+ assert.step(args.method || route);
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ kanban.reload();
+
+ assert.verifySteps([
+ // initial load
+ 'read_group',
+ '/web/dataset/search_read',
+ '/web/dataset/search_read',
+ 'read_progress_bar',
+ // reload
+ 'read_group',
+ '/web/dataset/search_read',
+ '/web/dataset/search_read',
+ 'read_progress_bar',
+ ]);
+
+ kanban.destroy();
+ });
+
QUnit.test('drag & drop records grouped by m2o with progressbar', function (assert) {
assert.expect(4);
@@ -3291,7 +3417,7 @@ QUnit.module('Views', {
"Initial count should be Three");
kanban.$('.bg-success-full').click();
var lastCount = parseInt(kanban.$('.o_kanban_counter_side').eq(1).text());
- assert.strictEqual(lastCount, 0,
+ assert.strictEqual(lastCount, 1,
"kanban counters should vary according to what subgroup is selected");
kanban.destroy();
diff --git a/addons/web/static/tests/views/pivot_tests.js b/addons/web/static/tests/views/pivot_tests.js
index 26733a5edca..56d228bbf30 100644
--- a/addons/web/static/tests/views/pivot_tests.js
+++ b/addons/web/static/tests/views/pivot_tests.js
@@ -1124,4 +1124,37 @@ QUnit.module('Views', {
pivot.destroy();
});
+
+ QUnit.test('parallel data loading should discard all but the last one', function (assert) {
+ assert.expect(2);
+
+ var def;
+
+ var pivot = createView({
+ View: PivotView,
+ model: "partner",
+ data: this.data,
+ arch: '<pivot>' +
+ '<field name="foo" type="measure"/>' +
+ '</pivot>',
+ mockRPC: function (route, args) {
+ var result = this._super.apply(this, arguments);
+ if (args.method === 'read_group') {
+ return $.when(def).then(_.constant(result));
+ }
+ return result;
+ },
+ });
+
+ def = $.Deferred();
+ pivot.update({groupBy: ['product_id']});
+ pivot.update({groupBy: ['product_id', 'customer']});
+ def.resolve();
+
+ assert.strictEqual(pivot.$('.o_pivot_cell_value').length, 6,
+ "should have 6 cells");
+ assert.strictEqual(pivot.$('tbody tr').length, 6,
+ "should have 6 rows");
+ pivot.destroy();
+ });
});});
diff --git a/addons/web/tests/test_js.py b/addons/web/tests/test_js.py
index f903fa704c5..04df8be91c1 100644
--- a/addons/web/tests/test_js.py
+++ b/addons/web/tests/test_js.py
@@ -32,6 +32,6 @@ class WebSuite(odoo.tests.HttpCase):
filename = asset['filename']
if not filename or asset['atype'] != 'text/javascript':
continue
- with open(filename, 'r') as fp:
- if RE_ONLY.search(fp.read()):
+ with open(filename, 'rb') as fp:
+ if RE_ONLY.search(fp.read().decode('utf-8')):
self.fail("`QUnit.only()` used in file %r" % asset['url'])
diff --git a/addons/web_diagram/i18n/tr.po b/addons/web_diagram/i18n/tr.po
index c9cc5fde86d..c2c16d8b245 100644
--- a/addons/web_diagram/i18n/tr.po
+++ b/addons/web_diagram/i18n/tr.po
@@ -3,14 +3,15 @@
# * web_diagram
#
# Translators:
-# Martin Trigaux <mat@odoo.com>, 2017
+# Martin Trigaux, 2017
+# Umur Akın <umura@projetgrup.com>, 2018
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-20 09:54+0000\n"
-"PO-Revision-Date: 2017-09-20 09:54+0000\n"
-"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n"
+"POT-Creation-Date: 2018-03-22 14:11+0000\n"
+"PO-Revision-Date: 2018-03-22 14:11+0000\n"
+"Last-Translator: Umur Akın <umura@projetgrup.com>, 2018\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -34,13 +35,15 @@ msgid ""
"Are you sure you want to remove this node ? This will remove its connected "
"transitions as well."
msgstr ""
+"Bu düğümü kaldırmak istediğinizden emin misiniz? Bu bağlı geçişleri de "
+"kaldıracaktır."
#. module: web_diagram
#. openerp-web
#: code:addons/web_diagram/static/src/js/diagram_controller.js:172
#, python-format
msgid "Are you sure you want to remove this transition?"
-msgstr ""
+msgstr "Bu geçişi kaldırmak istediğinize emin misiniz?"
#. module: web_diagram
#. openerp-web
@@ -70,7 +73,7 @@ msgstr "Yeni Düğüm"
#: code:addons/web_diagram/static/src/js/diagram_controller.js:160
#, python-format
msgid "Open:"
-msgstr ""
+msgstr "Aç:"
#. module: web_diagram
#. openerp-web
diff --git a/addons/web_editor/i18n/tr.po b/addons/web_editor/i18n/tr.po
index 619a84af27d..228dd930fa4 100644
--- a/addons/web_editor/i18n/tr.po
+++ b/addons/web_editor/i18n/tr.po
@@ -35,7 +35,7 @@ msgstr ""
#: code:addons/web_editor/static/src/xml/editor.xml:193
#, python-format
msgid "(URL or Embed)"
-msgstr ""
+msgstr "(URL ya da Gömülü)"
#. module: web_editor
#. openerp-web
@@ -47,32 +47,32 @@ msgstr "(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)"
#. module: web_editor
#: model:ir.ui.view,arch_db:web_editor.colorpicker
msgid "25% Black"
-msgstr ""
+msgstr "%25 Siyah"
#. module: web_editor
#: model:ir.ui.view,arch_db:web_editor.colorpicker
msgid "25% White"
-msgstr ""
+msgstr "%25 Beyaz"
#. module: web_editor
#: model:ir.ui.view,arch_db:web_editor.colorpicker
msgid "50% Black"
-msgstr ""
+msgstr "%50 Siyah"
#. module: web_editor
#: model:ir.ui.view,arch_db:web_editor.colorpicker
msgid "50% White"
-msgstr ""
+msgstr "%50 Beyaz"
#. module: web_editor
#: model:ir.ui.view,arch_db:web_editor.colorpicker
msgid "75% Black"
-msgstr ""
+msgstr "%75 Siyah"
#. module: web_editor
#: model:ir.ui.view,arch_db:web_editor.colorpicker
msgid "75% White"
-msgstr ""
+msgstr "%75 Beyaz"
#. module: web_editor
#: model:ir.ui.view,arch_db:web_editor.snippets
@@ -93,7 +93,7 @@ msgstr ""
#: code:addons/web_editor/static/src/xml/editor.xml:198
#, python-format
msgid "Accepts"
-msgstr ""
+msgstr "Kabuller"
#. module: web_editor
#. openerp-web
@@ -119,33 +119,33 @@ msgstr "Bir resim URL ekle"
#. module: web_editor
#: model:ir.ui.view,arch_db:web_editor.snippets
msgid "Add blocks"
-msgstr ""
+msgstr "Reklam Engelleyici"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:966
#, python-format
msgid "Align center"
-msgstr ""
+msgstr "Merkeze hizalama"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:965
#, python-format
msgid "Align left"
-msgstr ""
+msgstr "Sola hizala"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:967
#, python-format
msgid "Align right"
-msgstr ""
+msgstr "Sağa hizala"
#. module: web_editor
#: model:ir.ui.view,arch_db:web_editor.colorpicker
msgid "Alpha"
-msgstr ""
+msgstr "Alpha"
#. module: web_editor
#. openerp-web
@@ -159,7 +159,7 @@ msgstr "Alternatif Yükleme"
#: code:addons/web_editor/static/src/xml/editor.xml:315
#, python-format
msgid "Assign a focal point that will always be visible"
-msgstr ""
+msgstr "Her zaman görünecek bir merkez noktaya hizala"
#. module: web_editor
#: model:ir.model.fields,field_description:web_editor.field_ir_attachment__local_url
@@ -186,47 +186,47 @@ msgstr "Arkaplan Rengi"
#: code:addons/web_editor/static/src/js/editor/snippets.options.js:950
#, python-format
msgid "Background Image Sizing"
-msgstr ""
+msgstr "Arka Plan Resim Boyutu"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/editor.xml:354
#, python-format
msgid "Background height"
-msgstr ""
+msgstr "Arkaplan Yüksekliği"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/editor.xml:364
#, python-format
msgid "Background position"
-msgstr ""
+msgstr "Arkaplan Konumu"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/editor.xml:386
#, python-format
msgid "Background repeat"
-msgstr ""
+msgstr "Arkaplan Tekrarı"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/editor.xml:342
#, python-format
msgid "Background size"
-msgstr ""
+msgstr "Arkaplan Boyutu"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/editor.xml:345
#, python-format
msgid "Background width"
-msgstr ""
+msgstr "Arkaplan Genişliği"
#. module: web_editor
#: model:ir.ui.view,arch_db:web_editor.colorpicker
msgid "Beta"
-msgstr ""
+msgstr "Beta"
#. module: web_editor
#: model:ir.ui.view,arch_db:web_editor.colorpicker
@@ -245,28 +245,28 @@ msgstr "Blok"
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:893
#, python-format
msgid "Bold"
-msgstr ""
+msgstr "Kalın"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/widgets/ace.js:832
#, python-format
msgid "Careful !"
-msgstr ""
+msgstr "Dikkat !"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:96
#, python-format
msgid "Center"
-msgstr ""
+msgstr "Merkez"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/widgets/widgets.js:81
#, python-format
msgid "Change media description and tooltip"
-msgstr ""
+msgstr "Medya tanımını ve araç bilgisini değiştir"
#. module: web_editor
#. openerp-web
@@ -289,7 +289,7 @@ msgstr "Kod"
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:959
#, python-format
msgid "Code View"
-msgstr ""
+msgstr "Kod Görünümü"
#. module: web_editor
#. openerp-web
@@ -310,14 +310,14 @@ msgstr "Sütun"
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:62
#, python-format
msgid "Common colors"
-msgstr ""
+msgstr "Yaygın renkler"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/editor.xml:310
#, python-format
msgid "Contain"
-msgstr ""
+msgstr "İçerir"
#. module: web_editor
#. openerp-web
@@ -331,7 +331,7 @@ msgstr "İçereği çevirmek için"
#: code:addons/web_editor/static/src/xml/editor.xml:194
#, python-format
msgid "Copy-paste your URL or embed code here"
-msgstr ""
+msgstr "URL kodunuzu ya da gömülü kodunuzu buraya kopyalayıp-yapıştırın."
#. module: web_editor
#. openerp-web
@@ -369,7 +369,7 @@ msgstr "Özelleştirme"
#: code:addons/web_editor/static/src/xml/editor.xml:198
#, python-format
msgid "Dailymotion"
-msgstr ""
+msgstr "Dailymotion"
#. module: web_editor
#: model:ir.ui.view,arch_db:web_editor.colorpicker
@@ -388,12 +388,12 @@ msgstr "Öntanımlı"
#: code:addons/web_editor/static/src/xml/editor.xml:387
#, python-format
msgid "Define if/how the background image will be repeated"
-msgstr ""
+msgstr "Arka plan resminin tekrarlanacağını / nasıl olacağını tanımlayın"
#. module: web_editor
#: model:ir.ui.view,arch_db:web_editor.colorpicker
msgid "Delta"
-msgstr ""
+msgstr "Delta"
#. module: web_editor
#. openerp-web
@@ -436,7 +436,7 @@ msgstr "Belge"
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:986
#, python-format
msgid "Document Style"
-msgstr ""
+msgstr "Doküman Türü"
#. module: web_editor
#. openerp-web
@@ -450,7 +450,7 @@ msgstr "Düzenlemek için çift-tıkla"
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:913
#, python-format
msgid "Drag an image here"
-msgstr ""
+msgstr "Buraya bir fotoğraf sürükleyin"
#. module: web_editor
#. openerp-web
@@ -477,14 +477,14 @@ msgstr "Düzenle"
#. module: web_editor
#: model:ir.ui.view,arch_db:web_editor.colorpicker
msgid "Epsilon"
-msgstr ""
+msgstr "Epsilon"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/widgets/ace.js:97
#, python-format
msgid "Expected "
-msgstr ""
+msgstr "Umulan"
#. module: web_editor
#. openerp-web
@@ -498,49 +498,49 @@ msgstr "Ekstra Küçük"
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:905
#, python-format
msgid "File / Image"
-msgstr ""
+msgstr "Dosya / Resim"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:910
#, python-format
msgid "Float Left"
-msgstr ""
+msgstr "Sola yay"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:912
#, python-format
msgid "Float None"
-msgstr ""
+msgstr "Asla Kaydırma"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:911
#, python-format
msgid "Float Right"
-msgstr ""
+msgstr "Sağa Kaydır"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:974
#, python-format
msgid "Font Color"
-msgstr ""
+msgstr "Font Rengi"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:901
#, python-format
msgid "Font Family"
-msgstr ""
+msgstr "Font Ailesi"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:902
#, python-format
msgid "Font Size"
-msgstr ""
+msgstr "Font Boyutu"
#. module: web_editor
#. openerp-web
@@ -559,32 +559,32 @@ msgstr "Tam Ekran"
#. module: web_editor
#: model:ir.ui.view,arch_db:web_editor.colorpicker
msgid "Gamma"
-msgstr ""
+msgstr "Gama"
#. module: web_editor
#: model:ir.ui.view,arch_db:web_editor.colorpicker
msgid "Gray"
-msgstr ""
+msgstr "Gri"
#. module: web_editor
#: model:ir.ui.view,arch_db:web_editor.colorpicker
msgid "Gray Dark"
-msgstr ""
+msgstr "Koyu Gri"
#. module: web_editor
#: model:ir.ui.view,arch_db:web_editor.colorpicker
msgid "Gray Darker"
-msgstr ""
+msgstr "Daha Koyu Gri"
#. module: web_editor
#: model:ir.ui.view,arch_db:web_editor.colorpicker
msgid "Gray Light"
-msgstr ""
+msgstr "Aydınlat"
#. module: web_editor
#: model:ir.ui.view,arch_db:web_editor.colorpicker
msgid "Gray Lighter"
-msgstr ""
+msgstr "Daha fazla aydınlat"
#. module: web_editor
#: model:ir.model,name:web_editor.model_ir_http
@@ -596,42 +596,42 @@ msgstr "HTTP yönlendirme"
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:945
#, python-format
msgid "Header 1"
-msgstr ""
+msgstr "Başlık 1"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:946
#, python-format
msgid "Header 2"
-msgstr ""
+msgstr "Başlık 2"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:947
#, python-format
msgid "Header 3"
-msgstr ""
+msgstr "Başlık 3"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:948
#, python-format
msgid "Header 4"
-msgstr ""
+msgstr "Başlık 4"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:949
#, python-format
msgid "Header 5"
-msgstr ""
+msgstr "Başlık 5"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:950
#, python-format
msgid "Header 6"
-msgstr ""
+msgstr "Başlık 6"
#. module: web_editor
#. openerp-web
@@ -652,42 +652,42 @@ msgstr "İşte etkili bir şekilde tercüme etmek amacıyla kullanılan Görsell
#: code:addons/web_editor/static/src/xml/editor.xml:219
#, python-format
msgid "Hide Dailymotion logo"
-msgstr ""
+msgstr "Dailymotion logosunu gizle"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/editor.xml:216
#, python-format
msgid "Hide Youtube logo"
-msgstr ""
+msgstr "Youtube logosunu gizle"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/editor.xml:213
#, python-format
msgid "Hide fullscreen button"
-msgstr ""
+msgstr "Tam ekran butonunu gizle"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/editor.xml:210
#, python-format
msgid "Hide player controls"
-msgstr ""
+msgstr "Oyuncu kontrollerini gizle"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/editor.xml:222
#, python-format
msgid "Hide sharing button"
-msgstr ""
+msgstr "Paylaşım butonunu gizle"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/editor.xml:367
#, python-format
msgid "Horizontal"
-msgstr ""
+msgstr "Yatay"
#. module: web_editor
#: model:ir.model.fields,field_description:web_editor.field_web_editor_converter_test_sub__id
@@ -702,6 +702,8 @@ msgid ""
"If you discard the current edition, all unsaved changes will be lost. You "
"can cancel to return to the edition mode."
msgstr ""
+"Eğer mevcut düzenlemeyi iptal ederseniz, tüm kaydedilmemiş değişiklikler "
+"kaybedilecek. Düzenleme moduna dönmek için iptal edebilirsiniz."
#. module: web_editor
#. openerp-web
@@ -711,6 +713,8 @@ msgid ""
"If you reset this file, all your customizations will be lost as it will be "
"reverted to the default file."
msgstr ""
+"Eğer bu dosyayı sıfırlarsanız, tüm özelleştirmeleriniz varsayılan dosyaya "
+"döndürüldüğü için kaybolur."
#. module: web_editor
#. openerp-web
@@ -724,7 +728,7 @@ msgstr "Resim"
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:915
#, python-format
msgid "Image URL"
-msgstr ""
+msgstr "URL Resmi"
#. module: web_editor
#. openerp-web
@@ -734,27 +738,29 @@ msgid ""
"In this mode, you can only translate texts. To change the structure of the page, you must edit the master page.\n"
" Each modification on the master page is automatically applied to all translated versions."
msgstr ""
+"Bu modda sadece metinleri çevirebilirsiniz. Sayfa yapısını değiştirmek için ana sayfayı düzenlemelisiniz.\n"
+"Anasayfadaki her değişiklik tüm çevirilmiş versiyonlara otomatik olarak uygulanır."
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/ace.xml:23
#, python-format
msgid "Include All LESS Files"
-msgstr ""
+msgstr "Tüm LESS dosyalarını içerir"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/ace.xml:17
#, python-format
msgid "Include Asset Bundles"
-msgstr ""
+msgstr "Varlık Paketlerini İçerir"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:964
#, python-format
msgid "Indent"
-msgstr ""
+msgstr "Sipariş Ver"
#. module: web_editor
#: model:ir.ui.view,arch_db:web_editor.colorpicker
@@ -766,35 +772,35 @@ msgstr "Info"
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:938
#, python-format
msgid "Insert Horizontal Rule"
-msgstr ""
+msgstr "Yatay Kuralı Ekle"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:906
#, python-format
msgid "Insert Image"
-msgstr ""
+msgstr "Resim Ekle"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:920
#, python-format
msgid "Insert Link"
-msgstr ""
+msgstr "Bağlantı Ekle"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:930
#, python-format
msgid "Insert Video"
-msgstr ""
+msgstr "Video Ekle"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/editor.xml:198
#, python-format
msgid "Instagram"
-msgstr ""
+msgstr "Instagram"
#. module: web_editor
#. openerp-web
@@ -808,28 +814,28 @@ msgstr "Yükle"
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:894
#, python-format
msgid "Italic"
-msgstr ""
+msgstr "Eğik"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:968
#, python-format
msgid "Justify full"
-msgstr ""
+msgstr "Tam hak ver"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:981
#, python-format
msgid "Keyboard shortcuts"
-msgstr ""
+msgstr "Klavye kısa yolları"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/ace.xml:11
#, python-format
msgid "LESS (CSS)"
-msgstr ""
+msgstr "LESS (CSS)"
#. module: web_editor
#. openerp-web
@@ -866,7 +872,7 @@ msgstr ""
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:900
#, python-format
msgid "Line Height"
-msgstr ""
+msgstr "Çizgi Yüksekliği"
#. module: web_editor
#. openerp-web
@@ -880,7 +886,7 @@ msgstr "Bağlantı"
#: code:addons/web_editor/static/src/xml/editor.xml:242
#, python-format
msgid "Link Label"
-msgstr ""
+msgstr "Bağlantı Etiketi"
#. module: web_editor
#. openerp-web
@@ -894,7 +900,7 @@ msgstr "Bağlantı oluştur"
#: code:addons/web_editor/static/src/xml/editor.xml:207
#, python-format
msgid "Loop"
-msgstr ""
+msgstr "Döngü"
#. module: web_editor
#. openerp-web
@@ -928,7 +934,7 @@ msgstr "Sonraki"
#: code:addons/web_editor/static/src/xml/editor.xml:389
#, python-format
msgid "No repeat"
-msgstr ""
+msgstr "Tekrar yok"
#. module: web_editor
#. openerp-web
@@ -958,7 +964,7 @@ msgstr "Tamam"
#: code:addons/web_editor/static/src/js/editor/translator.js:93
#, python-format
msgid "Ok, never show me this again"
-msgstr ""
+msgstr "Ok, bunu tekrar gösterme"
#. module: web_editor
#. openerp-web
@@ -980,7 +986,7 @@ msgstr "Seçenekler"
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:954
#, python-format
msgid "Ordered list"
-msgstr ""
+msgstr "Sipariş listesi"
#. module: web_editor
#. openerp-web
@@ -994,21 +1000,21 @@ msgstr ""
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:114
#, python-format
msgid "Padding"
-msgstr ""
+msgstr "Dolgu"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:962
#, python-format
msgid "Paragraph"
-msgstr ""
+msgstr "Paragraf"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:985
#, python-format
msgid "Paragraph formatting"
-msgstr ""
+msgstr "Paragraf formatı"
#. module: web_editor
#. openerp-web
@@ -1049,14 +1055,14 @@ msgstr "Alıntı"
#: code:addons/web_editor/static/src/js/editor/rte.js:309
#, python-format
msgid "Readonly field"
-msgstr ""
+msgstr "Salt okunur alan"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:971
#, python-format
msgid "Recent Color"
-msgstr ""
+msgstr "Mevcut Renk"
#. module: web_editor
#. openerp-web
@@ -1084,14 +1090,14 @@ msgstr "Bloku Kaldır"
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:899
#, python-format
msgid "Remove Font Style"
-msgstr ""
+msgstr "Font Stilini Kaldır"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:916
#, python-format
msgid "Remove Image"
-msgstr ""
+msgstr "Resmi Kaldır"
#. module: web_editor
#. openerp-web
@@ -1105,21 +1111,21 @@ msgstr "Tekrarla"
#: code:addons/web_editor/static/src/xml/editor.xml:390
#, python-format
msgid "Repeat both"
-msgstr ""
+msgstr "İkisini de tekrarla"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/editor.xml:391
#, python-format
msgid "Repeat x"
-msgstr ""
+msgstr "x'i tekrarla"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/editor.xml:392
#, python-format
msgid "Repeat y"
-msgstr ""
+msgstr "y'yi tekrarla"
#. module: web_editor
#. openerp-web
@@ -1134,35 +1140,35 @@ msgstr "Sıfırla"
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:978
#, python-format
msgid "Reset to default"
-msgstr ""
+msgstr "Varsayılana sıfırla"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/widgets/ace.js:490
#, python-format
msgid "Reseting views is not supported yet"
-msgstr ""
+msgstr "Henüz desteklenmeyen görünümlerin sıfırlanması"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:907
#, python-format
msgid "Resize Full"
-msgstr ""
+msgstr "Tamamını Yeniden Boyutlandır"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:908
#, python-format
msgid "Resize Half"
-msgstr ""
+msgstr "Yarısını Yeniden Boyutlandır"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:909
#, python-format
msgid "Resize Quarter"
-msgstr ""
+msgstr "Çeyreğini Yeniden Boyulandır"
#. module: web_editor
#. openerp-web
@@ -1185,14 +1191,14 @@ msgstr "Arama"
#: code:addons/web_editor/static/src/xml/snippets.xml:43
#, python-format
msgid "Search Contact"
-msgstr ""
+msgstr "Kişi Ara"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/snippets.xml:13
#, python-format
msgid "Select Parent Container"
-msgstr ""
+msgstr "Üst Kapsayıcı Seç"
#. module: web_editor
#. openerp-web
@@ -1213,7 +1219,7 @@ msgstr "Resim Seç"
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:914
#, python-format
msgid "Select from files"
-msgstr ""
+msgstr "Dosyalardan seç"
#. module: web_editor
#. openerp-web
@@ -1227,14 +1233,14 @@ msgstr "Sunucu hatas"
#: code:addons/web_editor/static/src/xml/editor.xml:365
#, python-format
msgid "Set the starting position of the background image."
-msgstr ""
+msgstr "Arkaplan resminin başlangıç konumunu belirle."
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:976
#, python-format
msgid "Set transparent"
-msgstr ""
+msgstr "Transparan ayarla"
#. module: web_editor
#. openerp-web
@@ -1244,6 +1250,8 @@ msgid ""
"Sets the width and height of the background image in percent of the parent "
"element."
msgstr ""
+"Arka plan resminin genişliğini ve yüksekliğini üst elemanın yüzdesi olarak "
+"ayarlar."
#. module: web_editor
#. openerp-web
@@ -1279,7 +1287,7 @@ msgstr "Dönme"
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:896
#, python-format
msgid "Strikethrough"
-msgstr ""
+msgstr "Üstü Çizgili"
#. module: web_editor
#. openerp-web
@@ -1293,7 +1301,7 @@ msgstr "Stil"
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:897
#, python-format
msgid "Subscript"
-msgstr ""
+msgstr "Abone Ol"
#. module: web_editor
#: model:ir.ui.view,arch_db:web_editor.colorpicker
@@ -1305,7 +1313,7 @@ msgstr "Başarı"
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:898
#, python-format
msgid "Superscript"
-msgstr ""
+msgstr "Üst Simge"
#. module: web_editor
#. openerp-web
@@ -1326,14 +1334,14 @@ msgstr "Tema ID:%s"
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:983
#, python-format
msgid "Text formatting"
-msgstr ""
+msgstr "Metin Formatı"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:923
#, python-format
msgid "Text to display"
-msgstr ""
+msgstr "Gösterilecek Metin"
#. module: web_editor
#. openerp-web
@@ -1351,21 +1359,21 @@ msgstr ""
#: code:addons/web_editor/static/src/js/widgets/widgets.js:1018
#, python-format
msgid "The provided url does not reference any supported video"
-msgstr ""
+msgstr "Sağlanan url desteklenen hiç bir videoyu referans göstermiyor."
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/widgets/widgets.js:1012
#, python-format
msgid "The provided url is not valid"
-msgstr ""
+msgstr "Sağlanan url geçersiz"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:54
#, python-format
msgid "Theme colors"
-msgstr ""
+msgstr "Tema renkleri"
#. module: web_editor
#. openerp-web
@@ -1373,42 +1381,42 @@ msgstr ""
#: code:addons/web_editor/static/src/js/editor/translator.js:177
#, python-format
msgid "This document is not saved!"
-msgstr ""
+msgstr "Bu belge kaydedilmedi !"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/editor.xml:147
#, python-format
msgid "This file is a public view attachment"
-msgstr ""
+msgstr "Bu belge bir ortak görünüm ekidir."
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/editor.xml:148
#, python-format
msgid "This file is attached to the current record"
-msgstr ""
+msgstr "Bu dosya mevcut kayda eklenmiştir."
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:924
#, python-format
msgid "To what URL should this link go?"
-msgstr ""
+msgstr "Bubağlantı hangi URL'ye gitmeli?"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/editor.xml:40
#, python-format
msgid "Tooltip"
-msgstr ""
+msgstr "Bilgi Çubuğu"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/translator.js:50
#, python-format
msgid "Translate Attribute"
-msgstr ""
+msgstr "Nitelikli Tercüme"
#. module: web_editor
#. openerp-web
@@ -1422,7 +1430,7 @@ msgstr "İçerik Çevrildi"
#: code:addons/web_editor/static/src/js/editor/translator.js:91
#, python-format
msgid "Translation Info"
-msgstr ""
+msgstr "Çeviri Bilgisi"
#. module: web_editor
#. openerp-web
@@ -1430,21 +1438,21 @@ msgstr ""
#: model:ir.ui.view,arch_db:web_editor.colorpicker
#, python-format
msgid "Transparent"
-msgstr ""
+msgstr "Transparan"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/editor.xml:248
#, python-format
msgid "URL or Email"
-msgstr ""
+msgstr "URL yada E-posta"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:895
#, python-format
msgid "Underline"
-msgstr ""
+msgstr "Altı çizili"
#. module: web_editor
#. openerp-web
@@ -1458,28 +1466,28 @@ msgstr "Geri Alma"
#: code:addons/web_editor/static/src/js/widgets/ace.js:90
#, python-format
msgid "Unexpected "
-msgstr ""
+msgstr "Beklenmeyen"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:921
#, python-format
msgid "Unlink"
-msgstr ""
+msgstr "Bağlantıyı kopar"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:953
#, python-format
msgid "Unordered list"
-msgstr ""
+msgstr "Sırasız liste"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/editor.xml:96
#, python-format
msgid "Upload an image"
-msgstr ""
+msgstr "Bir resim yükleyin"
#. module: web_editor
#. openerp-web
@@ -1493,7 +1501,7 @@ msgstr "Resim optimizasyon olmadan yükleme"
#: code:addons/web_editor/static/src/xml/editor.xml:376
#, python-format
msgid "Vertical"
-msgstr ""
+msgstr "Dikey"
#. module: web_editor
#. openerp-web
@@ -1522,21 +1530,21 @@ msgstr "Video URL?"
#: code:addons/web_editor/static/src/xml/editor.xml:193
#, python-format
msgid "Video code"
-msgstr ""
+msgstr "Video kodu"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/editor.xml:198
#, python-format
msgid "Vimeo"
-msgstr ""
+msgstr "Vimeo"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/editor.xml:198
#, python-format
msgid "Vine.co"
-msgstr ""
+msgstr "Vine.co"
#. module: web_editor
#: model:ir.ui.view,arch_db:web_editor.colorpicker
@@ -1554,14 +1562,14 @@ msgstr "Beyaz"
#: code:addons/web_editor/static/src/xml/ace.xml:10
#, python-format
msgid "XML (HTML)"
-msgstr ""
+msgstr "XML (HTML)"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/js/editor/rte.summernote.js:111
#, python-format
msgid "Xl"
-msgstr ""
+msgstr "XI"
#. module: web_editor
#. openerp-web
@@ -1575,14 +1583,14 @@ msgstr "Çeviri modu girmek üzeresiniz."
#: code:addons/web_editor/static/src/xml/editor.xml:198
#, python-format
msgid "Youku"
-msgstr ""
+msgstr "Youku"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/editor.xml:198
#, python-format
msgid "Youtube"
-msgstr ""
+msgstr "Youtube"
#. module: web_editor
#. openerp-web
@@ -1599,14 +1607,14 @@ msgstr "ve"
#: code:addons/web_editor/static/src/xml/editor.xml:379
#, python-format
msgid "auto"
-msgstr ""
+msgstr "oto"
#. module: web_editor
#. openerp-web
#: code:addons/web_editor/static/src/xml/editor.xml:112
#, python-format
msgid "https://www.odoo.com/logo.png"
-msgstr ""
+msgstr "https://www.odoo.com/logo.png"
#. module: web_editor
#: model:ir.model,name:web_editor.model_ir_attachment
@@ -1708,7 +1716,7 @@ msgstr "ir.ui.view"
#: code:addons/web_editor/static/src/xml/editor.xml:198
#, python-format
msgid "videos"
-msgstr ""
+msgstr "videolar"
#. module: web_editor
#: model:ir.model,name:web_editor.model_web_editor_converter_test
diff --git a/addons/web_editor/static/lib/summernote/src/js/EventHandler.js b/addons/web_editor/static/lib/summernote/src/js/EventHandler.js
index 9701b8728d2..efa57f8111c 100644
--- a/addons/web_editor/static/lib/summernote/src/js/EventHandler.js
+++ b/addons/web_editor/static/lib/summernote/src/js/EventHandler.js
@@ -472,7 +472,8 @@ define([
onImageUpload: options.onImageUpload,
onImageUploadError: options.onImageUploadError,
onMediaDelete: options.onMediaDelete,
- onToolbarClick: options.onToolbarClick
+ onToolbarClick: options.onToolbarClick,
+ onUpload: options.onUpload,
});
var styleInfo = modules.editor.styleFromNode(layoutInfo.editable());
diff --git a/addons/web_editor/static/lib/summernote/src/js/module/Clipboard.js b/addons/web_editor/static/lib/summernote/src/js/module/Clipboard.js
index 955b49437a8..4cd9088da75 100644
--- a/addons/web_editor/static/lib/summernote/src/js/module/Clipboard.js
+++ b/addons/web_editor/static/lib/summernote/src/js/module/Clipboard.js
@@ -1,256 +1,41 @@
define([
- 'summernote/core/list',
- 'summernote/core/dom',
- 'summernote/core/key',
- 'summernote/core/agent',
- 'summernote/core/range'
+ 'summernote/core/list',
+ 'summernote/core/dom',
+ 'summernote/core/key',
+ 'summernote/core/agent',
+ 'summernote/core/range'
], function (list, dom, key, agent, range) {
- var Clipboard = function (handler) {
- var $paste;
-
- this.attach = function (layoutInfo) {
- // [workaround] getting image from clipboard
- // - IE11 and Firefox: CTRL+v hook
- // - Webkit: event.clipboardData
- if (agent.isMSIE && agent.browserVersion > 10) {
- $paste = $('<div />').attr('contenteditable', true).css({
- position : 'absolute',
- left : -100000,
- opacity : 0
- });
-
- layoutInfo.editable().on('keydown', function (e) {
- if (e.ctrlKey && e.keyCode === key.code.V) {
- handler.invoke('saveRange', layoutInfo.editable());
- $paste.focus();
-
- setTimeout(function () {
- pasteByHook(layoutInfo);
- }, 0);
- }
- });
-
- layoutInfo.editable().before($paste);
- } else {
- layoutInfo.editable().on('paste', pasteByEvent);
- }
- };
-
- var pasteByHook = function (layoutInfo) {
- var $editable = layoutInfo.editable();
- var node = $paste[0].firstChild;
-
- if (dom.isImg(node)) {
- var dataURI = node.src;
- var decodedData = atob(dataURI.split(',')[1]);
- var array = new Uint8Array(decodedData.length);
- for (var i = 0; i < decodedData.length; i++) {
- array[i] = decodedData.charCodeAt(i);
- }
-
- var blob = new Blob([array], { type : 'image/png' });
- blob.name = 'clipboard.png';
-
- handler.invoke('restoreRange', $editable);
- handler.invoke('focus', $editable);
- handler.insertImages(layoutInfo, [blob]);
- } else {
- var pasteContent = $('<div />').html($paste.html()).html();
- handler.invoke('restoreRange', $editable);
- handler.invoke('focus', $editable);
-
- if (pasteContent) {
- handler.invoke('pasteHTML', $editable, pasteContent);
- }
- }
-
- $paste.empty();
- };
-
- /**
- * paste by clipboard event
- *
- * @param {Event} event
- */
- var pasteByEvent = function (event) {
- var clipboardData = event.originalEvent.clipboardData;
- var layoutInfo = dom.makeLayoutInfo(event.currentTarget || event.target);
- var $editable = layoutInfo.editable();
-
- if (["INPUT", "TEXTAREA"].indexOf(event.target.tagName) !== -1) {
- return;
- }
-
- if (clipboardData && clipboardData.items && clipboardData.items.length) {
- var item = list.head(clipboardData.items);
- if (item.kind === 'file' && item.type.indexOf('image/') !== -1) {
- handler.insertImages(layoutInfo, [item.getAsFile()]);
- }
- handler.invoke('editor.afterCommand', $editable);
- }
-
- event.preventDefault();
-
- var html = clipboardData.getData("text/html");
- var $node = $('<div/>').html(html);
- // if copying source did not provide html, default to plain text
- if(!html) {
- $node.text(clipboardData.getData("text/plain")).html(function(_, html){
- return html.replace(/\r?\n/g,'<br>');
- });
- }
- pasteContent($node, layoutInfo, $editable);
- };
-
- /*
- remove undesirable tag
- filter classes and style attributes
- remove undesirable attributes
- */
- var filter_tag = function ($nodes, $editable) {
- return $nodes.each(function() {
- var $node = $(this);
-
- if ($node.attr('style')) {
- var style = _.filter(_.compact($node.attr('style').split(/\s*;\s*/)), function (style) {
- style = style.split(/\s*:\s*/);
- return /width|height|color|background-color|font-weight|text-align|font-style|text-decoration/i.test(style[0]) &&
- !(style[1] === 'initial' || style[1] === 'inherit' || $node.css(style[0]) === $editable.css(style[0]) ||
- (style[0] === 'background-color' && style[1] === 'rgb(255, 255, 255)') ||
- (style[0] === 'color' && style[1] === 'rgb(0, 0, 0)'));
- }).join(';');
- if (style.length) {
- $node.attr('style', style);
- } else {
- $node.removeAttr('style');
- }
- }
-
- if ($node.attr('class')) {
- var classes = _.filter($node.attr('class').split(/\s+/), function (style) {
- return /(^|\s)(fa|pull|text|bg)(\s|-|$)/.test(style);
- }).join(' ');
- if (classes.length) {
- $node.attr('class', classes);
- } else {
- $node.removeAttr('class');
- }
- }
- });
- };
-
- var pasteContent = function ($node, layoutInfo, $editable) {
- $node.find('meta, script, style').remove();
- filter_tag($node.find('*'), $editable).removeAttr('title', 'alt', 'id', 'contenteditable');
-
- /*
- remove unless span and unwant font
- */
- $node.find('span, font').filter(':not([class]):not([style])').each(function () {
- $(this).replaceWith($(this).contents());
- });
- $node.find('span + span').each(function () {
-
- if (dom.isText(this.previousSibling)) {
- if (dom.isVisibleText(this.previousSibling)) {
- return;
- } else { // keep space between 2 tags, but can merge the both tags
- $(this).prev().append(this.previousSibling);
- }
- }
- if ($(this).attr('class') === $(this).prev().attr('class') && $(this).attr('style') === $(this).prev().attr('style')) {
- $(this).prev().append($(this).contents());
- $(this).remove();
- }
- });
-
- // remove empty table row and td
- var $tdr;
- while(($tdr = $node.find('tr:empty, td:empty, th:empty, tbody:empty, t-head:empty, table:empty')) && $tdr.length) {
- $tdr.remove();
- }
-
- /*
- reset architecture HTML node and add <p> tag
- */
- var $arch = $('<div/>');
- var $last = $arch;
- $node.contents().each(function () {
- if (dom.isBR(this)) {
- $(this).remove();
- $last = $('<p/>');
- $arch.append($last);
- } else if (/h[0-9]+|li|table|p/i.test(this.tagName)) {
- $last = $('<p/>');
- $arch.append(this).append($last);
- } else if ($arch.is(':empty') && dom.isText(this)) {
- $last = $('<p/>').append(this);
- $arch.append($last);
- } else if (this.nodeType !== Node.COMMENT_NODE) {
- $last.append(this);
- }
- });
- $arch.find(':not([class]):not([style]):empty, p:empty').remove();
-
- /*
- history
- */
- $editable.data('NoteHistory').recordUndo($editable, "paste");
-
- /*
- remove selected content
- */
- var r = range.create();
- if (!r.isCollapsed()) {
- r = r.deleteContents();
- r.select();
- }
-
- // If only pasting a <p/> element in an unique <p/> element, only paste
- // the <p/> element text
- var $p = $arch.children('p');
- var onlyAP = ($p.length === 1 && $arch.children().length === 1);
- if (onlyAP) {
- var $p1 = $(r.sc).closest('p');
- var $p2 = $(r.ec).closest('p');
- if ($p1.length && $p2.length && $p1[0] === $p2[0]) {
- $arch.html($p.text());
- }
- }
-
- /*
- insert content
- */
- var $nodes = $();
- $editable.on('DOMNodeInserted', function (event) {
- $nodes = $nodes.add(event.originalEvent.target);
- });
- window.document.execCommand('insertHTML', false, $arch.html());
- $editable.off('DOMNodeInserted');
-
- /*
- clean insterted content
- */
- var $span = $nodes.filter('span');
- $span = $span.first().add($span.last());
- $span = $span.add($span.prev('span'));
- $span = $span.add($span.next('span'));
- filter_tag($span, $editable);
- $span.not('[span], [style]').each(function () {
- _.each(this.childNodes, function (node) {
- $(node.parentNode).after(node);
- });
- $(this).remove();
- });
- r = range.create();
- if (!dom.isText(r.ec)) {
- r = range.create(r.sc.childNodes[r.so], dom.nodeLength(r.sc.childNodes[r.so]));
- }
- r.clean().select();
-
- $editable.trigger('content_changed');
+ // ODOO override: use 0.8.10 version of this, adapted for the old summernote
+ // version odoo is using
+ var Clipboard = function (handler) {
+ /**
+ * paste by clipboard event
+ *
+ * @param {Event} event
+ */
+ var pasteByEvent = function (event) {
+ if (["INPUT", "TEXTAREA"].indexOf(event.target.tagName) !== -1) {
+ // ODOO override: from old summernote version
+ return;
+ }
+
+ var clipboardData = event.originalEvent.clipboardData;
+ var layoutInfo = dom.makeLayoutInfo(event.currentTarget || event.target);
+ var $editable = layoutInfo.editable();
+
+ if (clipboardData && clipboardData.items && clipboardData.items.length) {
+ var item = list.head(clipboardData.items);
+ if (item.kind === 'file' && item.type.indexOf('image/') !== -1) {
+ handler.insertImages(layoutInfo, [item.getAsFile()]);
+ }
+ handler.invoke('editor.afterCommand', $editable);
+ }
+ };
+
+ this.attach = function (layoutInfo) {
+ layoutInfo.editable().on('paste', pasteByEvent);
+ };
};
- };
- return Clipboard;
+ return Clipboard;
});
diff --git a/addons/web_editor/static/src/js/backend/fields.js b/addons/web_editor/static/src/js/backend/fields.js
index 479a26469a3..a636b7e5be3 100644
--- a/addons/web_editor/static/src/js/backend/fields.js
+++ b/addons/web_editor/static/src/js/backend/fields.js
@@ -163,7 +163,7 @@ var FieldTextHtmlSimple = basic_fields.DebouncedField.extend(TranslatableFieldMi
if (fieldNameAttachment) {
this.fieldNameAttachment = fieldNameAttachment;
this.attachments = [];
- summernoteConfig.onImageUpload = this._onImageUpload.bind(this);
+ summernoteConfig.onUpload = this._onUpload.bind(this);
summernoteConfig.getMediaDomain = this._getAttachmentsDomain.bind(this);
}
@@ -195,7 +195,7 @@ var FieldTextHtmlSimple = basic_fields.DebouncedField.extend(TranslatableFieldMi
*
* @private
*/
- _onImageUpload: function (attachments) {
+ _onUpload: function (attachments) {
var self = this;
attachments = _.filter(attachments, function (attachment) {
return !_.findWhere(self.attachments, {id: attachment.id});
diff --git a/addons/web_editor/static/src/js/editor/rte.summernote.js b/addons/web_editor/static/src/js/editor/rte.summernote.js
index ddf588eb569..3de70e5fcda 100644
--- a/addons/web_editor/static/src/js/editor/rte.summernote.js
+++ b/addons/web_editor/static/src/js/editor/rte.summernote.js
@@ -397,7 +397,7 @@ eventHandler.modules.imageDialog.showImageDialog = function ($editable) {
media: media,
options: {
lastFilters: ['background'],
- onUpload: $editable.data('callbacks').onImageUpload,
+ onUpload: $editable.data('callbacks').onUpload,
},
});
return new $.Deferred().reject();
@@ -675,7 +675,7 @@ function summernote_mousedown(event) {
return;
}
var editables = $(".o_editable[contenteditable], .note-editable[contenteditable]");
- var r_editable = editables.has((r||{}).sc);
+ var r_editable = editables.has((r||{}).sc).addBack(editables.filter((r||{}).sc));
if (!r_editable.closest('.note-editor').is($editable) && !r_editable.filter('.o_editable').is(editables)) {
var saved_editable = editables.has((remember_selection||{}).sc);
if ($editable.length && !saved_editable.closest('.o_editable, .note-editor').is($editable)) {
diff --git a/addons/website/models/website.py b/addons/website/models/website.py
index 09dced17b03..8058c6d8cda 100644
--- a/addons/website/models/website.py
+++ b/addons/website/models/website.py
@@ -884,9 +884,10 @@ class Menu(models.Model):
for menu in data['data']:
menu_id = self.browse(menu['id'])
# if the url match a website.page, set the m2o relation
- page = self.env['website.page'].search([('url', '=', menu['url'])], limit=1)
+ page = self.env['website.page'].search(['|', ('url', '=', menu['url']), ('url', '=', '/' + menu['url'])], limit=1)
if page:
menu['page_id'] = page.id
+ menu['url'] = page.url
elif menu_id.page_id:
menu_id.page_id.write({'url': menu['url']})
menu_id.write(menu)
diff --git a/addons/website/views/website_templates.xml b/addons/website/views/website_templates.xml
index fb6f004f27f..e1a2af66317 100644
--- a/addons/website/views/website_templates.xml
+++ b/addons/website/views/website_templates.xml
@@ -74,7 +74,7 @@
<span t-field="submenu.name"/>
</a>
</li>
- <li t-if="submenu.is_visible and submenu.child_id.filtered(lambda menu: menu.is_visible)" t-attf-class="dropdown #{
+ <li t-if="submenu.child_id.filtered(lambda menu: menu.is_visible)" t-attf-class="dropdown #{
(submenu.clean_url() and submenu.clean_url() != '/' and any([request.httprequest.path == child.url for child in submenu.child_id if child.url]) or
(submenu.clean_url() and request.httprequest.path == submenu.clean_url())) and 'active'
}">
diff --git a/addons/website_event/static/src/js/website_event.js b/addons/website_event/static/src/js/website_event.js
index c677b0bda2c..3aa8691fca7 100644
--- a/addons/website_event/static/src/js/website_event.js
+++ b/addons/website_event/static/src/js/website_event.js
@@ -41,6 +41,7 @@ var EventRegistrationForm = Widget.extend({
ev.preventDefault();
ev.stopPropagation();
var $form = $(ev.currentTarget).closest('form');
+ var $button = $(ev.currentTarget).closest('[type="submit"]');
var post = {};
$('#registration_form select').each(function () {
post[$(this).attr('name')] = $(this).val();
@@ -54,9 +55,10 @@ var EventRegistrationForm = Widget.extend({
return ajax.jsonRpc($form.attr('action'), 'call', post).then(function (modal) {
var $modal = $(modal);
$modal.find('.modal-body > div').removeClass('container'); // retrocompatibility - REMOVE ME in master / saas-19
- $modal.after($form).modal();
+ $modal.insertAfter($form).modal();
$modal.on('click', '.js_goto_event', function () {
$modal.modal('hide');
+ $button.prop('disabled', false);
});
});
}
diff --git a/addons/website_forum/static/src/js/website_forum.js b/addons/website_forum/static/src/js/website_forum.js
index 255ba20b87e..96cc4946b64 100644
--- a/addons/website_forum/static/src/js/website_forum.js
+++ b/addons/website_forum/static/src/js/website_forum.js
@@ -25,13 +25,14 @@ odoo.define('website_forum.website_forum', function (require) {
if ($('a[href*="/login"]').length) {
msg = _t('Sorry you must be logged in to perform this action');
}
- var $warning = $('<div class="alert alert-danger alert-dismissable oe_forum_alert" id="karma_alert">'+
+ var $warning = $('<div class="alert alert-danger alert-dismissable oe_forum_alert mt8" id="karma_alert">'+
'<button type="button" class="close notification_close" data-dismiss="alert" aria-hidden="true">&times;</button>'+
msg + '</div>');
- var vote_alert = $(ev.currentTarget).parent().find("#vote_alert");
- if (vote_alert.length === 0) {
- $(ev.currentTarget).parent().append($warning);
+ var $voteAlert = $('#karma_alert');
+ if ($voteAlert.length) {
+ $voteAlert.remove();
}
+ $(ev.currentTarget).after($warning);
}
});
diff --git a/addons/website_forum/static/src/less/website_forum.less b/addons/website_forum/static/src/less/website_forum.less
index fde4b88d78c..b4fb02792c2 100644
--- a/addons/website_forum/static/src/less/website_forum.less
+++ b/addons/website_forum/static/src/less/website_forum.less
@@ -130,6 +130,7 @@ a.no-decoration {
.close.comment_delete {
font-size: 16px;
+ float: none;
}
.country_flag {
@@ -154,8 +155,6 @@ a.no-decoration {
.oe_forum_alert {
position: absolute;
- margin-top: -30px;
- margin-left: 90px;
width: 300px;
z-index: 9999;
}
diff --git a/addons/website_forum/views/website_forum.xml b/addons/website_forum/views/website_forum.xml
index 3fc580ef4a5..af35b1356a8 100644
--- a/addons/website_forum/views/website_forum.xml
+++ b/addons/website_forum/views/website_forum.xml
@@ -32,7 +32,7 @@
<!-- helper -->
<template id="link_button">
- <form method="POST" t-att-action="url">
+ <form method="POST" t-att-action="url" t-attf-class="#{form_classes}">
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
<button t-attf-class="fa btn-link #{classes} #{karma and 'karma_required text-muted' or ''}" t-attf-data-karma="#{karma}">
<t t-esc="label"/></button>
@@ -1109,8 +1109,8 @@
<t t-set="label"> </t>
<t t-set="karma" t-value="user.karma&lt;required_karma and required_karma or 0"/>
<t t-set="classes" t-value="'close comment_delete fa-times'"/>
+ <t t-set="form_classes" t-value="'pull-right'"/>
</t>
-
<div><span t-field="message.body" class="oe_no_empty"/></div>
<t t-set="required_karma" t-value="message.author_id.id == user.partner_id.id and object.forum_id.karma_comment_convert_own or object.forum_id.karma_comment_convert_all"/>
<t t-if="(object.parent_id and object.parent_id.state != 'close' and object.parent_id.active != False) or (not object.parent_id and object.state != 'close' and object.active != False)">
@@ -1121,7 +1121,8 @@
<t t-set="url" t-value="'/forum/' + slug(forum) + '/post/' + slug(object) + '/comment/' + slug(message) + '/convert_to_answer'"/>
<t t-set="label">Convert as an answer</t>
<t t-set="karma" t-value="user.karma&lt;required_karma and required_karma or 0"/>
- <t t-set="classes" t-value="'fa-magic pull-right'"/>
+ <t t-set="classes" t-value="'fa-magic'"/>
+ <t t-set="form_classes" t-value="'pull-right'"/>
</t>
</t>
<a t-attf-href="/forum/#{slug(forum)}/partner/#{message.author_id.id}"
@@ -1302,6 +1303,10 @@
<!--Private profile-->
<template id="private_profile">
<t t-call="website_forum.header">
+ <t t-set='head'>
+ <t t-raw='head'/>
+ <meta name="robots" content="noindex follow"/>
+ </t>
<h1 class="mt32">This profile is private!</h1>
<p>
<a t-attf-href="/forum/#{slug(forum)}">Return to the question list.</a>
diff --git a/addons/website_quote/controllers/main.py b/addons/website_quote/controllers/main.py
index f795de5f4e6..434750c9250 100644
--- a/addons/website_quote/controllers/main.py
+++ b/addons/website_quote/controllers/main.py
@@ -8,6 +8,7 @@ from odoo.http import request
from odoo.addons.portal.controllers.portal import get_records_pager
from odoo.addons.sale.controllers.portal import CustomerPortal
from odoo.addons.portal.controllers.mail import _message_post_helper
+from odoo.osv import expression
class CustomerPortal(CustomerPortal):
@@ -49,7 +50,7 @@ class sale_quote(http.Controller):
if Order and request.session.get('view_quote_%s' % Order.id) != now and request.env.user.share:
request.session['view_quote_%s' % Order.id] = now
body = _('Quotation viewed by customer')
- _message_post_helper(res_model='sale.order', res_id=Order.id, message=body, token=token, message_type='notification', subtype="mail.mt_note", partner_ids=Order.user_id.sudo().partner_id.ids)
+ _message_post_helper(res_model='sale.order', res_id=Order.id, message=body, token=Order.access_token, message_type='notification', subtype="mail.mt_note", partner_ids=Order.user_id.sudo().partner_id.ids)
if not Order:
return request.render('website.404')
@@ -89,7 +90,11 @@ class sale_quote(http.Controller):
}
if order_sudo.require_payment or values['need_payment']:
- acquirers = request.env['payment.acquirer'].sudo().search([('website_published', '=', True), ('company_id', '=', order_sudo.company_id.id)])
+ domain = expression.AND([
+ ['&', ('website_published', '=', True), ('company_id', '=', order_sudo.company_id.id)],
+ ['|', ('specific_countries', '=', False), ('country_ids', 'in', [order_sudo.partner_id.country_id.id])]
+ ])
+ acquirers = request.env['payment.acquirer'].sudo().search(domain)
values['form_acquirers'] = [acq for acq in acquirers if acq.payment_flow == 'form' and acq.view_template_id]
values['s2s_acquirers'] = [acq for acq in acquirers if acq.payment_flow == 's2s' and acq.registration_view_template_id]
diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py
index daf92e29e6a..3d8d459857c 100644
--- a/addons/website_sale/controllers/main.py
+++ b/addons/website_sale/controllers/main.py
@@ -12,6 +12,7 @@ from odoo.addons.website.controllers.main import QueryURL
from odoo.exceptions import ValidationError
from odoo.addons.website.controllers.main import Website
from odoo.addons.website_form.controllers.main import WebsiteForm
+from odoo.osv import expression
_logger = logging.getLogger(__name__)
@@ -770,9 +771,11 @@ class WebsiteSale(http.Controller):
bootstrap_formatting= True
)
- acquirers = request.env['payment.acquirer'].search(
- [('website_published', '=', True), ('company_id', '=', order.company_id.id)]
- )
+ domain = expression.AND([
+ ['&', ('website_published', '=', True), ('company_id', '=', order.company_id.id)],
+ ['|', ('specific_countries', '=', False), ('country_ids', 'in', [order.partner_id.country_id.id])]
+ ])
+ acquirers = request.env['payment.acquirer'].search(domain)
values['access_token'] = order.access_token
values['form_acquirers'] = [acq for acq in acquirers if acq.payment_flow == 'form' and acq.view_template_id]
diff --git a/addons/website_sale/models/website.py b/addons/website_sale/models/website.py
index 0a3b20d9070..d338bdbda70 100644
--- a/addons/website_sale/models/website.py
+++ b/addons/website_sale/models/website.py
@@ -149,8 +149,11 @@ class Website(models.Model):
@api.model
def sale_get_payment_term(self, partner):
- DEFAULT_PAYMENT_TERM = 'account.account_payment_term_immediate'
- return partner.property_payment_term_id.id or self.env.ref(DEFAULT_PAYMENT_TERM, False).id
+ return (
+ partner.property_payment_term_id or
+ self.env.ref('account.account_payment_term_immediate', False) or
+ self.env['account.payment.term'].sudo().search([('company_id', '=', self.company_id.id)], limit=1)
+ ).id
@api.multi
def _prepare_sale_order_values(self, partner, pricelist):
diff --git a/addons/website_sale_comparison/static/src/js/website_sale_comparison.js b/addons/website_sale_comparison/static/src/js/website_sale_comparison.js
index c5a9f593b6e..9d27a98d558 100644
--- a/addons/website_sale_comparison/static/src/js/website_sale_comparison.js
+++ b/addons/website_sale_comparison/static/src/js/website_sale_comparison.js
@@ -61,6 +61,9 @@ var ProductComparison = Widget.extend({
}
prod = parseInt(prod, 10);
}
+ if (!prod) {
+ return;
+ }
self.add_new_products(prod);
website_sale_utils.animate_clone($('#comparelist .o_product_panel_header'), $(this).closest('form'), -50, 10);
} else {
diff --git a/addons/website_sale_comparison/static/src/less/website_sale_comparison.less b/addons/website_sale_comparison/static/src/less/website_sale_comparison.less
index ff167568e8b..29ef1a1a5d5 100644
--- a/addons/website_sale_comparison/static/src/less/website_sale_comparison.less
+++ b/addons/website_sale_comparison/static/src/less/website_sale_comparison.less
@@ -50,5 +50,9 @@
margin-right: 8px;
}
}
+
+ div.css_not_available .o_add_compare_dyn {
+ display: none;
+ }
}
diff --git a/addons/website_sale_comparison/views/website_sale_comparison_template.xml b/addons/website_sale_comparison/views/website_sale_comparison_template.xml
index f472c5db811..e69065fa910 100644
--- a/addons/website_sale_comparison/views/website_sale_comparison_template.xml
+++ b/addons/website_sale_comparison/views/website_sale_comparison_template.xml
@@ -57,7 +57,7 @@
<template id='recommended_product' inherit_id="website_sale.recommended_products" name="Alternative Products">
<xpath expr="//h3" position="replace">
- <t t-set="ids" t-value="str(product.id) + ','+ ','.join([str(a) for a in product.alternative_product_ids.ids])"></t>
+ <t t-set="ids" t-value="str(product.product_variant_id.id) + ','+ ','.join([str(a) for a in product.alternative_product_ids.mapped('product_variant_id.id')])"/>
<div><span class='h3'>Suggested alternatives: </span><a class="btn btn-primary" t-attf-href="/shop/compare/?products=#{ids}"><i class="fa fa-exchange"></i> Compare</a></div>
</xpath>
</template>
diff --git a/addons/website_sale_wishlist/static/src/js/website_sale_wishlist.js b/addons/website_sale_wishlist/static/src/js/website_sale_wishlist.js
index 3eb511140a3..3be63b14ad2 100644
--- a/addons/website_sale_wishlist/static/src/js/website_sale_wishlist.js
+++ b/addons/website_sale_wishlist/static/src/js/website_sale_wishlist.js
@@ -75,7 +75,7 @@ var ProductWishlist = Widget.extend({
if (!product_id && e.currentTarget.classList.contains('o_add_wishlist_dyn')) {
product_id = parseInt($el.parent().find('.product_id').val());
}
- if (!_.contains(self.wishlist_product_ids, product_id)) {
+ if (product_id && !_.contains(self.wishlist_product_ids, product_id)) {
return ajax.jsonRpc('/shop/wishlist/add', 'call', {
'product_id': product_id
}).then(function () {
diff --git a/addons/website_sale_wishlist/static/src/less/website_sale_wishlist.less b/addons/website_sale_wishlist/static/src/less/website_sale_wishlist.less
index 2bac6365fa7..7804a44f1b1 100644
--- a/addons/website_sale_wishlist/static/src/less/website_sale_wishlist.less
+++ b/addons/website_sale_wishlist/static/src/less/website_sale_wishlist.less
@@ -2,6 +2,10 @@
.td-wish-btn {
width: 140px;
}
+
+ div.css_not_available .o_add_wishlist_dyn {
+ display: none;
+ }
}
// XS size
diff --git a/addons/website_slides/controllers/main.py b/addons/website_slides/controllers/main.py
index ba0b1305946..2ef722104b5 100644
--- a/addons/website_slides/controllers/main.py
+++ b/addons/website_slides/controllers/main.py
@@ -179,8 +179,9 @@ class WebsiteSlides(http.Controller):
response.mimetype = 'application/pdf'
return response
- @http.route('''/slides/slide/<model("slide.slide"):slide>/download''', type='http', auth="public", website=True)
- def slide_download(self, slide, sitemap=False):
+ @http.route('''/slides/slide/<model("slide.slide"):slide>/download''', type='http', auth="public", website=True, sitemap=False)
+ def slide_download(self, slide, **kw):
+ slide = slide.sudo()
if slide.download_security == 'public' or (slide.download_security == 'user' and request.session.uid):
filecontent = base64.b64decode(slide.datas)
disposition = 'attachment; filename=%s.pdf' % werkzeug.urls.url_quote(slide.name)
@@ -190,7 +191,7 @@ class WebsiteSlides(http.Controller):
('Content-Length', len(filecontent)),
('Content-Disposition', disposition)])
elif not request.session.uid and slide.download_security == 'user':
- return werkzeug.utils.redirect('/web?redirect=/slides/slide/%s' % (slide.id))
+ return request.redirect('/web/login?redirect=/slides/slide/%s' % (slide.id))
return request.render("website.403")
@http.route('''/slides/slide/<model("slide.slide"):slide>/promote''', type='http', auth='user', website=True)
diff --git a/addons/website_slides/models/slides.py b/addons/website_slides/models/slides.py
index 410ef170ebb..b582902eb30 100644
--- a/addons/website_slides/models/slides.py
+++ b/addons/website_slides/models/slides.py
@@ -16,6 +16,8 @@ from odoo.addons.http_routing.models.ir_http import slug
from odoo.tools import image
from odoo.tools.translate import html_translate
from odoo.exceptions import Warning
+from odoo.http import request
+from odoo.addons.http_routing.models.ir_http import url_for
class Channel(models.Model):
@@ -345,10 +347,13 @@ class Slide(models.Model):
embed_code = fields.Text('Embed Code', readonly=True, compute='_get_embed_code')
def _get_embed_code(self):
- base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
+ base_url = request and request.httprequest.url_root or self.env['ir.config_parameter'].sudo().get_param('web.base.url')
+ if base_url[-1] == '/':
+ base_url = base_url[:-1]
for record in self:
if record.datas and (not record.document_id or record.slide_type in ['document', 'presentation']):
- record.embed_code = '<iframe src="%s/slides/embed/%s?page=1" class="o_wslides_iframe_viewer" allowFullScreen="true" height="%s" width="%s" frameborder="0"></iframe>' % (base_url, record.id, 315, 420)
+ slide_url = base_url + url_for('/slides/embed/%s?page=1' % record.id)
+ record.embed_code = '<iframe src="%s" class="o_wslides_iframe_viewer" allowFullScreen="true" height="%s" width="%s" frameborder="0"></iframe>' % (slide_url, 315, 420)
elif record.slide_type == 'video' and record.document_id:
if not record.mime_type:
# embed youtube video
diff --git a/doc/cla/individual/nomadic-coding.md b/doc/cla/individual/nomadic-coding.md
new file mode 100644
index 00000000000..4ac7e62b77c
--- /dev/null
+++ b/doc/cla/individual/nomadic-coding.md
@@ -0,0 +1,11 @@
+Panama, 2018-05-01
+
+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,
+
+Kumar Aberer hello@nomadic-coding.com https://github.com/nomadic-coding
diff --git a/doc/reference/views.rst b/doc/reference/views.rst
index 8549e71f01c..0a541f162ea 100644
--- a/doc/reference/views.rst
+++ b/doc/reference/views.rst
@@ -954,7 +954,9 @@ calendar view are:
``readonly_form_view_id``
view to open in readonly mode
``form_view_id``
- view to open when the user create or edit an event
+ view to open when the user create or edit an event. Note that if this attribute
+ is not set, the calendar view will fall back to the id of the form view in the
+ current action, if any.
``event_open_popup``
If the option 'event_open_popup' is set to true, then the calendar view will
open events (or records) in a FormViewDialog. Otherwise, it will open events
diff --git a/odoo/addons/base/data/ir_module_category_data.xml b/odoo/addons/base/data/ir_module_category_data.xml
index 9eb3c218280..727a6d1297a 100644
--- a/odoo/addons/base/data/ir_module_category_data.xml
+++ b/odoo/addons/base/data/ir_module_category_data.xml
@@ -127,7 +127,7 @@
</record>
<record id="module_category_mass_mailing" model="ir.module.category">
- <field name="name">Mass Mailing</field>
+ <field name="name">Email Marketing</field>
<field name="sequence">19</field>
<field name="description">Helps you manage your mass mailing for design
professional emails and reuse templates.</field>
diff --git a/odoo/addons/base/data/res_currency_data.xml b/odoo/addons/base/data/res_currency_data.xml
index d9c56dfe558..9966ae87ae6 100644
--- a/odoo/addons/base/data/res_currency_data.xml
+++ b/odoo/addons/base/data/res_currency_data.xml
@@ -55,6 +55,7 @@
<field name="active" eval="False"/>
<field name="currency_unit_label">Yuan</field>
<field name="currency_subunit_label">Fen</field>
+ <field name="position">before</field>
</record>
<record id="COP" model="res.currency">
diff --git a/odoo/addons/base/i18n/nl.po b/odoo/addons/base/i18n/nl.po
index 65feff1e10e..96a69d58b58 100644
--- a/odoo/addons/base/i18n/nl.po
+++ b/odoo/addons/base/i18n/nl.po
@@ -21094,7 +21094,7 @@ msgid ""
"The values for the fields '%s' already exist (they are probably '%s' in the "
"current model)."
msgstr ""
-"De waardes voor het veld '%s' bestaat al (dit is waarschijnlijk '%s' in het "
+"De waardes voor het veld '%s' bestaan al (dit is waarschijnlijk '%s' in het "
"huidige model)."
#. module: base
diff --git a/odoo/addons/base/i18n/tr.po b/odoo/addons/base/i18n/tr.po
index 888249b7fb1..1472fe800a2 100644
--- a/odoo/addons/base/i18n/tr.po
+++ b/odoo/addons/base/i18n/tr.po
@@ -9169,7 +9169,7 @@ msgstr ""
#. module: base
#: model:res.country.group,name:base.europe
msgid "Europe"
-msgstr ""
+msgstr "Avrupa"
#. module: base
#: model:ir.model.fields,field_description:base.field_ir_server_object_lines__type
@@ -16797,7 +16797,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_sale_subscription_dashboard
msgid "Sale Subscription Dashboard"
-msgstr ""
+msgstr "Satış Abonelik Paneli"
#. module: base
#: model:ir.module.category,name:base.module_category_sales
diff --git a/odoo/addons/base/models/ir_actions.py b/odoo/addons/base/models/ir_actions.py
index f9ec9413e2f..5559429709d 100644
--- a/odoo/addons/base/models/ir_actions.py
+++ b/odoo/addons/base/models/ir_actions.py
@@ -34,6 +34,7 @@ class IrActions(models.Model):
binding_model_id = fields.Many2one('ir.model', ondelete='cascade',
help="Setting a value makes this action available in the sidebar for the given model.")
binding_type = fields.Selection([('action', 'Action'),
+ ('action_form_only', "Form-only"),
('report', 'Report')],
required=True, default='action')
diff --git a/odoo/addons/base/models/res_currency.py b/odoo/addons/base/models/res_currency.py
index 509bb548ecc..96d6af00ae4 100644
--- a/odoo/addons/base/models/res_currency.py
+++ b/odoo/addons/base/models/res_currency.py
@@ -44,6 +44,7 @@ class Currency(models.Model):
]
@api.multi
+ @api.depends('rate_ids.rate')
def _compute_current_rate(self):
date = self._context.get('date') or fields.Date.today()
company_id = self._context.get('company_id') or self.env['res.users']._get_company().id
diff --git a/odoo/api.py b/odoo/api.py
index 3f55669023e..d1b1872e7f5 100644
--- a/odoo/api.py
+++ b/odoo/api.py
@@ -1014,6 +1014,14 @@ class Cache(object):
]
return model.browse(ids)
+ def get_missing_ids(self, records, field):
+ """ Return the ids of ``records`` that have no value for ``field``. """
+ key = field.cache_key(records)
+ field_cache = self._data[field]
+ for record_id in records._ids:
+ if key not in field_cache.get(record_id, ()):
+ yield record_id
+
def copy(self, records, env):
""" Copy the cache of ``records`` to ``env``. """
src = records
diff --git a/odoo/models.py b/odoo/models.py
index a8a2770d087..527decc8892 100644
--- a/odoo/models.py
+++ b/odoo/models.py
@@ -1389,6 +1389,9 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})):
resaction = [action
for action in bindings['action']
if view_type == 'tree' or not action.get('multi')]
+ resrelate = []
+ if view_type == 'form':
+ resrelate = bindings['action_form_only']
for res in itertools.chain(resreport, resaction):
res['string'] = res['name']
@@ -1396,6 +1399,7 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})):
result['toolbar'] = {
'print': resreport,
'action': resaction,
+ 'relate': resrelate,
}
return result
@@ -4734,12 +4738,16 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})):
(:class:`Field` instance), including ``self``.
Return at most ``limit`` records.
"""
- ids0 = self._prefetch[self._name]
- ids1 = set(self.env.cache.get_records(self, field)._ids)
- recs = self.browse([it for it in ids0 if it and it not in ids1])
- if limit and len(recs) > limit:
- recs = self + (recs - self)[:(limit - len(self))]
- return recs
+ recs = self.browse(self._prefetch[self._name])
+ ids = [self.id]
+ for record_id in self.env.cache.get_missing_ids(recs - self, field):
+ if not record_id:
+ # Do not prefetch `NewId`
+ continue
+ ids.append(record_id)
+ if limit and limit <= len(ids):
+ break
+ return self.browse(ids)
@api.model
def refresh(self):
diff --git a/odoo/netsvc.py b/odoo/netsvc.py
index 7772d7d47cd..c8d9dbb6441 100644
--- a/odoo/netsvc.py
+++ b/odoo/netsvc.py
@@ -119,6 +119,13 @@ def init_logger():
if dirname and not os.path.isdir(dirname):
os.makedirs(dirname)
if tools.config['logrotate'] is not False:
+ if tools.config['workers'] > 1:
+ # TODO: fallback to regular file logging in master for safe(r) defaults?
+ #
+ # Doing so here would be a good idea but also might break
+ # situations were people do log-shipping of rotated data?
+ _logger.warn("WARNING: built-in log rotation is not reliable in multi-worker scenarios and may incur significant data loss. "
+ "It is strongly recommended to use an external log rotation utility or use system loggers (--syslog) instead.")
handler = logging.handlers.TimedRotatingFileHandler(filename=logf, when='D', interval=1, backupCount=30)
elif os.name == 'posix':
handler = logging.handlers.WatchedFileHandler(logf)
diff --git a/odoo/tools/convert.py b/odoo/tools/convert.py
index 9a46a88f175..16dd569239f 100644
--- a/odoo/tools/convert.py
+++ b/odoo/tools/convert.py
@@ -426,11 +426,14 @@ form: module.record_id""" % (xml_id,)
if rec.get('target'):
res['target'] = rec.get('target','')
+ if rec.get('multi'):
+ res['multi'] = safe_eval(rec.get('multi', 'False'))
if src_model:
res['binding_model_id'] = self.env['ir.model']._get(src_model).id
res['binding_type'] = 'report' if rec.get('key2') == 'client_print_multi' else 'action'
- if rec.get('multi'):
- res['multi'] = safe_eval(rec.get('multi', 'False'))
+ if rec.get('key2') in (None, 'client_action_relate'):
+ if not res.get('multi'):
+ res['binding_type'] = 'action_form_only'
id = self.env['ir.model.data']._update('ir.actions.act_window', self.module, res, xml_id, noupdate=self.isnoupdate(data_node), mode=self.mode)
self.idref[xml_id] = int(id)
diff --git a/odoo/tools/mail.py b/odoo/tools/mail.py
index 0b4608c62e3..931c2f01215 100644
--- a/odoo/tools/mail.py
+++ b/odoo/tools/mail.py
@@ -45,11 +45,12 @@ class _Cleaner(clean.Cleaner):
_style_whitelist = [
'font-size', 'font-family', 'font-weight', 'background-color', 'color', 'text-align',
'line-height', 'letter-spacing', 'text-transform', 'text-decoration',
+ 'float', 'vertical-align',
'padding', 'padding-top', 'padding-left', 'padding-bottom', 'padding-right',
- 'margin', 'margin-top', 'margin-left', 'margin-bottom', 'margin-right'
+ 'margin', 'margin-top', 'margin-left', 'margin-bottom', 'margin-right',
# box model
- 'border', 'border-color', 'border-radius', 'border-style', 'height',
- 'margin', 'padding', 'width', 'max-width', 'min-width',
+ 'border', 'border-color', 'border-radius', 'border-style', 'border-width',
+ 'height', 'margin', 'padding', 'width', 'max-width', 'min-width',
# tables
'border-collapse', 'border-spacing', 'caption-side', 'empty-cells', 'table-layout']
diff --git a/setup/package.py b/setup/package.py
index eeea18aabe1..dd15b84e224 100755
--- a/setup/package.py
+++ b/setup/package.py
@@ -181,7 +181,7 @@ class KVM(object):
self.login = login
def timeout(self,signum,frame):
- logging.warning("vm timeout kill",self.pid)
+ logging.warning("vm timeout kill (pid: {})".format(self.pid))
os.kill(self.pid,15)
def start(self):