This commit is contained in:
younes 2025-08-19 15:11:16 +01:00
parent fa8765515a
commit 97f033f09e
5 changed files with 167 additions and 18 deletions

View File

@ -8,7 +8,7 @@
'license': 'GPL-3',
'author': 'Expert Ltd',
'depends': ['base', 'takaful_core', 'website', 'account', 'report_xlsx', 'sale', 'product', 'stock', 'hr',
'purchase','web_google_maps','odex25_account_payment_fix'],
'purchase','web_google_maps','odex25_account_payment_fix','otp_sms_auth_custom'],
'data': [
'security/security_view.xml',
'security/ir.model.access.csv',

View File

@ -107,30 +107,141 @@
<field name="category_id" ref="module_category_benefit"/>
</record>
<!-- &lt;!&ndash; Add rules for grant.benefit &ndash;&gt;-->
<!-- <record id="grant_benefit_show_all_rule" model="ir.rule">-->
<!-- <field name="name">Show All Benefits Profiles</field>-->
<!-- <field name="model_id" ref="model_grant_benefit"/>-->
<!-- <field name="domain_force">[(1, '=', 1)]</field>-->
<!-- <field name="groups" eval="[(4, ref('group_benefit_manager'))]"/>-->
<!-- <field name="active" eval="True" />-->
<!-- </record>-->
<!-- <record id="grant_benefit_rule_branch_manager" model="ir.rule">-->
<!-- <field name="name">Show Benefits Profiles of Own Branch</field>-->
<!-- <field name="model_id" ref="model_grant_benefit"/>-->
<!-- <field name="domain_force">[('branch_custom_id.branch.manager_id', '=', user.employee_id.id)]</field>-->
<!-- <field name="groups" eval="[(4, ref('group_benefit_branch_manager'))]"/>-->
<!-- <field name="active" eval="True" />-->
<!-- </record>-->
<!-- <record id="grant_benefit_rule_operation_manager" model="ir.rule">-->
<!-- <field name="name">Show Benefits Profiles of Assigned Branch (Operation Manager)</field>-->
<!-- <field name="model_id" ref="model_grant_benefit"/>-->
<!-- <field name="domain_force">['|',('branch_custom_id.branch.operation_manager_id', '=', user.employee_id.id),('state', '=','new')]</field>-->
<!-- <field name="groups" eval="[(4, ref('group_benefit_woman_commitee'))]"/>-->
<!-- <field name="active" eval="True" />-->
<!-- </record>-->
<!-- <record id="grant_benefit_rule_researcher" model="ir.rule">-->
<!-- <field name="name">Show Benefits Profiles Created or Assigned (Researcher)</field>-->
<!-- <field name="model_id" ref="model_grant_benefit"/>-->
<!-- <field name="domain_force">[-->
<!-- '|',-->
<!-- ('create_uid','=',user.id),-->
<!-- ('researcher_id.employee_id', 'in', user.employee_id.ids)-->
<!-- ]</field>-->
<!-- <field name="groups" eval="[(4, ref('group_benefit_researcher'))]"/>-->
<!-- <field name="active" eval="True" />-->
<!-- </record>-->
<!-- &lt;!&ndash; Add rules for visit.location &ndash;&gt;-->
<!-- <record id="visit_location_show_all_rule" model="ir.rule">-->
<!-- <field name="name">Show All Visit Location</field>-->
<!-- <field name="model_id" ref="model_visit_location"/>-->
<!-- <field name="domain_force">[(1, '=', 1)]</field>-->
<!-- <field name="groups" eval="[(4, ref('group_benefit_manager'))]"/>-->
<!-- <field name="active" eval="True" />-->
<!-- </record>-->
<!-- <record id="visit_location_rule_branch_manager" model="ir.rule">-->
<!-- <field name="name">Show Visit Location of Own Branch</field>-->
<!-- <field name="model_id" ref="model_visit_location"/>-->
<!-- <field name="domain_force">[('benefit_id.branch_custom_id.branch.manager_id', '=', user.employee_id.id)]</field>-->
<!-- <field name="groups" eval="[(4, ref('group_benefit_branch_manager'))]"/>-->
<!-- <field name="active" eval="True" />-->
<!-- </record>-->
<!-- <record id="visit_location_rule_operation_manager" model="ir.rule">-->
<!-- <field name="name">Show Visit Location of Assigned Branch (Operation Manager)</field>-->
<!-- <field name="model_id" ref="model_visit_location"/>-->
<!-- <field name="domain_force">[('benefit_id.branch_custom_id.branch.operation_manager_id', '=', user.employee_id.id)]</field>-->
<!-- <field name="groups" eval="[(4, ref('group_benefit_woman_commitee'))]"/>-->
<!-- <field name="active" eval="True" />-->
<!-- </record>-->
<!-- <record id="visit_location_rule_researcher" model="ir.rule">-->
<!-- <field name="name">Show Visit Location Created or Assigned (Researcher)</field>-->
<!-- <field name="model_id" ref="model_visit_location"/>-->
<!-- <field name="domain_force">[-->
<!-- '|',-->
<!-- ('create_uid','=',user.id),-->
<!-- ('researcher_team.employee_id', 'in', user.employee_id.ids)-->
<!-- ]</field>-->
<!-- <field name="groups" eval="[(4, ref('group_benefit_researcher'))]"/>-->
<!-- <field name="active" eval="True" />-->
<!-- </record>-->
<!-- &lt;!&ndash; Add rules for family.complaints &ndash;&gt;-->
<!-- <record id="family_complaints_show_all_rule" model="ir.rule">-->
<!-- <field name="name">Show All Family Complaints</field>-->
<!-- <field name="model_id" ref="model_family_complaints"/>-->
<!-- <field name="domain_force">[(1, '=', 1)]</field>-->
<!-- <field name="groups" eval="[(4, ref('group_benefit_manager'))]"/>-->
<!-- <field name="active" eval="True" />-->
<!-- </record>-->
<!-- <record id="family_complaints_rule_branch_manager" model="ir.rule">-->
<!-- <field name="name">Show Family Complaints of Own Branch</field>-->
<!-- <field name="model_id" ref="model_family_complaints"/>-->
<!-- <field name="domain_force">[('branch_custom_id.branch.manager_id', '=', user.employee_id.id)]</field>-->
<!-- <field name="groups" eval="[(4, ref('group_benefit_branch_manager'))]"/>-->
<!-- <field name="active" eval="True" />-->
<!-- </record>-->
<!-- <record id="family_complaints_rule_operation_manager" model="ir.rule">-->
<!-- <field name="name">Show Family Complaints of Assigned Branch (Operation Manager)</field>-->
<!-- <field name="model_id" ref="model_family_complaints"/>-->
<!-- <field name="domain_force">[('branch_custom_id.branch.operation_manager_id', '=', user.employee_id.id)]</field>-->
<!-- <field name="groups" eval="[(4, ref('group_benefit_woman_commitee'))]"/>-->
<!-- <field name="active" eval="True" />-->
<!-- </record>-->
<!-- <record id="family_complaints_rule_researcher" model="ir.rule">-->
<!-- <field name="name">Show Family Complaints Created or Assigned (Researcher)</field>-->
<!-- <field name="model_id" ref="model_family_complaints"/>-->
<!-- <field name="domain_force">[-->
<!-- '|',-->
<!-- ('create_uid','=',user.id),-->
<!-- ('researcher_id.employee_id', 'in', user.employee_id.ids)-->
<!-- ]</field>-->
<!-- <field name="groups" eval="[(4, ref('group_benefit_researcher'))]"/>-->
<!-- <field name="active" eval="True" />-->
<!-- </record>-->
<!-- Add rules for service.request -->
<record id="service_request_restrict_all_requests_by_rule" model="ir.rule">
<field name="name">Show All Service Requests</field>
<field name="model_id" ref="model_service_request"/>
<field name="global" eval="True" />
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('group_benefit_requests_manager'))]"/>
<field name="active" eval="True" />
</record>
<record id="service_request_restrict_only_created_by_rule" model="ir.rule">
<field name="name">Show Service Requests That Own</field>
<field name="model_id" ref="model_service_request"/>
<field name="global" eval="True" />
<field name="domain_force">[
'|',
('create_uid','=',user.id),
('family_id.researcher_id.employee_id', '=', user.employee_id.id)
('researcher_id.employee_id', 'in', user.employee_id.ids)
]</field>
<field name="groups" eval="[(4, ref('group_benefit_researcher'))]"/>
<field name="active" eval="True" />
</record>
<record id="service_request_restrict_only_his_branch_rule" model="ir.rule">
<field name="name">Show Service Requests That Own</field>
<field name="model_id" ref="model_service_request"/>
<field name="global" eval="True" />
<field name="domain_force">[
'|',
('family_id.branch_custom_id.branch.manager_id', '=', user.employee_id.id),
@ -139,17 +250,22 @@
<field name="groups" eval="[(4, ref('group_benefit_branch_manager')), (4, ref('group_benefit_woman_commitee'))]"/>
<field name="active" eval="True" />
</record>
<!-- <record id="rule_hide_draft_records" model="ir.rule">-->
<!-- <field name="name">Hide Draft Records for Non-Members</field>-->
<!-- <field name="model_id" ref="odex_benefit.model_grant_benefit"/>-->
<!-- <field name="domain_force">[('state', '!=', 'draft')]</field>-->
<!--</record>-->
<!--<record id="rule_show_draft_records" model="ir.rule">-->
<!-- <field name="name">Show Draft Records for Group Members</field>-->
<!-- <field name="model_id" ref="odex_benefit.model_grant_benefit"/>-->
<!-- <field name="groups" eval="[(4, ref('odex_benefit.group_show_draft_records'))]"/>-->
<!-- <field name="domain_force">[(1, '=', 1)]</field>-->
<!--</record>-->
<!-- &lt;!&ndash; Add rules for grant benefit draft state&ndash;&gt;-->
<!-- <record id="grant_benefit_no_draft_rule" model="ir.rule">-->
<!-- <field name="name">Hide Draft Benefits</field>-->
<!-- <field name="model_id" ref="model_grant_benefit"/>-->
<!-- <field name="domain_force">[('state', '!=', 'draft')]</field>-->
<!-- <field name="global" eval="True"/>-->
<!-- <field name="active" eval="True"/>-->
<!-- </record>-->
<!-- <record id="grant_benefit_show_draft_rule" model="ir.rule">-->
<!-- <field name="name">Show Draft Benefits (Special Group)</field>-->
<!-- <field name="model_id" ref="model_grant_benefit"/>-->
<!-- <field name="domain_force">[(1, '=', 1)]</field>-->
<!-- <field name="groups" eval="[(4, ref('odex_benefit.group_benefit_show_draft_record')),(4, ref('base.public_user')),(4, ref('base.group_portal'))]"/>-->
<!-- <field name="active" eval="True"/>-->
<!-- </record>-->
</data>
</odoo>

View File

@ -196,7 +196,6 @@
/>
<button name="action_set_to_draft" type="object"
string="Set to Draft" class="oe_highlight"
confirm="Are you sure you want to set the state to Draft?"
groups="odex_benefit.group_benefit_back_to_draft"
attrs="{'invisible':[('state','in',['draft','first_approve','second_approve'])]}"/>
<!-- <button name="action_finish_edit" type="object"-->

View File

@ -176,6 +176,6 @@ class EntityReturnReasonWizard(models.TransientModel):
rec.entity_id.sudo().write({"state": target_state})
if rec.entity_id.state == 'draft':
message = rec.entity_id.create_message(target_state)
rec.entity_id.partner_id.send_sms_notification(message, rec.entity_id.phone)
rec.entity_id.user_id.send_sms_to_user(message, rec.entity_id.phone)
return {'type': 'ir.actions.act_window_close'}

View File

@ -15,6 +15,40 @@ class ResUsersInherit(models.Model):
otp_mobile_phone = fields.Char(string="Mobile Phone")
otp_code = fields.Char(string="OTP Code", readonly=True)
def send_sms_to_user(self, body=None, phone=None):
company = self.env.company
# Check the SMS mode
if company.sms_mode == 'test':
_logger.info(f"--- SMS TEST MODE --- for user {self.name} is {body}. SMS not sent.")
return
# --- Production Mode Logic ---
# Validate that all configuration fields are set
if not all([company.sms_api_url, company.sms_api_token, company.sms_sender_name]):
raise ValidationError(
"SMS API settings (URL, Token, Sender Name) are not fully configured in General Settings.")
# SMS payload
payload = {
"recipients": [self.phone],
"body": body,
"sender": company.sms_sender_name,
}
# Headers for authentication
headers = {
"Authorization": f"Bearer {company.sms_api_token}",
"Content-Type": "application/json",
}
# Send the SMS
try:
response = requests.post(company.sms_api_url, json=payload, headers=headers, timeout=10)
response.raise_for_status() # Raise an error for non-2xx responses
_logger.info(f"{body} sent successfully to {phone}")
except requests.exceptions.RequestException as e:
_logger.error(f"Failed to send sms to {phone}: {e}")
raise ValidationError("Failed to send sms. Please check API configuration or try again later.")
def generate_otp(self):
"""