88 lines
2.9 KiB
Python
88 lines
2.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
# This file is part of lims module for Tryton.
|
|
# The COPYRIGHT file at the top level of this repository contains
|
|
# the full copyright notices and license terms.
|
|
|
|
from trytond.model import ModelView, ModelSQL, fields
|
|
from trytond.pool import Pool
|
|
from trytond.transaction import Transaction
|
|
from trytond.exceptions import UserError
|
|
from trytond.i18n import gettext
|
|
|
|
|
|
class Headquarters(ModelSQL, ModelView):
|
|
'Headquarters'
|
|
__name__ = 'company.headquarters'
|
|
|
|
name = fields.Char('Name', required=True, translate=True)
|
|
|
|
|
|
class Department(ModelSQL, ModelView):
|
|
'Department'
|
|
__name__ = 'company.department'
|
|
|
|
code = fields.Char('Code', required=True)
|
|
name = fields.Char('Name', required=True)
|
|
headquarters = fields.Many2One('company.headquarters', 'Headquarters')
|
|
default_location = fields.Many2One('stock.location', 'Default Location',
|
|
domain=[('type', '=', 'storage')])
|
|
responsible = fields.Many2One('res.user', 'Responsible User')
|
|
laboratory_professional = fields.Function(fields.Many2One(
|
|
'lims.laboratory.professional', 'Laboratory professional'),
|
|
'on_change_with_laboratory_professional')
|
|
|
|
@fields.depends('responsible')
|
|
def on_change_with_laboratory_professional(self, name=None):
|
|
cursor = Transaction().connection.cursor()
|
|
pool = Pool()
|
|
LaboratoryProfessional = pool.get('lims.laboratory.professional')
|
|
|
|
if not self.responsible:
|
|
return None
|
|
cursor.execute('SELECT id '
|
|
'FROM party_party '
|
|
'WHERE is_lab_professional = true '
|
|
'AND lims_user = %s '
|
|
'LIMIT 1', (self.responsible.id,))
|
|
party_id = cursor.fetchone()
|
|
if not party_id:
|
|
return None
|
|
cursor.execute('SELECT id '
|
|
'FROM "' + LaboratoryProfessional._table + '" '
|
|
'WHERE party = %s '
|
|
'LIMIT 1', (party_id[0],))
|
|
lab_professional_id = cursor.fetchone()
|
|
if not lab_professional_id:
|
|
return None
|
|
return lab_professional_id[0]
|
|
|
|
|
|
class UserDepartment(ModelSQL, ModelView):
|
|
'User Department'
|
|
__name__ = 'user.department'
|
|
|
|
user = fields.Many2One('res.user', 'User', required=True)
|
|
department = fields.Many2One('company.department', 'Department',
|
|
required=True)
|
|
default = fields.Boolean('By default')
|
|
|
|
@staticmethod
|
|
def default_default():
|
|
return False
|
|
|
|
@classmethod
|
|
def validate(cls, user_departments):
|
|
super().validate(user_departments)
|
|
for ud in user_departments:
|
|
ud.check_default()
|
|
|
|
def check_default(self):
|
|
if self.default:
|
|
user_departments = self.search([
|
|
('user', '=', self.user.id),
|
|
('default', '=', True),
|
|
('id', '!=', self.id),
|
|
])
|
|
if user_departments:
|
|
raise UserError(gettext('lims.msg_default_department'))
|