Merge pull request #6275 from expsa/samir_aladawi_global_extension

[UPD] odex_takaful
This commit is contained in:
SamirLADOUI-sa 2026-01-20 20:43:39 +01:00 committed by GitHub
commit f55681a17d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 59 additions and 88 deletions

View File

@ -84,10 +84,9 @@
'views/product_views.xml',
'views/payment_machine_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/benefit_category_views.xml',
'wizards/global_extension_wizard.xml',
'data/message_template_data.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'):
self = self.sudo()
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')
if 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:
return self.env['payment.machine'].search([
('branch_custom_id', '=', sponsorship.branch_custom_id.id),
@ -193,8 +195,12 @@ class AccountRegisterPayment(models.TransientModel):
def _create_payments(self):
sponsorship_line_ids = self.env.context.get('sponsorship_line_ids')
sponsorship_lines = self.env['donations.details.lines'].browse(sponsorship_line_ids).filtered(
lambda r: r.display_type == False)
if self.env.context.get('wizard_force_show_all'):
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'))
payments = super(AccountRegisterPayment, self)._create_payments()
if sponsorship_lines:

View File

@ -68,6 +68,8 @@ class DonationExtensionWizard(models.TransientModel):
def _compute_line_ids(self):
extension_line_ids = [(5,)]
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:
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)
@ -115,8 +117,11 @@ class DonationExtensionWizard(models.TransientModel):
donation_line_ids += result[1]
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)
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
return {
@ -129,13 +134,13 @@ class DonationExtensionWizard(models.TransientModel):
'default_amount': amount,
'sponsorship_payment_skip_compute_amount': 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,
'default_sponsorship_payment': True,
'wiz_id': self.id,
'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',
'type': 'ir.actions.act_window',
@ -344,10 +349,15 @@ class DonationExtensionWizardLine(models.TransientModel):
if not self.donation_line_id:
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:
# Update the donation detail line
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)
old_end_date = self.current_end_date
@ -355,7 +365,7 @@ class DonationExtensionWizardLine(models.TransientModel):
# Update end date
# donation_line_new_vals = {
# '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:
# donation_line_new_vals.update({
@ -365,9 +375,9 @@ class DonationExtensionWizardLine(models.TransientModel):
# 'debit_payment_file_attachment': self.debit_payment_file_attachment,
# '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({
# 'sponsorship_end_date': new_end_date,
# 'kafala_status': 'have_kafala',
@ -383,14 +393,14 @@ class DonationExtensionWizardLine(models.TransientModel):
# Create extension history record
self.env['donation.extension.history'].create({
'donation_detail_id': self.donation_line_id.id,
'sponsorship_id': self.donation_line_id.sponsorship_id.id or self.donation_line_id.sponsorship_mechanism_id.id,
'donation_detail_id': donation_line_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_months': self.months,
'old_end_date': old_end_date,
'new_end_date': new_end_date,
'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,
'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:
return self.extension_invoice_id, self.donation_line_id
return self.extension_invoice_id, donation_line_id
return False
@ -446,6 +456,8 @@ class DonationExtensionWizardLine(models.TransientModel):
self.ensure_one()
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
# Get journal from settings

View File

@ -6,41 +6,28 @@ class GlobalExtensionWizard(models.TransientModel):
_name = '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(
comodel_name='donations.details.lines',
string='Donation Lines',
domain=[]
string='Donation Lines'
)
@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):
wizard_sudo = self.sudo()
return {
'type': 'ir.actions.act_window',
'name': _('Extend Donation'),
'name': ('Extend Donation'),
'res_model': 'donation.extension.wizard',
'view_mode': 'form',
'target': 'new',
'context': {
'donation_detail_ids': self.line_ids.ids,
'default_months': self.number_of_months,
'no_quick_close': True
'donation_detail_ids': wizard_sudo.line_ids.ids,
'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="model">global.extension.wizard</field>
<field name="arch" type="xml">
<form string="Global Extension">
<form string="Global Extension" create="false" edit="false">
<sheet>
<group>
<group>
<field name="number_of_months"/>
</group>
</group>
<notebook>
<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">
<field name="sequence_no"/>
<field name="sponsor_id"/>
@ -50,6 +51,10 @@
<field name="view_mode">form</field>
<field name="view_id" ref="view_global_extension_wizard_form"/>
<field name="target">new</field>
<field name="context">{
'wizard_force_show_all': True,
'active_test': False
}</field>
</record>
</data>