From 8b0ab0cfdb5a43813946adbe2581ccaf438fae53 Mon Sep 17 00:00:00 2001 From: Nossibaelhadi Date: Tue, 18 Nov 2025 22:23:35 +0300 Subject: [PATCH 1/3] FIX translate partial payment for extend --- .../wizards/donation_extension_wizard.py | 70 +++++++++++++++---- 1 file changed, 55 insertions(+), 15 deletions(-) diff --git a/odex25_ensan/odex_takaful/wizards/donation_extension_wizard.py b/odex25_ensan/odex_takaful/wizards/donation_extension_wizard.py index eceab07a5..7a8c7a483 100644 --- a/odex25_ensan/odex_takaful/wizards/donation_extension_wizard.py +++ b/odex25_ensan/odex_takaful/wizards/donation_extension_wizard.py @@ -89,24 +89,64 @@ class DonationExtensionWizard(models.TransientModel): donation_line_ids += result[1] if invoice_ids and self.is_different_payment: + invoices = invoice_ids.filtered( + lambda inv: inv.state == 'posted' and inv.move_type in ('out_invoice', 'out_refund')) + if not invoices: + return + + residual_map = {inv.id: float(inv.amount_residual) for inv in invoices} + + invoices = invoices.sorted(key=lambda r: r.invoice_date or r.date or fields.Date.context_today(self)) + for pay_line in self.payment_line_ids: - payment_register_vals = { - 'payment_type': 'inbound', - 'partner_type': 'customer', - 'partner_id': pay_line.partner_id.id, - 'amount': pay_line.payment_amount, - 'journal_id': pay_line.journal_id.id, - 'payment_method_id': pay_line.payment_method.id, - 'communication': _("Extension Payment"), - } + remaining = float(pay_line.payment_amount or 0.0) + if float_compare(remaining, 0.0, precision_digits=2) <= 0: + continue - payment_register = self.env['account.payment.register'].sudo().with_context( - active_model='account.move', - active_ids=invoice_ids.ids, - ).create(payment_register_vals) - print('.................',payment_register) - payment_register.action_create_payments() + candidate_invoices = invoices.filtered(lambda inv: inv.partner_id == pay_line.partner_id) + if not candidate_invoices: + candidate_invoices = invoices + + for inv in candidate_invoices: + if float_compare(remaining, 0.0, precision_digits=2) <= 0: + break + + inv_res = residual_map.get(inv.id, 0.0) + if float_compare(inv_res, 0.0, precision_digits=2) <= 0: + continue + + pay_amount = min(remaining, inv_res) + + payment_register_vals = { + 'payment_type': 'inbound', + 'partner_type': 'customer', + 'partner_id': pay_line.partner_id.id, + 'amount': pay_amount, + 'journal_id': pay_line.journal_id.id, + 'payment_method_id': pay_line.payment_method.id, + 'communication': _("Extension Payment for %s") % inv.name, + } + + ctx = { + 'active_model': 'account.move', + 'active_ids': [inv.id], + 'dont_redirect_to_payments': True, + 'sponsorship_line_ids': donation_line_ids.ids, + 'sponsorship_payment': True, + 'default_sponsorship_payment': True, + } + + payment_register = self.env['account.payment.register'].sudo().with_context(ctx).new( + payment_register_vals) + payments = payment_register._create_payments() + + inv_sudo = inv.sudo() + inv_sudo.invalidate_cache(['amount_residual']) + new_residual = float(inv_sudo.amount_residual or 0.0) + residual_map[inv.id] = new_residual + + remaining = remaining - pay_amount elif invoice_ids and not self.is_different_payment: return { From 868fcabf1775b88b1f98d19a69e150ddb2ad07b9 Mon Sep 17 00:00:00 2001 From: Nossibaelhadi Date: Wed, 19 Nov 2025 00:39:22 +0300 Subject: [PATCH 2/3] [FIX] replacement and extend process from donation --- odex25_ensan/odex_takaful/i18n/ar_001.po | 48 +++++++++++++++++++ .../models/donation_details_lines.py | 8 ++-- .../models/sponsorship_scheduling_line.py | 2 + .../wizards/donation_extension_wizard.py | 2 + 4 files changed, 56 insertions(+), 4 deletions(-) diff --git a/odex25_ensan/odex_takaful/i18n/ar_001.po b/odex25_ensan/odex_takaful/i18n/ar_001.po index 926fbccd8..32cb4cf22 100644 --- a/odex25_ensan/odex_takaful/i18n/ar_001.po +++ b/odex25_ensan/odex_takaful/i18n/ar_001.po @@ -7504,4 +7504,52 @@ msgstr "سجل الإستبدال" msgid "Paid" msgstr "منتهي" +#. module: odex_takaful +#: model:ir.model.fields,field_description:odex_takaful.field_extension_payment_wizard_line__check_number +msgid "Check Number" +msgstr "رقم الشيك" +#. module: odex_takaful +#: model:ir.model.fields,field_description:odex_takaful.field_extension_payment_wizard_line__journal_id +msgid "Journal" +msgstr "حساب الجمعية" + +#. module: odex_takaful +#: model:ir.model.fields,field_description:odex_takaful.field_extension_payment_wizard_line__partner_bank_id +msgid "Partner Bank" +msgstr "بنك المتبرع" + +#. module: odex_takaful +#: model:ir.model.fields,field_description:odex_takaful.field_extension_payment_wizard_line__payment_amount +msgid "Payment Amount" +msgstr "المبلغ" + +#. module: odex_takaful +#: model:ir.model.fields,field_description:odex_takaful.field_extension_payment_wizard_line__payment_file_attachment +msgid "Payment Attachment" +msgstr "مرفق الدفع" + +#. module: odex_takaful +#: model:ir.model.fields,field_description:odex_takaful.field_extension_payment_wizard_line__payment_method +msgid "Payment Method" +msgstr "طريقة الدفع" + +#. module: odex_takaful +#: model:ir.model.fields,field_description:odex_takaful.field_extension_payment_wizard_line__check_due_date +msgid "Check Due Date" +msgstr "تاريخ الإستحقاق" + +#. module: odex_takaful +#: model:ir.model.fields,field_description:odex_takaful.field_extension_payment_wizard_line__check_number +msgid "Check Number" +msgstr "رقم الشيك" + +#. module: odex_takaful +#: model:ir.model.fields,field_description:odex_takaful.field_donation_extension_wizard__is_different_payment +msgid "Is Different Payment" +msgstr "طرف دفع متعددة" + +#. module: odex_takaful +#: model_terms:ir.ui.view,arch_db:odex_takaful.view_account_payment_register_form +msgid "Association Journal" +msgstr "حساب الجمعية" \ No newline at end of file diff --git a/odex25_ensan/odex_takaful/models/donation_details_lines.py b/odex25_ensan/odex_takaful/models/donation_details_lines.py index be50c2056..87527145b 100644 --- a/odex25_ensan/odex_takaful/models/donation_details_lines.py +++ b/odex25_ensan/odex_takaful/models/donation_details_lines.py @@ -157,7 +157,7 @@ class DonationsDetailsLines(models.Model): today = fields.Date.today() for rec in self: show_extend_button = ( - ((rec.record_type == 'donation' and rec.direct_debit) or rec.record_type == 'sponsorship') and + rec.record_type == 'sponsorship' and rec.end_date and rec.end_date >= today and rec.state == 'active' @@ -168,9 +168,9 @@ class DonationsDetailsLines(models.Model): def _compute_show_replaced_button(self): for rec in self: show_replaced_button = ( - ((rec.record_type == 'donation' and rec.donation_mechanism == 'with_conditions') or rec.record_type == 'sponsorship') and - rec.state in ('active', 'paid','replace') and - (rec.benefit_id or rec.benefit_ids or rec.family_id) + rec.record_type == 'sponsorship' and + rec.state in ('active','replace') and + (rec.benefit_id or rec.benefit_ids) ) rec.show_replaced_button = show_replaced_button diff --git a/odex25_ensan/odex_takaful/models/sponsorship_scheduling_line.py b/odex25_ensan/odex_takaful/models/sponsorship_scheduling_line.py index a5c49aa0b..863c385e8 100644 --- a/odex25_ensan/odex_takaful/models/sponsorship_scheduling_line.py +++ b/odex25_ensan/odex_takaful/models/sponsorship_scheduling_line.py @@ -148,6 +148,8 @@ class SchedulingLine(models.Model): line.sudo().write({'status': 'paid'}) if line.donation_detail_linked_id.state == 'waiting' or (not line.donation_detail_linked_id.benefit_id and line.donation_detail_linked_id.record_type == 'sponsorship'): line.donation_detail_linked_id.sudo().write({'state': 'waiting'}) + elif line.donation_detail_linked_id.record_type == 'donation': + line.donation_detail_linked_id.sudo().write({'state': 'confirmed'}) else: line.donation_detail_linked_id.sudo().write({'state': 'active'}) line.donation_detail_linked_id.sponsorship_id.sudo().write({'state': 'wait_pay'}) diff --git a/odex25_ensan/odex_takaful/wizards/donation_extension_wizard.py b/odex25_ensan/odex_takaful/wizards/donation_extension_wizard.py index 7a8c7a483..848f8317c 100644 --- a/odex25_ensan/odex_takaful/wizards/donation_extension_wizard.py +++ b/odex25_ensan/odex_takaful/wizards/donation_extension_wizard.py @@ -126,6 +126,8 @@ class DonationExtensionWizard(models.TransientModel): 'journal_id': pay_line.journal_id.id, 'payment_method_id': pay_line.payment_method.id, 'communication': _("Extension Payment for %s") % inv.name, + 'transaction_file_attachment': pay_line.payment_file_attachment, + } ctx = { From f0f026ead9b203dec5a7fc97fe500133a2f7499f Mon Sep 17 00:00:00 2001 From: Nossibaelhadi Date: Wed, 19 Nov 2025 00:45:09 +0300 Subject: [PATCH 3/3] [FIX] replacement and extend process from donation --- odex25_ensan/odex_takaful/i18n/ar_001.po | 7 ++++++- .../odex_takaful/wizards/donation_extension_wizard.py | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/odex25_ensan/odex_takaful/i18n/ar_001.po b/odex25_ensan/odex_takaful/i18n/ar_001.po index 32cb4cf22..74c96adec 100644 --- a/odex25_ensan/odex_takaful/i18n/ar_001.po +++ b/odex25_ensan/odex_takaful/i18n/ar_001.po @@ -7552,4 +7552,9 @@ msgstr "طرف دفع متعددة" #. module: odex_takaful #: model_terms:ir.ui.view,arch_db:odex_takaful.view_account_payment_register_form msgid "Association Journal" -msgstr "حساب الجمعية" \ No newline at end of file +msgstr "حساب الجمعية" + +#. module: odex_takaful +#: model_terms:ir.ui.view,arch_db:odex_takaful.donation_extension_wizard_form +msgid "Sub Payments" +msgstr "دفع متعدد" \ No newline at end of file diff --git a/odex25_ensan/odex_takaful/wizards/donation_extension_wizard.py b/odex25_ensan/odex_takaful/wizards/donation_extension_wizard.py index 848f8317c..544aef59f 100644 --- a/odex25_ensan/odex_takaful/wizards/donation_extension_wizard.py +++ b/odex25_ensan/odex_takaful/wizards/donation_extension_wizard.py @@ -141,7 +141,7 @@ class DonationExtensionWizard(models.TransientModel): payment_register = self.env['account.payment.register'].sudo().with_context(ctx).new( payment_register_vals) - payments = payment_register._create_payments() + payments = payment_register.action_create_payments() inv_sudo = inv.sudo() inv_sudo.invalidate_cache(['amount_residual'])