19.0 vanilla

This commit is contained in:
Ernad Husremovic 2026-03-09 09:32:12 +01:00
parent 79f83631d5
commit 73afc09215
6267 changed files with 1534193 additions and 1130106 deletions

View file

@ -10,39 +10,16 @@ pip install odoo-bringout-oca-ocb-project_sale_expense
## Dependencies
This addon depends on:
- sale_project
- sale_expense
- project_hr_expense
## Manifest Information
- **Name**: Project - Sale - Expense
- **Version**: 1.0
- **Category**: Hidden
- **License**: LGPL-3
- **Installable**: False
## Source
Based on [OCA/OCB](https://github.com/OCA/OCB) branch 16.0, addon `project_sale_expense`.
- Repository: https://github.com/OCA/OCB
- Branch: 19.0
- Path: addons/project_sale_expense
## License
This package maintains the original LGPL-3 license from the upstream Odoo project.
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- Reports: doc/REPORTS.md
- Security: doc/SECURITY.md
- Install: doc/INSTALL.md
- Usage: doc/USAGE.md
- Configuration: doc/CONFIGURATION.md
- Dependencies: doc/DEPENDENCIES.md
- Troubleshooting: doc/TROUBLESHOOTING.md
- FAQ: doc/FAQ.md
This package preserves the original LGPL-3 license.

View file

@ -5,8 +5,9 @@
'name': 'Project - Sale - Expense',
'version': '1.0',
'description': 'Adds a full traceability of reinvoice expenses on the profitability report.',
'author': 'Odoo S.A.',
'license': 'LGPL-3',
'category': 'Hidden',
'category': 'Services/Project',
'depends': ['sale_project', 'sale_expense', 'project_hr_expense'],
'auto_install': True,
}

View file

@ -0,0 +1,51 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# "Tiffany Chang (tic)" <tic@odoo.com>, 2025.
# "Dylan Kiss (dyki)" <dyki@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-10-13 12:17+0000\n"
"Last-Translator: \"Dylan Kiss (dyki)\" <dyki@odoo.com>\n"
"Language-Team: Arabic <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/ar/>\n"
"Language: ar\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \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 ? 4 : 5;\n"
"X-Generator: Weblate 5.12.2\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr "اسم العرض"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "النفقة"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr "المُعرف"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "عنصر اليومية"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "المشروع"

View file

@ -0,0 +1,46 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2024-09-26 08:56+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: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr ""
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr ""

View file

@ -0,0 +1,46 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2024-09-26 08:56+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: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr ""
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr ""

View file

@ -1,21 +1,48 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
# * project_sale_expense
#
# Odoo Translation Bot <c3p@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Project-Id-Version: Odoo Server 19.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-06 13:32+0000\n"
"PO-Revision-Date: 2024-02-06 13:32+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-10-08 18:38+0000\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: bs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \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: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr ""
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Projekat"
msgstr ""

View file

@ -0,0 +1,52 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# "Dylan Kiss (dyki)" <dyki@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-09-16 04:49+0000\n"
"Last-Translator: \"Dylan Kiss (dyki)\" <dyki@odoo.com>\n"
"Language-Team: Catalan <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/ca/>\n"
"Language: ca\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"
"X-Generator: Weblate 5.12.2\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "Despesa"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "Apunt comptable"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Projecte"
#~ msgid "Expense Report"
#~ msgstr "Informe de despeses"

View file

@ -0,0 +1,50 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# "Tiffany Chang (tic)" <tic@odoo.com>, 2025.
# "Marta (wacm)" <wacm@odoo.com>, 2026.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2026-01-29 09:09+0000\n"
"Last-Translator: \"Marta (wacm)\" <wacm@odoo.com>\n"
"Language-Team: Czech <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/cs/>\n"
"Language: cs\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>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Weblate 5.14.3\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr "Zobrazovací název"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "Výdaj"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "Účetní položka"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Projekt"

View file

@ -0,0 +1,49 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# "Dylan Kiss (dyki)" <dyki@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-09-14 21:16+0000\n"
"Last-Translator: \"Dylan Kiss (dyki)\" <dyki@odoo.com>\n"
"Language-Team: Danish <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/da/>\n"
"Language: da\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"
"X-Generator: Weblate 5.12.2\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "Omkostning"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "Journalpost"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Projekt"

View file

@ -0,0 +1,50 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# "Dylan Kiss (dyki)" <dyki@odoo.com>, 2025.
# "Larissa Manderfeld (lman)" <lman@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-10-31 12:54+0000\n"
"Last-Translator: \"Larissa Manderfeld (lman)\" <lman@odoo.com>\n"
"Language-Team: German <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/de/>\n"
"Language: de\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"
"X-Generator: Weblate 5.12.2\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr "Anzeigename"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "Ausgabe"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr "ID"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "Buchungszeile"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Projekt"

View file

@ -0,0 +1,52 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# "Dylan Kiss (dyki)" <dyki@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-09-24 19:24+0000\n"
"Last-Translator: \"Dylan Kiss (dyki)\" <dyki@odoo.com>\n"
"Language-Team: Greek <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/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"
"X-Generator: Weblate 5.12.2\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "Έξοδα"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "Στοιχείο Ημερολογίου"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Έργο"
#~ msgid "Expense Report"
#~ msgstr "Εξοδολόγιο"

View file

@ -0,0 +1,50 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# "Tiffany Chang (tic)" <tic@odoo.com>, 2025.
# "Dylan Kiss (dyki)" <dyki@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-10-23 12:57+0000\n"
"Last-Translator: \"Dylan Kiss (dyki)\" <dyki@odoo.com>\n"
"Language-Team: Spanish <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/es/>\n"
"Language: es\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"
"X-Generator: Weblate 5.12.2\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr "Nombre para mostrar"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "Gasto"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr "ID"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "Apunte contable"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Proyecto"

View file

@ -0,0 +1,54 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# "Dylan Kiss (dyki)" <dyki@odoo.com>, 2025.
# "Patricia Gutiérrez (pagc)" <pagc@odoo.com>, 2025.
# "Fernanda Alvarez (mfar)" <mfar@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-11-11 00:38+0000\n"
"Last-Translator: \"Patricia Gutiérrez (pagc)\" <pagc@odoo.com>\n"
"Language-Team: Spanish (Latin America) <https://translate.odoo.com/projects/"
"odoo-19/project_sale_expense/es_419/>\n"
"Language: es_419\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"
"X-Generator: Weblate 5.12.2\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr "Nombre para mostrar"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "Gasto"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr "ID"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "Apunte contable"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Proyectos"
#~ msgid "Expense Report"
#~ msgstr "Reporte de gastos"

View file

@ -0,0 +1,49 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# Kristina Pešehodko <kristina@avalah.ee>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 19.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-10-22 11:08+0000\n"
"Last-Translator: Kristina Pešehodko <kristina@avalah.ee>\n"
"Language-Team: Estonian <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/et/>\n"
"Language: et\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"
"X-Generator: Weblate 5.12.2\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr "Kuvatav nimi"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "Kulu"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr "ID"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "Andmiku kanderida"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Projekt"

View file

@ -0,0 +1,46 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2024-09-26 08:56+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: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr ""
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr ""

View file

@ -0,0 +1,50 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# "Tiffany Chang (tic)" <tic@odoo.com>, 2025.
# Saara Hakanen <sahak@odoo.com>, 2025, 2026.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2026-01-07 09:20+0000\n"
"Last-Translator: Saara Hakanen <sahak@odoo.com>\n"
"Language-Team: Finnish <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/fi/>\n"
"Language: fi\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"
"X-Generator: Weblate 5.14.3\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr "Näyttönimi"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "Kulu"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr "Tunnus"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "Kirjausrivi"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Projekti"

View file

@ -0,0 +1,50 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# "Tiffany Chang (tic)" <tic@odoo.com>, 2025.
# "Manon Rondou (ronm)" <ronm@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-10-15 09:14+0000\n"
"Last-Translator: \"Manon Rondou (ronm)\" <ronm@odoo.com>\n"
"Language-Team: French <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/fr/>\n"
"Language: fr\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"
"X-Generator: Weblate 5.12.2\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr "Nom d'affichage"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "Dépense"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr "ID"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "Écriture comptable"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Projet"

View file

@ -0,0 +1,46 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2024-09-26 08:56+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: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr ""
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr ""

View file

@ -0,0 +1,46 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2024-09-26 08:56+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: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr ""
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr ""

View file

@ -0,0 +1,46 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2024-09-26 08:56+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: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr ""
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr ""

View file

@ -0,0 +1,52 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# "Dylan Kiss (dyki)" <dyki@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-09-29 19:48+0000\n"
"Last-Translator: \"Dylan Kiss (dyki)\" <dyki@odoo.com>\n"
"Language-Team: Hungarian <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/hu/>\n"
"Language: hu\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"
"X-Generator: Weblate 5.12.2\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "Költség"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "Könyvelési tétel"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Projekt"
#~ msgid "Expense Report"
#~ msgstr "Költségelszámolás"

View file

@ -0,0 +1,50 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# "Dylan Kiss (dyki)" <dyki@odoo.com>, 2025.
# "Abe Manyo (abem)" <abem@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-10-16 06:08+0000\n"
"Last-Translator: \"Abe Manyo (abem)\" <abem@odoo.com>\n"
"Language-Team: Indonesian <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/id/>\n"
"Language: id\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"
"X-Generator: Weblate 5.12.2\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr "Nama Tampilan"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "Pengeluaran"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr "ID"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "Item Jurnal"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Project"

View file

@ -0,0 +1,50 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# "Tiffany Chang (tic)" <tic@odoo.com>, 2025.
# "Marianna Ciofani (cima)" <cima@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-10-16 17:05+0000\n"
"Last-Translator: \"Marianna Ciofani (cima)\" <cima@odoo.com>\n"
"Language-Team: Italian <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/it/>\n"
"Language: it\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"
"X-Generator: Weblate 5.12.2\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr "Nome visualizzato"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "Spesa"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr "ID"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "Movimento contabile"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Progetto"

View file

@ -0,0 +1,50 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# "Dylan Kiss (dyki)" <dyki@odoo.com>, 2025.
# "Junko Augias (juau)" <juau@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-10-16 06:08+0000\n"
"Last-Translator: \"Junko Augias (juau)\" <juau@odoo.com>\n"
"Language-Team: Japanese <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/ja/>\n"
"Language: ja\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"
"X-Generator: Weblate 5.12.2\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr "表示名"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "費用"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr "ID"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "仕訳明細"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "プロジェクト"

View file

@ -0,0 +1,47 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# Odoo Translation Bot <c3p@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 19.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-10-08 18:38+0000\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: kab\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: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr ""
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr ""

View file

@ -0,0 +1,50 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# "Dylan Kiss (dyki)" <dyki@odoo.com>, 2025.
# "Kwanghee Park (kwpa)" <kwpa@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-11-17 19:02+0000\n"
"Last-Translator: \"Kwanghee Park (kwpa)\" <kwpa@odoo.com>\n"
"Language-Team: Korean <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/ko/>\n"
"Language: ko\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"
"X-Generator: Weblate 5.12.2\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr "표시명"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "경비"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr "ID"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "전표 항목"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "프로젝트"

View file

@ -0,0 +1,46 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2024-09-26 08:56+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: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr ""
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr ""

View file

@ -0,0 +1,46 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2024-09-26 08:56+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: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr ""
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr ""

View file

@ -0,0 +1,46 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 19.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-10-08 18:38+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: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr ""
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr ""

View file

@ -0,0 +1,46 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2024-09-26 08:56+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: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr ""
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr ""

View file

@ -0,0 +1,49 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# Oakarmin Iron <oakarminiron@gmail.com>, 2026.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2026-02-04 07:55+0000\n"
"Last-Translator: Oakarmin Iron <oakarminiron@gmail.com>\n"
"Language-Team: Burmese <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/my/>\n"
"Language: my\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"
"X-Generator: Weblate 5.14.3\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr ""
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "ပရောဂျက်"

View file

@ -0,0 +1,49 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# "Tiffany Chang (tic)" <tic@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-09-16 18:49+0000\n"
"Last-Translator: \"Tiffany Chang (tic)\" <tic@odoo.com>\n"
"Language-Team: Norwegian Bokmål <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/nb_NO/>\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"
"X-Generator: Weblate 5.12.2\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "Utlegg"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "Bilagslinje"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Prosjekt"

View file

@ -0,0 +1,50 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# "Dylan Kiss (dyki)" <dyki@odoo.com>, 2025.
# Bren Driesen <brdri@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-12-02 14:57+0000\n"
"Last-Translator: Bren Driesen <brdri@odoo.com>\n"
"Language-Team: Dutch <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/nl/>\n"
"Language: nl\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"
"X-Generator: Weblate 5.14.3\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr "Weergavenaam"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "Onkost"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr "ID"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "Boekingsregel"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Project"

View file

@ -0,0 +1,51 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# "Tiffany Chang (tic)" <tic@odoo.com>, 2025.
# "Dylan Kiss (dyki)" <dyki@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-10-17 12:46+0000\n"
"Last-Translator: \"Dylan Kiss (dyki)\" <dyki@odoo.com>\n"
"Language-Team: Polish <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/pl/>\n"
"Language: pl\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%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 5.12.2\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr "Nazwa wyświetlana"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "Wydatek"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr "ID"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "Pozycja zapisu"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Projekt"

View file

@ -4,10 +4,10 @@
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Project-Id-Version: Odoo Server 19.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-06 13:32+0000\n"
"PO-Revision-Date: 2024-02-06 13:32+0000\n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2026-01-25 18:36+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@ -15,6 +15,30 @@ msgstr ""
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr ""
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"

View file

@ -0,0 +1,49 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# "Tiffany Chang (tic)" <tic@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-09-16 18:49+0000\n"
"Last-Translator: \"Tiffany Chang (tic)\" <tic@odoo.com>\n"
"Language-Team: Portuguese <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/pt/>\n"
"Language: pt\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"
"X-Generator: Weblate 5.12.2\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "Despesa"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "Item do diário"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Projeto"

View file

@ -0,0 +1,53 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# "Tiffany Chang (tic)" <tic@odoo.com>, 2025.
# "Maitê Dietze (madi)" <madi@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-10-28 13:12+0000\n"
"Last-Translator: \"Maitê Dietze (madi)\" <madi@odoo.com>\n"
"Language-Team: Portuguese (Brazil) <https://translate.odoo.com/projects/"
"odoo-19/project_sale_expense/pt_BR/>\n"
"Language: pt_BR\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"
"X-Generator: Weblate 5.12.2\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr "Exibir nome"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "Despesa"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr "ID"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "Item do diário"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Projeto"
#~ msgid "Expense Report"
#~ msgstr "Relatório de Despesas"

View file

@ -0,0 +1,50 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# Busoi Cristina <elena.busoi@capps.ai>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-11-27 09:06+0000\n"
"Last-Translator: Busoi Cristina <elena.busoi@capps.ai>\n"
"Language-Team: Romanian <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/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==0 || (n%100 > 0 && n%100 < "
"20)) ? 1 : 2;\n"
"X-Generator: Weblate 5.14.3\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr "Nume Afișat"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "Cheltuieli"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr "ID"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "Element Jurnal"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Proiect"

View file

@ -0,0 +1,53 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# Translators:
# "Dylan Kiss (dyki)" <dyki@odoo.com>, 2025.
# "Anastasiia Koroleva (koan)" <koan@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 17.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-12-03 08:34+0000\n"
"Last-Translator: \"Anastasiia Koroleva (koan)\" <koan@odoo.com>\n"
"Language-Team: Russian <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/ru/>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \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"
"X-Generator: Weblate 5.14.3\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "Расходы"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr "ID"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "Элемент журнала"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Проект"

View file

@ -0,0 +1,49 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# Tomáš Píšek <Tomas.Pisek@seznam.cz>, 2026.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 19.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2026-02-16 05:04+0000\n"
"Last-Translator: Tomáš Píšek <Tomas.Pisek@seznam.cz>\n"
"Language-Team: Slovak <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/sk/>\n"
"Language: sk\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>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Weblate 5.14.3\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr "Zobrazovaný názov"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "Výdavok"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr "ID"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "Položka denníka"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Projekt"

View file

@ -0,0 +1,50 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# "Tiffany Chang (tic)" <tic@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-09-16 21:28+0000\n"
"Last-Translator: \"Tiffany Chang (tic)\" <tic@odoo.com>\n"
"Language-Team: Slovenian <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/sl/>\n"
"Language: sl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || "
"n%100==4 ? 2 : 3;\n"
"X-Generator: Weblate 5.12.2\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "Strošek"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "Postavka"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Projekt"

View file

@ -0,0 +1,46 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 19.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-12-30 18:37+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: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr ""
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr ""

View file

@ -0,0 +1,46 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2024-09-26 08:56+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: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr ""
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr ""

View file

@ -0,0 +1,49 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# "Tiffany Chang (tic)" <tic@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-09-16 21:28+0000\n"
"Last-Translator: \"Tiffany Chang (tic)\" <tic@odoo.com>\n"
"Language-Team: Swedish <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/sv/>\n"
"Language: sv\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"
"X-Generator: Weblate 5.12.2\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "Kostnader"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "Journalpost"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Projekt"

View file

@ -0,0 +1,49 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# "Tiffany Chang (tic)" <tic@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-09-16 21:24+0000\n"
"Last-Translator: \"Tiffany Chang (tic)\" <tic@odoo.com>\n"
"Language-Team: Thai <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/th/>\n"
"Language: th\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"
"X-Generator: Weblate 5.12.2\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "รายจ่าย"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "รายการบันทึก"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "โปรเจ็กต์"

View file

@ -0,0 +1,53 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# "Tiffany Chang (tic)" <tic@odoo.com>, 2025.
# Weblate <noreply-mt-weblate@weblate.org>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-11-08 01:52+0000\n"
"Last-Translator: Weblate <noreply-mt-weblate@weblate.org>\n"
"Language-Team: Turkish <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/tr/>\n"
"Language: tr\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"
"X-Generator: Weblate 5.12.2\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr "İsim Göster"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "Masraf"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr "ID"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "Yevmiye Kalemi"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Proje"
#~ msgid "Expense Report"
#~ msgstr "Masraf Formu"

View file

@ -0,0 +1,51 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# Oleksii Lytvynov <oleksii.lytvynov@self-erp.com>, 2026.
# Alina Lisnenko <alina.lisnenko@erp.co.ua>, 2026.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2026-02-19 18:50+0000\n"
"Last-Translator: Alina Lisnenko <alina.lisnenko@erp.co.ua>\n"
"Language-Team: Ukrainian <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/uk/>\n"
"Language: uk\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"
"X-Generator: Weblate 5.14.3\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr ""
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Проєкт"

View file

@ -0,0 +1,59 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
#
# Translated by:
# Deepvision - info@deepvision.uz | +998 77-093-0007
# Amon Olimov - amon.bars@gmail.com
# Jonibek Yorqulov - j.yorqulov@deepvision.uz
# Mirzohidkhon Ulugkhujaev ulugkhujayevmirzohidxon@gmail.com
#
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 19.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-10-08 18:38+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: uz\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
#, fuzzy
msgid "Display Name"
msgstr "Korsatish nomi"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
#, fuzzy
msgid "Expense"
msgstr "Xarajat"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
#, fuzzy
msgid "ID"
msgstr "ID"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
#, fuzzy
msgid "Journal Item"
msgstr "Jurnal yozuvi"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
#, fuzzy
msgid "Project"
msgstr "Loyiha"

View file

@ -0,0 +1,50 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# "Dylan Kiss (dyki)" <dyki@odoo.com>, 2025.
# "Thi Huong Nguyen (thng)" <thng@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-10-16 06:08+0000\n"
"Last-Translator: \"Thi Huong Nguyen (thng)\" <thng@odoo.com>\n"
"Language-Team: Vietnamese <https://translate.odoo.com/projects/odoo-19/"
"project_sale_expense/vi/>\n"
"Language: vi\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"
"X-Generator: Weblate 5.12.2\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr ""
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "Chi phí"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr "ID"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "Hạng mục bút toán"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "Dự án"

View file

@ -0,0 +1,50 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# "Tiffany Chang (tic)" <tic@odoo.com>, 2025.
# "Chloe Wang (chwa)" <chwa@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-11-20 07:38+0000\n"
"Last-Translator: \"Chloe Wang (chwa)\" <chwa@odoo.com>\n"
"Language-Team: Chinese (Simplified Han script) <https://translate.odoo.com/"
"projects/odoo-19/project_sale_expense/zh_Hans/>\n"
"Language: zh_CN\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"
"X-Generator: Weblate 5.12.2\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr "显示名称"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "费用"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr "ID"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "日记账项目"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "项目"

View file

@ -0,0 +1,53 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_sale_expense
#
# Translators:
# Wil Odoo, 2025
# Tony Ng, 2025
#
# "Dylan Kiss (dyki)" <dyki@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~18.3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-25 18:36+0000\n"
"PO-Revision-Date: 2025-09-16 08:11+0000\n"
"Last-Translator: \"Dylan Kiss (dyki)\" <dyki@odoo.com>\n"
"Language-Team: Chinese (Traditional Han script) <https://translate.odoo.com/"
"projects/odoo-19/project_sale_expense/zh_Hant/>\n"
"Language: zh_TW\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"
"X-Generator: Weblate 5.12.2\n"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__display_name
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__display_name
msgid "Display Name"
msgstr "顯示名稱"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_hr_expense
msgid "Expense"
msgstr "開支"
#. module: project_sale_expense
#: model:ir.model.fields,field_description:project_sale_expense.field_account_move_line__id
#: model:ir.model.fields,field_description:project_sale_expense.field_hr_expense__id
#: model:ir.model.fields,field_description:project_sale_expense.field_project_project__id
msgid "ID"
msgstr "識別號"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_account_move_line
msgid "Journal Item"
msgstr "日記賬項目"
#. module: project_sale_expense
#: model:ir.model,name:project_sale_expense.model_project_project
msgid "Project"
msgstr "專案"

View file

@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import account_move_line
from . import hr_expense
from . import project_project

View file

@ -0,0 +1,17 @@
# 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_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 its project's AAs linked,
using the same mecanism as in Vendor Bills.
"""
mapping_from_project = self._get_so_mapping_from_project()
mapping_from_expense = self._get_so_mapping_from_expense()
mapping_from_project.update(mapping_from_expense)
return mapping_from_project

View file

@ -0,0 +1,50 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models
class HrExpense(models.Model):
_inherit = "hr.expense"
def _compute_analytic_distribution(self):
super()._compute_analytic_distribution()
if not self.env.context.get('project_id'):
expenses_to_recompute = self.env['hr.expense']
prefetch_ids = set()
for expense in self.filtered('sale_order_id'):
expenses_to_recompute += expense
prefetch_ids.update(self.env['analytic.mixin']._get_analytic_account_ids_from_distributions(expense.analytic_distribution))
prefetch_ids.update(self.env['analytic.mixin']._get_analytic_account_ids_from_distributions(expense.sale_order_id.project_id._get_analytic_distribution()))
if expenses_to_recompute:
analytic_account_model = self.env['account.analytic.account'].with_prefetch(prefetch_ids)
for expense in expenses_to_recompute:
expense_account_ids = self.env['analytic.mixin']._get_analytic_account_ids_from_distributions(expense.analytic_distribution)
project_analytic_distribution = expense.sale_order_id.project_id._get_analytic_distribution()
project_account_ids = self.env['analytic.mixin']._get_analytic_account_ids_from_distributions(project_analytic_distribution)
project_analytic_distribution_accounts = self.env['account.analytic.account'].browse(project_account_ids)
expense_analytic_accounts = analytic_account_model.browse(expense_account_ids)
if not any(project_account.root_plan_id in expense_analytic_accounts.root_plan_id for project_account in project_analytic_distribution_accounts):
# If it is possible we keep both analytic distributions
expense.analytic_distribution = {
**(expense.analytic_distribution or {}),
**(project_analytic_distribution or {})
}
else:
# If not we keep the most prioritized one -> project
expense.analytic_distribution = expense.sale_order_id.project_id._get_analytic_distribution() or expense.analytic_distribution or {}
def action_post(self):
""" When creating the move of the expense, if the AA is given in the project of the SO, we take it as reference in the distribution.
Otherwise, we create a AA for the project of the SO and set the distribution to it.
"""
for expense in self:
project = expense.sale_order_id.project_id
if not project or expense.analytic_distribution:
continue
if not project.account_id:
project._create_analytic_account()
expense.analytic_distribution = project._get_analytic_distribution()
return super().action_post()

View file

@ -1,65 +1,62 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import json
from odoo import models
from collections import defaultdict
from odoo import fields, models
class Project(models.Model):
class ProjectProject(models.Model):
_inherit = 'project.project'
def _get_expenses_profitability_items(self, with_action=True):
if not self.analytic_account_id:
return {}
can_see_expense = with_action and self.user_has_groups('hr_expense.group_hr_expense_team_approver')
query = self.env['hr.expense']._search([('is_refused', '=', False), ('state', 'in', ['approved', 'done'])])
query.add_where('hr_expense.analytic_distribution ? %s', [str(self.analytic_account_id.id)])
query.order = None
query_string, query_param = query.select('sale_order_id', 'product_id', 'currency_id', 'array_agg(id) as ids', 'SUM(untaxed_amount) as untaxed_amount')
query_string = f"{query_string} GROUP BY sale_order_id, product_id, currency_id"
self._cr.execute(query_string, query_param)
expenses_read_group = [expense for expense in self._cr.dictfetchall()]
expenses_read_group = self.env['hr.expense']._read_group(
[('state', 'in', ['posted', 'in_payment', 'paid']), ('analytic_distribution', 'in', self.account_id.ids)],
groupby=['sale_order_id', 'product_id', 'currency_id'],
aggregates=['id:array_agg', 'untaxed_amount_currency:sum'],
)
if not expenses_read_group:
return {}
expenses_per_so_id = {}
expense_ids = []
amount_billed = 0.0
dict_amount_per_currency = defaultdict(lambda: 0.0)
for res in expenses_read_group:
so_id = res['sale_order_id']
product_id = res['product_id']
expenses_per_so_id.setdefault(so_id, {})[product_id] = res['ids']
can_see_expense = with_action and self.env.user.has_group('hr_expense.group_hr_expense_team_approver')
for sale_order, product, currency, ids, untaxed_amount_currency_sum in expenses_read_group:
expenses_per_so_id.setdefault(sale_order.id, {})[product.id] = ids
if can_see_expense:
expense_ids.extend(res['ids'])
dict_amount_per_currency[res['currency_id']] += res['untaxed_amount']
date = fields.Date.context_today(self)
for currency_id in dict_amount_per_currency:
if currency_id == self.company_id.currency_id.id:
amount_billed += dict_amount_per_currency[currency_id]
continue
currency = self.env['res.currency'].browse(currency_id)
amount_billed += currency._convert(dict_amount_per_currency[currency_id], self.company_id.currency_id, self.company_id, date)
expense_ids.extend(ids)
dict_amount_per_currency[currency] += untaxed_amount_currency_sum
amount_billed = 0.0
for currency, untaxed_amount_currency_sum in dict_amount_per_currency.items():
amount_billed += currency._convert(untaxed_amount_currency_sum, self.currency_id, self.company_id, round=False)
sol_read_group = self.env['sale.order.line'].sudo()._read_group(
[
('order_id', 'in', list(expenses_per_so_id.keys())),
('is_expense', '=', True),
('state', 'in', ['sale', 'done']),
('state', '=', 'sale'),
],
['order_id', 'product_id', 'untaxed_amount_to_invoice', 'untaxed_amount_invoiced'],
['order_id', 'product_id'],
lazy=False)
['order_id', 'product_id', 'currency_id'],
['untaxed_amount_to_invoice:sum', 'untaxed_amount_invoiced:sum'],
)
total_amount_expense_invoiced = total_amount_expense_to_invoice = 0.0
reinvoice_expense_ids = []
for res in sol_read_group:
expense_data_per_product_id = expenses_per_so_id[res['order_id'][0]]
product_id = res['product_id'][0]
dict_invoices_amount_per_currency = defaultdict(lambda: {'to_invoice': 0.0, 'invoiced': 0.0})
set_currency_ids = {self.currency_id.id}
for order, product, currency, untaxed_amount_to_invoice_sum, untaxed_amount_invoiced_sum in sol_read_group:
expense_data_per_product_id = expenses_per_so_id[order.id]
set_currency_ids.add(currency.id)
product_id = product.id
if product_id in expense_data_per_product_id:
total_amount_expense_to_invoice += res['untaxed_amount_to_invoice']
total_amount_expense_invoiced += res['untaxed_amount_invoiced']
dict_invoices_amount_per_currency[currency]['to_invoice'] += untaxed_amount_to_invoice_sum
dict_invoices_amount_per_currency[currency]['invoiced'] += untaxed_amount_invoiced_sum
reinvoice_expense_ids += expense_data_per_product_id[product_id]
for currency, revenues in dict_invoices_amount_per_currency.items():
total_amount_expense_to_invoice += currency._convert(revenues['to_invoice'], self.currency_id, self.company_id)
total_amount_expense_invoiced += currency._convert(revenues['invoiced'], self.currency_id, self.company_id)
section_id = 'expenses'
sequence = self._get_profitability_sequence_per_invoice_type()[section_id]
expense_data = {
@ -92,16 +89,13 @@ class Project(models.Model):
def _get_already_included_profitability_invoice_line_ids(self):
move_line_ids = super()._get_already_included_profitability_invoice_line_ids()
query = self.env['hr.expense']._search([('is_refused', '=', False), ('state', 'in', ['approved', 'done'])])
query.add_where('hr_expense.analytic_distribution ? %s', [str(self.analytic_account_id.id)])
query.order = None
query_string, query_param = query.select('sale_order_id')
query_string = f"{query_string} GROUP BY sale_order_id"
self._cr.execute(query_string, query_param)
expenses_read_group = list(self._cr.dictfetchall())
expenses_read_group = self.env['hr.expense']._read_group(
[('state', 'in', ['posted', 'in_payment', 'paid']), ('analytic_distribution', 'in', self.account_id.ids)],
groupby=['sale_order_id'],
aggregates=['__count'],
)
if not expenses_read_group:
return move_line_ids
for res in expenses_read_group:
sale_order = self.env['sale.order'].browse(res['sale_order_id'])
for sale_order, count in expenses_read_group:
move_line_ids.extend(sale_order.invoice_ids.mapped('invoice_line_ids').ids)
return move_line_ids

View file

@ -2,3 +2,4 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import test_project_profitability
from . import test_project_sale_expense

View file

@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.tests import tagged
@ -10,67 +9,109 @@ from odoo.addons.sale_project.tests.test_project_profitability import TestProjec
@tagged('-at_install', 'post_install')
class TestProjectSaleExpenseProfitability(TestProjectProfitabilityCommon, TestProjectHrExpenseProfitabilityCommon, TestSaleCommon):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.product_c.write({
'expense_policy': 'sales_price',
})
def test_project_profitability(self):
project = self.env['project.project'].create({'name': 'new project'})
project._create_analytic_account()
account = project.account_id
# Create a new company with the foreign currency.
foreign_company = self.company_data_2['company']
foreign_company.currency_id = self.foreign_currency
foreign_partner = self.env['res.partner'].create({
'name': 'Foreign Employee address',
'company_id': foreign_company.id,
})
foreign_employee = self.env['hr.employee'].sudo().create({
'name': 'foreign_employee',
'company_id': foreign_company.id,
'expense_manager_id': self.expense_user_manager.id,
'work_contact_id': foreign_partner.id,
'work_email': 'email@email',
})
expense = self.env['hr.expense'].create({
'name': 'expense',
'product_id': self.company_data['product_order_sales_price'].id,
'unit_amount': self.company_data['product_order_sales_price'].list_price,
'total_amount_currency': self.company_data['product_order_sales_price'].list_price,
'employee_id': self.expense_employee.id,
'analytic_distribution': {self.project.analytic_account_id.id: 100},
'analytic_distribution': {account.id: 100},
'sale_order_id': self.sale_order.id,
})
# See method definition in `project_hr_expense.tests.test_project_profitability`
expense_sheet = self.check_project_profitability_before_creating_and_approving_expense_sheet(
expense = self.check_project_profitability_before_creating_and_approving_expense(
expense,
self.project,
project,
self.project_profitability_items_empty)
self.assertEqual(expense.state, 'approved')
expense_profitability = self.project._get_expenses_profitability_items(False)
sequence_per_invoice_type = self.project._get_profitability_sequence_per_invoice_type()
# Create an expense in a foreign company, the expense is linked to the AA of the project.
so_foreign = self.env['sale.order'].create({
'name': 'Sale order foreign',
'partner_id': self.partner_a.id,
'company_id': foreign_company.id,
})
so_foreign.currency_id = self.foreign_currency
so_foreign.action_confirm()
expense_foreign = self.create_expenses({
'name': 'Expense foreign',
'employee_id': foreign_employee.id,
'product_id': self.product_c.id, # Foreign currency product must have no cost
'total_amount_currency': 350.00 * 0.5, # 0.5 is the exchange rate
'company_id': foreign_company.id,
'analytic_distribution': {account.id: 100},
'currency_id': self.foreign_currency.id,
'sale_order_id': so_foreign.id,
})
expense_foreign.action_submit()
self.assertEqual(expense_foreign.state, 'submitted')
expense_foreign.action_approve()
self.assertEqual(expense_foreign.state, 'approved')
expense_profitability = project._get_expenses_profitability_items(False)
sequence_per_invoice_type = project._get_profitability_sequence_per_invoice_type()
self.assertIn('expenses', sequence_per_invoice_type)
expense_sequence = sequence_per_invoice_type['expenses']
billed = -expense.untaxed_amount_currency - expense_foreign.untaxed_amount_currency * 0.2 # -280.0 - 175.0 * 0.2 = -315.0
self.assertDictEqual(
expense_profitability.get('revenues', {}),
{},
)
self.assertDictEqual(
expense_profitability['costs'],
{'id': 'expenses', 'sequence': expense_sequence, 'billed': -280.0, 'to_bill': 0.0},
self.assertNotIn(
'costs',
expense_profitability,
'No costs should be found since the sheets are not posted or done.',
)
expense_sheet.action_sheet_move_create()
self.post_expenses_with_wizard(expense)
self.assertEqual(expense.state, 'posted')
self.assertRecordValues(self.sale_order.order_line, [
# Original SO line:
{
'product_id': self.product_delivery_service.id,
'qty_delivered': 0.0,
'product_uom_qty': 10,
'is_expense': False,
},
{
'product_id': self.company_data['product_order_sales_price'].id,
'qty_delivered': 1.0,
'product_uom_qty': 1.0,
'is_expense': True,
},
{'is_expense': False, 'product_uom_qty': 10.0, 'qty_delivered': 0.0, 'product_id': self.product_delivery_service.id},
{'is_expense': True, 'product_uom_qty': 1.0, 'qty_delivered': 1.0, 'product_id': self.company_data['product_order_sales_price'].id},
])
expense_sol = self.sale_order.order_line.filtered(lambda sol: sol.product_id == self.company_data['product_order_sales_price'])
expense_profitability = self.project._get_expenses_profitability_items(False)
expense_profitability = project._get_expenses_profitability_items(False)
self.assertDictEqual(
expense_profitability.get('revenues', {}),
{'id': 'expenses', 'sequence': expense_sequence, 'invoiced': 0.0, 'to_invoice': expense_sol.untaxed_amount_to_invoice},
)
self.assertDictEqual(
expense_profitability['costs'],
{'id': 'expenses', 'sequence': expense_sequence, 'billed': -280.0, 'to_bill': 0.0},
{'id': 'expenses', 'sequence': expense_sequence, 'billed': expense.currency_id.round(-expense.untaxed_amount_currency), 'to_bill': 0.0},
)
self.assertDictEqual(
self.project._get_profitability_items(False),
project._get_profitability_items(False),
{
'revenues': {
'data': [expense_profitability['revenues']],
@ -83,6 +124,32 @@ class TestProjectSaleExpenseProfitability(TestProjectProfitabilityCommon, TestPr
}
)
self.post_expenses_with_wizard(expense_foreign.with_company(expense_foreign.company_id))
self.assertEqual(expense_foreign.state, 'posted')
expense_sol_foreign = so_foreign.order_line[0]
expense_profitability = project._get_expenses_profitability_items(False)
self.assertDictEqual(
expense_profitability.get('revenues', {}),
{'id': 'expenses', 'sequence': expense_sequence, 'invoiced': 0.0, 'to_invoice': expense_sol.untaxed_amount_to_invoice + expense_sol_foreign.untaxed_amount_to_invoice * 0.2},
)
self.assertDictEqual(
expense_profitability['costs'],
{'id': 'expenses', 'sequence': expense_sequence, 'billed': expense.currency_id.round(billed), 'to_bill': 0.0},
)
self.assertDictEqual(
project._get_profitability_items(False),
{
'revenues': {
'data': [expense_profitability['revenues']],
'total': {k: v for k, v in expense_profitability['revenues'].items() if k in ['to_invoice', 'invoiced']},
},
'costs': {
'data': [expense_profitability['costs']],
'total': {k: v for k, v in expense_profitability['costs'].items() if k in ['to_bill', 'billed']},
},
}
)
invoice = self.env['sale.advance.payment.inv'] \
.with_context({
'active_model': 'sale.order',
@ -92,34 +159,80 @@ class TestProjectSaleExpenseProfitability(TestProjectProfitabilityCommon, TestPr
})._create_invoices(self.sale_order)
invoice.action_post()
expense_profitability = self.project._get_expenses_profitability_items(False)
expense_profitability = project._get_expenses_profitability_items(False)
self.assertDictEqual(
expense_profitability.get('revenues', {}),
{'id': 'expenses', 'sequence': expense_sequence, 'invoiced': expense_sol.untaxed_amount_invoiced, 'to_invoice': 0.0},
{'id': 'expenses', 'sequence': expense_sequence, 'invoiced': expense_sol.untaxed_amount_invoiced, 'to_invoice': expense_sol_foreign.untaxed_amount_to_invoice * 0.2},
)
credit_note = invoice._reverse_moves()
credit_note.action_post()
expense_profitability = self.project._get_expenses_profitability_items(False)
expense_profitability = project._get_expenses_profitability_items(False)
self.assertDictEqual(
expense_profitability.get('revenues', {}),
{'id': 'expenses', 'sequence': expense_sequence, 'invoiced': 0.0, 'to_invoice': expense_sol.untaxed_amount_to_invoice},
{'id': 'expenses', 'sequence': expense_sequence, 'invoiced': 0.0, 'to_invoice': expense_sol.untaxed_amount_to_invoice + expense_sol_foreign.untaxed_amount_to_invoice * 0.2},
)
self.sale_order._action_cancel()
expense_profitability = self.project._get_expenses_profitability_items(False)
expense_profitability = project._get_expenses_profitability_items(False)
self.assertDictEqual(
expense_profitability.get('revenues', {}),
{'id': 'expenses', 'sequence': expense_sequence, 'invoiced': 0.0, 'to_invoice': expense_sol_foreign.untaxed_amount_to_invoice * 0.2},
)
self.assertDictEqual(
expense_profitability['costs'],
{'id': 'expenses', 'sequence': expense_sequence, 'billed': expense.currency_id.round(billed), 'to_bill': 0.0},
)
expense.account_move_id.button_draft()
expense.account_move_id.unlink()
expense_profitability = project._get_expenses_profitability_items(False)
self.assertDictEqual(
expense_profitability.get('revenues', {}),
{'id': 'expenses', 'sequence': expense_sequence, 'invoiced': 0.0, 'to_invoice': expense_sol_foreign.untaxed_amount_to_invoice * 0.2},
)
self.assertDictEqual(
expense_profitability.get('costs', {}),
{'id': 'expenses', 'sequence': expense_sequence, 'billed': expense.currency_id.round(-expense_foreign.untaxed_amount_currency * 0.2), 'to_bill': 0.0},
)
invoice = self.env['sale.advance.payment.inv'].with_context({
'active_model': 'sale.order',
'active_id': so_foreign.id,
}).create({
'advance_payment_method': 'delivered',
})._create_invoices(so_foreign)
invoice.action_post()
expense_profitability = project._get_expenses_profitability_items(False)
self.assertDictEqual(
expense_profitability.get('revenues', {}),
{'id': 'expenses', 'sequence': expense_sequence, 'invoiced': expense_sol_foreign.untaxed_amount_invoiced * 0.2, 'to_invoice': 0.0},
)
credit_note = invoice._reverse_moves()
credit_note.action_post()
expense_profitability = project._get_expenses_profitability_items(False)
self.assertDictEqual(
expense_profitability.get('revenues', {}),
{'id': 'expenses', 'sequence': expense_sequence, 'invoiced': 0.0, 'to_invoice': expense_sol_foreign.untaxed_amount_to_invoice * 0.2},
)
so_foreign._action_cancel()
expense_profitability = project._get_expenses_profitability_items(False)
self.assertDictEqual(
expense_profitability.get('revenues', {}),
{},
)
self.assertDictEqual(
expense_profitability['costs'],
{'id': 'expenses', 'sequence': expense_sequence, 'billed': -280.0, 'to_bill': 0.0},
{'id': 'expenses', 'sequence': expense_sequence, 'billed': expense.currency_id.round(-expense_foreign.untaxed_amount_currency * 0.2), 'to_bill': 0.0},
)
expense_sheet.refuse_sheet('Test Cancel Expense')
expense_profitability = self.project._get_expenses_profitability_items(False)
expense_foreign.account_move_id.button_draft()
expense_foreign.account_move_id.unlink()
expense_profitability = project._get_expenses_profitability_items(False)
self.assertDictEqual(
expense_profitability.get('revenues', {}),
{},
@ -165,20 +278,16 @@ class TestProjectSaleExpenseProfitability(TestProjectProfitabilityCommon, TestPr
sale_order.action_confirm()
project = sale_order.order_line.project_id
expense = self.env['hr.expense'].create({
expense = self.create_expenses({
'name': 'expense',
'product_id': self.company_data['product_order_cost'].id,
'unit_amount': self.company_data['product_order_cost'].list_price,
'employee_id': self.expense_employee.id,
'analytic_distribution': {project.analytic_account_id.id: 100},
'quantity': 1,
'analytic_distribution': {project.account_id.id: 100},
'sale_order_id': sale_order.id,
})
expense_sheet_vals_list = expense._get_default_expense_sheet_values()
expense_sheet = self.env['hr.expense.sheet'].create(expense_sheet_vals_list)
expense_sheet.action_submit_sheet()
expense_sheet.approve_expense_sheets()
expense_sheet.action_sheet_move_create()
expense.action_submit()
expense.action_approve()
self.post_expenses_with_wizard(expense)
invoice = sale_order._create_invoices()
invoice.action_post()
@ -204,28 +313,3 @@ class TestProjectSaleExpenseProfitability(TestProjectProfitabilityCommon, TestPr
'total': {'invoiced': expense_profitability['revenues']['invoiced'] + revenue_items_from_sol['total']['invoiced'], 'to_invoice': expense_profitability['revenues']['to_invoice'] + revenue_items_from_sol['total']['to_invoice']},
},
)
def test_project_profitability_multi_currency(self):
currency_rate = 0.5
other_currency = self.env['res.currency'].create({
'name': 'TEST',
'symbol': 'T',
'rate_ids': [(0, 0, {
'name': '2020-01-01',
'rate': currency_rate,
})],
})
amount_in_other_currency = 100
expense = self.env['hr.expense'].create({
'name': 'Expense in another currency',
'product_id': self.company_data['product_order_sales_price'].id,
'total_amount': amount_in_other_currency,
'employee_id': self.expense_employee.id,
'analytic_distribution': {self.project.analytic_account_id.id: 100},
'sale_order_id': self.sale_order.id,
'currency_id': other_currency.id,
})
self.check_project_profitability_before_creating_and_approving_expense_sheet(expense, self.project, self.project_profitability_items_empty)
expense_profitability = self.project._get_expenses_profitability_items(False)
self.assertTrue(expense_profitability['costs']['billed'] == - amount_in_other_currency / currency_rate)

View file

@ -0,0 +1,153 @@
# 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 Form, tagged
@tagged('post_install', '-at_install')
class TestSaleExpense(TestExpenseCommon, TestSaleCommon):
def test_analytic_account_expense_policy(self):
product_form = Form(self.product_a.product_tmpl_id)
product_form.can_be_expensed = True
product_form.expense_policy = 'cost'
product_form.can_be_expensed = False
self.product_a.product_tmpl_id = product_form.save()
project = self.env['project.project'].sudo().create({'name': 'SO Project'})
# Remove the analytic account auto-generated when creating a timesheetable project if it exists
project.account_id = False
so = self.env['sale.order'].create({
'partner_id': self.partner_a.id,
'order_line': [Command.create({
'name': self.product_a.name,
'product_id': self.product_a.id,
'product_uom_qty': 2,
'price_unit': self.product_a.list_price,
})],
'project_id': project.id,
})
so.action_confirm()
self.assertFalse(so.project_account_id)
def test_compute_analytic_distribution_expense(self):
""" Test that the analytic distibution is well computed when we link a sale order to an expense """
# Make sure the user has access to analytic accounting, otherwise the 'analytic_distribution' field will not appear
# in the view and will not be computed
self.env.user.write({'group_ids': [Command.link(self.env.ref('analytic.group_analytic_accounting').id)]})
# Set the expense policy to 'sales_price' to make the 'sale_order_id' field visible on the form view
self.product_c.expense_policy = 'sales_price'
self.analytic_plan_2 = self.env['account.analytic.plan'].create({'name': 'Other Plan Test'})
self.analytic_account_3 = self.env['account.analytic.account'].create({
'name': 'analytic_account_3',
'plan_id': self.analytic_plan_2.id,
})
# Project Will use another analytic plan than the product
project = self.env['project.project'].sudo().create({'name': 'SO Project'})
project.account_id = self.analytic_account_3
# Set an analytic distribution using account_1 on the product that will be used on the expense
self.env['account.analytic.distribution.model'].create([{
'product_id': self.product_c.id,
'analytic_distribution': {str(self.analytic_account_1.id): 100}
}])
so_values = {
'partner_id': self.partner_a.id,
'order_line': [Command.create({
'name': self.product_c.name,
'product_id': self.product_c.id,
'product_uom_qty': 2,
'price_unit': self.product_c.list_price,
})],
'project_id': project.id,
}
so1 = self.env['sale.order'].create(so_values)
expense = self.create_expenses({
'name': 'Expense Test',
'sale_order_id': so1.id,
'product_id': self.product_c.id,
})
self.assertEqual(
expense.analytic_distribution,
{str(self.analytic_account_1.id): 100, str(self.analytic_account_3.id): 100},
"The analytic distribution of the expense should be set to the account of the project and the one from the sale order.",
)
# Check that it default to the one from the sale order if the project has no analytic distribution
project.account_id = False
so2 = self.env['sale.order'].create(so_values)
# We use the form to trigger the onchange on sale_order_id, which adds the 'analytic_distribution' field to the fields to recompute
with Form(expense) as exp_form:
exp_form.sale_order_id = so2
self.assertEqual(
expense.analytic_distribution,
{str(self.analytic_account_1.id): 100},
"The analytic distribution of the expense should be the one from the sale order only",
)
# The analytic_account_2 has the same plan as the one from the sale order
project.account_id = self.analytic_account_2
so3 = self.env['sale.order'].create(so_values)
with Form(expense) as exp_form:
exp_form.sale_order_id = so3
self.assertEqual(
expense.analytic_distribution,
{str(self.analytic_account_2.id): 100},
"The analytic distribution of the expense should keep only the one from the project when the so and project share the same plan",
)
def test_change_product_expense_policy_analytic_distribution(self):
""" Test that analytic distribution is not recomputed when changing the expense policy of the expense product """
analytic_account_2 = self.analytic_account_1.copy()
self.product_a.expense_policy = 'sales_price'
distribution_model = self.env['account.analytic.distribution.model'].create({
'account_prefix': self.company_data['default_account_expense'].code,
'analytic_distribution': {self.analytic_account_1.id: 100.0},
})
expenses = self.env['hr.expense'].create([
{
'name': f'Expense {i}',
'employee_id': self.expense_employee.id,
'product_id': self.product_a.id,
} for i in range(1, 3)
])
self.assertRecordValues(expenses, [
{
'account_id': self.company_data['default_account_expense'].id,
'analytic_distribution': {str(self.analytic_account_1.id): 100.0},
},
{
'account_id': self.company_data['default_account_expense'].id,
'analytic_distribution': {str(self.analytic_account_1.id): 100.0},
},
])
distribution_model.analytic_distribution = {analytic_account_2.id: 100.0}
expenses |= self.env['hr.expense'].create({
'name': 'Expense 3',
'employee_id': self.expense_employee.id,
'product_id': self.product_a.id,
})
self.product_a.expense_policy = 'cost'
self.assertRecordValues(expenses, [
{
'analytic_distribution': {str(self.analytic_account_1.id): 100.0},
},
{
'analytic_distribution': {str(self.analytic_account_1.id): 100.0},
},
{
'analytic_distribution': {str(analytic_account_2.id): 100.0},
},
])

View file

@ -1,14 +1,16 @@
[project]
name = "odoo-bringout-oca-ocb-project_sale_expense"
version = "16.0.0"
description = "Project - Sale - Expense - Odoo addon"
description = "Project - Sale - Expense -
Odoo addon
"
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-ocb-sale_project>=16.0.0",
"odoo-bringout-oca-ocb-sale_expense>=16.0.0",
"odoo-bringout-oca-ocb-project_hr_expense>=16.0.0",
"odoo-bringout-oca-ocb-sale_project>=19.0.0",
"odoo-bringout-oca-ocb-sale_expense>=19.0.0",
"odoo-bringout-oca-ocb-project_hr_expense>=19.0.0",
"requests>=2.25.1"
]
readme = "README.md"
@ -18,7 +20,7 @@ classifiers = [
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Office/Business",
]