[UPD] odex_takaful

This commit is contained in:
Samir Ladoui 2026-01-20 20:41:56 +01:00
parent f97b8b14a4
commit 35c6bf2c75
7 changed files with 59 additions and 88 deletions

View File

@ -84,10 +84,9 @@
'views/product_views.xml', 'views/product_views.xml',
'views/payment_machine_views.xml', 'views/payment_machine_views.xml',
'views/account_payment_views.xml', 'views/account_payment_views.xml',
'views/global_extension_wizard_view.xml', 'wizards/global_extension_wizard_view.xml',
'views/takaful_menus_actions.xml', 'views/takaful_menus_actions.xml',
'views/benefit_category_views.xml', 'views/benefit_category_views.xml',
'wizards/global_extension_wizard.xml',
'data/message_template_data.xml', 'data/message_template_data.xml',
'wizards/transfer_deduction_wizard_views.xml', 'wizards/transfer_deduction_wizard_views.xml',

View File

@ -1441,3 +1441,8 @@ class DonationsDetailsLines(models.Model):
if self.env.context.get('wizard_force_show_all'): if self.env.context.get('wizard_force_show_all'):
self = self.sudo() self = self.sudo()
return super(DonationsDetailsLines, self).search(args, offset, limit, order, count) return super(DonationsDetailsLines, self).search(args, offset, limit, order, count)
def read(self, fields=None, load='_classic_read'):
if self.env.context.get('wizard_force_show_all'):
self = self.sudo()
return super(DonationsDetailsLines, self).read(fields, load)

View File

@ -58,6 +58,8 @@ class AccountRegisterPayment(models.TransientModel):
sponsorship_id = self.env.context.get('default_takaful_sponsorship_id') or self.env.context.get('active_id') sponsorship_id = self.env.context.get('default_takaful_sponsorship_id') or self.env.context.get('active_id')
if sponsorship_id: if sponsorship_id:
sponsorship = self.env['takaful.sponsorship'].browse(sponsorship_id) sponsorship = self.env['takaful.sponsorship'].browse(sponsorship_id)
if self.env.context.get('wizard_force_show_all'):
sponsorship = sponsorship.sudo()
if sponsorship.exists() and sponsorship.branch_custom_id: if sponsorship.exists() and sponsorship.branch_custom_id:
return self.env['payment.machine'].search([ return self.env['payment.machine'].search([
('branch_custom_id', '=', sponsorship.branch_custom_id.id), ('branch_custom_id', '=', sponsorship.branch_custom_id.id),
@ -193,8 +195,12 @@ class AccountRegisterPayment(models.TransientModel):
def _create_payments(self): def _create_payments(self):
sponsorship_line_ids = self.env.context.get('sponsorship_line_ids') sponsorship_line_ids = self.env.context.get('sponsorship_line_ids')
sponsorship_lines = self.env['donations.details.lines'].browse(sponsorship_line_ids).filtered( if self.env.context.get('wizard_force_show_all'):
lambda r: r.display_type == False) sponsorship_lines = self.env['donations.details.lines'].sudo().browse(sponsorship_line_ids).filtered(
lambda r: r.display_type == False)
else:
sponsorship_lines = self.env['donations.details.lines'].browse(sponsorship_line_ids).filtered(
lambda r: r.display_type == False)
sponsorship = self.env['takaful.sponsorship'].browse(self.env.context.get('sponsorship_id')) sponsorship = self.env['takaful.sponsorship'].browse(self.env.context.get('sponsorship_id'))
payments = super(AccountRegisterPayment, self)._create_payments() payments = super(AccountRegisterPayment, self)._create_payments()
if sponsorship_lines: if sponsorship_lines:

View File

@ -68,6 +68,8 @@ class DonationExtensionWizard(models.TransientModel):
def _compute_line_ids(self): def _compute_line_ids(self):
extension_line_ids = [(5,)] extension_line_ids = [(5,)]
donation_detail_ids = self.env['donations.details.lines'].browse(self.env.context.get('donation_detail_ids')) donation_detail_ids = self.env['donations.details.lines'].browse(self.env.context.get('donation_detail_ids'))
if self.env.context.get('wizard_force_show_all'):
donation_detail_ids = donation_detail_ids.sudo()
for line in donation_detail_ids: for line in donation_detail_ids:
if line.record_type == 'donation' or line.sponsorship_duration == 'permanent': if line.record_type == 'donation' or line.sponsorship_duration == 'permanent':
raise ValidationError(_("Only donation with direct debit or sponsorship can be extended. Line: %s") % line.name) raise ValidationError(_("Only donation with direct debit or sponsorship can be extended. Line: %s") % line.name)
@ -115,8 +117,11 @@ class DonationExtensionWizard(models.TransientModel):
donation_line_ids += result[1] donation_line_ids += result[1]
if invoice_ids: if invoice_ids:
line_ids = self.line_ids
if self.env.context.get('wizard_force_show_all'):
line_ids = line_ids.sudo()
# Get unique sponsorship IDs and take the first one (they should be same in normal use) # Get unique sponsorship IDs and take the first one (they should be same in normal use)
sponsorship_ids = list(set(self.line_ids.mapped('donation_line_id.sponsorship_mechanism_id.id'))) sponsorship_ids = list(set(line_ids.mapped('donation_line_id.sponsorship_mechanism_id.id')))
sponsorship_id = sponsorship_ids[0] if sponsorship_ids else False sponsorship_id = sponsorship_ids[0] if sponsorship_ids else False
return { return {
@ -129,13 +134,13 @@ class DonationExtensionWizard(models.TransientModel):
'default_amount': amount, 'default_amount': amount,
'sponsorship_payment_skip_compute_amount': True, 'sponsorship_payment_skip_compute_amount': True,
'dont_redirect_to_payments': True, 'dont_redirect_to_payments': True,
'sponsorship_line_ids': self.line_ids.donation_line_id.ids, 'sponsorship_line_ids': line_ids.donation_line_id.ids,
'sponsorship_payment': True, 'sponsorship_payment': True,
'default_sponsorship_payment': True, 'default_sponsorship_payment': True,
'wiz_id': self.id, 'wiz_id': self.id,
'sponsorship_id': sponsorship_id, 'sponsorship_id': sponsorship_id,
'default_takaful_sponsorship_id': sponsorship_id, 'default_takaful_sponsorship_id': sponsorship_id,
'force_sponsorship_line_partner_id': self.line_ids.mapped('partner_id')[:1].id, 'force_sponsorship_line_partner_id': line_ids.mapped('partner_id')[:1].id,
}, },
'target': 'new', 'target': 'new',
'type': 'ir.actions.act_window', 'type': 'ir.actions.act_window',
@ -344,10 +349,15 @@ class DonationExtensionWizardLine(models.TransientModel):
if not self.donation_line_id: if not self.donation_line_id:
raise ValidationError(_("No donation detail line selected.")) raise ValidationError(_("No donation detail line selected."))
donation_line_id = self.donation_line_id
if self.env.context.get('wizard_force_show_all'):
donation_line_id = self.donation_line_id.sudo()
if not self.extension_invoice_id: if not self.extension_invoice_id:
# Update the donation detail line # Update the donation detail line
self.old_end_date = self.current_end_date self.old_end_date = self.current_end_date
self.old_payment_month_count = self.donation_line_id.payment_month_count self.old_payment_month_count = donation_line_id.payment_month_count
new_end_date = self.current_end_date + relativedelta(months=self.months) new_end_date = self.current_end_date + relativedelta(months=self.months)
old_end_date = self.current_end_date old_end_date = self.current_end_date
@ -355,7 +365,7 @@ class DonationExtensionWizardLine(models.TransientModel):
# Update end date # Update end date
# donation_line_new_vals = { # donation_line_new_vals = {
# 'end_date': new_end_date, # 'end_date': new_end_date,
# 'payment_month_count': self.donation_line_id.payment_month_count + self.months, # 'payment_month_count': donation_line_id.payment_month_count + self.months,
# } # }
# if self.direct_debit: # if self.direct_debit:
# donation_line_new_vals.update({ # donation_line_new_vals.update({
@ -365,9 +375,9 @@ class DonationExtensionWizardLine(models.TransientModel):
# 'debit_payment_file_attachment': self.debit_payment_file_attachment, # 'debit_payment_file_attachment': self.debit_payment_file_attachment,
# 'debit_payment_attachment_file_name': self.debit_payment_attachment_file_name, # 'debit_payment_attachment_file_name': self.debit_payment_attachment_file_name,
# }) # })
# self.donation_line_id.write(donation_line_new_vals) # donation_line_id.write(donation_line_new_vals)
# benefit_ids = self.donation_line_id.benefit_ids | self.donation_line_id.benefit_id # benefit_ids = donation_line_id.benefit_ids | donation_line_id.benefit_id
# benefit_ids.write({ # benefit_ids.write({
# 'sponsorship_end_date': new_end_date, # 'sponsorship_end_date': new_end_date,
# 'kafala_status': 'have_kafala', # 'kafala_status': 'have_kafala',
@ -383,14 +393,14 @@ class DonationExtensionWizardLine(models.TransientModel):
# Create extension history record # Create extension history record
self.env['donation.extension.history'].create({ self.env['donation.extension.history'].create({
'donation_detail_id': self.donation_line_id.id, 'donation_detail_id': donation_line_id.id,
'sponsorship_id': self.donation_line_id.sponsorship_id.id or self.donation_line_id.sponsorship_mechanism_id.id, 'sponsorship_id': donation_line_id.sponsorship_id.id or donation_line_id.sponsorship_mechanism_id.id,
'extension_amount': self.total_donation_amount, 'extension_amount': self.total_donation_amount,
'extension_months': self.months, 'extension_months': self.months,
'old_end_date': old_end_date, 'old_end_date': old_end_date,
'new_end_date': new_end_date, 'new_end_date': new_end_date,
'invoice_id': invoice_id.id if invoice_id else False, 'invoice_id': invoice_id.id if invoice_id else False,
'old_direct_debit': self.donation_line_id.direct_debit, 'old_direct_debit': donation_line_id.direct_debit,
'new_direct_debit': self.direct_debit, 'new_direct_debit': self.direct_debit,
'direct_debit_partner_bank_id': self.direct_debit_partner_bank_id.id, 'direct_debit_partner_bank_id': self.direct_debit_partner_bank_id.id,
@ -402,7 +412,7 @@ class DonationExtensionWizardLine(models.TransientModel):
}) })
if not self.direct_debit: if not self.direct_debit:
return self.extension_invoice_id, self.donation_line_id return self.extension_invoice_id, donation_line_id
return False return False
@ -446,6 +456,8 @@ class DonationExtensionWizardLine(models.TransientModel):
self.ensure_one() self.ensure_one()
donation_line = self.donation_line_id donation_line = self.donation_line_id
if self.env.context.get('wizard_force_show_all'):
donation_line = self.donation_line_id.sudo()
sponsorship = donation_line.sponsorship_id or donation_line.sponsorship_mechanism_id sponsorship = donation_line.sponsorship_id or donation_line.sponsorship_mechanism_id
# Get journal from settings # Get journal from settings

View File

@ -6,41 +6,28 @@ class GlobalExtensionWizard(models.TransientModel):
_name = 'global.extension.wizard' _name = 'global.extension.wizard'
_description = 'Global Extension Wizard' _description = 'Global Extension Wizard'
# Field for number of months
number_of_months = fields.Integer(
string='Number of Months',
required=True,
default=1
)
# Field to select multiple donation lines
# Assumes the target model is 'donations.details.lines' as specified
line_ids = fields.Many2many( line_ids = fields.Many2many(
comodel_name='donations.details.lines', comodel_name='donations.details.lines',
string='Donation Lines', string='Donation Lines'
domain=[]
) )
@api.onchange('line_ids')
def _onchange_line_ids_domain(self):
allowed_ids = self.env['donations.details.lines'].sudo().search([
('record_type', '=', 'sponsorship'),
('sponsorship_duration', '=', 'temporary'),
('state', 'in', ['active', 'replace'])
]).ids
return {'domain': {'line_ids': [('id', 'in', allowed_ids)]}}
@api.model
def create(self, vals):
return super(GlobalExtensionWizard, self.sudo()).create(vals)
def action_confirm(self): def action_confirm(self):
wizard_sudo = self.sudo()
return { return {
'type': 'ir.actions.act_window', 'type': 'ir.actions.act_window',
'name': _('Extend Donation'), 'name': ('Extend Donation'),
'res_model': 'donation.extension.wizard', 'res_model': 'donation.extension.wizard',
'view_mode': 'form', 'view_mode': 'form',
'target': 'new', 'target': 'new',
'context': { 'context': {
'donation_detail_ids': self.line_ids.ids, 'donation_detail_ids': wizard_sudo.line_ids.ids,
'default_months': self.number_of_months, 'no_quick_close': True,
'no_quick_close': True 'wizard_force_show_all': True
}, },
} }

View File

@ -1,43 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<!-- Global Extension Wizard Form View -->
<record id="view_global_extension_wizard_form" model="ir.ui.view">
<field name="name">global.extension.wizard.form</field>
<field name="model">global.extension.wizard</field>
<field name="arch" type="xml">
<form string="Global Extension" create="false" edit="false">
<notebook>
<group string="Donation Lines">
<field name="line_ids"
options="{'no_create': True, 'no_create_edit': True}">
<tree string="Donation Lines" selectable="1">
<field name="sequence_no"/>
<field name="sponsor_id"/>
<field name="sponsor_phone"/>
<field name="state"/>
<field name="end_date"/>
<field name="donation_amount"/>
</tree>
</field>
</group>
</notebook>
<footer>
<button name="action_confirm"
string="Confirm"
type="object"
class="btn-primary"/>
<button string="Cancel"
special="cancel"
class="btn-secondary"/>
</footer>
</form>
</field>
</record>
</odoo>

View File

@ -6,16 +6,17 @@
<field name="name">global.extension.wizard.form</field> <field name="name">global.extension.wizard.form</field>
<field name="model">global.extension.wizard</field> <field name="model">global.extension.wizard</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="Global Extension"> <form string="Global Extension" create="false" edit="false">
<sheet> <sheet>
<group>
<group>
<field name="number_of_months"/>
</group>
</group>
<notebook> <notebook>
<page string="Donation Lines"> <page string="Donation Lines">
<field name="line_ids" context="{'wizard_force_show_all': True, 'active_test': False}"> <field name="line_ids" options="{'no_create': True, 'no_open': True, 'no_create_edit': True}"
context="{'wizard_force_show_all': True, 'active_test': False}"
domain="[
('record_type', '=', 'sponsorship'),
('sponsorship_duration', '=', 'temporary'),
('state', 'in', ['active', 'replace'])
]">
<tree string="Donation Lines"> <tree string="Donation Lines">
<field name="sequence_no"/> <field name="sequence_no"/>
<field name="sponsor_id"/> <field name="sponsor_id"/>
@ -50,6 +51,10 @@
<field name="view_mode">form</field> <field name="view_mode">form</field>
<field name="view_id" ref="view_global_extension_wizard_form"/> <field name="view_id" ref="view_global_extension_wizard_form"/>
<field name="target">new</field> <field name="target">new</field>
<field name="context">{
'wizard_force_show_all': True,
'active_test': False
}</field>
</record> </record>
</data> </data>