19.0 vanilla

This commit is contained in:
Ernad Husremovic 2026-03-25 12:00:11 +01:00
parent e1d89e11e3
commit a1f02d8cc7
225 changed files with 2335 additions and 775 deletions

View file

@ -13,7 +13,7 @@ msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-30 18:36+0000\n"
"PO-Revision-Date: 2026-03-06 17:45+0000\n"
"PO-Revision-Date: 2026-03-16 14:31+0000\n"
"Last-Translator: \"Malaz Siddig Elsayed Abuidris (msea)\" <msea@odoo.com>\n"
"Language-Team: Arabic <https://translate.odoo.com/projects/odoo-19/"
"hr_work_entry/ar/>\n"
@ -23,7 +23,7 @@ msgstr ""
"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.16.1\n"
"X-Generator: Weblate 5.16.2\n"
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_employee__work_entry_source
@ -114,13 +114,13 @@ msgstr "إضافة"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__is_extra_hours
msgid "Added to Monthly Pay"
msgstr ""
msgstr "مضاف إلى الراتب الشهري"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_calendar_multi_create_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Additional Description..."
msgstr ""
msgstr "وصف إضافي..."
#. module: hr_work_entry
#: model:hr.work.entry.type,name:hr_work_entry.l10n_be_work_entry_type_additional_paid
@ -315,7 +315,7 @@ msgstr "Disability due to illness (IMSS)"
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__display_code
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__display_code
msgid "Display Code"
msgstr ""
msgstr "عرض الكود"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_employee__display_name
@ -349,7 +349,7 @@ msgstr "المدة"
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
msgid "Duration must be positive and cannot exceed 24 hours."
msgstr ""
msgstr "يجب أن تكون المدة عبارة عن قيمة موجبة ولا تتجاوز 24 ساعة."
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_regeneration_wizard__earliest_available_date_message
@ -374,7 +374,7 @@ msgstr "الإجازة التعليمية"
#. module: hr_work_entry
#: model:hr.work.entry.type,name:hr_work_entry.l10n_sa_work_entry_type_emergency
msgid "Emergency Leave"
msgstr ""
msgstr "إجازة طارئة"
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_employee
@ -392,7 +392,7 @@ msgstr "عقد الموظف"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__version_id
msgid "Employee Record"
msgstr ""
msgstr "سجل الموظف"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_regeneration_wizard__employee_ids
@ -543,6 +543,7 @@ msgstr ""
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__amount_rate
msgid "If you want the hours should be paid double, the rate should be 200%."
msgstr ""
"إذا كنت ترغب في أن يتم دفع أجر مضاعف عن الساعات، فيجب أن يكون المعدل 200%."
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__conflict
@ -552,7 +553,7 @@ msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__validated
msgid "In Payslip"
msgstr ""
msgstr "في كشوف الرواتب"
#. module: hr_work_entry
#. odoo-python

View file

@ -9,12 +9,13 @@
# "Dylan Kiss (dyki)" <dyki@odoo.com>, 2025.
# Weblate <noreply-mt-weblate@weblate.org>, 2025.
# "Noemi Pla Garcia (nopl)" <nopl@odoo.com>, 2025, 2026.
# David Domínguez <david@longosos.com>, 2026.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-30 18:36+0000\n"
"PO-Revision-Date: 2026-02-16 10:59+0000\n"
"PO-Revision-Date: 2026-03-14 09:33+0000\n"
"Last-Translator: \"Noemi Pla Garcia (nopl)\" <nopl@odoo.com>\n"
"Language-Team: Spanish <https://translate.odoo.com/projects/odoo-19/"
"hr_work_entry/es/>\n"
@ -22,9 +23,9 @@ msgstr ""
"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 % 1000000 == 0)"
" ? 1 : 2);\n"
"X-Generator: Weblate 5.14.3\n"
"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == "
"0) ? 1 : 2);\n"
"X-Generator: Weblate 5.16.2\n"
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_employee__work_entry_source
@ -1273,7 +1274,7 @@ msgstr "Motivo injustificado"
#. module: hr_work_entry
#: model:hr.work.entry.type,name:hr_work_entry.work_entry_type_unpaid_leave
msgid "Unpaid"
msgstr "No retribuido"
msgstr "No remunerado"
#. module: hr_work_entry
#: model:hr.work.entry.type,name:hr_work_entry.l10n_ch_swissdec_unpaid_wt

View file

@ -13,7 +13,7 @@ msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-30 18:36+0000\n"
"PO-Revision-Date: 2026-01-07 11:18+0000\n"
"PO-Revision-Date: 2026-03-14 09:33+0000\n"
"Last-Translator: Bren Driesen <brdri@odoo.com>\n"
"Language-Team: Dutch <https://translate.odoo.com/projects/odoo-19/"
"hr_work_entry/nl/>\n"
@ -22,7 +22,7 @@ msgstr ""
"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"
"X-Generator: Weblate 5.16.2\n"
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_employee__work_entry_source
@ -40,15 +40,14 @@ msgid ""
"planning. (requires Planning app)\n"
" "
msgstr ""
"\n"
" Bepaalt de bron voor het genereren van werkboekingen\n"
"\n"
" Werkschema: Werkboekingen worden gegenereerd voor onderstaande "
"werkuren.\n"
" Aanwezigheden: Werkboekingen worden gegenereerd op basis van de "
"aanwezigheden van werknemers (Aanwezigheden-app vereist)\n"
"aanwezigheden van werknemers (Aanwezigheid-app vereist)\n"
" Planning: Werkboekingen worden gegenereerd op basis van de planning "
"van werknemers planning (Planning-app vereist)\n"
"van werknemers (Planning-app vereist)\n"
" "
#. module: hr_work_entry

View file

@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: Odoo Server saas~18.4\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-30 18:36+0000\n"
"PO-Revision-Date: 2026-03-06 17:49+0000\n"
"PO-Revision-Date: 2026-03-20 13:05+0000\n"
"Last-Translator: Hanna Kharraziha <hakha@odoo.com>\n"
"Language-Team: Swedish <https://translate.odoo.com/projects/odoo-19/"
"hr_work_entry/sv/>\n"
@ -19,7 +19,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.16.1\n"
"X-Generator: Weblate 5.16.2\n"
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_employee__work_entry_source
@ -1141,8 +1141,8 @@ msgid ""
"The ISO country code in two chars. \n"
"You can use this field for quick search."
msgstr ""
"ISO-landskoden med två tecken.\n"
"Du kan använda det här fältet för snabbsökning."
"ISO-kod med två tecken.\n"
"Fältet används för snabbsökning."
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form

View file

@ -42,9 +42,13 @@ export class WorkEntryCalendarModel extends CalendarModel {
}
);
if (userFavoritesWorkEntriesIds.length) {
const typeIds = userFavoritesWorkEntriesIds
.map((r) => r.work_entry_type_id?.[0])
.filter(Boolean);
const uniqueTypeIds = [...new Set(typeIds)];
this.userFavoritesWorkEntries = await this.orm.read(
"hr.work.entry.type",
userFavoritesWorkEntriesIds.map((r) => r.work_entry_type_id?.[0]).filter(Boolean),
uniqueTypeIds,
["display_name", "display_code", "color"]
);
this.userFavoritesWorkEntries = this.userFavoritesWorkEntries.sort((a, b) =>

View file

@ -77,3 +77,39 @@ test("should use default_employee_id from context in work entry", async () => {
work_entry_type_id: workEntryTypeId,
});
});
test("calendar multi-selection quick buttons deduplicate favorites", async () => {
const { env } = await makeMockServer();
const [type] = env["hr.work.entry.type"].create([
{
name: "MyType",
},
]);
env["hr.work.entry"].create([
{
name: "e1",
employee_id: 100,
work_entry_type_id: type,
date: "2025-01-01",
create_date: "2025-01-01",
},
{
name: "e2",
employee_id: 100,
work_entry_type_id: type,
date: "2025-01-02",
create_date: "2025-01-02",
},
]);
const calendar = await mountView({
type: "calendar",
resModel: "hr.work.entry",
});
const controller = getCalendarController(calendar);
await controller.model._fetchUserFavoritesWorkEntries();
//ensure favorites deduplication happened
expect(controller.model.userFavoritesWorkEntries).toHaveLength(1, {
message: "calendar model favorites list must contain just one type",
});
});