From 6ec9eb09a0ac625346b3f770f23391971c47017d Mon Sep 17 00:00:00 2001 From: Abdurrahman Saber Date: Wed, 12 Nov 2025 16:26:50 +0200 Subject: [PATCH] [FIX] odex_takaful: create bill for family --- .../wizards/account_payment_register.py | 53 ++++++++++--------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/odex25_ensan/odex_takaful/wizards/account_payment_register.py b/odex25_ensan/odex_takaful/wizards/account_payment_register.py index 1ee6b003f..41490b8dc 100644 --- a/odex25_ensan/odex_takaful/wizards/account_payment_register.py +++ b/odex25_ensan/odex_takaful/wizards/account_payment_register.py @@ -71,7 +71,7 @@ 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) - + sponsorship = self.env['takaful.sponsorship'].browse(self.env.context.get('sponsorship_id')) payments = super(AccountRegisterPayment, self)._create_payments() if sponsorship_lines: @@ -85,7 +85,10 @@ class AccountRegisterPayment(models.TransientModel): else: state = 'paid' elif line.record_type == 'donation': - state = 'paid' + if line.donation_mechanism == 'with_conditions': + state = 'active' + else: + state = 'paid' line.write({'state': state}) if self.env.context.get('schedule_line_payment'): schedule_line = self.env['sponsorship.scheduling.line'].browse(self.env.context.get('schedule_line_id')) @@ -95,39 +98,37 @@ class AccountRegisterPayment(models.TransientModel): if len(all_schedule_lines_paid) == len( schedule_line.donation_detail_linked_id.sponsorship_scheduling_line_ids): schedule_line.donation_detail_linked_id.state = 'paid' - vendor_bill_vals = [] - benefit_journal_id = self.env.company.kafala_benefit_journal_id.id - benefit_ids = sponsorship_lines.benefit_id | sponsorship_lines.benefit_ids - for benefit in benefit_ids: - benefit_lines = sponsorship_lines.filtered( - lambda l: l.benefit_id == benefit or benefit in l.benefit_ids) - sponsorship_id = (benefit_lines.sponsorship_id + benefit_lines.sponsorship_mechanism_id)[0] + if sponsorship.record_type == 'donation' and sponsorship.donation_mechanism == 'with_conditions': + benefit_journal_id = self.env.company.kafala_benefit_journal_id.id + donation_line = schedule_line.donation_detail_linked_id + family_id = donation_line.family_id + bill_values = { - 'takaful_sponsorship_id': sponsorship_id.id, + 'takaful_sponsorship_id': sponsorship.id, 'name': self.env['ir.sequence'].next_by_code('account.move.accrsp'), 'move_type': 'in_invoice', 'journal_id': benefit_journal_id, 'date': fields.Date.today(), - 'partner_id': benefit.partner_id.id, + 'invoice_date': fields.Date.today(), + 'partner_id': family_id.partner_id.id, 'invoice_line_ids': [(0, 0, { - 'product_id': line.product_id.id, + 'product_id': donation_line.product_id.id, 'price_unit': schedule_line.amount, 'quantity': 1, - 'name': _("Benefit Number %s %s") % (line.sequence_no, f"Cheque Number: {self.check_number} Cheque Due Date: {self.check_due_date}" if self.takaful_payment_method == 'check' else " "), - 'analytic_account_id': sponsorship_id.branch_custom_id.branch.analytic_account_id.id, - }) for line in benefit_lines] + 'name': _("Benefit Number %s %s") % (donation_line.sequence_no, f"Cheque Number: {self.check_number} Cheque Due Date: {self.check_due_date}" if self.takaful_payment_method == 'check' else " "), + 'analytic_account_id': sponsorship.branch_custom_id.branch.analytic_account_id.id, + })] } - vendor_bill_vals.append(bill_values) - bill_id = self.env['account.move'].sudo().create(vendor_bill_vals) - for line in bill_id.invoice_line_ids: - line.account_id = line._get_computed_account() - taxes = line._get_computed_taxes() - if taxes and line.move_id.fiscal_position_id: - taxes = line.move_id.fiscal_position_id.map_tax(taxes, partner=line.partner_id) - line.tax_ids = taxes - line.product_uom_id = line._get_computed_uom() - bill_id.action_post() + bill_id = self.env['account.move'].sudo().create(bill_values) + for line in bill_id.invoice_line_ids: + line.account_id = line._get_computed_account() + taxes = line._get_computed_taxes() + if taxes and line.move_id.fiscal_position_id: + taxes = line.move_id.fiscal_position_id.map_tax(taxes, partner=line.partner_id) + line.tax_ids = taxes + line.product_uom_id = line._get_computed_uom() + bill_id.action_post() for line in sponsorship_lines: if line.record_type != 'sponsorship': continue @@ -149,7 +150,7 @@ class AccountRegisterPayment(models.TransientModel): if self.env.context.get('is_direct_debit'): payments.write({'direct_debit': True}) payments.move_id.write({ - 'takaful_sponsorship_id': self.env.context.get('sponsorship_id') + 'takaful_sponsorship_id': sponsorship.id }) if self.transaction_file_attachment: