odex25_standard/odex25_benefit/odex25_empowermentmanagement/models/empowerment_management.py

205 lines
7.7 KiB
Python

# -*- coding: utf-8 -*-
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
from datetime import datetime
from odoo.exceptions import UserError, ValidationError
class EmpowermentRequest(models.Model):
_name = 'empowerment.request'
_description = 'Empowerment Request'
_inherit = ['mail.thread', 'mail.activity.mixin']
name = fields.Char(string='Request Number', readonly=True, default='New')
request_date = fields.Datetime(string='Request Date', readonly=True, default=fields.Datetime.now)
creator_id = fields.Many2one('res.users', string='Creator', default=lambda self: self.env.user, readonly=True)
date_from = fields.Datetime(string='Date From')
date_to = fields.Datetime(string='Date To')
branch_id = fields.Many2one("branch.settings", string='Branch', domain="[('branch_type','=','branches')]")
# Beneficiary Family
familye_id = fields.Many2one('grant.benefit', string='Family')
member_ids = fields.One2many(
'family.member',
compute='_compute_family_members',
string='Family Member'
)
benefit_category_id = fields.Many2one(related='familye_id.benefit_category_id', string='Family Category', readonly=True)
relationship = fields.Char(string='Beneficiary Relationship', readonly=True)
identity_number = fields.Char(related='familye_id.id_number', string='ID Number', readonly=True)
sms_phone = fields.Char(related='familye_id.sms_phone', string='Mobile Number', readonly=True)
email = fields.Char(related='familye_id.email', string='Email', readonly=True)
nationality = fields.Many2one(relates='familye_id.nationality_id', string='Nationality', readonly=True)
education_status = fields.Selection(related='familye_id.education_status', string='Education Status', readonly=True)
has_car = fields.Boolean(related='familye_id.has_car', string='Family Owns a Car?', readonly=True)
health_status = fields.Selection(related='familye_id.health_status', string='Health Status')
# Service Info
service_id = fields.Many2one('services.settings', string='Service Item')
service_type = fields.Selection(related='service_id.service_type', store=True)
service_item = fields.Char(string="Service Element")
# Education Info
study_specialization = fields.Selection([
('bachelor', 'Bachelor'),
('diploma', 'Diploma')
], string='Study Specialization')
university_id = fields.Many2one('empowerment.education.entity', string='University / College Name', domain="[('study_specialization','=','bachelor')]")
institute_id = fields.Many2one('empowerment.education.entity', string='Institute / School Name', domain="[('study_specialization','=','diploma')]")
intercession_type = fields.Selection([
('transfer', 'Transfer'),
('move', 'Move'),
('discount', 'Discount'),
('exemption', 'Exemption'),
], string='Intercession Type')
request_entity_id = fields.Many2one('empowerment.education.entity', string='Requesting Entity')
# Training Info
training_type = fields.Selection([
('skill', 'Skill-based'),
('entrepreneurship', 'Entrepreneurship'),
('professional', 'Professional')
], string='Training Type')
training_course_id = fields.Many2one('empowerment.qualification.course', string='Qualification Course')
training_entity_id = fields.Many2one('empowerment.training.entity', string='Training Entity')
training_intercession_type = fields.Selection([
('new_acceptance', 'New Acceptance'),
('transfer', 'Transfer'),
('relocation', 'Relocation'),
('discount', 'Discount'),
('exemption', 'Exemption')
], string="Training Intercession Type")
# Funding Info
project_funding_type_id = fields.Many2one('project.funding.type', string='Project Funding Type')
sponsor_id = fields.Many2one('res.partner', string='Sponsor Name')
sponsor_mobile = fields.Char(related='sponsor_id.mobile', readonly=True)
sponsor_identity = fields.Char(related='sponsor_id.id_number', readonly=True)
sponsor_email = fields.Char(related='sponsor_id.email', readonly=True)
finance_request_entity_id = fields.Many2one('education.entity', string="Finance Request Entity")
# Receiver
request_receiver_id = fields.Many2one(
'res.partner',
string='Request Receiver',
domain="[('is_empowerment_receiver', '=', True)]"
)
description = fields.Text(string='Description')
# Request State
state = fields.Selection([
('draft', 'Draft'),
('social_worker', 'Social Worker (Awaiting Execution)'),
('head_of_department', 'Head of Department'),
('branch_manager', 'Branch Manager'),
('finance', 'Finance Department'),
('approved', 'Approved'),
('rejected', 'Rejected'),
], default='draft', string='Status', tracking=True)
reject_reason = fields.Text(string='Rejection/Return Reason')
return_reason = fields.Text(string='Return Reason')
employment_history_ids = fields.One2many(
comodel_name="hr.employee.history.req",
inverse_name="employement_history"
)
qualifiction_id = fields.One2many(
"hr.qualification.req",
"qualification_relation_name",
string="Qualifications"
)
def unlink(self):
for order in self:
if order.state not in ['draft']:
raise UserError(_('You cannot delete this record State not Draft'))
return super(EmpowermentRequest, self).unlink()
@api.model
def create(self, vals):
if vals.get('name', 'New') == 'New':
vals['name'] = self.env['ir.sequence'].next_by_code('empowerment.request') or 'New'
return super(EmpowermentRequest, self).create(vals)
def action_approve_social_worker(self):
for rec in self:
rec.state = 'social_worker'
def action_approve_head(self):
for rec in self:
rec.state = 'head_of_department'
def action_return_to_social_worker(self):
for rec in self:
rec.state = 'social_worker'
def action_approve_branch(self):
for rec in self:
rec.state = 'branch_manager'
def action_approve_finance(self):
for rec in self:
rec.state = 'finance'
def action_approve_final(self):
for rec in self:
rec.state = 'approved'
def action_reject(self):
for rec in self:
rec.state = 'rejected'
def action_return_to_draft(self):
# Open wizard to collect return reason - opens form view on 'empowerment.return.reason.wizard'
return {
'type': 'ir.actions.act_window',
'name': _('سبب الإرجاع'),
'view_mode': 'form',
'res_model': 'empowerment.return.reason.wizard',
'target': 'new',
'context': {'default_request_id': self.id}
}
@api.depends('familye_id')
def _compute_family_members(self):
for rec in self:
rec.member_ids = rec.familye_id.member_ids.ids if rec.familye_id else False
class ResPartner(models.Model):
_inherit = 'res.partner'
is_empowerment_receiver = fields.Boolean(string='Empowerment Beneficiary')
class EmpowermentReturnReasonWizard(models.TransientModel):
_name = 'empowerment.return.reason.wizard'
_description = 'Return Reason'
request_id = fields.Many2one('empowerment.request', string='Request')
reason = fields.Text(string='Reason', required=True)
def action_return(self):
self.ensure_one()
if self.request_id:
self.request_id.write({
'state': 'draft',
'return_reason': self.reason
})
# Close wizard window after saving
return {'type': 'ir.actions.act_window_close'}