odex25_standard/odex25_transactions/exp_transaction_documents/models/entity.py

171 lines
7.3 KiB
Python

# -*- coding: utf-8 -*-
import datetime
from odoo import models, api, fields, _
from odoo.exceptions import ValidationError, UserError
class JobTitle(models.Model):
_name = 'cm.job.title'
_description = 'Job Titles'
name = fields.Char(string='Job Title')
class Entity(models.Model):
_name = 'cm.entity'
_description = 'Transactions Contacts'
_order = 'name'
@api.model
def _name_search(self, name, args=None, operator='like', limit=100, name_get_uid=None):
args = args or []
domain = []
if name:
domain = ['|', ('name', operator, name), ('code', operator, name)]
print(domain)
return self._search(domain + args, limit=limit, access_rights_uid=name_get_uid)
#
@api.constrains('code')
def _check_code(self):
count = self.search_count([('code', '=', self.code), ('id', '!=', self.id)])
if self.code:
if count:
raise ValidationError(_("Validation Error Entity Code Must Be unique !"))
if self.type == 'unit':
x = ''
if len(self.code) == 3 or len(self.code) == 2:
x = 'a'
if self.code.isalpha() == False or x == '':
raise ValidationError(_("Validation Error Entity Code Must Be Composed from 3/2 characters"))
code = fields.Char(string='Code')
# sequence = fields.Integer(string='Sequence')
partner_id = fields.Many2one(comodel_name='res.partner', string='Partner', readonly=False, ondelete='cascade',
copy=False)
name = fields.Char(string='Name', store=True)
type = fields.Selection(string='Entity Type', selection=[('unit', _('Internal Unit')), ('employee', _('Employee')),
('external', _('External Unit'))], default='unit')
parent_id = fields.Many2one(comodel_name='cm.entity', string='Parent Entity')
department_id = fields.Many2one('hr.department')
manager_id = fields.Many2one(comodel_name='cm.entity', string='Unit Manager')
secretary_id = fields.Many2one(comodel_name='cm.entity', string='Employee in charge of transactions')
user_id = fields.Many2one(comodel_name='res.users', string='Related User', related='employee_id.user_id')
# job_title_id = fields.Many2one(comodel_name='cm.job.title', string='Job Title')
job_title_id = fields.Many2one(comodel_name='hr.job', string='Job Title')
need_approve = fields.Boolean(string='Need Aprove')
executive_direction = fields.Boolean(string='Executive direction')
is_secret = fields.Boolean(string='Is Secret')
person_id = fields.Char(string='Person ID')
person_id_issue_date = fields.Date(string='Person ID Issue Date')
employee_assignment_date = fields.Date(string='Employee Assignment Date')
employee_id = fields.Many2one('hr.employee')
phone = fields.Char()
email = fields.Char()
child_ids = fields.Many2many(comodel_name='cm.entity', relation='employee_entity_rel', column1='employee_id',
column2='entity_id', string='Related Units')
establish_date = fields.Date(string='Establish Date')
unit_location = fields.Char(string='Unit Location')
sketch_attachment_id = fields.Many2one(comodel_name='ir.attachment', string='Sketch Attachment')
dynamic_year = fields.Char(string='Year', default=datetime.datetime.now().strftime('%Y'))
year_increment = fields.Boolean(string='Continue Increment every year?', help='''
Check if you want to continue incrementing in the start of every new year.
''', default=True)
@api.onchange('department_id')
def onchange_department_id(self):
self.name = self.department_id.name
@api.onchange('employee_id')
def onchange_employee_id(self):
self.job_title_id = self.employee_id.job_id
self.name = self.employee_id.name
self.person_id = self.employee_id.iqama_number.iqama_id
self.email = self.employee_id.personal_email
self.phone = self.employee_id.mobile_phone
self.person_id_issue_date = self.employee_id.iqama_number.expiry_date
# self.employee_assignment_date = self.employee_id.job_id
@api.onchange('partner_id')
def onchange_partner_id(self):
self.name = self.partner_id.name
self.email = self.partner_id.email
self.phone = self.partner_id.phone
####################################################
# ORM Overrides methods
####################################################
@api.model
def create(self, vals):
if vals.get('type', False) == 'employee':
vals['partner_id'] = self.env['hr.employee'].search(
[('id', '=', vals['employee_id'])]).user_id.partner_id.id
if 'partner_id' not in vals:
print("*******************")
if vals.get('type', False) == 'employee':
user_id = vals.get('user_id', False)
if user_id:
vals['partner_id'] = self.env['res.users'].search([('id', '=', user_id)]).partner_id.id
else:
partner = self.env['res.partner'].create({
'name': vals.get('name', ''),
'email': vals.get('email', ''),
'city': vals.get('city', _('Riyadh')),
'is_company': vals.get('is_company', True),
'country_id': self.env.ref('base.sa', True).id,
})
vals['partner_id'] = partner.id
sequence = {
'employee': '01',
'unit': '02',
'external': '03',
}
if not vals.get('code', False):
seq = self.env['ir.sequence'].get('cm.entity')
s = u'{}-{}'.format(sequence[vals.get('type', 'employee')], seq)
if vals.get('type') == 'employee' or vals.get('type') == 'external':
vals['code'] = s
return super(Entity, self).create(vals)
def write(self, vals):
sequence = {
'employee': '01',
'unit': '02',
'external': '03',
}
if not vals.get('code', False):
seq = self.env['ir.sequence'].get('cm.entity')
s = u'{}-{}'.format(sequence[vals.get('type', 'employee')], seq)
if vals.get('type') == 'employee' or vals.get('type') == 'external':
vals['code'] = s
return super(Entity, self).write(vals)
def copy(self, default=None):
raise UserError(_('You cannot duplicate an entity!'))
class ResPartner(models.Model):
_inherit = 'res.partner'
is_transaction_entity = fields.Boolean('Is Transaction Entity?')
@api.model
def create(self, values):
res = super(ResPartner, self).create(values)
if values.get('is_transaction_entity'):
entity = self.env['cm.entity'].create({
'name': values.get('name', ''),
'partner_id': values.get('id'),
})
return res
def write(self, vals):
res = super(ResPartner, self).write(vals)
if vals.get('is_transaction_entity'):
if not self.env['cm.entity'].search([('partner_id', '=', self.id)]):
entity = self.env['cm.entity'].create({
'name': self.name,
'partner_id': vals.get('id'),
})
return res