[FIX] replacment benefit action

This commit is contained in:
Nossibaelhadi 2025-12-24 11:46:38 +03:00
parent 32c6ab16e8
commit ffa930c8d1
7 changed files with 185 additions and 10 deletions

View File

@ -63,6 +63,7 @@
'wizards/donation_extension_wizard.xml', 'wizards/donation_extension_wizard.xml',
'wizards/replace_sponsor_wizard.xml', 'wizards/replace_sponsor_wizard.xml',
'wizards/add_benefit_wizard.xml', 'wizards/add_benefit_wizard.xml',
'wizards/replace_benefit_wizard.xml',
'wizards/esterdad.xml', 'wizards/esterdad.xml',
'wizards/otp_confirm.xml', 'wizards/otp_confirm.xml',
'views/donations_details_lines.xml', 'views/donations_details_lines.xml',

View File

@ -7634,3 +7634,39 @@ msgstr "تبرعات"
msgid "Target" msgid "Target"
msgstr "حملات" msgstr "حملات"
#. module: odex_takaful
#: model_terms:ir.ui.view,arch_db:odex_takaful.replace_benefit_wizard_form
msgid "Replacement Information"
msgstr "بيانات الاستبدال"
#. module: odex_takaful
#: model:ir.model.fields,field_description:odex_takaful.field_replace_benefit_wizard__old_members_id
msgid "Old Benefit"
msgstr "المستفيد الحالي"
#. module: odex_takaful
#: model:ir.model.fields,field_description:odex_takaful.field_replace_benefit_wizard__new_members_id
msgid "New Benefit"
msgstr "المستفيد الجديد"
#. module: odex_takaful
#: model:ir.model.fields,field_description:odex_takaful.field_replace_benefit_wizard__replacement_reason_id
#: model_terms:ir.ui.view,arch_db:odex_takaful.replace_benefit_wizard_form
msgid "Replacement Reason"
msgstr "سبب الإستبدال"
#. module: odex_takaful
#: model_terms:ir.ui.view,arch_db:odex_takaful.replace_benefit_wizard_form
msgid "Replace"
msgstr "إستبدال"
#. module: odex_takaful
#: model:ir.model,name:odex_takaful.model_replace_benefit_wizard
msgid "Replace Benefit"
msgstr "إستبدال مستفيد"
#. module: odex_takaful
#: model_terms:ir.ui.view,arch_db:odex_takaful.replace_benefit_wizard_form
msgid "Cancel"
msgstr "إلغاء"

View File

@ -1049,19 +1049,17 @@ class DonationsDetailsLines(models.Model):
def action_view_replacement_wizard(self): def action_view_replacement_wizard(self):
self.ensure_one() self.ensure_one()
wizard = self.env['replacement.wiz'].create({
'old_members_id': self.benefit_ids[0].id if self.benefit_ids else False,
'record_type': self.record_type,
'sponsorship_id': self.id,
})
return { return {
'name': 'Replacement Wizard', 'name': 'Benefit Replacement',
'type': 'ir.actions.act_window', 'type': 'ir.actions.act_window',
'res_model': 'replacement.wiz', 'res_model': 'replace.benefit.wizard',
'view_mode': 'form', 'view_mode': 'form',
'res_id': wizard.id,
'target': 'new', 'target': 'new',
'context': {
'default_old_members_id': self.benefit_ids[:1].id or False,
'default_record_type': self.record_type,
'default_sponsorship_id': self.id,
}
} }
def action_view_scheduling_lines(self): def action_view_scheduling_lines(self):

View File

@ -55,7 +55,7 @@ access_group_kufula_user_account_move,access_group_kufula_user_account_move,acco
access_group_kufula_user_sale_order,access_group_kufula_user_sale_order,sale.model_sale_order,odex_takaful.group_kufula_user,1,1,1,0 access_group_kufula_user_sale_order,access_group_kufula_user_sale_order,sale.model_sale_order,odex_takaful.group_kufula_user,1,1,1,0
access_group_kufula_user_grant_benefit,access_group_kufula_user_grant_benefit,odex_benefit.model_grant_benefit,odex_takaful.group_kufula_user,1,1,1,0 access_group_kufula_user_grant_benefit,access_group_kufula_user_grant_benefit,odex_benefit.model_grant_benefit,odex_takaful.group_kufula_user,1,1,1,0
access_group_kufula_user_res_partner,access_group_kufula_user_res_partner,base.model_res_partner,odex_takaful.group_kufula_user,1,1,1,0 access_group_kufula_user_res_partner,access_group_kufula_user_res_partner,base.model_res_partner,odex_takaful.group_kufula_user,1,1,1,0
access_replace_benefit_wizard,replace.benefit.wizard.access,model_replace_benefit_wizard,odex_takaful.group_kufula_user,1,1,1,1
access_group_esterdad_wizard,access_group_esterdad_wizard,model_esterdad_wizard,,1,1,1,0 access_group_esterdad_wizard,access_group_esterdad_wizard,model_esterdad_wizard,,1,1,1,0
access_group_otp_confirmation_wizard,access_group_otp_confirmation_wizard,model_otp_confirmation_wizard,,1,1,1,0 access_group_otp_confirmation_wizard,access_group_otp_confirmation_wizard,model_otp_confirmation_wizard,,1,1,1,0

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
55 access_group_otp_confirmation_wizard access_group_otp_confirmation_wizard model_otp_confirmation_wizard 1 1 1 0
56
57
58
59
60
61

View File

@ -9,5 +9,6 @@ from . import transfer_deduction_wizard
from . import donation_extension_wizard from . import donation_extension_wizard
from . import replace_sponsor_wizard from . import replace_sponsor_wizard
from . import add_benefit_wizard from . import add_benefit_wizard
from . import replace_benefit_wizard
from . import account_payment_register from . import account_payment_register
from . import esterdad from . import esterdad

View File

@ -0,0 +1,108 @@
# -*- coding: utf-8 -*-
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError, UserError
from odoo.osv import expression
import logging
_logger = logging.getLogger(__name__)
class ReplaceBenefitWizard(models.TransientModel):
_name = 'replace.benefit.wizard'
_description = "Replace Benefit"
old_members_id = fields.Many2one('family.member', string="Old Benefit", readonly=True)
members_domain_ids = fields.Many2many('family.member', compute='_compute_members_domain_ids')
new_members_id = fields.Many2one('family.member', string="New Benefit", domain="[('id', 'in', members_domain_ids)]")
record_type = fields.Selection([('sponsorship', 'Sponsorship'), ('donation', 'Donation')])
sponsorship_id = fields.Many2one('donations.details.lines', string="Sponsorship")
replacement_reason_id = fields.Many2one('replacement.reasons', string="Replacement Reason")
@api.depends('old_members_id')
def _compute_members_domain_ids(self):
for rec in self:
domain = []
if rec.record_type == 'sponsorship':
domain = [
'|',
('state', '=', 'second_approve'),
'&',
('state', 'in', ('waiting_approve', 'first_approve')),
('action_type', '=', 'suspended'),
('id', '!=', rec.old_members_id.id), ]
domain = expression.AND([domain, [
('member_status', '=', 'benefit'),
('sponsor_related_id', '=', False),
('general_restriction', '=', False)
]])
if rec.sponsorship_id.sponsorship_duration == 'temporary':
benefit_age_limit = None
if rec.sponsorship_id.direct_debit:
benefit_age_limit = 16
elif rec.sponsorship_id.payment_month_count < 6:
benefit_age_limit = 18
if benefit_age_limit:
domain = expression.AND([domain, [
('age', '>=', benefit_age_limit)
]])
members = self.env['family.member'].sudo().search(domain)
rec.members_domain_ids = members if members else self.env['family.member'].sudo().browse()
def replacement_benefit_action(self):
self.ensure_one()
if not self.sponsorship_id:
raise UserError(_("Please determine sponsorship."))
donation_line = self.sponsorship_id
sponsorship_id = donation_line.sponsorship_mechanism_id if donation_line.sponsorship_mechanism_id else donation_line.sponsorship_id
try:
if self.record_type == "sponsorship":
state = donation_line.state
if donation_line.state == 'replace':
state = 'active'
donation_line.sudo().write({
'state': state,
'benefit_id': self.new_members_id.id,
'benefit_ids': [(6, 0, [self.new_members_id.id])]
})
self.old_members_id.sudo().write({
'sponsor_related_id': False,
'kafala_status': 'have_not_kafala'
})
self.new_members_id.sudo().write({
'sponsor_related_id': donation_line.sponsor_id.id,
'kafala_status': 'have_kafala'
})
old_benefit = self.old_members_id.name
new_benefit = self.new_members_id.name
else:
raise UserError(_("type of record not determine."))
self.env['donation.replacement.log'].create({
'user_id': self.env.user.id,
'donation_detail_id': donation_line.id,
'sponsorship_id': sponsorship_id.id,
'old_benefit': old_benefit or '',
'new_benefit': new_benefit or '',
'record_type': donation_line.record_type,
'replacement_reason_id': self.replacement_reason_id.id,
})
except Exception as e:
raise UserError(_("Error in replacement:\n%s") % str(e))
def action_cancel(self):
"""
Cancel the wizard
"""
return {'type': 'ir.actions.act_window_close'}

View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="replace_benefit_wizard_form" model="ir.ui.view">
<field name="name">replace.benefit.wizard.form</field>
<field name="model">replace.benefit.wizard</field>
<field name="arch" type="xml">
<form>
<sheet>
<field name="record_type" invisible="1"/>
<field name="members_domain_ids" invisible="1" />
<group>
<group string="Replacement Information">
<field name="old_members_id" attrs="{'invisible': [('record_type', '=', 'donation')]}"/>
<field name="new_members_id" attrs="{'invisible': [('record_type', '=', 'donation')], 'required': [('record_type', '=', 'sponsorship')]}" options="{'no_create': True, 'no_create_edit':True,'no_open': True}" context="{'group_by': 'benefit_group', 'show_age_in_kafalat': True}"/>
</group>
</group>
<group string="Replacement Reason">
<field name="replacement_reason_id" required="1"/>
</group>
</sheet>
<footer>
<button string="Replace" type="object" name="replacement_benefit_action" class="oe_highlight"/>
<button string="Cancel" class="btn-secondary" special="cancel"/>
</footer>
</form>
</field>
</record>
</data>
</odoo>