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

This commit is contained in:
Bakry 2025-07-29 14:01:24 +03:00
commit cc233000ae
15 changed files with 172 additions and 125 deletions

View File

@ -66,7 +66,7 @@ jobs:
run: |
sudo chmod +x /home/${{ secrets.CLIENT_USER }}/scripts/pull/preprod_pull_standard_code.sh
sudo /home/${{ secrets.CLIENT_USER }}/scripts/pull/preprod_pull_standard_code.sh
sudo systemctl restart ${{ secrets.ENSAN_APP_PREPROD_SERVICE }} ${{ secrets.ODEX25_GENERAL_PREPROD_SERVICE }} ${{ secrets.ODEX25_STANDARD_PREPROD_SERVICE }} ${{ secrets.TWAHOD_APP_PREPROD_SERVICE }} ${{ secrets.ODEX25_DEMO_PREPROD_SERVICE }} ${{ secrets.HELPDESK_PREPROD_SERVICE }} ${{ secrets.CYBER_APP_PREPROD_SERVICE }}
sudo systemctl restart ${{ secrets.ENSAN_APP_PREPROD_SERVICE }} ${{ secrets.ODEX25_GENERAL_PREPROD_SERVICE }} ${{ secrets.ODEX25_STANDARD_PREPROD_SERVICE }} ${{ secrets.TWAHOD_APP_PREPROD_SERVICE }} ${{ secrets.ODEX25_DEMO_PREPROD_SERVICE }} ${{ secrets.HELPDESK_PREPROD_SERVICE }} ${{ secrets.CYBER_APP_PREPROD_SERVICE }} ${{ secrets.JAZALA_APP_PREPROD_SERVICE }}
if [ $? -eq 0 ]; then
echo "** [INFO] "PREPROD" services have been restarted."
else
@ -82,7 +82,7 @@ jobs:
run: |
sudo chmod +x /home/${{ secrets.CLIENT_USER }}/scripts/pull/dev_pull_standard_code.sh
sudo /home/${{ secrets.CLIENT_USER }}/scripts/pull/dev_pull_standard_code.sh
sudo systemctl restart ${{ secrets.ENSAN_APP_TEST_SERVICE }} ${{ secrets.ODEX25_GENERAL_TEST_SERVICE }} ${{ secrets.ODEX25_STANDARD_TEST_SERVICE }} ${{ secrets.TWAHOD_APP_TEST_SERVICE }} ${{ secrets.HELPDESK_TEST_SERVICE }} ${{ secrets.KAZ_LIBRARY_TEST_SERVICE }} ${{ secrets.CYBER_APP_TEST_SERVICE }}
sudo systemctl restart ${{ secrets.ENSAN_APP_TEST_SERVICE }} ${{ secrets.ODEX25_GENERAL_TEST_SERVICE }} ${{ secrets.ODEX25_STANDARD_TEST_SERVICE }} ${{ secrets.TWAHOD_APP_TEST_SERVICE }} ${{ secrets.HELPDESK_TEST_SERVICE }} ${{ secrets.KAZ_LIBRARY_TEST_SERVICE }} ${{ secrets.CYBER_APP_TEST_SERVICE }} ${{ secrets.JAZALA_APP_TEST_SERVICE }}
if [ $? -eq 0 ]; then
echo "** [INFO] "DEV" services have been restarted."
else

View File

@ -16,6 +16,7 @@ on:
- Ekram-Project
- Sahli-Project
- Sahli-Stage-Project
- Jazala-Project
jobs:
# Cyber Project
@ -36,7 +37,7 @@ jobs:
ensan_master_server:
name: Deploy to Ensan Master
runs-on: ensan-client-project-runner
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'Ensan-Project' && (github.ref == 'refs/heads/master_odex-event' || github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_fleet' || github.ref == 'refs/heads/master_odex25_ENSAN' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_maintenance' || github.ref == 'refs/heads/master_odex25_mobile' || github.ref == 'refs/heads/master_odex25_pos' || github.ref == 'refs/heads/master_odex25_project' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_realstate' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_survey' || github.ref == 'refs/heads/master_odex25_transactions' || github.ref == 'refs/heads/master_odex25_website' || github.ref == 'refs/heads/master_openeducat_erp-14.0.1.0' || github.ref == 'refs/heads/master_odex25_ensan') &&
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'Ensan-Project' && (github.ref == 'refs/heads/master_odex-event' || github.ref == 'refs/heads/master_odex25_helpdesk' || github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_fleet' || github.ref == 'refs/heads/master_odex25_ENSAN' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_maintenance' || github.ref == 'refs/heads/master_odex25_mobile' || github.ref == 'refs/heads/master_odex25_pos' || github.ref == 'refs/heads/master_odex25_project' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_realstate' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_survey' || github.ref == 'refs/heads/master_odex25_transactions' || github.ref == 'refs/heads/master_odex25_website' || github.ref == 'refs/heads/master_openeducat_erp-14.0.1.0' || github.ref == 'refs/heads/master_odex25_ensan') &&
(github.actor == 'moutazmuhammad' ||
github.actor == 'expsa' ||
github.actor == 'ahmadaking' ||
@ -60,7 +61,7 @@ jobs:
helpdesk_maser_server:
name: Deploy to Helpdesk Master
runs-on: helpdesk_server
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'Helpdesk-Khabir-Project' && (github.ref == 'refs/heads/master_odex-event' || github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_fleet' || github.ref == 'refs/heads/master_odex25_ENSAN' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_maintenance' || github.ref == 'refs/heads/master_odex25_mobile' || github.ref == 'refs/heads/master_odex25_pos' || github.ref == 'refs/heads/master_odex25_project' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_realstate' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_survey' || github.ref == 'refs/heads/master_odex25_transactions' || github.ref == 'refs/heads/master_odex25_website' || github.ref == 'refs/heads/master_openeducat_erp-14.0.1.0' || github.ref == 'refs/heads/master_odex25_ensan') &&
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'Helpdesk-Khabir-Project' && (github.ref == 'refs/heads/master_odex-event' || github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_fleet' || github.ref == 'refs/heads/master_odex25_ENSAN' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_maintenance' || github.ref == 'refs/heads/master_odex25_mobile' || github.ref == 'refs/heads/master_odex25_pos' || github.ref == 'refs/heads/master_odex25_project' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_realstate' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_survey' || github.ref == 'refs/heads/master_odex25_transactions' || github.ref == 'refs/heads/master_odex25_website' || github.ref == 'refs/heads/master_openeducat_erp-14.0.1.0' || github.ref == 'refs/heads/master_odex25_ensan' || github.ref == 'refs/heads/master_odex25_helpdesk') &&
(github.actor == 'moutazmuhammad' ||
github.actor == 'expsa' ||
github.actor == 'ahmadaking' ||
@ -84,7 +85,7 @@ jobs:
kaz_master_server:
name: Deploy to KAZ Master
runs-on: kaz-library-project-runner
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'King-AbdelAziz-Library-Project' && (github.ref == 'refs/heads/master_odex-event' || github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_fleet' || github.ref == 'refs/heads/master_odex25_ENSAN' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_maintenance' || github.ref == 'refs/heads/master_odex25_mobile' || github.ref == 'refs/heads/master_odex25_pos' || github.ref == 'refs/heads/master_odex25_project' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_realstate' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_survey' || github.ref == 'refs/heads/master_odex25_transactions' || github.ref == 'refs/heads/master_odex25_website' || github.ref == 'refs/heads/master_openeducat_erp-14.0.1.0' || github.ref == 'refs/heads/master_odex25_ensan') &&
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'King-AbdelAziz-Library-Project' && (github.ref == 'refs/heads/master_odex-event' || github.ref == 'refs/heads/master_odex25_helpdesk' || github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_fleet' || github.ref == 'refs/heads/master_odex25_ENSAN' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_maintenance' || github.ref == 'refs/heads/master_odex25_mobile' || github.ref == 'refs/heads/master_odex25_pos' || github.ref == 'refs/heads/master_odex25_project' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_realstate' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_survey' || github.ref == 'refs/heads/master_odex25_transactions' || github.ref == 'refs/heads/master_odex25_website' || github.ref == 'refs/heads/master_openeducat_erp-14.0.1.0' || github.ref == 'refs/heads/master_odex25_ensan') &&
(github.actor == 'moutazmuhammad' ||
github.actor == 'expsa' ||
github.actor == 'ahmadaking' ||
@ -109,7 +110,7 @@ jobs:
twahod_master_server:
name: Deploy to Twahod Master
runs-on: twahod-client-project-runner
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'Twahod-Project' && (github.ref == 'refs/heads/master_odex-event' || github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_fleet' || github.ref == 'refs/heads/master_odex25_ENSAN' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_maintenance' || github.ref == 'refs/heads/master_odex25_mobile' || github.ref == 'refs/heads/master_odex25_pos' || github.ref == 'refs/heads/master_odex25_project' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_realstate' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_survey' || github.ref == 'refs/heads/master_odex25_transactions' || github.ref == 'refs/heads/master_odex25_website' || github.ref == 'refs/heads/master_openeducat_erp-14.0.1.0' || github.ref == 'refs/heads/master_odex25_ensan') &&
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'Twahod-Project' && (github.ref == 'refs/heads/master_odex-event' || github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_helpdesk' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_fleet' || github.ref == 'refs/heads/master_odex25_ENSAN' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_maintenance' || github.ref == 'refs/heads/master_odex25_mobile' || github.ref == 'refs/heads/master_odex25_pos' || github.ref == 'refs/heads/master_odex25_project' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_realstate' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_survey' || github.ref == 'refs/heads/master_odex25_transactions' || github.ref == 'refs/heads/master_odex25_website' || github.ref == 'refs/heads/master_openeducat_erp-14.0.1.0' || github.ref == 'refs/heads/master_odex25_ensan') &&
(github.actor == 'moutazmuhammad' ||
github.actor == 'expsa' ||
github.actor == 'ahmadaking' ||
@ -133,7 +134,7 @@ jobs:
ekram_master_server:
name: Deploy to Ekram Master
runs-on: ekram-client-project-runner
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'Ekram-Project' && (github.ref == 'refs/heads/master_odex-event' || github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_fleet' || github.ref == 'refs/heads/master_odex25_ENSAN' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_maintenance' || github.ref == 'refs/heads/master_odex25_mobile' || github.ref == 'refs/heads/master_odex25_pos' || github.ref == 'refs/heads/master_odex25_project' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_realstate' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_survey' || github.ref == 'refs/heads/master_odex25_transactions' || github.ref == 'refs/heads/master_odex25_website' || github.ref == 'refs/heads/master_openeducat_erp-14.0.1.0' || github.ref == 'refs/heads/master_odex25_ensan') &&
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'Ekram-Project' && (github.ref == 'refs/heads/master_odex-event' || github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_helpdesk' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_fleet' || github.ref == 'refs/heads/master_odex25_ENSAN' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_maintenance' || github.ref == 'refs/heads/master_odex25_mobile' || github.ref == 'refs/heads/master_odex25_pos' || github.ref == 'refs/heads/master_odex25_project' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_realstate' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_survey' || github.ref == 'refs/heads/master_odex25_transactions' || github.ref == 'refs/heads/master_odex25_website' || github.ref == 'refs/heads/master_openeducat_erp-14.0.1.0' || github.ref == 'refs/heads/master_odex25_ensan') &&
(github.actor == 'moutazmuhammad' ||
github.actor == 'expsa' ||
github.actor == 'ahmadaking' ||
@ -157,7 +158,7 @@ jobs:
sahli_prod_master_server:
name: Deploy to Sahli Prod Master
runs-on: sahli-client-project-runner
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'Sahli-Project' && (github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_project') &&
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'Sahli-Project' && (github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_helpdesk' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_project') &&
(github.actor == 'moutazmuhammad' ||
github.actor == 'expsa' ||
github.actor == 'ahmadaking' ||
@ -180,7 +181,7 @@ jobs:
sahli_stage_master_server:
name: Deploy to Sahli Stage Master
runs-on: sahli-client-project-runner
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'Sahli-Stage-Project' && (github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_project') &&
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'Sahli-Stage-Project' && (github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_helpdesk' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_project') &&
(github.actor == 'moutazmuhammad' ||
github.actor == 'expsa' ||
github.actor == 'ahmadaking' ||
@ -201,4 +202,27 @@ jobs:
sudo ${{ secrets.SAHLI_STANDARD_FOLDER_PATH }}/scripts/pull_code.sh ${{ secrets.SAHLI_PROJECT_USER }} ${{ secrets.SAHLI_STANDARD_FOLDER_PATH }} ${{ secrets.SAHLI_STAGE_MASTER_SERVICE }} master ${GITHUB_REF#refs/heads/master_} ${GITHUB_REF#refs/heads/} ${{ secrets.GH_TOKEN }}
# Jazala project
jazala_master_server:
name: Deploy to Jazala Master
runs-on: jazala-client-project-runner
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'Jazala-Project' && (github.ref == 'refs/heads/master_odex-event' || github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_fleet' || github.ref == 'refs/heads/master_odex25_helpdesk' || github.ref == 'refs/heads/master_odex25_ENSAN' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_maintenance' || github.ref == 'refs/heads/master_odex25_mobile' || github.ref == 'refs/heads/master_odex25_pos' || github.ref == 'refs/heads/master_odex25_project' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_realstate' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_survey' || github.ref == 'refs/heads/master_odex25_transactions' || github.ref == 'refs/heads/master_odex25_website' || github.ref == 'refs/heads/master_openeducat_erp-14.0.1.0' || github.ref == 'refs/heads/master_odex25_ensan') &&
(github.actor == 'moutazmuhammad' ||
github.actor == 'expsa' ||
github.actor == 'ahmadaking' ||
github.actor == 'ronozoro' ||
github.actor == 'SamirLADOUI-sa' ||
github.actor == 'Abubaker-Altaib' ||
github.actor == 'abdurrahman-saber' ||
github.actor == 'altexp' ||
github.actor == 'kchyounes19' ||
github.actor == 'mohammed-alkhazrji')
steps:
- name: Checkout And Restart Project
run: |
echo "** [INFO] Running on branch --> ${GITHUB_REF#refs/heads/}"
mkdir -p ~/master_branch_sha
echo "$(date '+%Y-%m-%d %H:%M:%S') - ${{ github.sha }}" >> ~/master_branch_sha/${GITHUB_REF#refs/heads/}
sudo chmod +x ${{ secrets.JAZALA_STANDARD_FOLDER_PATH }}/scripts/pull_code.sh
sudo ${{ secrets.JAZALA_STANDARD_FOLDER_PATH }}/scripts/pull_code.sh ${{ secrets.JAZALA_PROJECT_USER }} ${{ secrets.JAZALA_STANDARD_FOLDER_PATH }} ${{ secrets.JAZALA_MASTER_SERVICE }} master ${GITHUB_REF#refs/heads/master_} ${GITHUB_REF#refs/heads/} ${{ secrets.GH_TOKEN }}

View File

@ -2809,14 +2809,4 @@ msgstr ""
#. module: attendances
#: model_terms:ir.ui.view,arch_db:attendances.late_attendance_report_template
msgid "وقت الدخول"
msgstr ""
#. module: attendances
#: model:ir.model.fields,field_description:attendances.field_resource_calendar__grace_hour_before_work
msgid "Grace Hours Before Work"
msgstr "ساعات السماحية قبل الدوم"
#. module: attendances
#: model:ir.model.fields,field_description:attendances.field_resource_calendar__grace_hour_after_work
msgid "Grace Hours After Work"
msgstr "ساعات السماحية بعد الدوام"
msgstr ""

View File

@ -89,8 +89,6 @@ class HrAttendances(models.Model):
full_end_sign_in = fields.Float(string='End Sign In')
full_start_sign_out = fields.Float(string='Start Sign Out')
full_end_sign_out = fields.Float(string='End Sign Out')
grace_hour_before_work = fields.Float(string="Grace Hours Before Work")
grace_hour_after_work = fields.Float(string="Grace Hours After Work")
working_hours = fields.Float(string='Working Hours')
working_days = fields.Integer(string='Working Days')
break_duration = fields.Float("Break Duration", default=0.0)

View File

@ -68,7 +68,7 @@
'invisible':[('is_full_day','=',False)],
'readonly': [('state', '!=', 'draft')]}"/>
</group>
<group string="Sign Out Period" attrs="{'invisible':[('is_full_day','=',False)]}" colspan="2">
<group string="Sign Out Period" id="sign_out_period" attrs="{'invisible':[('is_full_day','=',False)]}" colspan="2">
<field name="full_min_sign_out" widget="float_time"
attrs="{'required':[('is_full_day','=',True)],
'invisible':[('is_full_day','=',False)],
@ -78,12 +78,6 @@
'invisible':[('is_full_day','=',False)],
'readonly': [('state', '!=', 'draft')]}"/>
</group>
<group colspan="2">
<field name="grace_hour_before_work" widget="float_time"/>
</group>
<group colspan="2">
<field name="grace_hour_after_work" widget="float_time"/>
</group>
</group>
<!--<group col="4" colspan="4">

View File

@ -396,13 +396,11 @@ msgstr "بند الصرف"
msgid "Accounting"
msgstr "الحسابات"
#. module: employee_requests
#: model:ir.model.fields,field_description:employee_requests.field_hr_classification__name
#: model_terms:ir.ui.view,arch_db:employee_requests.view_hr_classification_form
msgid "Name"
msgstr "الاسم "
msgid "الاسم"
msgstr ""
#. module: employee_requests
#: model:ir.model.fields,field_description:employee_requests.field_hr_classification__active
@ -416,51 +414,12 @@ msgstr "نشط "
msgid "HR Classification"
msgstr "التصنيف"
#. module: employee_requests
#: model:ir.model.fields,field_description:employee_requests.field_hr_classification__name
msgid "Classification"
msgstr "التصنيف"
#. module: employee_requests
#: model:ir.model.fields,field_description:employee_requests.field_hr_classification__name
msgid "Name"
msgstr "الاسم "
#. module: employee_requests
#: model:ir.model.fields,field_description:employee_requests.field_hr_classification__active
msgid "Active"
msgstr "نشط "
#. module: employee_requests
#: model:ir.model.fields,field_description:employee_requests.field_hr_classification__name
msgid "Classification"
msgstr "التصنيف"
#. module: employee_requests
#: model:ir.model.fields,field_description:employee_requests.field_hr_classification__name
msgid "Name"
msgstr "الاسم "
#. module: employee_requests
#: model:ir.model.fields,field_description:employee_requests.field_hr_classification__active
msgid "Active"
msgstr "نشط "
#. module: employee_requests
#: model:ir.actions.act_window,name:employee_requests.employee_hr_classification_actionn
#: model:ir.ui.menu,name:employee_requests.hr_classification_menu_item
msgid "HR Classifications"
msgstr "إعداد التصنيف"
#. module: employee_requests
#: model:ir.model.fields,field_description:employee_requests.field_employee_department_jobs__message_needaction
#: model:ir.model.fields,field_description:employee_requests.field_employee_effective_form__message_needaction
@ -1444,7 +1403,6 @@ msgstr "طلبات الموظفين"
#. module: employee_requests
#: code:addons/employee_requests/models/house_allowance_advance.py:0
#: code:addons/employee_requests/models/hr_personal_permission.py:0
#: code:addons/employee_requests/models/hr_personal_permission.py:0
#, python-format
msgid "End Date must be greater than Start Date"
msgstr "تاريخ البداية يجب ان يكون قبل تاريخ النهاية"
@ -2479,7 +2437,6 @@ msgstr "مكان استخراج المستند"
#. module: employee_requests
#: code:addons/employee_requests/models/other_request.py:0
#: code:addons/employee_requests/models/other_request.py:0
#, python-format
msgid "Please Insert Attachments Files Below!"
msgstr "فضلا يجب ارفاق صورة المؤهلات او الشهادات ادناه!"
@ -2492,7 +2449,6 @@ msgstr "فضلا لم يتم ادخال المعاليين"
#. module: employee_requests
#: code:addons/employee_requests/models/other_request.py:0
#: code:addons/employee_requests/models/other_request.py:0
#, python-format
msgid "Please The qualification or certification were not Insert Below!"
msgstr "فضلا لم يتم ادخال المؤهلات او الشهادات ادناه!"
@ -2796,14 +2752,12 @@ msgstr "هذا الموظف فعليا في إستئذان خلال هذا ال
#. module: employee_requests
#: code:addons/employee_requests/models/hr_personal_permission.py:0
#: code:addons/employee_requests/models/hr_personal_permission.py:0
#, python-format
msgid "Sorry You Have Used All Your Permission Hours In This Month"
msgstr "تم استخدام كل ساعات الإستئذان المسموح بها خلال هذا الشهر"
#. module: employee_requests
#: code:addons/employee_requests/models/hr_personal_permission.py:0
#: code:addons/employee_requests/models/hr_personal_permission.py:0
#, python-format
msgid ""
"Sorry You Have Used All Your Permission In This Day you have one permission "
@ -2818,7 +2772,6 @@ msgstr "لايمكن الطلب بدون ادراج موظفين"
#. module: employee_requests
#: code:addons/employee_requests/models/employee_department_jobs.py:0
#: code:addons/employee_requests/models/employee_department_jobs.py:0
#, python-format
msgid "Sorry, It Must Be Approved By The %s Manager"
msgstr "للأسف, يجب تصديقها من المدير %s"
@ -2981,7 +2934,6 @@ msgstr "تم إرجاع الهواتف / هواتف IP"
#. module: employee_requests
#: code:addons/employee_requests/models/hr_clearance_form.py:0
#: code:addons/employee_requests/models/hr_clearance_form.py:0
#, python-format
msgid "The Clearance to be completed after the Bank Clearance Attachment"
msgstr "يجب ارفاق مستند إخلاء طرف البنك اولآ"
@ -3315,7 +3267,6 @@ msgstr "لايمكن الغاء القيدالمحاسبي %s اذا كان في
#: code:addons/employee_requests/models/employee_department_jobs.py:0
#: code:addons/employee_requests/models/employee_effective_form.py:0
#: code:addons/employee_requests/models/employee_overtime_request.py:0
#: code:addons/employee_requests/models/employee_overtime_request.py:0
#: code:addons/employee_requests/models/house_allowance_advance.py:0
#: code:addons/employee_requests/models/hr_clearance_form.py:0
#: code:addons/employee_requests/models/hr_personal_permission.py:0
@ -3487,7 +3438,7 @@ msgid "Submit"
msgstr "إرســـال"
#. module: employee_requests
#:model:ir.model.fields.selection,name:employee_requests.selection__hr_personal_permission_type__approval_by__direct_manager
#: model:ir.model.fields.selection,name:employee_requests.selection__hr_personal_permission_type__approval_by__direct_manager
#: model_terms:ir.ui.view,arch_db:employee_requests.employee_clearance_form_form_view
msgid "Direct Manager"
msgstr "موافقة المدير المباشر"

View File

@ -57,7 +57,7 @@
<div class="OutlineElement Rtl SCXW182515882 BCX2">
<h3 style="font-weight:bold;margin-bottom: 40px;text-align:center;font-family: 'Sakkal Majalla'!important;color:rgb(77, 168, 178);font-size: 20pt;margin-top: 0;">
<span>شهادة تعريف</span>
<span>خطاب تعريف الراتب</span>
|
<span>Employment Certificate</span>
</h3>
@ -71,7 +71,7 @@
<span style="border-bottom: 1px solid #333;">مقدم إلى:</span>
<span t-esc="doc.destination.name"/>
</p>
<span>نفيدكم بأن الموظف الموضح هويته أدناه يعمل لدى</span>
<span>نفيدكم بأن الموظف الموضح بياناته أدناه يعمل لدى</span>
<span style="font-weight: bold;"><span t-esc="env.user.sudo().company_id.name"/>-
</span>
<span>ولا يزال على رأس العمل حتى تاريخه و أعطيت له هذه الشهادة بناء على</span>
@ -99,7 +99,7 @@
<thead>
<tr>
<th colspan="2">تعريف عمل</th>
<th colspan="2">تعريف راتب</th>
<th colspan="2">Certificate of Employment</th>
</tr>
</thead>
@ -148,6 +148,13 @@
<span t-esc="doc.employee_id.country_id.name"/>
</td>
<td style="width: 25%;">Nationality</td>
</tr>
<tr>
<td style="width: 25%;">تاريخ التعيين</td>
<td colspan="2">
<span t-esc="doc.employee_id.contract_id.hiring_date"/>
</td>
<td style="width: 25%;">Hire Date</td>
</tr>
<tr>
<td style="width: 25%;">الراتب الأساسي</td>
@ -181,13 +188,6 @@
</td>
<td style="width: 25%;">Total Salary / month</td>
</tr>
<tr>
<td style="width: 25%;">تاريخ التعيين</td>
<td colspan="2">
<span t-esc="doc.employee_id.contract_id.hiring_date"/>
</td>
<td style="width: 25%;">Hire Date</td>
</tr>
</tbody>
</table>
</center>
@ -197,7 +197,7 @@
<br/>
<br/>
<h4 style="text-align: center; font-size: 12pt;">
<span>مدير إدارة الموارد البشرية</span>
<span>رئيس قسم الموارد البشرية</span>
<br/>
<span>Director of Human Resource</span>
<br/>

View File

@ -13,7 +13,7 @@
<field name="name">employee_sequence_emp_no</field>
<field name="code">hr.employee</field>
<field name="prefix"></field>
<field name="padding">5</field>
<field name="padding">1</field>
</record>
</data>

View File

@ -84,7 +84,7 @@ class HrEmployee(models.Model):
r_name = fields.Char("Name")
# fields of page work information in employees view
emp_no = fields.Char(string="Employee number", tracking=True)
emp_no = fields.Char(string="Employee number", tracking=True, default=lambda self: self._default_emp_code())
english_name = fields.Char(string="English Name")
home_no = fields.Char()
present_address = fields.Char()
@ -249,6 +249,26 @@ class HrEmployee(models.Model):
help='New participants who have no prior periods of contribution under the GOSI.')
gosi_years = fields.Integer(string="GOSI Years", compute='_compute_gosi_years', store=True,
help='GOSI Years According To The New activation Date Until Today')
@api.model
def _default_emp_code(self):
seq = self.env['ir.sequence'].next_by_code('hr.employee') or '/'
emp_seq = self.env['hr.employee'].search([('active', 'in', [False, True])])
# Get the maximum current employee number
max_number = 0
if emp_seq:
max_number = max(int(emp.emp_no) for emp in emp_seq if emp.emp_no and emp.emp_no.isdigit())
# Ensure the sequence matches the max number + 1
if int(seq) != (max_number + 1):
currnt_sequence = self.env['ir.sequence'].search([('code', '=', 'hr.employee')], limit=1)
currnt_sequence.write({'number_next_actual': max_number + 1})
seq = self.env['ir.sequence'].next_by_code('hr.employee') or '/'
return str(seq)
@api.depends('new_gosi')
def _compute_gosi_years(self):
for emp in self:

View File

@ -382,8 +382,8 @@ msgstr "تاريخ السلفة"
#: code:addons/hr_base_reports/report/handover_reprt.py:0
#: model_terms:ir.ui.view,arch_db:hr_base_reports.employee_handover_report
#, python-format
msgid "Date of Resignation"
msgstr "تاريخ الاستقالة"
msgid "Date of Request"
msgstr "تاريخ الطلب"
#. module: hr_base_reports
#: model_terms:ir.ui.view,arch_db:hr_base_reports.form_hr_leave_report_wizard
@ -698,7 +698,7 @@ msgstr "تقرير عام"
#: model_terms:ir.ui.view,arch_db:hr_base_reports.employee_handover_report
#, python-format
msgid "Employee Handover Report"
msgstr "تقرير الإستقالات"
msgstr "تقرير الإستقالات ونهاية الخدمة"
#. module: hr_base_reports
#: code:addons/hr_base_reports/report/absence_execuse.py:0
@ -992,7 +992,7 @@ msgstr "التسليم والتسلم"
#. module: hr_base_reports
#: model:ir.ui.menu,name:hr_base_reports.employee_handover_report_menu
msgid "Handover Report"
msgstr "تقرير الإستقالات"
msgstr "تقرير الإستقالات ونهاية الخدمة"
#. module: hr_base_reports
#: code:addons/hr_base_reports/wizard/overtime_report.py:0

View File

@ -26,9 +26,9 @@
<th style="text-align:center;color:#FFFFFF">Employee Name</th>
<th style="text-align:center;color:#FFFFFF">Job Title</th>
<th style="text-align:center;color:#FFFFFF">Department</th>
<th style="text-align:center;color:#FFFFFF">Join Date</th>
<th style="text-align:center;color:#FFFFFF">Reason of Resignation</th>
<th style="text-align:center;color:#FFFFFF">Date of Resignation</th>
<th style="text-align:center;color:#FFFFFF">Date of Request</th>
<th style="text-align:center;color:#FFFFFF">Join Date</th>
<th style="text-align:center;color:#FFFFFF">Last Date</th>
<th style="text-align:center;color:#FFFFFF">Location</th>
<th style="text-align:center;color:#FFFFFF">Line Manager</th>
@ -54,14 +54,14 @@
<td>
<span t-esc="o.employee_id.department_id.name"/>
</td>
<td>
<t t-esc="o.first_hire_date"/>
</td>
<td>
<span t-esc="o.cause_type.name"/>
</td>
<td>
<span t-esc="o.create_date"/>
<span t-esc="o.create_date" t-options="{'widget': 'date', 'date_only': 'true', 'format': 'yyyy-MM-dd'}"/>
</td>
<td>
<t t-esc="o.first_hire_date"/>
</td>
<td>
<span t-esc="o.last_work_date"/>
@ -81,12 +81,29 @@
</t>
</template>
<record id="employee_handover_paperformat" model="report.paperformat">
<field name="name">Employee Handover Paperformat</field>
<field name="default" eval="True" />
<field name="format">A4</field>
<field name="page_height">0</field>
<field name="page_width">0</field>
<field name="orientation">Landscape</field>
<field name="margin_top">40</field>
<field name="margin_bottom">32</field>
<field name="margin_left">7</field>
<field name="margin_right">7</field>
<field name="header_line" eval="False" />
<field name="header_spacing">35</field>
<field name="dpi">90</field>
</record>
<record id="employee_handover_report_act" model="ir.actions.report">
<field name="model">hr.termination</field>
<field name="name">Employee Handover Report</field>
<field name="report_type">qweb-pdf</field>
<field name="report_name">hr_base_reports.employee_handover_report</field>
<field name="report_file">hr_base_reports.employee_handover_report</field>
<field name="paperformat_id" ref="employee_handover_paperformat" />
</record>
<record id="employee_handover_report_act_xlsx" model="ir.actions.report">
<field name="model">hr.termination</field>

View File

@ -8,22 +8,25 @@ class EmployeeHandoverReport(models.AbstractModel):
_description = 'Employee Handover Report'
def get_result(self, data=None):
HrEmployee = self.env['hr.employee'].sudo()
HrTermination = self.env['hr.termination'].sudo()
form = data['form']
employees = False
li = []
domain = []
if form['employee_ids']:
employees = self.env['hr.employee'].sudo().browse(form['employee_ids'])
employees = HrEmployee.browse(form['employee_ids'])
else:
if form['department_ids'] and not form['employee_ids']:
domain = [('department_id', 'in', form['department_ids'])]
# domain += [('state','=','open')]
employees = self.env['hr.employee'].sudo().search(domain)
domain += [('active', 'in', [True, False])]
employees = HrEmployee.search(domain)
if not employees:
return HrTermination
value = [('last_work_date', '>=', form['date_from']), ('create_date', '<=', form['date_to']),
('state', '!=', 'refused')]
if employees:
value += [('employee_id', 'in', employees.ids)]
records = self.env['hr.termination'].sudo().search(value)
records = HrTermination.search(value)
records = records.sorted(key=lambda r: r.department_id.id)
return records
@ -67,9 +70,8 @@ class EmployeeHandoverReportXlsx(models.AbstractModel):
clm = 0
for res in [
(_('#')), (_('Employee ID')), (_('Employee Name')), (_('Job Title')),
(_('Department')), (_('Join Date')), (_('Reason of Resignation')), (_('Date of Resignation')),
(_('Last Date')),
(_('Location')), (_('Line Manager'))]:
(_('Department')), (_('Reason of Resignation')), (_('Date of Request')), (_('Join Date')),
(_('Last Date')), (_('Location')), (_('Line Manager'))]:
sheet.write(row, clm, res, format0)
clm += 1
row = 10
@ -82,9 +84,9 @@ class EmployeeHandoverReportXlsx(models.AbstractModel):
sheet.write(row, clm + 2, rec.employee_id.name, format1)
sheet.write(row, clm + 3, rec.job_id.name, format1)
sheet.write(row, clm + 4, rec.employee_id.department_id.name, format1)
sheet.write(row, clm + 5, str(rec.first_hire_date), format1)
sheet.write(row, clm + 6, rec.reason, format1)
sheet.write(row, clm + 7, str(rec.create_date), format1)
sheet.write(row, clm + 5, rec.cause_type.name, format1)
sheet.write(row, clm + 6, rec.create_date.strftime('%Y-%m-%d'), format1)
sheet.write(row, clm + 7, str(rec.first_hire_date), format1)
sheet.write(row, clm + 8, str(rec.last_work_date), format1)
sheet.write(row, clm + 9, rec.employee_id.working_location.name, format1)
sheet.write(row, clm + 10, rec.employee_id.parent_id.name, format1)

View File

@ -141,18 +141,18 @@
decoration-bf="message_needaction == True">
<field name="employee_id"/>
<field name="department_id" />
<field name="holiday_type"/>
<field name="category_id"/>
<field name="department_id" invisible="1"/>
<field name="holiday_status_id"/>
<field name="name"/>
<field name="number_of_days" string="Allocated Days" sum="Remaining Days"/>
<field name="state"/>
<field name="holiday_type" invisible="1"/>
<field name="category_id" invisible="1"/>
<field name="department_id" invisible="1"/>
<field name="name" invisible="1"/>
<field name="manager_id" invisible="1"/>
<field name="user_id" invisible="1"/>
<field name="date_from"/>
<field name="date_to"/>
<field name="date_from" invisible="1"/>
<field name="date_to" invisible="1"/>
<field name="message_needaction" invisible="1"/>
<field name="state"/>
</tree>
</field>
</record>

View File

@ -214,11 +214,50 @@
</field>
</record>
<record id="view_holiday_allocation_tree_hr_holidays_community" model="ir.ui.view">
<field name="name">hr.holidays.allocation.tree.inherit</field>
<field name="model">hr.holidays</field>
<field name="inherit_id" ref="hr_holidays_community.view_holiday_allocation_tree"/>
<field name="arch" type="xml">
<xpath expr="//tree/field[@name='state']" position="attributes">
<attribute name="widget">badge</attribute>
<attribute name="decoration-warning">state in ['confirm', 'validate']</attribute>
<attribute name="decoration-success">state == 'validate1'</attribute>
</xpath>
<xpath expr="//tree/field[@name='employee_id']" position="before">
<field name="emp_number"/>
</xpath>
</field>
</record>
<record id="view_holiday_simple_hr_holidays_community" model="ir.ui.view">
<field name="name">hr.holidays.allocation.tree.inherit</field>
<field name="model">hr.holidays</field>
<field name="inherit_id" ref="hr_holidays_community.view_holiday_simple"/>
<field name="arch" type="xml">
<xpath expr="//tree/field[@name='state']" position="attributes">
<attribute name="widget">badge</attribute>
<attribute name="decoration-warning">state in ['confirm', 'validate']</attribute>
<attribute name="decoration-success">state == 'validate1'</attribute>
</xpath>
</field>
</record>
<record id="custom_view_holiday" model="ir.ui.view">
<field name="name">hr.holidays.tree.custom</field>
<field name="model">hr.holidays</field>
<field name="inherit_id" ref="hr_holidays_community.view_holiday"/>
<field name="arch" type="xml">
<xpath expr="//tree/field[@name='state']" position="attributes">
<attribute name="widget">badge</attribute>
<attribute name="decoration-warning">state in ['confirm', 'validate']</attribute>
<attribute name="decoration-success">state == 'validate1'</attribute>
</xpath>
<xpath expr="//tree/field[@name='number_of_days']" position="attributes">
<attribute name="name">number_of_days_temp</attribute>
<attribute name="decoration-bf">1</attribute>
</xpath>
<xpath expr="//field[@name='date_from']" position="attributes">
<attribute name="widget">date</attribute>
</xpath>
@ -231,6 +270,9 @@
<xpath expr="//field[@name='date_to']" position="after">
<field name="create_date"/>
</xpath>
<xpath expr="//tree/field[@name='employee_id']" position="before">
<field name="emp_number"/>
</xpath>
<xpath expr="//field[@name='employee_id']" position="after">
<field name="department_id"/>
</xpath>
@ -243,7 +285,7 @@
<attribute name="invisible">1</attribute>
</xpath>
<field name="state" position="before">
<field name="return_from_leave"/>
<field name="return_from_leave" optional="hide"/>
<!--field name="canceled_duration"/-->
</field>
@ -273,5 +315,9 @@
</field>
</record>
<!-- view_hr_holidays_filter_inherit end -->
<record id="hr_holidays_community.open_company_allocation" model="ir.actions.act_window">
<field name="domain" eval="[('holiday_type', '=', 'employee'), ('type', '=', 'remove')]" />
</record>
</data>
</odoo>

View File

@ -95,8 +95,13 @@
<menuitem id="loan_request_type_menu" name="Loans Type" parent="loan_request_setting"
action="loan_request_type_action" sequence="3"
groups="hr.group_hr_manager,hr_loans_salary_advance.group_loan_user,hr_loans_salary_advance.group_loan_manager"/>
groups="hr_loans_salary_advance.group_loan_user,hr_loans_salary_advance.group_loan_manager"/>0
<!-- DON'T REMOVE THIS UNLINKING RECORD LINE -->
<record id="hr_loans_salary_advance.loan_request_type_menu" model="ir.ui.menu">
<field name="groups_id" eval="[(3, ref('hr.group_hr_manager'))]"/>
</record>
<!--hr.group_hr_manager,-->
</data>
</odoo>