odex30_standard/employee_requests/models/house_allowance_advance.py

91 lines
3.2 KiB
Python

# -*- coding: utf-8 -*-
from odoo import models, fields, api, _
from odoo.exceptions import UserError
from datetime import datetime
class HouseAllowanceAdvance(models.Model):
_name = 'house.allowance.advance'
_description = 'House Allowance Advance'
_rec_name = 'employee_id'
from_hr_department = fields.Boolean()
amount = fields.Float()
date = fields.Date()
start_date = fields.Date()
duration = fields.Float(compute='get_Days_no')
state = fields.Selection(
[('draft', _('Draft')), ('send', _('Send')), ('hr_special_Approval', _('HR Specialist Approval')),
('hr_manager_approved', _('HR Manager Approved')),
('financial_manager', _('Financial Manager Approval')),
('approve_manager', _('Approve Manager')), ('refused', _('Refused'))],
default="draft")
# relational fields
job_id = fields.Many2one(related='employee_id.job_id', readonly=True)
department_id = fields.Many2one(related='employee_id.department_id', readonly=True)
contract_id = fields.Many2one(comodel_name='hr.contract')
account_move_id = fields.Many2one(comodel_name='hr.account.moves', string='Move')
house_allowance_advance_line_ids = fields.One2many('house.allowance.advance.line', 'amount_id')
employee_id = fields.Many2one('hr.employee', 'Employee Id', default=lambda item: item.get_user_id())
@api.depends('start_date', 'date')
def get_Days_no(self):
for item in self:
if item.start_date and item.date:
start_date_value = datetime.strptime(str(item.start_date), "%Y-%m-%d")
end_date = datetime.strptime(str(item.date), "%Y-%m-%d")
if start_date_value > end_date:
raise UserError(_('End Date must be greater than Start Date'))
elif start_date_value < end_date:
days = (end_date - start_date_value).days
item.duration = days
else:
item.duration = 0.0
else:
item.duration = 0.0
def draft_state(self):
self.state = "draft"
def send(self):
self.state = "send"
def hr_special_Approval(self):
self.state = "hr_special_Approval"
def financial_manager(self):
self.state = "financial_manager"
def hr_manager_approved(self):
self.state = "hr_manager_approved"
def approve_manager(self):
self.state = "approve_manager"
def refused(self):
self.state = "refused"
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
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(HouseAllowanceAdvance, self).unlink()
class HouseAllowanceAdvanceLine(models.Model):
_name = 'house.allowance.advance.line'
_description = 'House Allowance Advance Line'
date = fields.Date()
# relational fields
amount_id = fields.Many2one(comodel_name='house.allowance.advance', string='Amount')