diff --git a/__init__.py b/__init__.py
new file mode 100644
index 0000000..dc5e6b6
--- /dev/null
+++ b/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import models
diff --git a/__manifest__.py b/__manifest__.py
new file mode 100644
index 0000000..b4e4f69
--- /dev/null
+++ b/__manifest__.py
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+{
+ 'name': 'Sales Expense',
+ 'version': '1.0',
+ 'category': 'Sales/Sales',
+ 'summary': 'Quotation, Sales Orders, Delivery & Invoicing Control',
+ 'description': """
+Reinvoice Employee Expense
+==========================
+
+Create some products for which you can re-invoice the costs.
+This module allow to reinvoice employee expense, by setting the SO directly on the expense.
+""",
+ 'depends': ['sale_management', 'hr_expense'],
+ 'data': [
+ 'data/sale_expense_data.xml',
+ 'views/product_view.xml',
+ 'views/hr_expense_views.xml',
+ 'views/sale_order_views.xml',
+ 'views/hr_expense_sheet_views.xml',
+ ],
+ 'installable': True,
+ 'auto_install': True,
+ 'assets': {
+ 'web.assets_backend': [
+ 'sale_expense/static/src/**/*',
+ ],
+ 'web.qunit_suite_tests': [
+ 'sale_expense/static/tests/**/*',
+ ],
+ },
+ 'license': 'LGPL-3',
+}
diff --git a/data/sale_expense_data.xml b/data/sale_expense_data.xml
new file mode 100644
index 0000000..3cdf4fb
--- /dev/null
+++ b/data/sale_expense_data.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/i18n/ar.po b/i18n/ar.po
new file mode 100644
index 0000000..484d7d0
--- /dev/null
+++ b/i18n/ar.po
@@ -0,0 +1,140 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Wil Odoo, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2024\n"
+"Language-Team: Arabic (https://app.transifex.com/odoo/teams/41243/ar/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ar\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "عدد النفقات "
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "يمكن إعادة فوترته "
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "العميل لإعادة إنشاء فاتورته "
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "النفقة "
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr "تلميحات سياسة النفقات "
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "تقرير النفقات "
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr "تقسيم النفقات"
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "النفقات "
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr "قد لا تتم إضافة نفقات هذه الفئة إلى أمر بيع. "
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr "ستتم إضافة النفقات إلى أمر البيع بتكلفتها الفعلية عند ترحيلها. "
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+"ستتم إضافة النفقات إلى أمر البيع بسعر البيع (سعر المنتج، قائمة الأسعار، "
+"إلخ.) عند ترحيلها. "
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr "إذا كان للفئة سياسة نفقات، سوف تتم إعادة فوترتها على أمر البيع هذا "
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "الفوترة"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "قيد اليومية"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "عنصر اليومية"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "المنتج"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr "أوامر البيع المعاد فوترتها "
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "عدد أوامر البيع"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "أمر البيع"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "أوامر البيع"
diff --git a/i18n/az.po b/i18n/az.po
new file mode 100644
index 0000000..4087df7
--- /dev/null
+++ b/i18n/az.po
@@ -0,0 +1,125 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Jumshud Sultanov , 2022
+# erpgo translator , 2022
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 16.0beta\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-09-23 08:03+0000\n"
+"PO-Revision-Date: 2022-09-22 05:54+0000\n"
+"Last-Translator: erpgo translator , 2022\n"
+"Language-Team: Azerbaijani (https://app.transifex.com/odoo/teams/41243/az/)\n"
+"Language: az\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Xərclər"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Xərclər"
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses will be added to the Sales Order at their sales price (product price, pricelist, etc.) when posted."
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid "If the category has an expense policy, it will be reinvoiced on this sales order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Hesab-faktura göndərilməsi"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Jurnal Sətirləri"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Məhsul"
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Satış Sifarişi"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr ""
diff --git a/i18n/bg.po b/i18n/bg.po
new file mode 100644
index 0000000..a49d168
--- /dev/null
+++ b/i18n/bg.po
@@ -0,0 +1,143 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Maria Boyadjieva , 2023
+# aleksandar ivanov, 2023
+# Rosen Vladimirov , 2023
+# Igor Sheludko , 2023
+# Martin Trigaux, 2023
+# KeyVillage, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: KeyVillage, 2024\n"
+"Language-Team: Bulgarian (https://app.transifex.com/odoo/teams/41243/bg/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: bg\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Разход"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Разходен отчет"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Разходи"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Счетоводно отчитане"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Записи в Дневника"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Счетоводна Операция"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Продукт"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Поръчка"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Поръчки за продажби"
diff --git a/i18n/bs.po b/i18n/bs.po
new file mode 100644
index 0000000..3dc6d11
--- /dev/null
+++ b/i18n/bs.po
@@ -0,0 +1,124 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Martin Trigaux, 2018
+# Boško Stojaković , 2018
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~11.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-09-23 08:03+0000\n"
+"PO-Revision-Date: 2018-09-18 09:49+0000\n"
+"Last-Translator: Boško Stojaković , 2018\n"
+"Language-Team: Bosnian (https://www.transifex.com/odoo/teams/41243/bs/)\n"
+"Language: bs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Trošak"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Troškovi"
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses will be added to the Sales Order at their sales price (product price, pricelist, etc.) when posted."
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid "If the category has an expense policy, it will be reinvoiced on this sales order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Fakturisanje"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr ""
diff --git a/i18n/ca.po b/i18n/ca.po
new file mode 100644
index 0000000..09f4a6c
--- /dev/null
+++ b/i18n/ca.po
@@ -0,0 +1,151 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Manel Fernandez Ramirez , 2023
+# marcescu, 2023
+# Martin Trigaux, 2023
+# Ivan Espinola, 2023
+# Óscar Fonseca , 2023
+# Quim - eccit , 2023
+# Josep Anton Belchi, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Josep Anton Belchi, 2024\n"
+"Language-Team: Catalan (https://app.transifex.com/odoo/teams/41243/ca/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ca\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "# de despeses"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "Es pot tornar a facturar"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "Client a refacturar"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Despesa"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr "Indicador de la política de despeses"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Informe de despeses"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr "Divisió de despeses"
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Despeses"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+"Les despeses d'aquesta categoria no es poden afegir a una comanda de vendes."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+"Les despeses s'afegiran a la comanda de vendes al seu cost real quan es "
+"publiquin."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+"Les despeses s'afegiran a la comanda de vendes al seu preu de venda (preu de"
+" producte, llista de preus, etc.) quan es publiquin."
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+"Si la categoria té una política de despeses, es refacturarà en aquesta "
+"comanda de venda"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Facturació"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Assentament comptable"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Apunt comptable"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Producte"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr "Comandes de vendes facturades"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Nombre de comandes"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Comanda"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Comandes de venda"
diff --git a/i18n/cs.po b/i18n/cs.po
new file mode 100644
index 0000000..86f36a8
--- /dev/null
+++ b/i18n/cs.po
@@ -0,0 +1,140 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Jakub Smolka, 2023
+# Wil Odoo, 2023
+# Ivana Bartonkova, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Ivana Bartonkova, 2024\n"
+"Language-Team: Czech (https://app.transifex.com/odoo/teams/41243/cs/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: cs\n"
+"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "počet výdajů"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "Zákazník přefakturuje"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Výdaj"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Výkaz výdajů"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr "Rozdělení výdaje"
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Náklady"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Fakturace"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Účetní záznam"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Účetní položka"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Produkt"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Počet prodejních objednávek"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Prodejní objednávka"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Prodejní objednávky"
diff --git a/i18n/da.po b/i18n/da.po
new file mode 100644
index 0000000..166ef23
--- /dev/null
+++ b/i18n/da.po
@@ -0,0 +1,138 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Martin Trigaux, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Martin Trigaux, 2024\n"
+"Language-Team: Danish (https://app.transifex.com/odoo/teams/41243/da/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: da\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "# udgifter"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "Kan genfaktureres"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "Kunder at Genfakturere "
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Omkostning"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Udgiftsrapport"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Øvrige omkostninger"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Fakturering"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Postering"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Journalpost"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Produkt"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Salgsordre mængde"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Salgsordre"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Salgsordre"
diff --git a/i18n/de.po b/i18n/de.po
new file mode 100644
index 0000000..c527a17
--- /dev/null
+++ b/i18n/de.po
@@ -0,0 +1,147 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Wil Odoo, 2023
+# Larissa Manderfeld, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Larissa Manderfeld, 2024\n"
+"Language-Team: German (https://app.transifex.com/odoo/teams/41243/de/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: de\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "# Ausgaben"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "Kann weiterberechnet werden"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "An Kunden berechnen"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Ausgabe"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr "Tooltipp für die Spesenpolitik"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Spesenabrechnung"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr "Spesenaufteilung"
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Ausgaben"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+"Spesen dieser Kategorie können einem Verkaufsauftrag möglicherweise nicht "
+"zugewiesen werden."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+"Spesen werden dem Verkaufsauftrag zu den tatsächlichen Kosten hinzugefügt, "
+"wenn sie gebucht werden."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+"Spesen werden dem Verkaufsauftrag zum Verkaufspreis hinzugefügt (Produkt, "
+"Preis, Preisliste usw.), wenn sie gebucht werden."
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+"Wenn es für die Kategorie eine Spesenpolitik gibt, wird sie bei diesem "
+"Verkaufsauftrag weiterberechnet."
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Rechnungsstellung"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Journalbuchung"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Buchungszeile"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Produkt"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr "Weiterberechnete Verkaufsaufträge"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Anzahl Verkaufsaufträge"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Verkaufsauftrag"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Verkaufsaufträge"
diff --git a/i18n/el.po b/i18n/el.po
new file mode 100644
index 0000000..8c2fc28
--- /dev/null
+++ b/i18n/el.po
@@ -0,0 +1,124 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Martin Trigaux, 2018
+# Kostas Goutoudis , 2018
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~11.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-09-23 08:03+0000\n"
+"PO-Revision-Date: 2018-09-18 09:49+0000\n"
+"Last-Translator: Kostas Goutoudis , 2018\n"
+"Language-Team: Greek (https://www.transifex.com/odoo/teams/41243/el/)\n"
+"Language: el\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Έξοδα"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Έξοδα"
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses will be added to the Sales Order at their sales price (product price, pricelist, etc.) when posted."
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid "If the category has an expense policy, it will be reinvoiced on this sales order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Τιμολόγηση"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr ""
diff --git a/i18n/es.po b/i18n/es.po
new file mode 100644
index 0000000..dba9ec7
--- /dev/null
+++ b/i18n/es.po
@@ -0,0 +1,145 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Wil Odoo, 2024
+# Larissa Manderfeld, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Larissa Manderfeld, 2024\n"
+"Language-Team: Spanish (https://app.transifex.com/odoo/teams/41243/es/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: es\n"
+"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "# de gastos"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "Puede ser refacturado"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "Cliente a reembolsar"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Gasto"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr "Información sobre la política de gastos"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Informe de gastos"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr "Dividir gastos"
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Gastos"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr "No se pueden añadir gastos de esta categoría a una orden de venta."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+"Se añadirán los gastos a la orden de venta a su coste real cuando se "
+"registren."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+"Se añadirán los gastos a la orden de venta a su precio de venta (precio del "
+"producto, lista de precios, etc.) cuando se registren."
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+"Si la categoría tiene una política de gastos, se volverá a facturar en esta "
+"orden de venta"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Facturación"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Asiento contable"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Apunte contable"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Producto"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr "Órdenes de venta refacturadas"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Nº de pedidos de venta"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Orden de venta"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Pedidos de ventas"
diff --git a/i18n/es_419.po b/i18n/es_419.po
new file mode 100644
index 0000000..9f5d580
--- /dev/null
+++ b/i18n/es_419.po
@@ -0,0 +1,145 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Wil Odoo, 2023
+# Fernanda Alvarez, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Fernanda Alvarez, 2024\n"
+"Language-Team: Spanish (Latin America) (https://app.transifex.com/odoo/teams/41243/es_419/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: es_419\n"
+"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "Número de gastos"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "Se puede volver a facturar"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "Cliente al que se le va a volver a facturar"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Gasto"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr "Información sobre la política de gastos"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Reporte de gastos"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr "Dividir gastos"
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Gastos"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr "No puede agregar gastos de esta categoría a una orden de venta."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+"Los gastos se agregarán a la orden de venta a su costo real cuando se "
+"registren."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+"Los gastos se agregarán a la orden de venta a su precio de venta (precio del"
+" producto, lista de precios, etc.) cuando se registren."
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+"Si la categoría tiene una política de gastos, se volverá a facturar en esta "
+"orden de venta"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Facturación"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Asiento contable"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Apunte contable"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Producto"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr "Órdenes de venta refacturadas"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Número de órdenes de venta"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Orden de venta"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Órdenes de venta"
diff --git a/i18n/et.po b/i18n/et.po
new file mode 100644
index 0000000..b19951d
--- /dev/null
+++ b/i18n/et.po
@@ -0,0 +1,150 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Martin Trigaux, 2023
+# Marek Pontus, 2023
+# Triine Aavik , 2023
+# Martin Aavastik , 2023
+# JanaAvalah, 2023
+# Leaanika Randmets, 2023
+# Algo Kärp , 2023
+# Eneli Õigus , 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Eneli Õigus , 2024\n"
+"Language-Team: Estonian (https://app.transifex.com/odoo/teams/41243/et/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: et\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "kulude arv"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "Saab teha arveks"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "Kulu kliendile edasi esitada"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Kulu"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr "Kulupoliitika tooltip"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Kuluaruanne"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr "Kulude jagamine"
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Kulud"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr "Selle kategooria kulusid ei pruugita müügitellimusele lisada."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+"Kulud lisatakse müügitellimusele nende tegeliku maksumusega postitamisel."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+"Kulud lisatakse müügitellimusele nende müügihinnaga (toote hind, hinnakiri "
+"jne) postitamisel."
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+"Kui sellel kategoorial on kulupoliitika, esitatakse see sellel "
+"müügitellimusel uuesti"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Raamatupidamine"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Andmiku kanne"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Andmiku kanderida"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Toode"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr "Arveldatud müügitellimused"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Müügitellimuste arv"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Müügitellimus"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Müügitellimused"
diff --git a/i18n/fa.po b/i18n/fa.po
new file mode 100644
index 0000000..b9b68f1
--- /dev/null
+++ b/i18n/fa.po
@@ -0,0 +1,142 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# F Hariri , 2023
+# M.Hossein S.Farvashani , 2023
+# Hanna Kheradroosta, 2023
+# Martin Trigaux, 2023
+# Yousef Shadmanesh , 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Yousef Shadmanesh , 2024\n"
+"Language-Team: Persian (https://app.transifex.com/odoo/teams/41243/fa/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: fa\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "تعداد هزینهها"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "میتواند دوباره فاکتور شود"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "مشتری برای صدورفاکتور مجدد"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "هزینه"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "گزارش هزینه"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "هزینه ها"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "صدور فاکتور"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "سند دفترروزنامه"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "آیتم دفترروزنامه"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "محصول"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "تعداد سفارش فروش"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "سفارش فروش"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "سفارشات فروش"
diff --git a/i18n/fi.po b/i18n/fi.po
new file mode 100644
index 0000000..4d98996
--- /dev/null
+++ b/i18n/fi.po
@@ -0,0 +1,149 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Svante Suominen , 2023
+# Jarmo Kortetjärvi , 2023
+# Kari Lindgren , 2023
+# Ossi Mantylahti , 2023
+# Tuomo Aura , 2023
+# Eino Mäkitalo , 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Eino Mäkitalo , 2024\n"
+"Language-Team: Finnish (https://app.transifex.com/odoo/teams/41243/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "# Kuluista"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "Voidaan laskuttaa asiaalta"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "Asiakas, jolta laskutetaan"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Kulu"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr "Kulukäytännön työkaluvihje"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Kuluraportti"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr "Kulujen jako"
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Kulut"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr "Tähän luokkaan kuuluvia kuluja ei voi lisätä myyntitilaukseen."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+"Kulut lisätään myyntitilaukseen niiden todellisten kustannusten mukaan, kun "
+"ne kirjataan."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+"Kulut lisätään myyntitilaukseen niiden myyntihintaan (tuotteen hinta, "
+"hinnasto jne.), kun ne kirjataan."
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+"Jos luokalla on kulukäytäntö, se laskutetaan uudelleen tässä "
+"myyntitilauksessa"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Laskutus"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Päiväkirjan kirjaus"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Päiväkirjatapahtuma"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Tuote"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr "Uudelleen laskutetut myyntitilaukset"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Myyntitilausten lukumäärä"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Myyntitilaus"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Myyntitilaukset"
diff --git a/i18n/fr.po b/i18n/fr.po
new file mode 100644
index 0000000..86db434
--- /dev/null
+++ b/i18n/fr.po
@@ -0,0 +1,147 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Wil Odoo, 2023
+# Jolien De Paepe, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Jolien De Paepe, 2024\n"
+"Language-Team: French (https://app.transifex.com/odoo/teams/41243/fr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: fr\n"
+"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "# de notes de frais"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "Peut être refacturé"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "Client à refacturer"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Note de frais"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr "Infobulle politique des notes de frais"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Note de frais"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr "Fractionnement des notes de frais"
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Notes de frais"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+"Les notes de frais de cette catégorie ne peuvent pas être ajoutées à un bon "
+"de commande."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+"Les notes de frais seront ajoutées au bon de commande à leur coût réel une "
+"fois qu'elles sont enregistrées."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+"Les notes de frais seront ajoutées au bon de commande à leur prix de vente "
+"(prix du produit, liste de prix, etc.) une fois qu'elles sont enregistrées."
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+"Si la catégorie a une politique concernant les notes de frais, celle-ci sera"
+" refacturée sur ce bon de commande"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Facturation"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Pièce comptable"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Écriture comptable"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Produit"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr "Bons de commande refacturés"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Nombre de bons de commande"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Bon de commande"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Bons de commande"
diff --git a/i18n/fr_BE.po b/i18n/fr_BE.po
new file mode 100644
index 0000000..fd8c760
--- /dev/null
+++ b/i18n/fr_BE.po
@@ -0,0 +1,121 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~14.4\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-09-23 08:03+0000\n"
+"PO-Revision-Date: 2021-07-12 07:50+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses will be added to the Sales Order at their sales price (product price, pricelist, etc.) when posted."
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid "If the category has an expense policy, it will be reinvoiced on this sales order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr ""
diff --git a/i18n/gu.po b/i18n/gu.po
new file mode 100644
index 0000000..8a87e3f
--- /dev/null
+++ b/i18n/gu.po
@@ -0,0 +1,124 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Qaidjohar Barbhaya, 2023
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 16.0beta\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-09-23 08:03+0000\n"
+"PO-Revision-Date: 2022-09-22 05:54+0000\n"
+"Last-Translator: Qaidjohar Barbhaya, 2023\n"
+"Language-Team: Gujarati (https://app.transifex.com/odoo/teams/41243/gu/)\n"
+"Language: gu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Expense"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Expenses"
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses will be added to the Sales Order at their sales price (product price, pricelist, etc.) when posted."
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid "If the category has an expense policy, it will be reinvoiced on this sales order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Invoicing"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Journal Item"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Product"
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr ""
diff --git a/i18n/he.po b/i18n/he.po
new file mode 100644
index 0000000..c4c42b0
--- /dev/null
+++ b/i18n/he.po
@@ -0,0 +1,143 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Lilach Gilliam , 2023
+# NoaFarkash, 2023
+# Yihya Hugirat , 2023
+# yael terner, 2023
+# david danilov, 2023
+# ZVI BLONDER , 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: ZVI BLONDER , 2024\n"
+"Language-Team: Hebrew (https://app.transifex.com/odoo/teams/41243/he/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: he\n"
+"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "מס' ההוצאות"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "ניתן לחייב מחדש"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "לקוח לחשבונית חוזרת"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "מאשר הוצאות"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "דוח הוצאות"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr "פיצול הוצאות"
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "הוצאות"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr "אם לקטגוריה יש מדיניות הוצאות, היא תחויב במכירה זו"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "חיוב"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "פקודת יומן"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "תנועת יומן"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "מוצר"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "כמות הזמנות לקוח"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "הזמנת לקוח"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "הזמנות לקוח"
diff --git a/i18n/hr.po b/i18n/hr.po
new file mode 100644
index 0000000..3dd83c5
--- /dev/null
+++ b/i18n/hr.po
@@ -0,0 +1,126 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Tina Milas, 2022
+# Martin Trigaux, 2022
+# Bole , 2023
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 16.0beta\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-09-23 08:03+0000\n"
+"PO-Revision-Date: 2022-09-22 05:54+0000\n"
+"Last-Translator: Bole , 2023\n"
+"Language-Team: Croatian (https://app.transifex.com/odoo/teams/41243/hr/)\n"
+"Language: hr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Trošak"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Izvješće o troškovima"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr "Dijeli trošak"
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Troškovi"
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses will be added to the Sales Order at their sales price (product price, pricelist, etc.) when posted."
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid "If the category has an expense policy, it will be reinvoiced on this sales order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Računovodstvo"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Stavka dnevnika"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Proizvod"
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Broj ponuda"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Prodajni nalog"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Prodajni nalozi"
diff --git a/i18n/hu.po b/i18n/hu.po
new file mode 100644
index 0000000..24ce4a5
--- /dev/null
+++ b/i18n/hu.po
@@ -0,0 +1,144 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Tamás Dombos, 2023
+# Tamás Németh , 2023
+# krnkris, 2023
+# Ákos Nagy , 2023
+# Gergő Kertész , 2023
+# Krisztián Juhász , 2023
+# gezza , 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: gezza , 2024\n"
+"Language-Team: Hungarian (https://app.transifex.com/odoo/teams/41243/hu/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: hu\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Ráfordítás"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Költségelszámolás"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Költségek"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Számlázás"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Könyvelési tétel"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Napló tétel"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Termék"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Értékesítési rendelések száma"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Megrendelések"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Vevői megrendelések"
diff --git a/i18n/id.po b/i18n/id.po
new file mode 100644
index 0000000..76c707f
--- /dev/null
+++ b/i18n/id.po
@@ -0,0 +1,144 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Wil Odoo, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2024\n"
+"Language-Team: Indonesian (https://app.transifex.com/odoo/teams/41243/id/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: id\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "# Pengeluaran"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "Dapat difaktur ulang"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "Pelanggan untuk Difaktur ulang"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Pengeluaran"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr "Tooltip Kebijakan Pengeluaran"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Laporan Pengeluaran"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr "Pemecahan Pengeluaran"
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Pengeluaran"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr "Pengeluaran pada kategori ini tidak bisa ditambahkan ke Sales Order."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+"Pengeluaran akan ditambahkan ke Sales Order pada biaya sebenarnya mereka "
+"saat diposting."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+"Pengeluaran akan ditambahkan ke Sales Order pada harga sales mereka (harga "
+"produk, daftar harga, dsb.) saat diposting."
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+"Bila kategori memiliki kebijakan pengeluaran, akan difaktur ulang pada sales"
+" order ini"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Penagihan"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Entri Jurnal"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Item Jurnal"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Produk"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr "Sales Order yang Difaktur Ulang"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Jumlah Sale Order"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Order Penjualan"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Order Penjualan"
diff --git a/i18n/is.po b/i18n/is.po
new file mode 100644
index 0000000..27c5390
--- /dev/null
+++ b/i18n/is.po
@@ -0,0 +1,124 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Heiðar Sigurðsson, 2022
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 16.0beta\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-09-23 08:03+0000\n"
+"PO-Revision-Date: 2022-09-22 05:54+0000\n"
+"Last-Translator: Heiðar Sigurðsson, 2022\n"
+"Language-Team: Icelandic (https://app.transifex.com/odoo/teams/41243/is/)\n"
+"Language: is\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Gjöld"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Rekstrargjöld"
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses will be added to the Sales Order at their sales price (product price, pricelist, etc.) when posted."
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid "If the category has an expense policy, it will be reinvoiced on this sales order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Reikningagerð"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr ""
diff --git a/i18n/it.po b/i18n/it.po
new file mode 100644
index 0000000..efedb44
--- /dev/null
+++ b/i18n/it.po
@@ -0,0 +1,147 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Wil Odoo, 2023
+# Marianna Ciofani, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Marianna Ciofani, 2024\n"
+"Language-Team: Italian (https://app.transifex.com/odoo/teams/41243/it/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: it\n"
+"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "N. spese"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "Può essere rifatturata"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "Cliente da rifatturare"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Spesa"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr "Tooltip politica spese"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Nota spese"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr "Divisione spese"
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Spese"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+"Le spese appartenenti a questa categoria non possono essere aggiunte ad un "
+"ordine di vendita."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+"Le spese verranno aggiunte all'ordine di vendita, al costo attuale, una "
+"volta registrate."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+"Le spese verranno aggiunte all'ordine di vendita al prezzo di vendita "
+"(prezzo prodotto, listino prezzi, ecc.) una volta registrate."
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+"Se la categoria ha una politica di spesa, sarà rifatturata su questo ordine "
+"di vendita"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Fatturazione"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Registrazione contabile"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Movimento contabile"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Prodotto"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr "Ordini di vendita rifatturati"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Numero ordini di vendita"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Ordine di vendita"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Ordini di vendita"
diff --git a/i18n/ja.po b/i18n/ja.po
new file mode 100644
index 0000000..903d795
--- /dev/null
+++ b/i18n/ja.po
@@ -0,0 +1,139 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Ryoko Tsuda , 2023
+# Wil Odoo, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2024\n"
+"Language-Team: Japanese (https://app.transifex.com/odoo/teams/41243/ja/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ja\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "経費の数"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "再度請求可能"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "顧客へ再請求"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "費用"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr "経費ポリシーツールのヒント"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "経費報告"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr "経費分割"
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "費用"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr "このカテゴリの経費は販売オーダに追加することができません。"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr "経費は、計上時に実費で販売オーダに追加されます。"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr "経費は、計上時に販売価格(プロダクト価格、価格表など)で販売オーダに追加されます。"
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr "カテゴリに経費ポリシーがある場合は、この販売オーダで再請求されます。"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "請求"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "仕訳"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "仕訳項目"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "プロダクト"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr "再請求された販売オーダ"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "販売オーダ数"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "販売オーダ"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "販売オーダ"
diff --git a/i18n/km.po b/i18n/km.po
new file mode 100644
index 0000000..4fc4816
--- /dev/null
+++ b/i18n/km.po
@@ -0,0 +1,120 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~11.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-09-23 08:03+0000\n"
+"PO-Revision-Date: 2018-09-18 09:49+0000\n"
+"Language-Team: Khmer (https://www.transifex.com/odoo/teams/41243/km/)\n"
+"Language: km\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses will be added to the Sales Order at their sales price (product price, pricelist, etc.) when posted."
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid "If the category has an expense policy, it will be reinvoiced on this sales order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "វិយបត្រ"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr ""
diff --git a/i18n/ko.po b/i18n/ko.po
new file mode 100644
index 0000000..b986c29
--- /dev/null
+++ b/i18n/ko.po
@@ -0,0 +1,139 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Wil Odoo, 2023
+# Sarah Park, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Sarah Park, 2024\n"
+"Language-Team: Korean (https://app.transifex.com/odoo/teams/41243/ko/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ko\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "# 경비"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "청구서 재발행 가능"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "청구서 재발행 고객"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "경비"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr "비용 정책 툴팁"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "지출결의서"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr "비용 분할"
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "경비"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr "이 카테고리에 있는 비용은 판매주문서에 추가할 수 없습니다."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr "비용은 발행 시 실제 비용으로 판매주문서에 추가됩니다."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr "비용은 발행 시의 판매 가격 (품목 가격이나 가격표 등)으로 판매주문서에 추가됩니다."
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr "카테고리에 비용 정책이 있는 경우 이 판매 주문에 대해 재청구됩니다"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "청구서 발행"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "전표 입력"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "전표 항목"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "품목"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr "판매 주문 재청구"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "판매 주문 수"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "판매 주문"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "판매 주문"
diff --git a/i18n/lb.po b/i18n/lb.po
new file mode 100644
index 0000000..778d4d7
--- /dev/null
+++ b/i18n/lb.po
@@ -0,0 +1,120 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~12.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-09-23 08:03+0000\n"
+"PO-Revision-Date: 2019-08-26 09:14+0000\n"
+"Language-Team: Luxembourgish (https://www.transifex.com/odoo/teams/41243/lb/)\n"
+"Language: lb\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses will be added to the Sales Order at their sales price (product price, pricelist, etc.) when posted."
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid "If the category has an expense policy, it will be reinvoiced on this sales order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr ""
diff --git a/i18n/lt.po b/i18n/lt.po
new file mode 100644
index 0000000..3b78d67
--- /dev/null
+++ b/i18n/lt.po
@@ -0,0 +1,141 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# digitouch UAB , 2023
+# Jonas Zinkevicius , 2023
+# Linas Versada , 2023
+# Martin Trigaux, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Martin Trigaux, 2024\n"
+"Language-Team: Lithuanian (https://app.transifex.com/odoo/teams/41243/lt/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: lt\n"
+"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "Išlaidų skaičius"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "Klientas, kuriam turi būti išrašyta papildoma S/F"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Išlaida"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Išlaidų ataskaita"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Išlaidos"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Sąskaitų faktūrų teikimas"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Žurnalo įrašas"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Žurnalo įrašas"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Produktas"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Pardavimo užsakymų skaičius"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Pardavimo užsakymas"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Pardavimų užsakymai"
diff --git a/i18n/lv.po b/i18n/lv.po
new file mode 100644
index 0000000..8654bfc
--- /dev/null
+++ b/i18n/lv.po
@@ -0,0 +1,140 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Arnis Putniņš , 2023
+# Will Sensors, 2023
+# Martin Trigaux, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Martin Trigaux, 2024\n"
+"Language-Team: Latvian (https://app.transifex.com/odoo/teams/41243/lv/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: lv\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Avansa Norēķini"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Izdevumi"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Rēķini"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Grāmatojumi"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Kontējums"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Produkts"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Pārdošanas pasūtījuma skaits"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Pasūtījums"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Pārdošanas pasūtījumi"
diff --git a/i18n/mn.po b/i18n/mn.po
new file mode 100644
index 0000000..895bc3e
--- /dev/null
+++ b/i18n/mn.po
@@ -0,0 +1,126 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# nurbakhit nurka , 2022
+# Martin Trigaux, 2022
+# Baskhuu Lodoikhuu , 2022
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 16.0beta\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-09-23 08:03+0000\n"
+"PO-Revision-Date: 2022-09-22 05:54+0000\n"
+"Last-Translator: Baskhuu Lodoikhuu , 2022\n"
+"Language-Team: Mongolian (https://app.transifex.com/odoo/teams/41243/mn/)\n"
+"Language: mn\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "Зардлын #"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Зардал"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Зардлын тооцоо"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Зардлууд"
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses will be added to the Sales Order at their sales price (product price, pricelist, etc.) when posted."
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid "If the category has an expense policy, it will be reinvoiced on this sales order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Нэхэмжлэл"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Журналын бичилт"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Бараа"
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Борлуулалтын баримтын тоо"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Борлуулалтын захиалга"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Борлуулалтын захиалга"
diff --git a/i18n/nb.po b/i18n/nb.po
new file mode 100644
index 0000000..40b7bd5
--- /dev/null
+++ b/i18n/nb.po
@@ -0,0 +1,125 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Martin Trigaux, 2022
+# Marius Stedjan , 2022
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 16.0beta\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-09-23 08:03+0000\n"
+"PO-Revision-Date: 2022-09-22 05:54+0000\n"
+"Last-Translator: Marius Stedjan , 2022\n"
+"Language-Team: Norwegian Bokmål (https://app.transifex.com/odoo/teams/41243/nb/)\n"
+"Language: nb\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "Antall utlegg"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "Kan viderefaktureres"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Utlegg"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Utleggsrapport"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Utlegg"
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses will be added to the Sales Order at their sales price (product price, pricelist, etc.) when posted."
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid "If the category has an expense policy, it will be reinvoiced on this sales order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Fakturering"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Journalpost"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Produkt"
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Antall salgsordre"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Salgsordre"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Salgsordre"
diff --git a/i18n/nl.po b/i18n/nl.po
new file mode 100644
index 0000000..1a87fc2
--- /dev/null
+++ b/i18n/nl.po
@@ -0,0 +1,146 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Wil Odoo, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2024\n"
+"Language-Team: Dutch (https://app.transifex.com/odoo/teams/41243/nl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: nl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "# Onkosten"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "Kan opnieuw gefactureerd worden"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "Doorfactureren aan klant"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Declaratie"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr "Tooptip onkostenbeleid"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Onkostendeclaratie"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr "Declaratie splitsen"
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Declaraties"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+"Onkosten van deze categorie mogen niet aan een verkooporder toegevoegd "
+"worden."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+"Onkosten worden toegevoegd aan de verkooporder tegen hun werkelijke "
+"kostprijs wanneer ze worden geboekt."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+"Onkosten worden toegevoegd aan de verkooporder tegen de verkoopprijs "
+"(productprijs, prijslijst, enz.) wanneer ze worden geboekt."
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+"Als de categorie een onkostenbeleid heeft, wordt deze opnieuw gefactureerd "
+"op deze verkooporder"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Facturatie"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Boeking"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Boekingsregel"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Product"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr "Geherfactureerde verkooporders"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Totaal verkooporders"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Verkooporder"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Verkooporders"
diff --git a/i18n/pl.po b/i18n/pl.po
new file mode 100644
index 0000000..41ab4cf
--- /dev/null
+++ b/i18n/pl.po
@@ -0,0 +1,144 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Wil Odoo, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2024\n"
+"Language-Team: Polish (https://app.transifex.com/odoo/teams/41243/pl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: pl\n"
+"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "# wydatków"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "Może być ponownie fakturowane"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "Klient Do Refakturowania"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Wydatek"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr "Etykieta polityki wydatków"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Raport wydatków"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr "Podział wydatków"
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Wydatki"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr "Wydatki z tej kategorii mogą być dodane do zamówienia sprzedaży"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+"Wydatki zostaną dodane do zamówienia sprzedaży po ich rzeczywistym koszcie w"
+" momencie zaksięgowania."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+"Wydatki zostaną dodane do zamówienia sprzedaży po aktualnej cenie sprzedaży "
+"w momencie księgowania."
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+"Jeżeli kategoria ma politykę wydatków, zostanie fakturowana ponownie na tym "
+"zamówieniu sprzedaży."
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Fakturowanie"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Zapis dziennika"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Pozycja zapisu"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Produkt"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr "Refakturowane zamówienia sprzedaży"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Liczba zamówień sprzedaży"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Zamówienie sprzedaży"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Zamówienia sprzedaży"
diff --git a/i18n/pt.po b/i18n/pt.po
new file mode 100644
index 0000000..6e955e1
--- /dev/null
+++ b/i18n/pt.po
@@ -0,0 +1,139 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Wil Odoo, 2023
+# Daniel Reis, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Daniel Reis, 2024\n"
+"Language-Team: Portuguese (https://app.transifex.com/odoo/teams/41243/pt/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: pt\n"
+"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Despesa"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Relatório de Despesas"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Despesas"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Faturação"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Lançamento de Diário"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Item do Diário"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Produto"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Ordem de Vendas"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Ordens de Vendas"
diff --git a/i18n/pt_BR.po b/i18n/pt_BR.po
new file mode 100644
index 0000000..19a0e52
--- /dev/null
+++ b/i18n/pt_BR.po
@@ -0,0 +1,146 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Wil Odoo, 2023
+# a75f12d3d37ea5bf159c4b3e85eb30e7_0fa6927, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: a75f12d3d37ea5bf159c4b3e85eb30e7_0fa6927, 2024\n"
+"Language-Team: Portuguese (Brazil) (https://app.transifex.com/odoo/teams/41243/pt_BR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: pt_BR\n"
+"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "Nº de despesas"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "Pode ser refaturado"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "Cliente a refaturar"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Despesa"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr "Dica de política de despesas"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Relatório de despesas"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr "Despesa dividida"
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Despesas"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+"Despesas desta categoria não podem ser adicionadas a um pedido de venda."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+"Despesas serão adicionadas ao pedido de venda com o custo efetivo de quando "
+"forem lançadas."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+"Despesas serão adicionadas ao pedido de venda com o preço de venda (preço do"
+" produto, lista de preços etc) de quando forem lançadas."
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+"Se essa categoria tem uma política de despesas, será refaturada nesse pedido"
+" de venda"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Faturamento"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Lançamento de diário"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Item do diário"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Produto"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr "Pedidos de venda refaturados"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Contagem do pedido de venda"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Pedido de venda"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Pedidos de vendas"
diff --git a/i18n/ro.po b/i18n/ro.po
new file mode 100644
index 0000000..5627357
--- /dev/null
+++ b/i18n/ro.po
@@ -0,0 +1,127 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Hongu Cosmin , 2022
+# Dorin Hongu , 2022
+# Foldi Robert , 2022
+# Martin Trigaux, 2022
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 16.0beta\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-09-23 08:03+0000\n"
+"PO-Revision-Date: 2022-09-22 05:54+0000\n"
+"Last-Translator: Martin Trigaux, 2022\n"
+"Language-Team: Romanian (https://app.transifex.com/odoo/teams/41243/ro/)\n"
+"Language: ro\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "# de Cheltuieli"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "Pot fi refacturate"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "Clienți de Refacturat"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Cheltuieli"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Raport de cheltuieli"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Cheltuieli"
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses will be added to the Sales Order at their sales price (product price, pricelist, etc.) when posted."
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid "If the category has an expense policy, it will be reinvoiced on this sales order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Facturare"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Element jurnal"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Produs"
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Numărul comenzilor de vânzare"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Comandă de vânzare"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Comenzi de vânzare"
diff --git a/i18n/ru.po b/i18n/ru.po
new file mode 100644
index 0000000..b050ad4
--- /dev/null
+++ b/i18n/ru.po
@@ -0,0 +1,148 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Martin Trigaux, 2023
+# Vasiliy Korobatov , 2023
+# Константин Коровин , 2023
+# Сергей Шебанин , 2023
+# Wil Odoo, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2024\n"
+"Language-Team: Russian (https://app.transifex.com/odoo/teams/41243/ru/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ru\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "# Расходы"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "Может быть повторно озвучен"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "Клиент для повторного выставления счета"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Расход"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr "Всплывающая подсказка по политике расходов"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Отчет о Расходах"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr "Распределение расходов"
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Расходы"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr "Расходы этой категории не могут быть добавлены к заказу на продажу."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+"Расходы будут добавлены к заказу на продажу по их фактической стоимости при "
+"учете."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+"Расходы будут добавлены к заказу на продажу по их продажной цене (цена "
+"продукта, прайс-лист и т.д.) при учете."
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+"Если для категории предусмотрена политика расходов, она будет повторно "
+"указана в этом заказе на продажу"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Выставление счетов"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Запись в журнале"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Наименование в журнале"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Товар"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr "Повторные счета-фактуры по заказам на продажу"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Счетчик заказов на продажу"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Заказ на продажу"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Заказы на продажу"
diff --git a/i18n/sale_expense.pot b/i18n/sale_expense.pot
new file mode 100644
index 0000000..f117db6
--- /dev/null
+++ b/i18n/sale_expense.pot
@@ -0,0 +1,134 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2024-01-05 12:32+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr ""
diff --git a/i18n/sk.po b/i18n/sk.po
new file mode 100644
index 0000000..6584054
--- /dev/null
+++ b/i18n/sk.po
@@ -0,0 +1,138 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Wil Odoo, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2024\n"
+"Language-Team: Slovak (https://app.transifex.com/odoo/teams/41243/sk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: sk\n"
+"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "# výdavkov"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "Môže byť znovu fakturované"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Výdavky"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Report o výdavkoch"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Výdavky"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Fakturácia"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Vstup účtovnej knihy"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Položka účtovnej knihy"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Produkt"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Počet objednávok predaja"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Objednávka "
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Objednávky predaja"
diff --git a/i18n/sl.po b/i18n/sl.po
new file mode 100644
index 0000000..004eb3a
--- /dev/null
+++ b/i18n/sl.po
@@ -0,0 +1,142 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Jasmina Macur , 2023
+# Tomaž Jug , 2023
+# Tadej Lupšina , 2023
+# Matjaz Mozetic , 2023
+# Martin Trigaux, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Martin Trigaux, 2024\n"
+"Language-Team: Slovenian (https://app.transifex.com/odoo/teams/41243/sl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: sl\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "Lahko se ponovno zaračuna"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Strošek"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Poročilo o stroških"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Stroški"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Obračun"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Temeljnica"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Postavka"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Izdelek"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Število prodajnih nalogov"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Prodajni nalog"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Prodajni nalogi"
diff --git a/i18n/sr.po b/i18n/sr.po
new file mode 100644
index 0000000..88ca9ea
--- /dev/null
+++ b/i18n/sr.po
@@ -0,0 +1,146 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Milan Bojovic , 2023
+# Martin Trigaux, 2023
+# Dragan Vukosavljevic , 2024
+# コフスタジオ, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: コフスタジオ, 2024\n"
+"Language-Team: Serbian (https://app.transifex.com/odoo/teams/41243/sr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: sr\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "# of Expenses"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "Can be reinvoiced"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "Customer to Reinvoice"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Rashod"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr "Expense Policy Tooltip"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Expense Report"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr "Expense Split"
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Troškovi"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr "Expenses of this category may not be added to a Sales Order."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Fakturisanje"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Sadržaj dnevnika"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Stavka izveštaja"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Proizvod"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr "Reinvoiced Sales Orders"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Sale Order Count"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Porudžbenica"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Porudžbenica"
diff --git a/i18n/sr@latin.po b/i18n/sr@latin.po
new file mode 100644
index 0000000..46773ef
--- /dev/null
+++ b/i18n/sr@latin.po
@@ -0,0 +1,124 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Nemanja Dragovic , 2017
+# Martin Trigaux , 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-09-23 08:03+0000\n"
+"PO-Revision-Date: 2017-09-20 09:53+0000\n"
+"Last-Translator: Martin Trigaux , 2017\n"
+"Language-Team: Serbian (Latin) (https://www.transifex.com/odoo/teams/41243/sr%40latin/)\n"
+"Language: sr@latin\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Trošak"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses will be added to the Sales Order at their sales price (product price, pricelist, etc.) when posted."
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid "If the category has an expense policy, it will be reinvoiced on this sales order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Fakturisanje"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr ""
+
+#. module: sale_expense
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr ""
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr ""
diff --git a/i18n/sv.po b/i18n/sv.po
new file mode 100644
index 0000000..7ec596a
--- /dev/null
+++ b/i18n/sv.po
@@ -0,0 +1,144 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Kim Asplund , 2023
+# Simon S, 2023
+# Chrille Hedberg , 2023
+# Anders Wallenquist , 2023
+# Lasse L, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Lasse L, 2024\n"
+"Language-Team: Swedish (https://app.transifex.com/odoo/teams/41243/sv/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: sv\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "# Utlägg"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "Kan vidarefaktureras"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "Kund att vidarefakurera"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Utlägg"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Utgiftsrapport"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Utlägg"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+"Om kategorin har en utgiftspolicy återfaktureras den på denna "
+"försäljningsorder"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Fakturering"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Journalkontering"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Transaktion"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Produkt"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr ""
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Antal säljordrar"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Order"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Kundorder"
diff --git a/i18n/th.po b/i18n/th.po
new file mode 100644
index 0000000..0d7bd88
--- /dev/null
+++ b/i18n/th.po
@@ -0,0 +1,141 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Wil Odoo, 2023
+# Rasareeyar Lappiam, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Rasareeyar Lappiam, 2024\n"
+"Language-Team: Thai (https://app.transifex.com/odoo/teams/41243/th/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: th\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "# ของรายจ่าย"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "สามารถออกใบแจ้งหนี้อีกครั้ง"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "ลูกค้าที่จะออกใบแจ้งหนี้ใหม่"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "รายจ่าย"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr "เคล็ดลับเครื่องมือนโยบายค่าใช้จ่าย"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "รายงานรายจ่าย"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr "การแบ่งค่าใช้จ่าย"
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "รายจ่าย"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr "ค่าใช้จ่ายประเภทนี้ไม่สามารถเพิ่มลงในใบสั่งขายได้"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr "ค่าใช้จ่ายจะถูกเพิ่มลงในใบสั่งขายตามต้นทุนจริงเมื่อผ่านรายการ"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+"ค่าใช้จ่ายจะถูกเพิ่มลงในใบสั่งขายในราคาขาย (ราคาสินค้า รายการราคา และอื่นๆ) "
+"เมื่อผ่านรายการ"
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr "ถ้าหมวดหมู่มีนโยบายค่าใช้จ่าย จะมีการออกใบแจ้งหนี้ใหม่ในคำสั่งขายนี้"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "ออกใบแจ้งหนี้"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "รายการสมุดรายวัน"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "รายการบันทึก"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "สินค้า"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr "ใบสั่งขายที่ออกใบแจ้งหนี้ใหม่"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "จำนวนคำสั่งขาย"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "คำสั่งขาย"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "คำสั่งขาย"
diff --git a/i18n/tr.po b/i18n/tr.po
new file mode 100644
index 0000000..b314381
--- /dev/null
+++ b/i18n/tr.po
@@ -0,0 +1,148 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Ediz Duman , 2023
+# Özlem Atalay , 2023
+# Ertuğrul Güreş , 2023
+# Martin Trigaux, 2023
+# Murat Kaplan , 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Murat Kaplan , 2024\n"
+"Language-Team: Turkish (https://app.transifex.com/odoo/teams/41243/tr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: tr\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "# Masraf Sayısı"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "Yeniden faturalandırılabilir"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "Müşteriye Yeniden Faturalama"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Masraf"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr "Masraf Politikası Araç İpucu"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Masraf Formu"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr "Masraf Bölünmesi"
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Masraflar"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr "Bu kategorideki masraflar bir Satış Siparişine eklenemez."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+"Masraflar, onaylandıklarında gerçek maliyetleri üzerinden Satış Siparişine "
+"eklenecektir."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+"Masraflar, onaylandıklarında Satış Siparişine satış fiyatı (ürün fiyatı, "
+"fiyat listesi vb.) üzerinden eklenecektir."
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+"Kategorinin bir masraf politikası varsa, bu satış siparişinde yeniden "
+"faturalandırılır"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Faturalama"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Yevmiye Kaydı"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Yevmiye Kalemi"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Ürün"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr "Yeniden Faturalandırılan Satış Siparişleri"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Sipariş Sayısı"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Satış Siparişi"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Satış Siparişleri"
diff --git a/i18n/uk.po b/i18n/uk.po
new file mode 100644
index 0000000..a0d6a3c
--- /dev/null
+++ b/i18n/uk.po
@@ -0,0 +1,145 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Alina Lisnenko , 2023
+# Wil Odoo, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2024\n"
+"Language-Team: Ukrainian (https://app.transifex.com/odoo/teams/41243/uk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: uk\n"
+"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "К-сть витрат"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "Можна повторно виставити рахунок"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "Клієнт для повторного виставлення рахунку"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Витрати"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr "Інструмент політики витрат"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Звіт про витрати"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr "Розділити витрати"
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Витрати"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr "Витрати цієї категорії можуть не додаватися до Замовлення на продаж."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+"Витрати будуть додані до Замовлення на продаж по їх актувальній вартості під"
+" час опублікування."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+"Витрати будуть додані до Замовалення на продаж по їх продажній ціні (ціна "
+"товару, прайс-лист тощо) після опублікації."
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+"Якщо категорія має політику витрат, вона буде повторно виставлятися за цим "
+"замовленням на продаж"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Виставлення рахунків"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Запис у журналі"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Елемент журналу"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Товар"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr "Замволення на продаж перевиставлені у рахунку"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "Підрахунок замовлення на продаж"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Замовлення на продаж"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Замовлення на продаж"
diff --git a/i18n/vi.po b/i18n/vi.po
new file mode 100644
index 0000000..320a064
--- /dev/null
+++ b/i18n/vi.po
@@ -0,0 +1,143 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Wil Odoo, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2024\n"
+"Language-Team: Vietnamese (https://app.transifex.com/odoo/teams/41243/vi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: vi\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "# chi phí"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "Có thể xuất lại hóa đơn"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "Khách hàng cần xuất lại hóa đơn"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "Chi phí"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr "Tooltip chính sách chi phí"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "Báo cáo chi phí"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr "Chia sẻ chi phí"
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "Chi phí"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr "Chi phí của danh mục này có thể không được thêm vào đơn bán hàng."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr ""
+"Chi phí sẽ được thêm vào đơn bán hàng theo chi phí thực tế khi ghi sổ."
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr ""
+"Chi phí sẽ được thêm vào đơn bán hàng theo giá bán (giá sản phẩm, bảng "
+"giá,...) khi ghi sổ."
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr ""
+"Nếu danh mục có chính sách chi phí, danh mục đó sẽ được xuất lại hóa đơn "
+"trong đơn bán hàng này"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "Xuất hóa đơn"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "Bút toán"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "Hạng mục bút toán"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "Sản phẩm"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr "Xuất lại hoá đơn đơn bán hàng"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr " Số đơn bán hàng"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "Đơn bán hàng"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "Đơn bán hàng"
diff --git a/i18n/zh_CN.po b/i18n/zh_CN.po
new file mode 100644
index 0000000..271ef6f
--- /dev/null
+++ b/i18n/zh_CN.po
@@ -0,0 +1,139 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Wil Odoo, 2023
+# Jeffery CHEN , 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Jeffery CHEN , 2024\n"
+"Language-Team: Chinese (China) (https://app.transifex.com/odoo/teams/41243/zh_CN/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: zh_CN\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "# 费用"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "可重开结算单"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "客户重新开票"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "费用"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr "费用政策提示"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "费用报告"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr "费用分摊"
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "费用"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr "此类别的费用不得添加到销售订单中。"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr "费用将在过帐时按实际成本添加到销售订单中。"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr "费用将在发布时以其销售价格(产品价格、价格表等)添加到销售订单。"
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr "如果该类别有费用政策,则将在此销售订单上重新开具结算单"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "发票"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "日记账分录"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "日记账项目"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "产品"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr "重开票销售订单"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "销售订单计数"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "销售订单"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "销售订单"
diff --git a/i18n/zh_TW.po b/i18n/zh_TW.po
new file mode 100644
index 0000000..04ecddf
--- /dev/null
+++ b/i18n/zh_TW.po
@@ -0,0 +1,138 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_expense
+#
+# Translators:
+# Wil Odoo, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-05 12:32+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2024\n"
+"Language-Team: Chinese (Taiwan) (https://app.transifex.com/odoo/teams/41243/zh_TW/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: zh_TW\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_count
+msgid "# of Expenses"
+msgstr "開支數目"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__can_be_reinvoiced
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__can_be_reinvoiced
+msgid "Can be reinvoiced"
+msgstr "可以請求報銷"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense__sale_order_id
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_split__sale_order_id
+msgid "Customer to Reinvoice"
+msgstr "待報銷費用客戶"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense
+msgid "Expense"
+msgstr "開支"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_product_product__expense_policy_tooltip
+#: model:ir.model.fields,field_description:sale_expense.field_product_template__expense_policy_tooltip
+msgid "Expense Policy Tooltip"
+msgstr "報銷政策工具提示"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_sheet
+msgid "Expense Report"
+msgstr "開支報告"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_hr_expense_split
+msgid "Expense Split"
+msgstr "開支分攤"
+
+#. module: sale_expense
+#: model:ir.actions.act_window,name:sale_expense.hr_expense_action_from_sale_order
+#: model:ir.model.fields,field_description:sale_expense.field_sale_order__expense_ids
+#: model_terms:ir.ui.view,arch_db:sale_expense.sale_order_form_view_inherit
+msgid "Expenses"
+msgstr "開支"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid "Expenses of this category may not be added to a Sales Order."
+msgstr "此類開支不可加至銷售訂單。"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their actual cost when posted."
+msgstr "過賬時,開支將按實際成本加至銷售訂單。"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/product_template.py:0
+#, python-format
+msgid ""
+"Expenses will be added to the Sales Order at their sales price (product "
+"price, pricelist, etc.) when posted."
+msgstr "過賬時,開支將按其銷售價格(產品價格、價目表等)加至銷售訂單。"
+
+#. module: sale_expense
+#: model:ir.model.fields,help:sale_expense.field_hr_expense__sale_order_id
+msgid ""
+"If the category has an expense policy, it will be reinvoiced on this sales "
+"order"
+msgstr "如果該類別有費用政策,則將在此銷售訂單上處理費用報銷"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.product_product_view_form_inherit_sale_expense
+msgid "Invoicing"
+msgstr "會計"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move
+msgid "Journal Entry"
+msgstr "日記賬記項"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_account_move_line
+msgid "Journal Item"
+msgstr "日記賬項目"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_product_template
+msgid "Product"
+msgstr "產品"
+
+#. module: sale_expense
+#. odoo-python
+#: code:addons/sale_expense/models/hr_expense_sheet.py:0
+#, python-format
+msgid "Reinvoiced Sales Orders"
+msgstr "重開發票的銷售訂單"
+
+#. module: sale_expense
+#: model:ir.model.fields,field_description:sale_expense.field_hr_expense_sheet__sale_order_count
+msgid "Sale Order Count"
+msgstr "銷售訂單數目"
+
+#. module: sale_expense
+#: model:ir.model,name:sale_expense.model_sale_order
+msgid "Sales Order"
+msgstr "銷售訂單"
+
+#. module: sale_expense
+#: model_terms:ir.ui.view,arch_db:sale_expense.hr_expense_sheet_view_form
+msgid "Sales Orders"
+msgstr "銷售訂單"
diff --git a/models/__init__.py b/models/__init__.py
new file mode 100644
index 0000000..06423a2
--- /dev/null
+++ b/models/__init__.py
@@ -0,0 +1,8 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import account_move_line
+from . import hr_expense
+from . import hr_expense_sheet
+from . import hr_expense_split
+from . import product_template
+from . import sale_order
diff --git a/models/account_move_line.py b/models/account_move_line.py
new file mode 100644
index 0000000..1218618
--- /dev/null
+++ b/models/account_move_line.py
@@ -0,0 +1,57 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import models
+
+
+class AccountMoveLine(models.Model):
+ _inherit = 'account.move.line'
+
+ def _sale_can_be_reinvoice(self):
+ """ determine if the generated analytic line should be reinvoiced or not.
+ For Expense flow, if the product has a 'reinvoice policy' and a Sales Order is set on the expense, then we will reinvoice the AAL
+ """
+ self.ensure_one()
+ if self.expense_id: # expense flow is different from vendor bill reinvoice flow
+ return self.expense_id.product_id.expense_policy in {'sales_price', 'cost'} and self.expense_id.sale_order_id
+ return super()._sale_can_be_reinvoice()
+
+ def _sale_determine_order(self):
+ """ For move lines created from expense, we override the normal behavior.
+ Note: if no SO but an AA is given on the expense, we will determine anyway the SO from the AA, using the same
+ mecanism as in Vendor Bills.
+ """
+ mapping_from_invoice = super(AccountMoveLine, self)._sale_determine_order()
+
+ mapping_from_expense = {}
+ for move_line in self.filtered(lambda move_line: move_line.expense_id):
+ mapping_from_expense[move_line.id] = move_line.expense_id.sale_order_id or None
+
+ mapping_from_invoice.update(mapping_from_expense)
+ return mapping_from_invoice
+
+ def _sale_prepare_sale_line_values(self, order, price):
+ # Add expense quantity to sales order line and update the sales order price because it will be charged to the customer in the end.
+ res = super()._sale_prepare_sale_line_values(order, price)
+ if self.expense_id:
+ res['product_uom_qty'] = self.expense_id.quantity
+ return res
+
+ def _sale_create_reinvoice_sale_line(self):
+ expensed_lines = self.filtered('expense_id')
+ res = super(AccountMoveLine, self - expensed_lines)._sale_create_reinvoice_sale_line()
+ res.update(super(AccountMoveLine, expensed_lines.with_context({'force_split_lines': True}))._sale_create_reinvoice_sale_line())
+ return res
+
+
+class AccountMove(models.Model):
+ _inherit = 'account.move'
+
+ def _reverse_moves(self, default_values_list=None, cancel=False):
+ self.expense_sheet_id._sale_expense_reset_sol_quantities()
+ res = super()._reverse_moves(default_values_list, cancel)
+ return res
+
+ def button_draft(self):
+ res = super().button_draft()
+ self.expense_sheet_id._sale_expense_reset_sol_quantities()
+ return res
diff --git a/models/hr_expense.py b/models/hr_expense.py
new file mode 100644
index 0000000..cc40a78
--- /dev/null
+++ b/models/hr_expense.py
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import api, fields, models
+
+
+class Expense(models.Model):
+ _inherit = "hr.expense"
+
+ sale_order_id = fields.Many2one('sale.order', compute='_compute_sale_order_id', store=True, string='Customer to Reinvoice', readonly=False, tracking=True,
+ # NOTE: only confirmed SO can be selected, but this domain in activated throught the name search with the `sale_expense_all_order`
+ # context key. So, this domain is not the one applied.
+ domain="[('state', '=', 'sale'), ('company_id', '=', company_id)]",
+ help="If the category has an expense policy, it will be reinvoiced on this sales order")
+ can_be_reinvoiced = fields.Boolean("Can be reinvoiced", compute='_compute_can_be_reinvoiced')
+
+ @api.depends('product_id.expense_policy')
+ def _compute_can_be_reinvoiced(self):
+ for expense in self:
+ expense.can_be_reinvoiced = expense.product_id.expense_policy in ['sales_price', 'cost']
+
+ @api.depends('can_be_reinvoiced')
+ def _compute_sale_order_id(self):
+ for expense in self.filtered(lambda e: not e.can_be_reinvoiced):
+ expense.sale_order_id = False
+
+ def _compute_analytic_distribution(self):
+ super(Expense, self)._compute_analytic_distribution()
+ for expense in self.filtered('sale_order_id'):
+ if expense.sale_order_id.sudo().analytic_account_id:
+ expense.analytic_distribution = {expense.sale_order_id.sudo().analytic_account_id.id: 100} # `sudo` required for normal employee without sale access rights
+
+ @api.onchange('sale_order_id')
+ def _onchange_sale_order_id(self):
+ to_reset = self.filtered(lambda line: not self.env.is_protected(self._fields['analytic_distribution'], line))
+ to_reset.invalidate_recordset(['analytic_distribution'])
+ self.env.add_to_compute(self._fields['analytic_distribution'], to_reset)
+
+ def _get_split_values(self):
+ vals = super(Expense, self)._get_split_values()
+ for split_value in vals:
+ split_value['sale_order_id'] = self.sale_order_id.id
+ return vals
diff --git a/models/hr_expense_sheet.py b/models/hr_expense_sheet.py
new file mode 100644
index 0000000..8df9a2d
--- /dev/null
+++ b/models/hr_expense_sheet.py
@@ -0,0 +1,98 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import fields, models, _
+
+
+class HrExpenseSheet(models.Model):
+ _inherit = "hr.expense.sheet"
+
+ sale_order_count = fields.Integer(compute='_compute_sale_order_count')
+
+ def _compute_sale_order_count(self):
+ for sheet in self:
+ sheet.sale_order_count = len(sheet.expense_line_ids.sale_order_id)
+
+ def _get_sale_order_lines(self):
+ """
+ This method is used to try to find the sale order lines created by expense sheets.
+
+ :return: sale.order.line
+ :rtype: recordset
+ """
+ expensed_amls = self.account_move_ids.line_ids.filtered(lambda aml: aml.expense_id.sale_order_id and aml.balance >= 0)
+ if not expensed_amls:
+ return self.env['sale.order.line']
+ aml_to_so_map = expensed_amls._sale_determine_order()
+ sale_order_ids = tuple(set(aml_to_so_map[aml.id].id for aml in expensed_amls))
+ aml_sol_unit_price_map = dict(expensed_amls.mapped(lambda aml: (aml.id, aml._sale_get_invoice_price(aml_to_so_map[aml.id]))))
+ product_ids = tuple(expensed_amls.product_id.ids)
+ quantities = tuple(expensed_amls.mapped('quantity'))
+ names = tuple(expensed_amls.mapped('name'))
+ self.env['sale.order.line'].flush_model(['order_id', 'product_id', 'product_uom_qty', 'price_unit', 'name'])
+ query = """
+ SELECT
+ DISTINCT ON (sol.order_id, sol.product_id, sol.product_uom_qty, sol.price_unit, sol.name)
+ sol.order_id, sol.product_id, sol.product_uom_qty, sol.price_unit, sol.name, sol.id
+ FROM sale_order_line AS sol
+ WHERE sol.is_expense = TRUE
+ AND sol.order_id IN %s
+ AND sol.product_id IN %s
+ AND sol.product_uom_qty IN %s
+ AND sol.price_unit IN %s
+ AND sol.name IN %s
+ ORDER BY sol.order_id, sol.product_id, sol.product_uom_qty, sol.price_unit, sol.name
+ """
+ self.env.cr.execute(query, (sale_order_ids, product_ids, quantities, tuple(set(aml_sol_unit_price_map.values())), names))
+ potential_sols_map = {
+ (row['order_id'], row['product_id'], row['product_uom_qty'], row['price_unit'], row['name']): row['id']
+ for row in self.env.cr.dictfetchall()
+ }
+ expensed_amls_keys = set(expensed_amls.mapped(
+ lambda aml: (aml.expense_id.sale_order_id.id, aml.product_id.id, aml.quantity, aml_sol_unit_price_map[aml.id], aml.name)
+ ))
+ return self.env['sale.order.line'].browse(sol_id for key, sol_id in potential_sols_map.items() if key in expensed_amls_keys)
+
+ def _sale_expense_reset_sol_quantities(self):
+ sale_order_lines = self._get_sale_order_lines()
+ sale_order_lines.write({'qty_delivered': 0.0, 'product_uom_qty': 0.0})
+
+ def action_reset_expense_sheets(self):
+ super().action_reset_expense_sheets()
+ self._sale_expense_reset_sol_quantities()
+ return True
+
+ def action_open_sale_orders(self):
+ self.ensure_one()
+ if self.sale_order_count == 1:
+ return {
+ 'type': 'ir.actions.act_window',
+ 'res_model': 'sale.order',
+ 'views': [(self.env.ref("sale.view_order_form").id, 'form')],
+ 'view_mode': 'form',
+ 'target': 'current',
+ 'name': self.expense_line_ids.sale_order_id.display_name,
+ 'res_id': self.expense_line_ids.sale_order_id.id,
+ }
+ return {
+ 'type': 'ir.actions.act_window',
+ 'res_model': 'sale.order',
+ 'views': [(self.env.ref('sale.view_order_tree').id, 'list'), (self.env.ref("sale.view_order_form").id, 'form')],
+ 'view_mode': 'list,form',
+ 'target': 'current',
+ 'name': _('Reinvoiced Sales Orders'),
+ 'domain': [('id', 'in', self.expense_line_ids.sale_order_id.ids)],
+ }
+
+ def _do_create_moves(self):
+ """ When posting expense, if the AA is given, we will track cost in that
+ If a SO is set, this means we want to reinvoice the expense. But to do so, we
+ need the analytic entries to be generated, so a AA is required to reinvoice. So,
+ we ensure the AA if a SO is given.
+ """
+ for expense in self.expense_line_ids.filtered(lambda expense: expense.sale_order_id and not expense.analytic_distribution):
+ if not expense.sale_order_id.analytic_account_id:
+ expense.sale_order_id._create_analytic_account()
+ expense.write({
+ 'analytic_distribution': {expense.sale_order_id.analytic_account_id.id: 100}
+ })
+ return super()._do_create_moves()
diff --git a/models/hr_expense_split.py b/models/hr_expense_split.py
new file mode 100644
index 0000000..bec5ed5
--- /dev/null
+++ b/models/hr_expense_split.py
@@ -0,0 +1,34 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import fields, models, api
+
+
+class HrExpenseSplit(models.TransientModel):
+ _inherit = "hr.expense.split"
+
+ def default_get(self, fields):
+ result = super(HrExpenseSplit, self).default_get(fields)
+ if 'expense_id' in result:
+ expense = self.env['hr.expense'].browse(result['expense_id'])
+ result['sale_order_id'] = expense.sale_order_id
+ return result
+
+ sale_order_id = fields.Many2one('sale.order', string="Customer to Reinvoice", compute='_compute_sale_order_id', readonly=False, store=True, domain="[('state', '=', 'sale'), ('company_id', '=', company_id)]")
+ can_be_reinvoiced = fields.Boolean("Can be reinvoiced", compute='_compute_can_be_reinvoiced')
+
+ def _get_values(self):
+ self.ensure_one()
+ vals = super(HrExpenseSplit, self)._get_values()
+ vals['sale_order_id'] = self.sale_order_id.id
+ return vals
+
+ @api.depends('product_id')
+ def _compute_can_be_reinvoiced(self):
+ for split in self:
+ split.can_be_reinvoiced = split.product_id.expense_policy in ['sales_price', 'cost']
+
+ @api.depends('can_be_reinvoiced')
+ def _compute_sale_order_id(self):
+ for split in self:
+ split.sale_order_id = split.sale_order_id if split.can_be_reinvoiced else False
diff --git a/models/product_template.py b/models/product_template.py
new file mode 100644
index 0000000..686dc7e
--- /dev/null
+++ b/models/product_template.py
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import api, models, fields, _
+
+
+class ProductTemplate(models.Model):
+ _inherit = 'product.template'
+
+ expense_policy_tooltip = fields.Char(compute='_compute_expense_policy_tooltip')
+
+ @api.depends_context('lang')
+ @api.depends('expense_policy')
+ def _compute_expense_policy_tooltip(self):
+ for product_template in self:
+ if not product_template.can_be_expensed or not product_template.expense_policy:
+ product_template.expense_policy_tooltip = False
+ elif product_template.expense_policy == 'no':
+ product_template.expense_policy_tooltip = _(
+ "Expenses of this category may not be added to a Sales Order."
+ )
+ elif product_template.expense_policy == 'cost':
+ product_template.expense_policy_tooltip = _(
+ "Expenses will be added to the Sales Order at their actual cost when posted."
+ )
+ elif product_template.expense_policy == 'sales_price':
+ product_template.expense_policy_tooltip = _(
+ "Expenses will be added to the Sales Order at their sales price (product price, pricelist, etc.) when posted."
+ )
+
+ @api.depends('can_be_expensed')
+ def _compute_visible_expense_policy(self):
+ expense_products = self.filtered(lambda p: p.can_be_expensed)
+ for product_template in self - expense_products:
+ product_template.visible_expense_policy = False
+
+ super(ProductTemplate, expense_products)._compute_visible_expense_policy()
+ visibility = self.user_has_groups('hr_expense.group_hr_expense_user')
+ for product_template in expense_products:
+ if not product_template.visible_expense_policy:
+ product_template.visible_expense_policy = visibility
diff --git a/models/sale_order.py b/models/sale_order.py
new file mode 100644
index 0000000..258ff13
--- /dev/null
+++ b/models/sale_order.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import api, fields, models
+from odoo.osv import expression
+
+
+class SaleOrder(models.Model):
+ _inherit = 'sale.order'
+
+ expense_ids = fields.One2many('hr.expense', 'sale_order_id', string='Expenses', domain=[('state', '=', 'done')], readonly=True, copy=False)
+ expense_count = fields.Integer("# of Expenses", compute='_compute_expense_count', compute_sudo=True)
+
+ @api.model
+ def _name_search(self, name, domain=None, operator='ilike', limit=None, order=None):
+ """ For expense, we want to show all sales order but only their display_name (no ir.rule applied), this is the only way to do it. """
+ if (
+ self._context.get('sale_expense_all_order')
+ and self.user_has_groups('sales_team.group_sale_salesman')
+ and not self.user_has_groups('sales_team.group_sale_salesman_all_leads')
+ ):
+ domain = expression.AND([domain or [], ['&', ('state', '=', 'sale'), ('company_id', 'in', self.env.companies.ids)]])
+ return super(SaleOrder, self.sudo())._name_search(name, domain, operator, limit, order)
+ return super()._name_search(name, domain, operator, limit, order)
+
+ @api.depends('expense_ids')
+ def _compute_expense_count(self):
+ expense_data = self.env['hr.expense']._read_group([('sale_order_id', 'in', self.ids)], ['sale_order_id'], ['__count'])
+ mapped_data = {sale_order.id: count for sale_order, count in expense_data}
+ for sale_order in self:
+ sale_order.expense_count = mapped_data.get(sale_order.id, 0)
diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv
new file mode 100644
index 0000000..228b126
--- /dev/null
+++ b/security/ir.model.access.csv
@@ -0,0 +1,2 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_sale_order_employee,sale.order.employee.expense,sale.model_sale_order,base.group_user,0,0,0,0
\ No newline at end of file
diff --git a/security/sale_expense_security.xml b/security/sale_expense_security.xml
new file mode 100644
index 0000000..e908046
--- /dev/null
+++ b/security/sale_expense_security.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+ Expense Employee can read confirmed SO
+
+ [('state', '=', 'sale')]
+
+
+
+
+
+
+
+
+
diff --git a/static/src/js/sale_order_many2one.js b/static/src/js/sale_order_many2one.js
new file mode 100644
index 0000000..79360a8
--- /dev/null
+++ b/static/src/js/sale_order_many2one.js
@@ -0,0 +1,30 @@
+/** @odoo-module **/
+
+import { Many2OneField, many2OneField } from '@web/views/fields/many2one/many2one_field';
+
+import { registry } from "@web/core/registry";
+
+export class OrderField extends Many2OneField {
+ setup() {
+ super.setup();
+ }
+
+ /**
+ * @override
+ */
+ get Many2XAutocompleteProps() {
+ // hide the search more option from the dropdown menu
+ return {
+ ...super.Many2XAutocompleteProps,
+ noSearchMore: true,
+ }
+ }
+}
+
+export const orderField = {
+ ...many2OneField,
+ component: OrderField,
+};
+
+registry.category("fields").add("sale_order_many2one", orderField);
+registry.add('sale_order_many2one', OrderField);
diff --git a/static/tests/sale_order_many2one_tests.js b/static/tests/sale_order_many2one_tests.js
new file mode 100644
index 0000000..740fb2a
--- /dev/null
+++ b/static/tests/sale_order_many2one_tests.js
@@ -0,0 +1,75 @@
+/** @odoo-module **/
+
+import { makeView, setupViewRegistries } from "@web/../tests/views/helpers";
+import { clickDropdown, getFixture } from "@web/../tests/helpers/utils";
+
+
+QUnit.module('sale_expense', {
+ beforeEach: function () {
+ this.target = getFixture();
+ this.data = {
+ }
+ this.data = {
+ models: {
+ 'hr.expense': {
+ fields: {
+ name: { string: "Description", type: "char" },
+ sale_order_id: { string: "Reinvoice Customer", type: 'many2one', relation: 'sale.order' },
+ },
+ records: [{id: 1}]
+ },
+ 'sale.order': {
+ fields: {
+ name: { string: "Name", type: "char" },
+ },
+ records: [{
+ id: 1,
+ name: "SO1",
+ }, {
+ id: 2,
+ name: "SO2",
+ }, {
+ id: 3,
+ name: "SO3"
+ }, {
+ id: 4,
+ name: "SO4"
+ }, {
+ id: 5,
+ name: "SO5"
+ }, {
+ id: 6,
+ name: "SO6"
+ }, {
+ id: 7,
+ name: "SO7"
+ }, {
+ id: 8,
+ name: "SO8"
+ }, {
+ id: 9,
+ name: "SO9"
+ }]
+ },
+ }
+ };
+ setupViewRegistries();
+ },
+}, function () {
+ QUnit.test('sale order many2one without search more option', async function (assert) {
+ assert.expect(2);
+ await makeView({
+ type: "form",
+ resModel: "hr.expense",
+ serverData: this.data,
+ resId: 1,
+ arch:
+ ''
+ });
+
+ await clickDropdown(this.target, "sale_order_id");
+
+ assert.containsN(this.target, 'li.o-autocomplete--dropdown-item', 9);
+ assert.containsNone(this.target, '.o_m2o_dropdown_option_search_more', "Should not display the 'Search More... option'");
+ });
+});
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644
index 0000000..c770fdf
--- /dev/null
+++ b/tests/__init__.py
@@ -0,0 +1,5 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import test_sale_expense
+from . import test_reinvoice
diff --git a/tests/test_reinvoice.py b/tests/test_reinvoice.py
new file mode 100644
index 0000000..57f6263
--- /dev/null
+++ b/tests/test_reinvoice.py
@@ -0,0 +1,301 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import Command
+from odoo.addons.hr_expense.tests.common import TestExpenseCommon
+from odoo.addons.sale.tests.common import TestSaleCommon
+from odoo.tests import tagged
+
+
+@tagged('-at_install', 'post_install')
+class TestReInvoice(TestExpenseCommon, TestSaleCommon):
+
+ @classmethod
+ def setUpClass(cls, chart_template_ref=None):
+ super().setUpClass(chart_template_ref=chart_template_ref)
+ cls.company_data.update({
+ 'service_order_sales_price': cls.env['product.product'].with_company(cls.company_data['company']).create({
+ 'name': 'service_order_sales_price',
+ 'categ_id': cls.company_data['product_category'].id,
+ 'standard_price': 235.0,
+ 'list_price': 280.0,
+ 'type': 'service',
+ 'weight': 0.01,
+ 'uom_id': cls.env.ref('uom.product_uom_unit').id,
+ 'uom_po_id': cls.env.ref('uom.product_uom_unit').id,
+ 'default_code': 'FURN_9999',
+ 'invoice_policy': 'order',
+ 'expense_policy': 'sales_price',
+ 'taxes_id': [Command.set([])],
+ 'supplier_taxes_id': [Command.set([])],
+ 'can_be_expensed': True,
+ }),
+ 'service_delivery_sales_price': cls.env['product.product'].with_company(cls.company_data['company']).create({
+ 'name': 'service_order_sales_price',
+ 'categ_id': cls.company_data['product_category'].id,
+ 'standard_price': 235.0,
+ 'list_price': 280.0,
+ 'type': 'service',
+ 'weight': 0.01,
+ 'uom_id': cls.env.ref('uom.product_uom_unit').id,
+ 'uom_po_id': cls.env.ref('uom.product_uom_unit').id,
+ 'default_code': 'FURN_9999',
+ 'invoice_policy': 'order',
+ 'expense_policy': 'sales_price',
+ 'taxes_id': [Command.set([])],
+ 'supplier_taxes_id': [Command.set([])],
+ 'can_be_expensed': True,
+ }),
+ })
+
+ def test_expenses_reinvoice(self):
+ """
+ Test that expenses are re-invoiced correctly and that the quantity is updated when it has to.
+ - Lines are never grouped together (even if reinvoced at sale price and with a re-invoice delivered policy)
+ - When posting an expense, it creates the corresponding sol with the expense quantity
+ - The quantities ordered and delivered are reset to 0 when:
+ - the expense sheet is unposted
+ - the expense move is reversed
+ - the expense move is reset to draft
+ """
+ # create SO line and confirm SO (with only one line)
+ sale_order = self.env['sale.order'].with_context(mail_notrack=True, mail_create_nolog=True).create({
+ 'partner_id': self.partner_a.id,
+ 'partner_invoice_id': self.partner_a.id,
+ 'partner_shipping_id': self.partner_a.id,
+ 'order_line': [Command.create({
+ 'name': 'expense_employee: expense_1 invoicing=order, expense=sales_price',
+ # Using the same name as one of the expense
+ 'product_id': self.company_data['product_order_sales_price'].id,
+ 'product_uom_qty': 3.0,
+ 'price_unit': self.company_data['product_order_sales_price'].standard_price,
+ })],
+ })
+ sale_order.action_confirm()
+
+ expense_sheet = self.env['hr.expense.sheet'].create({
+ 'name': 'Reset expense test',
+ 'employee_id': self.expense_employee.id,
+ 'journal_id': self.company_data['default_journal_purchase'].id,
+ 'accounting_date': '2017-01-01',
+ 'expense_line_ids': [
+ Command.create({
+ 'name': 'expense_1 invoicing=order, expense=sales_price',
+ 'date': '2016-01-01',
+ 'product_id': self.company_data['service_order_sales_price'].id,
+ 'quantity': 1,
+ 'analytic_distribution': {self.analytic_account_1.id: 100},
+ 'employee_id': self.expense_employee.id,
+ 'sale_order_id': sale_order.id,
+ }),
+ Command.create({
+ 'name': 'expense_2 invoicing=order, expense=sales_price',
+ 'date': '2016-01-02',
+ 'product_id': self.company_data['service_order_sales_price'].id,
+ 'quantity': 2,
+ 'employee_id': self.expense_employee.id,
+ 'sale_order_id': sale_order.id,
+ }),
+ Command.create({
+ 'name': 'expense_3 invoicing=delivery, expense=sales_price',
+ 'date': '2016-01-03',
+ 'product_id': self.company_data['service_delivery_sales_price'].id,
+ 'quantity': 3,
+ 'analytic_distribution': {self.analytic_account_1.id: 100},
+ 'employee_id': self.expense_employee.id,
+ 'sale_order_id': sale_order.id,
+ }),
+ Command.create({
+ 'name': 'expense_4 invoicing=delivery, expense=sales_price',
+ 'date': '2016-01-03',
+ 'product_id': self.company_data['service_delivery_sales_price'].id,
+ 'quantity': 4,
+ 'analytic_distribution': {self.analytic_account_1.id: 100},
+ 'employee_id': self.expense_employee.id,
+ 'sale_order_id': sale_order.id,
+ }),
+ ],
+ })
+
+ expense_sheet.action_approve_expense_sheets()
+ expense_sheet.action_sheet_move_create()
+
+ # We also need to test "duplicates" aka very similar expenses
+ expense_sheet_copy = self.env['hr.expense.sheet'].create({
+ 'name': 'Reset expense test copy',
+ 'employee_id': self.expense_employee.id,
+ 'journal_id': self.company_data['default_journal_purchase'].id,
+ 'accounting_date': '2017-01-01',
+ 'expense_line_ids': [
+ Command.create({
+ 'name': 'expense_3 invoicing=delivery, expense=sales_price copy',
+ 'date': '2016-01-03',
+ 'product_id': self.company_data['service_delivery_sales_price'].id,
+ 'quantity': 3,
+ 'analytic_distribution': {self.analytic_account_1.id: 100},
+ 'employee_id': self.expense_employee.id,
+ 'sale_order_id': sale_order.id,
+ }),
+ Command.create({
+ 'name': 'expense_4 invoicing=delivery, expense=sales_price copy',
+ 'date': '2016-01-03',
+ 'product_id': self.company_data['service_delivery_sales_price'].id,
+ 'quantity': 4,
+ 'analytic_distribution': {self.analytic_account_1.id: 100},
+ 'employee_id': self.expense_employee.id,
+ 'sale_order_id': sale_order.id,
+ }),
+ ],
+ })
+
+ action_data = expense_sheet_copy.action_approve_expense_sheets()
+ duplicate_wizard = self.env['hr.expense.approve.duplicate'].with_context(action_data['context']).create({})
+ duplicate_wizard.action_approve()
+ expense_sheet_copy.action_sheet_move_create()
+ #pylint: disable=bad-whitespace
+ self.assertRecordValues(sale_order.order_line, [
+ {'qty_delivered': 0.0, 'product_uom_qty': 3.0, 'is_expense': False, 'name': 'expense_employee: expense_1 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 1.0, 'product_uom_qty': 1.0, 'is_expense': True, 'name': 'expense_employee: expense_1 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 2.0, 'product_uom_qty': 2.0, 'is_expense': True, 'name': 'expense_employee: expense_2 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 3.0, 'product_uom_qty': 3.0, 'is_expense': True, 'name': 'expense_employee: expense_3 invoicing=delivery, expense=sales_price'},
+ {'qty_delivered': 4.0, 'product_uom_qty': 4.0, 'is_expense': True, 'name': 'expense_employee: expense_4 invoicing=delivery, expense=sales_price'},
+ {'qty_delivered': 3.0, 'product_uom_qty': 3.0, 'is_expense': True, 'name': 'expense_employee: expense_3 invoicing=delivery, expense=sales_price copy'},
+ {'qty_delivered': 4.0, 'product_uom_qty': 4.0, 'is_expense': True, 'name': 'expense_employee: expense_4 invoicing=delivery, expense=sales_price copy'},
+ ])
+
+ expense_sheet.action_reset_expense_sheets() # Lines [0-4] quantities are set to 0
+ self.assertRecordValues(sale_order.order_line, [
+ {'qty_delivered': 0.0, 'product_uom_qty': 3.0, 'name': 'expense_employee: expense_1 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'name': 'expense_employee: expense_1 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'name': 'expense_employee: expense_2 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'name': 'expense_employee: expense_3 invoicing=delivery, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'name': 'expense_employee: expense_4 invoicing=delivery, expense=sales_price'},
+ {'qty_delivered': 3.0, 'product_uom_qty': 3.0, 'name': 'expense_employee: expense_3 invoicing=delivery, expense=sales_price copy'},
+ {'qty_delivered': 4.0, 'product_uom_qty': 4.0, 'name': 'expense_employee: expense_4 invoicing=delivery, expense=sales_price copy'},
+ ])
+
+ expense_sheet.action_approve_expense_sheets()
+ expense_sheet.action_sheet_move_create() # Lines [1-4] are still at 0 but new lines are created (stable limitation)
+
+ self.assertRecordValues(sale_order.order_line, [
+ {'qty_delivered': 0.0, 'product_uom_qty': 3.0, 'name': 'expense_employee: expense_1 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'name': 'expense_employee: expense_1 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'name': 'expense_employee: expense_2 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'name': 'expense_employee: expense_3 invoicing=delivery, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'name': 'expense_employee: expense_4 invoicing=delivery, expense=sales_price'},
+ {'qty_delivered': 3.0, 'product_uom_qty': 3.0, 'name': 'expense_employee: expense_3 invoicing=delivery, expense=sales_price copy'},
+ {'qty_delivered': 4.0, 'product_uom_qty': 4.0, 'name': 'expense_employee: expense_4 invoicing=delivery, expense=sales_price copy'},
+ {'qty_delivered': 1.0, 'product_uom_qty': 1.0, 'name': 'expense_employee: expense_1 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 2.0, 'product_uom_qty': 2.0, 'name': 'expense_employee: expense_2 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 3.0, 'product_uom_qty': 3.0, 'name': 'expense_employee: expense_3 invoicing=delivery, expense=sales_price'},
+ {'qty_delivered': 4.0, 'product_uom_qty': 4.0, 'name': 'expense_employee: expense_4 invoicing=delivery, expense=sales_price'},
+ ])
+
+ expense_sheet.account_move_ids.button_draft() # Lines [7-11] quantities are set to 0
+ self.assertRecordValues(sale_order.order_line, [
+ {'qty_delivered': 0.0, 'product_uom_qty': 3.0, 'name': 'expense_employee: expense_1 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'name': 'expense_employee: expense_1 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'name': 'expense_employee: expense_2 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'name': 'expense_employee: expense_3 invoicing=delivery, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'name': 'expense_employee: expense_4 invoicing=delivery, expense=sales_price'},
+ {'qty_delivered': 3.0, 'product_uom_qty': 3.0, 'name': 'expense_employee: expense_3 invoicing=delivery, expense=sales_price copy'},
+ {'qty_delivered': 4.0, 'product_uom_qty': 4.0, 'name': 'expense_employee: expense_4 invoicing=delivery, expense=sales_price copy'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'name': 'expense_employee: expense_1 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'name': 'expense_employee: expense_2 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'name': 'expense_employee: expense_3 invoicing=delivery, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'name': 'expense_employee: expense_4 invoicing=delivery, expense=sales_price'},
+ ])
+
+ expense_sheet.account_move_ids.action_post() # Lines [7-11] are still at 0 but new lines are created (stable limitation)
+ self.assertRecordValues(sale_order.order_line, [
+ {'qty_delivered': 0.0, 'product_uom_qty': 3.0, 'name': 'expense_employee: expense_1 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'name': 'expense_employee: expense_1 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'name': 'expense_employee: expense_2 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'name': 'expense_employee: expense_3 invoicing=delivery, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'name': 'expense_employee: expense_4 invoicing=delivery, expense=sales_price'},
+ {'qty_delivered': 3.0, 'product_uom_qty': 3.0, 'name': 'expense_employee: expense_3 invoicing=delivery, expense=sales_price copy'},
+ {'qty_delivered': 4.0, 'product_uom_qty': 4.0, 'name': 'expense_employee: expense_4 invoicing=delivery, expense=sales_price copy'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'name': 'expense_employee: expense_1 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'name': 'expense_employee: expense_2 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'name': 'expense_employee: expense_3 invoicing=delivery, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'name': 'expense_employee: expense_4 invoicing=delivery, expense=sales_price'},
+ {'qty_delivered': 1.0, 'product_uom_qty': 1.0, 'name': 'expense_employee: expense_1 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 2.0, 'product_uom_qty': 2.0, 'name': 'expense_employee: expense_2 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 3.0, 'product_uom_qty': 3.0, 'name': 'expense_employee: expense_3 invoicing=delivery, expense=sales_price'},
+ {'qty_delivered': 4.0, 'product_uom_qty': 4.0, 'name': 'expense_employee: expense_4 invoicing=delivery, expense=sales_price'},
+ ])
+
+ expense_sheet.account_move_ids._reverse_moves() # Lines [7-11] quantities are set to 0
+ self.assertRecordValues(sale_order.order_line, [
+ {'qty_delivered': 0.0, 'product_uom_qty': 3.0, 'is_expense': False, 'name': 'expense_employee: expense_1 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'is_expense': True, 'name': 'expense_employee: expense_1 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'is_expense': True, 'name': 'expense_employee: expense_2 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'is_expense': True, 'name': 'expense_employee: expense_3 invoicing=delivery, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'is_expense': True, 'name': 'expense_employee: expense_4 invoicing=delivery, expense=sales_price'},
+ {'qty_delivered': 3.0, 'product_uom_qty': 3.0, 'is_expense': True, 'name': 'expense_employee: expense_3 invoicing=delivery, expense=sales_price copy'},
+ {'qty_delivered': 4.0, 'product_uom_qty': 4.0, 'is_expense': True, 'name': 'expense_employee: expense_4 invoicing=delivery, expense=sales_price copy'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'is_expense': True, 'name': 'expense_employee: expense_1 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'is_expense': True, 'name': 'expense_employee: expense_2 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'is_expense': True, 'name': 'expense_employee: expense_3 invoicing=delivery, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'is_expense': True, 'name': 'expense_employee: expense_4 invoicing=delivery, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'is_expense': True, 'name': 'expense_employee: expense_1 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'is_expense': True, 'name': 'expense_employee: expense_2 invoicing=order, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'is_expense': True, 'name': 'expense_employee: expense_3 invoicing=delivery, expense=sales_price'},
+ {'qty_delivered': 0.0, 'product_uom_qty': 0.0, 'is_expense': True, 'name': 'expense_employee: expense_4 invoicing=delivery, expense=sales_price'},
+ ])
+
+ def test_expenses_reinvoice_analytic_distribution(self):
+ """Test expense line with multiple analytic accounts is reinvoiced correctly"""
+
+ (self.company_data['product_order_sales_price'] + self.company_data['product_delivery_sales_price']).write({
+ 'can_be_expensed': True,
+ })
+
+ # create SO line and confirm SO (with only one line)
+ sale_order = self.env['sale.order'].with_context(mail_notrack=True, mail_create_nolog=True).create({
+ 'partner_id': self.partner_a.id,
+ 'partner_invoice_id': self.partner_a.id,
+ 'partner_shipping_id': self.partner_a.id,
+ 'order_line': [Command.create({
+ 'name': self.company_data['product_order_sales_price'].name,
+ 'product_id': self.company_data['product_order_sales_price'].id,
+ 'product_uom_qty': 2.0,
+ 'price_unit': 1000.0,
+ })],
+ })
+ sale_order.action_confirm()
+
+ expense_sheet = self.env['hr.expense.sheet'].create({
+ 'name': 'First Expense for employee',
+ 'employee_id': self.expense_employee.id,
+ 'journal_id': self.company_data['default_journal_purchase'].id,
+ 'accounting_date': '2017-01-01',
+ 'expense_line_ids': [
+ Command.create({
+ 'name': 'expense_1',
+ 'date': '2016-01-01',
+ 'product_id': self.company_data['product_order_sales_price'].id,
+ 'quantity': 2,
+ 'analytic_distribution': {self.analytic_account_1.id: 50, self.analytic_account_2.id: 50},
+ 'employee_id': self.expense_employee.id,
+ 'sale_order_id': sale_order.id,
+ }),
+ ],
+ })
+
+ expense_sheet.action_approve_expense_sheets()
+ expense_sheet.action_sheet_move_create()
+
+ self.assertRecordValues(sale_order.order_line, [
+ # Original SO line:
+ {
+ 'qty_delivered': 0.0,
+ 'product_uom_qty': 2.0,
+ 'is_expense': False,
+ },
+ # Expense lines:
+ {
+ 'qty_delivered': 2.0,
+ 'product_uom_qty': 2.0,
+ 'is_expense': True,
+ },
+ ])
diff --git a/tests/test_sale_expense.py b/tests/test_sale_expense.py
new file mode 100644
index 0000000..4081e7b
--- /dev/null
+++ b/tests/test_sale_expense.py
@@ -0,0 +1,151 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+from odoo import Command, fields
+from odoo.addons.hr_expense.tests.common import TestExpenseCommon
+from odoo.addons.sale.tests.common import TestSaleCommon
+from odoo.tests import tagged
+
+
+@tagged('post_install', '-at_install')
+class TestSaleExpense(TestExpenseCommon, TestSaleCommon):
+
+ def test_sale_expense(self):
+ """ Test the behaviour of sales orders when managing expenses """
+
+ # create a so with a product invoiced on delivery
+ so = self.env['sale.order'].create({
+ 'partner_id': self.partner_a.id,
+ 'partner_invoice_id': self.partner_a.id,
+ 'partner_shipping_id': self.partner_a.id,
+ 'order_line': [Command.create({
+ 'name': self.company_data['product_delivery_no'].name,
+ 'product_id': self.company_data['product_delivery_no'].id,
+ 'product_uom_qty': 2,
+ 'product_uom': self.company_data['product_delivery_no'].uom_id.id,
+ 'price_unit': self.company_data['product_delivery_no'].list_price,
+ })],
+ })
+ so.action_confirm()
+ so._create_analytic_account() # normally created at so confirmation when you use the right products
+ init_price = so.amount_total
+
+ # create some expense and validate it (expense at cost)
+ # Submit to Manager
+ sheet = self.env['hr.expense.sheet'].create({
+ 'name': 'Expense for John Smith 1',
+ 'employee_id': self.expense_employee.id,
+ 'journal_id': self.company_data['default_journal_purchase'].id,
+ })
+ exp = self.env['hr.expense'].create({
+ 'name': 'Air Travel',
+ 'product_id': self.company_data['product_delivery_cost'].id,
+ 'analytic_distribution': {so.analytic_account_id.id: 100},
+ 'quantity': 11.30,
+ 'employee_id': self.expense_employee.id,
+ 'sheet_id': sheet.id,
+ 'sale_order_id': so.id,
+ })
+ # Approve
+ sheet.action_approve_expense_sheets()
+ # Create Expense Entries
+ sheet.action_sheet_move_create()
+ # expense should now be in sales order
+ self.assertIn(self.company_data['product_delivery_cost'], so.mapped('order_line.product_id'), 'Sale Expense: expense product should be in so')
+ sol = so.order_line.filtered(lambda sol: sol.product_id.id == self.company_data['product_delivery_cost'].id)
+ self.assertEqual((sol.price_unit, sol.qty_delivered), (55.0, 11.3), 'Sale Expense: error when invoicing an expense at cost')
+ self.assertEqual(so.amount_total, init_price + exp.total_amount, 'Sale Expense: price of so should be updated after adding expense')
+
+ # create some expense and validate it (expense at sale price)
+ init_price = so.amount_total
+ prod_exp_2 = self.env['product.product'].create({
+ 'name': 'Car Travel',
+ 'expense_policy': 'sales_price',
+ 'type': 'service',
+ 'can_be_expensed': True,
+ 'invoice_policy': 'delivery',
+ 'list_price': 0.50,
+ 'uom_id': self.env.ref('uom.product_uom_km').id,
+ 'uom_po_id': self.env.ref('uom.product_uom_km').id,
+ 'standard_price': 0.15,
+ })
+ # Submit to Manager
+ sheet = self.env['hr.expense.sheet'].create({
+ 'name': 'Expense for John Smith 2',
+ 'employee_id': self.expense_employee.id,
+ 'journal_id': self.company_data['default_journal_purchase'].id,
+ })
+ exp = self.env['hr.expense'].create({
+ 'name': 'Car Travel',
+ 'product_id': prod_exp_2.id,
+ 'analytic_distribution': {so.analytic_account_id.id: 100},
+ 'product_uom_id': self.env.ref('uom.product_uom_km').id,
+ 'quantity': 100,
+ 'employee_id': self.expense_employee.id,
+ 'sheet_id': sheet.id,
+ 'sale_order_id': so.id,
+ })
+ # Approve
+ sheet.action_approve_expense_sheets()
+ # Create Expense Entries
+ sheet.action_sheet_move_create()
+ # expense should now be in sales order
+ self.assertIn(prod_exp_2, so.mapped('order_line.product_id'), 'Sale Expense: expense product should be in so')
+ sol = so.order_line.filtered(lambda sol: sol.product_id.id == prod_exp_2.id)
+ self.assertEqual((sol.price_unit, sol.qty_delivered), (prod_exp_2.list_price, 100.0), 'Sale Expense: error when invoicing an expense at cost')
+ self.assertEqual(so.amount_untaxed, init_price + (prod_exp_2.list_price * 100.0), 'Sale Expense: price of so should be updated after adding expense')
+ # self.assertTrue(so.invoice_status, 'no', 'Sale Expense: expenses should not impact the invoice_status of the so')
+
+ # both expenses should be invoiced
+ inv = so._create_invoices()
+ self.assertEqual(inv.amount_untaxed, 621.5 + (prod_exp_2.list_price * 100.0), 'Sale Expense: invoicing of expense is wrong')
+
+ def test_expense_multi_id_analytic_distribution(self):
+ """
+ Test conversion of analytic_distribution dict into account numbers when a hr.expense.sheet containing
+ a hr.expense with an analytic_distribution having 2+ account ids
+ """
+ expensed_product = self.env['product.product'].create({
+ 'name': 'test product',
+ 'can_be_expensed': True,
+ 'detailed_type': 'service',
+ 'invoice_policy': 'order',
+ 'standard_price': 100,
+ 'expense_policy': 'cost',
+ })
+
+ sale_order = self.env['sale.order'].create({
+ 'partner_id': self.partner_a.id,
+ 'partner_invoice_id': self.partner_a.id,
+ 'partner_shipping_id': self.partner_a.id,
+ 'order_line': [Command.create({'product_id': self.product_b.id})],
+ })
+ sale_order.action_confirm()
+ sale_order._create_invoices()
+
+ analytic_account_3 = self.env['account.analytic.account'].create({
+ 'name': 'analytic_account_3',
+ 'plan_id': self.analytic_plan.id,
+ })
+
+ expense_sheet = self.env['hr.expense.sheet'].create({
+ 'name': 'Test Expense Report',
+ 'employee_id': self.expense_employee.id,
+ 'company_id': self.company_data['company'].id,
+ 'expense_line_ids': [Command.create({
+ 'employee_id': self.expense_employee.id,
+ 'product_id': expensed_product.id,
+ 'quantity': 1000.00,
+ 'date': fields.Date.today(),
+ 'company_id': self.company_data['company'].id,
+ 'currency_id': self.company_data['currency'].id,
+ 'analytic_distribution': {
+ f'{self.analytic_account_1.id},{self.analytic_account_2.id}': 60,
+ f'{analytic_account_3.id}': 40,
+ },
+ 'sale_order_id': sale_order.id,
+ })],
+ })
+ expense_sheet.action_submit_sheet()
+ expense_sheet.action_approve_expense_sheets()
+ expense_sheet.action_sheet_move_create()
+
+ self.assertTrue(self.env['account.move'].search([('expense_sheet_id', '=', expense_sheet.id)], limit=1))
diff --git a/views/hr_expense_sheet_views.xml b/views/hr_expense_sheet_views.xml
new file mode 100644
index 0000000..acfacc2
--- /dev/null
+++ b/views/hr_expense_sheet_views.xml
@@ -0,0 +1,19 @@
+
+
+
+ hr.expense.sheet.view.form.inherit.sale.expense
+ hr.expense.sheet
+
+
+
+
+
+
diff --git a/views/hr_expense_views.xml b/views/hr_expense_views.xml
new file mode 100644
index 0000000..8d94a08
--- /dev/null
+++ b/views/hr_expense_views.xml
@@ -0,0 +1,75 @@
+
+
+
+ hr.expense.form.inherit.sale.expense
+ hr.expense
+
+ 30
+
+
+
+
+
+
+
+
+
+
+ hr.expense.tree.inherit.sale.expense
+ hr.expense
+
+
+
+
+
+
+
+
+
+
+ hr.expense.split.view.inherit.sale.expense
+ hr.expense.split.wizard
+
+
+
+
+
+
+
+
+
+
+ hr.expense.sheet.form.inherit.sale.expense
+ hr.expense.sheet
+
+
+
+
+
+
+
+
+
+
+ Expenses
+ hr.expense
+ tree,form
+ [('sale_order_id', '=', active_id)]
+ {'default_sale_order_id': active_id}
+
+
diff --git a/views/product_view.xml b/views/product_view.xml
new file mode 100644
index 0000000..37632bd
--- /dev/null
+++ b/views/product_view.xml
@@ -0,0 +1,45 @@
+
+
+
+
+ product.template.expense
+ product.product
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ product.product.view.list.inherit.sale.expense
+ product.product
+
+
+
+
+
+
+
+
+
+
+ {"default_can_be_expensed": 1, 'default_detailed_type': 'service',
+ 'default_expense_policy' : 'cost'}
+
+
+
diff --git a/views/sale_order_views.xml b/views/sale_order_views.xml
new file mode 100644
index 0000000..b2851cf
--- /dev/null
+++ b/views/sale_order_views.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ sale.order.form.inherit.sale.expense
+ sale.order
+
+
+
+
+
+
+
+
+
+
+
+
+