odex30_standard/hr_government_relations/models/request_visa.py

125 lines
4.4 KiB
Python

# -*- coding: utf-8 -*-
from datetime import date
from odoo import models, fields, _
from odoo.exceptions import UserError
class hr_request_visa(models.Model):
_name = "hr.request.visa"
_rec_name = 'employee_id'
_inherit = ['mail.thread', 'mail.activity.mixin']
name = fields.Char()
date = fields.Date()
state = fields.Selection(selection=[
("draft", "Draft"),
("request", "Employee Request"),
("send", "Direct Manager"),
("confirm", "Government Relations"),
("done", "HR Approve"),
("refuse", "Refuse")
], default='draft', )
religion = fields.Selection(selection=[('muslim', 'Muslim'), ('christian', 'Christian'), ('other', 'Other')],
default="muslim")
from_hr = fields.Boolean()
onece = fields.Boolean()
multi = fields.Boolean()
passport = fields.Char()
passport_date = fields.Date()
birth_date = fields.Date()
nationality_id = fields.Many2one(comodel_name='res.country')
working = fields.Char()
activity = fields.Char()
job = fields.Char()
work_from = fields.Char()
note = fields.Text()
employee_id = fields.Many2one('hr.employee', default=lambda item: item.get_user_id())
department_id = fields.Many2one('hr.department', related='employee_id.department_id')
one = fields.Boolean(string='15')
tow = fields.Boolean(string='30')
three = fields.Boolean(string='90')
four = fields.Boolean(string='180')
five = fields.Boolean(string='365')
sex = fields.Boolean(string='1825')
attach_ids = fields.One2many('ir.attachment', 'attach_ids_exit_return')
cost = fields.Float()
account_move_id = fields.Many2one(comodel_name='account.move')
account_journal_id = fields.Many2one(comodel_name='account.journal')
account_debit_id = fields.Many2one(comodel_name='account.account')
company_id = fields.Many2one(related="employee_id.company_id", store=True)
def request(self):
self.state = 'request'
def send(self):
self.state = 'send'
def draft(self):
# check if the moved journal entry if un posted then delete
for item in self:
if item.account_move_id:
if item.account_move_id.state == 'draft':
item.account_move_id.state = 'canceled'
item.account_move_id = False
self.state = 'draft'
else:
raise UserError(_(
'You can not re-draft Exit and return because account move with ID "%s" in state Posted')
% item.account_move_id.id)
else:
self.state = 'draft'
def hr_manager(self):
self.state = 'confirm'
def financial_manager(self):
for item in self:
if item.cost > 0:
debit_line_vals = {
'name': 'debit',
'debit': item.cost,
'account_id': item.account_debit_id.id,
'partner_id': item.employee_id.user_id.partner_id.id
}
credit_line_vals = {
'name': 'credit',
'credit': item.cost,
'account_id': item.account_journal_id.default_account_id.id,
'partner_id': item.employee_id.user_id.partner_id.id
}
move_id = self.env['account.move'].create({
'state': 'draft',
'journal_id': item.account_journal_id.id,
'date': date.today(),
'ref': 'Exit and Return',
'line_ids': [(0, 0, debit_line_vals), (0, 0, credit_line_vals)]
})
self.account_move_id = move_id.id
self.state = 'done'
def refuse(self):
self.state = 'refuse'
def unlink(self):
for i in self:
if i.state != 'draft':
raise UserError(_('You can not delete record in state not in draft'))
return super(hr_request_visa, self).unlink()
def get_user_id(self):
employee_id = self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)
if employee_id:
return employee_id.id
else:
return False
class hr_exit_return_attach(models.Model):
_inherit = "ir.attachment"
# inverse field to hr.exit.return
attach_ids_exit_return = fields.Many2one(comodel_name='hr.exit.return')