diff --git a/odex25_takaful/odex_takaful/wizards/esterdad.py b/odex25_takaful/odex_takaful/wizards/esterdad.py index bf17678d6..87fce8937 100644 --- a/odex25_takaful/odex_takaful/wizards/esterdad.py +++ b/odex25_takaful/odex_takaful/wizards/esterdad.py @@ -2,6 +2,8 @@ from odoo import models, fields, api, _ from odoo.exceptions import UserError, ValidationError, Warning import logging +import random +import requests from odoo import SUPERUSER_ID from datetime import datetime, date, timedelta @@ -109,12 +111,36 @@ class EsterdadWizard(models.Model): def action_confirm_refund(self): for rec in self: - user = rec.sponsor_id.sponsor_id.kafel_id - if user: - user.generate_otp() + sponsor_phone = rec.mobile + if sponsor_phone: + company_id = rec.env.company + # Generate OTP & send it + otp = 1111 + if company_id.sms_mode == 'test': + _logger.info(f"--- SMS TEST MODE --- OTP for mobile {sponsor_phone} is {otp}. SMS not sent.") + else: + otp = str(random.randint(1000, 9999)) + payload = { + "recipients": [sponsor_phone], + "body": f"Your OTP code is: {otp}", + "sender": company_id.sms_sender_name, + } + headers = { + "Authorization": f"Bearer {company_id.sms_api_token}", + "Content-Type": "application/json", + } + try: + response = requests.post(company_id.sms_api_url, json=payload, headers=headers, timeout=10) + response.raise_for_status() # Raise an error for non-2xx responses + _logger.info(f"OTP {otp} sent successfully to {sponsor_phone}") + except requests.exceptions.RequestException as e: + _logger.error(f"Failed to send OTP to {sponsor_phone}: {e}") + raise ValidationError("Failed to send OTP. Please check API configuration or try again later.") + ################## + context = dict(self.env.context or {}) - context['default_user_id'] = user.id - context['default_otp'] = user.otp_code + # context['default_user_id'] = user.id + context['default_otp'] = otp context['default_esterdad_id'] = rec.id context['default_invoice_ids'] = rec.journal_entry_ids.ids context['default_cancel_reason'] = rec.cancel_reason.name if not rec.another_reason else rec.reason @@ -136,7 +162,7 @@ class EsterdadWizard(models.Model): 'context': context, } else: - raise UserError(_("No user assigned to this sponsor")) + raise UserError(_("Mobile is required!")) @api.depends('payment_ids') def _get_total_sponsorship_amount(self): @@ -150,7 +176,7 @@ class OTPWizard(models.TransientModel): otp = fields.Integer() otp_code = fields.Integer() esterdad_id = fields.Many2one('esterdad.wizard') - user_id = fields.Many2one('res.users') + # user_id = fields.Many2one('res.users') invoice_ids = fields.Many2many('account.move') # payment_ids = fields.Many2many( # 'account.payment',