IMP benefit
This commit is contained in:
parent
839dbb940c
commit
9dddf20ea7
|
|
@ -280,8 +280,7 @@
|
|||
<tr>
|
||||
<td style="font-size:14px;line-height:20px;">
|
||||
<p>Hello,</p>
|
||||
<p>Your OTP for confirming visit <strong>${object.benefit_id.name}</strong> is:
|
||||
</p>
|
||||
<p>Your OTP for confirming visit <strong>${object.name}</strong> is:</p>
|
||||
|
||||
<!-- OTP Block -->
|
||||
<div style="text-align:center;margin:20px 0;">
|
||||
|
|
@ -320,7 +319,7 @@
|
|||
<field name="name">Visit Location OTP</field>
|
||||
<field name="model_id" ref="odex_benefit.model_visit_location"/>
|
||||
<field name="body">
|
||||
Your verification code for visit ${object.benefit_id.name} is ${object.otp_code}.
|
||||
Hello Your verification code for ${object.name} visit is ${object.otp_code}.
|
||||
It is valid for ${object.visit_types.otp_validity_minutes or 5} minutes.
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
|||
|
|
@ -2746,15 +2746,21 @@ msgstr "بإمكانه النشر "
|
|||
#: model_terms:ir.ui.view,arch_db:odex_benefit.generate_reports_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.receive_food_basket_form
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_confirm_benefit_expense_form
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_confirm_benefit_expense_search
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_entity_black_list_wizard_form
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_entity_final_refused_reason_wizard_form
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_entity_refused_reason_wizard_form
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_entity_return_reason_wizard_form
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_exception_member_wizard_form
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_exception_wizard_form
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_exchange_order_wizard_form
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_reason_for_return_wizard
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_refuse_reason_wizard
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_resarcher_member_wizard_form
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_suspend_member_reason_wizard_form
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_suspend_reason_wizard_form
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_visit_skip_otp_wizard_form
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.visit_location_otp_wizard_form
|
||||
msgid "Cancel"
|
||||
msgstr "إلغاء"
|
||||
|
||||
|
|
@ -3176,7 +3182,12 @@ msgstr "إعدادات ملف الأسرة"
|
|||
|
||||
#. module: odex_benefit
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_confirm_benefit_expense_form
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_confirm_benefit_expense_search
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_exchange_order_wizard_form
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_reason_for_return_wizard
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_refuse_reason_wizard
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_visit_skip_otp_wizard_form
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.visit_location_otp_wizard_form
|
||||
msgid "Confirm"
|
||||
msgstr "تاكيد"
|
||||
|
||||
|
|
@ -14882,6 +14893,7 @@ msgstr "وحدة الزمن للتكرار"
|
|||
|
||||
#. module: odex_benefit
|
||||
#: model:ir.model.fields,field_description:odex_benefit.field_visits_types__otp_verification
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.visit_location_otp_wizard_form
|
||||
msgid "OTP Verification"
|
||||
msgstr "التحقق عبرOTP"
|
||||
|
||||
|
|
@ -14928,4 +14940,208 @@ msgstr "الزيارات"
|
|||
#. module: odex_benefit
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.visit_location_activity_view
|
||||
msgid "Visits Activity"
|
||||
msgstr "أنشطة الزيارات"
|
||||
msgstr "أنشطة الزيارات"
|
||||
|
||||
#. module: odex_benefit
|
||||
#: model:mail.template,subject:odex_benefit.visit_location_otp_email_template
|
||||
msgid "Your OTP Code"
|
||||
msgstr "رمز التحقق الخاص بك"
|
||||
|
||||
#. module: odex_benefit
|
||||
#: model:mail.template,body_html:odex_benefit.visit_location_otp_email_template
|
||||
msgid ""
|
||||
"<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"padding-top:16px;background-color:#F9F9F9;font-family:Verdana,Arial,sans-serif;color:#333;width:100%;border-collapse:separate;\">\n"
|
||||
" <tr>\n"
|
||||
" <td align=\"center\">\n"
|
||||
" <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"600\" style=\"background-color:#fff;padding:24px;border-radius:8px;border-collapse:separate;\">\n"
|
||||
" <tr>\n"
|
||||
" <td style=\"font-size:14px;line-height:20px;\">\n"
|
||||
" <p>Hello,</p>\n"
|
||||
" <p>Your OTP for confirming visit <strong>${object.benefit_id.name}</strong> is:\n"
|
||||
" </p>\n"
|
||||
"\n"
|
||||
" <!-- OTP Block -->\n"
|
||||
" <div style=\"text-align:center;margin:20px 0;\">\n"
|
||||
" <span style=\"display:inline-block;background-color:#2c3e50;color:#ffffff; font-size:24px;font-weight:bold;padding:12px 24px; border-radius:6px;letter-spacing:3px;\">\n"
|
||||
" ${object.otp_code}\n"
|
||||
" </span>\n"
|
||||
" </div>\n"
|
||||
"\n"
|
||||
" <p>This code is valid for <strong>\n"
|
||||
" ${object.visit_types.otp_validity_minutes or 5}\n"
|
||||
" </strong> minutes.\n"
|
||||
" </p>\n"
|
||||
" <br/>\n"
|
||||
" <p>Regards,\n"
|
||||
" <br/>\n"
|
||||
" <strong>${user.company_id.name}</strong>\n"
|
||||
" </p>\n"
|
||||
"\n"
|
||||
" <br/>\n"
|
||||
" <p style=\"font-size:11px;color:grey;\">\n"
|
||||
" This is an automated message. Please do not reply.\n"
|
||||
" </p>\n"
|
||||
" </td>\n"
|
||||
" </tr>\n"
|
||||
" </table>\n"
|
||||
" </td>\n"
|
||||
" </tr>\n"
|
||||
" </table>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"padding-top:16px;background-color:#F9F9F9;font-family:Verdana,Arial,sans-serif;color:#333;width:100%;border-collapse:separate;\">\n"
|
||||
" <tr>\n"
|
||||
" <td align=\"center\">\n"
|
||||
" <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"600\" style=\"background-color:#fff;padding:24px;border-radius:8px;border-collapse:separate;\">\n"
|
||||
" <tr>\n"
|
||||
" <td style=\"font-size:14px;line-height:20px;\">\n"
|
||||
" <p>مرحباً،</p>\n"
|
||||
" <p>رمز التحقق الخاص بتأكيد الزيارة <strong>${object.name}</strong> هو:</p>\n"
|
||||
"\n"
|
||||
" <!-- OTP Block -->\n"
|
||||
" <div style=\"text-align:center;margin:20px 0;\">\n"
|
||||
" <span style=\"display:inline-block;background-color:#2c3e50;color:#ffffff; font-size:24px;font-weight:bold;padding:12px 24px; border-radius:6px;letter-spacing:3px;\">\n"
|
||||
" ${object.otp_code}\n"
|
||||
" </span>\n"
|
||||
" </div>\n"
|
||||
"\n"
|
||||
" <p>هذا الرمز صالح لمدة <strong>\n"
|
||||
" ${object.visit_types.otp_validity_minutes or 5}\n"
|
||||
" </strong> دقائق.</p>\n"
|
||||
" <br/>\n"
|
||||
" <p>مع التحية،<br/>\n"
|
||||
" <strong>${user.company_id.name}</strong>\n"
|
||||
" </p>\n"
|
||||
"\n"
|
||||
" <br/>\n"
|
||||
" <p style=\"font-size:11px;color:grey;\">\n"
|
||||
" هذه رسالة آلية، الرجاء عدم الرد.\n"
|
||||
" </p>\n"
|
||||
" </td>\n"
|
||||
" </tr>\n"
|
||||
" </table>\n"
|
||||
" </td>\n"
|
||||
" </tr>\n"
|
||||
"</table>"
|
||||
|
||||
#. module: odex_benefit
|
||||
#: model:sms.template,name:odex_benefit.visit_location_otp_sms_template
|
||||
msgid "Visit Location OTP"
|
||||
msgstr "رمز التحقق لزيارة الموقع"
|
||||
|
||||
#. module: odex_benefit
|
||||
#: model:sms.template,body:odex_benefit.visit_location_otp_sms_template
|
||||
msgid ""
|
||||
"\n"
|
||||
" Your verification code for visit ${object.name} is ${object.otp_code}.\n"
|
||||
" It is valid for ${object.visit_types.otp_validity_minutes or 5} minutes.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" رمز التحقق الخاص بزيارتك ${object.name} هو ${object.otp_code}.\n"
|
||||
" صالح لمدة ${object.visit_types.otp_validity_minutes or 5} دقائق.\n"
|
||||
" "
|
||||
|
||||
#. module: odex_benefit
|
||||
#: model:res.groups,name:odex_benefit.group_otp_manager
|
||||
msgid "OTP Manager"
|
||||
msgstr "مدير المصادقة (OTP)"
|
||||
|
||||
#. module: odex_benefit
|
||||
#: code:addons/odex_benefit/models/visit.py:0
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_visit_skip_otp_wizard_form
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.visits_form
|
||||
#, python-format
|
||||
msgid "Skip OTP Verification"
|
||||
msgstr "تخطي التحقق بالرمز (OTP)"
|
||||
|
||||
#. module: odex_benefit
|
||||
#: model:ir.model.fields,field_description:odex_benefit.field_visit_location__otp_code
|
||||
msgid "OTP Code"
|
||||
msgstr "رمز التحقق (OTP)"
|
||||
|
||||
#. module: odex_benefit
|
||||
#: model:ir.model.fields,field_description:odex_benefit.field_visit_location__otp_generated_at
|
||||
msgid "OTP Generated At"
|
||||
msgstr "تاريخ/وقت إنشاء رمز التحقق"
|
||||
|
||||
#. module: odex_benefit
|
||||
#: code:addons/odex_benefit/models/visit.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The family profile has no email address. OTP cannot be sent. Please add an "
|
||||
"email first."
|
||||
msgstr "ملف العائلة لا يحتوي على عنوان بريد إلكتروني. لا يمكن إرسال رمز التحقق. يرجى إضافة بريد إلكتروني أولاً."
|
||||
|
||||
#. module: odex_benefit
|
||||
#: code:addons/odex_benefit/models/visit.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The email template 'Visit Location OTP Email' is missing. Please contact "
|
||||
"your administrator."
|
||||
msgstr "قالب البريد الإلكتروني 'رمز التحقق لزيارة الموقع' مفقود. يرجى التواصل مع مدير النظام."
|
||||
|
||||
#. module: odex_benefit
|
||||
#: code:addons/odex_benefit/models/visit.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The family profile has no mobile number. Please add a valid phone number "
|
||||
"before sending OTP."
|
||||
msgstr "ملف العائلة لا يحتوي على رقم جوال. يرجى إضافة رقم صالح قبل إرسال رمز التحقق."
|
||||
|
||||
#. module: odex_benefit
|
||||
#: code:addons/odex_benefit/models/visit.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The SMS template 'Visit Location OTP' is missing. Please contact your "
|
||||
"administrator."
|
||||
msgstr "قالب الرسائل القصيرة 'رمز التحقق لموقع الزيارة' غير موجود. يرجى التواصل مع المسؤول."
|
||||
|
||||
#. module: odex_benefit
|
||||
#: code:addons/odex_benefit/models/visit.py:0
|
||||
#, python-format
|
||||
msgid "Verify OTP"
|
||||
msgstr "تحقق من OTP"
|
||||
|
||||
#. module: odex_benefit
|
||||
#: model:ir.model,name:odex_benefit.model_visit_location_otp_wizard
|
||||
msgid "Visit Location OTP Verification Wizard"
|
||||
msgstr "معالج التحقق من OTP لمكان الزيارة"
|
||||
|
||||
#. module: odex_benefit
|
||||
#: model:ir.model.fields,field_description:odex_benefit.field_visit_location_otp_wizard__otp_code
|
||||
msgid "Enter OTP"
|
||||
msgstr "أدخل رمز التحقق OTP"
|
||||
|
||||
#. module: odex_benefit
|
||||
#: model:ir.model.fields,field_description:odex_benefit.field_visit_location_otp_wizard__visit_otp_code
|
||||
msgid "Visit OTP"
|
||||
msgstr "رمز التحقق للزيارة"
|
||||
|
||||
#. module: odex_benefit
|
||||
#: code:addons/odex_benefit/wizards/visit_location_otp_wizard.py:0
|
||||
#, python-format
|
||||
msgid "You must provide a reason for skipping OTP verification."
|
||||
msgstr "يجب عليك إدخال سبب لتخطي التحقق باستخدام رمز OTP."
|
||||
|
||||
#. module: odex_benefit
|
||||
#: model:ir.model.fields,field_description:odex_benefit.field_visit_skip_otp_wizard__reason
|
||||
msgid "Reason for Skipping OTP"
|
||||
msgstr "سبب تخطي التحقق برمز OTP"
|
||||
|
||||
#. module: odex_benefit
|
||||
#: code:addons/odex_benefit/wizards/visit_location_otp_wizard.py:0
|
||||
#, python-format
|
||||
msgid "OTP verification skipped by %s.<br/>Reason: %s"
|
||||
msgstr "تم تخطي التحقق برمز OTP بواسطة %s.<br/>السبب: %s"
|
||||
|
||||
#. module: odex_benefit
|
||||
#: code:addons/odex_benefit/wizards/visit_location_otp_wizard.py:0
|
||||
#, python-format
|
||||
msgid "Invalid OTP. Please try again."
|
||||
msgstr "رمز التحقق OTP غير صالح. يرجى المحاولة مرة أخرى."
|
||||
|
||||
#. module: odex_benefit
|
||||
#: model:ir.model,name:odex_benefit.model_visit_skip_otp_wizard
|
||||
msgid "Skip OTP Reason Wizard"
|
||||
msgstr "معالج سبب تخطي رمز OTP"
|
||||
|
|
@ -103,10 +103,7 @@ class Visit(models.Model):
|
|||
for rec in self:
|
||||
rec.state = 'cancel'
|
||||
def action_done(self):
|
||||
self.benefit_id.last_visit_date = self.visit_date
|
||||
if self.visit_types.otp_verification:
|
||||
# self.otp_code = self.generateOTP()
|
||||
# self.otp_generated_at = fields.Datetime.now()
|
||||
otp_validity = self.visit_types.otp_validity_minutes or 5
|
||||
expired = (
|
||||
not self.otp_code
|
||||
|
|
@ -118,37 +115,38 @@ class Visit(models.Model):
|
|||
self.otp_code = self.generateOTP()
|
||||
self.otp_generated_at = fields.Datetime.now()
|
||||
|
||||
if self.benefit_id.contact_type == 'email':
|
||||
if not self.benefit_id.email:
|
||||
raise UserError(_("The family profile has no email address. OTP cannot be sent. Please add an email first."))
|
||||
template = self.env.ref('odex_benefit.visit_location_otp_email_template', False)
|
||||
if not template:
|
||||
raise UserError(
|
||||
_("The email template 'Visit Location OTP Email' is missing. Please contact your administrator."))
|
||||
self.state = 'done'
|
||||
template.write({'email_to': self.benefit_id.email,
|
||||
'email_cc': self.env.user.company_id.hr_email or self.env.user.company_id.email,})
|
||||
template.with_context(lang=self.env.user.lang,mail_post_autofollow=False,mail_notify_force_send= False,).send_mail(self.id, force_send=True,
|
||||
raise_exception=False)
|
||||
elif self.benefit_id.contact_type == 'sms':
|
||||
# if not self.benefit_id.sms_phone:
|
||||
# raise UserError(_("The family profile has no mobile number. Please add a valid phone number before sending OTP."))
|
||||
# bot = self.env.ref('base.partner_root').id
|
||||
# sms_template_id = self.env.ref('odex_benefit.visit_location_otp_sms_template')
|
||||
# if not sms_template_id:
|
||||
# raise UserError(_("The SMS template 'Visit Location OTP' is missing. Please contact your administrator."))
|
||||
# self._message_sms_with_template(
|
||||
# template=sms_template_id,
|
||||
# put_in_queue=False,
|
||||
# partner_ids=self.partner_id.ids,
|
||||
# author_id=bot
|
||||
# )
|
||||
if self.benefit_id.contact_type == 'email':
|
||||
if not self.benefit_id.email:
|
||||
raise UserError(_("The family profile has no email address. OTP cannot be sent. Please add an email first."))
|
||||
template = self.env.ref('odex_benefit.visit_location_otp_email_template', False)
|
||||
if not template:
|
||||
raise UserError(
|
||||
_("The email template 'Visit Location OTP Email' is missing. Please contact your administrator."))
|
||||
template.write({'email_to': self.benefit_id.email,
|
||||
'email_cc': self.env.user.company_id.hr_email or self.env.user.company_id.email,})
|
||||
email_values = {"email_from": self.env.user.company_id.hr_email or self.env.user.company_id.email}
|
||||
template.with_context(lang=self.env.user.lang,mail_notrack=True,mail_create_nolog=True,mail_notify_force_send= False,).send_mail(self.id, force_send=True,
|
||||
raise_exception=False,email_values=email_values)
|
||||
elif self.benefit_id.contact_type == 'sms':
|
||||
if not self.benefit_id.sms_phone:
|
||||
raise UserError(_("The family profile has no mobile number. Please add a valid phone number before sending OTP."))
|
||||
bot = self.env.ref('base.partner_root').id
|
||||
sms_template_id = self.env.ref('odex_benefit.visit_location_otp_sms_template')
|
||||
if not sms_template_id:
|
||||
raise UserError(_("The SMS template 'Visit Location OTP' is missing. Please contact your administrator."))
|
||||
self.with_context(mail_create_nolog=True,mail_notrack=True)._message_sms_with_template(
|
||||
template=sms_template_id,
|
||||
put_in_queue=False,
|
||||
partner_ids=self.benefit_id.partner_id.ids,
|
||||
author_id=bot
|
||||
)
|
||||
|
||||
message = _("Your verification code is %s. It is valid for %s minutes.") % (
|
||||
self.otp_code,
|
||||
self.visit_types.otp_validity_minutes or 5
|
||||
)
|
||||
self.benefit_id.user_id.send_sms_to_user(message, self.benefit_id.sms_phone)
|
||||
# don't delete this code
|
||||
# message = _("Your verification code is %s. It is valid for %s minutes.") % (
|
||||
# self.otp_code,
|
||||
# self.visit_types.otp_validity_minutes or 5
|
||||
# )
|
||||
# self.benefit_id.user_id.send_sms_to_user(message, self.benefit_id.sms_phone)
|
||||
|
||||
context = dict(self.env.context or {})
|
||||
context['active_id'] = self.id
|
||||
|
|
@ -164,7 +162,22 @@ class Visit(models.Model):
|
|||
}
|
||||
else:
|
||||
self.state = 'done'
|
||||
self.benefit_id.last_visit_date = self.visit_date
|
||||
|
||||
def action_skip_otp(self):
|
||||
self.ensure_one()
|
||||
context = dict(self.env.context or {})
|
||||
context['active_id'] = self.id
|
||||
return {
|
||||
'name': _('Skip OTP Verification'),
|
||||
'type': 'ir.actions.act_window',
|
||||
'res_model': 'visit.skip.otp.wizard',
|
||||
'view_mode': 'form',
|
||||
'view_type': 'form',
|
||||
'view_id': self.env.ref('odex_benefit.view_visit_skip_otp_wizard_form').id,
|
||||
'target': 'new',
|
||||
'context': context,
|
||||
}
|
||||
|
||||
def action_close(self):
|
||||
survey_url = ''
|
||||
|
|
|
|||
|
|
@ -154,3 +154,4 @@ access_res_city,access_res_city,model_res_city,base.group_user,1,0,0,0
|
|||
access_res_city,access_res_city,model_res_city,odex_benefit.group_benefit_manager,1,1,1,1
|
||||
access_grant_benefit_portal_user,access_grant_benefit_portal_user,model_grant_benefit,base.group_portal,1,1,1,1
|
||||
access_visit_location_otp_wizard,access_visit_location_otp_wizard,model_visit_location_otp_wizard,,1,1,1,1
|
||||
access_visit_skip_otp_wizard,access_visit_skip_otp_wizard,model_visit_skip_otp_wizard,,1,1,1,1
|
||||
|
|
|
@ -107,6 +107,12 @@
|
|||
<field name="category_id" ref="module_category_benefit"/>
|
||||
</record>
|
||||
|
||||
<record id="group_otp_manager" model="res.groups">
|
||||
<field name="name">OTP Manager</field>
|
||||
<field name="category_id" ref="module_category_benefit"/>
|
||||
<field name="users" eval="[(4, ref('base.user_root'))]"/>
|
||||
</record>
|
||||
|
||||
<!-- <!– Add rules for grant.benefit –>-->
|
||||
<!-- <record id="grant_benefit_show_all_rule" model="ir.rule">-->
|
||||
<!-- <field name="name">Show All Benefits Profiles</field>-->
|
||||
|
|
|
|||
|
|
@ -17,12 +17,17 @@
|
|||
<div t-attf-class="{{!selection_mode ? 'oe_kanban_color_' + kanban_getcolor(record.color.raw_value) : ''}} oe_kanban_global_click">
|
||||
<div class="o_dropdown_kanban dropdown">
|
||||
|
||||
<a class="dropdown-toggle o-no-caret btn" role="button" data-toggle="dropdown" data-display="static" href="#" aria-label="Dropdown menu" title="Dropdown menu">
|
||||
<a class="dropdown-toggle o-no-caret btn" role="button" data-toggle="dropdown"
|
||||
data-display="static" href="#" aria-label="Dropdown menu" title="Dropdown menu">
|
||||
<span class="fa fa-ellipsis-v"/>
|
||||
</a>
|
||||
<div class="dropdown-menu" role="menu">
|
||||
<t t-if="widget.editable"><a role="menuitem" type="edit" class="dropdown-item">Edit</a></t>
|
||||
<t t-if="widget.deletable"><a role="menuitem" type="delete" class="dropdown-item">Delete</a></t>
|
||||
<t t-if="widget.editable">
|
||||
<a role="menuitem" type="edit" class="dropdown-item">Edit</a>
|
||||
</t>
|
||||
<t t-if="widget.deletable">
|
||||
<a role="menuitem" type="delete" class="dropdown-item">Delete</a>
|
||||
</t>
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -82,6 +87,10 @@
|
|||
class="oe_highlight" states="contact"/>
|
||||
<button name="action_done" string="Done" type="object" class="oe_highlight"
|
||||
states="schedule_a_visit"/>
|
||||
<button name="action_skip_otp"
|
||||
string="Skip OTP Verification" states="schedule_a_visit"
|
||||
type="object" class="btn btn-danger"
|
||||
groups="odex_benefit.group_otp_manager"/>
|
||||
<button name="action_cancel" string="Visit Cancel" type="object"
|
||||
states="contact,schedule_a_visit"/>
|
||||
<button name="action_close" string="Close" type="object" states="done"/>
|
||||
|
|
|
|||
|
|
@ -18,7 +18,30 @@ class VisitLocationOtpWizard(models.TransientModel):
|
|||
"""Check OTP entered by user"""
|
||||
self.ensure_one()
|
||||
if self.otp_code != self.visit_id.otp_code:
|
||||
raise UserError("Invalid OTP. Please try again.")
|
||||
# OTP is correct → set visit as done
|
||||
raise UserError(_("Invalid OTP. Please try again."))
|
||||
|
||||
self.visit_id.write({'state': 'done',})
|
||||
self.visit_id.write({'state': 'done',})
|
||||
self.visit_id.benefit_id.last_visit_date = self.visit_id.visit_date
|
||||
|
||||
class VisitSkipOtpWizard(models.TransientModel):
|
||||
_name = 'visit.skip.otp.wizard'
|
||||
_description = 'Skip OTP Reason Wizard'
|
||||
|
||||
def _default_visit(self):
|
||||
return self._context.get('active_id')
|
||||
|
||||
visit_id = fields.Many2one('visit.location', string="Visit", default=_default_visit)
|
||||
reason = fields.Text(string="Reason for Skipping OTP", required=True)
|
||||
|
||||
def action_confirm_skip(self):
|
||||
self.ensure_one()
|
||||
visit = self.visit_id
|
||||
if not self.reason:
|
||||
raise UserError(_("You must provide a reason for skipping OTP verification."))
|
||||
visit.benefit_id.last_visit_date = visit.visit_date
|
||||
visit.write({'state': 'done'})
|
||||
visit.message_post(
|
||||
body=_("OTP verification skipped by %s.<br/>Reason: %s") % (self.env.user.name, self.reason),
|
||||
message_type='notification'
|
||||
)
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
|
|
@ -8,9 +8,9 @@
|
|||
<form string="OTP Verification">
|
||||
<sheet>
|
||||
<group>
|
||||
<field name="visit_otp_code" invisible="1"/>
|
||||
<field name="visit_otp_code" groups="odex_benefit.group_otp_manager"/>
|
||||
<field name="otp_code"/>
|
||||
<field name="visit_id" invisible="1"/>
|
||||
<field name="visit_id" invisible="1"/>
|
||||
</group>
|
||||
<footer>
|
||||
<button string="Confirm" type="object" name="action_confirm_otp" class="btn-primary"/>
|
||||
|
|
@ -21,5 +21,23 @@
|
|||
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_visit_skip_otp_wizard_form" model="ir.ui.view">
|
||||
<field name="name">visit.skip.otp.wizard.form</field>
|
||||
<field name="model">visit.skip.otp.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Skip OTP Verification">
|
||||
<sheet>
|
||||
<group>
|
||||
<field name="visit_id" invisible="1"/>
|
||||
<field name="reason"/>
|
||||
</group>
|
||||
</sheet>
|
||||
<footer>
|
||||
<button name="action_confirm_skip" string="Confirm" type="object" class="btn-primary"/>
|
||||
<button string="Cancel" class="btn-secondary" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
Loading…
Reference in New Issue