Merge pull request #1843 from expsa/dev_hamed_attendances

update attendance reports, add wizard for promotion
This commit is contained in:
Hamed-exp 2024-11-28 14:51:40 +02:00 committed by GitHub
commit fa07980992
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 298 additions and 56 deletions

View File

@ -3,7 +3,9 @@
<data>
<template id="employee_attendance_report_template">
<div class="page" style="font-size:17pt">
<center><h2 style="font-weight:bold">تقرير الحضور و الانصراف للعام </h2></center>
<center>
<h2 style="font-weight:bold">تقرير الحضور و الانصراف للعام</h2>
</center>
<br/>
<t t-foreach="mykey" t-as="key">
@ -40,18 +42,28 @@
</template>
<template id="absent_attendance_report_template">
<div class="page" style="font-size:14pt">
<center><h2 style="font-weight:bold">
تقرير الغياب
<br/>
جميع الموظفين- تفصيلي
</h2></center>
<center>
<h2 style="font-weight:bold">
تقرير الغياب
<br/>
جميع الموظفين- تفصيلي
</h2>
</center>
<br/>
<table style="width:100%">
<tr>
<td><h4 style="font-weight:bold"> من تاريخ </h4></td>
<td><t t-esc="date_start"/></td>
<td><h4 style="font-weight:bold">إلى </h4></td>
<td><t t-esc="date_end"/></td>
<td>
<h4 style="font-weight:bold">من تاريخ</h4>
</td>
<td>
<t t-esc="date_start"/>
</td>
<td>
<h4 style="font-weight:bold">إلى</h4>
</td>
<td>
<t t-esc="date_end"/>
</td>
</tr>
</table>
<br/>
@ -60,7 +72,9 @@
<table style="width:100%">
<tr>
<td style="font-weight:bold">الادارة</td>
<td style="color:black"><t t-esc="key"/></td>
<td style="color:black">
<t t-esc="key"/>
</td>
</tr>
</table>
<br/>
@ -93,7 +107,9 @@
<td style=" border-bottom: 1px solid gray; border-left: 1px solid white;padding: 1px;font-size:0.8em;background-color: white;color: black;width:20%;text-align:center">
<t t-esc="line['date']"/>
</td>
<td style="border-bottom: 1px solid gray; border-left: 1px solid white;color:white;width:15%">.</td>
<td style="border-bottom: 1px solid gray; border-left: 1px solid white;color:white;width:15%">
.
</td>
</tr>
</t>
</tbody>
@ -104,33 +120,47 @@
<template id="late_attendance_report_template">
<t t-foreach="mykey" t-as="key">
<div class="page" style="font-size:12pt" dir="rtl">
<center><h2 style="font-weight:bold">تقرير بالحضور والانصراف تفصيلى</h2></center>
<center>
<h2 style="font-weight:bold">تقرير بالحضور والانصراف تفصيلى</h2>
</center>
<br/>
<table style="width:100%;float:right">
<tr style="width:100%;">
<td style="font-weight:bold;width:25%;text-align:right"> من تاريخ:</td>
<td style="width:25%;text-align:right"><t t-esc="date_start"/></td>
<td style="font-weight:bold;width:25%;text-align:right"> الى:</td>
<td style="width:25%;text-align:right"><t t-esc="date_end"/></td>
<td style="font-weight:bold;width:25%;text-align:right">من تاريخ:</td>
<td style="width:25%;text-align:right">
<t t-esc="date_start"/>
</td>
<td style="font-weight:bold;width:25%;text-align:right">الى:</td>
<td style="width:25%;text-align:right">
<t t-esc="date_end"/>
</td>
</tr>
<tr style="width:100%;">
<td style="width:25%;font-weight:bold;text-align:right">رقم الموظف </td>
<td style="width:25%;color:black;text-align:right"><t t-esc="emp_data[key][0]['emp_no']"/></td>
<td style="width:25%;font-weight:bold;text-align:right">المسمى الوظيفى </td>
<td style="width:25%;color:black;text-align:right"><t t-esc="emp_data[key][0]['job']"/></td>
<td style="width:25%;font-weight:bold;text-align:right">رقم الموظف</td>
<td style="width:25%;color:black;text-align:right">
<t t-esc="emp_data[key][0]['emp_no']"/>
</td>
<td style="width:25%;font-weight:bold;text-align:right">المسمى الوظيفى</td>
<td style="width:25%;color:black;text-align:right">
<t t-esc="emp_data[key][0]['job']"/>
</td>
</tr>
<tr style="width:100%;">
<td style="width:25%;font-weight:bold;text-align:right"> اسم الموظف </td>
<td style="width:25%;color:black;text-align:right"><t t-esc="key"/></td>
<td style="width:25%;font-weight:bold;text-align:right">الادارة </td>
<td style="width:25%;color:black;text-align:right"><t t-esc="emp_data[key][0]['department']"/></td>
<td style="width:25%;font-weight:bold;text-align:right">اسم الموظف</td>
<td style="width:25%;color:black;text-align:right">
<t t-esc="key"/>
</td>
<td style="width:25%;font-weight:bold;text-align:right">الادارة</td>
<td style="width:25%;color:black;text-align:right">
<t t-esc="emp_data[key][0]['department']"/>
</td>
</tr>
</table>
<br/>
<br/>
<table class="table table-condensed" style="width:100%">
<thead style="width:100%;">
<tr style="width:100%;text-align:center;">
<tr style="width:100%;text-align:center;">
<th style="border: 1px solid gray; padding: 1px; font-size:0.8em;background-color: #b9d7d4;color: black;width:10%;text-align:center;">
التاريخ
</th>
@ -173,10 +203,10 @@
<t t-esc="line['day']"/>
</td>
<td style="border:1px solid gray;padding: 1px;font-size:0.8em;background-color: white;color: black;width:10%;text-align:center">
<t t-esc= "'%02d:%02d' % (int(str(line['sig_in']).split('.')[0]), int(float(str('%.2f' % line['sig_in']).split('.')[1])/100*60))"/>
<t t-esc="'%02d:%02d' % (int(str(line['sig_in']).split('.')[0]), int(float(str('%.2f' % line['sig_in']).split('.')[1])/100*60))"/>
</td>
<td style="border: 1px solid gray;padding: 1px;font-size:0.8em;background-color: white;color: black;width:10%;text-align:center">
<t t-esc= "'%02d:%02d' % (int(str(line['sig_out']).split('.')[0]), int(float(str('%.2f' % line['sig_out']).split('.')[1])/100*60))"/>
<t t-esc="'%02d:%02d' % (int(str(line['sig_out']).split('.')[0]), int(float(str('%.2f' % line['sig_out']).split('.')[1])/100*60))"/>
</td>
<t t-if=" line['lateness'] > 0">
<td style="border: 1px solid gray;padding: 1px;font-size:0.8em;background-color: white;color: red;width:5%;text-align:center">
@ -223,6 +253,26 @@
</tr>
</t>
</tbody>
<tfoot>
<tr style="text-align:center;font-weight:bold;background-color:#d9edf7;">
<td colspan="4" style="border: 1px solid gray; padding: 1px; font-size:0.8em;">المجموع
</td>
<td style="border: 1px solid gray;padding: 1px;font-size:0.8em;">
<t t-esc="'%02d:%02d' % (int(str(sum(line['lateness'] for line in data[key])).split('.')[0]), int(float(str('%.2f' % sum(line['lateness'] for line in data[key])).split('.')[1])/100*60))"/>
</td>
<td style="border: 1px solid gray;padding: 1px;font-size:0.8em;">
<t t-esc="'%02d:%02d' % (int(str(sum(line['early_exit'] for line in data[key])).split('.')[0]), int(float(str('%.2f' % sum(line['early_exit'] for line in data[key])).split('.')[1])/100*60))"/>
</td>
<td style="border: 1px solid gray;padding: 1px;font-size:0.8em;">
<t t-esc="'%02d:%02d' % (int(str(sum(line['extra_hours'] for line in data[key])).split('.')[0]), int(float(str('%.2f' % sum(line['extra_hours'] for line in data[key])).split('.')[1])/100*60))"/>
</td>
<td style="border: 1px solid gray;padding: 1px;font-size:0.8em;">
<t t-esc="'%02d:%02d' % (int(str(sum(line['office_hours'] for line in data[key])).split('.')[0]), int(float(str('%.2f' % sum(line['office_hours'] for line in data[key])).split('.')[1])/100*60))"/>
</td>
<td colspan="2" style="border: 1px solid gray;padding: 1px;font-size:0.8em;">--</td>
</tr>
</tfoot>
</table>
<table class="table table-condensed" style="width:100%">
<tr>
@ -230,7 +280,7 @@
مجموع التأخير والتقصير
</td>
<td style=" border: 1px solid gray;padding: 1px;font-size:0.8em;background-color: white;color: black;text-align:center;">
<t t-esc="total[key]['total_late_early'].split('.')[0]" />
<t t-esc="total[key]['total_late_early'].split('.')[0]"/>
</td>
@ -238,7 +288,7 @@
اجمالى ايام الغياب
</td>
<td style=" border: 1px solid gray;padding: 1px;font-size:0.8em;background-color: white;color: black;text-align:center;">
<t t-esc="total[key]['total_absent']" />
<t t-esc="total[key]['total_absent']"/>
</td>
</tr>
<tr>
@ -248,7 +298,7 @@
<td style=" border: 1px solid gray;padding: 1px;font-size:0.8em;background-color: white;color: black;text-align:center;">
<t t-esc="total[key]['total_extra_hours'].split('.')[0]"/>
</td>
<td style=" border: 1px solid gray;padding: 1px;font-size:0.8em;background-color: white;color: black;text-align:center;">
<td style=" border: 1px solid gray;padding: 1px;font-size:0.8em;background-color: white;color: black;text-align:center;">
اجمالى الاجازات والانتدابات
</td>
<td style=" border: 1px solid gray;padding: 1px;font-size:0.8em;background-color: white;color: black;text-align:center;">
@ -258,8 +308,12 @@
</table>
<table style="width:100%;float:center">
<tr style="width:100%;">
<td style="width:50%;color:black;text-align:center"><t t-esc="print_date"/></td>
<td style="width:50%;color:black;text-align:center"><t t-esc="print_user"/></td>
<td style="width:50%;color:black;text-align:center">
<t t-esc="print_date"/>
</td>
<td style="width:50%;color:black;text-align:center">
<t t-esc="print_user"/>
</td>
</tr>
</table>
</div>

View File

@ -259,6 +259,8 @@ class AttendancesReportXls(models.AbstractModel):
sheet.write(row, n + 8, _('Notes'), format2)
sheet.write(row, n + 9, _('Shift'), format2)
data_row = row + 1
total_lateness = total_early_exit = total_extra_hours = total_office_hours = 0.0
for line in final_dic[key]:
sheet.merge_range(row - 3, h_col + 1,row - 3,h_col + 2, emp_data[key][0]['emp_no'], format2)
@ -283,17 +285,32 @@ class AttendancesReportXls(models.AbstractModel):
sheet.write(data_row, n + 8,line['note'], format2)
sheet.write(data_row, n + 9, line['calendar_id'], format2)
total_lateness += float(line['lateness'])
total_early_exit += float(line['early_exit'])
total_extra_hours += float(line['extra_hours'])
total_office_hours += float(line['office_hours'])
data_row += 1
sheet.write(data_row+1, n+4, _('Total lateness'), format2)
sheet.write(data_row + 1, n + 3, _('الاجمالي'), format2)
sheet.write(data_row + 1, n + 4, '{0:02.0f}:{1:02.0f}'.format(*divmod(total_lateness * 60, 60)),
format2)
sheet.write(data_row + 1, n + 5, '{0:02.0f}:{1:02.0f}'.format(*divmod(total_early_exit * 60, 60)),
format2)
sheet.write(data_row + 1, n + 6, '{0:02.0f}:{1:02.0f}'.format(*divmod(total_extra_hours * 60, 60)),
format2)
sheet.write(data_row + 1, n + 7, '{0:02.0f}:{1:02.0f}'.format(*divmod(total_office_hours * 60, 60)),
format2)
sheet.write(data_row+3, n+4, _('Total lateness'), format2)
# sheet.set_column(data_row,data_row, 15)
sheet.write(data_row+1, n + 5, str(total[key]['total_late_early'].split('.')[0]), format2)
sheet.write(data_row+1, n + 6, _('Total Absent'), format2)
sheet.write(data_row+1, n + 7, str(total[key]['total_absent']), format2)
sheet.write(data_row+3, n + 5, str(total[key]['total_late_early'].split('.')[0]), format2)
sheet.write(data_row+3, n + 6, _('Total Absent'), format2)
sheet.write(data_row+3, n + 7, str(total[key]['total_absent']), format2)
size -= 2
sheet.write(data_row + 2, n+4, _('Total Extra'), format2)
sheet.write(data_row + 2, n + 5, str(total[key]['total_extra_hours'].split('.')[0]), format2)
sheet.write(data_row + 2, n + 6, _('Total Leave'), format2)
sheet.write(data_row + 2, n + 7, total[key]['total_leave'], format2)
sheet.write(data_row + 4, n+4, _('Total Extra'), format2)
sheet.write(data_row + 4, n + 5, str(total[key]['total_extra_hours'].split('.')[0]), format2)
sheet.write(data_row + 4, n + 6, _('Total Leave'), format2)
sheet.write(data_row + 4, n + 7, total[key]['total_leave'], format2)
n += 1
row += size + 3 + tot_size
elif type == 'absent':

View File

@ -50,6 +50,7 @@
'views/hr_salary_menus.xml',
'wizard/payslip_monthly_report_view.xml',
'wizard/payroll_bank_report_view.xml',
'wizard/employee_selection_wizard.xml',
# reports templates

View File

@ -39,6 +39,32 @@ class EmployeeReward(models.Model):
company_id = fields.Many2one('res.company', string='Company',
default=lambda self: self.env.company)
def action_add_employees(self):
self.ensure_one()
ctx = dict(self.env.context)
if not self.id:
ctx.update({
'default_reward_vals': {
'name': self.name,
}
})
else:
ctx['default_employee_reward_id'] = self.id
if self.percentage:
ctx['default_percentage'] = self.percentage
ctx['default_employee_id'] = self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)
return {
'name': 'Add Employees to Reward',
'view_mode': 'form',
'res_model': 'employee.selection.wizard',
'type': 'ir.actions.act_window',
'target': 'new',
'context': ctx,
}
@api.onchange('amount')
def chick_amount_positive(self):
for item in self:

View File

@ -35,4 +35,5 @@ access_related_salary_amount_officer,related_salary_amount_officer,model_related
access_related_salary_amount_emp,related_salary_amount_emp,model_related_salary_amount,base.group_user,1,0,0,0
access_payroll_bank_wiz_user,access_payroll_bank_wiz_user,model_payroll_bank_wiz,hr.group_hr_user,1,1,1,0
access_payslip_monthly_report_user,access_payslip_monthly_report_user,model_payslip_monthly_report,hr.group_hr_user,1,1,1,0
access_employee_selection_wizard_hr_manager,employee.selection.wizard.hr.manager,model_employee_selection_wizard,,1,1,1,1

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
35 access_related_salary_amount_emp related_salary_amount_emp model_related_salary_amount base.group_user 1 0 0 0
36 access_payroll_bank_wiz_user access_payroll_bank_wiz_user model_payroll_bank_wiz hr.group_hr_user 1 1 1 0
37 access_payslip_monthly_report_user access_payslip_monthly_report_user model_payslip_monthly_report hr.group_hr_user 1 1 1 0
38 access_employee_selection_wizard_hr_manager employee.selection.wizard.hr.manager model_employee_selection_wizard 1 1 1 1
39

View File

@ -30,6 +30,11 @@
states="draft,submitted"
class="oe_highlight"
groups="hr.group_hr_user, hr.group_hr_manager"/>
<button string="Add Employees" type="object" name="action_add_employees"
class="oe_highlight"
groups="hr.group_hr_user, hr.group_hr_manager"/>
<button string="Refuse" type="object" name="action_refuse"
states="submitted,hrm"
class="oe_highlight"
@ -43,20 +48,21 @@
<sheet>
<group>
<group>
<field name="transfer_type" attrs="{'readonly':[('state','not in',('draft','submitted'))]}" required="1"/>
<field name="transfer_type"
attrs="{'readonly':[('state','not in',('draft','submitted'))]}" required="1"/>
<field name="reward_type" attrs="{'readonly':[('state','!=','draft')]}" required="1"/>
<field name="allowance_name" attrs="{'invisible':[('reward_type','!=','allowance')], 'readonly':[('state','not in',('draft','submitted'))],
'required': [('reward_type', '=', 'allowance')]}"/>
<field name="account_id" string="Account" attrs="{'invisible':['|',('transfer_type','!=','accounting'),('state', '!=', 'hrm')],
<field name="account_id" string="Account" attrs="{'invisible':['|',('transfer_type','!=','accounting'),('state', '!=', 'hrm')],
'readonly':[('state','!=','hrm')], 'required': [('transfer_type', '=', 'accounting'),('state', '=', 'hrm')]}"/>
<field name="journal_id" string="Journal" attrs="{'invisible':['|',('transfer_type','!=','accounting'),('state', '!=', 'hrm')],
<field name="journal_id" string="Journal" attrs="{'invisible':['|',('transfer_type','!=','accounting'),('state', '!=', 'hrm')],
'readonly':[('state','!=','hrm')], 'required': [('transfer_type', '=', 'accounting'),('state', '=', 'hrm')]}"/>
<field name="benefits_discounts" attrs="{'invisible':[('transfer_type','!=','payroll')], 'readonly':[('state','!=','submitted')],
<field name="benefits_discounts" attrs="{'invisible':[('transfer_type','!=','payroll')], 'readonly':[('state','!=','submitted')],
'required': [('transfer_type', '=', 'payroll'),('state','=','submitted')]}"/>
<field name="date_from" attrs="{'invisible':[('transfer_type','!=','payroll')], 'readonly':[('state','!=','submitted')],
<field name="date_from" attrs="{'invisible':[('transfer_type','!=','payroll')], 'readonly':[('state','!=','submitted')],
'required': [('transfer_type', '=', 'payroll'),('state','=','submitted')]}"/>
<field name="date_to" attrs="{'invisible':[('transfer_type','!=','payroll')], 'readonly':[('state','!=','submitted')],
'required': [('transfer_type', '=', 'payroll'),('state','=','submitted')]}"/>
@ -68,9 +74,14 @@
<field name="amount" required="1"
attrs="{'invisible':[('reward_type','!=','amount')], 'readonly':[('state','!=','draft')]}"/>
<field name="check_appraisal" attrs="{'readonly':[('state','not in',('draft','submitted'))]}" groups="hr.group_hr_user, hr.group_hr_manager"/>
<field name="percentage" attrs="{'readonly':[('state','!=','draft')],'invisible':[('check_appraisal','=',True)]}"/>
<field name="reward_once" attrs="{'readonly':[('state','not in',('draft','submitted'))]}" groups="hr.group_hr_user, hr.group_hr_manager"/>
<field name="check_appraisal"
attrs="{'readonly':[('state','not in',('draft','submitted'))]}"
groups="hr.group_hr_user, hr.group_hr_manager"/>
<field name="percentage"
attrs="{'readonly':[('state','!=','draft')],'invisible':[('check_appraisal','=',True)]}"/>
<field name="reward_once"
attrs="{'readonly':[('state','not in',('draft','submitted'))]}"
groups="hr.group_hr_user, hr.group_hr_manager"/>
<field name="company_id" groups="base.group_multi_company" readonly="1"/>
</group>
</group>
@ -79,9 +90,11 @@
attrs="{'readonly':['|','|',('state','=','submitted'),('state','=','done'),('state','=','refused')], 'required': [('state', '=', 'hrm')]}">
<tree string="Employee Reward and Allowances" editable="bottom">
<field name="employee_id"/>
<field name="account_id" string="Account" groups="hr_base.group_executive_manager,hr.group_hr_user"
attrs="{'readonly':[('reward_state','!=','hrm')],'invisible':[('parent.transfer_type','!=','accounting')]}" />
<field name="journal_id" string="Journal" groups="hr_base.group_executive_manager,hr.group_hr_user"
<field name="account_id" string="Account"
groups="hr_base.group_executive_manager,hr.group_hr_user"
attrs="{'readonly':[('reward_state','!=','hrm')],'invisible':[('parent.transfer_type','!=','accounting')]}"/>
<field name="journal_id" string="Journal"
groups="hr_base.group_executive_manager,hr.group_hr_user"
attrs="{'readonly':[('reward_state','!=','hrm')],'invisible':[('parent.transfer_type','!=','accounting')]}"/>
<field name="amount" groups="hr_base.group_executive_manager,hr.group_hr_user"/>
<field name="percentage"/>
@ -102,7 +115,8 @@
<field name="name">Employee Reward and Allowances</field>
<field name="model">hr.employee.reward</field>
<field name="arch" type="xml">
<tree decoration-success="state=='done'" decoration-info="state == 'draft'" string="Employee Reward and Allowances">
<tree decoration-success="state=='done'" decoration-info="state == 'draft'"
string="Employee Reward and Allowances">
<field name="date" widget="date"/>
<field name="allowance_reason"/>
<field name="reward_type"/>

View File

@ -8,3 +8,4 @@
from . import payslip_monthly_report
from . import payroll_bank_report
from . import employee_selection_wizard

View File

@ -0,0 +1,81 @@
from odoo import api, fields, models, _
from odoo.exceptions import ValidationError
class EmployeeSelectionWizard(models.TransientModel):
_name = 'employee.selection.wizard'
_description = 'Employee Selection Wizard'
employee_ids = fields.Many2many(
'hr.employee',
string='Employees',
required=True,
)
employee_reward_id = fields.Many2one(comodel_name='hr.employee.reward',string='Employee_reward_id')
@api.onchange('employee_ids')
def _onchange_employee_ids(self):
return {
'domain': {
'employee_ids': [
('id', 'not in', self.employee_ids.ids),
('active', '=', True)
]
}
}
def _get_active_employee_reward(self):
reward_id = self.env.context.get('default_employee_reward_id')
if not reward_id and self.env.context.get('active_model') == 'hr.employee.reward':
reward_id = self.env.context.get('active_id')
return reward_id
def action_confirm(self):
"""
Action to add employees to current employee reward record
"""
self.ensure_one()
# Get the current reward record or create a new one
reward = self.env['hr.employee.reward'].browse(self._get_active_employee_reward())
if not reward.exists():
# Get values from context
reward_vals = self.env.context.get('default_reward_vals', {})
reward = self.env['hr.employee.reward'].create(reward_vals)
print('percentage >>>>>>', self.env.context.get('default_reward_vals', {}))
# Prepare values for reward lines
vals_list = [
{
'employee_id': employee.id,
'employee_reward_id': reward.id,
}
for employee in self.employee_ids
]
existing_employees = reward.line_ids_reward.mapped('employee_id').ids
duplicate_employees = set(self.employee_ids.ids) & set(existing_employees)
if duplicate_employees:
duplicate_names = self.env['hr.employee'].browse(list(duplicate_employees)).mapped('name')
raise ValidationError(_(
"The following employees are already in reward lines: %s" % ', '.join(duplicate_names)
))
# Create all records in a single operation
reward.write({
'line_ids_reward': [(0, 0, vals) for vals in vals_list]
})
for line in reward.line_ids_reward:
fields = ['percentage', 'account_id', 'journal_id']
default_values = line.sudo().default_get(fields)
# Apply the default values to the line
line.write(default_values)
line.sudo().get_percentage_appraisal()
line.sudo()._compute_calculate_amount()
return {'type': 'ir.actions.act_window_close'}

View File

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_employee_selection_wizard_form" model="ir.ui.view">
<field name="name">employee.selection.wizard.form</field>
<field name="model">employee.selection.wizard</field>
<field name="arch" type="xml">
<form string="Select Employees">
<sheet>
<group>
<field name="employee_ids"
options="{'no_create': True, 'no_create_edit': True}"/>
<field name="employee_reward_id" invisible="1"/>
</group>
</sheet>
<footer>
<button name="action_confirm"
string="Add"
type="object"
class="btn-primary"/>
<button string="Cancel"
class="btn-secondary"
special="cancel"/>
</footer>
</form>
</field>
</record>
<!-- Action to open the wizard -->
<record id="action_employee_selection_wizard" model="ir.actions.act_window">
<field name="name">Select Employees</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">employee.selection.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
</odoo>

View File

@ -46,7 +46,17 @@ class HrPayrollRaise(models.Model):
new_salary = fields.Float(string='New Basic Salary', store=True)
is_required = fields.Boolean(string='Is Required', compute='_compute_is_required',)
@api.depends('employee_id', 'employee_id.employee_type_id', 'employee_id.employee_type_id.salary_type')
def _compute_is_required(self):
for rec in self:
rec.is_required = False
if rec.employee_id and rec.employee_id.employee_type_id and rec.employee_id.employee_type_id.salary_type == 'amount':
rec.is_required = True
#@api.onchange('employee_id','percentage_raises')
@api.onchange('employee_id','percentage_bonus','percentage_raises')
def onchange_employee(self):

View File

@ -50,10 +50,11 @@
<field name="last_raises" readonly="1" string="Last Raise"/>
</group>
<group col="2">
<field name="is_required" invisible="1" />
<field name="scale_id" required="1" readonly="1" force_save="1"/>
<field name="level_id" required="1" readonly="1" force_save="1"/>
<field name="group_id" required="1" readonly="1" force_save="1"/>
<field name="degree_id" required="1" readonly="1" force_save="1"/>
<field name="level_id" attrs="{'required': [('is_required', '!=', False)]}" force_save="1"/>
<field name="group_id" attrs="{'required': [('is_required', '!=', False)]}" force_save="1"/>
<field name="degree_id" attrs="{'required': [('is_required', '!=', False)]}" force_save="1"/>
<field name="last_raise_date" readonly="1" force_save="1"/>
<field name="current_salary" readonly="1" force_save="1" invisible="0"/>