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

This commit is contained in:
Bakry 2025-06-26 14:53:19 +03:00
commit 4321905e84
13 changed files with 378 additions and 115 deletions

View File

@ -0,0 +1,292 @@
# Author: Ahmad Samir <a.atta@exp-sa.com>
name: Prevent Invalid Merges
on:
pull_request:
branches:
- dev_odex-event
- dev_odex25_accounting
- dev_odex25_base
- dev_odex25_dms
- dev_odex25_fleet
- dev_odex25_hr
- dev_odex25_inventory
- dev_odex25_maintenance
- dev_odex25_mobile
- dev_odex25_pos
- dev_odex25_project
- dev_odex25_purchase
- dev_odex25_realstate
- dev_odex25_sales
- dev_odex25_survey
- dev_odex25_transactions
- dev_odex25_website
- dev_openeducat_erp-14.0.1.0
- dev_odex25_ensan
- dev_odex25_helpdesk
- preprod_odex-event
- preprod_odex25_accounting
- preprod_odex25_base
- preprod_odex25_dms
- preprod_odex25_fleet
- preprod_odex25_hr
- preprod_odex25_inventory
- preprod_odex25_maintenance
- preprod_odex25_mobile
- preprod_odex25_pos
- preprod_odex25_project
- preprod_odex25_purchase
- preprod_odex25_realstate
- preprod_odex25_sales
- preprod_odex25_survey
- preprod_odex25_transactions
- preprod_odex25_website
- preprod_openeducat_erp-14.0.1.0
- preprod_odex25_ensan
- preprod_odex25_helpdesk
- master_odex-event
- master_odex25_accounting
- master_odex25_base
- master_odex25_dms
- master_odex25_fleet
- master_odex25_hr
- master_odex25_inventory
- master_odex25_maintenance
- master_odex25_mobile
- master_odex25_pos
- master_odex25_project
- master_odex25_purchase
- master_odex25_realstate
- master_odex25_sales
- master_odex25_survey
- master_odex25_transactions
- master_odex25_website
- master_openeducat_erp-14.0.1.0
- master_odex25_ensan
- master_odex25_helpdesk
jobs:
validate-merge-source:
runs-on: ubuntu-latest
steps:
- name: Check source branch for merge
run: |
echo "Base branch: ${{ github.base_ref }}"
echo "Head branch: ${{ github.head_ref }}"
# ✅ Preprod Branches
if [[ "${{ github.base_ref }}" == "preprod_odex-event" && "${{ github.head_ref }}" != "dev_odex-event" ]]; then
echo "::error ::You can only merge to 'preprod_odex-event' from 'dev_odex-event' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "preprod_odex25_accounting" && "${{ github.head_ref }}" != "dev_odex25_accounting" ]]; then
echo "::error ::You can only merge to 'preprod_odex25_accounting' from 'dev_odex25_accounting' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "preprod_odex25_base" && "${{ github.head_ref }}" != "dev_odex25_base" ]]; then
echo "::error ::You can only merge to 'preprod_odex25_base' from 'dev_odex25_base' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "preprod_odex25_dms" && "${{ github.head_ref }}" != "dev_odex25_dms" ]]; then
echo "::error ::You can only merge to 'preprod_odex25_dms' from 'dev_odex25_dms' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "preprod_odex25_fleet" && "${{ github.head_ref }}" != "dev_odex25_fleet" ]]; then
echo "::error ::You can only merge to 'preprod_odex25_fleet' from 'dev_odex25_fleet' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "preprod_odex25_hr" && "${{ github.head_ref }}" != "dev_odex25_hr" ]]; then
echo "::error ::You can only merge to 'preprod_odex25_hr' from 'dev_odex25_hr' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "preprod_odex25_inventory" && "${{ github.head_ref }}" != "dev_odex25_inventory" ]]; then
echo "::error ::You can only merge to 'preprod_odex25_inventory' from 'dev_odex25_inventory' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "preprod_odex25_maintenance" && "${{ github.head_ref }}" != "dev_odex25_maintenance" ]]; then
echo "::error ::You can only merge to 'preprod_odex25_maintenance' from 'dev_odex25_maintenance' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "preprod_odex25_mobile" && "${{ github.head_ref }}" != "dev_odex25_mobile" ]]; then
echo "::error ::You can only merge to 'preprod_odex25_mobile' from 'dev_odex25_mobile' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "preprod_odex25_pos" && "${{ github.head_ref }}" != "dev_odex25_pos" ]]; then
echo "::error ::You can only merge to 'preprod_odex25_pos' from 'dev_odex25_pos' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "preprod_odex25_project" && "${{ github.head_ref }}" != "dev_odex25_project" ]]; then
echo "::error ::You can only merge to 'preprod_odex25_project' from 'dev_odex25_project' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "preprod_odex25_purchase" && "${{ github.head_ref }}" != "dev_odex25_purchase" ]]; then
echo "::error ::You can only merge to 'preprod_odex25_purchase' from 'dev_odex25_purchase' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "preprod_odex25_realstate" && "${{ github.head_ref }}" != "dev_odex25_realstate" ]]; then
echo "::error ::You can only merge to 'preprod_odex25_realstate' from 'dev_odex25_realstate' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "preprod_odex25_sales" && "${{ github.head_ref }}" != "dev_odex25_sales" ]]; then
echo "::error ::You can only merge to 'preprod_odex25_sales' from 'dev_odex25_sales' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "preprod_odex25_survey" && "${{ github.head_ref }}" != "dev_odex25_survey" ]]; then
echo "::error ::You can only merge to 'preprod_odex25_survey' from 'dev_odex25_survey' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "preprod_odex25_transactions" && "${{ github.head_ref }}" != "dev_odex25_transactions" ]]; then
echo "::error ::You can only merge to 'preprod_odex25_transactions' from 'dev_odex25_transactions' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "preprod_odex25_website" && "${{ github.head_ref }}" != "dev_odex25_website" ]]; then
echo "::error ::You can only merge to 'preprod_odex25_website' from 'dev_odex25_website' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "preprod_openeducat_erp-14.0.1.0" && "${{ github.head_ref }}" != "dev_openeducat_erp-14.0.1.0" ]]; then
echo "::error ::You can only merge to 'preprod_openeducat_erp-14.0.1.0' from 'dev_openeducat_erp-14.0.1.0' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "preprod_odex25_ensan" && "${{ github.head_ref }}" != "dev_odex25_ensan" ]]; then
echo "::error ::You can only merge to 'preprod_odex25_ensan' from 'dev_odex25_ensan' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "preprod_odex25_helpdesk" && "${{ github.head_ref }}" != "dev_odex25_helpdesk" ]]; then
echo "::error ::You can only merge to 'preprod_odex25_helpdesk' from 'dev_odex25_helpdesk' branch!"
exit 1
fi
# ✅ Master Branches
if [[ "${{ github.base_ref }}" == "master_odex-event" && "${{ github.head_ref }}" != "preprod_odex-event" ]]; then
echo "::error ::You can only merge to 'master_odex-event' from 'preprod_odex-event' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "master_odex25_accounting" && "${{ github.head_ref }}" != "preprod_odex25_accounting" ]]; then
echo "::error ::You can only merge to 'master_odex25_accounting' from 'preprod_odex25_accounting' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "master_odex25_base" && "${{ github.head_ref }}" != "preprod_odex25_base" ]]; then
echo "::error ::You can only merge to 'master_odex25_base' from 'preprod_odex25_base' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "master_odex25_dms" && "${{ github.head_ref }}" != "preprod_odex25_dms" ]]; then
echo "::error ::You can only merge to 'master_odex25_dms' from 'preprod_odex25_dms' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "master_odex25_fleet" && "${{ github.head_ref }}" != "preprod_odex25_fleet" ]]; then
echo "::error ::You can only merge to 'master_odex25_fleet' from 'preprod_odex25_fleet' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "master_odex25_hr" && "${{ github.head_ref }}" != "preprod_odex25_hr" ]]; then
echo "::error ::You can only merge to 'master_odex25_hr' from 'preprod_odex25_hr' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "master_odex25_inventory" && "${{ github.head_ref }}" != "preprod_odex25_inventory" ]]; then
echo "::error ::You can only merge to 'master_odex25_inventory' from 'preprod_odex25_inventory' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "master_odex25_maintenance" && "${{ github.head_ref }}" != "preprod_odex25_maintenance" ]]; then
echo "::error ::You can only merge to 'master_odex25_maintenance' from 'preprod_odex25_maintenance' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "master_odex25_mobile" && "${{ github.head_ref }}" != "preprod_odex25_mobile" ]]; then
echo "::error ::You can only merge to 'master_odex25_mobile' from 'preprod_odex25_mobile' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "master_odex25_pos" && "${{ github.head_ref }}" != "preprod_odex25_pos" ]]; then
echo "::error ::You can only merge to 'master_odex25_pos' from 'preprod_odex25_pos' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "master_odex25_project" && "${{ github.head_ref }}" != "preprod_odex25_project" ]]; then
echo "::error ::You can only merge to 'master_odex25_project' from 'preprod_odex25_project' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "master_odex25_purchase" && "${{ github.head_ref }}" != "preprod_odex25_purchase" ]]; then
echo "::error ::You can only merge to 'master_odex25_purchase' from 'preprod_odex25_purchase' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "master_odex25_realstate" && "${{ github.head_ref }}" != "preprod_odex25_realstate" ]]; then
echo "::error ::You can only merge to 'master_odex25_realstate' from 'preprod_odex25_realstate' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "master_odex25_sales" && "${{ github.head_ref }}" != "preprod_odex25_sales" ]]; then
echo "::error ::You can only merge to 'master_odex25_sales' from 'preprod_odex25_sales' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "master_odex25_survey" && "${{ github.head_ref }}" != "preprod_odex25_survey" ]]; then
echo "::error ::You can only merge to 'master_odex25_survey' from 'preprod_odex25_survey' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "master_odex25_transactions" && "${{ github.head_ref }}" != "preprod_odex25_transactions" ]]; then
echo "::error ::You can only merge to 'master_odex25_transactions' from 'preprod_odex25_transactions' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "master_odex25_website" && "${{ github.head_ref }}" != "preprod_odex25_website" ]]; then
echo "::error ::You can only merge to 'master_odex25_website' from 'preprod_odex25_website' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "master_openeducat_erp-14.0.1.0" && "${{ github.head_ref }}" != "preprod_openeducat_erp-14.0.1.0" ]]; then
echo "::error ::You can only merge to 'master_openeducat_erp-14.0.1.0' from 'preprod_openeducat_erp-14.0.1.0' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "master_odex25_ensan" && "${{ github.head_ref }}" != "preprod_odex25_ensan" ]]; then
echo "::error ::You can only merge to 'master_odex25_ensan' from 'preprod_odex25_ensan' branch!"
exit 1
fi
if [[ "${{ github.base_ref }}" == "master_odex25_helpdesk" && "${{ github.head_ref }}" != "preprod_odex25_helpdesk" ]]; then
echo "::error ::You can only merge to 'master_odex25_helpdesk' from 'preprod_odex25_helpdesk' branch!"
exit 1
fi
# ❌ Block ALL merges to 'master'
if [[ "${{ github.base_ref }}" == "master" ]]; then
echo "::error ::Merging to 'master' branch is not allowed!"
exit 1
fi
echo "Merge validation passed."

View File

@ -93,17 +93,12 @@ class EmployeeOtherRequest(models.Model):
if item.request_type == 'dependent':
if not item.employee_dependant:
raise exceptions.Warning(_('Please The dependents were not Included'))
#if item.employee_id.contract_id.contract_status == 'single':
#raise exceptions.Warning(_('You can not Add Fimaly record Because Employee is Single'))
# if item.employee_id.contract_id.contract_status == 'single':
# raise exceptions.Warning(_('You can not Add Fimaly record Because Employee is Single'))
else:
for rec in item.employee_dependant:
if not rec.attachment:
raise exceptions.Warning(_('Please Insert dependents Attachments Files Below!'))
item.state = "submit"
if not rec.attachment:
raise exceptions.Warning(_('Please Insert dependents Attachments Files Below!'))
if item.request_type == 'qualification':
if not item.qualification_employee:
@ -111,22 +106,18 @@ class EmployeeOtherRequest(models.Model):
for rec in item.qualification_employee:
if not rec.attachment:
raise exceptions.Warning(_('Please Insert Attachments Files Below!'))
else:
item.state = "submit"
if item.request_type == 'certification':
if not item.certification_employee:
raise exceptions.Warning(_('Please The qualification or certification were not Insert Below!'))
for rec in item.certification_employee:
if not rec.attachment:
raise exceptions.Warning(_('Please Insert Attachments Files Below!'))
else:
item.state = "submit"
if item.request_type in ['suggestion', 'complaint']:
item.state = "submit"
else:
if item.request_type in ['suggestion', 'complaint']:
item.state = "submit"
else:
item.state = "confirm"
item.state = "confirm"
def confirm(self):
#self.state = 'confirm'
@ -267,5 +258,5 @@ class HrCclassification(models.Model):
_name = 'hr.classification'
_rec_name = 'name'
name = fields.Char(string='Name') # Translatable
active = fields.Boolean(default=True, string='Active')
name = fields.Char(string='الاسم') # Translatable
active = fields.Boolean(default=True, string='نشط')

View File

@ -25,7 +25,7 @@
<field name="model">employee.overtime.request</field>
<field name="arch" type="xml">
<form>
<header>
<header>f
<button name="submit" string="Submit" class="oe_highlight" type="object"
states="draft" groups="base.group_user"/>

View File

@ -269,11 +269,11 @@
<field name="name">hr.classification.form</field>
<field name="model">hr.classification</field>
<field name="arch" type="xml">
<form string="HR Classification">
<form string="تصنيفات المقترحات والشكاوي">
<sheet>
<group>
<field name="name" string="الاسم"/>
<field name="active" string="الحالة"/>
<field name="active" string="نشط"/>
</group>
</sheet>
</form>
@ -281,14 +281,14 @@
</record>
<record model="ir.actions.act_window" id="employee_hr_classification_actionn">
<field name="name">HR Classifications</field>
<field name="name">تصنيفات المقترحات والشكاوي</field>
<field name="res_model">hr.classification</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem name="التصنيف " id="hr_classification_menu_item"
<menuitem name="اعداد التصنيف " id="hr_classification_menu_item"
parent="hr.hr_menu_configuration"
action="employee_hr_classification_actionn"
/>

View File

@ -257,56 +257,60 @@ class StandardAppraisalLines(models.Model):
_name = 'standard.appraisal.line'
_rec_name = 'greed'
_description = 'Standard Appraisal line'
standard_appraisal_employee_line = fields.Many2one('hr.employee.appraisal')
greed = fields.Float()
accrued_greed = fields.Float()
question = fields.Char()
great_level = fields.Float()
priority = fields.Selection(
[
[ ('0', '0'),
('1', '1'),
('2', '2'),
('3', '3'),
('4', '4'),
('5', '5'),
('6', '6'),
],
string='Priority',
compute='_compute_priority',
inverse='_inverse_priority',
store=True
)
from_greed = fields.Boolean(default=False)
from_priority = fields.Boolean(default=False)
standard_appraisal_employee_line = fields.Many2one('hr.employee.appraisal')
@api.depends('greed', 'great_level')
@api.onchange('greed', 'great_level')
def _compute_priority(self):
for rec in self:
if rec.from_priority:
# Reset and skip to avoid circular trigger
rec.from_priority = False
continue
rec.from_greed = True
if rec.great_level:
value = rec.greed / (rec.great_level / 5)
# 3.5
if 1 <= value <= 2:
if 1 <= value < 2:
rec.priority = '1'
elif 2 < value <= 3:
elif 2 <= value < 3:
rec.priority = '2'
# 3.5
elif 3 < value <= 4:
elif 3 <= value < 4:
rec.priority = '3'
# 4
elif 4 < value <= 5:
elif 4 <= value < 5:
rec.priority = '4'
elif value > 5:
elif value >= 5:
rec.priority = '5'
else:
rec.priority = '0' # fallback
rec.priority = '0'
else:
rec.priority = '0'
@api.onchange('priority')
def _inverse_priority(self):
for rec in self:
if rec.from_greed:
# Reset and skip to avoid circular trigger
rec.from_greed = False
continue
rec.from_priority = True
if rec.great_level and rec.priority:
# 3*2
# 2*4
rec.greed = int(rec.priority) * (rec.great_level / 5)
@api.constrains('greed', 'great_level')

View File

@ -566,6 +566,7 @@ class HrPayslipInput(models.Model):
class HrPayslipRun(models.Model):
_name = 'hr.payslip.run'
_description = 'Payslip Batches'
_order = 'date_start desc'
_inherit = ['mail.thread', 'mail.activity.mixin']
name = fields.Char(required=True, readonly=True, states={'draft': [('readonly', False)]})

View File

@ -76,7 +76,7 @@
decoration-muted="state == 'cancel'" string="Payslips">
<field name="number"/>
<field name="employee_id"/>
<field name="name"/>
<!-- <field name="name"/>-->
<field name="date_from"/>
<field name="date_to"/>
<field name="state"/>
@ -201,25 +201,25 @@
</group>
</form>
</field>
<separator string="Other Inputs"/>
<field name="input_line_ids" colspan="4" nolabel="1">
<tree string="Input Data" editable="bottom">
<field name="name"/>
<field name="code"/>
<field name="amount"/>
<field name="contract_id"/>
<field name="sequence" invisible="True"/>
</tree>
<form string="Payslip Line">
<group col="4">
<field name="name"/>
<field name="code"/>
<field name="sequence"/>
<field name="amount"/>
<field name="contract_id"/>
</group>
</form>
</field>
<!-- <separator string="Other Inputs"/>-->
<!-- <field name="input_line_ids" colspan="4" nolabel="1">-->
<!-- <tree string="Input Data" editable="bottom">-->
<!-- <field name="name"/>-->
<!-- <field name="code"/>-->
<!-- <field name="amount"/>-->
<!-- <field name="contract_id"/>-->
<!-- <field name="sequence" invisible="True"/>-->
<!-- </tree>-->
<!-- <form string="Payslip Line">-->
<!-- <group col="4">-->
<!-- <field name="name"/>-->
<!-- <field name="code"/>-->
<!-- <field name="sequence"/>-->
<!-- <field name="amount"/>-->
<!-- <field name="contract_id"/>-->
<!-- </group>-->
<!-- </form>-->
<!-- </field>-->
</page>
<page string="Salary Computation">
<field name="line_ids" colspan="4" nolabel="1">
@ -296,6 +296,7 @@
<filter string="Draft" name="draft" domain="[('state','=','draft')]" help="Draft Slip"/>
<filter string="Done" name="done" domain="[('state','=','done')]" help="Done Slip"/>
<field name="employee_id"/>
<field name="payslip_run_id"/>
<group expand="0" string="Group By">
<filter string="Employees" name="employee_id" context="{'group_by':'employee_id'}"/>
@ -444,7 +445,12 @@
<menuitem id="menu_hr_payslip_run"
action="action_hr_payslip_run_tree"
parent="menu_hr_payroll_root"/>
parent="menu_hr_payroll_root"
groups=
"hr_base.group_executive_manager,
hr_base.group_general_manager,
exp_hr_payroll.group_hr_payroll_user"
/>
<!-- Shortcuts -->

View File

@ -389,7 +389,6 @@ msgstr "مؤتمر"
#. module: exp_official_mission
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: model:ir.model.fields.selection,name:exp_official_mission.selection__hr_employee__work_state__consultation
#: model:ir.model.fields.selection,name:exp_official_mission.selection__hr_official_mission_type__work_state__consultation
#, python-format
@ -488,8 +487,6 @@ msgstr "الفترة"
#. module: exp_official_mission
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#, python-format
msgid "Date Form Must Be Less than Date To"
msgstr "تاريخ البداية يجب ان يكون قبل او يساوي تاريخ النهاية"
@ -585,7 +582,6 @@ msgstr "الأيام"
#. module: exp_official_mission
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: model:ir.model.fields.selection,name:exp_official_mission.selection__hr_employee__work_state__delegate
#: model:ir.model.fields.selection,name:exp_official_mission.selection__hr_official_mission_type__work_state__delegate
#, python-format
@ -613,7 +609,6 @@ msgstr "تصديق مدير الادارة"
#. module: exp_official_mission
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: model:ir.model.fields.selection,name:exp_official_mission.selection__hr_employee__work_state__depute
#: model:ir.model.fields.selection,name:exp_official_mission.selection__hr_official_mission_type__work_state__depute
#, python-format
@ -687,16 +682,6 @@ msgstr "المدة بالايــام"
msgid "Duration Hours"
msgstr "المدة بالساعات"
#. module: exp_official_mission
#: model_terms:ir.ui.view,arch_db:exp_official_mission.employee_especially_hours_form_view
#: model_terms:ir.ui.view,arch_db:exp_official_mission.employee_training_form_view
#: model_terms:ir.ui.view,arch_db:exp_official_mission.employee_training_tree_view
msgid "Total Hours"
msgstr "مجموع الساعات"
#. module: exp_official_mission
#: model:ir.model.fields,field_description:exp_official_mission.field_hr_official_mission__duration_type
#: model:ir.model.fields,field_description:exp_official_mission.field_hr_official_mission_type__duration_type
@ -717,7 +702,6 @@ msgstr "زمن خروج مبكر"
#. module: exp_official_mission
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: model:ir.model.fields.selection,name:exp_official_mission.selection__hr_employee__work_state__emission
#: model:ir.model.fields.selection,name:exp_official_mission.selection__hr_official_mission_type__work_state__emission
#, python-format
@ -1021,7 +1005,6 @@ msgstr ""
#. module: exp_official_mission
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: model:ir.model.fields.selection,name:exp_official_mission.selection__hr_employee__work_state__work
#: model:ir.model.fields.selection,name:exp_official_mission.selection__hr_official_mission_type__work_state__work
#, python-format
@ -1113,7 +1096,6 @@ msgstr ""
#. module: exp_official_mission
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: model:ir.model.fields.selection,name:exp_official_mission.selection__hr_employee__work_state__legation
#: model:ir.model.fields.selection,name:exp_official_mission.selection__hr_official_mission_type__work_state__legation
#, python-format
@ -1376,8 +1358,6 @@ msgstr ""
#. module: exp_official_mission
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#, python-format
msgid "Number of hours to must be greater than hours from"
msgstr "ساعة البداية يجب ان تكون قبل ساعة النهاية"
@ -1578,7 +1558,6 @@ msgstr ""
#. module: exp_official_mission
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: model:ir.model.fields.selection,name:exp_official_mission.selection__hr_employee__work_state__secondment
#: model:ir.model.fields.selection,name:exp_official_mission.selection__hr_official_mission_type__work_state__secondment
#, python-format
@ -1734,7 +1713,6 @@ msgstr "الحد الأعلى لعدد الموظفين يجب ان يكون ا
#. module: exp_official_mission
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#, python-format
msgid "There is no total for rule : %s"
msgstr " %s :ليس ههنالك قيمة للاستحقاق"
@ -1810,7 +1788,6 @@ msgstr "نوع طلب التذكرة"
#: model_terms:ir.ui.view,arch_db:exp_official_mission.employee_training_form_view
#: model_terms:ir.ui.view,arch_db:exp_official_mission.employee_training_tree_view
#: model_terms:ir.ui.view,arch_db:exp_official_mission.hr_employees_training_lines_form
#: model_terms:ir.ui.view,arch_db:exp_official_mission.employee_training_tree_view
msgid "Total Hours"
msgstr "مجموع الساعات"
@ -1836,9 +1813,6 @@ msgstr ""
#. module: exp_official_mission
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: model:ir.model.fields,field_description:exp_official_mission.field_hr_group_employee_appraisal__mission_id
#: model_terms:ir.ui.view,arch_db:exp_official_mission.view_employee_training_inherit
#, python-format
@ -1986,25 +1960,18 @@ msgstr "ورشة عمل"
#. module: exp_official_mission
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#, python-format
msgid "Wrong Time Format.!"
msgstr "صيغة الوقت خطآ.!"
#. module: exp_official_mission
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#, python-format
msgid "Wrong percentage base or quantity defined for salary rule %s (%s)."
msgstr " %s (%s)خطأ التاكد نسبة قاعده الرواتب "
#. module: exp_official_mission
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#, python-format
msgid "Wrong quantity defined for salary rule %s (%s)."
msgstr " %s (%s)خطأ التاكد من تعريف قاعده الرواتب "
@ -2047,7 +2014,6 @@ msgstr "لايمكن حذف فئة التذكرة وهناك عقد موظف م
#. module: exp_official_mission
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#, python-format
msgid "You can not delete record in state not in draft"
msgstr "لا يمكن حذف السجل اذا كان في حالة غير مبدئي"
@ -2150,9 +2116,6 @@ msgstr "الاسم"
#. module: exp_official_mission
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#, python-format
msgid "Company working calendar is not configured."
msgstr "لم يتم ضبط تقويم عمل الشركة."
@ -2164,7 +2127,6 @@ msgstr "أيام عمل فقط"
#. module: exp_official_mission
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: model:ir.model.fields.selection,name:exp_official_mission.selection__hr_employee__work_state__others
#: model:ir.model.fields.selection,name:exp_official_mission.selection__hr_official_mission_type__work_state__others
#, python-format
@ -2523,7 +2485,6 @@ msgstr "الحالة"
#. module: exp_official_mission
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: code:addons/exp_official_mission/models/hr_official_mission.py:0
#: model:ir.model.fields.selection,name:exp_official_mission.selection__hr_official_mission__state__draft
#: model:ir.model.fields.selection,name:exp_official_mission.selection__hr_official_mission_employee__status__draft
#, python-format
@ -2633,22 +2594,16 @@ msgid "Training Details"
msgstr "تفاصيل الدورة التدريبية"
#. module: exp_official_mission
#: model:ir.model.fields,field_description:exp_official_mission.field_hr_official_mission__training_details
#: model:ir.model.fields,field_description:exp_official_mission.field_hr_official_mission_employee__training_details
#: model_terms:ir.ui.view,arch_db:exp_official_mission.employee_training_form_view
msgid "Training Table"
msgstr "جدول الدورة"
#. module: exp_official_mission
#: model:ir.model.fields,field_description:exp_official_mission.field_hr_official_mission__training_details
#: model:ir.model.fields,field_description:exp_official_mission.field_hr_official_mission_employee__training_details
#: model_terms:ir.ui.view,arch_db:exp_official_mission.employee_training_form_view
msgid "Description"
msgstr "وصف"
#. module: exp_official_mission
#: model:ir.model.fields,field_description:exp_official_mission.field_hr_official_mission__training_details
#: model:ir.model.fields,field_description:exp_official_mission.field_hr_official_mission_employee__training_details
#: model_terms:ir.ui.view,arch_db:exp_official_mission.employee_training_form_view
msgid "Trainer"
msgstr "المدرب"

View File

@ -7,7 +7,7 @@ class EmployeeAppraisal(models.Model):
_inherit= 'hr.employee.appraisal'
mission_id = fields.Many2one('hr.official.mission', string="Training Course",domain=[("mission_type.work_state", "=", "training")])
course_name = fields.Many2one(related='mission_id.course_name',string="Course Name")
course_name = fields.Many2one(related='mission_id.course_name',string="Course Name",store=True)
@api.onchange('department_id', 'mission_id', 'appraisal_type')
def employee_ids_domain(self):

View File

@ -49,7 +49,12 @@
<field name="model_id" ref="model_hr_payslip"/>
<field name="domain_force">[(1,'=',1)]</field>
<field name="groups" eval="[(4, ref('exp_payroll_custom.group_hr_payroll_contributor')),
(4, ref('hr.group_hr_user')),(4, ref('hr.group_hr_manager'))]"/>
(4, ref('hr.group_hr_user')),(4, ref('hr.group_hr_manager')),
(4, ref('hr_base.group_general_manager')),
(4, ref('exp_hr_payroll.group_hr_payroll_user')),
(4, ref('hr_base.group_executive_manager')),
]"/>
</record>
<record id="hr_payslip_rule_comp_rule" model="ir.rule">

View File

@ -98,7 +98,9 @@
<menuitem id="employee_advantage_menu" name="Employee Allowances and Deductions"
parent="exp_hr_payroll.menu_hr_payroll_root" action="employee_advantage_list_action" sequence="10"
groups="hr.group_hr_user,hr.group_hr_manager"/>
groups="hr.group_hr_user,hr.group_hr_manager,hr_base.group_executive_manager,hr_base.group_general_manager,exp_hr_payroll.group_hr_payroll_user"
/>
</data>
</odoo>

View File

@ -126,8 +126,15 @@
</record>
<menuitem id="employee_reward_menu" name="Employee Reward and Allowances"
parent="exp_hr_payroll.menu_hr_payroll_root" action="employee_reward_list_action" sequence="10"
groups="hr.group_hr_user,hr_base.group_department_manager,hr_base.group_division_manager,hr_base.group_general_manager"/>
parent="exp_hr_payroll.menu_hr_payroll_root"
action="employee_reward_list_action" sequence="10"
groups=
"hr_base.group_executive_manager,
hr.group_hr_user,
hr_base.group_department_manager,
hr_base.group_division_manager,
hr_base.group_general_manager,
exp_hr_payroll.group_hr_payroll_user"/>
</data>
</odoo>

View File

@ -213,7 +213,7 @@
<field name="arch" type="xml">
<tree position="replace">
<tree decoration-success="state=='transfered'" decoration-info="state == 'draft'">
<field name="name"/>
<!-- <field name="name"/>-->
<field name="date_start"/>
<field name="date_end"/>
<field name="credit_note" invisible="1"/>
@ -289,7 +289,7 @@
<!--field name="number"/-->
<field name="employee_no" string="Employee Number"/>
<field name="employee_id"/>
<field name="name"/>
<!-- <field name="name"/>-->
<field name="company_id" groups="base.group_multi_company" options="{'no_create': True}"/>
<field name="date_from"/>
<field name="date_to"/>