[IMP] hr: Add signature in reports

This commit is contained in:
younes 2025-10-23 08:10:54 +01:00
parent f666b72333
commit 09ae939129
8 changed files with 194 additions and 68 deletions

View File

@ -8,7 +8,7 @@ on:
- dev_odex25_base
- dev_odex25_dms
- dev_odex25_fleet
- dev_odex25_ENSAN
- dev_odex25_helpdesk
- dev_odex25_hr
- dev_odex25_inventory
- dev_odex25_maintenance
@ -23,12 +23,13 @@ on:
- dev_odex25_website
- dev_openeducat_erp-14.0.1.0
- dev_odex25_ensan
- dev_odex25_donation
- preprod_odex-event
- preprod_odex25_accounting
- preprod_odex25_base
- preprod_odex25_dms
- preprod_odex25_fleet
- preprod_odex25_ENSAN
- preprod_odex25_helpdesk
- preprod_odex25_hr
- preprod_odex25_inventory
- preprod_odex25_maintenance
@ -43,6 +44,7 @@ on:
- preprod_odex25_website
- preprod_openeducat_erp-14.0.1.0
- preprod_odex25_ensan
- preprod_odex25_donation
workflow_dispatch:
inputs:
@ -60,7 +62,29 @@ jobs:
deploy_preprod_server:
name: Deploy to Preprod Servers
runs-on: app-sever-project-runner
if: (github.ref == 'refs/heads/preprod_odex-event' || github.ref == 'refs/heads/preprod_odex25_accounting' || github.ref == 'refs/heads/preprod_odex25_base' || github.ref == 'refs/heads/preprod_odex25_dms' || github.ref == 'refs/heads/preprod_odex25_fleet' || github.ref == 'refs/heads/preprod_odex25_ENSAN' || github.ref == 'refs/heads/preprod_odex25_hr' || github.ref == 'refs/heads/preprod_odex25_inventory' || github.ref == 'refs/heads/preprod_odex25_maintenance' || github.ref == 'refs/heads/preprod_odex25_mobile' || github.ref == 'refs/heads/preprod_odex25_pos' || github.ref == 'refs/heads/preprod_odex25_project' || github.ref == 'refs/heads/preprod_odex25_purchase' || github.ref == 'refs/heads/preprod_odex25_realstate' || github.ref == 'refs/heads/preprod_odex25_sales' || github.ref == 'refs/heads/preprod_odex25_survey' || github.ref == 'refs/heads/preprod_odex25_transactions' || github.ref == 'refs/heads/preprod_odex25_website' || github.ref == 'refs/heads/preprod_openeducat_erp-14.0.1.0' || github.ref == 'refs/heads/preprod_odex25_ensan') || (github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'preprod')
if: |
(github.ref == 'refs/heads/preprod_odex-event' ||
github.ref == 'refs/heads/preprod_odex25_accounting' ||
github.ref == 'refs/heads/preprod_odex25_base' ||
github.ref == 'refs/heads/preprod_odex25_dms' ||
github.ref == 'refs/heads/preprod_odex25_fleet' ||
github.ref == 'refs/heads/preprod_odex25_helpdesk' ||
github.ref == 'refs/heads/preprod_odex25_hr' ||
github.ref == 'refs/heads/preprod_odex25_inventory' ||
github.ref == 'refs/heads/preprod_odex25_maintenance' ||
github.ref == 'refs/heads/preprod_odex25_mobile' ||
github.ref == 'refs/heads/preprod_odex25_pos' ||
github.ref == 'refs/heads/preprod_odex25_project' ||
github.ref == 'refs/heads/preprod_odex25_purchase' ||
github.ref == 'refs/heads/preprod_odex25_realstate' ||
github.ref == 'refs/heads/preprod_odex25_sales' ||
github.ref == 'refs/heads/preprod_odex25_survey' ||
github.ref == 'refs/heads/preprod_odex25_transactions' ||
github.ref == 'refs/heads/preprod_odex25_website' ||
github.ref == 'refs/heads/preprod_openeducat_erp-14.0.1.0' ||
github.ref == 'refs/heads/preprod_odex25_ensan' ||
github.ref == 'refs/heads/preprod_odex25_donation')
|| (github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'preprod')
steps:
- name: Checkout And Restart Project
run: |
@ -76,7 +100,29 @@ jobs:
deploy_test_server:
name: Deploy to Dev Servers
runs-on: app-sever-project-runner
if: (github.ref == 'refs/heads/dev_odex-event' || github.ref == 'refs/heads/dev_odex25_accounting' || github.ref == 'refs/heads/dev_odex25_base' || github.ref == 'refs/heads/dev_odex25_dms' || github.ref == 'refs/heads/dev_odex25_fleet' || github.ref == 'refs/heads/dev_odex25_ENSAN' || github.ref == 'refs/heads/dev_odex25_hr' || github.ref == 'refs/heads/dev_odex25_inventory' || github.ref == 'refs/heads/dev_odex25_maintenance' || github.ref == 'refs/heads/dev_odex25_mobile' || github.ref == 'refs/heads/dev_odex25_pos' || github.ref == 'refs/heads/dev_odex25_project' || github.ref == 'refs/heads/dev_odex25_purchase' || github.ref == 'refs/heads/dev_odex25_realstate' || github.ref == 'refs/heads/dev_odex25_sales' || github.ref == 'refs/heads/dev_odex25_survey' || github.ref == 'refs/heads/dev_odex25_transactions' || github.ref == 'refs/heads/dev_odex25_website' || github.ref == 'refs/heads/dev_openeducat_erp-14.0.1.0' || github.ref == 'refs/heads/dev_odex25_ensan') || (github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'dev')
if: |
(github.ref == 'refs/heads/dev_odex-event' ||
github.ref == 'refs/heads/dev_odex25_accounting' ||
github.ref == 'refs/heads/dev_odex25_base' ||
github.ref == 'refs/heads/dev_odex25_dms' ||
github.ref == 'refs/heads/dev_odex25_fleet' ||
github.ref == 'refs/heads/dev_odex25_helpdesk' ||
github.ref == 'refs/heads/dev_odex25_hr' ||
github.ref == 'refs/heads/dev_odex25_inventory' ||
github.ref == 'refs/heads/dev_odex25_maintenance' ||
github.ref == 'refs/heads/dev_odex25_mobile' ||
github.ref == 'refs/heads/dev_odex25_pos' ||
github.ref == 'refs/heads/dev_odex25_project' ||
github.ref == 'refs/heads/dev_odex25_purchase' ||
github.ref == 'refs/heads/dev_odex25_realstate' ||
github.ref == 'refs/heads/dev_odex25_sales' ||
github.ref == 'refs/heads/dev_odex25_survey' ||
github.ref == 'refs/heads/dev_odex25_transactions' ||
github.ref == 'refs/heads/dev_odex25_website' ||
github.ref == 'refs/heads/dev_openeducat_erp-14.0.1.0' ||
github.ref == 'refs/heads/dev_odex25_ensan' ||
github.ref == 'refs/heads/dev_odex25_donation')
|| (github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'dev')
steps:
- name: Checkout And Restart Project
run: |
@ -92,7 +138,29 @@ jobs:
ensan_vpn_stage_server:
name: Deploy to Ensan Stage
runs-on: new-ensan-vpn-client-server-runner
if: (github.ref == 'refs/heads/preprod_odex-event' || github.ref == 'refs/heads/preprod_odex25_accounting' || github.ref == 'refs/heads/preprod_odex25_base' || github.ref == 'refs/heads/preprod_odex25_dms' || github.ref == 'refs/heads/preprod_odex25_fleet' || github.ref == 'refs/heads/preprod_odex25_ENSAN' || github.ref == 'refs/heads/preprod_odex25_hr' || github.ref == 'refs/heads/preprod_odex25_inventory' || github.ref == 'refs/heads/preprod_odex25_maintenance' || github.ref == 'refs/heads/preprod_odex25_mobile' || github.ref == 'refs/heads/preprod_odex25_pos' || github.ref == 'refs/heads/preprod_odex25_project' || github.ref == 'refs/heads/preprod_odex25_purchase' || github.ref == 'refs/heads/preprod_odex25_realstate' || github.ref == 'refs/heads/preprod_odex25_sales' || github.ref == 'refs/heads/preprod_odex25_survey' || github.ref == 'refs/heads/preprod_odex25_transactions' || github.ref == 'refs/heads/preprod_odex25_website' || github.ref == 'refs/heads/preprod_openeducat_erp-14.0.1.0' || github.ref == 'refs/heads/preprod_odex25_ensan') || (github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'preprod')
if: |
(github.ref == 'refs/heads/preprod_odex-event' ||
github.ref == 'refs/heads/preprod_odex25_accounting' ||
github.ref == 'refs/heads/preprod_odex25_base' ||
github.ref == 'refs/heads/preprod_odex25_dms' ||
github.ref == 'refs/heads/preprod_odex25_fleet' ||
github.ref == 'refs/heads/preprod_odex25_helpdesk' ||
github.ref == 'refs/heads/preprod_odex25_hr' ||
github.ref == 'refs/heads/preprod_odex25_inventory' ||
github.ref == 'refs/heads/preprod_odex25_maintenance' ||
github.ref == 'refs/heads/preprod_odex25_mobile' ||
github.ref == 'refs/heads/preprod_odex25_pos' ||
github.ref == 'refs/heads/preprod_odex25_project' ||
github.ref == 'refs/heads/preprod_odex25_purchase' ||
github.ref == 'refs/heads/preprod_odex25_realstate' ||
github.ref == 'refs/heads/preprod_odex25_sales' ||
github.ref == 'refs/heads/preprod_odex25_survey' ||
github.ref == 'refs/heads/preprod_odex25_transactions' ||
github.ref == 'refs/heads/preprod_odex25_website' ||
github.ref == 'refs/heads/preprod_openeducat_erp-14.0.1.0' ||
github.ref == 'refs/heads/preprod_odex25_ensan' ||
github.ref == 'refs/heads/preprod_odex25_donation')
|| (github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'preprod')
steps:
- name: Checkout And Restart Project
run: |

View File

@ -149,7 +149,7 @@
</td>
<td style="width: 25%;">Nationality</td>
</tr>
<tr>
<tr>
<td style="width: 25%;">تاريخ التعيين</td>
<td colspan="2">
<span t-esc="doc.employee_id.contract_id.hiring_date"/>
@ -195,15 +195,31 @@
<!-- </div>-->
<br/>
<br/>
<br/>
<h4 style="text-align: center; font-size: 12pt;">
<span>رئيس قسم الموارد البشرية</span>
<br/>
<span>Director of Human Resource</span>
<br/>
<span t-esc="env.user.sudo().company_id.hr_manager_id.name"/>
</h4>
<table style="width:100%; margin-top:60px; border:0;" dir="ltr">
<tr>
<td style="text-align:center; vertical-align:top;">
<div style="text-align:center;">
<t t-if="env.user.sudo().company_id.authorized_signatory_id.user_id.sign_signature">
<img t-att-src="image_data_uri(env.user.sudo().company_id.authorized_signatory_id.user_id.sign_signature)"
style="max-height: 5cm; max-width: 10cm"/>
</t>
<div style="margin-top:8px;font-size: 12pt;">
<span style="font-weight:bold;"
t-esc="env.user.sudo().company_id.authorized_position"/>
<br/>
<span style="font-weight:bold;"
t-esc="env.user.sudo().company_id.authorized_signatory_id.name"/>
</div>
</div>
</td>
<td style="text-align:center; vertical-align:top;">
<t t-if="env.user.sudo().company_id.authorized_signatory_id.user_id.sign_initials">
<img t-att-src="image_data_uri(env.user.sudo().company_id.authorized_signatory_id.user_id.sign_initials)"
style="max-height: 12cm; max-width: 12cm"/>
</t>
</td>
</tr>
</table>
</div>
</t>

View File

@ -173,28 +173,34 @@
</table>
</center>
</div>
<br/>
<br/>
<br/>
<br/>
<!-- todo start -->
<!-- <div class="">-->
<!-- <div style="float:left;margin-left:15px;" class="left">-->
<!-- <span t-field="env.user.sudo().company_id.hr_manager_id.user_id.sign_signature" t-options="{&quot;widget&quot;: &quot;image&quot;,&quot;style&quot;:&quot;width: 90px;height:90px;&quot;}"/>-->
<!-- </div>-->
<!-- <div style="float:right" class="signature right">-->
<!-- <span t-field="env.user.sudo().company_id.hr_manager_id.user_id.sign_initials" t-options="{&quot;widget&quot;: &quot;image&quot;,&quot;style&quot;:&quot;width: 200px;height:70px;&quot;}"/>-->
<!-- </div>-->
<!-- </div>-->
<!-- todo end -->
<h4 style="text-align: center; font-size: 14pt; margin-top: 10px;">
<span>مدير إدارة الموارد البشرية</span>
<br/>
<span>Director of Human Resource</span>
<br/>
<span t-esc="env.user.sudo().company_id.hr_manager_id.name"/>
</h4>
<table style="width:100%; margin-top:60px; border:0;" dir="ltr">
<tr>
<td style="text-align:center; vertical-align:top;">
<div style="text-align:center;">
<t t-if="env.user.sudo().company_id.authorized_signatory_id.user_id.sign_signature">
<img t-att-src="image_data_uri(env.user.sudo().company_id.authorized_signatory_id.user_id.sign_signature)"
style="max-height: 5cm; max-width: 10cm"/>
</t>
<div style="margin-top:8px;font-size: 14pt;">
<span style="font-weight:bold;"
t-esc="env.user.sudo().company_id.authorized_position"/>
<br/>
<span style="font-weight:bold;"
t-esc="env.user.sudo().company_id.authorized_signatory_id.name"/>
</div>
</div>
</td>
<td style="text-align:center; vertical-align:top;">
<t t-if="env.user.sudo().company_id.authorized_signatory_id.user_id.sign_initials">
<img t-att-src="image_data_uri(env.user.sudo().company_id.authorized_signatory_id.user_id.sign_initials)"
style="max-height: 12cm; max-width: 12cm"/>
</t>
</td>
</tr>
</table>
<!-- <div class="column">-->
<!-- <div align="center">-->
<!-- <span t-field="env.user.sudo().company_id.hr_manager_id.user_id.sign_signature"-->

View File

@ -168,28 +168,34 @@
</center>
</div>
<br/>
<br/>
<br/>
<br/>
<!-- todo start -->
<!-- <div class="">-->
<!-- <div style='float:left;margin-left:15px;' class="left">-->
<!-- <span t-field="env.user.sudo().company_id.hr_manager_id.user_id.sign_signature" t-options='{"widget": "image","style":"width: 90px;height:90px;"}'/>-->
<!-- </div>-->
<!-- <div style='float:right' class="signature right">-->
<!-- <span t-field="env.user.sudo().company_id.hr_manager_id.user_id.sign_initials" t-options='{"widget": "image","style":"width: 200px;height:70px;"}'/>-->
<!-- </div>-->
<!-- </div>-->
<!-- todo end -->
<h4 style="text-align: center; font-size: 14pt; margin-top: 10px;">
<span>مدير إدارة الموارد البشرية</span>
<br/>
<span>Director of Human Resource</span>
<br/>
<span t-esc="env.user.sudo().company_id.hr_manager_id.name"/>
</h4>
<table style="width:100%; margin-top:60px; border:0;" dir="ltr">
<tr>
<td style="text-align:center; vertical-align:top;">
<div style="text-align:center;">
<t t-if="env.user.sudo().company_id.authorized_signatory_id.user_id.sign_signature">
<img t-att-src="image_data_uri(env.user.sudo().company_id.authorized_signatory_id.user_id.sign_signature)"
style="max-height: 5cm; max-width: 10cm"/>
</t>
<div style="margin-top:8px;font-size: 14pt;">
<span style="font-weight:bold;"
t-esc="env.user.sudo().company_id.authorized_position"/>
<br/>
<span style="font-weight:bold;"
t-esc="env.user.sudo().company_id.authorized_signatory_id.name"/>
</div>
</div>
</td>
<td style="text-align:center; vertical-align:top;">
<t t-if="env.user.sudo().company_id.authorized_signatory_id.user_id.sign_initials">
<img t-att-src="image_data_uri(env.user.sudo().company_id.authorized_signatory_id.user_id.sign_initials)"
style="max-height: 12cm; max-width: 12cm"/>
</t>
</td>
</tr>
</table>
<!--div class="row" style="font-family: 'Sakkal Majalla'!important;">
<div class="col-xs-5">
<p style="direction: ltr;">* <span>Any Alteration or erasures will void this form</span></p>

View File

@ -67,12 +67,14 @@
بأن
الأستاذ/ة
<span t-field="o.employee_id.name"/>
رقم الهوية (<t t-if="o.employee_id.country_id.name == 'Saudi Arabia' or o.employee_id.country_id.name == 'المملكة العربية السعودية'">
رقم الهوية (
<t t-if="o.employee_id.country_id.name == 'Saudi Arabia' or o.employee_id.country_id.name == 'المملكة العربية السعودية'">
<span t-field="o.employee_id.saudi_number.saudi_id"/>
</t>
<t t-else="">
<span t-field="o.employee_id.iqama_number.iqama_id"/>
</t>)
</t>
)
يعمل لدينا بوظيفة (<span t-field="o.employee_id.job_id.name"/>) من تاريخ
<span t-esc="o.employee_id.contract_id.date_start"/>
ويتقاضى/تتقاضى راتب اساسي وقدره (<span t-field="o.employee_id.contract_id.salary"/>)
@ -86,21 +88,37 @@
من تحويـل راتبه إلـى حسـابه
(<span t-esc="o.employee_id.bank_account_id.acc_number"/>) لدى
<span t-esc="o.employee_id.bank_code"/>
كما نتعهد بإبلاغكم في حالة فصله عن العمل أو إنتهاء خدماته لدينا لأي سبب وكما نتعهد بتحويل مكافأة نهاية خدمته وتعويضاته إلى الحساب المذكور أعلاه حتى يردنا إخلاء طرف من قبلكم.
كما نتعهد بإبلاغكم في حالة فصله عن العمل أو إنتهاء خدماته لدينا لأي سبب وكما نتعهد
بتحويل مكافأة نهاية خدمته وتعويضاته إلى الحساب المذكور أعلاه حتى يردنا إخلاء طرف من
قبلكم.
</p>
<br/>
<h4 style="text-align: center;">
<span>مدير إدارة الموارد البشرية</span>
</h4>
<h4 style="text-align: center;">
<span>Director of Human Resource</span>
<br/>
<br/>
<span t-esc="env.user.sudo().company_id.hr_manager_id.name"/>
</h4>
<br/>
<table style="width:100%; margin-top:60px; border:0;" dir="ltr">
<tr>
<td style="text-align:center; vertical-align:top;">
<div style="text-align:center;">
<t t-if="env.user.sudo().company_id.authorized_signatory_id.user_id.sign_signature">
<img t-att-src="image_data_uri(env.user.sudo().company_id.authorized_signatory_id.user_id.sign_signature)"
style="max-height: 5cm; max-width: 10cm"/>
</t>
<div style="margin-top:8px;">
<span style="font-weight:bold;"
t-esc="env.user.sudo().company_id.authorized_position"/>
<br/>
<span style="font-weight:bold;"
t-esc="env.user.sudo().company_id.authorized_signatory_id.name"/>
</div>
</div>
</td>
<td style="text-align:center; vertical-align:top;">
<t t-if="env.user.sudo().company_id.authorized_signatory_id.user_id.sign_initials">
<img t-att-src="image_data_uri(env.user.sudo().company_id.authorized_signatory_id.user_id.sign_initials)"
style="max-height: 12cm; max-width: 12cm"/>
</t>
</td>
</tr>
</table>
</t>
</div>
</t>

View File

@ -4885,4 +4885,12 @@ msgstr "تاريخ اشتراك التأمينات الاجتماعية يجب
msgid "The Gosi subscription date Must Be Less Than Today"
msgstr "تاريخ إشتراك التأمينات الإجتماعية يجب أن يكون أقل من تاريخ اليوم"
#. module: hr_base
#: model:ir.model.fields,field_description:hr_base.field_res_company__authorized_position
msgid "Authorized Position"
msgstr "المسمي الوظيفي للموفوض"
#. module: hr_base
#: model:ir.model.fields,field_description:hr_base.field_res_company__authorized_signatory_id
msgid "Authorized Signatory"
msgstr "الموظف المفوض بالتوقيع"

View File

@ -19,6 +19,8 @@ class ResCompanyExt(models.Model):
sponsor_link = fields.One2many('res.sponsor', 'sponsor_tree', string="Sponsors")
hr_email = fields.Char(string='HR Email')
hr_manager_id = fields.Many2one('hr.employee', string='HR Manager')
authorized_signatory_id = fields.Many2one('hr.employee',string="Authorized Signatory")
authorized_position = fields.Char(string="Authorized Position")
saudi_percentage = fields.Integer(string='Saudi Percentage %')
contract_end_reminder = fields.Integer(string='Contract End Reminder',default=60)

View File

@ -112,6 +112,8 @@
<field name="it_manager_id"/>
<field name="cyber_security_id"/>
<field name="admin_manager_id"/>
<field name="authorized_signatory_id"/>
<field name="authorized_position"/>
<field name="gosi_active_date" required="1"/>
</group>
</page>