19.0 vanilla

This commit is contained in:
Ernad Husremovic 2026-03-09 09:31:00 +01:00
parent a1137a1456
commit e1d89e11e3
2789 changed files with 1093187 additions and 605897 deletions

View file

@ -10,35 +10,14 @@ pip install odoo-bringout-oca-ocb-hr_work_entry
## Dependencies
This addon depends on:
- hr
## Manifest Information
- **Name**: Work Entries
- **Version**: N/A
- **Category**: Human Resources/Employees
- **License**: LGPL-3
- **Installable**: True
## Source
Based on [OCA/OCB](https://github.com/OCA/OCB) branch 16.0, addon `hr_work_entry`.
- Repository: https://github.com/OCA/OCB
- Branch: 19.0
- Path: addons/hr_work_entry
## 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
- 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

@ -1 +1,4 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import models
from . import wizard

View file

@ -1,4 +1,3 @@
#-*- coding:utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
{
@ -13,15 +12,25 @@
'data': [
'security/hr_work_entry_security.xml',
'security/ir.model.access.csv',
'data/hr_work_entry_data.xml',
'data/hr_work_entry_type_data.xml',
'data/ir_cron_data.xml',
'views/hr_work_entry_views.xml',
'views/hr_employee_views.xml',
'views/hr_contract_template_views.xml',
'views/resource_calendar_views.xml',
'wizard/hr_work_entry_regeneration_wizard_views.xml',
],
'demo': [
'data/hr_work_entry_demo.xml',
],
'assets': {
'web.assets_backend': [
'hr_work_entry/static/**/*',
'hr_work_entry/static/src/**/*',
],
'web.assets_unit_tests': [
'hr_work_entry/static/tests/**/*',
],
},
'author': 'Odoo S.A.',
'license': 'LGPL-3',
}

View file

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="0">
<!-- Work Entry Type -->
<record id="work_entry_type_attendance" model="hr.work.entry.type">
<field name="name">Attendance</field>
<field name="color">0</field>
<field name="code">WORK100</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="work_entry_type_extra_hours" model="hr.work.entry.type">
<field name="name">Extra Hours</field>
<field name="code">WORK300</field>
<field name="color">8</field>
</record>
<record id="work_entry_type_long_leave" model="hr.work.entry.type">
<field name="name">Long Term Time Off</field>
<field name="code">LEAVE200</field>
<field name="color">4</field>
</record>
</odoo>

View file

@ -0,0 +1,930 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo><data noupdate="1">
<record id="work_entry_type_attendance" model="hr.work.entry.type">
<field name="name">Attendance</field>
<field name="color">0</field>
<field name="display_code">A</field>
<field name="code">WORK100</field>
<field name="is_leave">False</field>
</record>
<record id="work_entry_type_overtime" model="hr.work.entry.type">
<field name="name">Overtime Hours</field>
<field name="color">4</field>
<field name="display_code">OT</field>
<field name="code">OVERTIME</field>
</record>
<record id="hr_work_entry_type_out_of_contract" model="hr.work.entry.type">
<field name="name">Out of Contract</field>
<field name="color">0</field>
<field name="display_code">OoC</field>
<field name="code">OUT</field>
</record>
<record id="work_entry_type_leave" model="hr.work.entry.type">
<field name="name">Generic Time Off</field>
<field name="display_code">GTO</field>
<field name="code">LEAVE100</field>
<field name="color">3</field>
<field name="is_leave">True</field>
</record>
<record id="work_entry_type_compensatory" model="hr.work.entry.type">
<field name="name">Compensatory Time Off</field>
<field name="display_code">CTO</field>
<field name="code">LEAVE105</field>
<field name="color">3</field>
<field name="is_leave">True</field>
</record>
<record id="work_entry_type_home_working" model="hr.work.entry.type">
<field name="name">Home Working</field>
<field name="display_code">HW</field>
<field name="code">WORK110</field>
<field name="color">2</field>
<field name="is_leave">True</field>
</record>
<record id="work_entry_type_unpaid_leave" model="hr.work.entry.type">
<field name="name">Unpaid</field>
<field name="color">5</field>
<field name="display_code">UN</field>
<field name="code">LEAVE90</field>
<field name="is_leave">True</field>
</record>
<record id="work_entry_type_sick_leave" model="hr.work.entry.type">
<field name="name">Sick Time Off</field>
<field name="display_code">STO</field>
<field name="code">LEAVE110</field>
<field name="color">5</field>
<field name="is_leave">True</field>
</record>
<record id="work_entry_type_legal_leave" model="hr.work.entry.type">
<field name="name">Paid Time Off</field>
<field name="display_code">PTO</field>
<field name="code">LEAVE120</field>
<field name="color">5</field>
<field name="is_leave">True</field>
</record>
<!-- AE : United Arab Emirates -->
<record id="uae_sick_leave_50_entry_type" model="hr.work.entry.type">
<field name="name">Sick Leave 50</field>
<field name="code">AESICKLEAVE50</field>
<field name="country_id" ref="base.ae"/>
</record>
<record id="uae_sick_leave_0_entry_type" model="hr.work.entry.type">
<field name="name">Sick Leave 0</field>
<field name="code">AESICKLEAVE0</field>
<field name="country_id" ref="base.ae"/>
</record>
<record id="uae_public_holiday_entry_type" model="hr.work.entry.type">
<field name="name">Public Holiday</field>
<field name="code">AEPUBLICH</field>
<field name="country_id" ref="base.ae"/>
</record>
<!-- AU : Australia -->
<!-- Time Off Entries -->
<!-- We need a unique work entry type for each time off -->
<record id="l10n_au_work_entry_type_paid_time_off" model="hr.work.entry.type">
<field name="name">Paid Time Off</field>
<field name="color">5</field>
<field name="code">AU.PT</field>
<field name="country_id" ref="base.au"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_au_work_entry_type_long_service_leave" model="hr.work.entry.type">
<field name="name">Long Service Leave</field>
<field name="color">5</field>
<field name="code">AU.LS</field>
<field name="country_id" ref="base.au"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_au_work_entry_type_personal_leave" model="hr.work.entry.type">
<field name="name">Personal Leave</field>
<field name="color">5</field>
<field name="code">AU.PL</field>
<field name="country_id" ref="base.au"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_au_work_entry_type_other" model="hr.work.entry.type">
<field name="name">Other Paid Leave</field>
<field name="color">5</field>
<field name="code">AU.O</field>
<field name="country_id" ref="base.au"/>
</record>
<record id="l10n_au_work_entry_type_parental" model="hr.work.entry.type">
<field name="name">Paid Parental Leave</field>
<field name="color">5</field>
<field name="code">AU.P</field>
<field name="country_id" ref="base.au"/>
</record>
<record id="l10n_au_work_entry_type_compensation" model="hr.work.entry.type">
<field name="name">Workers Compensation</field>
<field name="color">5</field>
<field name="code">AU.W</field>
<field name="country_id" ref="base.au"/>
</record>
<record id="l10n_au_work_entry_type_defence" model="hr.work.entry.type">
<field name="name">Ancillary and Defence Leave</field>
<field name="color">5</field>
<field name="code">AU.A</field>
<field name="country_id" ref="base.au"/>
</record>
<record id="l10n_au_work_entry_type_cash_out" model="hr.work.entry.type">
<field name="name">Cash Out of Leave in Service</field>
<field name="color">5</field>
<field name="code">AU.C</field>
<field name="country_id" ref="base.au"/>
</record>
<record id="l10n_au_work_entry_type_termination" model="hr.work.entry.type">
<field name="name">Unused Leave on Termination</field>
<field name="color">5</field>
<field name="code">AU.U</field>
<field name="country_id" ref="base.au"/>
</record>
<!-- Overtime Entries -->
<record id="l10n_au_work_entry_type_overtime_regular" model="hr.work.entry.type">
<field name="name">Overtime: Regular</field>
<field name="color">4</field>
<field name="code">l10n_au_overtime_regular</field>
<field name="country_id" ref="base.au"/>
</record>
<record id="l10n_au_work_entry_type_overtime_saturday" model="hr.work.entry.type">
<field name="name">Overtime: Saturday</field>
<field name="color">4</field>
<field name="code">l10n_au_overtime_saturday</field>
<field name="country_id" ref="base.au"/>
</record>
<record id="l10n_au_work_entry_type_overtime_sunday" model="hr.work.entry.type">
<field name="name">Overtime: Sunday</field>
<field name="color">4</field>
<field name="code">l10n_au_overtime_sunday</field>
<field name="country_id" ref="base.au"/>
</record>
<record id="l10n_au_work_entry_type_overtime_pto" model="hr.work.entry.type">
<field name="name">Overtime: Public Time Off</field>
<field name="color">4</field>
<field name="code">l10n_au_overtime_pto</field>
<field name="country_id" ref="base.au"/>
</record>
<record id="l10n_au_work_entry_type_overtime_saturday_pto" model="hr.work.entry.type">
<field name="name">Overtime: Saturday &amp; Public Time Off</field>
<field name="color">4</field>
<field name="code">l10n_au_overtime_saturday_pto</field>
<field name="country_id" ref="base.au"/>
</record>
<record id="l10n_au_work_entry_type_overtime_sunday_pto" model="hr.work.entry.type">
<field name="name">Overtime: Sunday &amp; Public Time Off</field>
<field name="color">4</field>
<field name="code">l10n_au_overtime_sunday_pto</field>
<field name="country_id" ref="base.au"/>
</record>
<!-- BE : Belgium -->
<record id="l10n_be_work_entry_type_bank_holiday" model="hr.work.entry.type">
<field name="name">Public Holiday</field>
<field name="code">LEAVE500</field>
<field name="color">3</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_solicitation_time_off" model="hr.work.entry.type">
<field name="name">Solicitation Time Off</field>
<field name="code">LEAVE600</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_unjustified_reason" model="hr.work.entry.type">
<field name="name">Unjustified Reason</field>
<field name="code">LEAVE700</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_small_unemployment" model="hr.work.entry.type">
<field name="name">Small Unemployment (Brief Holiday)</field>
<field name="code">LEAVE205</field> <!-- YTI: 1 as it is paid, would be 70 otherwise -->
<field name="color">5</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_economic_unemployment" model="hr.work.entry.type">
<field name="name">Economic Unemployment</field>
<field name="code">LEAVE6665</field>
<field name="color">5</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_corona" model="hr.work.entry.type">
<field name="name">Corona Unemployment</field>
<field name="code">LEAVE6666</field>
<field name="color">5</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_maternity" model="hr.work.entry.type">
<field name="name">Maternity Time Off</field>
<field name="code">LEAVE210</field>
<field name="color">5</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_paternity_company" model="hr.work.entry.type">
<field name="name">Paternity Time Off (Paid by Company)</field>
<field name="code">LEAVE220</field>
<field name="color">5</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_paternity_legal" model="hr.work.entry.type">
<field name="name">Paternity Time Off (Legal)</field>
<field name="code">LEAVE230</field>
<field name="color">5</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_unpredictable" model="hr.work.entry.type">
<field name="name">Unpredictable Reason</field>
<field name="code">LEAVE250</field>
<field name="color">5</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_training" model="hr.work.entry.type">
<field name="name">Training</field>
<field name="code">LEAVE265</field>
<field name="color">5</field>
<field name="country_id" ref="base.be"/>
</record>
<record id="l10n_be_work_entry_type_training_time_off" model="hr.work.entry.type">
<field name="name">Educational Time Off</field>
<field name="code">LEAVE260</field>
<field name="color">5</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_flemish_training_time_off" model="hr.work.entry.type">
<field name="name">Flemish Educational Time Off</field>
<field name="code">LEAVE261</field>
<field name="color">5</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_long_sick" model="hr.work.entry.type">
<field name="name">Long Term Sick</field>
<field name="code">LEAVE280</field>
<field name="color">5</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_breast_feeding" model="hr.work.entry.type">
<field name="name">Breastfeeding Break</field>
<field name="code">LEAVE290</field>
<field name="color">5</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_medical_assistance" model="hr.work.entry.type">
<field name="name">Medical Assistance</field>
<field name="code">MEDIC01</field>
<field name="color">5</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_youth_time_off" model="hr.work.entry.type">
<field name="name">Youth Time Off</field>
<field name="code">YOUNG01</field>
<field name="color">5</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_recovery_additional" model="hr.work.entry.type">
<field name="name">Recovery Additional Time</field>
<field name="code">LEAVE295</field>
<field name="color">5</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_additional_paid" model="hr.work.entry.type">
<field name="name">Additional Time (Paid)</field>
<field name="code">LEAVE297</field>
<field name="color">5</field>
<field name="country_id" ref="base.be"/>
</record>
<record id="l10n_be_work_entry_type_notice" model="hr.work.entry.type">
<field name="name">Notice (Unprovided)</field>
<field name="code">LEAVE211</field>
<field name="color">5</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_phc" model="hr.work.entry.type">
<field name="name">Public Holiday Compensation</field>
<field name="code">PHC1</field>
<field name="color">3</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_extra_legal" model="hr.work.entry.type">
<field name="name">Extra Legal Time Off</field>
<field name="code">LEAVE213</field>
<field name="color">5</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_part_sick" model="hr.work.entry.type">
<field name="name">Sick Time Off (Without Guaranteed Salary)</field>
<field name="code">LEAVE214</field>
<field name="color">5</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_recovery" model="hr.work.entry.type">
<field name="name">Recovery Bank Holiday</field>
<field name="code">LEAVE215</field>
<field name="color">5</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_european" model="hr.work.entry.type">
<field name="name">European Time Off</field>
<field name="code">LEAVE216</field>
<field name="color">5</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_credit_time" model="hr.work.entry.type">
<field name="name">Credit Time</field>
<field name="code">LEAVE300</field>
<field name="color">8</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_parental_time_off" model="hr.work.entry.type">
<field name="name">Parental Time Off</field>
<field name="code">LEAVE301</field>
<field name="color">8</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_simple_holiday_pay_variable_salary" model="hr.work.entry.type">
<field name="name">Simple Holiday Pay - Variable Salary</field>
<field name="code">LEAVE1731</field>
<field name="color">3</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_work_accident" model="hr.work.entry.type">
<field name="name">Work Accident</field>
<field name="code">LEAVE115</field>
<field name="color">5</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_partial_incapacity" model="hr.work.entry.type">
<field name="name">Partial Incapacity (due to illness)</field>
<field name="code">LEAVE281</field>
<field name="color">4</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_strike" model="hr.work.entry.type">
<field name="name">Strike</field>
<field name="code">LEAVE251</field>
<field name="color">5</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_be_work_entry_type_small_unemployment_birth" model="hr.work.entry.type">
<field name="name">Brief Holiday (Birth)</field>
<field name="code">LEAVE206</field>
<field name="color">5</field>
<field name="country_id" ref="base.be"/>
<field name="is_leave" eval="True"/>
</record>
<!-- CH : Switzerland -->
<record id="l10n_ch_work_entry_type_bank_holiday" model="hr.work.entry.type">
<field name="name">Public Holiday</field>
<field name="code">CHPUBHOL</field>
<field name="color">3</field>
<field name="country_id" ref="base.ch"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_ch_swissdec_monthly_wt" model="hr.work.entry.type">
<field name="name">Monthly Salary</field>
<field name="code">CH_1000</field>
<field name="sequence">0</field>
<field name="color">5</field>
<field name="country_id" ref="base.ch"/>
<field name="is_leave" eval="False"/>
</record>
<record id="l10n_ch_swissdec_hourly_wt" model="hr.work.entry.type">
<field name="name">Hourly Salary</field>
<field name="code">CH_1005</field>
<field name="sequence">5</field>
<field name="color">5</field>
<field name="country_id" ref="base.ch"/>
<field name="is_leave" eval="False"/>
</record>
<record id="l10n_ch_swissdec_lesson_wt" model="hr.work.entry.type">
<field name="name">Lesson Salary</field>
<field name="code">CH_1006</field>
<field name="sequence">10</field>
<field name="color">5</field>
<field name="country_id" ref="base.ch"/>
<field name="is_leave" eval="False"/>
</record>
<record id="l10n_ch_swissdec_overtime_wt" model="hr.work.entry.type">
<field name="name">Overtime 100%</field>
<field name="code">CH_1065</field>
<field name="sequence">6</field>
<field name="color">5</field>
<field name="country_id" ref="base.ch"/>
<field name="is_leave" eval="False"/>
</record>
<record id="l10n_ch_swissdec_overtime_125_wt" model="hr.work.entry.type">
<field name="name">Overtime 125%</field>
<field name="code">CH_1061</field>
<field name="sequence">7</field>
<field name="color">5</field>
<field name="country_id" ref="base.ch"/>
<field name="is_leave" eval="False"/>
</record>
<record id="l10n_ch_swissdec_unpaid_wt" model="hr.work.entry.type">
<field name="name">Unpaid Salary</field>
<field name="code">CH_UNPAID</field>
<field name="sequence">15</field>
<field name="color">5</field>
<field name="country_id" ref="base.ch"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_ch_swissdec_illness_wt" model="hr.work.entry.type">
<field name="name">Salary in case of Illness</field>
<field name="code">CH_ILLNESS</field>
<field name="sequence">20</field>
<field name="color">5</field>
<field name="country_id" ref="base.ch"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_ch_swissdec_accident_wt" model="hr.work.entry.type">
<field name="name">Salary in case of Accident</field>
<field name="code">CH_ACCIDENT</field>
<field name="sequence">25</field>
<field name="color">5</field>
<field name="country_id" ref="base.ch"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_ch_swissdec_maternity_wt" model="hr.work.entry.type">
<field name="name">Salary in case of Maternity / Paternity Leave</field>
<field name="code">CH_MATERNITY</field>
<field name="sequence">30</field>
<field name="color">5</field>
<field name="country_id" ref="base.ch"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_ch_swissdec_military_wt" model="hr.work.entry.type">
<field name="name">Salary in case of Military Leave</field>
<field name="code">CH_MILITARY</field>
<field name="sequence">35</field>
<field name="color">5</field>
<field name="country_id" ref="base.ch"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_ch_swissdec_illness_wt_hourly" model="hr.work.entry.type">
<field name="name">Hourly Salary in case of Illness</field>
<field name="code">CH_ILLNESS_HOURLY</field>
<field name="sequence">20</field>
<field name="color">5</field>
<field name="country_id" ref="base.ch"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_ch_swissdec_accident_wt_hourly" model="hr.work.entry.type">
<field name="name">Hourly Salary in case of Accident</field>
<field name="code">CH_ACCIDENT_HOURLY</field>
<field name="sequence">25</field>
<field name="color">5</field>
<field name="country_id" ref="base.ch"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_ch_swissdec_maternity_wt_hourly" model="hr.work.entry.type">
<field name="name">Hourly Salary in case of Maternity / Paternity Leave</field>
<field name="code">CH_MATERNITY_HOURLY</field>
<field name="sequence">30</field>
<field name="color">5</field>
<field name="country_id" ref="base.ch"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_ch_swissdec_military_wt_hourly" model="hr.work.entry.type">
<field name="name">Hourly Salary in case of Military Leave</field>
<field name="code">CH_MILITARY_HOURLY</field>
<field name="sequence">35</field>
<field name="color">5</field>
<field name="country_id" ref="base.ch"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_ch_swissdec_interruption_wt" model="hr.work.entry.type">
<field name="name">Interruption of Work</field>
<field name="code">CH_Interruption</field>
<field name="sequence">40</field>
<field name="color">5</field>
<field name="country_id" ref="base.ch"/>
<field name="is_leave" eval="True"/>
</record>
<!-- EG: Egypt -->
<record id="l10n_eg_work_entry_type_paid_sick_leave" model="hr.work.entry.type">
<field name="name">Paid Sick Time off</field>
<field name="code">EGSICKLEAVE100</field>
<field name="country_id" ref="base.eg"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_eg_work_entry_type_sick_leave_75" model="hr.work.entry.type">
<field name="name">Sick Time off (75% Paid)</field>
<field name="code">EGSICKLEAVE75</field>
<field name="country_id" ref="base.eg"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_eg_work_entry_type_sick_leave_unpaid" model="hr.work.entry.type">
<field name="name">Sick Time off (Unpaid)</field>
<field name="code">EGSICKLEAVE0</field>
<field name="country_id" ref="base.eg"/>
<field name="is_leave" eval="True"/>
</record>
<!-- HK : Hong Kong -->
<record id="l10n_hk_work_entry_type_sick_leave_80" model="hr.work.entry.type">
<field name="name">Sick Leave 80%</field>
<field name="code">HKLEAVE111</field>
<field name="color">6</field>
<field name="country_id" ref="base.hk"/>
<field name="is_leave" eval="True"/>
<field name="amount_rate">0.8</field>
</record>
<record id="l10n_hk_work_entry_type_compassionate_leave" model="hr.work.entry.type">
<field name="name">Compassionate Leave</field>
<field name="code">HKLEAVE130</field>
<field name="color">5</field>
<field name="country_id" ref="base.hk"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_hk_work_entry_type_marriage_leave" model="hr.work.entry.type">
<field name="name">Marriage Leave</field>
<field name="code">HKLEAVE140</field>
<field name="color">5</field>
<field name="country_id" ref="base.hk"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_hk_work_entry_type_examination_leave" model="hr.work.entry.type">
<field name="name">Examination Leave</field>
<field name="code">HKLEAVE150</field>
<field name="color">5</field>
<field name="country_id" ref="base.hk"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_hk_work_entry_type_maternity_leave" model="hr.work.entry.type">
<field name="name">Maternity Leave</field>
<field name="code">HKLEAVE210</field>
<field name="color">5</field>
<field name="country_id" ref="base.hk"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_hk_work_entry_type_maternity_leave_80" model="hr.work.entry.type">
<field name="name">Maternity Leave 80%</field>
<field name="code">HKLEAVE211</field>
<field name="color">6</field>
<field name="country_id" ref="base.hk"/>
<field name="is_leave" eval="True"/>
<field name="amount_rate">0.8</field>
</record>
<record id="l10n_hk_work_entry_type_paternity_leave" model="hr.work.entry.type">
<field name="name">Paternity Leave</field>
<field name="code">HKLEAVE220</field>
<field name="color">5</field>
<field name="country_id" ref="base.hk"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_hk_work_entry_type_paternity_leave_80" model="hr.work.entry.type">
<field name="name">Paternity Leave 80%</field>
<field name="code">HKLEAVE221</field>
<field name="color">6</field>
<field name="country_id" ref="base.hk"/>
<field name="is_leave" eval="True"/>
<field name="amount_rate">0.8</field>
</record>
<record id="l10n_hk_work_entry_type_statutory_holiday" model="hr.work.entry.type">
<field name="name">Statutory Holiday</field>
<field name="code">HKLEAVE500</field>
<field name="color">5</field>
<field name="country_id" ref="base.hk"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_hk_work_entry_type_public_holiday" model="hr.work.entry.type">
<field name="name">Public Holiday</field>
<field name="code">HKLEAVE510</field>
<field name="color">5</field>
<field name="country_id" ref="base.hk"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_hk_work_entry_type_weekend" model="hr.work.entry.type">
<field name="name">Weekend</field>
<field name="code">HKLEAVE600</field>
<field name="color">10</field>
<field name="country_id" ref="base.hk"/>
<field name="is_leave" eval="True"/>
</record>
<!-- ID : Indonesia -->
<record id="l10n_id_work_entry_type_bereavement_leave" model="hr.work.entry.type">
<field name="name">Bereavement Leave</field>
<field name="code">IDLEAVE100</field>
<field name="color">5</field>
<field name="country_id" ref="base.id"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_id_work_entry_type_marriage_leave" model="hr.work.entry.type">
<field name="name">Marriage Leave</field>
<field name="code">IDLEAVE110</field>
<field name="color">5</field>
<field name="country_id" ref="base.id"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_id_work_entry_type_maternity_leave" model="hr.work.entry.type">
<field name="name">Maternity Leave</field>
<field name="code">IDLEAVE120</field>
<field name="color">5</field>
<field name="country_id" ref="base.id"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_id_work_entry_type_paternity_leave" model="hr.work.entry.type">
<field name="name">Paternity Leave</field>
<field name="code">IDLEAVE130</field>
<field name="color">5</field>
<field name="country_id" ref="base.id"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_id_work_entry_type_public_holiday" model="hr.work.entry.type">
<field name="name">Public Holiday</field>
<field name="code">IDLEAVE140</field>
<field name="color">5</field>
<field name="country_id" ref="base.id"/>
<field name="is_leave" eval="True"/>
</record>
<!-- JO : Jordan -->
<record id="l10n_jo_work_entry_type_sick_leave_unpaid" model="hr.work.entry.type">
<field name="name">Sick Leave (Unpaid)</field>
<field name="color">7</field>
<field name="code">SICKLEAVE0</field>
<field name="is_leave" eval="True"/>
<field name="country_id" ref="base.jo"/>
<field name="amount_rate">1</field> <!-- Unpaid, but treated in a separate rule -->
</record>
<!-- LU : Luxemburg -->
<record id="l10n_lu_work_entry_type_situational_unemployment" model="hr.work.entry.type">
<field name="name">Situational Unemployment</field>
<field name="color">5</field>
<field name="code">LEAVE400</field>
<field name="country_id" ref="base.lu"/>
<field name="is_leave" eval="True"/>
</record>
<!-- MX : Mexico -->
<record id="l10n_mx_work_entry_type_work_risk_imss" model="hr.work.entry.type">
<field name="name">Work risk (IMSS)</field>
<field name="color">5</field>
<field name="code">LEAVE1000</field>
<field name="country_id" ref="base.mx"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_mx_work_entry_type_maternity_imss" model="hr.work.entry.type">
<field name="name">Maternity (IMSS)</field>
<field name="color">5</field>
<field name="code">LEAVE1100</field>
<field name="country_id" ref="base.mx"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_mx_work_entry_type_disability_due_to_illness_imss" model="hr.work.entry.type">
<field name="name">Disability due to illness (IMSS)</field>
<field name="color">5</field>
<field name="code">LEAVE1200</field>
<field name="country_id" ref="base.mx"/>
<field name="is_leave" eval="True"/>
</record>
<record id="l10n_mx_work_entry_type_care_children_with_cancer_imss" model="hr.work.entry.type">
<field name="name">Medical Leave for Care of Children Diagnosed with Cancer (IMSS)</field>
<field name="color">5</field>
<field name="code">LEAVE1300</field>
<field name="country_id" ref="base.mx"/>
<field name="is_leave" eval="True"/>
</record>
<!-- PL : Poland -->
<record id="l10n_pl_work_entry_type_sick_leave" model="hr.work.entry.type">
<field name="name">Sick Time Off (Paid at 80%)</field>
<field name="color">4</field>
<field name="code">PLSICK3166</field>
<field name="country_id" ref="base.pl"/>
<field name="is_leave" eval="True"/>
<field name="amount_rate">0.8</field>
</record>
<!-- SA : Saudi Arabia -->
<record id="l10n_sa_work_entry_type_sick_leave_100" model="hr.work.entry.type">
<field name="name">Sick Leave (100% Paid)</field>
<field name="code">SASICKLEAVE100</field>
<field name="is_leave" eval="True"/>
<field name="country_id" ref="base.sa"/>
</record>
<record id="l10n_sa_work_entry_type_sick_leave_75" model="hr.work.entry.type">
<field name="name">Sick Leave (75% Paid)</field>
<field name="code">SASICKLEAVE75</field>
<field name="is_leave" eval="True"/>
<field name="country_id" ref="base.sa"/>
<field name="amount_rate">0.75</field>
</record>
<record id="l10n_sa_work_entry_type_sick_leave_0" model="hr.work.entry.type">
<field name="name">Sick Leave (Unpaid)</field>
<field name="code">SASICKLEAVE0</field>
<field name="is_leave" eval="True"/>
<field name="country_id" ref="base.sa"/>
<field name="amount_rate">0</field>
</record>
<record id="l10n_sa_work_entry_type_maternity" model="hr.work.entry.type">
<field name="name">Maternity Leave</field>
<field name="code">SAMATERNITY</field>
<field name="is_leave" eval="True"/>
<field name="country_id" ref="base.sa"/>
</record>
<record id="l10n_sa_work_entry_type_emergency" model="hr.work.entry.type">
<field name="name">Emergency Leave</field>
<field name="code">SAEMERGENCY</field>
<field name="is_leave" eval="True"/>
<field name="country_id" ref="base.sa"/>
</record>
<!-- SK : Slovakia -->
<record id="l10n_sk_work_entry_type_sick_25" model="hr.work.entry.type">
<field name="name">Sick Time Off Day 1-3 (Paid at 25%)</field>
<field name="code">SICK25</field>
<field name="color">5</field>
<field name="country_id" ref="base.sk"/>
<field name="is_leave" eval="True"/>
<field name="amount_rate">0.25</field>
</record>
<record id="l10n_sk_work_entry_type_sick_55" model="hr.work.entry.type">
<field name="name">Sick Time Off Day 4-10 (Paid at 55%)</field>
<field name="code">SICK55</field>
<field name="color">5</field>
<field name="country_id" ref="base.sk"/>
<field name="is_leave" eval="True"/>
<field name="amount_rate">0.55</field>
</record>
<record id="l10n_sk_work_entry_type_sick_0" model="hr.work.entry.type">
<field name="name">Sick Time Off Day up to 52 weeks (Paid at 55% by social security)</field>
<field name="code">SICK0</field>
<field name="color">5</field>
<field name="country_id" ref="base.sk"/>
<field name="is_leave" eval="True"/>
<field name="amount_rate">0.0</field>
</record>
<record id="l10n_sk_work_entry_type_maternity" model="hr.work.entry.type">
<field name="name">Maternity Time Off (Paid at 75%)</field>
<field name="code">MATERNITY</field>
<field name="color">5</field>
<field name="country_id" ref="base.sk"/>
<field name="is_leave" eval="True"/>
<field name="amount_rate">0.75</field>
</record>
<record id="l10n_sk_work_entry_type_parental_time_off" model="hr.work.entry.type">
<field name="name">Parental Time Off</field>
<field name="code">PARENTAL</field>
<field name="color">8</field>
<field name="country_id" ref="base.sk"/>
<field name="is_leave" eval="True"/>
<field name="amount_rate">0.0</field>
</record>
<!-- US : United States -->
<record id="l10n_us_work_entry_type_overtime" model="hr.work.entry.type">
<field name="name">Overtime Hours (Paid at 150%)</field>
<field name="color">4</field>
<field name="code">USOVERTIME150</field>
<field name="country_id" ref="base.us"/>
<field name="amount_rate">1.5</field>
</record>
<record id="l10n_us_work_entry_type_double" model="hr.work.entry.type">
<field name="name">Double Time Hours</field>
<field name="color">4</field>
<field name="code">USDOUBLE</field>
<field name="country_id" ref="base.us"/>
<field name="amount_rate">2.0</field>
</record>
<record id="l10n_us_work_entry_type_retro_overtime" model="hr.work.entry.type">
<field name="name">Retro Overtime Hours</field>
<field name="color">4</field>
<field name="code">USRETROOVERTIME</field>
<field name="country_id" ref="base.us"/>
<field name="amount_rate">1.5</field>
</record>
<record id="l10n_us_work_entry_type_retro_regular" model="hr.work.entry.type">
<field name="name">Retro Regular Pay Hours</field>
<field name="color">4</field>
<field name="code">USRETROREGULAR</field>
<field name="country_id" ref="base.us"/>
</record>
</data></odoo>

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record id="ir_cron_generate_missing_work_entries" model="ir.cron">
<field name="name">Generate Missing Work Entries</field>
<field name="model_id" ref="hr.model_hr_version"/>
<field name="state">code</field>
<field name="code">model._cron_generate_missing_work_entries()</field>
<field name="active" eval="True"/>
<field name="user_id" ref="base.user_root"/>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
</record>
</data>
</odoo>

View file

@ -1,396 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_work_entry
#
# Translators:
# Martin Trigaux, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-04-14 05:51+0000\n"
"PO-Revision-Date: 2022-09-22 05:52+0000\n"
"Last-Translator: Martin Trigaux, 2023\n"
"Language-Team: Afrikaans (https://app.transifex.com/odoo/teams/41243/af/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: af\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_employee.py:0
#, python-format
msgid "%s work entries"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "<span>Hours</span>"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__active
msgid "Active"
msgstr "Aktief"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Archived"
msgstr ""
#. module: hr_work_entry
#: model:hr.work.entry.type,name:hr_work_entry.work_entry_type_attendance
msgid "Attendance"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "Beginning"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__cancelled
msgid "Cancelled"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__code
msgid ""
"Careful, the Code is used in many references, changing it could lead to "
"unwanted changes."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__code
msgid "Code"
msgstr "Kode"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__color
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__color
msgid "Color"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__company_id
msgid "Company"
msgstr "Maatskappy"
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__conflict
msgid "Conflict"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Conflicting"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__conflict
msgid "Conflicts"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_type_action
msgid "Create a new work entry type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_uid
msgid "Created by"
msgstr "Geskep deur"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_date
msgid "Created on"
msgstr "Geskep op"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Current Month"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Date"
msgstr "Datum"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__department_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Department"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Description"
msgstr "Beskrywing"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__display_name
msgid "Display Name"
msgstr "Vertoningsnaam"
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__draft
msgid "Draft"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_kanban
msgid "Dropdown menu"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__duration
msgid "Duration"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_employee
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__employee_id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__employee_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Employee"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "End"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_start
msgid "From"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry
msgid "HR Work Entry"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry_type
msgid "HR Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__id
msgid "ID"
msgstr "ID"
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__active
msgid ""
"If the active field is set to false, it will allow you to hide the work "
"entry type without removing it."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type____last_update
msgid "Last Modified on"
msgstr "Laas Gewysig op"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_uid
msgid "Last Updated by"
msgstr "Laas Opgedateer deur"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_date
msgid "Last Updated on"
msgstr "Laas Opgedateer op"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__user_id
msgid "Me"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__name
msgid "Name"
msgstr "Naam"
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid "No data to display"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Note: Validated work entries cannot be modified."
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_leaves
msgid "Resource Time Off Detail"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Search Work Entry"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
msgid "Search Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__sequence
msgid "Sequence"
msgstr "Volgorde"
#. module: hr_work_entry
#. odoo-javascript
#: code:addons/hr_work_entry/static/src/xml/work_entry_templates.xml:0
#, python-format
msgid "Solve conflicts first"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Start Date"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_start_before_end
msgid "Starting time should be before end time."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__state
msgid "State"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry_type_unique_work_entry_code
msgid "The same code cannot be associated to multiple work entry types."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Time Off Options"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_stop
msgid "To"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid ""
"Try to add some records, or make sure that there is no active filter in the "
"search bar."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Type"
msgstr "Soort"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined"
msgstr ""
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__validated
msgid "Validated"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entries_no_validated_conflict
msgid "Validated work entries cannot overlap"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_attendance
msgid "Work Detail"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_employee_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_pivot
msgid "Work Entries"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_user_work_entry_employee
msgid "Work Entries Employees"
msgstr ""
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action_conflict
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_calendar
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_attendance__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_leaves__work_entry_type_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.resource_calendar_leaves_view_search_inherit
msgid "Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Work Entry Type Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_type_action
msgid "Work Entry Types"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_has_end
msgid "Work entry must end. Please define an end date or a duration."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_user_work_entry_employee_user_id_employee_id_unique
msgid "You cannot have the same employee twice."
msgstr ""

View file

@ -1,392 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_work_entry
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-04-14 05:51+0000\n"
"PO-Revision-Date: 2022-09-22 05:52+0000\n"
"Language-Team: Amharic (https://app.transifex.com/odoo/teams/41243/am/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: am\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_employee.py:0
#, python-format
msgid "%s work entries"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "<span>Hours</span>"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__active
msgid "Active"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Archived"
msgstr ""
#. module: hr_work_entry
#: model:hr.work.entry.type,name:hr_work_entry.work_entry_type_attendance
msgid "Attendance"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "Beginning"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__cancelled
msgid "Cancelled"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__code
msgid ""
"Careful, the Code is used in many references, changing it could lead to "
"unwanted changes."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__code
msgid "Code"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__color
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__color
msgid "Color"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__company_id
msgid "Company"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__conflict
msgid "Conflict"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Conflicting"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__conflict
msgid "Conflicts"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_type_action
msgid "Create a new work entry type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_uid
msgid "Created by"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_date
msgid "Created on"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Current Month"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Date"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__department_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Department"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Description"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__display_name
msgid "Display Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__draft
msgid "Draft"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_kanban
msgid "Dropdown menu"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__duration
msgid "Duration"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_employee
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__employee_id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__employee_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Employee"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "End"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_start
msgid "From"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry
msgid "HR Work Entry"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry_type
msgid "HR Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__id
msgid "ID"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__active
msgid ""
"If the active field is set to false, it will allow you to hide the work "
"entry type without removing it."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type____last_update
msgid "Last Modified on"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_uid
msgid "Last Updated by"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_date
msgid "Last Updated on"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__user_id
msgid "Me"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__name
msgid "Name"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid "No data to display"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Note: Validated work entries cannot be modified."
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_leaves
msgid "Resource Time Off Detail"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Search Work Entry"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
msgid "Search Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__sequence
msgid "Sequence"
msgstr ""
#. module: hr_work_entry
#. odoo-javascript
#: code:addons/hr_work_entry/static/src/xml/work_entry_templates.xml:0
#, python-format
msgid "Solve conflicts first"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Start Date"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_start_before_end
msgid "Starting time should be before end time."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__state
msgid "State"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry_type_unique_work_entry_code
msgid "The same code cannot be associated to multiple work entry types."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Time Off Options"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_stop
msgid "To"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid ""
"Try to add some records, or make sure that there is no active filter in the "
"search bar."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Type"
msgstr ""
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined"
msgstr ""
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__validated
msgid "Validated"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entries_no_validated_conflict
msgid "Validated work entries cannot overlap"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_attendance
msgid "Work Detail"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_employee_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_pivot
msgid "Work Entries"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_user_work_entry_employee
msgid "Work Entries Employees"
msgstr ""
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action_conflict
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_calendar
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_attendance__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_leaves__work_entry_type_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.resource_calendar_leaves_view_search_inherit
msgid "Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Work Entry Type Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_type_action
msgid "Work Entry Types"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_has_end
msgid "Work entry must end. Please define an end date or a duration."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_user_work_entry_employee_user_id_employee_id_unique
msgid "You cannot have the same employee twice."
msgstr ""

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,396 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_work_entry
#
# Translators:
# Ivan Shakh, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-04-14 05:51+0000\n"
"PO-Revision-Date: 2022-09-22 05:52+0000\n"
"Last-Translator: Ivan Shakh, 2024\n"
"Language-Team: Belarusian (https://app.transifex.com/odoo/teams/41243/be/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: be\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_employee.py:0
#, python-format
msgid "%s work entries"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "<span>Hours</span>"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__active
msgid "Active"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Archived"
msgstr "Архіваваныя"
#. module: hr_work_entry
#: model:hr.work.entry.type,name:hr_work_entry.work_entry_type_attendance
msgid "Attendance"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "Beginning"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__cancelled
msgid "Cancelled"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__code
msgid ""
"Careful, the Code is used in many references, changing it could lead to "
"unwanted changes."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__code
msgid "Code"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__color
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__color
msgid "Color"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__company_id
msgid "Company"
msgstr "Кампанія"
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__conflict
msgid "Conflict"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Conflicting"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__conflict
msgid "Conflicts"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_type_action
msgid "Create a new work entry type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_uid
msgid "Created by"
msgstr "Стварыў"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_date
msgid "Created on"
msgstr "Створана"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Current Month"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Date"
msgstr "Дата"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__department_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Department"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Description"
msgstr "Апісанне"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__display_name
msgid "Display Name"
msgstr "Назва для адлюстравання"
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__draft
msgid "Draft"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_kanban
msgid "Dropdown menu"
msgstr "Выпадальнае меню"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__duration
msgid "Duration"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_employee
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__employee_id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__employee_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Employee"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "End"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_start
msgid "From"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry
msgid "HR Work Entry"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry_type
msgid "HR Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__id
msgid "ID"
msgstr "ID"
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__active
msgid ""
"If the active field is set to false, it will allow you to hide the work "
"entry type without removing it."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type____last_update
msgid "Last Modified on"
msgstr "Апошняя мадыфікацыя"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_uid
msgid "Last Updated by"
msgstr "Апошні абнавіў"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_date
msgid "Last Updated on"
msgstr "Апошняе абнаўленне"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__user_id
msgid "Me"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__name
msgid "Name"
msgstr "Назва"
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid "No data to display"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Note: Validated work entries cannot be modified."
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_leaves
msgid "Resource Time Off Detail"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Search Work Entry"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
msgid "Search Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__sequence
msgid "Sequence"
msgstr ""
#. module: hr_work_entry
#. odoo-javascript
#: code:addons/hr_work_entry/static/src/xml/work_entry_templates.xml:0
#, python-format
msgid "Solve conflicts first"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Start Date"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_start_before_end
msgid "Starting time should be before end time."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__state
msgid "State"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry_type_unique_work_entry_code
msgid "The same code cannot be associated to multiple work entry types."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Time Off Options"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_stop
msgid "To"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid ""
"Try to add some records, or make sure that there is no active filter in the "
"search bar."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Type"
msgstr ""
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined"
msgstr ""
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__validated
msgid "Validated"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entries_no_validated_conflict
msgid "Validated work entries cannot overlap"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_attendance
msgid "Work Detail"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_employee_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_pivot
msgid "Work Entries"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_user_work_entry_employee
msgid "Work Entries Employees"
msgstr ""
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action_conflict
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_calendar
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_attendance__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_leaves__work_entry_type_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.resource_calendar_leaves_view_search_inherit
msgid "Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Work Entry Type Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_type_action
msgid "Work Entry Types"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_has_end
msgid "Work entry must end. Please define an end date or a duration."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_user_work_entry_employee_user_id_employee_id_unique
msgid "You cannot have the same employee twice."
msgstr ""

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,407 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_work_entry
#
# Translators:
# Martin Trigaux, 2023
# Wil Odoo, 2023
# Fernanda Alvarez, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-04-14 05:51+0000\n"
"PO-Revision-Date: 2022-09-22 05:52+0000\n"
"Last-Translator: Fernanda Alvarez, 2023\n"
"Language-Team: Spanish (Mexico) (https://app.transifex.com/odoo/teams/41243/es_MX/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: es_MX\n"
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_employee.py:0
#, python-format
msgid "%s work entries"
msgstr "%s entradas de trabajo"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "<span>Hours</span>"
msgstr "<span>Horas</span>"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__active
msgid "Active"
msgstr "Activo"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Archived"
msgstr "Archivado"
#. module: hr_work_entry
#: model:hr.work.entry.type,name:hr_work_entry.work_entry_type_attendance
msgid "Attendance"
msgstr "Asistencia"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "Beginning"
msgstr "Comenzando"
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__cancelled
msgid "Cancelled"
msgstr "Cancelado"
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__code
msgid ""
"Careful, the Code is used in many references, changing it could lead to "
"unwanted changes."
msgstr ""
"Cuidado, el código se utiliza en muchas referencias, cambiarlo podría "
"ocasionar cambios no deseados."
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__code
msgid "Code"
msgstr "Código"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__color
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__color
msgid "Color"
msgstr "Color"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__company_id
msgid "Company"
msgstr "Empresa"
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__conflict
msgid "Conflict"
msgstr "Conflicto"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Conflicting"
msgstr "Contradictorio"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__conflict
msgid "Conflicts"
msgstr "Conflictos"
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_type_action
msgid "Create a new work entry type"
msgstr "Crear un nuevo tipo de entrada de trabajo"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_uid
msgid "Created by"
msgstr "Creado por"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_date
msgid "Created on"
msgstr "Creado el"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Current Month"
msgstr "Mes actual"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Date"
msgstr "Fecha"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__department_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Department"
msgstr "Departamento"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Description"
msgstr "Descripción"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__display_name
msgid "Display Name"
msgstr "Nombre en pantalla"
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__draft
msgid "Draft"
msgstr "Borrador"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_kanban
msgid "Dropdown menu"
msgstr "Menú desplegable"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__duration
msgid "Duration"
msgstr "Duración"
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_employee
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__employee_id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__employee_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Employee"
msgstr "Empleado"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "End"
msgstr "Fin"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_start
msgid "From"
msgstr "Desde"
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry
msgid "HR Work Entry"
msgstr "Entrada de trabajo de RR. HH."
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry_type
msgid "HR Work Entry Type"
msgstr "Tipo de entrada de trabajo de RR. HH."
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__id
msgid "ID"
msgstr "ID"
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__active
msgid ""
"If the active field is set to false, it will allow you to hide the work "
"entry type without removing it."
msgstr ""
"Si el campo activo se establece como falso, podrá ocultar el tipo de entrada"
" de trabajo sin eliminarla."
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type____last_update
msgid "Last Modified on"
msgstr "Última modificación el"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_uid
msgid "Last Updated by"
msgstr "Última actualización por"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_date
msgid "Last Updated on"
msgstr "Última actualización el"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__user_id
msgid "Me"
msgstr "Yo"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__name
msgid "Name"
msgstr "Nombre"
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid "No data to display"
msgstr "No hay datos para mostrar"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Note: Validated work entries cannot be modified."
msgstr "Nota: las entradas de trabajo validadas no se pueden modificar."
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_leaves
msgid "Resource Time Off Detail"
msgstr "Detalle de los recursos de tiempos personales"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Search Work Entry"
msgstr "Buscar entrada de trabajo"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
msgid "Search Work Entry Type"
msgstr "Buscar tipo de entrada de trabajo"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__sequence
msgid "Sequence"
msgstr "Secuencia"
#. module: hr_work_entry
#. odoo-javascript
#: code:addons/hr_work_entry/static/src/xml/work_entry_templates.xml:0
#, python-format
msgid "Solve conflicts first"
msgstr "Resolver conflictos primero"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Start Date"
msgstr "Fecha de inicio"
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_start_before_end
msgid "Starting time should be before end time."
msgstr "La hora de inicio debe ser antes de la hora de finalización."
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__state
msgid "State"
msgstr "Estado"
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry_type_unique_work_entry_code
msgid "The same code cannot be associated to multiple work entry types."
msgstr ""
"No puede asociar el mismo código a varios tipos de entrada de trabajo."
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Time Off Options"
msgstr "Opciones de tiempo personal"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_stop
msgid "To"
msgstr "Hasta"
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid ""
"Try to add some records, or make sure that there is no active filter in the "
"search bar."
msgstr ""
"Intente agregar algunos registros o asegúrese de que no haya ningún filtro "
"activo en la barra de búsqueda."
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Type"
msgstr "Tipo"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined"
msgstr "Indefinido"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined Type"
msgstr "Tipo indefinido"
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__validated
msgid "Validated"
msgstr "Validado"
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entries_no_validated_conflict
msgid "Validated work entries cannot overlap"
msgstr "Las entradas de trabajo validadas no se pueden sobreponer"
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_attendance
msgid "Work Detail"
msgstr "Detalle del trabajo"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_employee_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_pivot
msgid "Work Entries"
msgstr "Entradas de trabajo"
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_user_work_entry_employee
msgid "Work Entries Employees"
msgstr "Empleados de entradas de trabajo"
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action_conflict
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_calendar
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry"
msgstr "Entrada de trabajo"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry Name"
msgstr "Nombre de la entrada de trabajo"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_attendance__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_leaves__work_entry_type_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.resource_calendar_leaves_view_search_inherit
msgid "Work Entry Type"
msgstr "Tipo de entrada de trabajo"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Work Entry Type Name"
msgstr "Nombre del tipo de entrada de trabajo"
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_type_action
msgid "Work Entry Types"
msgstr "Tipos de entradas de trabajo"
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_has_end
msgid "Work entry must end. Please define an end date or a duration."
msgstr ""
"La entrada de trabajo debe tener un fin. Defina una fecha de finalización o "
"una duración."
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_user_work_entry_employee_user_id_employee_id_unique
msgid "You cannot have the same employee twice."
msgstr "No puede tener el mismo empleado dos veces."

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,396 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_work_entry
#
# Translators:
# Qaidjohar Barbhaya, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-04-14 05:51+0000\n"
"PO-Revision-Date: 2022-09-22 05:52+0000\n"
"Last-Translator: Qaidjohar Barbhaya, 2023\n"
"Language-Team: Gujarati (https://app.transifex.com/odoo/teams/41243/gu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: gu\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_employee.py:0
#, python-format
msgid "%s work entries"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "<span>Hours</span>"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__active
msgid "Active"
msgstr "Active"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Archived"
msgstr "Archived"
#. module: hr_work_entry
#: model:hr.work.entry.type,name:hr_work_entry.work_entry_type_attendance
msgid "Attendance"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "Beginning"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__cancelled
msgid "Cancelled"
msgstr "Cancelled"
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__code
msgid ""
"Careful, the Code is used in many references, changing it could lead to "
"unwanted changes."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__code
msgid "Code"
msgstr "Code"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__color
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__color
msgid "Color"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__company_id
msgid "Company"
msgstr "Company"
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__conflict
msgid "Conflict"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Conflicting"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__conflict
msgid "Conflicts"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_type_action
msgid "Create a new work entry type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_uid
msgid "Created by"
msgstr "Created by"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_date
msgid "Created on"
msgstr "Created on"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Current Month"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Date"
msgstr "Date"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__department_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Department"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Description"
msgstr "Description"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__display_name
msgid "Display Name"
msgstr "Display Name"
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__draft
msgid "Draft"
msgstr "Draft"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_kanban
msgid "Dropdown menu"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__duration
msgid "Duration"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_employee
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__employee_id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__employee_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Employee"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "End"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_start
msgid "From"
msgstr "From"
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry
msgid "HR Work Entry"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry_type
msgid "HR Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__id
msgid "ID"
msgstr "ID"
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__active
msgid ""
"If the active field is set to false, it will allow you to hide the work "
"entry type without removing it."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type____last_update
msgid "Last Modified on"
msgstr "Last Modified on"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_uid
msgid "Last Updated by"
msgstr "Last Updated by"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_date
msgid "Last Updated on"
msgstr "Last Updated on"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__user_id
msgid "Me"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__name
msgid "Name"
msgstr "Name"
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid "No data to display"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Note: Validated work entries cannot be modified."
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_leaves
msgid "Resource Time Off Detail"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Search Work Entry"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
msgid "Search Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__sequence
msgid "Sequence"
msgstr "Sequence"
#. module: hr_work_entry
#. odoo-javascript
#: code:addons/hr_work_entry/static/src/xml/work_entry_templates.xml:0
#, python-format
msgid "Solve conflicts first"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Start Date"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_start_before_end
msgid "Starting time should be before end time."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__state
msgid "State"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry_type_unique_work_entry_code
msgid "The same code cannot be associated to multiple work entry types."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Time Off Options"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_stop
msgid "To"
msgstr "To"
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid ""
"Try to add some records, or make sure that there is no active filter in the "
"search bar."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Type"
msgstr "Type"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined"
msgstr ""
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__validated
msgid "Validated"
msgstr "Validated"
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entries_no_validated_conflict
msgid "Validated work entries cannot overlap"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_attendance
msgid "Work Detail"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_employee_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_pivot
msgid "Work Entries"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_user_work_entry_employee
msgid "Work Entries Employees"
msgstr ""
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action_conflict
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_calendar
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_attendance__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_leaves__work_entry_type_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.resource_calendar_leaves_view_search_inherit
msgid "Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Work Entry Type Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_type_action
msgid "Work Entry Types"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_has_end
msgid "Work entry must end. Please define an end date or a duration."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_user_work_entry_employee_user_id_employee_id_unique
msgid "You cannot have the same employee twice."
msgstr ""

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,392 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_work_entry
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-04-14 05:51+0000\n"
"PO-Revision-Date: 2022-09-22 05:52+0000\n"
"Language-Team: Armenian (https://app.transifex.com/odoo/teams/41243/hy/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: hy\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_employee.py:0
#, python-format
msgid "%s work entries"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "<span>Hours</span>"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__active
msgid "Active"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Archived"
msgstr ""
#. module: hr_work_entry
#: model:hr.work.entry.type,name:hr_work_entry.work_entry_type_attendance
msgid "Attendance"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "Beginning"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__cancelled
msgid "Cancelled"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__code
msgid ""
"Careful, the Code is used in many references, changing it could lead to "
"unwanted changes."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__code
msgid "Code"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__color
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__color
msgid "Color"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__company_id
msgid "Company"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__conflict
msgid "Conflict"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Conflicting"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__conflict
msgid "Conflicts"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_type_action
msgid "Create a new work entry type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_uid
msgid "Created by"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_date
msgid "Created on"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Current Month"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Date"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__department_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Department"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Description"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__display_name
msgid "Display Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__draft
msgid "Draft"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_kanban
msgid "Dropdown menu"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__duration
msgid "Duration"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_employee
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__employee_id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__employee_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Employee"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "End"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_start
msgid "From"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry
msgid "HR Work Entry"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry_type
msgid "HR Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__id
msgid "ID"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__active
msgid ""
"If the active field is set to false, it will allow you to hide the work "
"entry type without removing it."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type____last_update
msgid "Last Modified on"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_uid
msgid "Last Updated by"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_date
msgid "Last Updated on"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__user_id
msgid "Me"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__name
msgid "Name"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid "No data to display"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Note: Validated work entries cannot be modified."
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_leaves
msgid "Resource Time Off Detail"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Search Work Entry"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
msgid "Search Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__sequence
msgid "Sequence"
msgstr ""
#. module: hr_work_entry
#. odoo-javascript
#: code:addons/hr_work_entry/static/src/xml/work_entry_templates.xml:0
#, python-format
msgid "Solve conflicts first"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Start Date"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_start_before_end
msgid "Starting time should be before end time."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__state
msgid "State"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry_type_unique_work_entry_code
msgid "The same code cannot be associated to multiple work entry types."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Time Off Options"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_stop
msgid "To"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid ""
"Try to add some records, or make sure that there is no active filter in the "
"search bar."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Type"
msgstr ""
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined"
msgstr ""
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__validated
msgid "Validated"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entries_no_validated_conflict
msgid "Validated work entries cannot overlap"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_attendance
msgid "Work Detail"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_employee_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_pivot
msgid "Work Entries"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_user_work_entry_employee
msgid "Work Entries Employees"
msgstr ""
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action_conflict
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_calendar
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_attendance__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_leaves__work_entry_type_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.resource_calendar_leaves_view_search_inherit
msgid "Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Work Entry Type Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_type_action
msgid "Work Entry Types"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_has_end
msgid "Work entry must end. Please define an end date or a duration."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_user_work_entry_employee_user_id_employee_id_unique
msgid "You cannot have the same employee twice."
msgstr ""

File diff suppressed because it is too large Load diff

View file

@ -1,397 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_work_entry
#
# Translators:
# jonasyngvi, 2024
# Kristófer Arnþórsson, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-04-14 05:51+0000\n"
"PO-Revision-Date: 2022-09-22 05:52+0000\n"
"Last-Translator: Kristófer Arnþórsson, 2024\n"
"Language-Team: Icelandic (https://app.transifex.com/odoo/teams/41243/is/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: is\n"
"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_employee.py:0
#, python-format
msgid "%s work entries"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "<span>Hours</span>"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__active
msgid "Active"
msgstr "Virk"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Archived"
msgstr "Vistuð"
#. module: hr_work_entry
#: model:hr.work.entry.type,name:hr_work_entry.work_entry_type_attendance
msgid "Attendance"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "Beginning"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__cancelled
msgid "Cancelled"
msgstr "Eytt"
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__code
msgid ""
"Careful, the Code is used in many references, changing it could lead to "
"unwanted changes."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__code
msgid "Code"
msgstr "Kóði"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__color
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__color
msgid "Color"
msgstr "Litur"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__company_id
msgid "Company"
msgstr "Fyrirtæki"
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__conflict
msgid "Conflict"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Conflicting"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__conflict
msgid "Conflicts"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_type_action
msgid "Create a new work entry type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_uid
msgid "Created by"
msgstr "Búið til af"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_date
msgid "Created on"
msgstr "Búið til þann"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Current Month"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Date"
msgstr "Dagsetning"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__department_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Department"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Description"
msgstr "Lýsing"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__display_name
msgid "Display Name"
msgstr "Birtingarnafn"
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__draft
msgid "Draft"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_kanban
msgid "Dropdown menu"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__duration
msgid "Duration"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_employee
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__employee_id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__employee_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Employee"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "End"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_start
msgid "From"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry
msgid "HR Work Entry"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry_type
msgid "HR Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__id
msgid "ID"
msgstr "Auðkenni (ID)"
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__active
msgid ""
"If the active field is set to false, it will allow you to hide the work "
"entry type without removing it."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type____last_update
msgid "Last Modified on"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_uid
msgid "Last Updated by"
msgstr "Síðast uppfært af"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_date
msgid "Last Updated on"
msgstr "Síðast uppfært þann"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__user_id
msgid "Me"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__name
msgid "Name"
msgstr "Nafn"
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid "No data to display"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Note: Validated work entries cannot be modified."
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_leaves
msgid "Resource Time Off Detail"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Search Work Entry"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
msgid "Search Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__sequence
msgid "Sequence"
msgstr "Röð"
#. module: hr_work_entry
#. odoo-javascript
#: code:addons/hr_work_entry/static/src/xml/work_entry_templates.xml:0
#, python-format
msgid "Solve conflicts first"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Start Date"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_start_before_end
msgid "Starting time should be before end time."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__state
msgid "State"
msgstr "Fylki"
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry_type_unique_work_entry_code
msgid "The same code cannot be associated to multiple work entry types."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Time Off Options"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_stop
msgid "To"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid ""
"Try to add some records, or make sure that there is no active filter in the "
"search bar."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Type"
msgstr ""
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined"
msgstr ""
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__validated
msgid "Validated"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entries_no_validated_conflict
msgid "Validated work entries cannot overlap"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_attendance
msgid "Work Detail"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_employee_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_pivot
msgid "Work Entries"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_user_work_entry_employee
msgid "Work Entries Employees"
msgstr ""
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action_conflict
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_calendar
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_attendance__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_leaves__work_entry_type_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.resource_calendar_leaves_view_search_inherit
msgid "Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Work Entry Type Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_type_action
msgid "Work Entry Types"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_has_end
msgid "Work entry must end. Please define an end date or a duration."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_user_work_entry_employee_user_id_employee_id_unique
msgid "You cannot have the same employee twice."
msgstr ""

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,400 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_work_entry
#
# Translators:
# Samkhann Seang <seangsamkhann@gmail.com>, 2023
# AN Souphorn <ansouphorn@gmail.com>, 2023
# Sengtha Chay <sengtha@gmail.com>, 2023
# Lux Sok <sok.lux@gmail.com>, 2023
# Chan Nath <channath@gmail.com>, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-04-14 05:51+0000\n"
"PO-Revision-Date: 2022-09-22 05:52+0000\n"
"Last-Translator: Chan Nath <channath@gmail.com>, 2023\n"
"Language-Team: Khmer (https://app.transifex.com/odoo/teams/41243/km/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: km\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_employee.py:0
#, python-format
msgid "%s work entries"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "<span>Hours</span>"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__active
msgid "Active"
msgstr "សកម្ម"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Archived"
msgstr "ទុកជាឯកសារ"
#. module: hr_work_entry
#: model:hr.work.entry.type,name:hr_work_entry.work_entry_type_attendance
msgid "Attendance"
msgstr "វត្តមាន"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "Beginning"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__cancelled
msgid "Cancelled"
msgstr "បានលុបចោល"
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__code
msgid ""
"Careful, the Code is used in many references, changing it could lead to "
"unwanted changes."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__code
msgid "Code"
msgstr "កូដ"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__color
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__color
msgid "Color"
msgstr "ពណ៍"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__company_id
msgid "Company"
msgstr "ក្រុមហ៊ុន"
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__conflict
msgid "Conflict"
msgstr "ទំនាស់"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Conflicting"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__conflict
msgid "Conflicts"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_type_action
msgid "Create a new work entry type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_uid
msgid "Created by"
msgstr "បង្កើតដោយ"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_date
msgid "Created on"
msgstr "បង្កើតនៅ"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Current Month"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Date"
msgstr "កាលបរិច្ឆេទ"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__department_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Department"
msgstr "ដេប៉ាតឺម៉ង់"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Description"
msgstr "ការពិពណ៌​នា​"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__display_name
msgid "Display Name"
msgstr "ឈ្មោះសំរាប់បង្ហាញ"
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__draft
msgid "Draft"
msgstr "ព្រៀង"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_kanban
msgid "Dropdown menu"
msgstr "ម៉ឺនុយទម្លាក់ចុះ"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__duration
msgid "Duration"
msgstr "អំឡុងពេល"
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_employee
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__employee_id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__employee_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Employee"
msgstr "បុគ្គលិក"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "End"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_start
msgid "From"
msgstr "មកពី"
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry
msgid "HR Work Entry"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry_type
msgid "HR Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__id
msgid "ID"
msgstr "អត្តសញ្ញាណ"
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__active
msgid ""
"If the active field is set to false, it will allow you to hide the work "
"entry type without removing it."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type____last_update
msgid "Last Modified on"
msgstr "កាលបរិច្ឆេតកែប្រែចុងក្រោយ"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_uid
msgid "Last Updated by"
msgstr "ផ្លាស់ប្តូរចុងក្រោយ"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_date
msgid "Last Updated on"
msgstr "ផ្លាស់ប្តូរចុងក្រោយ"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__user_id
msgid "Me"
msgstr "ខ្ងុំ"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__name
msgid "Name"
msgstr "ឈ្មោះ"
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid "No data to display"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Note: Validated work entries cannot be modified."
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_leaves
msgid "Resource Time Off Detail"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Search Work Entry"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
msgid "Search Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__sequence
msgid "Sequence"
msgstr "លំដាប់"
#. module: hr_work_entry
#. odoo-javascript
#: code:addons/hr_work_entry/static/src/xml/work_entry_templates.xml:0
#, python-format
msgid "Solve conflicts first"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Start Date"
msgstr "កាលបរិច្ឆេទ​ចាប់ផ្តើម"
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_start_before_end
msgid "Starting time should be before end time."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__state
msgid "State"
msgstr "ទីតំាង"
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry_type_unique_work_entry_code
msgid "The same code cannot be associated to multiple work entry types."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Time Off Options"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_stop
msgid "To"
msgstr "ទៅ"
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid ""
"Try to add some records, or make sure that there is no active filter in the "
"search bar."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Type"
msgstr "ប្រភេទ"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined"
msgstr "មិនបានកំណត់"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__validated
msgid "Validated"
msgstr "បានធ្វើឱ្យមានសុពលភាព"
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entries_no_validated_conflict
msgid "Validated work entries cannot overlap"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_attendance
msgid "Work Detail"
msgstr "ព៌តមានការងារ។"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_employee_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_pivot
msgid "Work Entries"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_user_work_entry_employee
msgid "Work Entries Employees"
msgstr ""
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action_conflict
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_calendar
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_attendance__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_leaves__work_entry_type_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.resource_calendar_leaves_view_search_inherit
msgid "Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Work Entry Type Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_type_action
msgid "Work Entry Types"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_has_end
msgid "Work entry must end. Please define an end date or a duration."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_user_work_entry_employee_user_id_employee_id_unique
msgid "You cannot have the same employee twice."
msgstr ""

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,23 +1,37 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_work_entry
#
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~12.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-08-26 08:16+0000\n"
"POT-Creation-Date: 2023-05-16 13:48+0000\n"
"PO-Revision-Date: 2019-08-26 09:11+0000\n"
"Language-Team: Luxembourgish (https://www.transifex.com/odoo/teams/41243/lb/)\n"
"Language: lb\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: lb\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_employee.py:0
msgid "%s work entries"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_employee_view_form
msgid ""
"<span class=\"o_stat_text\">\n"
" Work Entries\n"
" </span>"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "<span class=\"ml8\">Hours</span>"
msgid "<span>Hours</span>"
msgstr ""
#. module: hr_work_entry
@ -28,11 +42,17 @@ msgid "Active"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Archived"
msgstr ""
#. module: hr_work_entry
#: model:hr.work.entry.type,name:hr_work_entry.work_entry_type_attendance
msgid "Attendance"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "Beginning"
@ -44,8 +64,9 @@ msgid "Cancelled"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__code
msgid "Code"
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry__code
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__code
msgid "Careful, the Code is used in many references, changing it could lead to unwanted changes."
msgstr ""
#. module: hr_work_entry
@ -59,11 +80,6 @@ msgstr ""
msgid "Company"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__confirmed
msgid "Confirmed"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__conflict
msgid "Conflict"
@ -93,11 +109,27 @@ msgstr ""
msgid "Created on"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Current Month"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Date"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__department_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Department"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Description"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__display_name
@ -111,17 +143,29 @@ msgid "Draft"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_kanban
msgid "Dropdown menu"
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__duration
msgid "Duration"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_employee
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__employee_id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__employee_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Employee"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "End"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__external_code
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__external_code
msgid "External Code"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_start
msgid "From"
@ -137,6 +181,11 @@ msgstr ""
msgid "HR Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_employee__has_work_entries
msgid "Has Work Entries"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__id
@ -146,16 +195,7 @@ msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__active
msgid ""
"If the active field is set to false, it will allow you to hide the work "
"entry type without removing it."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type____last_update
msgid "Last Modified on"
msgid "If the active field is set to false, it will allow you to hide the work entry type without removing it."
msgstr ""
#. module: hr_work_entry
@ -177,11 +217,6 @@ msgstr ""
msgid "Me"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "My Entries"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__name
@ -189,9 +224,19 @@ msgid "Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__duration
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Period"
msgid "Note: Validated work entries cannot be modified."
msgstr ""
#. module: hr_work_entry
#: model:hr.work.entry.type,name:hr_work_entry.overtime_work_entry_type
msgid "Overtime Hours"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__code
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__code
msgid "Payroll Code"
msgstr ""
#. module: hr_work_entry
@ -215,12 +260,16 @@ msgid "Sequence"
msgstr ""
#. module: hr_work_entry
#. openerp-web
#. odoo-javascript
#: code:addons/hr_work_entry/static/src/xml/work_entry_templates.xml:0
#, python-format
msgid "Solve conflicts first"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Start Date"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_start_before_end
msgid "Starting time should be before end time."
@ -236,6 +285,11 @@ msgstr ""
msgid "The same code cannot be associated to multiple work entry types."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Time Off Options"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_stop
msgid "To"
@ -246,16 +300,32 @@ msgstr ""
msgid "Type"
msgstr ""
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
msgid "Undefined"
msgstr ""
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
msgid "Undefined Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry__external_code
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__external_code
msgid "Use this code to export your data to a third party"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__validated
msgid "Validated"
msgstr ""
#. module: hr_work_entry
#. openerp-web
#: code:addons/hr_work_entry/static/src/xml/work_entry_templates.xml:0
#, python-format
msgid "We found some conflicts,"
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entries_no_validated_conflict
msgid "Validated work entries cannot overlap"
msgstr ""
#. module: hr_work_entry
@ -263,6 +333,11 @@ msgstr ""
msgid "Work Detail"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_pivot
msgid "Work Entries"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_user_work_entry_employee
msgid "Work Entries Employees"
@ -286,6 +361,7 @@ msgstr ""
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_attendance__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_leaves__work_entry_type_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.resource_calendar_leaves_view_search_inherit
msgid "Work Entry Type"
msgstr ""
@ -308,10 +384,3 @@ msgstr ""
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_user_work_entry_employee_user_id_employee_id_unique
msgid "You cannot have the same employee twice."
msgstr ""
#. module: hr_work_entry
#. openerp-web
#: code:addons/hr_work_entry/static/src/xml/work_entry_templates.xml:0
#, python-format
msgid "click here to revise them"
msgstr ""

View file

@ -1,399 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_work_entry
#
# Translators:
# sackda chanthasombath, 2023
# Phoxaysy Sengchanthanouvong <phoxaysy@gmail.com>, 2023
# ສີສຸວັນ ສັງບົວບຸລົມ <sisouvan@gmail.com>, 2023
# Martin Trigaux, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-04-14 05:51+0000\n"
"PO-Revision-Date: 2022-09-22 05:52+0000\n"
"Last-Translator: Martin Trigaux, 2023\n"
"Language-Team: Lao (https://app.transifex.com/odoo/teams/41243/lo/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: lo\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_employee.py:0
#, python-format
msgid "%s work entries"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "<span>Hours</span>"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__active
msgid "Active"
msgstr "ໃຊ້ຢູ່"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Archived"
msgstr "ສຳເນົາໄວ້ແລ້ວ"
#. module: hr_work_entry
#: model:hr.work.entry.type,name:hr_work_entry.work_entry_type_attendance
msgid "Attendance"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "Beginning"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__cancelled
msgid "Cancelled"
msgstr "ຖືກຍົກເລີກແລ້ວ"
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__code
msgid ""
"Careful, the Code is used in many references, changing it could lead to "
"unwanted changes."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__code
msgid "Code"
msgstr "ລະຫັດ"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__color
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__color
msgid "Color"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__company_id
msgid "Company"
msgstr "ບໍລິສັດ"
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__conflict
msgid "Conflict"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Conflicting"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__conflict
msgid "Conflicts"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_type_action
msgid "Create a new work entry type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_uid
msgid "Created by"
msgstr "ສ້າງໂດຍ"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_date
msgid "Created on"
msgstr "ສ້າງເມື່ອ"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Current Month"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Date"
msgstr "ວັນທີ"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__department_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Department"
msgstr "ຫ້ອງການ"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Description"
msgstr "ຄຳອະທິບາຍ"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__display_name
msgid "Display Name"
msgstr "ຊື່ເຕັມ"
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__draft
msgid "Draft"
msgstr "ຕົວທົດລອງ"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_kanban
msgid "Dropdown menu"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__duration
msgid "Duration"
msgstr "ກຳນົດເວລາ"
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_employee
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__employee_id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__employee_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Employee"
msgstr "ພະນັກງານ"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "End"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_start
msgid "From"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry
msgid "HR Work Entry"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry_type
msgid "HR Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__id
msgid "ID"
msgstr "ເລກລຳດັບ"
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__active
msgid ""
"If the active field is set to false, it will allow you to hide the work "
"entry type without removing it."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type____last_update
msgid "Last Modified on"
msgstr "ແກ້ໄຂລ້າສຸດເມື່ອ"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_uid
msgid "Last Updated by"
msgstr "ປັບປຸງລ້າສຸດໂດຍ"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_date
msgid "Last Updated on"
msgstr "ປັບປຸງລ້າສຸດເມື່ອ"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__user_id
msgid "Me"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__name
msgid "Name"
msgstr "ຊື່"
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid "No data to display"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Note: Validated work entries cannot be modified."
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_leaves
msgid "Resource Time Off Detail"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Search Work Entry"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
msgid "Search Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__sequence
msgid "Sequence"
msgstr "ລຳດັບ"
#. module: hr_work_entry
#. odoo-javascript
#: code:addons/hr_work_entry/static/src/xml/work_entry_templates.xml:0
#, python-format
msgid "Solve conflicts first"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Start Date"
msgstr "ວັນທີເລີ່ມ"
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_start_before_end
msgid "Starting time should be before end time."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__state
msgid "State"
msgstr "ແຂວງ"
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry_type_unique_work_entry_code
msgid "The same code cannot be associated to multiple work entry types."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Time Off Options"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_stop
msgid "To"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid ""
"Try to add some records, or make sure that there is no active filter in the "
"search bar."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Type"
msgstr "ປະເພດ"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined"
msgstr ""
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__validated
msgid "Validated"
msgstr "ກວດກາເຫັນດີເເລ້ວ"
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entries_no_validated_conflict
msgid "Validated work entries cannot overlap"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_attendance
msgid "Work Detail"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_employee_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_pivot
msgid "Work Entries"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_user_work_entry_employee
msgid "Work Entries Employees"
msgstr ""
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action_conflict
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_calendar
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_attendance__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_leaves__work_entry_type_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.resource_calendar_leaves_view_search_inherit
msgid "Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Work Entry Type Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_type_action
msgid "Work Entry Types"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_has_end
msgid "Work entry must end. Please define an end date or a duration."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_user_work_entry_employee_user_id_employee_id_unique
msgid "You cannot have the same employee twice."
msgstr ""

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,397 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_work_entry
#
# Translators:
# Niyas Raphy, 2023
# Hasna <hasnausmantu@gmail.com>, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-04-14 05:51+0000\n"
"PO-Revision-Date: 2022-09-22 05:52+0000\n"
"Last-Translator: Hasna <hasnausmantu@gmail.com>, 2023\n"
"Language-Team: Malayalam (https://app.transifex.com/odoo/teams/41243/ml/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: ml\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_employee.py:0
#, python-format
msgid "%s work entries"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "<span>Hours</span>"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__active
msgid "Active"
msgstr "ആക്റ്റീവ്"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Archived"
msgstr "ആർക്കൈവ് ചെയ്തു"
#. module: hr_work_entry
#: model:hr.work.entry.type,name:hr_work_entry.work_entry_type_attendance
msgid "Attendance"
msgstr "അറ്റന്റൻസ് "
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "Beginning"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__cancelled
msgid "Cancelled"
msgstr "റദ്ദാക്കി"
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__code
msgid ""
"Careful, the Code is used in many references, changing it could lead to "
"unwanted changes."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__code
msgid "Code"
msgstr "കോഡ്"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__color
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__color
msgid "Color"
msgstr "കളർ"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__company_id
msgid "Company"
msgstr "കമ്പനി"
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__conflict
msgid "Conflict"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Conflicting"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__conflict
msgid "Conflicts"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_type_action
msgid "Create a new work entry type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_uid
msgid "Created by"
msgstr "ഉണ്ടാക്കിയത്"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_date
msgid "Created on"
msgstr "സൃഷ്ടിച്ചത്"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Current Month"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Date"
msgstr "തീയതി"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__department_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Department"
msgstr "വകുപ്പ്"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Description"
msgstr "വിവരണം"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__display_name
msgid "Display Name"
msgstr "ഡിസ്പ്ലേ നെയിം"
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__draft
msgid "Draft"
msgstr "ഡ്രാഫ്റ്റ്"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_kanban
msgid "Dropdown menu"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__duration
msgid "Duration"
msgstr "ദൈർഘ്യം"
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_employee
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__employee_id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__employee_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Employee"
msgstr "എംപ്ലോയീ "
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "End"
msgstr "അവസാനം"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_start
msgid "From"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry
msgid "HR Work Entry"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry_type
msgid "HR Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__id
msgid "ID"
msgstr "ഐഡി"
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__active
msgid ""
"If the active field is set to false, it will allow you to hide the work "
"entry type without removing it."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type____last_update
msgid "Last Modified on"
msgstr "അവസാനം അപ്ഡേറ്റ് ചെയ്തത്"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_uid
msgid "Last Updated by"
msgstr "അവസാനം അപ്ഡേറ്റ് ചെയ്തത്"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_date
msgid "Last Updated on"
msgstr "അവസാനം അപ്ഡേറ്റ് ചെയ്തത്"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__user_id
msgid "Me"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__name
msgid "Name"
msgstr "പേര്"
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid "No data to display"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Note: Validated work entries cannot be modified."
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_leaves
msgid "Resource Time Off Detail"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Search Work Entry"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
msgid "Search Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__sequence
msgid "Sequence"
msgstr "സീക്വൻസ് "
#. module: hr_work_entry
#. odoo-javascript
#: code:addons/hr_work_entry/static/src/xml/work_entry_templates.xml:0
#, python-format
msgid "Solve conflicts first"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Start Date"
msgstr "ആരംഭിക്കുന്ന തീയതി"
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_start_before_end
msgid "Starting time should be before end time."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__state
msgid "State"
msgstr "സ്റ്റേറ്റ്"
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry_type_unique_work_entry_code
msgid "The same code cannot be associated to multiple work entry types."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Time Off Options"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_stop
msgid "To"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid ""
"Try to add some records, or make sure that there is no active filter in the "
"search bar."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Type"
msgstr "ടൈപ്പ്"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined"
msgstr ""
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__validated
msgid "Validated"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entries_no_validated_conflict
msgid "Validated work entries cannot overlap"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_attendance
msgid "Work Detail"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_employee_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_pivot
msgid "Work Entries"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_user_work_entry_employee
msgid "Work Entries Employees"
msgstr ""
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action_conflict
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_calendar
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_attendance__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_leaves__work_entry_type_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.resource_calendar_leaves_view_search_inherit
msgid "Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Work Entry Type Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_type_action
msgid "Work Entry Types"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_has_end
msgid "Work entry must end. Please define an end date or a duration."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_user_work_entry_employee_user_id_employee_id_unique
msgid "You cannot have the same employee twice."
msgstr ""

File diff suppressed because it is too large Load diff

View file

@ -1,398 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_work_entry
#
# Translators:
# Niyas Raphy, 2022
# Mehjabin Farsana, 2023
# Imran Pathan, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-04-14 05:51+0000\n"
"PO-Revision-Date: 2022-09-22 05:52+0000\n"
"Last-Translator: Imran Pathan, 2024\n"
"Language-Team: Malay (https://app.transifex.com/odoo/teams/41243/ms/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: ms\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_employee.py:0
#, python-format
msgid "%s work entries"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "<span>Hours</span>"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__active
msgid "Active"
msgstr "Aktif"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Archived"
msgstr "Diarkibkan"
#. module: hr_work_entry
#: model:hr.work.entry.type,name:hr_work_entry.work_entry_type_attendance
msgid "Attendance"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "Beginning"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__cancelled
msgid "Cancelled"
msgstr "Dibatalkan"
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__code
msgid ""
"Careful, the Code is used in many references, changing it could lead to "
"unwanted changes."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__code
msgid "Code"
msgstr "Kod"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__color
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__color
msgid "Color"
msgstr "Warna"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__company_id
msgid "Company"
msgstr "Syarikat"
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__conflict
msgid "Conflict"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Conflicting"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__conflict
msgid "Conflicts"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_type_action
msgid "Create a new work entry type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_uid
msgid "Created by"
msgstr "Dicipta oleh"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_date
msgid "Created on"
msgstr "Dicipta pada"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Current Month"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Date"
msgstr "Tarikh"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__department_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Department"
msgstr "Jabatan"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Description"
msgstr "Penerangan"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__display_name
msgid "Display Name"
msgstr "Nama paparan"
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__draft
msgid "Draft"
msgstr "Draf"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_kanban
msgid "Dropdown menu"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__duration
msgid "Duration"
msgstr "Tempoh"
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_employee
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__employee_id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__employee_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Employee"
msgstr "Pekerja"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "End"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_start
msgid "From"
msgstr "Daripada"
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry
msgid "HR Work Entry"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry_type
msgid "HR Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__id
msgid "ID"
msgstr "ID"
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__active
msgid ""
"If the active field is set to false, it will allow you to hide the work "
"entry type without removing it."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type____last_update
msgid "Last Modified on"
msgstr "Terakhir Diubah suai pada"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_uid
msgid "Last Updated by"
msgstr "Kemas Kini Terakhir oleh"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_date
msgid "Last Updated on"
msgstr "Kemas Kini Terakhir pada"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__user_id
msgid "Me"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__name
msgid "Name"
msgstr "Nama"
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid "No data to display"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Note: Validated work entries cannot be modified."
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_leaves
msgid "Resource Time Off Detail"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Search Work Entry"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
msgid "Search Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__sequence
msgid "Sequence"
msgstr "Urutan"
#. module: hr_work_entry
#. odoo-javascript
#: code:addons/hr_work_entry/static/src/xml/work_entry_templates.xml:0
#, python-format
msgid "Solve conflicts first"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Start Date"
msgstr "Tarikh mula"
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_start_before_end
msgid "Starting time should be before end time."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__state
msgid "State"
msgstr "negeri"
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry_type_unique_work_entry_code
msgid "The same code cannot be associated to multiple work entry types."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Time Off Options"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_stop
msgid "To"
msgstr "To"
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid ""
"Try to add some records, or make sure that there is no active filter in the "
"search bar."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Type"
msgstr "taip"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined"
msgstr "Tidak ditentukan"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__validated
msgid "Validated"
msgstr "Validated"
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entries_no_validated_conflict
msgid "Validated work entries cannot overlap"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_attendance
msgid "Work Detail"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_employee_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_pivot
msgid "Work Entries"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_user_work_entry_employee
msgid "Work Entries Employees"
msgstr ""
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action_conflict
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_calendar
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_attendance__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_leaves__work_entry_type_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.resource_calendar_leaves_view_search_inherit
msgid "Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Work Entry Type Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_type_action
msgid "Work Entry Types"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_has_end
msgid "Work entry must end. Please define an end date or a duration."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_user_work_entry_employee_user_id_employee_id_unique
msgid "You cannot have the same employee twice."
msgstr ""

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,392 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_work_entry
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-04-14 05:51+0000\n"
"PO-Revision-Date: 2022-09-22 05:52+0000\n"
"Language-Team: Norwegian (https://app.transifex.com/odoo/teams/41243/no/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: no\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_employee.py:0
#, python-format
msgid "%s work entries"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "<span>Hours</span>"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__active
msgid "Active"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Archived"
msgstr ""
#. module: hr_work_entry
#: model:hr.work.entry.type,name:hr_work_entry.work_entry_type_attendance
msgid "Attendance"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "Beginning"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__cancelled
msgid "Cancelled"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__code
msgid ""
"Careful, the Code is used in many references, changing it could lead to "
"unwanted changes."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__code
msgid "Code"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__color
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__color
msgid "Color"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__company_id
msgid "Company"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__conflict
msgid "Conflict"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Conflicting"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__conflict
msgid "Conflicts"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_type_action
msgid "Create a new work entry type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_uid
msgid "Created by"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_date
msgid "Created on"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Current Month"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Date"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__department_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Department"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Description"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__display_name
msgid "Display Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__draft
msgid "Draft"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_kanban
msgid "Dropdown menu"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__duration
msgid "Duration"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_employee
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__employee_id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__employee_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Employee"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "End"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_start
msgid "From"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry
msgid "HR Work Entry"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry_type
msgid "HR Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__id
msgid "ID"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__active
msgid ""
"If the active field is set to false, it will allow you to hide the work "
"entry type without removing it."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type____last_update
msgid "Last Modified on"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_uid
msgid "Last Updated by"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_date
msgid "Last Updated on"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__user_id
msgid "Me"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__name
msgid "Name"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid "No data to display"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Note: Validated work entries cannot be modified."
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_leaves
msgid "Resource Time Off Detail"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Search Work Entry"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
msgid "Search Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__sequence
msgid "Sequence"
msgstr ""
#. module: hr_work_entry
#. odoo-javascript
#: code:addons/hr_work_entry/static/src/xml/work_entry_templates.xml:0
#, python-format
msgid "Solve conflicts first"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Start Date"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_start_before_end
msgid "Starting time should be before end time."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__state
msgid "State"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry_type_unique_work_entry_code
msgid "The same code cannot be associated to multiple work entry types."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Time Off Options"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_stop
msgid "To"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid ""
"Try to add some records, or make sure that there is no active filter in the "
"search bar."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Type"
msgstr ""
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined"
msgstr ""
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__validated
msgid "Validated"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entries_no_validated_conflict
msgid "Validated work entries cannot overlap"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_attendance
msgid "Work Detail"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_employee_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_pivot
msgid "Work Entries"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_user_work_entry_employee
msgid "Work Entries Employees"
msgstr ""
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action_conflict
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_calendar
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_attendance__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_leaves__work_entry_type_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.resource_calendar_leaves_view_search_inherit
msgid "Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Work Entry Type Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_type_action
msgid "Work Entry Types"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_has_end
msgid "Work entry must end. Please define an end date or a duration."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_user_work_entry_employee_user_id_employee_id_unique
msgid "You cannot have the same employee twice."
msgstr ""

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,406 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_work_entry
#
# Translators:
# Uros Kalajdzic <ukalajdzic@gmail.com>, 2022
# Martin Trigaux, 2022
# Dragan Vukosavljevic <dragan.vukosavljevic@gmail.com>, 2023
# Milan Bojovic <mbojovic@outlook.com>, 2023
# コフスタジオ, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-04-14 05:51+0000\n"
"PO-Revision-Date: 2022-09-22 05:52+0000\n"
"Last-Translator: コフスタジオ, 2024\n"
"Language-Team: Serbian (https://app.transifex.com/odoo/teams/41243/sr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: sr\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_employee.py:0
#, python-format
msgid "%s work entries"
msgstr "%s work entries"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "<span>Hours</span>"
msgstr "<span>Sati</span>"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__active
msgid "Active"
msgstr "Aktivno"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Archived"
msgstr "Arhivirano"
#. module: hr_work_entry
#: model:hr.work.entry.type,name:hr_work_entry.work_entry_type_attendance
msgid "Attendance"
msgstr "Prisustvo"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "Beginning"
msgstr "Početak"
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__cancelled
msgid "Cancelled"
msgstr "Otkazano"
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__code
msgid ""
"Careful, the Code is used in many references, changing it could lead to "
"unwanted changes."
msgstr ""
"Careful, the Code is used in many references, changing it could lead to "
"unwanted changes."
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__code
msgid "Code"
msgstr "Kod"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__color
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__color
msgid "Color"
msgstr "Boja"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__company_id
msgid "Company"
msgstr "Kompanija"
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__conflict
msgid "Conflict"
msgstr "Sukob"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Conflicting"
msgstr "Preklapanje"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__conflict
msgid "Conflicts"
msgstr "Preklapanja"
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_type_action
msgid "Create a new work entry type"
msgstr "Create a new work entry type"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_uid
msgid "Created by"
msgstr "Kreirao"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_date
msgid "Created on"
msgstr "Kreirano"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Current Month"
msgstr "Current Month"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Date"
msgstr "Datum"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__department_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Department"
msgstr "Odeljenje"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Description"
msgstr "Opis"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__display_name
msgid "Display Name"
msgstr "Naziv za prikaz"
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__draft
msgid "Draft"
msgstr "Priprema"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_kanban
msgid "Dropdown menu"
msgstr "Padajući meni"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__duration
msgid "Duration"
msgstr "Trajanje"
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_employee
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__employee_id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__employee_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Employee"
msgstr "Zaposleni"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "End"
msgstr "Kraj"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_start
msgid "From"
msgstr "Od"
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry
msgid "HR Work Entry"
msgstr "HR Radni unos"
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry_type
msgid "HR Work Entry Type"
msgstr "Vrsta unosa rada HR"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__id
msgid "ID"
msgstr "ID"
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__active
msgid ""
"If the active field is set to false, it will allow you to hide the work "
"entry type without removing it."
msgstr ""
"If the active field is set to false, it will allow you to hide the work "
"entry type without removing it."
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type____last_update
msgid "Last Modified on"
msgstr "Poslednja izmena dana"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_uid
msgid "Last Updated by"
msgstr "Poslednje izmenio/la"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_date
msgid "Last Updated on"
msgstr "Poslednje ažuriranje dana"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__user_id
msgid "Me"
msgstr "Ja"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__name
msgid "Name"
msgstr "Ime"
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid "No data to display"
msgstr "Nema podataka za prikaz"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Note: Validated work entries cannot be modified."
msgstr "Note: Validated work entries cannot be modified."
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_leaves
msgid "Resource Time Off Detail"
msgstr "Resource Time Off Detail"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Search Work Entry"
msgstr "Search Work Entry"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
msgid "Search Work Entry Type"
msgstr "Search Work Entry Type"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__sequence
msgid "Sequence"
msgstr "Niz"
#. module: hr_work_entry
#. odoo-javascript
#: code:addons/hr_work_entry/static/src/xml/work_entry_templates.xml:0
#, python-format
msgid "Solve conflicts first"
msgstr "Solve conflicts first"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Start Date"
msgstr "Početni datum"
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_start_before_end
msgid "Starting time should be before end time."
msgstr "Starting time should be before end time."
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__state
msgid "State"
msgstr "Stanje"
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry_type_unique_work_entry_code
msgid "The same code cannot be associated to multiple work entry types."
msgstr "The same code cannot be associated to multiple work entry types."
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Time Off Options"
msgstr "Time Off Options"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_stop
msgid "To"
msgstr "Za"
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid ""
"Try to add some records, or make sure that there is no active filter in the "
"search bar."
msgstr ""
"Try to add some records, or make sure that there is no active filter in the "
"search bar."
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Type"
msgstr "Vrsta"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined"
msgstr "Nedefinisano"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined Type"
msgstr "Undefined Type"
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__validated
msgid "Validated"
msgstr "Potvrđeno"
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entries_no_validated_conflict
msgid "Validated work entries cannot overlap"
msgstr "Validated work entries cannot overlap"
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_attendance
msgid "Work Detail"
msgstr "Work Detail"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_employee_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_pivot
msgid "Work Entries"
msgstr "Work Entries"
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_user_work_entry_employee
msgid "Work Entries Employees"
msgstr "Work Entries Employees"
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action_conflict
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_calendar
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry"
msgstr "Work Entry"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry Name"
msgstr "Work Entry Name"
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_attendance__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_leaves__work_entry_type_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.resource_calendar_leaves_view_search_inherit
msgid "Work Entry Type"
msgstr "Vrsta unosa posla"
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Work Entry Type Name"
msgstr "Work Entry Type Name"
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_type_action
msgid "Work Entry Types"
msgstr "Work Entry Types"
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_has_end
msgid "Work entry must end. Please define an end date or a duration."
msgstr "Work entry must end. Please define an end date or a duration."
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_user_work_entry_employee_user_id_employee_id_unique
msgid "You cannot have the same employee twice."
msgstr "You cannot have the same employee twice."

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,392 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_work_entry
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-04-14 05:51+0000\n"
"PO-Revision-Date: 2022-09-22 05:52+0000\n"
"Language-Team: Swahili (https://app.transifex.com/odoo/teams/41243/sw/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: sw\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_employee.py:0
#, python-format
msgid "%s work entries"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "<span>Hours</span>"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__active
msgid "Active"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Archived"
msgstr ""
#. module: hr_work_entry
#: model:hr.work.entry.type,name:hr_work_entry.work_entry_type_attendance
msgid "Attendance"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "Beginning"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__cancelled
msgid "Cancelled"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__code
msgid ""
"Careful, the Code is used in many references, changing it could lead to "
"unwanted changes."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__code
msgid "Code"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__color
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__color
msgid "Color"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__company_id
msgid "Company"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__conflict
msgid "Conflict"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Conflicting"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__conflict
msgid "Conflicts"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_type_action
msgid "Create a new work entry type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_uid
msgid "Created by"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_date
msgid "Created on"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Current Month"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Date"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__department_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Department"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Description"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__display_name
msgid "Display Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__draft
msgid "Draft"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_kanban
msgid "Dropdown menu"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__duration
msgid "Duration"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_employee
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__employee_id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__employee_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Employee"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "End"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_start
msgid "From"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry
msgid "HR Work Entry"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry_type
msgid "HR Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__id
msgid "ID"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__active
msgid ""
"If the active field is set to false, it will allow you to hide the work "
"entry type without removing it."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type____last_update
msgid "Last Modified on"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_uid
msgid "Last Updated by"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_date
msgid "Last Updated on"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__user_id
msgid "Me"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__name
msgid "Name"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid "No data to display"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Note: Validated work entries cannot be modified."
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_leaves
msgid "Resource Time Off Detail"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Search Work Entry"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
msgid "Search Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__sequence
msgid "Sequence"
msgstr ""
#. module: hr_work_entry
#. odoo-javascript
#: code:addons/hr_work_entry/static/src/xml/work_entry_templates.xml:0
#, python-format
msgid "Solve conflicts first"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Start Date"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_start_before_end
msgid "Starting time should be before end time."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__state
msgid "State"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry_type_unique_work_entry_code
msgid "The same code cannot be associated to multiple work entry types."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Time Off Options"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_stop
msgid "To"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid ""
"Try to add some records, or make sure that there is no active filter in the "
"search bar."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Type"
msgstr ""
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined"
msgstr ""
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__validated
msgid "Validated"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entries_no_validated_conflict
msgid "Validated work entries cannot overlap"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_attendance
msgid "Work Detail"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_employee_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_pivot
msgid "Work Entries"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_user_work_entry_employee
msgid "Work Entries Employees"
msgstr ""
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action_conflict
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_calendar
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_attendance__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_leaves__work_entry_type_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.resource_calendar_leaves_view_search_inherit
msgid "Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Work Entry Type Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_type_action
msgid "Work Entry Types"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_has_end
msgid "Work entry must end. Please define an end date or a duration."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_user_work_entry_employee_user_id_employee_id_unique
msgid "You cannot have the same employee twice."
msgstr ""

View file

@ -1,392 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_work_entry
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-04-14 05:51+0000\n"
"PO-Revision-Date: 2022-09-22 05:52+0000\n"
"Language-Team: Tamil (https://app.transifex.com/odoo/teams/41243/ta/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: ta\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_employee.py:0
#, python-format
msgid "%s work entries"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "<span>Hours</span>"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__active
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__active
msgid "Active"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Archived"
msgstr ""
#. module: hr_work_entry
#: model:hr.work.entry.type,name:hr_work_entry.work_entry_type_attendance
msgid "Attendance"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "Beginning"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__cancelled
msgid "Cancelled"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__code
msgid ""
"Careful, the Code is used in many references, changing it could lead to "
"unwanted changes."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__code
msgid "Code"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__color
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__color
msgid "Color"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__company_id
msgid "Company"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__conflict
msgid "Conflict"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Conflicting"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__conflict
msgid "Conflicts"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_type_action
msgid "Create a new work entry type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_uid
msgid "Created by"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__create_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__create_date
msgid "Created on"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Current Month"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Date"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__department_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Department"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Description"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__display_name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__display_name
msgid "Display Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__draft
msgid "Draft"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_kanban
msgid "Dropdown menu"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__duration
msgid "Duration"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_employee
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__employee_id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__employee_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Employee"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_tree
msgid "End"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_start
msgid "From"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry
msgid "HR Work Entry"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_work_entry_type
msgid "HR Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__id
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__id
msgid "ID"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,help:hr_work_entry.field_hr_work_entry_type__active
msgid ""
"If the active field is set to false, it will allow you to hide the work "
"entry type without removing it."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry____last_update
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type____last_update
msgid "Last Modified on"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_uid
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_uid
msgid "Last Updated by"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__write_date
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__write_date
msgid "Last Updated on"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_user_work_entry_employee__user_id
msgid "Me"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__name
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__name
msgid "Name"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid "No data to display"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Note: Validated work entries cannot be modified."
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_leaves
msgid "Resource Time Off Detail"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Search Work Entry"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_search
msgid "Search Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry_type__sequence
msgid "Sequence"
msgstr ""
#. module: hr_work_entry
#. odoo-javascript
#: code:addons/hr_work_entry/static/src/xml/work_entry_templates.xml:0
#, python-format
msgid "Solve conflicts first"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Start Date"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_start_before_end
msgid "Starting time should be before end time."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__state
msgid "State"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry_type_unique_work_entry_code
msgid "The same code cannot be associated to multiple work entry types."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Time Off Options"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__date_stop
msgid "To"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.actions.act_window,help:hr_work_entry.hr_work_entry_action
msgid ""
"Try to add some records, or make sure that there is no active filter in the "
"search bar."
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_search
msgid "Type"
msgstr ""
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined"
msgstr ""
#. module: hr_work_entry
#. odoo-python
#: code:addons/hr_work_entry/models/hr_work_entry.py:0
#, python-format
msgid "Undefined Type"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields.selection,name:hr_work_entry.selection__hr_work_entry__state__validated
msgid "Validated"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entries_no_validated_conflict
msgid "Validated work entries cannot overlap"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_resource_calendar_attendance
msgid "Work Detail"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_employee_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_pivot
msgid "Work Entries"
msgstr ""
#. module: hr_work_entry
#: model:ir.model,name:hr_work_entry.model_hr_user_work_entry_employee
msgid "Work Entries Employees"
msgstr ""
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_action_conflict
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_calendar
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_view_form
msgid "Work Entry Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.fields,field_description:hr_work_entry.field_hr_work_entry__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_attendance__work_entry_type_id
#: model:ir.model.fields,field_description:hr_work_entry.field_resource_calendar_leaves__work_entry_type_id
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
#: model_terms:ir.ui.view,arch_db:hr_work_entry.resource_calendar_leaves_view_search_inherit
msgid "Work Entry Type"
msgstr ""
#. module: hr_work_entry
#: model_terms:ir.ui.view,arch_db:hr_work_entry.hr_work_entry_type_view_form
msgid "Work Entry Type Name"
msgstr ""
#. module: hr_work_entry
#: model:ir.actions.act_window,name:hr_work_entry.hr_work_entry_type_action
msgid "Work Entry Types"
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_work_entry__work_entry_has_end
msgid "Work entry must end. Please define an end date or a duration."
msgstr ""
#. module: hr_work_entry
#: model:ir.model.constraint,message:hr_work_entry.constraint_hr_user_work_entry_employee_user_id_employee_id_unique
msgid "You cannot have the same employee twice."
msgstr ""

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -2,5 +2,10 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import hr_work_entry
from . import resource
from . import hr_work_entry_type
from . import hr_user_work_entry_employee
from . import resource_calendar
from . import resource_calendar_attendance
from . import resource_calendar_leaves
from . import hr_employee
from . import hr_version

View file

@ -1,11 +1,38 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models, _
from odoo import models, fields, _
from odoo.tools import SQL
class HrEmployee(models.Model):
_inherit = 'hr.employee'
has_work_entries = fields.Boolean(compute='_compute_has_work_entries', groups="base.group_system,hr.group_hr_user")
work_entry_source = fields.Selection(readonly=False, related="version_id.work_entry_source", inherited=True, groups="hr.group_hr_manager")
work_entry_source_calendar_invalid = fields.Boolean(related="version_id.work_entry_source_calendar_invalid", inherited=True, groups="hr.group_hr_manager")
def _compute_has_work_entries(self):
if self.ids:
result = dict(self.env.execute_query(SQL(
""" SELECT id, EXISTS(SELECT 1 FROM hr_work_entry WHERE employee_id = e.id LIMIT 1)
FROM hr_employee e
WHERE id in %s """,
tuple(self.ids),
)))
else:
result = {}
for employee in self:
employee.has_work_entries = result.get(employee._origin.id, False)
def create_version(self, values):
new_version = super().create_version(values)
new_version.update({
'date_generated_from': fields.Datetime.now().replace(hour=0, minute=0, second=0, microsecond=0),
'date_generated_to': fields.Datetime.now().replace(hour=0, minute=0, second=0, microsecond=0),
})
return new_version
def action_open_work_entries(self, initial_date=False):
self.ensure_one()
ctx = {'default_employee_id': self.id}
@ -14,8 +41,19 @@ class HrEmployee(models.Model):
return {
'type': 'ir.actions.act_window',
'name': _('%s work entries', self.display_name),
'view_mode': 'calendar,tree,form',
'view_mode': 'calendar,list,form',
'res_model': 'hr.work.entry',
'path': 'work-entries',
'context': ctx,
'domain': [('employee_id', '=', self.id)],
}
def generate_work_entries(self, date_start, date_stop, force=False):
date_start = fields.Date.to_date(date_start)
date_stop = fields.Date.to_date(date_stop)
if self:
versions = self._get_versions_with_contract_overlap_with_period(date_start, date_stop)
else:
versions = self._get_all_versions_with_contract_overlap_with_period(date_start, date_stop)
return versions.generate_work_entries(date_start, date_stop, force=force)

View file

@ -0,0 +1,20 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import fields, models
class HrUserWorkEntryEmployee(models.Model):
""" Personnal calendar filter """
_name = 'hr.user.work.entry.employee'
_description = 'Work Entries Employees'
user_id = fields.Many2one('res.users', 'Me', required=True, default=lambda self: self.env.user, ondelete='cascade')
employee_id = fields.Many2one('hr.employee', 'Employee', required=True)
active = fields.Boolean('Active', default=True)
is_checked = fields.Boolean(default=True)
_user_id_employee_id_unique = models.Constraint(
'UNIQUE(user_id,employee_id)',
'You cannot have the same employee twice.',
)

View file

@ -0,0 +1,727 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import itertools
from collections import defaultdict
from datetime import datetime, date, time, timedelta
import pytz
from dateutil.relativedelta import relativedelta
from odoo import api, fields, models, _, SUPERUSER_ID
from odoo.exceptions import UserError
from odoo.fields import Command, Domain
from odoo.tools import ormcache, float_is_zero
from odoo.tools.intervals import Intervals
class HrVersion(models.Model):
_inherit = 'hr.version'
date_generated_from = fields.Datetime(string='Generated From', readonly=True, required=True,
default=lambda self: datetime.now().replace(hour=0, minute=0, second=0, microsecond=0),
groups="hr.group_hr_user", tracking=True)
date_generated_to = fields.Datetime(string='Generated To', readonly=True, required=True,
default=lambda self: datetime.now().replace(hour=0, minute=0, second=0, microsecond=0),
groups="hr.group_hr_user", tracking=True)
last_generation_date = fields.Date(string='Last Generation Date', readonly=True, groups="hr.group_hr_user", tracking=True)
work_entry_source = fields.Selection([('calendar', 'Working Schedule')], required=True, default='calendar', tracking=True, help='''
Defines the source for work entries generation
Working Schedule: Work entries will be generated from the working hours below.
Attendances: Work entries will be generated from the employee's attendances. (requires Attendance app)
Planning: Work entries will be generated from the employee's planning. (requires Planning app)
''', groups="hr.group_hr_manager")
work_entry_source_calendar_invalid = fields.Boolean(
compute='_compute_work_entry_source_calendar_invalid',
groups="hr.group_hr_manager",
)
@api.depends('work_entry_source', 'resource_calendar_id')
def _compute_work_entry_source_calendar_invalid(self):
for version in self:
version.work_entry_source_calendar_invalid = version.work_entry_source == 'calendar' and not version.resource_calendar_id
@ormcache()
def _get_default_work_entry_type_id(self):
attendance = self.env.ref('hr_work_entry.work_entry_type_attendance', raise_if_not_found=False)
return attendance.id if attendance else False
@ormcache()
def _get_default_work_entry_type_overtime_id(self):
attendance = self.env.ref('hr_work_entry.work_entry_type_overtime', raise_if_not_found=False)
return attendance.id if attendance else False
def _get_leave_work_entry_type_dates(self, leave, date_from, date_to, employee):
return self._get_leave_work_entry_type(leave)
def _get_leave_work_entry_type(self, leave):
return leave.work_entry_type_id
# Is used to add more values, for example planning_slot_id
def _get_more_vals_attendance_interval(self, interval):
return []
# Is used to add more values, for example leave_id (in hr_work_entry_holidays)
def _get_more_vals_leave_interval(self, interval, leaves):
return []
def _get_bypassing_work_entry_type_codes(self):
return []
def _get_interval_leave_work_entry_type(self, interval, leaves, bypassing_codes):
# returns the work entry time related to the leave that
# includes the whole interval.
# Overriden in hr_work_entry_holiday to select the
# global time off first (eg: Public Holiday > Home Working)
self.ensure_one()
for leave in leaves:
if interval[0] >= leave[0] and interval[1] <= leave[1] and leave[2]:
interval_start = interval[0].astimezone(pytz.utc).replace(tzinfo=None)
interval_stop = interval[1].astimezone(pytz.utc).replace(tzinfo=None)
return self._get_leave_work_entry_type_dates(leave[2], interval_start, interval_stop, self.employee_id)
return self.env.ref('hr_work_entry.work_entry_type_leave')
def _get_sub_leave_domain(self):
return Domain('calendar_id', 'in', [False] + self.resource_calendar_id.ids)
def _get_leave_domain(self, start_dt, end_dt):
domain = Domain([
('resource_id', 'in', [False] + self.employee_id.resource_id.ids),
('date_from', '<=', end_dt.replace(tzinfo=None)),
('date_to', '>=', start_dt.replace(tzinfo=None)),
('company_id', 'in', [False] + self.env.companies.ids),
])
return domain & self._get_sub_leave_domain()
def _get_resource_calendar_leaves(self, start_dt, end_dt):
return self.env['resource.calendar.leaves'].search(self._get_leave_domain(start_dt, end_dt))
def _get_attendance_intervals(self, start_dt, end_dt):
assert start_dt.tzinfo and end_dt.tzinfo, "function expects localized date"
# {resource: intervals}
employees_by_calendar = defaultdict(lambda: self.env['hr.employee'])
for version in self:
if version.work_entry_source != 'calendar':
continue
employees_by_calendar[version.resource_calendar_id] |= version.employee_id
result = dict()
for calendar, employees in employees_by_calendar.items():
if not calendar:
for employee in employees:
result.update({employee.resource_id.id: Intervals([(start_dt, end_dt, self.env['resource.calendar.attendance'])])})
else:
result.update(calendar._attendance_intervals_batch(
start_dt,
end_dt,
resources=employees.resource_id,
tz=pytz.timezone(calendar.tz) if calendar.tz else pytz.utc
))
return result
def _get_lunch_intervals(self, start_dt, end_dt):
# {resource: intervals}
employees_by_calendar = defaultdict(lambda: self.env['hr.employee'])
for version in self:
employees_by_calendar[version.resource_calendar_id] |= version.employee_id
result = {}
for calendar, employees in employees_by_calendar.items():
if not calendar:
continue
result.update(calendar._attendance_intervals_batch(
start_dt,
end_dt,
resources=employees.resource_id,
tz=pytz.timezone(calendar.tz),
lunch=True,
))
return result
def _get_interval_work_entry_type(self, interval):
self.ensure_one()
if 'work_entry_type_id' in interval[2] and interval[2].work_entry_type_id[:1]:
return interval[2].work_entry_type_id[:1]
return self.env['hr.work.entry.type'].browse(self._get_default_work_entry_type_id())
def _get_valid_leave_intervals(self, attendances, interval):
self.ensure_one()
return [interval]
@api.model
def _get_whitelist_fields_from_template(self):
return super()._get_whitelist_fields_from_template() + ['work_entry_source']
# Meant for behavior override
def _get_real_attendance_work_entry_vals(self, intervals):
self.ensure_one()
vals = []
employee = self.employee_id
for interval in intervals:
work_entry_type = self._get_interval_work_entry_type(interval)
# All benefits generated here are using datetimes converted from the employee's timezone
vals += [dict([
('name', "%s: %s" % (work_entry_type.name, employee.name)),
('date_start', interval[0].astimezone(pytz.utc).replace(tzinfo=None)),
('date_stop', interval[1].astimezone(pytz.utc).replace(tzinfo=None)),
('work_entry_type_id', work_entry_type.id),
('employee_id', employee.id),
('version_id', self.id),
('company_id', self.company_id.id),
] + self._get_more_vals_attendance_interval(interval))]
return vals
def _get_version_work_entries_values(self, date_start, date_stop):
start_dt = pytz.utc.localize(date_start) if not date_start.tzinfo else date_start
end_dt = pytz.utc.localize(date_stop) if not date_stop.tzinfo else date_stop
version_vals = []
bypassing_work_entry_type_codes = self._get_bypassing_work_entry_type_codes()
attendances_by_resource = self.sudo()._get_attendance_intervals(start_dt, end_dt)
resource_calendar_leaves = self._get_resource_calendar_leaves(start_dt, end_dt)
# {resource: resource_calendar_leaves}
leaves_by_resource = defaultdict(lambda: self.env['resource.calendar.leaves'])
for leave in resource_calendar_leaves:
leaves_by_resource[leave.resource_id.id] |= leave
tz_dates = {}
for version in self:
employee = version.employee_id
calendar = version.resource_calendar_id
resource = employee.resource_id
# if the version is fully flexible, we refer to the employee's timezone
tz = pytz.timezone(resource.tz) if version._is_fully_flexible() else pytz.timezone(calendar.tz)
attendances = attendances_by_resource[resource.id]
# Other calendars: In case the employee has declared time off in another calendar
# Example: Take a time off, then a credit time.
resources_list = [self.env['resource.resource'], resource]
leave_result = defaultdict(list)
work_result = defaultdict(list)
for leave in itertools.chain(leaves_by_resource[False], leaves_by_resource[resource.id]):
for resource in resources_list:
# Global time off is not for this calendar, can happen with multiple calendars in self
if resource and leave.calendar_id and leave.calendar_id != calendar and not leave.resource_id:
continue
tz = tz if tz else pytz.timezone((resource or version).tz)
if (tz, start_dt) in tz_dates:
start = tz_dates[tz, start_dt]
else:
start = start_dt.astimezone(tz)
tz_dates[tz, start_dt] = start
if (tz, end_dt) in tz_dates:
end = tz_dates[tz, end_dt]
else:
end = end_dt.astimezone(tz)
tz_dates[tz, end_dt] = end
dt0 = leave.date_from.astimezone(tz)
dt1 = leave.date_to.astimezone(tz)
leave_start_dt = max(start, dt0)
leave_end_dt = min(end, dt1)
leave_interval = (leave_start_dt, leave_end_dt, leave)
leave_interval = version._get_valid_leave_intervals(attendances, leave_interval)
if leave_interval:
if leave.time_type == 'leave':
leave_result[resource.id] += leave_interval
else:
work_result[resource.id] += leave_interval
mapped_leaves = {r.id: Intervals(leave_result[r.id], keep_distinct=True) for r in resources_list}
mapped_worked_leaves = {r.id: Intervals(work_result[r.id], keep_distinct=True) for r in resources_list}
leaves = mapped_leaves[resource.id]
worked_leaves = mapped_worked_leaves[resource.id]
real_attendances = attendances - leaves - worked_leaves
if not calendar:
real_leaves = leaves
real_worked_leaves = worked_leaves
elif calendar.flexible_hours:
# Flexible hours case
# For multi day leaves, we want them to occupy the virtual working schedule 12 AM to average working days
# For one day leaves, we want them to occupy exactly the time it was taken, for a time off in days
# this will mean the virtual schedule and for time off in hours the chosen hours
one_day_leaves = Intervals([l for l in leaves if l[0].date() == l[1].date()], keep_distinct=True)
one_day_worked_leaves = Intervals([l for l in worked_leaves if l[0].date() == l[1].date()], keep_distinct=True)
multi_day_leaves = leaves - one_day_leaves
multi_day_worked_leaves = worked_leaves - one_day_worked_leaves
static_attendances = calendar._attendance_intervals_batch(
start_dt, end_dt, resources=resource, tz=tz)[resource.id]
real_leaves = (static_attendances & multi_day_leaves) | one_day_leaves
real_worked_leaves = (static_attendances & multi_day_worked_leaves) | one_day_worked_leaves
elif version.has_static_work_entries() or not leaves:
# Empty leaves means empty real_leaves
real_worked_leaves = attendances - real_attendances - leaves
real_leaves = attendances - real_attendances - real_worked_leaves
else:
# In the case of attendance based versions use regular attendances to generate leave intervals
static_attendances = calendar._attendance_intervals_batch(
start_dt, end_dt, resources=resource, tz=tz)[resource.id]
real_leaves = static_attendances & leaves
real_worked_leaves = static_attendances & worked_leaves
real_attendances = self._get_real_attendances(attendances, leaves, worked_leaves)
if not version.has_static_work_entries():
# An attendance based version might have an invalid planning, by definition it may not happen with
# static work entries.
# Creating overlapping slots for example might lead to a single work entry.
# In that case we still create both work entries to indicate a problem (conflicting W E).
split_attendances = []
for attendance in real_attendances:
if attendance[2] and len(attendance[2]) > 1:
split_attendances += [(attendance[0], attendance[1], a) for a in attendance[2]]
else:
split_attendances += [attendance]
real_attendances = split_attendances
# A leave period can be linked to several resource.calendar.leave
split_leaves = []
for leave_interval in leaves:
if leave_interval[2] and len(leave_interval[2]) > 1:
split_leaves += [(leave_interval[0], leave_interval[1], l) for l in leave_interval[2]]
else:
split_leaves += [(leave_interval[0], leave_interval[1], leave_interval[2])]
leaves = split_leaves
split_worked_leaves = []
for worked_leave_interval in real_worked_leaves:
if worked_leave_interval[2] and len(worked_leave_interval[2]) > 1:
split_worked_leaves += [(worked_leave_interval[0], worked_leave_interval[1], l) for l in worked_leave_interval[2]]
else:
split_worked_leaves += [(worked_leave_interval[0], worked_leave_interval[1], worked_leave_interval[2])]
real_worked_leaves = split_worked_leaves
# Attendances
version_vals += version._get_real_attendance_work_entry_vals(real_attendances)
for interval in real_worked_leaves:
work_entry_type = version._get_interval_leave_work_entry_type(interval, worked_leaves, bypassing_work_entry_type_codes)
# All benefits generated here are using datetimes converted from the employee's timezone
version_vals += [dict([
('name', "%s: %s" % (work_entry_type.name, employee.name)),
('date_start', interval[0].astimezone(pytz.utc).replace(tzinfo=None)),
('date_stop', interval[1].astimezone(pytz.utc).replace(tzinfo=None)),
('work_entry_type_id', work_entry_type.id),
('employee_id', employee.id),
('version_id', version.id),
('company_id', version.company_id.id),
('state', 'draft'),
] + version._get_more_vals_leave_interval(interval, worked_leaves))]
leaves_over_attendances = Intervals(leaves, keep_distinct=True) & real_leaves
for interval in real_leaves:
# Could happen when a leave is configured on the interface on a day for which the
# employee is not supposed to work, i.e. no attendance_ids on the calendar.
# In that case, do try to generate an empty work entry, as this would raise a
# sql constraint error
if interval[0] == interval[1]: # if start == stop
continue
leaves_over_interval = [l for l in leaves_over_attendances if l[0] >= interval[0] and l[1] <= interval[1]]
for leave_interval in [(l[0], l[1], interval[2]) for l in leaves_over_interval]:
leave_entry_type = version._get_interval_leave_work_entry_type(leave_interval, leaves, bypassing_work_entry_type_codes)
interval_leaves = [leave for leave in leaves if leave[2].work_entry_type_id.id == leave_entry_type.id]
if not interval_leaves:
# Maybe the computed leave type is not found. In that case, we use all leaves
interval_leaves = leaves
interval_start = leave_interval[0].astimezone(pytz.utc).replace(tzinfo=None)
interval_stop = leave_interval[1].astimezone(pytz.utc).replace(tzinfo=None)
version_vals += [dict([
('name', "%s%s" % (leave_entry_type.name + ": " if leave_entry_type else "", employee.name)),
('date_start', interval_start),
('date_stop', interval_stop),
('work_entry_type_id', leave_entry_type.id),
('employee_id', employee.id),
('company_id', version.company_id.id),
('version_id', version.id),
] + version._get_more_vals_leave_interval(interval, interval_leaves))]
return version_vals
# will override in attendance bridge to add overtime vals
def _get_real_attendances(self, attendances, leaves, worked_leaves):
return attendances - leaves - worked_leaves
def _get_work_entries_values(self, date_start, date_stop):
"""
Generate a work_entries list between date_start and date_stop for one version.
:return: list of dictionnary.
"""
if isinstance(date_start, datetime):
version_vals = self._get_version_work_entries_values(date_start, date_stop)
else:
version_vals = []
versions_by_tz = defaultdict(lambda: self.env['hr.version'])
for version in self:
versions_by_tz[version.resource_calendar_id.tz] += version
for version_tz, versions in versions_by_tz.items():
tz = pytz.timezone(version_tz) if version_tz else pytz.utc
version_vals += versions._get_version_work_entries_values(
tz.localize(date_start),
tz.localize(date_stop))
# {version_id: ([dates_start], [dates_stop])}
mapped_version_dates = defaultdict(lambda: ([], []))
for x in version_vals:
mapped_version_dates[x['version_id']][0].append(x['date_start'])
mapped_version_dates[x['version_id']][1].append(x['date_stop'])
for version in self:
# If we generate work_entries which exceeds date_start or date_stop, we change boundaries on version
if version_vals:
# Handle empty work entries for certain versions, could happen on an attendance based version
# NOTE: this does not handle date_stop or date_start not being present in vals
dates_stop = mapped_version_dates[version.id][1]
if dates_stop:
date_stop_max = max(dates_stop)
if date_stop_max > version.date_generated_to:
version.date_generated_to = date_stop_max
dates_start = mapped_version_dates[version.id][0]
if dates_start:
date_start_min = min(dates_start)
if date_start_min < version.date_generated_from:
version.date_generated_from = date_start_min
return version_vals
def has_static_work_entries(self):
# Static work entries as in the same are to be generated each month
# Useful to differentiate attendance based versions from regular ones
self.ensure_one()
return self.work_entry_source == 'calendar'
def generate_work_entries(self, date_start, date_stop, force=False):
# Generate work entries between 2 dates (datetime.date)
# To correctly englobe the period, the start and end periods are converted
# using the calendar timezone.
assert not isinstance(date_start, datetime)
assert not isinstance(date_stop, datetime)
date_start = datetime.combine(fields.Datetime.to_datetime(date_start), datetime.min.time())
date_stop = datetime.combine(fields.Datetime.to_datetime(date_stop), datetime.max.time())
versions_by_company_tz = defaultdict(lambda: self.env['hr.version'])
for version in self:
versions_by_company_tz[
version.company_id,
(version.resource_calendar_id or version.employee_id).tz,
] += version
utc = pytz.timezone('UTC')
new_work_entries = self.env['hr.work.entry']
for (company, version_tz), versions in versions_by_company_tz.items():
tz = pytz.timezone(version_tz) if version_tz else utc
date_start_tz = tz.localize(date_start).astimezone(utc).replace(tzinfo=None)
date_stop_tz = tz.localize(date_stop).astimezone(utc).replace(tzinfo=None)
new_work_entries += versions.with_user(SUPERUSER_ID).with_company(company)._generate_work_entries(
date_start_tz, date_stop_tz, force=force)
return new_work_entries
def _generate_work_entries(self, date_start, date_stop, force=False):
# Generate work entries between 2 dates (datetime.datetime)
# This method considers that the dates are correctly localized
# based on the target timezone
assert isinstance(date_start, datetime)
assert isinstance(date_stop, datetime)
self = self.with_context(tracking_disable=True) # noqa: PLW0642
vals_list = []
self.write({'last_generation_date': fields.Date.today()})
intervals_to_generate = defaultdict(lambda: self.env['hr.version'])
# In case the date_generated_from == date_generated_to, move it to the date_start to
# avoid trying to generate several months/years of history for old versions for which
# we've never generated the work entries.
self.filtered(lambda c: c.date_generated_from == c.date_generated_to).write({
'date_generated_from': date_start,
'date_generated_to': date_start,
})
domain_to_nullify = Domain(False)
work_entry_null_vals = {field: False for field in self.env["hr.work.entry.regeneration.wizard"]._work_entry_fields_to_nullify()}
for tz, versions in self.grouped("tz").items():
tz = pytz.timezone(tz) if tz else pytz.utc
for version in versions:
if not version.contract_date_start:
continue
version_start = tz.localize(fields.Datetime.to_datetime(version.date_start)).astimezone(pytz.utc).replace(tzinfo=None)
version_stop = tz.localize(datetime.combine(fields.Datetime.to_datetime(version.date_end or date_stop),
datetime.max.time())).astimezone(pytz.utc).replace(tzinfo=None)
if version_stop < date_stop:
if version.date_generated_from != version.date_generated_to:
domain_to_nullify |= Domain([
('version_id', '=', version.id),
('date', '>', version_stop.astimezone(tz)),
('date', '<=', date_stop.astimezone(tz)),
('state', '!=', 'validated'),
])
if date_start > version_stop or date_stop < version_start:
continue
date_start_work_entries = max(date_start, version_start)
date_stop_work_entries = min(date_stop, version_stop)
if force:
domain_to_nullify |= Domain([
('version_id', '=', version.id),
('date', '>=', date_start_work_entries.astimezone(tz).date()),
('date', '<=', date_stop_work_entries.astimezone(tz).date()),
('state', '!=', 'validated'),
])
intervals_to_generate[date_start_work_entries, date_stop_work_entries] |= version
continue
# For each version, we found each interval we must generate
# In some cases we do not want to set the generated dates beforehand, since attendance based work entries
# is more dynamic, we want to update the dates within the _get_work_entries_values function
last_generated_from = min(version.date_generated_from, version_stop)
if last_generated_from > date_start_work_entries:
version.date_generated_from = date_start_work_entries
intervals_to_generate[date_start_work_entries, last_generated_from] |= version
last_generated_to = max(version.date_generated_to, version_start)
if last_generated_to < date_stop_work_entries:
version.date_generated_to = date_stop_work_entries
intervals_to_generate[last_generated_to, date_stop_work_entries] |= version
for interval, versions in intervals_to_generate.items():
date_from, date_to = interval
vals_list.extend(versions._get_work_entries_values(date_from, date_to))
if domain_to_nullify != Domain.FALSE:
work_entries_to_nullify = self.env['hr.work.entry'].search(domain_to_nullify)
work_entries_to_nullify.write(work_entry_null_vals)
if not vals_list:
return self.env['hr.work.entry']
vals_list = self._generate_work_entries_postprocess(vals_list)
return self.env['hr.work.entry'].create(vals_list)
@api.model
def _generate_work_entries_postprocess_adapt_to_calendar(self, vals):
if 'work_entry_type_id' not in vals:
return False
return self.env['hr.work.entry.type'].browse(vals['work_entry_type_id']).is_leave
@api.model
def _generate_work_entries_postprocess(self, vals_list):
# Convert date_start/date_stop to date/duration
# Split work entries over 2 days due to timezone conversion
# Regroup work entries of the same type
mapped_periods = defaultdict(lambda: defaultdict(lambda: self.env['hr.employee']))
cached_periods = defaultdict(float)
tz_by_version = {}
def _get_tz(version_id):
if version_id in tz_by_version:
return tz_by_version[version_id]
version = self.env['hr.version'].browse(version_id)
tz = version.resource_calendar_id.tz or version.employee_id.resource_calendar_id.tz or version.company_id.resource_calendar_id.tz
if not tz:
raise UserError(_('Missing timezone for work entries generation.'))
tz = pytz.timezone(tz)
tz_by_version[version_id] = tz
return tz
new_vals_list = []
for vals in vals_list:
new_vals = vals.copy()
if not new_vals.get('date_start') or not new_vals.get('date_stop'):
new_vals.pop('date_start', False)
new_vals.pop('date_stop', False)
if 'duration' not in new_vals or 'date' not in new_vals:
raise UserError(_('Missing date or duration on work entry'))
new_vals_list.append(new_vals)
continue
date_start_utc = new_vals['date_start'] if new_vals['date_start'].tzinfo else pytz.UTC.localize(new_vals['date_start'])
date_stop_utc = new_vals['date_stop'] if new_vals['date_stop'].tzinfo else pytz.UTC.localize(new_vals['date_stop'])
tz = _get_tz(new_vals['version_id'])
local_start = date_start_utc.astimezone(tz)
local_stop = date_stop_utc.astimezone(tz)
# Handle multi-local-day spans
current = local_start + timedelta(microseconds=1) if local_start.time() == datetime.max.time() else local_start
while current < local_stop:
next_local_midnight = tz.localize(datetime.combine(current.date() + timedelta(days=1), time.min) - timedelta(microseconds=1))
segment_end = min(local_stop, next_local_midnight)
partial_vals = new_vals.copy()
# Convert partial segment back to UTC for consistency
partial_vals['date_start'] = current.astimezone(pytz.UTC)
partial_vals['date_stop'] = segment_end.astimezone(pytz.UTC)
new_vals_list.append(partial_vals)
current = segment_end + timedelta(microseconds=1)
vals_list = new_vals_list
for vals in vals_list:
if not vals.get('date_start') or not vals.get('date_stop'):
continue
date_start = vals['date_start']
date_stop = vals['date_stop']
tz = _get_tz(vals['version_id'])
if not self._generate_work_entries_postprocess_adapt_to_calendar(vals):
vals['date'] = date_start.astimezone(tz).date()
if 'duration' in vals:
continue
elif (date_start, date_stop) in cached_periods:
vals['duration'] = cached_periods[date_start, date_stop]
else:
dt = date_stop - date_start
duration = round(dt.total_seconds()) / 3600 # Number of hours
cached_periods[date_start, date_stop] = duration
vals['duration'] = duration
continue
version = self.env['hr.version'].browse(vals['version_id'])
calendar = version.resource_calendar_id
if not calendar:
vals['date'] = date_start.astimezone(tz).date()
vals['duration'] = 0.0
continue
employee = version.employee_id
mapped_periods[date_start, date_stop][calendar] |= employee
# {(date_start, date_stop): {calendar: {'hours': foo}}}
mapped_version_data = defaultdict(lambda: defaultdict(lambda: {'hours': 0.0}))
for (date_start, date_stop), employees_by_calendar in mapped_periods.items():
for calendar, employees in employees_by_calendar.items():
mapped_version_data[date_start, date_stop][calendar] = employees._get_work_days_data_batch(
date_start, date_stop, compute_leaves=False, calendar=calendar)
for vals in vals_list:
if 'duration' not in vals:
date_start = vals['date_start']
date_stop = vals['date_stop']
version = self.env['hr.version'].browse(vals['version_id'])
calendar = version.resource_calendar_id
employee = version.employee_id
tz = _get_tz(vals['version_id'])
vals['date'] = date_start.astimezone(tz).date()
vals['duration'] = mapped_version_data[date_start, date_stop][calendar][employee.id]['hours'] if calendar else 0.0
vals.pop('date_start', False)
vals.pop('date_stop', False)
# Now merge similar work entries on the same day
merged_vals = {}
for vals in vals_list:
if float_is_zero(vals['duration'], 3):
continue
key = (
vals['date'],
vals.get('work_entry_type_id', False),
vals['employee_id'],
vals['version_id'],
vals.get('company_id', False),
)
if key in merged_vals:
merged_vals[key]['duration'] += vals.get('duration', 0.0)
else:
merged_vals[key] = vals.copy()
return list(merged_vals.values())
def _remove_work_entries(self):
''' Remove all work_entries that are outside contract period (function used after writing new start or/and end date) '''
all_we_to_unlink = self.env['hr.work.entry']
for version in self:
date_start = fields.Datetime.to_datetime(version.date_start)
if version.date_generated_from < date_start:
we_to_remove = self.env['hr.work.entry'].search([('date', '<', date_start), ('version_id', '=', version.id)])
if we_to_remove:
version.date_generated_from = date_start
all_we_to_unlink |= we_to_remove
if not version.date_end:
continue
date_end = datetime.combine(version.date_end, datetime.max.time())
if version.date_generated_to > date_end:
we_to_remove = self.env['hr.work.entry'].search([('date', '>', date_end), ('version_id', '=', version.id)])
if we_to_remove:
version.date_generated_to = date_end
all_we_to_unlink |= we_to_remove
all_we_to_unlink.unlink()
def _cancel_work_entries(self):
if not self:
return
domains = []
for version in self:
date_start = fields.Datetime.to_datetime(version.date_start)
version_domain = Domain([
('version_id', '=', version.id),
('date', '>=', date_start),
])
if version.date_end:
date_end = datetime.combine(version.date_end, datetime.max.time())
version_domain &= Domain('date', '<=', date_end)
domains.append(version_domain)
domain = Domain.OR(domains) & Domain('state', '!=', 'validated')
work_entries = self.env['hr.work.entry'].sudo().search(domain)
if work_entries:
work_entries.unlink()
def write(self, vals):
result = super().write(vals)
if self.env.context.get('salary_simulation'):
return result
if vals.get('contract_date_end') or vals.get('contract_date_start') or vals.get('date_version'):
self.sudo()._remove_work_entries()
dependent_fields = self._get_fields_that_recompute_we()
if any(key in dependent_fields for key in vals):
for version_sudo in self.sudo():
date_from = max(version_sudo.date_start, version_sudo.date_generated_from.date())
date_to = min(version_sudo.date_end or date.max, version_sudo.date_generated_to.date())
if date_from != date_to and self.employee_id:
version_sudo._recompute_work_entries(date_from, date_to)
return result
def unlink(self):
self._cancel_work_entries()
return super().unlink()
def _recompute_work_entries(self, date_from, date_to):
self.ensure_one()
if self.employee_id:
wizard = self.env['hr.work.entry.regeneration.wizard'].create({
'employee_ids': [Command.set(self.employee_id.ids)],
'date_from': date_from,
'date_to': date_to,
})
wizard.with_context(work_entry_skip_validation=True, active_test=False).regenerate_work_entries()
def _get_fields_that_recompute_we(self):
# Returns the fields that should recompute the work entries
return ['resource_calendar_id', 'work_entry_source']
@api.model
def _cron_generate_missing_work_entries(self):
# retrieve versions for the current month
today = fields.Date.today()
start = datetime.combine(today + relativedelta(day=1), time.min)
stop = datetime.combine(today + relativedelta(months=1, day=31), time.max)
all_versions = self.env['hr.employee']._get_all_versions_with_contract_overlap_with_period(start.date(), stop.date())
# determine versions to do (the ones whose generated dates have open periods this month)
versions_todo = all_versions.filtered(
lambda v:
(v.date_generated_from > start or v.date_generated_to < stop) and
(not v.last_generation_date or v.last_generation_date < today))
if not versions_todo:
return
version_todo_count = len(versions_todo)
# Filter versions by company, work entries generation is not supposed to be called on
# versions from differents companies, as we will retrieve the resource.calendar.leave
# and we don't want to mix everything up. The other versions will be treated when the
# cron is re-triggered
versions_todo = versions_todo.filtered(lambda v: v.company_id == versions_todo[0].company_id)
# generate a batch of work entries
BATCH_SIZE = 100
# Since attendance based are more volatile for their work entries generation
# it can happen that the date_generated_from and date_generated_to fields are not
# pushed to start and stop
# It is more interesting for batching to process statically generated work entries first
# since we get benefits from having multiple versions on the same calendar
versions_todo = versions_todo.sorted(key=lambda v: 1 if v.has_static_work_entries() else 100)
versions_todo = versions_todo[:BATCH_SIZE].generate_work_entries(start.date(), stop.date(), False)
# if necessary, retrigger the cron to generate more work entries
if version_todo_count > BATCH_SIZE:
self.env.ref('hr_work_entry.ir_cron_generate_missing_work_entries')._trigger()

View file

@ -1,68 +1,68 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import itertools
from collections import defaultdict
from contextlib import contextmanager
from datetime import datetime, time, timedelta
from itertools import chain
from dateutil.relativedelta import relativedelta
import pytz
from psycopg2 import OperationalError
from odoo import _, api, fields, models, tools
from odoo.osv import expression
from odoo import _, api, fields, models
from odoo.exceptions import UserError, ValidationError
from odoo.fields import Domain
from odoo.tools import float_compare
from odoo.tools.intervals import Intervals
class HrWorkEntry(models.Model):
_name = 'hr.work.entry'
_description = 'HR Work Entry'
_order = 'conflict desc,state,date_start'
_order = 'create_date'
name = fields.Char(required=True, compute='_compute_name', store=True, readonly=False)
name = fields.Char()
active = fields.Boolean(default=True)
employee_id = fields.Many2one('hr.employee', required=True, domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]", index=True)
date_start = fields.Datetime(required=True, string='From')
date_stop = fields.Datetime(compute='_compute_date_stop', store=True, readonly=False, string='To')
duration = fields.Float(compute='_compute_duration', store=True, string="Duration", readonly=False)
work_entry_type_id = fields.Many2one('hr.work.entry.type', index=True, default=lambda self: self.env['hr.work.entry.type'].search([], limit=1))
version_id = fields.Many2one('hr.version', string="Employee Record", required=True, index=True)
work_entry_source = fields.Selection(related='version_id.work_entry_source')
date = fields.Date(required=True)
duration = fields.Float(string="Duration", default=8)
work_entry_type_id = fields.Many2one(
'hr.work.entry.type',
index=True,
default=lambda self: self.env['hr.work.entry.type'].search([], limit=1),
domain=lambda self: self._get_work_entry_type_domain())
display_code = fields.Char(related='work_entry_type_id.display_code')
code = fields.Char(related='work_entry_type_id.code')
external_code = fields.Char(related='work_entry_type_id.external_code')
color = fields.Integer(related='work_entry_type_id.color', readonly=True)
state = fields.Selection([
('draft', 'Draft'),
('validated', 'Validated'),
('conflict', 'Conflict'),
('draft', 'New'),
('conflict', 'In Conflict'),
('validated', 'In Payslip'),
('cancelled', 'Cancelled')
], default='draft')
company_id = fields.Many2one('res.company', string='Company', readonly=True, required=True,
default=lambda self: self.env.company)
conflict = fields.Boolean('Conflicts', compute='_compute_conflict', store=True) # Used to show conflicting work entries first
department_id = fields.Many2one('hr.department', related='employee_id.department_id', store=True)
amount_rate = fields.Float("Pay rate")
country_id = fields.Many2one('res.country', related='employee_id.company_id.country_id', search='_search_country_id')
# There is no way for _error_checking() to detect conflicts in work
# entries that have been introduced in concurrent transactions, because of the transaction
# isolation.
# So if 2 transactions create work entries in parallel it is possible to create a conflict
# that will not be visible by either transaction. There is no way to detect conflicts
# between different records in a safe manner unless a SQL constraint is used, e.g. via
# an EXCLUSION constraint [1]. This (obscure) type of constraint allows comparing 2 rows
# using special operator classes and it also supports partial WHERE clauses. Similarly to
# CHECK constraints, it's backed by an index.
# 1: https://www.postgresql.org/docs/9.6/sql-createtable.html#SQL-CREATETABLE-EXCLUDE
_sql_constraints = [
('_work_entry_has_end', 'check (date_stop IS NOT NULL)', 'Work entry must end. Please define an end date or a duration.'),
('_work_entry_start_before_end', 'check (date_stop > date_start)', 'Starting time should be before end time.'),
(
'_work_entries_no_validated_conflict',
"""
EXCLUDE USING GIST (
tsrange(date_start, date_stop, '()') WITH &&,
int4range(employee_id, employee_id, '[]') WITH =
)
WHERE (state = 'validated' AND active = TRUE)
""",
'Validated work entries cannot overlap'
),
]
# FROM 7s by query to 2ms (with 2.6 millions entries)
_contract_date_start_stop_idx = models.Index("(version_id, date) WHERE state IN ('draft', 'validated')")
def init(self):
tools.create_index(self._cr, "hr_work_entry_date_start_date_stop_index", self._table, ["date_start", "date_stop"])
@api.constrains('duration')
def _check_duration(self):
for work_entry in self:
if float_compare(work_entry.duration, 0, 3) <= 0 or float_compare(work_entry.duration, 24, 3) > 0:
raise ValidationError(self.env._("Duration must be positive and cannot exceed 24 hours."))
@api.depends('display_code', 'duration')
def _compute_display_name(self):
for work_entry in self:
duration = str(timedelta(hours=work_entry.duration)).split(":")
work_entry.display_name = "%s - %sh%s" % (work_entry.work_entry_type_id.name, duration[0], duration[1])
@api.depends('work_entry_type_id', 'employee_id')
def _compute_name(self):
@ -77,45 +77,41 @@ class HrWorkEntry(models.Model):
for rec in self:
rec.conflict = rec.state == 'conflict'
@api.depends('date_stop', 'date_start')
def _compute_duration(self):
durations = self._get_duration_batch()
for work_entry in self:
work_entry.duration = durations[work_entry.id]
@api.onchange('employee_id', 'date')
def _onchange_version_id(self):
vals = {
'employee_id': self.employee_id.id,
'date': self.date,
}
try:
res = self._set_current_contract(vals)
except ValidationError:
return
if version_id := res.get('version_id'):
self.version_id = version_id
@api.depends('date_start', 'duration')
def _compute_date_stop(self):
for work_entry in self.filtered(lambda w: w.date_start and w.duration):
work_entry.date_stop = work_entry.date_start + relativedelta(hours=work_entry.duration)
@api.model
def _set_current_contract(self, vals):
if not vals.get('version_id') and vals.get('date') and vals.get('employee_id'):
employee = self.env['hr.employee'].browse(vals.get('employee_id'))
active_version = employee._get_version(vals['date'])
return dict(vals, version_id=active_version.id)
return vals
def _get_duration_batch(self):
result = {}
cached_periods = defaultdict(float)
for work_entry in self:
date_start = work_entry.date_start
date_stop = work_entry.date_stop
if not date_start or not date_stop:
result[work_entry.id] = 0.0
continue
if (date_start, date_stop) in cached_periods:
result[work_entry.id] = cached_periods[(date_start, date_stop)]
else:
dt = date_stop - date_start
duration = dt.days * 24 + dt.seconds / 3600 # Number of hours
cached_periods[(date_start, date_stop)] = duration
result[work_entry.id] = duration
return result
# YTI TODO: Remove me in master: Deprecated, use _get_duration_batch instead
def _get_duration(self, date_start, date_stop):
return self._get_duration_batch()[self.id]
@api.model
def get_unusual_days(self, date_from, date_to=None):
return self.env.company.resource_calendar_id._get_unusual_days(
datetime.combine(fields.Date.from_string(date_from), time.min).replace(tzinfo=pytz.utc),
datetime.combine(fields.Date.from_string(date_to), time.max).replace(tzinfo=pytz.utc),
self.company_id,
)
def action_validate(self):
"""
Try to validate work entries.
If some errors are found, set `state` to conflict for conflicting work entries
and validation fails.
:return: True if validation succeded
:return: True if validation succeeded
"""
work_entries = self.filtered(lambda work_entry: work_entry.state != 'validated')
if not work_entries._check_if_error():
@ -123,52 +119,135 @@ class HrWorkEntry(models.Model):
return True
return False
def action_split(self, vals):
self.ensure_one()
if self.duration < 1:
raise UserError(self.env._("You can't split a work entry with less than 1 hour."))
split_duration = vals['duration']
if self.duration <= split_duration:
raise UserError(
self.env._(
"Split work entry duration has to be less than the existing work entry duration."
)
)
self.duration -= split_duration
split_work_entry = self.copy()
split_work_entry.write(vals)
return split_work_entry.id
def _check_if_error(self):
if not self:
return False
undefined_type = self.filtered(lambda b: not b.work_entry_type_id)
undefined_type.write({'state': 'conflict'})
conflict = self._mark_conflicting_work_entries(min(self.mapped('date_start')), max(self.mapped('date_stop')))
return undefined_type or conflict
conflict = self._mark_conflicting_work_entries(min(self.mapped('date')), max(self.mapped('date')))
outside_calendar = self._mark_leaves_outside_schedule()
already_validated_days = self._mark_already_validated_days()
return undefined_type or conflict or outside_calendar or already_validated_days
def _mark_conflicting_work_entries(self, start, stop):
"""
Set `state` to `conflict` for overlapping work entries
between two dates.
If `self.ids` is truthy then check conflicts with the corresponding work entries.
Return True if overlapping work entries were detected.
Set `state` to `conflict` for work entries where, for the same employee and day,
the total duration exceeds 24 hours.
Return True if such entries are found.
"""
# Use the postgresql range type `tsrange` which is a range of timestamp
# It supports the intersection operator (&&) useful to detect overlap.
# use '()' to exlude the lower and upper bounds of the range.
# Filter on date_start and date_stop (both indexed) in the EXISTS clause to
# limit the resulting set size and fasten the query.
self.flush_model(['date_start', 'date_stop', 'employee_id', 'active'])
self.flush_model(['date', 'duration', 'employee_id', 'active'])
query = """
SELECT b1.id,
b2.id
FROM hr_work_entry b1
JOIN hr_work_entry b2
ON b1.employee_id = b2.employee_id
AND b1.id <> b2.id
WHERE b1.date_start <= %(stop)s
AND b1.date_stop >= %(start)s
AND b1.active = TRUE
AND b2.active = TRUE
AND tsrange(b1.date_start, b1.date_stop, '()') && tsrange(b2.date_start, b2.date_stop, '()')
AND {}
""".format("b2.id IN %(ids)s" if self.ids else "b2.date_start <= %(stop)s AND b2.date_stop >= %(start)s")
self.env.cr.execute(query, {"stop": stop, "start": start, "ids": tuple(self.ids)})
conflicts = set(itertools.chain.from_iterable(self.env.cr.fetchall()))
self.browse(conflicts).write({
'state': 'conflict',
WITH excessive_days AS (
SELECT employee_id, date
FROM hr_work_entry
WHERE active = TRUE
AND date BETWEEN %(start)s AND %(stop)s
AND employee_id IN %(employee_ids)s
GROUP BY employee_id, date
HAVING 0 >= SUM(duration) OR SUM(duration) > 24
)
SELECT we.id
FROM hr_work_entry we
JOIN excessive_days ed
ON we.employee_id = ed.employee_id
AND we.date = ed.date
WHERE we.active = TRUE
"""
self.env.cr.execute(query, {
"start": start,
"stop": stop,
'employee_ids': tuple(self.employee_id.ids),
})
return bool(conflicts)
conflict_ids = [row[0] for row in self.env.cr.fetchall()]
self.browse(conflict_ids).write({'state': 'conflict'})
return bool(conflict_ids)
def _get_leaves_entries_outside_schedule(self):
return self.filtered(lambda w: w.work_entry_type_id.is_leave and w.state not in ('validated', 'cancelled'))
def _mark_leaves_outside_schedule(self):
"""
Check leave work entries in `self` which are completely outside
the contract's theoretical calendar schedule. Mark them as conflicting.
:return: leave work entries completely outside the contract's calendar
"""
work_entries = self._get_leaves_entries_outside_schedule()
entries_by_calendar = defaultdict(lambda: self.env['hr.work.entry'])
for work_entry in work_entries:
calendar = work_entry.version_id.resource_calendar_id
entries_by_calendar[calendar] |= work_entry
outside_entries = self.env['hr.work.entry']
for calendar, entries in entries_by_calendar.items():
if not calendar or calendar.flexible_hours:
continue
datetime_start = datetime.combine(min(entries.mapped('date')), time.min)
datetime_stop = datetime.combine(max(entries.mapped('date')), time.max)
if calendar:
calendar_intervals = calendar._attendance_intervals_batch(pytz.utc.localize(datetime_start), pytz.utc.localize(datetime_stop))[False]
else:
calendar_intervals = Intervals([(pytz.utc.localize(datetime_start), pytz.utc.localize(datetime_stop), self.env['resource.calendar.attendance'])])
entries_intervals = entries._to_intervals()
overlapping_entries = self._from_intervals(entries_intervals & calendar_intervals)
outside_entries |= entries - overlapping_entries
outside_entries.write({'state': 'conflict'})
return bool(outside_entries)
def _mark_already_validated_days(self):
invalid_entries = self.env['hr.work.entry']
validated_work_entries = self.env["hr.work.entry"].search([
('state', '=', 'validated'),
('date', '<=', max(self.mapped('date'))),
('date', '>=', min(self.mapped('date'))),
('company_id', '=', self.env.company.id)
])
validated_entries_by_employee_date = defaultdict(lambda: self.env['hr.work.entry'])
for entry in validated_work_entries:
validated_entries_by_employee_date[entry.employee_id, entry.date] += entry
for entry in self:
if validated_entries_by_employee_date[entry.employee_id, entry.date]:
invalid_entries += entry
invalid_entries.write({'state': 'conflict'})
return bool(invalid_entries)
def _to_intervals(self):
return Intervals(
((datetime.combine(w.date, time.min).replace(tzinfo=pytz.utc), datetime.combine(w.date, time.max).replace(tzinfo=pytz.utc), w) for w in self),
keep_distinct=True)
@api.model
def _from_intervals(self, intervals):
return self.browse(chain.from_iterable(recs.ids for start, end, recs in intervals))
@api.model_create_multi
def create(self, vals_list):
vals_list = [self._set_current_contract(vals) for vals in vals_list]
company_by_employee_id = {}
for vals in vals_list:
if (
not 'amount_rate' in vals
and (work_entry_type_id := vals.get('work_entry_type_id'))
):
work_entry_type = self.env['hr.work.entry.type'].browse(work_entry_type_id)
vals['amount_rate'] = work_entry_type.amount_rate
if vals.get('company_id'):
continue
if vals['employee_id'] not in company_by_employee_id:
@ -180,7 +259,7 @@ class HrWorkEntry(models.Model):
return work_entries
def write(self, vals):
skip_check = not bool({'date_start', 'date_stop', 'employee_id', 'work_entry_type_id', 'active'} & vals.keys())
skip_check = not bool({'date', 'duration', 'employee_id', 'work_entry_type_id', 'active'} & vals.keys())
if 'state' in vals:
if vals['state'] == 'draft':
vals['active'] = True
@ -195,7 +274,12 @@ class HrWorkEntry(models.Model):
if 'employee_id' in vals and vals['employee_id']:
employee_ids += [vals['employee_id']]
with self._error_checking(skip=skip_check, employee_ids=employee_ids):
return super(HrWorkEntry, self).write(vals)
return super().write(vals)
@api.ondelete(at_uninstall=False)
def _unlink_except_validated_work_entries(self):
if any(w.state == 'validated' for w in self):
raise UserError(_("This work entry is validated. You can't delete it."))
def unlink(self):
employee_ids = self.employee_id.ids
@ -219,16 +303,16 @@ class HrWorkEntry(models.Model):
"""
try:
skip = skip or self.env.context.get('hr_work_entry_no_check', False)
start = start or min(self.mapped('date_start'), default=False)
stop = stop or max(self.mapped('date_stop'), default=False)
start = start or min(self.mapped('date'), default=False)
stop = stop or max(self.mapped('date'), default=False)
if not skip and start and stop:
domain = [
('date_start', '<', stop),
('date_stop', '>', start),
('state', 'not in', ('validated', 'cancelled')),
]
domain = (
Domain('date', '<=', stop)
& Domain('date', '>=', start)
& Domain('state', 'not in', ('validated', 'cancelled'))
)
if employee_ids:
domain = expression.AND([domain, [('employee_id', 'in', list(employee_ids))]])
domain &= Domain('employee_id', 'in', list(employee_ids))
work_entries = self.sudo().with_context(hr_work_entry_no_check=True).search(domain)
work_entries._reset_conflicting_state()
yield
@ -243,34 +327,10 @@ class HrWorkEntry(models.Model):
# no need to reload work entries.
work_entries.exists()._check_if_error()
def _get_work_entry_type_domain(self):
if len(self.env.companies.country_id.ids) > 1:
return [('country_id', '=', False)]
return ['|', ('country_id', '=', False), ('country_id', 'in', self.env.companies.country_id.ids)]
class HrWorkEntryType(models.Model):
_name = 'hr.work.entry.type'
_description = 'HR Work Entry Type'
name = fields.Char(required=True, translate=True)
code = fields.Char(required=True, help="Careful, the Code is used in many references, changing it could lead to unwanted changes.")
color = fields.Integer(default=0)
sequence = fields.Integer(default=25)
active = fields.Boolean(
'Active', default=True,
help="If the active field is set to false, it will allow you to hide the work entry type without removing it.")
_sql_constraints = [
('unique_work_entry_code', 'UNIQUE(code)', 'The same code cannot be associated to multiple work entry types.'),
]
class Contacts(models.Model):
""" Personnal calendar filter """
_name = 'hr.user.work.entry.employee'
_description = 'Work Entries Employees'
user_id = fields.Many2one('res.users', 'Me', required=True, default=lambda self: self.env.user)
employee_id = fields.Many2one('hr.employee', 'Employee', required=True)
active = fields.Boolean('Active', default=True)
_sql_constraints = [
('user_id_employee_id_unique', 'UNIQUE(user_id,employee_id)', 'You cannot have the same employee twice.')
]
def _search_country_id(self, operator, value):
return [('employee_id.company_id.partner_id.country_id', operator, value)]

View file

@ -0,0 +1,68 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
from odoo.exceptions import UserError
class HrWorkEntryType(models.Model):
_name = 'hr.work.entry.type'
_description = 'HR Work Entry Type'
name = fields.Char(required=True, translate=True)
display_code = fields.Char(string="Display Code", size=3, translate=True, help="This code can be changed, it is only for a display purpose (3 letters max)")
code = fields.Char(string="Payroll Code", required=True, help="Careful, the Code is used in many references, changing it could lead to unwanted changes.")
external_code = fields.Char(help="Use this code to export your data to a third party")
color = fields.Integer(default=0)
sequence = fields.Integer(default=25)
active = fields.Boolean(
'Active', default=True,
help="If the active field is set to false, it will allow you to hide the work entry type without removing it.")
country_id = fields.Many2one(
'res.country',
string="Country",
domain=lambda self: [('id', 'in', self.env.companies.country_id.ids)]
)
country_code = fields.Char(related='country_id.code')
is_leave = fields.Boolean(
default=False, string="Time Off", help="Allow the work entry type to be linked with time off types.")
is_work = fields.Boolean(
compute='_compute_is_work', inverse='_inverse_is_work', string="Working Time", readonly=False,
help="If checked, the work entry is counted as work time in the working schedule")
amount_rate = fields.Float(
string="Rate",
default=1.0,
help="If you want the hours should be paid double, the rate should be 200%.")
is_extra_hours = fields.Boolean(
string="Added to Monthly Pay",
help="Check this setting if you want the hours to be considered as extra time and added as a bonus to the basic salary.")
@api.constrains('country_id')
def _check_work_entry_type_country(self):
if self.env.ref('hr_work_entry.work_entry_type_attendance') in self:
raise UserError(_("You can't change the country of this specific work entry type."))
elif not self.env.context.get('install_mode') and self.env['hr.work.entry'].sudo().search_count([('work_entry_type_id', 'in', self.ids)], limit=1):
raise UserError(_("You can't change the Country of this work entry type cause it's currently used by the system. You need to delete related working entries first."))
@api.constrains('code', 'country_id')
def _check_code_unicity(self):
similar_work_entry_types = self.search([
('code', 'in', self.mapped('code')),
('country_id', 'in', self.country_id.ids + [False]),
('id', 'not in', self.ids)
])
for work_entry_type in self:
invalid_work_entry_types = similar_work_entry_types.filtered_domain([
('code', '=', work_entry_type.code),
('country_id', 'in', self.country_id.ids + [False]),
])
if invalid_work_entry_types:
raise UserError(_("The same code cannot be associated to multiple work entry types (%s)", ', '.join(list(set(invalid_work_entry_types.mapped('code'))))))
@api.depends('is_leave')
def _compute_is_work(self):
for record in self:
record.is_work = not record.is_leave
def _inverse_is_work(self):
for record in self:
record.is_leave = not record.is_work

View file

@ -0,0 +1,15 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, models
class ResourceCalendar(models.Model):
_inherit = 'resource.calendar'
# Override the method to add 'attendance_ids.work_entry_type_id.is_leave' to the dependencies
@api.depends('attendance_ids.work_entry_type_id.is_leave')
def _compute_hours_per_week(self):
super()._compute_hours_per_week()
def _get_global_attendances(self):
return super()._get_global_attendances().filtered(lambda a: not a.work_entry_type_id.is_leave)

View file

@ -1,4 +1,3 @@
# -*- coding:utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models, fields
@ -19,15 +18,5 @@ class ResourceCalendarAttendance(models.Model):
res['work_entry_type_id'] = self.work_entry_type_id.id
return res
class ResourceCalendarLeave(models.Model):
_inherit = 'resource.calendar.leaves'
work_entry_type_id = fields.Many2one(
'hr.work.entry.type', 'Work Entry Type',
groups="hr.group_hr_user")
def _copy_leave_vals(self):
res = super()._copy_leave_vals()
res['work_entry_type_id'] = self.work_entry_type_id.id
return res
def _is_work_period(self):
return not self.work_entry_type_id.is_leave and super()._is_work_period()

View file

@ -0,0 +1,16 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models, fields
class ResourceCalendarLeaves(models.Model):
_inherit = 'resource.calendar.leaves'
work_entry_type_id = fields.Many2one(
'hr.work.entry.type', 'Work Entry Type',
groups="hr.group_hr_user")
def _copy_leave_vals(self):
res = super()._copy_leave_vals()
res['work_entry_type_id'] = self.work_entry_type_id.id
return res

View file

@ -1,15 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo noupdate="1">
<record id="hr_user_work_entry_employee" model="ir.rule">
<field name="name">Work entries/Employee calendar filter: only self</field>
<field name="model_id" ref="model_hr_user_work_entry_employee"/>
<field name="domain_force">[('user_id', '=', user.id)]</field>
<field name="groups" eval="[(4, ref('base.group_user'))]"/>
<field name="perm_create" eval="1"/>
<field name="perm_write" eval="1"/>
<field name="perm_unlink" eval="1"/>
<field name="perm_read" eval="0"/>
</record>
<record id="hr_user_work_entry_employee" model="ir.rule">
<field name="name">Work entries/Employee calendar filter: only self</field>
<field name="model_id" ref="model_hr_user_work_entry_employee"/>
<field name="domain_force">[('user_id', '=', user.id)]</field>
<field name="groups" eval="[(4, ref('base.group_user'))]"/>
<field name="perm_create" eval="1"/>
<field name="perm_write" eval="1"/>
<field name="perm_unlink" eval="1"/>
<field name="perm_read" eval="0"/>
</record>
<record id="ir_rule_hr_work_entry_type_multi_company" model="ir.rule">
<field name="name">HR Work Entry: Multi Company</field>
<field name="model_id" ref="model_hr_work_entry_type"/>
<field name="domain_force">[('country_id', 'in', user.env.companies.mapped('country_id').ids + [False])]</field>
</record>
<record id="ir_rule_hr_work_entry_multi_company" model="ir.rule">
<field name="name">HR Work Entry Contract: Multi Company</field>
<field name="model_id" ref="model_hr_work_entry"/>
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
</record>
</odoo>

View file

@ -3,4 +3,5 @@ access_hr_work_entry_officer,access_hr_work_entry_officer,model_hr_work_entry,hr
access_hr_work_entry_system,access_hr_work_entry_system,model_hr_work_entry,base.group_system,1,1,1,1
access_hr_work_entry_type_officer,access_hr_work_entry_type_officer,model_hr_work_entry_type,hr.group_hr_user,1,0,0,0
access_hr_work_entry_type_manager,access_hr_work_entry_type_manager,model_hr_work_entry_type,hr.group_hr_manager,1,1,1,1
access_hr_work_entry_employee,access_hr_work_entry_employee,model_hr_user_work_entry_employee,hr.group_hr_user,1,1,1,1
access_hr_work_entry_employee,access_hr_work_entry_employee,model_hr_user_work_entry_employee,hr.group_hr_user,1,1,1,1
access_hr_work_entry_regeneration_wizard,access_hr_work_entry_regeneration_wizard,model_hr_work_entry_regeneration_wizard,hr.group_hr_manager,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
3 access_hr_work_entry_system access_hr_work_entry_system model_hr_work_entry base.group_system 1 1 1 1
4 access_hr_work_entry_type_officer access_hr_work_entry_type_officer model_hr_work_entry_type hr.group_hr_user 1 0 0 0
5 access_hr_work_entry_type_manager access_hr_work_entry_type_manager model_hr_work_entry_type hr.group_hr_manager 1 1 1 1
6 access_hr_work_entry_employee access_hr_work_entry_employee model_hr_user_work_entry_employee hr.group_hr_user 1 1 1 1
7 access_hr_work_entry_regeneration_wizard access_hr_work_entry_regeneration_wizard model_hr_work_entry_regeneration_wizard hr.group_hr_manager 1 1 1 1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -0,0 +1 @@
<svg width="50" height="50" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg"><path d="M0 12.5h50V38a4 4 0 0 1-4 4H0V12.5Z" fill="#985184"/><path d="M4 20.5a4 4 0 0 1-4-4V12a4 4 0 0 1 4-4h46v8.5a4 4 0 0 1-4 4H4Z" fill="#2EBCFA"/><path d="M0 16h50v4a4 4 0 0 1-4 4H4a4 4 0 0 1-4-4v-4Z" fill="#144496"/><path d="M25 28a9 9 0 0 0-9 9h10a9 9 0 0 0 9-9H25Z" fill="#fff"/><circle cx="25" cy="19" r="6" fill="#fff"/></svg>

After

Width:  |  Height:  |  Size: 420 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

View file

@ -0,0 +1,46 @@
import { registry } from "@web/core/registry";
import {
Many2ManyTagsAvatarEmployeeField,
many2ManyTagsAvatarEmployeeField,
} from "@hr/views/fields/many2many_avatar_employee_field/many2many_avatar_employee_field";
import { Many2ManyAvatarUserTagsList } from "@mail/views/web/fields/many2many_avatar_user_field/many2many_avatar_user_field";
export class Many2ManyAvatarUserTagsListError extends Many2ManyAvatarUserTagsList {
static template = "hr_work_entry.Many2ManyAvatarUserTagsListError";
}
export class Many2ManyTagsAvatarEmployeeErrorField extends Many2ManyTagsAvatarEmployeeField {
static props = {
...Many2ManyTagsAvatarEmployeeField.props,
inErrorField: { type: String, optional: true },
};
static components = {
...Many2ManyTagsAvatarEmployeeField.components,
TagsList: Many2ManyAvatarUserTagsListError,
};
/**
* @override
*/
getTagProps(record) {
return {
...super.getTagProps(record),
inError: this.props.record.data[this.props.inErrorField].currentIds.includes(
record.resId
),
};
}
}
export const many2ManyTagsAvatarEmployeeErrorField = {
...many2ManyTagsAvatarEmployeeField,
component: Many2ManyTagsAvatarEmployeeErrorField,
extractProps: (fieldInfo, dynamicInfo) => ({
...many2ManyTagsAvatarEmployeeField.extractProps(fieldInfo, dynamicInfo),
inErrorField: fieldInfo.attrs.in_error,
}),
};
registry
.category("fields")
.add("many2many_avatar_employee_class", many2ManyTagsAvatarEmployeeErrorField);

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8" ?>
<template>
<t t-name="hr_work_entry.Many2ManyAvatarUserTagsListError" t-inherit="mail.Many2ManyAvatarUserTagsList" t-inherit-mode="primary">
<xpath expr="//span[hasclass('o_tag')]" position="attributes">
<attribute name="t-attf-class" separator=" " add="#{tag.inError ? 'text-danger' : ''}"/>
</xpath>
<div t-if="props.displayText" position="after">
<i t-if="tag.inError" class="ms-1 fa fa-lock z-1"/>
</div>
</t>
</template>

View file

@ -0,0 +1,27 @@
import { registry } from "@web/core/registry";
import { RadioField, radioField } from "@web/views/fields/radio/radio_field";
import { _t } from "@web/core/l10n/translation";
export class WorkEntrySourceField extends RadioField {
static template = "hr_work_entry.WorkEntrySourceField";
get isFullyFlexible() {
return !this.props.record.data.resource_calendar_id;
}
get tooltipWarning() {
return JSON.stringify({
"text" : _t("Invalid option: For fully flexible calendars, the work entry source cannot be 'Working Hours'."),
})
}
}
export const workEntrySourceField = {
...radioField,
component: WorkEntrySourceField,
fieldDependencies: [
{ name: "resource_calendar_id", type: "many2one", relation: "resource.calendar" },
],
};
registry.category("fields").add("work_entry_source_field", workEntrySourceField);

View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
<t t-name="hr_work_entry.WorkEntrySourceField" t-inherit="web.RadioField">
<xpath expr="//input[hasclass('o_radio_input')]" position="attributes">
<attribute name="t-att-disabled">props.readonly or (item[0] === 'calendar' and isFullyFlexible)</attribute>
</xpath>
<xpath expr="//div[hasclass('o_radio_item')]" position="inside">
<span t-if="props.readonly or (item[0] === 'calendar' and item[0] === value and isFullyFlexible)"
class="fa fa-exclamation-triangle text-danger o_work_entry_source_warning ms-3"
data-tooltip-template="hr_work_entry.WorkEntrySourceWarning"
t-att-data-tooltip-info='tooltipWarning'/>
</xpath>
</t>
</templates>

View file

@ -0,0 +1,89 @@
import { registry } from "@web/core/registry";
import { buildM2OFieldDescription, Many2OneField } from "@web/views/fields/many2one/many2one_field";
import { Component, onWillRender, onWillUpdateProps, useState } from "@odoo/owl";
import { Many2One } from "@web/views/fields/many2one/many2one";
export class WorkEntryType extends Component {
static template = "hr_work_entry.WorkEntryType";
static props = {
data: Object,
className: { type: String, optional: true },
};
setup() {
this.state = useState({ data: this.props.data });
onWillUpdateProps((nextProps) => {
this.state.data = nextProps.data;
});
}
}
function extractData(record) {
if (!record) {
return null;
}
let name;
if ("display_name" in record) {
name = record.display_name;
} else if ("name" in record) {
name = record.name.id ? record.name.display_name : record.name;
}
return {
id: record.id,
display_name: name,
display_code: record.display_code,
color: record.color,
};
}
export class WorkEntryTypeMany2One extends Many2One {
get many2XAutocompleteProps() {
const props = super.many2XAutocompleteProps;
return {
...props,
update: (records) => {
const idNamePair = records && extractData(records[0]) ? records[0] : false;
this.update(idNamePair);
},
};
}
}
export class Many2OneWorkEntryTypeField extends Many2OneField {
static template = "hr_work_entry.Many2OneWorkEntryTypeField";
static components = {
...Many2OneField.components,
Many2One: WorkEntryTypeMany2One,
WorkEntryType,
};
setup() {
super.setup();
this.state = useState({ data: this.props.record.data });
onWillRender(() => {
if (this.props.record.data?.work_entry_type_id.color) {
this.state.data = this.props.record.data.work_entry_type_id;
} else {
this.state.data = this.props.record.data;
}
});
}
get m2oProps() {
const props = super.m2oProps;
return {
...props,
specification: { display_code: 1, color: 1 },
};
}
}
export const many2OneWorkEntryTypeField = {
...buildM2OFieldDescription(Many2OneWorkEntryTypeField),
fieldDependencies: [
{ name: "display_code", type: "char" },
{ name: "color", type: "char" },
],
};
registry.category("fields").add("many2one_work_entry_type", many2OneWorkEntryTypeField);

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
<t t-name="hr_work_entry.Many2OneWorkEntryTypeField">
<div class="d-flex align-items-center gap-1">
<t t-if="m2oProps.value !== false">
<WorkEntryType data="state.data"/>
</t>
<Many2One t-props="m2oProps" cssClass="'w-100'">
<t t-set-slot="autoCompleteItem" t-slot-scope="autoCompleteItemScope">
<div class="o_avatar_many2x_autocomplete d-flex align-items-center">
<WorkEntryType data="autoCompleteItemScope.record" className="'me-1'"/>
<t t-out="autoCompleteItemScope.label"/>
</div>
</t>
</Many2One>
</div>
</t>
<t t-name="hr_work_entry.WorkEntryType">
<div class="o_calendar_renderer o_radio_item position-relative cursor-pointer d-flex gap-1 align-items-center"
t-att-class="props.className"
style="background-color: inherit;">
<span class="small rounded-3 d-flex justify-content-center" t-esc="state.data?.display_code || ' '"
t-attf-class="o_calendar_color_#{state.data?.color || 0}"
style="background-color: rgb(var(--o-event-bg--subtle-rgb)); width: 5ch; height:23px; padding: 2px;"/>
</div>
</t>
</templates>

View file

@ -0,0 +1,5 @@
.o_form_view {
.o_work_entry_source_warning {
cursor: help;
}
}

View file

@ -0,0 +1,53 @@
import { CalendarCommonPopover } from "@web/views/calendar/calendar_common/calendar_common_popover";
export class WorkEntryCalendarCommonPopover extends CalendarCommonPopover {
static subTemplates = {
...CalendarCommonPopover.subTemplates,
footer: "hr_work_entry.WorkEntryCalendarCommonPopover.footer",
};
static props = {
...CalendarCommonPopover.props,
splitRecord: Function,
};
get isWorkEntryValidated() {
return this.props.record.rawRecord.state === "validated";
}
get isSplittable() {
return this.props.record.rawRecord.duration >= 1;
}
/**
* @override
*/
get isEventEditable() {
return !this.isWorkEntryValidated && super.isEventEditable;
}
/**
* @override
*/
get isEventDeletable() {
return !this.isWorkEntryValidated && super.isEventDeletable;
}
/**
* @override
*/
get isEventViewable() {
return !this.isWorkEntryValidated && super.isEventViewable;
}
/**
* @override
*/
get hasFooter() {
return this.isWorkEntryValidated || super.hasFooter;
}
onSplitEvent() {
this.props.splitRecord(this.props.record);
this.props.close();
}
}

View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8" ?>
<template>
<t t-name="hr_work_entry.WorkEntryCalendarCommonPopover.footer" t-inherit="web.CalendarCommonPopover.footer" t-inherit-mode="primary">
<xpath expr="." position="inside">
<span t-if="isWorkEntryValidated"><i class="fa fa-lock me-1"/> You cannot edit a validated work entry</span>
</xpath>
<a t-on-click="onEditEvent" position="after">
<a href="#" class="btn btn-secondary" t-if="isSplittable" t-on-click="onSplitEvent">
Split
</a>
</a>
<a t-on-click="onDeleteEvent" position="attributes">
<attribute name="class" add="ms-auto btn-danger" remove="btn-secondary" separator=" "/>
</a>
</t>
</template>

View file

@ -0,0 +1,34 @@
import { convertRecordToEvent } from "@web/views/calendar/utils";
import { CalendarCommonRenderer } from "@web/views/calendar/calendar_common/calendar_common_renderer";
import { WorkEntryCalendarCommonPopover } from "@hr_work_entry/views/work_entry_calendar/calendar_common/work_entry_calendar_common_popover";
export class WorkEntryCalendarCommonRenderer extends CalendarCommonRenderer {
static eventTemplate = "hr_work_entry.WorkEntryCalendarCommonRenderer.event";
static components = {
...CalendarCommonRenderer,
Popover: WorkEntryCalendarCommonPopover,
};
static props = {
...CalendarCommonRenderer.props,
splitRecord: Function,
};
/**
* @override
*/
convertRecordToEvent(record) {
const event = convertRecordToEvent(record);
const editable = record.rawRecord.state !== "validated" && (event.editable ?? null);
return {
...event,
...(editable ? { editable: editable } : {}),
};
}
getPopoverProps(record) {
return {
...super.getPopoverProps(record),
splitRecord: this.props.splitRecord,
};
}
}

View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" ?>
<templates>
<t t-name="hr_work_entry.WorkEntryCalendarCommonRenderer.event" t-inherit="web.CalendarCommonRenderer.event" t-inherit-mode="primary">
<div t-out="title" position="after">
<i t-if="rawRecord.state === 'validated'" class="fa fa-lock position-absolute top-0 end-0" style="font-size: x-small"/>
</div>
</t>
</templates>

View file

@ -0,0 +1,19 @@
.o_calendar_header {
@for $index from 1 through length($o-colors-complete) {
$color: nth($o-colors-complete, $index);
$color-subtle: mix($o-white, $color, 55%);
$color-hover: mix($o-white, $color, 45%);
.o_gantt_color_#{$index - 1} {
color: color-contrast($color-subtle);
background-color: $color-subtle;
border-color: $color-subtle;
}
.btn.o_gantt_color_#{$index - 1}:hover {
color: color-contrast($color-hover);
background-color: $color-hover;
border-color: $color-hover;
}
}
}

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<templates>
<t t-name="hr_work_entry.calendar.controlButtons" t-inherit="web.CalendarController.controlButtons" t-inherit-mode="primary">
<xpath expr="." position="inside">
<button class="btn btn-secondary" t-on-click="onRegenerateWorkEntries">
Reset
</button>
</xpath>
</t>
</templates>

View file

@ -0,0 +1,143 @@
import { WorkEntryCalendarMultiSelectionButtons } from "@hr_work_entry/views/work_entry_calendar/work_entry_multi_selection_buttons";
import { useWorkEntry } from "@hr_work_entry/views/work_entry_hook";
import { _t } from "@web/core/l10n/translation";
import { useService } from "@web/core/utils/hooks";
import { CalendarController } from "@web/views/calendar/calendar_controller";
import { FormViewDialog } from "@web/views/view_dialogs/form_view_dialog";
export class WorkEntryCalendarController extends CalendarController {
static components = {
...CalendarController.components,
MultiSelectionButtons: WorkEntryCalendarMultiSelectionButtons,
};
setup() {
super.setup();
const { onRegenerateWorkEntries } = useWorkEntry({
getEmployeeIds: this.getEmployeeIds.bind(this),
getRange: this.model.computeRange.bind(this.model),
onClose: this.model.load.bind(this.model),
});
this.onRegenerateWorkEntries = onRegenerateWorkEntries;
this.dialogService = useService("dialog");
}
async splitRecord(record) {
this.dialogService.add(
FormViewDialog,
{
title: _t("Split Work Entry"),
resModel: "hr.work.entry",
onRecordSave: async (_record) => {
await this.orm.call("hr.work.entry", "action_split", [
record.id,
{
duration: _record.data.duration,
work_entry_type_id: _record.data.work_entry_type_id.id,
name: _record.data.name,
},
]);
return true;
},
context: {
form_view_ref: "hr_work_entry.hr_work_entry_calendar_gantt_view_form",
default_duration: record.rawRecord.duration / 2,
default_name: record.rawRecord.name,
default_work_entry_type_id: record.rawRecord.work_entry_type_id?.[0],
default_employee_id: record.rawRecord.employee_id?.[0],
default_date: record.rawRecord.date,
},
canExpand: false,
},
{
onClose: () => {
this.model.load();
},
}
);
}
/**
* @override
*/
get rendererProps() {
return {
...super.rendererProps,
splitRecord: this.splitRecord.bind(this),
};
}
getEmployeeIds() {
return [
...new Set(
Object.values(this.model.records).map((rec) => rec.rawRecord.employee_id[0])
),
];
}
getSelectedRecords(selectedCells) {
const ids = this.getSelectedRecordIds(selectedCells);
return Object.values(this.model.records)
.filter((r) => ids.includes(r.id))
.map((r) => r.rawRecord);
}
/**
* @override
*/
prepareMultiSelectionButtonsReactive() {
const result = super.prepareMultiSelectionButtonsReactive();
result.userFavoritesWorkEntries = this.model.userFavoritesWorkEntries || [];
result.onQuickReplace = (values) => this.onMultiReplace(values, this.selectedCells);
result.onQuickReset = () => this.onResetWorkEntries(this.selectedCells);
return result;
}
/**
* @override
*/
updateMultiSelection() {
super.updateMultiSelection(...arguments);
this.multiSelectionButtonsReactive.userFavoritesWorkEntries = this.model.userFavoritesWorkEntries || [];
}
getDatesWithoutValidatedWorkEntry(selectedCells, records) {
return this.getDates(selectedCells).filter(
(d) =>
!records
.filter((r) => r.state === "validated")
.map((r) => r.date)
.includes(d.toISODate())
);
}
/**
* @override
*/
onMultiDelete(selectedCells) {
const records = this.getSelectedRecords(selectedCells);
return this.model.unlinkRecords(
records.filter((r) => r.state !== "validated").map((r) => r.id)
);
}
onMultiReplace(values, selectedCells) {
const records = this.getSelectedRecords(selectedCells);
const dates = this.getDatesWithoutValidatedWorkEntry(selectedCells, records);
return this.model.multiReplaceRecords(
values,
dates,
records.filter((r) => r.state !== "validated")
);
}
onResetWorkEntries(selectedCells) {
const records = this.getSelectedRecords(selectedCells);
const dates = this.getDatesWithoutValidatedWorkEntry(selectedCells, records);
this.model.resetWorkEntries(
dates,
records.filter((r) => r.state !== "validated").map((r) => r.id)
);
}
}

Some files were not shown because too many files have changed in this diff Show more