Merge branch 'dev_odex25_hr' of https://github.com/expsa/odex25-standard-modules into bakry_hr3

# Conflicts:
#	odex25_hr/exp_payroll_custom/models/hr_advance_payslip.py
This commit is contained in:
Bakry 2025-01-15 16:20:04 +03:00
commit cfb174802a
4 changed files with 82 additions and 511 deletions

View File

@ -54,192 +54,90 @@ class HrAttendanceTransactions(models.Model):
module = self.env['ir.module.module'].sudo()
official_mission_module = module.search([('state', '=', 'installed'), ('name', '=', 'exp_official_mission')])
holidays_module = module.search([('state', '=', 'installed'), ('name', '=', 'hr_holidays_public')])
for item in self:
# Initialize values
item.plan_hours = item.official_hours = item.office_hours = 0.0
item.lateness = item.early_exit = item.total_absent_hours = 0.0
item.is_absent = item.approve_lateness = item.approve_exit_out = False
item.is_absent = False
item.approve_exit_out = False
# item.is_official = False
# item.total_absent_hours = 0
# item.official_id = False
# item.total_mission_hours = 0.0
# item.approve_personal_permission = False
# item.personal_permission_id = False
# item.total_permission_hours = 0.0
item.approve_lateness = False
item.lateness = False
item.early_exit = False
item.total_absent_hours = 0
if not item.calendar_id:
continue
calendar = item.calendar_id
# Determine working hours based on shift or full day
if not calendar.is_full_day:
if item.sequence == 1:
working_hours = calendar.shift_one_working_hours
else:
working_hours = calendar.shift_two_working_hours
else:
working_hours = calendar.working_hours
item.plan_hours = working_hours
if item.attending_type == 'out_cal' \
or holidays_module and (item.public_holiday or item.normal_leave) \
or official_mission_module and item.is_official and item.official_id.mission_type.duration_type == 'days':
item.write({
'temp_lateness': 0.0,
'temp_exit': 0.0,
'break_duration': 0.0,
'is_absent': False,
'office_hours': working_hours
})
item.write({'temp_lateness': 0.0, 'temp_exit': 0.0, 'break_duration': 0.0, 'is_absent': False})
if holidays_module and (item.public_holiday or item.normal_leave):
item.write({
'is_official': False,
'official_id': False,
'total_mission_hours': 0.0,
'approve_personal_permission': False,
'personal_permission_id': False,
'total_permission_hours': 0.0
})
continue
if calendar.is_flexible:
item.write({
'temp_lateness': 0.0,
'temp_exit': 0.0,
'official_hours': item.office_hours,
'plan_hours': item.sign_out - item.sign_in if item.sign_out and item.sign_in else 0.0
})
continue
# Adjust sign_in and sign_out
adjusted_sign_in = adjusted_sign_out = full_sign_in = full_sign_out = 0.0
if item.has_sign_in:
if not calendar.is_full_day:
if item.sequence == 1: # First shift
full_max_sign_in = calendar.shift_one_max_sign_in
full_min_sign_in = calendar.shift_one_min_sign_in
full_min_sign_out = calendar.shift_one_min_sign_out
full_max_sign_out = calendar.shift_one_max_sign_out
else: # Second shift
full_max_sign_in = calendar.shift_two_max_sign_in
full_min_sign_in = calendar.shift_two_min_sign_in
full_min_sign_out = calendar.shift_two_min_sign_out
full_max_sign_out = calendar.shift_two_max_sign_out
else:
full_min_sign_in, full_min_sign_out = calendar.full_min_sign_in, calendar.full_min_sign_out
full_max_sign_in, full_max_sign_out = calendar.full_max_sign_in, calendar.full_max_sign_out
# Adjust based on the conditions
if item.sign_in < full_max_sign_in:
full_sign_in, full_sign_out = full_min_sign_in, full_min_sign_out
adjusted_sign_in = max(item.sign_in, full_sign_in)
adjusted_sign_out = min(item.sign_out, full_sign_out)
else:
full_sign_in, full_sign_out = full_max_sign_in, full_max_sign_out
adjusted_sign_in = max(item.sign_in, full_sign_in)
adjusted_sign_out = min(item.sign_out, full_sign_out)
# Calculate official hours
if adjusted_sign_in and item.has_sign_out:
item.official_hours = adjusted_sign_out - adjusted_sign_in
# # Check absence due to missing sign_out
# if adjusted_sign_in and not item.has_sign_out:
# current_time = fields.Datetime.now().hour
# if calendar.end_sign_in > 0 and (current_time - adjusted_sign_in < calendar.end_sign_in):
# item.is_absent = True
# item.total_absent_hours = working_hours - (current_time - adjusted_sign_in)
# Handle absence due to insufficient working hours
if item.has_sign_out and adjusted_sign_out - adjusted_sign_in < working_hours:
if calendar.end_sign_in > 0 and working_hours < calendar.end_sign_in:
item.is_absent = True
item.total_absent_hours = working_hours - (adjusted_sign_out - adjusted_sign_in)
# Mission and personal permission hours
mission_hours = item.total_mission_hours or 0.0
permission_hours = item.total_permission_hours or 0.0
# Calculate office hours
item.office_hours = item.official_hours + mission_hours + permission_hours
if item.personal_permission_id:
start_permission_time = item.personal_permission_id.date_from.time()
start_permission_time_float = start_permission_time.hour + start_permission_time.minute / 60.0
item.write({'is_official': False, 'official_id': False, 'total_mission_hours': 0.0,
'approve_personal_permission': False, 'personal_permission_id': False,
'total_permission_hours': 0.0})
else:
start_permission_time_float = 0.0
# noke
# item.write({'temp_lateness': 0.0, 'temp_exit': 0.0, 'break_duration': 0.0, 'is_absent': False})
day_trans = self.search([('date', '=', item.date),
('attending_type', '=', 'in_cal'),
('employee_id', '=', item.employee_id.id)])
working_hours = sum(day_trans.mapped('official_hours')) \
+ sum(day_trans.mapped('total_mission_hours')) \
+ sum(day_trans.mapped('total_permission_hours'))
# Initialize variables to track hours used for lateness and early exit
used_mission_hours = 0.0
used_permission_hours = 0.0
if not item.public_holiday:
if working_hours < item.calendar_id.end_sign_in and not item.calendar_id.is_flexible \
or item.calendar_id.is_flexible and working_hours == 0.0:
day_trans.filtered(lambda t: t.public_holiday == False).update({'is_absent': True})
if working_hours == 0.0 and item.sign_in == 0.0 and item.sign_out == 0.0 and not item.calendar_id.is_flexible:
day_trans.filtered(lambda t: t.public_holiday == False).update({'is_absent': True})
if item.calendar_id.is_flexible:
item.write({'temp_lateness': 0.0, 'temp_exit': 0.0, 'official_hours': item.office_hours})
# if item.temp_lateness:
# item.approve_lateness = True
# if item.temp_exit:
# item.approve_exit_out = True
#################### Fix lateness,exit_out start #######################
if item.temp_lateness or item.temp_exit: # solve one cases and add other case #TODO
full_max_sign_in = item.calendar_id.full_max_sign_in
full_min_sign_in = item.calendar_id.full_min_sign_in
working_hours = item.calendar_id.working_hours
if not item.calendar_id.is_full_day:
if item.sequence == 1:
full_max_sign_in = item.calendar_id.shift_one_max_sign_in
full_min_sign_in = item.calendar_id.shift_one_min_sign_in
working_hours = item.calendar_id.shift_one_working_hours
if item.sequence == 2:
full_max_sign_in = item.calendar_id.shift_two_max_sign_in
full_min_sign_in = item.calendar_id.shift_two_min_sign_in
working_hours = item.calendar_id.shift_two_working_hours
# Lateness
if adjusted_sign_in > full_sign_in:
lateness_time = adjusted_sign_in - full_sign_in
lateness_covered_time = 0.0
is_late_sign_in = item.sign_in > full_max_sign_in
if item.sign_in < full_min_sign_in:
expected_sign_in = full_min_sign_in
if item.sign_in >= full_min_sign_in and item.sign_in <= full_max_sign_in:
expected_sign_in = item.sign_in
if is_late_sign_in:
expected_sign_in = full_max_sign_in
expected_sign_out = expected_sign_in + working_hours
is_early_sign_out = item.sign_out > 0.0 and item.sign_out < expected_sign_out
item.temp_lateness = item.sign_out > 0.0 and is_late_sign_in and item.sign_in - expected_sign_in or 0
item.temp_exit = is_early_sign_out and expected_sign_out - item.sign_out or 0
item.approve_lateness = is_late_sign_in
item.approve_exit_out = is_early_sign_out
# Check coverage by official mission
if official_mission_module and item.official_id:
mission_start = item.official_id.hour_from
mission_end = mission_start + item.total_mission_hours
if mission_start < adjusted_sign_in:
available_mission_hours = max(0.0, mission_end - adjusted_sign_in - used_mission_hours)
lateness_covered_time += min(lateness_time, available_mission_hours)
used_mission_hours += lateness_covered_time
# Check coverage by personal permission
if item.personal_permission_id:
permission_start = start_permission_time_float + 3 # TODO REMOVE THIS +3
permission_end = permission_start + item.total_permission_hours
if permission_start < adjusted_sign_in:
available_permission_hours = max(0.0, permission_end - adjusted_sign_in - used_permission_hours)
lateness_covered_time += min(lateness_time, available_permission_hours)
used_permission_hours += lateness_covered_time
# Determine remaining uncovered lateness
uncovered_lateness = lateness_time - lateness_covered_time
if uncovered_lateness > 0:
item.lateness = uncovered_lateness
item.approve_lateness = True
else:
item.lateness = 0.0
# Early Exit
if adjusted_sign_out < full_sign_out:
remaining_work_time = full_sign_out - adjusted_sign_out
early_exit_covered_time = 0.0
# Check coverage by official mission
if official_mission_module and item.official_id:
mission_start = item.official_id.hour_from
mission_end = mission_start + item.total_mission_hours
if mission_start >= adjusted_sign_out:
available_mission_hours = max(0.0, mission_end - adjusted_sign_out - used_mission_hours)
early_exit_covered_time += min(remaining_work_time, available_mission_hours)
used_mission_hours += early_exit_covered_time
# Check coverage by personal permission
if item.personal_permission_id:
permission_start = start_permission_time_float + 3 # TODO REMOVE THIS +3
permission_end = permission_start + item.total_permission_hours
if permission_start >= adjusted_sign_out:
available_permission_hours = max(0.0, permission_end - adjusted_sign_out - used_permission_hours)
early_exit_covered_time += min(remaining_work_time, available_permission_hours)
used_permission_hours += early_exit_covered_time
# Determine remaining uncovered early exit
uncovered_early_exit = remaining_work_time - early_exit_covered_time
if uncovered_early_exit > 0:
item.early_exit = uncovered_early_exit
item.approve_exit_out = True
else:
item.early_exit = 0.0
# Final absence check
if not item.has_sign_in or\
(not item.has_sign_out and calendar.end_sign_in > 0) or\
(item.has_sign_out and adjusted_sign_out - adjusted_sign_in < calendar.end_sign_in):
item.is_absent = True
item.total_absent_hours = max(0.0, working_hours - item.office_hours)
else:
item.is_absent = False
item.total_absent_hours = 0.0
# if item.sign_out == 0.0:
# item.is_absent = True
#################### Fix end #######################
if item.break_duration and item.calendar_id.break_duration:
# item.write({'break_duration': item.break_duration - item.calendar_id.break_duration}) #TODO
item.write({'break_duration': item.break_duration})
if item.break_duration < 0:
item.break_duration = 0
item.lateness = item.temp_lateness
item.early_exit = item.temp_exit
def get_sign_time(self, sign):
''' Func: return time as float considering timezone(fixed 3)'''

View File

@ -2333,11 +2333,6 @@ msgstr "الرواتب"
msgid "Permission"
msgstr "إستيذان"
#. module: employee_requests
#: model:ir.model.fields,field_description:employee_requests.field_hr_personal_permission__balance
msgid "Permission Hours"
msgstr "ساعات الإستئذان"
#. module: employee_requests
#: model_terms:ir.ui.view,arch_db:employee_requests.employee_personal_permission_form_view
msgid "Permission Info"

View File

@ -217,7 +217,6 @@ msgstr "قيد لكل الموظفين"
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_salary_rule_category__rule_type__allowance
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.model_payslip_form_view
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__payroll_bank_wiz__report_type__allowance
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.model_payslip_form_view
#, python-format
msgid "Allowance"
msgstr "البدلات"
@ -252,7 +251,6 @@ msgstr "اجمالي البدلات والخصومات"
#. module: exp_payroll_custom
#: code:addons/exp_payroll_custom/report/payslip_monthly_report.py:0
#: code:addons/exp_payroll_custom/report/payslip_monthly_report.py:0
#: model:ir.model.fields,field_description:exp_payroll_custom.field_contract_advantage__amount
#: model:ir.model.fields,field_description:exp_payroll_custom.field_hr_employee_reward__amount
#: model:ir.model.fields,field_description:exp_payroll_custom.field_lines_ids_reward__amount
@ -706,7 +704,6 @@ msgstr ""
#: model:ir.model.fields,field_description:exp_payroll_custom.field_hr_contract__display_name
#: model:ir.model.fields,field_description:exp_payroll_custom.field_hr_employee__display_name
#: model:ir.model.fields,field_description:exp_payroll_custom.field_employee_selection_wizard__display_name
#: model:ir.model.fields,field_description:exp_payroll_custom.field_employee_selection_wizard__display_name
#: model:ir.model.fields,field_description:exp_payroll_custom.field_hr_employee_reward__display_name
#: model:ir.model.fields,field_description:exp_payroll_custom.field_hr_payroll_structure__display_name
#: model:ir.model.fields,field_description:exp_payroll_custom.field_hr_payslip__display_name
@ -746,8 +743,6 @@ msgstr "مسودة"
#. module: exp_payroll_custom
#: code:addons/exp_payroll_custom/report/payslip_monthly_report.py:0
#: code:addons/exp_payroll_custom/report/payslip_monthly_report.py:0
#: code:addons/exp_payroll_custom/report/payslip_monthly_report.py:0
#, python-format
msgid "EMP #"
msgstr "رقم الوظف"
@ -921,6 +916,7 @@ msgstr "إستحقاق نهاية خدمة"
#, python-format
msgid "Insurnce Deduction"
msgstr "خصم التأمينات الاجتماعية"
#. module: exp_payroll_custom
#: code:addons/exp_payroll_custom/models/hr_salary_rules.py:0
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_payslip_line__rules_type__other
@ -928,6 +924,7 @@ msgstr "خصم التأمينات الاجتماعية"
#, python-format
msgid "Other"
msgstr "اخـــــرى"
#. module: exp_payroll_custom
#: code:addons/exp_payroll_custom/models/hr_salary_rules.py:0
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_salary_rule_category__rule_type__end_of_service
@ -1006,7 +1003,6 @@ msgstr "رمز الخط الرائع ، على سبيل المثال FA- الم
#. module: exp_payroll_custom
#: code:addons/exp_payroll_custom/report/bank_pdf_report.py:0
#: code:addons/exp_payroll_custom/report/bank_pdf_report.py:0
#, python-format
msgid "Form content is missing, this report cannot be printed."
msgstr ""
@ -1088,18 +1084,13 @@ msgstr "إخفاء"
#: model:ir.model.fields,field_description:exp_payroll_custom.field_hr_contract__house_allowance_temp
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_payslip_line__rules_type__house
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_salary_rule__rules_type__house
#: model:ir.model.fields,field_description:exp_payroll_custom.field_hr_payslip__house_allowances
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.employee_cost_report
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.view_hr_payslip_inherit_tree
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.report_payroll_bank_pdf
#, python-format
msgid "House Allowance"
msgstr "بدل السكن"
#. module: exp_payroll_custom
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.report_payroll_bank_pdf
msgid "Housing Allowance"
msgstr "بدل السكن"
#. module: exp_payroll_custom
#: model:ir.model.fields,field_description:exp_payroll_custom.field_contract_advantage__id
#: model:ir.model.fields,field_description:exp_payroll_custom.field_employee_promotions__id
@ -1188,12 +1179,6 @@ msgstr "المدخلات"
msgid "Installment Date"
msgstr "تاريخ القسط"
#. module: exp_payroll_custom
#: code:addons/exp_payroll_custom/models/hr_salary_rules.py:0
#, python-format
msgid "Insurnce Deduction"
msgstr "خصم التأمينات الاجتماعية"
#. module: exp_payroll_custom
#: model:ir.model.fields,field_description:exp_payroll_custom.field_hr_payroll_structure__interval_time
msgid "Interval Time"
@ -1362,8 +1347,6 @@ msgstr "نهاية الوقت المعين للنشاط"
#. module: exp_payroll_custom
#: code:addons/exp_payroll_custom/report/payslip_monthly_report.py:0
#: code:addons/exp_payroll_custom/report/payslip_monthly_report.py:0
#: code:addons/exp_payroll_custom/report/payslip_monthly_report.py:0
#: model:ir.model.fields,field_description:exp_payroll_custom.field_payslip_loans__name
#: model:ir.model.fields,field_description:exp_payroll_custom.field_salary_advance__name
#, python-format
@ -1378,7 +1361,6 @@ msgstr ""
#. module: exp_payroll_custom
#: code:addons/exp_payroll_custom/models/hr_salary_rules.py:0
#: code:addons/exp_payroll_custom/report/payslip_monthly_report.py:0
#: code:addons/exp_payroll_custom/report/payslip_monthly_report.py:0
#, python-format
msgid "Net"
msgstr ""
@ -1586,12 +1568,6 @@ msgstr " 2 مستوى قديم"
msgid "Old Scale"
msgstr "رتبة قديمة"
#. module: exp_payroll_custom
#: code:addons/exp_payroll_custom/models/hr_salary_rules.py:0
#, python-format
msgid "Other"
msgstr ""
#. module: exp_payroll_custom
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.employee_cost_report
msgid "Other Benefits"
@ -1939,11 +1915,6 @@ msgstr "ذات الصلة بالمستويات"
msgid "Related with qualifications"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields,field_description:exp_payroll_custom.field_payroll_bank_wiz__report_type
msgid "Report Type"
msgstr "نوع التقرير"
#. module: exp_payroll_custom
#: model:ir.ui.menu,name:exp_payroll_custom.menu_hr_payroll_report
msgid "Reporting"
@ -2107,7 +2078,6 @@ msgid "Salary Degree"
msgstr "درجة الرواتب"
#. module: exp_payroll_custom
#: model:ir.model.fields,field_description:exp_payroll_custom.field_payroll_bank_wiz__degree_ids
#: model:ir.model.fields,field_description:exp_payroll_custom.field_payroll_bank_wiz__group_ids
#: model:ir.model.fields,field_description:exp_payroll_custom.field_payslip_monthly_report__degree_ids
msgid "Salary Degrees"
@ -2122,7 +2092,6 @@ msgid "Salary Group"
msgstr "مجموعة الرواتب"
#. module: exp_payroll_custom
#: model:ir.model.fields,field_description:exp_payroll_custom.field_payroll_bank_wiz__group_ids
#: model:ir.model.fields,field_description:exp_payroll_custom.field_payslip_monthly_report__group_ids
msgid "Salary Groups"
msgstr "المجموعات"
@ -2215,7 +2184,6 @@ msgstr "مستويات سلم الرواتب"
#. module: exp_payroll_custom
#: code:addons/exp_payroll_custom/models/hr_advance_payslip.py:0
#: code:addons/exp_payroll_custom/models/hr_advance_payslip.py:0
#, python-format
msgid "Salary Slip of %s for %s"
msgstr "قسيمة راتب %s لشهر %s"
@ -2240,7 +2208,6 @@ msgstr ""
#. module: exp_payroll_custom
#: code:addons/exp_payroll_custom/models/hr_advance_payslip.py:0
#: code:addons/exp_payroll_custom/models/hr_advance_payslip.py:0
#, python-format
msgid ""
"Salary is less than 0 this month for the following employees \n"
@ -2466,13 +2433,6 @@ msgstr "يجب ان يكون تصنيف قاعدة الرواتب خصمآ فق
#. module: exp_payroll_custom
#: code:addons/exp_payroll_custom/models/hr_advance_payslip.py:0
#: code:addons/exp_payroll_custom/models/hr_advance_payslip.py:0
#: code:addons/exp_payroll_custom/models/hr_advance_payslip.py:0
#: code:addons/exp_payroll_custom/models/hr_advance_payslip.py:0
#: code:addons/exp_payroll_custom/models/hr_advance_payslip.py:0
#: code:addons/exp_payroll_custom/models/hr_advance_payslip.py:0
#: code:addons/exp_payroll_custom/models/hr_advance_payslip.py:0
#: code:addons/exp_payroll_custom/models/hr_advance_payslip.py:0
#, python-format
msgid "The amount you put is greater than fact value of this Salary rule"
msgstr "المبلغ الذي وضعته أكبر من القيمة الحقيقية لقاعدة الرواتب هذه"
@ -2503,7 +2463,6 @@ msgstr "هذا المستخدم مشارك في العمليات المتعلق
#. module: exp_payroll_custom
#: code:addons/exp_payroll_custom/report/payslip_monthly_report.py:0
#: code:addons/exp_payroll_custom/report/payslip_monthly_report.py:0
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.employee_cost_report
#, python-format
msgid "Total"
@ -2675,12 +2634,6 @@ msgstr "تم تحديد قيمة خاطئة لقاعدة الراتب %s (%s)."
#. module: exp_payroll_custom
#: code:addons/exp_payroll_custom/models/hr_salary_rules.py:0
#: code:addons/exp_payroll_custom/models/hr_salary_rules.py:0
#: code:addons/exp_payroll_custom/models/hr_salary_rules.py:0
#: code:addons/exp_payroll_custom/models/hr_salary_rules.py:0
#: code:addons/exp_payroll_custom/models/hr_salary_rules.py:0
#: code:addons/exp_payroll_custom/models/hr_salary_rules.py:0
#: code:addons/exp_payroll_custom/models/hr_salary_rules.py:0
#, python-format
msgid "Wrong quantity defined for salary rule %s (%s)."
msgstr ""
@ -2701,8 +2654,6 @@ msgstr "لايمكن ارجاع حساب الراتب بعد ترحيل حزم
#. module: exp_payroll_custom
#: code:addons/exp_payroll_custom/models/hr_advance_payslip.py:0
#: code:addons/exp_payroll_custom/models/hr_advance_payslip.py:0
#: code:addons/exp_payroll_custom/models/hr_advance_payslip.py:0
#, python-format
msgid "You can not Return account move %s in state not draft"
msgstr "لايمكن ارجاع حساب الراتب و القيد %s في حالة غير مسوده"
@ -2721,7 +2672,6 @@ msgstr "لا يمكن حذف السجل \"%s\" في حالة غير المسود
#. module: exp_payroll_custom
#: code:addons/exp_payroll_custom/models/employee_reward.py:0
#: code:addons/exp_payroll_custom/models/employee_reward.py:0
#, python-format
msgid "You can not delete record in state not in draft"
msgstr "لا يمكن حذف السجل في حالة غير المسوده"
@ -2809,59 +2759,21 @@ msgstr ""
msgid "salary.advance"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_salary_rule_category__rule_type__base
msgid "أساسى"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_salary_rule_category__rule_type__gross
msgid "إجمالي"
msgstr ""
#. module: exp_payroll_custom
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.report_payroll_bank_pdf
msgid "إجمالي المبلغ"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_payslip_line__rules_type__mandate
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_salary_rule__rules_type__mandate
msgid "إستحقاق إنتــداب"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_payslip_line__rules_type__termination
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_salary_rule__rules_type__termination
msgid "إستحقاق نهاية خدمة"
msgstr ""
#. module: exp_payroll_custom
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.report_payroll_bank_pdf
msgid "إسم الموظف"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__contract_advantage__type__exception
msgid "استثناء"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_payslip_line__rules_type__overtime
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_salary_rule__rules_type__overtime
msgid "استحقاق اجر اضــافي"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__employee_promotions__state__approved
msgid "الإعتماد النهائي"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_salary_rule_category__rule_type__allowance
msgid "الاستحقاقات"
msgstr ""
#. module: exp_payroll_custom
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.report_payroll_bank_pdf
msgid "البنك"
@ -2872,12 +2784,6 @@ msgstr ""
msgid "الحالة"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_salary_rule_category__rule_type__deduction
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.report_payroll_bank_pdf
msgid "الخصم"
msgstr ""
#. module: exp_payroll_custom
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.report_payroll_bank_pdf
msgid "الخصومات"
@ -2888,12 +2794,6 @@ msgstr ""
msgid "الراتب الأساسي"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_payslip_line__rules_type__salary
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_salary_rule__rules_type__salary
msgid "الراتب الاســـاسي"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_salary_rule_category__rule_type__net
msgid "الصافي"
@ -2908,146 +2808,26 @@ msgid "مرفوض"
msgid "العملة"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__contract_advantage__state__draft
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__employee_promotions__state__draft
msgid "مسودة"
#. module: exp_payroll_custom
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.report_payroll_bank_pdf
msgid "العنوان"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__employee_promotions__state__approved
msgid "معتمد"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_payroll_structure__type__degree
msgid "المؤهل"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields,field_description:exp_payroll_custom.field_hr_payslip__other_allowances
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.view_hr_payslip_inherit_tree
msgid "Others Allowance"
msgstr "البدلات الاخرى"
#. module: exp_payroll_custom
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.report_payroll_bank_pdf
msgid "المبلغ"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields,field_description:exp_payroll_custom.field_hr_payslip__employee_insurnce
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.view_hr_payslip_inherit_tree
msgid "Employee Insurnce"
msgstr "خصم التأمينات الإجتماعية للموظق"
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_payroll_structure__type__group
msgid "المجموعة"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__employee_promotions__state__confirm
msgid "المدير المباشر"
msgstr ""
#. module: exp_payroll_custom
#: code:addons/exp_payroll_custom/models/employee_reward.py:0
#, python-format
msgid "The Amount Must Be Greater Than Zero"
msgstr "يجب أن يكون المبلغ أكبر من الصفر"
#. module: exp_payroll_custom
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.report_payroll_bank_pdf
msgid "المستفيد / اسم الموظف"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_payroll_structure__type__level
msgid "المستوى"
msgstr ""
#. module: exp_payroll_custom
#: code:addons/exp_payroll_custom/models/employee_reward.py:0
#, python-format
msgid "The Employee %s Amount Must Be Greater Than Zero"
msgstr "يجب ان يكون مبلغ الموظف %s اكبر من الصفر"
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__employee_promotions__state__hr_manager
msgid "الموارد البشرية"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_payroll_structure__type__scale
msgid "الميزان"
msgstr ""
#. module: exp_payroll_custom
#: code:addons/exp_payroll_custom/models/hr_advance_payslip.py:0
#: code:addons/exp_payroll_custom/models/hr_advance_payslip.py:0
#, python-format
msgid ""
"Sorry, The Previous month's salary has Not been calculated for Employees \n"
" %s"
msgstr "للأسف, لم يتم احتساب الراتب للشهر السابق للموظفين الاتية اسماهم \n %s"
#. module: exp_payroll_custom
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.report_payroll_bank_pdf
msgid "الهوية"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_payslip_line__discount_absence__by_hour
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_salary_rule__discount_absence__by_hour
msgid "بالساعة"
msgstr ""
#. module: exp_payroll_custom
#: code:addons/exp_payroll_custom/models/hr_advance_payslip.py:0
#: code:addons/exp_payroll_custom/models/hr_advance_payslip.py:0
#, python-format
msgid ""
"Sorry, Salary has already been calculated This Month for Employees \n"
" %s"
msgstr " للأسف, تم حساب الراتب لهذا الشهر مسبقآ للموظفين الاتية اسماهم \n %s"
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_payslip_line__discount_absence__by_day
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_salary_rule__discount_absence__by_day
msgid "باليوم"
msgstr ""
#. module: exp_payroll_custom
#: code:addons/exp_payroll_custom/report/payslip_monthly_report.py:0
#: code:addons/exp_payroll_custom/report/payslip_monthly_report.py:0
#: code:addons/exp_payroll_custom/report/payslip_monthly_report.py:0
#, python-format
msgid "EMP #"
msgstr "رقم الوظف"
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_payslip_line__rules_type__house
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_salary_rule__rules_type__house
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.report_payroll_bank_pdf
msgid "بدل السكن"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields,field_description:exp_payroll_custom.field_payroll_bank_wiz__bank_type
msgid "Select Bank"
msgstr "حدد البنك"
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_payslip_line__rules_type__transport
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_salary_rule__rules_type__transport
msgid "بدل النقل"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__payroll_bank_wiz__bank_type__sap
msgid "SAP Bank"
@ -3058,33 +2838,6 @@ msgstr "بنك ساب"
msgid "بدلات أخرى"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__payroll_bank_wiz__bank_type__alahli
msgid "Al-Ahli Bank"
msgstr "البنك الأهلي"
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_payslip_line__salary_type__fixed
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_salary_rule__salary_type__fixed
msgid "ثابت للكل"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__payroll_bank_wiz__bank_type__rajhi
msgid "Al-Rajhi Bank"
msgstr "بنك الراجحي"
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_payslip_line__rules_type__insurnce
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_salary_rule__rules_type__insurnce
msgid "خصم التأمينات الاجتماعية"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__payroll_bank_wiz__bank_type__riyadh
msgid "Al-Riyadh Bank"
msgstr "بنك الرياض"
#. module: exp_payroll_custom
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.report_payroll_bank_pdf
msgid "دخل آخر"
@ -3095,39 +2848,6 @@ msgstr ""
msgid "Report Type"
msgstr "نوع التقرير"
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_payslip_line__salary_type__related_degrees
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_salary_rule__salary_type__related_degrees
msgid "ذات الصلة بالدرجات"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields,field_description:exp_payroll_custom.field_payroll_bank_wiz__no_details
msgid "No Details"
msgstr "بدون تفاصيل"
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_payslip_line__salary_type__related_levels
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_salary_rule__salary_type__related_levels
msgid "ذات الصلة بالمستويات"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields,field_description:exp_payroll_custom.field_payroll_bank_wiz__entry_type
msgid "Entry Type"
msgstr "نوع القيد"
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_payslip_line__salary_type__related_groups
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_salary_rule__salary_type__related_groups
msgid "ذات صلة بالمجموعات"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__payroll_bank_wiz__entry_type__posted
msgid "Post"
msgstr "مرحل"
#. module: exp_payroll_custom
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.report_payroll_bank_pdf
msgid "رقم الحساب"
@ -3148,22 +2868,6 @@ msgstr ""
msgid "قيد لكل الموظفين"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_payroll_structure__transfer_type__per_bank
msgid "قيد لكل بنك"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_payroll_structure__transfer_type__one_by_one
msgid "قيد لكل موظف"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_payslip_line__discount_absence__no_discount
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_salary_rule__discount_absence__no_discount
msgid "لا خصم"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__contract_advantage__state__confirm
msgid "مؤكد"
@ -3174,11 +2878,6 @@ msgstr ""
msgid "مرجع الدفع"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__contract_advantage__state__refused
msgid "مرفوض"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__contract_advantage__state__draft
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__employee_promotions__state__draft
@ -3187,7 +2886,6 @@ msgstr ""
#. module: exp_payroll_custom
#: code:addons/exp_payroll_custom/report/bank_pdf_report.py:0
#: code:addons/exp_payroll_custom/report/bank_pdf_report.py:0
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.report_payroll_bank_pdf
#, python-format
msgid "مسير البنك للتدريب"
@ -3195,7 +2893,6 @@ msgstr ""
#. module: exp_payroll_custom
#: code:addons/exp_payroll_custom/report/bank_pdf_report.py:0
#: code:addons/exp_payroll_custom/report/bank_pdf_report.py:0
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.report_payroll_bank_pdf
#, python-format
msgid "مسير البنك للحوافز"
@ -3203,7 +2900,6 @@ msgstr ""
#. module: exp_payroll_custom
#: code:addons/exp_payroll_custom/report/bank_pdf_report.py:0
#: code:addons/exp_payroll_custom/report/bank_pdf_report.py:0
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.report_payroll_bank_pdf
#, python-format
msgid "مسير البنك للرواتب"
@ -3211,7 +2907,6 @@ msgstr ""
#. module: exp_payroll_custom
#: code:addons/exp_payroll_custom/report/bank_pdf_report.py:0
#: code:addons/exp_payroll_custom/report/bank_pdf_report.py:0
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.report_payroll_bank_pdf
#, python-format
msgid "مسير البنك للعمل الإضافي"
@ -3219,23 +2914,11 @@ msgstr ""
#. module: exp_payroll_custom
#: code:addons/exp_payroll_custom/report/bank_pdf_report.py:0
#: code:addons/exp_payroll_custom/report/bank_pdf_report.py:0
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.report_payroll_bank_pdf
#, python-format
msgid "مسير البنك لمهام العمل"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_payslip_line__rules_type__other
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_salary_rule__rules_type__other
msgid "مقييم"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__hr_salary_rule_category__rule_type__end_of_service
msgid "نهاية الخدمة"
msgstr ""
#. module: exp_payroll_custom
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.report_payroll_bank_pdf
msgid "هوية المستفيد/ المرجع"
@ -3245,8 +2928,3 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:exp_payroll_custom.report_payroll_bank_pdf
msgid "وصف الدفع"
msgstr ""
#. module: exp_payroll_custom
#: model:ir.model.fields.selection,name:exp_payroll_custom.selection__contract_advantage__type__customize
msgid "يعدل"
msgstr ""

View File

@ -488,7 +488,7 @@ class SalaryRuleInput(models.Model):
#if payslip.date_from >= holiday.date_from and payslip.date_to >= holiday.date_to:
if payslip_date_from >= holiday_date_from and payslip_date_to >= holiday_date_to:
start_date = datetime.strptime(payslip_date_from, "%Y-%m-%d").date()
end_date = datetime.strptime(str(holiday.date_to), "%Y-%m-%d %H:%M:%S").date() + timedelta(
end_date = datetime.strptime(holiday_date_to, "%Y-%m-%d").date() + timedelta(
days=1)
number_of_days = relativedelta(end_date, start_date).days
if number_of_days >= 0: # number_of_days <= 0
@ -511,8 +511,8 @@ class SalaryRuleInput(models.Model):
'number_of_hours': holiday.holiday_status_id.percentage,
'contract_id': payslip.contract_id.id})]
elif holiday_date_from >= payslip_date_from and payslip_date_to <= holiday_date_to:
start_date = datetime.strptime(str(holiday.date_from), "%Y-%m-%d %H:%M:%S").date()
end_date = datetime.strptime(str(payslip.date_to), "%Y-%m-%d").date()
start_date = datetime.strptime(holiday_date_from, "%Y-%m-%d %H:%M:%S").date()
end_date = datetime.strptime(payslip_date_to, "%Y-%m-%d").date()
number_of_days = relativedelta(end_date, start_date).days + 1
if number_of_days >= 0: # number_of_days <= 0
payslip.worked_days_line_ids = [(0, 0, {
@ -525,8 +525,8 @@ class SalaryRuleInput(models.Model):
'contract_id': payslip.contract_id.id})]
else:
if payslip_date_to <= holiday_date_to:
start_date = datetime.strptime(str(payslip.date_from), "%Y-%m-%d").date()
end_date = datetime.strptime(str(payslip.date_to), "%Y-%m-%d").date() + timedelta(
start_date = datetime.strptime(payslip_date_from, "%Y-%m-%d").date()
end_date = datetime.strptime(payslip_date_to, "%Y-%m-%d").date() + timedelta(
days=1)
number_of_days = relativedelta(end_date, start_date).days
if number_of_days >= 0: # number_of_days <= 0