Перейти к содержимому
Меню
Чтобы взаимодействовать с сообществом, необходимо зарегистрироваться.
Этот вопрос был отмечен
2 Ответы
1007 Представления

Hi all, 

i have 2 models , 

Passport and Employees

class PassportManagementModels(models.Model):    
_name = 'om_hrm.passport'
_description = 'Passport Master'
_inherit = ['mail.thread']
_rec_name = "passport_no"
passport_no = fields.Char(string='Passport Number',size=16,required=True) PassportIssueDate = fields.Date(string='Passport Issue Date', required=True) PassportExpiryDate =fields.Date(string="Expiry Date",required=True) PassportNationality =fields.Char(string="Nationality",size=20,required=True) Passportdob = fields.Date(string="Date of Birth",required=True)
Passportholdername = fields.Char(string="Holder Full Name",required=True) Passportpossesionwith = fields.Selection([("admin","Admin"),("staff","Staff"),("other","Other")],string="Possesion With!")
passport_doc_ids = fields.Many2many('ir.attachment',string='Passport Documents',ondelete='cascade')
_sql_constraints = [        ('key_uniq', 'unique (passport_no)', 'PassportNo must be unique.')    ]
class EmployeesManagementModels(models.Model):    
_name = 'om_hrm.employee' _description = 'Employee Master'
_inherit = ['mail.thread']
_rec_name = "full_Name"
employeeId = fields.Char(string='Employee id',required= True)
passport_id = fields.Many2one('om_hrm.passport', string='Passport', ondelete='set null',domain=lambda self:[('id','=',self._get_assigned_passport_ids())])
@api.onchange('passport_id')
def onchange_passport_id(self): # Refresh the domain for passport_id to show only unassigned passports
self._get_assigned_passport_ids()

@api.model
def _get_assigned_passport_ids(self): # Get a list of all passport IDs already assigned to any employee
allemployees = self.search([])
print("Employees list:",allemployees)
assigned_passport_ids = self.search([]).mapped('passport_id.id') print("Assigned Passport IDs:", assigned_passport_ids)
return assigned_passport_ids

i want to see the passports which are not assigned to any employees,like fetching all passport and checking if the employee table contains the id then it shouldnt show in the dropdown list.

Any help is appreciated, thanks.

Аватар
Отменить
Лучший ответ

Hi,

Please check the below code


Python

class EmployeesManagementModels(models.Model):    
_name = 'om_hrm.employee'
_description = 'Employee Master'
_inherit = ['mail.thread']

employeeId = fields.Char(string='Employee id',required= True)
assigned_passport_ids = fields.Many2many(
'om_hrm.passport', string="Assigned Passport",
compute="_compute_assigned_passport_ids")
passport_id = fields.Many2one(
'om_hrm.passport', string='Passport',
domain="[('id', 'not in', assigned_passport_ids)]")

@api.depends('passport_id')
def _compute_assigned_passport_ids(self):
for rec in self:
assigned_passport_ids = self.search([]).mapped('passport_id.id')
rec.assigned_passport_ids = assigned_passport_ids

XML


<record id="om_hrm_employee_view_form" model="ir.ui.view">
<field name="name">om_hrm.employee.view.form</field>
<field name="model">om_hrm.employee</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="employeeId"/>
<field name="assigned_passport_ids"
widget="many2many_tags" invisible="1"/>
<field name="passport_id"/>
</group>
</sheet>
<chatter/>
</form>
</field>
</record>

Hope it helps.

Аватар
Отменить
Лучший ответ

Hello, 

There are multiple solution but you can do one thing add one employee field in 'om_hrm.passport' table. 

When you link any employee with passport in case you map the employee. 

After you can do one thing in case of domain apply condition domain=[('employee_id','=',False)]

Thanks.

Аватар
Отменить
Related Posts Ответы Просмотры Активность
1
мар. 15
14008
3
авг. 25
1861
1
сент. 24
864
3
июл. 24
3258
0
июн. 24
70