diff --git a/odex25_benefit/takaful_core/TaqnyatSms.py b/odex25_benefit/takaful_core/TaqnyatSms.py
new file mode 100644
index 000000000..ac25f9224
--- /dev/null
+++ b/odex25_benefit/takaful_core/TaqnyatSms.py
@@ -0,0 +1,161 @@
+import http
+import json
+import re
+
+class client:
+ auth = ''
+ base = 'api.taqnyat.sa'
+ result=''
+ method=''
+ json ={}
+ error =''
+
+ def __init__(self, auth):
+ self.auth = auth
+ def checkUserInfo(self):
+ if self.auth:
+ self.json.update({'auth' : self.auth})
+ else:
+ self.error = 'Add Authentication'
+ return self.error
+ def sendMsg(self,body, recipients, sender , scheduled ):
+ self.checkUserInfo()
+ #getSendMethod
+
+ if not self.error:
+ data = {
+ 'recipients': recipients,
+ 'sender': sender,
+ 'body': body,
+ 'scheduled': scheduled,
+ }
+ self.json.update(data)
+ self.json = json.dumps(self.json)
+
+ conn = http.client.HTTPSConnection(self.base)
+ headers = {
+ 'Authorization': 'Bearer ' + self.auth,
+ 'Content-Type': 'application/json'
+ }
+
+
+ conn.request("POST", "/v1/messages", self.json, headers)
+ res = conn.getresponse()
+ data = res.read()
+ return data.decode("utf-8")
+
+ else:
+ return self.error
+ def sendStatus(self ):
+ self.checkUserInfo()
+ #getSendMethod
+
+ if not self.error:
+ data = {
+ }
+ self.json.update(data)
+ self.json = json.dumps(self.json)
+
+ conn = http.client.HTTPSConnection(self.base)
+ headers = {
+ 'Authorization': 'Bearer ' + self.auth,
+ 'Content-Type': 'application/json'
+ }
+
+
+ conn.request("GET", "/system/status", self.json, headers)
+ res = conn.getresponse()
+ data = res.read()
+ return data.decode("utf-8")
+
+ else:
+ return self.error
+ def balance(self ):
+ self.checkUserInfo()
+ #getSendMethod
+
+ if not self.error:
+ data = {
+ }
+ self.json.update(data)
+ self.json = json.dumps(self.json)
+
+ conn = http.client.HTTPSConnection(self.base)
+ headers = {
+ 'Authorization': 'Bearer ' + self.auth,
+ 'Content-Type': 'application/json'
+ }
+
+
+ conn.request("GET", "/account/balance", self.json, headers)
+ res = conn.getresponse()
+ data = res.read()
+ return data.decode("utf-8")
+
+ else:
+ return self.error
+ def senders(self ):
+ self.checkUserInfo()
+ #getSendMethod
+
+ if not self.error:
+ data = {
+ }
+ self.json.update(data)
+ self.json = json.dumps(self.json)
+
+ conn = http.client.HTTPSConnection(self.base)
+ headers = {
+ 'Authorization': 'Bearer ' + self.auth,
+ 'Content-Type': 'application/json'
+ }
+
+
+ conn.request("GET", "/v1/messages/senders", self.json, headers)
+ res = conn.getresponse()
+ data = res.read()
+ return data.decode("utf-8")
+
+ else:
+ return self.error
+ def deleteMsg(self , deleteKey ):
+ self.checkUserInfo()
+ #getSendMethod
+
+ if not self.error:
+ data = {
+ }
+ self.json.update(data)
+ self.json = json.dumps(self.json)
+
+ conn = http.client.HTTPSConnection(self.base)
+ headers = {
+ 'Authorization': 'Bearer ' + self.auth,
+ 'Content-Type': 'application/json'
+ }
+
+
+ conn.request("DELETE", "/v1/messages", self.json, headers)
+ res = conn.getresponse()
+ data = res.read()
+ return data.decode("utf-8")
+
+ else:
+ return self.error
+
+
+def make_http_response(message):
+ try:
+ response = re.sub('(message)\s', '', message)
+ response = json.loads(response)
+ except Exception as e:
+ return {}
+
+ dict_response = {
+ "statusCode": response.get('statusCode', False),
+ "message": response.get('message', ''),
+ "totalCount": response.get('totalCount', 0),
+ "accepted": response.get('accepted', []),
+ "rejected": response.get('rejected', []),
+ }
+ return dict_response
\ No newline at end of file
diff --git a/odex25_benefit/takaful_core/__init__.py b/odex25_benefit/takaful_core/__init__.py
new file mode 100644
index 000000000..9a7e03ede
--- /dev/null
+++ b/odex25_benefit/takaful_core/__init__.py
@@ -0,0 +1 @@
+from . import models
\ No newline at end of file
diff --git a/odex25_benefit/takaful_core/__manifest__.py b/odex25_benefit/takaful_core/__manifest__.py
new file mode 100644
index 000000000..43abb402f
--- /dev/null
+++ b/odex25_benefit/takaful_core/__manifest__.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+
+{
+ 'name': 'Odex Takaful Core Management',
+ 'version': '1',
+ 'license': 'GPL-3',
+ 'category': 'Odex25-Takaful/Odex25-Takaful',
+ 'summary': 'Takaful Management',
+ 'description': """
+ Takaful Mangement
+ """,
+ 'author': 'Expert co.Ltd',
+ 'website': 'exp-sa.com',
+ 'depends': ['mail', 'base', 'account'],
+ 'data': [
+ # 'security/ir.model.access.csv',
+ 'data/server_action.xml',
+ 'views/res_city_view.xml',
+ 'views/config_view.xml',
+ 'views/bank_transfer_payment_view.xml',
+ 'views/takaful_account_move_view.xml',
+ 'views/res_partner_title_views.xml',
+ 'views/menus_and_actions.xml',
+ ],
+ # 'installable': True,
+ # 'application': True,
+}
\ No newline at end of file
diff --git a/odex25_benefit/takaful_core/data/server_action.xml b/odex25_benefit/takaful_core/data/server_action.xml
new file mode 100644
index 000000000..85b264a1a
--- /dev/null
+++ b/odex25_benefit/takaful_core/data/server_action.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+ Migrate Account Type to Booleans
+
+ code
+
+env['res.partner'].migrate_account_type_to_booleans()
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_benefit/takaful_core/i18n/ar_001.po b/odex25_benefit/takaful_core/i18n/ar_001.po
new file mode 100644
index 000000000..7d4c4b022
--- /dev/null
+++ b/odex25_benefit/takaful_core/i18n/ar_001.po
@@ -0,0 +1,1043 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * takaful_core
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-10-17 00:25+0000\n"
+"PO-Revision-Date: 2024-10-17 00:25+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: takaful_core
+#: model_terms:ir.ui.view,arch_db:takaful_core.view_takaful_bank_payment_transfer_form
+msgid "Accept"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__takaful_bank_transfer_payment__state__accept
+msgid "Accepted"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__account_type
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__account_type
+#: model_terms:ir.ui.view,arch_db:takaful_core.res_partner_data
+msgid "Account Type"
+msgstr "نوع الحساب"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__activation_mode
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__activation_mode
+msgid "Activation Mode"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__age
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__age
+msgid "Age"
+msgstr "العمر"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment__amount
+msgid "Amount"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move__amount
+msgid "Amount With Vat"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move__amount_without_vat
+msgid "Amount Without Vat"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment__transfer_attachment
+msgid "Attachment"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_country_city__attachment_ids
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move__attachment_ids
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment__attachment_ids
+msgid "Attachments"
+msgstr "المرفقات"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__bank_id
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__bank_id
+msgid "Bank"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model,name:takaful_core.model_res_partner_bank
+#: model:ir.model.fields,field_description:takaful_core.field_res_company__bank_account_count
+msgid "Bank Accounts"
+msgstr "الحسابات البنكية"
+
+#. module: takaful_core
+#: model_terms:ir.ui.view,arch_db:takaful_core.bank_account_image_add_view
+msgid "Bank Image"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_account_setup_bank_manual_config__bank_img
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner_bank__bank_img
+msgid "Bank Img"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/takaful_account_move.py:0
+#: model:ir.model.fields.selection,name:takaful_core.selection__takaful_account_move__type__transfer
+#: model_terms:ir.ui.view,arch_db:takaful_core.view_takaful_bank_payment_transfer_form
+#: model_terms:ir.ui.view,arch_db:takaful_core.view_takaful_bank_payment_transfer_tree
+#, python-format
+msgid "Bank Transfer"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/bank_transfer_payment.py:0
+#: code:addons/takaful_core/models/bank_transfer_payment.py:0
+#: code:addons/takaful_core/models/bank_transfer_payment.py:0
+#: code:addons/takaful_core/models/bank_transfer_payment.py:0
+#, python-format
+msgid "Bank Transfer State %s"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner__account_type__benefit
+msgid "Benefit"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model,name:takaful_core.model_res_country_city
+msgid "Benefits - City"
+msgstr "المدينة"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__birth_date
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__birth_date
+msgid "Birth Date"
+msgstr "تاريخ الميلاد"
+
+#. module: takaful_core
+#: model_terms:ir.ui.view,arch_db:takaful_core.view_takaful_bank_payment_transfer_form
+msgid "Cancel"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__takaful_bank_transfer_payment__state__cancel
+msgid "Canceled"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:0
+#, python-format
+msgid "Cannot sending SMS verification %s "
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:0
+#, python-format
+msgid "Cannot sending email verification"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_partner.py:0
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner__company_type__charity
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner__user_type__charity
+#, python-format
+msgid "Charity"
+msgstr ""
+
+#. module: takaful_core
+#: model_terms:ir.ui.view,arch_db:takaful_core.view_res_city_tree
+msgid "Cities"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__city_id
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__city_id
+#: model_terms:ir.ui.view,arch_db:takaful_core.view_res_city_form
+msgid "City"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_country_city__code
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__code
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__code
+msgid "Code"
+msgstr "الكود"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move__note
+msgid "Comment"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner__user_type__company
+msgid "Company"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_company__company_name
+msgid "Company Name"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__company_type
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__company_type
+msgid "Company Type"
+msgstr "نوع المؤسسة"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_country_city__country_id
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__country_id
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__country_id
+msgid "Country"
+msgstr "الدولة"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_country_city__create_uid
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move__create_uid
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment__create_uid
+msgid "Created by"
+msgstr "انشئ بواسطة"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_country_city__create_date
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move__create_date
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment__create_date
+msgid "Created on"
+msgstr "تاريخ الانشاء"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/takaful_account_move.py:0
+#: model:ir.model.fields.selection,name:takaful_core.selection__takaful_account_move__type__card
+#, python-format
+msgid "Credit Card"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move__partner_id
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment__partner_id
+msgid "Customer"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move__email
+msgid "Customer Email"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move__name_of
+msgid "Customer Name"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move__date
+msgid "Date"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/bank_transfer_payment.py:0
+#, python-format
+msgid ""
+"Dear %s,
Your bank transfer has been changed accepted. Please check "
+"your balance"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/bank_transfer_payment.py:0
+#, python-format
+msgid ""
+"Dear %s,
Your bank transfer has been changed to canceled. Please "
+"check with your bank"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/bank_transfer_payment.py:0
+#, python-format
+msgid "Dear %s,
Your bank transfer has been rejected."
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:0
+#, python-format
+msgid ""
+"Dear Customer,\n"
+" %s is your one time password (OTP). Please enter the OTP to proceed.\n"
+" Thank you,\n"
+" Team Takaful"
+msgstr ""
+
+#. module: takaful_core
+#: model_terms:ir.ui.view,arch_db:takaful_core.view_company_form_inherit_otp
+msgid "Default Vat Value"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_country_city__display_name
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move__display_name
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment__display_name
+msgid "Display Name"
+msgstr "الاسم"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_partner.py:0
+#, python-format
+msgid "Divorced"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__takaful_bank_transfer_payment__state__draft
+msgid "Draft"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__education_institution
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__education_institution
+msgid "Education Institution"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__education_level
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__education_level
+msgid "Educational level"
+msgstr "المرحلة التعليمية"
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner__activation_mode__email
+msgid "Email"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:0
+#, python-format
+msgid "Email verification is successfully sent"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_partner.py:0
+#, python-format
+msgid "Enter a valid Saudi mobile number"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:0
+#, python-format
+msgid "Exceeded the limit, please request after the clock %s"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/takaful_account_move.py:0
+#: model:ir.model.fields.selection,name:takaful_core.selection__takaful_account_move__state__failed
+#, python-format
+msgid "Failed"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner__account_type__family
+msgid "Family"
+msgstr "الأسرة"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__family_name
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__family_name
+msgid "Family Name"
+msgstr "اسم العائلة\n"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__father_family_name
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__father_family_name
+msgid "Father Family Name"
+msgstr "اسم عائلة الأب"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__father_name
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__father_name
+msgid "Father First Name"
+msgstr "الاسم الأول"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__father_second_name
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__father_second_name
+msgid "Father Second Name"
+msgstr "الاسم الثاني"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__father_third_name
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__father_third_name
+msgid "Father Third Name"
+msgstr "الاسم الثالث"
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner__gender__female
+msgid "Female"
+msgstr "أنثى"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment__filename
+msgid "Filename"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__account_move__operation_type__financial_donation
+#: model:ir.model.fields.selection,name:takaful_core.selection__takaful_account_move__operation_type__financial_donation
+msgid "Financial Donation"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__account_move__operation_type__financial_gift
+#: model:ir.model.fields.selection,name:takaful_core.selection__takaful_account_move__operation_type__financial_gift
+msgid "Financial Gift"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__first_name
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__first_name
+msgid "First Name"
+msgstr "الاسم الاول"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__gender
+msgid "Gender"
+msgstr "الجنس"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__health_status
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__health_status
+msgid "Health Status"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner__health_status__healthy
+msgid "Healthy"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__iban
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__iban
+msgid "IBAN"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_country_city__id
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move__id
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment__id
+msgid "ID"
+msgstr "المُعرف"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__id_expiry
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__id_expiry
+msgid "Id Expiry Date"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__id_number_attach
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__id_number_attach
+msgid "Id Number Attachment"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__id_number
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__id_number
+msgid "Identity NO"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner__education_level__illiterate
+msgid "Illiterate"
+msgstr "محو الأمية"
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__account_move__operation_type__in_kind_donation
+#: model:ir.model.fields.selection,name:takaful_core.selection__takaful_account_move__operation_type__in_kind_donation
+msgid "In-Kind Donation"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/takaful_account_move.py:0
+#: model:ir.model.fields.selection,name:takaful_core.selection__takaful_account_move__state__initiated
+#, python-format
+msgid "Initiated"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:0
+#, python-format
+msgid "Invalid OTP, Reset Password Failed"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:0
+#, python-format
+msgid "Invalid OTP, Verification Failed"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:0
+#, python-format
+msgid "Invalid Saudi mobile number"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment__move_id
+msgid "Invoice"
+msgstr ""
+
+#. module: takaful_core
+#: model_terms:ir.ui.view,arch_db:takaful_core.takaful_account_move_form
+msgid "Invoice Number"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.ui.menu,name:takaful_core.takaful_account_move_menu
+#: model_terms:ir.ui.view,arch_db:takaful_core.takaful_account_move_tree_viewx
+msgid "Invoices"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model,name:takaful_core.model_account_move
+msgid "Journal Entry"
+msgstr "قيد اليومية"
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner__education_level__kindergarten
+msgid "Kindergarten"
+msgstr "روضة أطفال"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_country_city____last_update
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move____last_update
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment____last_update
+msgid "Last Modified on"
+msgstr "آخر تعديل في"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_country_city__write_uid
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move__write_uid
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment__write_uid
+msgid "Last Updated by"
+msgstr "آخر تحديث بواسطة"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_country_city__write_date
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move__write_date
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment__write_date
+msgid "Last Updated on"
+msgstr "آخر تحديث في"
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner__gender__male
+msgid "Male"
+msgstr "ذكر"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_partner.py:0
+#, python-format
+msgid "Marital Status"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_partner.py:0
+#, python-format
+msgid "Married"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner__education_level__middle
+msgid "Middle"
+msgstr "المتوسطة"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:0
+#, python-format
+msgid "Missing Password Values or OTP"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:0
+#: code:addons/takaful_core/models/res_users.py:0
+#, python-format
+msgid "Missing mobile number"
+msgstr ""
+
+#. module: takaful_core
+#: model_terms:ir.ui.view,arch_db:takaful_core.view_company_form_inherit_otp
+msgid "Moyaser Integration"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_company__moyaser_public_key
+msgid "Moyaser Public Key"
+msgstr ""
+
+#. module: takaful_core
+#: model_terms:ir.ui.view,arch_db:takaful_core.view_company_form_inherit_otp
+msgid "Moyaser Publicy Key"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_country_city__name
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__name
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__name
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment__name
+msgid "Name"
+msgstr "الاسم"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment__name_of
+msgid "Name Of"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__account_move__operation_type__need_contribution
+#: model:ir.model.fields.selection,name:takaful_core.selection__takaful_account_move__operation_type__need_contribution
+msgid "Needs Contribution"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment__number
+msgid "Number"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__otp
+msgid "OTP"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__otp_date
+msgid "OTP Date"
+msgstr ""
+
+#. module: takaful_core
+#: model_terms:ir.ui.view,arch_db:takaful_core.view_company_form_inherit_otp
+msgid "OTP Information"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_company__otp_provider_token
+msgid "OTP Provider Token"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__otp_count
+msgid "OTP Request Count"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__otp_password
+msgid "OTP Reset Password"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_company__otp_sender_name
+msgid "OTP Sender Name"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:0
+#: code:addons/takaful_core/models/res_users.py:0
+#, python-format
+msgid "OTP code is successfully sent"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:0
+#: code:addons/takaful_core/models/res_users.py:0
+#, python-format
+msgid "OTP does not exist or expired, please request it again"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_account_bank_statement_line__operation_id
+#: model:ir.model.fields,field_description:takaful_core.field_account_move__operation_id
+#: model:ir.model.fields,field_description:takaful_core.field_account_payment__operation_id
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move__operation_id
+msgid "Operation"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_account_bank_statement_line__operation_type
+#: model:ir.model.fields,field_description:takaful_core.field_account_move__operation_type
+#: model:ir.model.fields,field_description:takaful_core.field_account_payment__operation_type
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move__operation_type
+msgid "Operation Type"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move__name
+msgid "Order Name"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move__remote_id
+msgid "Order Number"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/takaful_account_move.py:0
+#, python-format
+msgid "Paid"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:0
+#, python-format
+msgid "Password is successfully reset"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.actions.act_window,name:takaful_core.takaful_account_move_list_action
+msgid "Paycards Account Moves"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__takaful_bank_transfer_payment__state__pending
+#: model_terms:ir.ui.view,arch_db:takaful_core.view_takaful_bank_payment_transfer_form
+msgid "Pending"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner__user_type__person
+msgid "Person"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner__education_level__postgraduate
+msgid "Postgraduate"
+msgstr "دراسات عليا"
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner__education_level__primary
+msgid "Primary"
+msgstr "الابتدائية"
+
+#. module: takaful_core
+#: model_terms:ir.ui.view,arch_db:takaful_core.view_company_form_inherit_otp
+msgid "Publicy Key"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move__qty_ordered
+msgid "Qty Ordered"
+msgstr ""
+
+#. module: takaful_core
+#: model_terms:ir.ui.view,arch_db:takaful_core.view_takaful_bank_payment_transfer_form
+msgid "Reject"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/takaful_account_move.py:0
+#: model:ir.model.fields.selection,name:takaful_core.selection__takaful_account_move__state__rejected
+#: model:ir.model.fields.selection,name:takaful_core.selection__takaful_bank_transfer_payment__state__reject
+#, python-format
+msgid "Rejected"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model,name:takaful_core.model_res_partner
+msgid "Renter"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model,name:takaful_core.model_res_company
+msgid "Res Company SMS Configuration"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner__activation_mode__sms
+msgid "SMS"
+msgstr ""
+
+#. module: takaful_core
+#: model_terms:ir.ui.view,arch_db:takaful_core.view_company_form_inherit_otp
+msgid "SMS Information"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_company__sms_provider_token
+msgid "SMS Provider Token"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_company__sms_sender_name
+msgid "SMS Sender Name"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:0
+#, python-format
+msgid "SMS service is unavilable"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__second_name
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__second_name
+msgid "Second Name"
+msgstr "الاسم الثاني"
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner__education_level__secondary
+msgid "Secondary"
+msgstr "الثانوية"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:0
+#, python-format
+msgid "Sender information does not exist"
+msgstr ""
+
+#. module: takaful_core
+#: model_terms:ir.ui.view,arch_db:takaful_core.view_takaful_bank_payment_transfer_form
+msgid "Set Draft"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner__health_status__sick
+msgid "Sick"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_partner.py:0
+#, python-format
+msgid "Single"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__account_move__operation_type__sponsorship
+#: model:ir.model.fields.selection,name:takaful_core.selection__takaful_account_move__operation_type__sponsorship
+msgid "Sponsorship"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__state_id
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__state_id
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment__state
+msgid "State"
+msgstr "الحالة"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move__state
+msgid "Status"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__account_move__operation_type__subscription
+#: model:ir.model.fields.selection,name:takaful_core.selection__takaful_account_move__operation_type__subscription
+msgid "Subscription"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.ui.menu,name:takaful_core.takaful_online_paycard_menu
+msgid "Takaful Online Payments"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.constraint,message:takaful_core.constraint_res_partner_mobile_uniq
+msgid "The Mobile Already Exist!"
+msgstr "رقم الجوال موجود بالفعل!"
+
+#. module: takaful_core
+#: model:ir.model.constraint,message:takaful_core.constraint_res_partner_phone_uniq
+msgid "The Phone Already Exist!"
+msgstr "رقم الجوال موجود بالفعل!"
+
+#. module: takaful_core
+#: model:ir.model.constraint,message:takaful_core.constraint_res_partner_user_id_uniq
+msgid "The User Already Exist!"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:0
+#, python-format
+msgid "The entered password does not match"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__middle_name
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__middle_name
+msgid "Third Name"
+msgstr "الاسم الثالث"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move__transfer_id
+msgid "Transfer"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment__transfer_date
+msgid "Transfer Date"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move__type
+msgid "Type"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner__education_level__university
+msgid "University"
+msgstr "الجامعية"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_company__use_otp_login
+msgid "Use Otp Login"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_company__use_sms_notification
+msgid "Use SMS Notifications"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__user_type
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__user_type
+msgid "User Type"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model,name:takaful_core.model_res_users
+msgid "Users"
+msgstr "المستخدمون"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move__tax_amount
+msgid "Vat"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_company__vat_default_percent
+msgid "Vat Percent"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:0
+#, python-format
+msgid "Verification is successful"
+msgstr ""
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_partner.py:0
+#, python-format
+msgid "Widower"
+msgstr ""
+
+#. module: takaful_core
+#: model_terms:ir.ui.view,arch_db:takaful_core.takaful_account_move_form
+msgid "server"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner__account_type__sponsor
+msgid "sponsor"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model,name:takaful_core.model_takaful_account_move
+msgid "takaful.account.move"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model,name:takaful_core.model_takaful_bank_transfer_payment
+msgid "takaful.bank.transfer.payment"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner__marital_status__widower
+msgid "ارملة"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner__marital_status__single
+msgid "اعزب"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__marital_status
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__marital_status
+msgid "الحالة الاجتماعية"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner__marital_status__married
+msgid "متزوجة"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__takaful_account_move__state__paid
+msgid "مدفوع"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner__marital_status__divorced
+msgid "مطلقة"
+msgstr ""
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_country_city__state_id
+msgid "State"
+msgstr "المحافظة"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__is_family
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__is_family
+msgid "Is Family"
+msgstr "عائلة؟"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__is_sponsor_portal
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__is_sponsor
+msgid "Is Sponsor"
+msgstr "كافل؟"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__is_benefit
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__is_benefit
+msgid "Is Benefit"
+msgstr "مستفيد؟"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__is_vendor
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__is_vendor
+msgid "Is Vendor"
+msgstr "مورد؟"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner__is_donor
+#: model:ir.model.fields,field_description:takaful_core.field_res_users__is_donor
+msgid "Is Donor"
+msgstr "متبرع؟"
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner_title__position__prefix
+msgid "Prefix"
+msgstr "بادئة"
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner_title__position__suffix
+msgid "Suffix"
+msgstr "لاحقة"
+
+#. module: takaful_core
+#: model:ir.model.fields.selection,name:takaful_core.selection__res_partner_title__position__both
+msgid "Both"
+msgstr "كلاهما"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner_title__position
+msgid "Position"
+msgstr "الموضع"
+
diff --git a/odex25_benefit/takaful_core/i18n/ar_SY.po b/odex25_benefit/takaful_core/i18n/ar_SY.po
new file mode 100644
index 000000000..1227320ea
--- /dev/null
+++ b/odex25_benefit/takaful_core/i18n/ar_SY.po
@@ -0,0 +1,889 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * takaful_core
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 11.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-11-29 08:00+0000\n"
+"PO-Revision-Date: 2022-11-29 10:01+0200\n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"Language: ar\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: \n"
+"X-Generator: Poedit 3.2.1\n"
+
+#. module: takaful_core
+#: model:ir.ui.view,arch_db:takaful_core.view_takaful_bank_payment_transfer_form
+msgid "Accept"
+msgstr "قبول"
+
+#. module: takaful_core
+#: selection:takaful.bank.transfer.payment,state:0
+msgid "Accepted"
+msgstr "مقبول"
+
+#. module: takaful_core
+#: model:ir.model,name:takaful_core.model_account_move
+msgid "Account Entry"
+msgstr "القيد"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner_age
+#: model:ir.model.fields,field_description:takaful_core.field_res_users_age
+msgid "Age"
+msgstr "العمر"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment_amount
+msgid "Amount"
+msgstr "المبلغ"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move_amount
+msgid "Amount With Vat"
+msgstr "المبلغ مع ضريبة القيمة المضافة"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move_amount_without_vat
+msgid "Amount Without Vat"
+msgstr "المبلغ بدون ضريبة القيمة المضافة"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment_transfer_attachment
+msgid "Attachment"
+msgstr "المرفقات"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner_bank_id_4032
+#: model:ir.model.fields,field_description:takaful_core.field_res_users_bank_id
+msgid "Bank"
+msgstr "البنك"
+
+#. module: takaful_core
+#: model:ir.model,name:takaful_core.model_res_partner_bank
+#: model:ir.model.fields,field_description:takaful_core.field_res_company_bank_account_count
+msgid "Bank Accounts"
+msgstr "الحسابات البنكية"
+
+#. module: takaful_core
+#: model:ir.ui.view,arch_db:takaful_core.bank_account_image_add_view
+msgid "Bank Image"
+msgstr "صورة البنك"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner_bank_bank_img
+msgid "Bank Img"
+msgstr "صورة البنك"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/takaful_account_move.py:48
+#: model:ir.actions.act_window,name:takaful_core.act_takaful_bank_transfer_view
+#: model:ir.ui.view,arch_db:takaful_core.view_takaful_bank_payment_transfer_form
+#: model:ir.ui.view,arch_db:takaful_core.view_takaful_bank_payment_transfer_search
+#: model:ir.ui.view,arch_db:takaful_core.view_takaful_bank_payment_transfer_tree
+#: selection:takaful.account.move,type:0
+#, python-format
+msgid "Bank Transfer"
+msgstr "التحويل البنكي"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/bank_transfer_payment.py:46
+#: code:addons/takaful_core/models/bank_transfer_payment.py:61
+#: code:addons/takaful_core/models/bank_transfer_payment.py:71
+#: code:addons/takaful_core/models/bank_transfer_payment.py:93
+#, python-format
+msgid "Bank Transfer State %s"
+msgstr "حالة التحويل المصرفي %s"
+
+#. module: takaful_core
+#: model:ir.ui.view,arch_db:takaful_core.view_order_form_inherit_res_comapny
+msgid "Bank account(s)"
+msgstr "الحسابات البنكية"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner_birth_date
+#: model:ir.model.fields,field_description:takaful_core.field_res_users_birth_date
+msgid "Birth Date"
+msgstr "تاريخ الميلاد"
+
+#. module: takaful_core
+#: model:ir.ui.view,arch_db:takaful_core.view_takaful_bank_payment_transfer_form
+msgid "Cancel"
+msgstr "إلغاء"
+
+#. module: takaful_core
+#: selection:takaful.bank.transfer.payment,state:0
+msgid "Canceled"
+msgstr "ملغية"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:127
+#, python-format
+msgid "Cannot sending SMS verification %s "
+msgstr " %s لم يتم إرسال الرسالة للجوال"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:204
+#, python-format
+msgid "Cannot sending email verification"
+msgstr "لم يتم إرسال البريد الإلكتروني"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_partner.py:25
+#, python-format
+msgid "Charity"
+msgstr "جهة خيرية"
+
+#. module: takaful_core
+#: model:ir.ui.view,arch_db:takaful_core.view_res_city_tree
+msgid "Cities"
+msgstr "المدن"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner_city_id
+#: model:ir.model.fields,field_description:takaful_core.field_res_users_city_id
+#: model:ir.ui.view,arch_db:takaful_core.view_res_city_form
+msgid "City"
+msgstr "المدينة"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_country_city_code
+msgid "Code"
+msgstr "الرمز"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move_note
+msgid "Comment"
+msgstr "تعليق"
+
+#. module: takaful_core
+#: model:ir.model,name:takaful_core.model_res_company
+msgid "Companies"
+msgstr "الشركات"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_company_company_name
+msgid "Company Name"
+msgstr "اسم الشركة"
+
+#. module: takaful_core
+#: model:ir.model,name:takaful_core.model_res_partner
+msgid "Contact"
+msgstr "جهة الاتصال"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_country_city_country_id
+msgid "Country"
+msgstr "دولة"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_country_city_create_uid
+msgid "Created by"
+msgstr "أنشئ بواسطة"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_country_city_create_date
+msgid "Created on"
+msgstr "أنشئ في"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/takaful_account_move.py:47
+#: selection:takaful.account.move,type:0
+#, python-format
+msgid "Credit Card"
+msgstr "بطاقة ائتمانية"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move_partner_id
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment_partner_id
+#: model:ir.ui.view,arch_db:takaful_core.view_takaful_bank_payment_transfer_search
+msgid "Customer"
+msgstr "العميل"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move_email
+msgid "Customer Email"
+msgstr "بريد العميل"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move_name_of
+msgid "Customer Name"
+msgstr "اسم العميل "
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move_date
+msgid "Date"
+msgstr "التاريخ"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/bank_transfer_payment.py:72
+#, python-format
+msgid "Dear %s,
Your bank transfer has been changed accepted. Please check your balance"
+msgstr "عزيزي %s ،
تم تغيير التحويل المصرفي الخاص بك. يرجى التحقق من رصيدك"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/bank_transfer_payment.py:94
+#, python-format
+msgid "Dear %s,
Your bank transfer has been changed to canceled. Please check with your bank"
+msgstr "عزيزي %s ،
تم تغيير التحويل المصرفي الخاص بك إلى إلغاء. يرجى التحقق من البنك الذي تتعامل معه"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/bank_transfer_payment.py:47
+#, python-format
+msgid "Dear %s,
Your bank transfer has been rejected."
+msgstr "عزيزي %s ،
تم رفض التحويل المصرفي الخاص بك."
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:92
+#, python-format
+msgid ""
+"Dear Customer,\n"
+" %s is your one time password (OTP). Please enter the OTP to proceed.\n"
+" Thank you,\n"
+" Team Takaful"
+msgstr ""
+"عزيزنا العميل,\n"
+" %s هو رمز التفعيل. الرجاء إدخال الرمز للمتابعة.\n"
+" شكراً جزيلاً,\n"
+" جمعية تكافل"
+
+#. module: takaful_core
+#: model:ir.ui.view,arch_db:takaful_core.view_company_form_inherit_otp
+msgid "Default Vat Value"
+msgstr "القيمة الافتراضية لضريبة القيمة المضافة"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_country_city_display_name
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move_display_name
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment_display_name
+msgid "Display Name"
+msgstr "الاسم المعروض"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_partner.py:53
+#: selection:res.partner,marital_status:0
+#, python-format
+msgid "Divorced"
+msgstr "مطلقة"
+
+#. module: takaful_core
+#: selection:takaful.bank.transfer.payment,state:0
+msgid "Draft"
+msgstr "مسودة"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner_education_institution
+#: model:ir.model.fields,field_description:takaful_core.field_res_users_education_institution
+msgid "Education Institution"
+msgstr "المؤسسة التعليمية"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner_education_level
+#: model:ir.model.fields,field_description:takaful_core.field_res_users_education_level
+msgid "Educational level"
+msgstr "مستوى التعليم"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:199
+#, python-format
+msgid "Email verification is successfully sent"
+msgstr "تم ارسال بريد للتحقق بنجاح"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_partner.py:91
+#, python-format
+msgid "Enter a valid Saudi mobile number"
+msgstr "أدخل رقم جوال سعودي بشكل صحيح"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:179
+#, python-format
+msgid "Exceeded the limit, please request after the clock %s"
+msgstr "لقد جاوزت الحد المسموح، الرجاء الطلب بعد %s"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/takaful_account_move.py:54
+#: selection:takaful.account.move,state:0
+#, python-format
+msgid "Failed"
+msgstr "فشلت"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner_family_name
+#: model:ir.model.fields,field_description:takaful_core.field_res_users_family_name
+msgid "Family Name"
+msgstr "اسم العائلة"
+
+#. module: takaful_core
+#: selection:res.partner,gender:0
+msgid "Female"
+msgstr "أنثي"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment_filename
+msgid "Filename"
+msgstr "اسم الملف"
+
+#. module: takaful_core
+#: selection:account.invoice,operation_type:0
+#: selection:takaful.account.move,operation_type:0
+msgid "Financial Donation"
+msgstr "تبرعات مالية"
+
+#. module: takaful_core
+#: selection:account.invoice,operation_type:0
+#: selection:takaful.account.move,operation_type:0
+msgid "Financial Gift"
+msgstr "إهداء مالي"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner_first_name
+#: model:ir.model.fields,field_description:takaful_core.field_res_users_first_name
+msgid "First Name"
+msgstr "الاسم الاول"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner_gender
+#: model:ir.model.fields,field_description:takaful_core.field_res_users_gender
+msgid "Gender"
+msgstr "الجنس"
+
+#. module: takaful_core
+#: model:ir.ui.view,arch_db:takaful_core.view_takaful_bank_payment_transfer_search
+msgid "Group By..."
+msgstr "تجميع حسب.."
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner_health_status
+#: model:ir.model.fields,field_description:takaful_core.field_res_users_health_status
+msgid "Health Status"
+msgstr "الحالة الصحية"
+
+#. module: takaful_core
+#: selection:res.partner,health_status:0
+msgid "Healthy"
+msgstr "سليم"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner_iban
+#: model:ir.model.fields,field_description:takaful_core.field_res_users_iban
+msgid "IBAN"
+msgstr "رقم الآي بان"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_country_city_id
+msgid "ID"
+msgstr "المعرف"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner_id_expiry
+#: model:ir.model.fields,field_description:takaful_core.field_res_users_id_expiry
+msgid "Id Expiry Date"
+msgstr "تاريخ انتهاء الهوية"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner_id_number
+#: model:ir.model.fields,field_description:takaful_core.field_res_users_id_number
+msgid "Id Number"
+msgstr "رقم الهوية"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner_id_number_attach
+#: model:ir.model.fields,field_description:takaful_core.field_res_users_id_number_attach
+msgid "Id Number Attachment"
+msgstr "مرفق الهوية"
+
+#. module: takaful_core
+#: selection:res.partner,education_level:0
+msgid "Illiterate"
+msgstr "أمي"
+
+#. module: takaful_core
+#: selection:account.invoice,operation_type:0
+#: selection:takaful.account.move,operation_type:0
+msgid "In-Kind Donation"
+msgstr "تبرعات عينية"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/takaful_account_move.py:53
+#: selection:takaful.account.move,state:0
+#, python-format
+msgid "Initiated"
+msgstr "أنشئت"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:252
+#, python-format
+msgid "Invalid OTP, Reset Password Failed"
+msgstr "رمز تفعيل غير صحيح، فشل في تغيير كلمة المرور"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:279
+#, python-format
+msgid "Invalid OTP, Verification Failed"
+msgstr "رمز تفعيل غير صحيح، فشل في عملية التحقق"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:56
+#, python-format
+msgid "Invalid Saudi mobile number"
+msgstr "أدخل رقم جوال سعودي بشكل صحيح"
+
+#. module: takaful_core
+#: model:ir.model,name:takaful_core.model_account_invoice
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment_move_id
+msgid "Invoice"
+msgstr "الفاتورة"
+
+#. module: takaful_core
+#: model:ir.ui.view,arch_db:takaful_core.takaful_account_move_form
+msgid "Invoice Number"
+msgstr "رقم الفاتورة"
+
+#. module: takaful_core
+#: model:ir.ui.view,arch_db:takaful_core.takaful_account_move_tree_viewx
+msgid "Invoices"
+msgstr "الفواتير"
+
+#. module: takaful_core
+#: selection:res.partner,education_level:0
+msgid "Kindergarten"
+msgstr "روضة أطفال"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_country_city___last_update
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move___last_update
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment___last_update
+msgid "Last Modified on"
+msgstr "آخر تعديل في"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_country_city_write_uid
+msgid "Last Updated by"
+msgstr "آخر تحديث بواسطة"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_country_city_write_date
+msgid "Last Updated on"
+msgstr "آخر تحديث في"
+
+#. module: takaful_core
+#: selection:res.partner,gender:0
+msgid "Male"
+msgstr "ذكر"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_partner.py:54
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner_marital_status
+#: model:ir.model.fields,field_description:takaful_core.field_res_users_marital_status
+#, python-format
+msgid "Marital Status"
+msgstr "الحالة الاجتماعية"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_partner.py:53
+#: selection:res.partner,marital_status:0
+#, python-format
+msgid "Married"
+msgstr "متزوج"
+
+#. module: takaful_core
+#: selection:res.partner,education_level:0
+msgid "Middle"
+msgstr "متوسطة"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:218
+#, python-format
+msgid "Missing Password Values or OTP"
+msgstr "قيم كلمات المرور أو رمز التفعيل غير مكتملة"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:47
+#: code:addons/takaful_core/models/res_users.py:153
+#, python-format
+msgid "Missing mobile number"
+msgstr "لايوجد قيمة رقم الجوال"
+
+#. module: takaful_core
+#: model:ir.ui.view,arch_db:takaful_core.view_company_form_inherit_otp
+msgid "Moyaser Integration"
+msgstr "التكامل مع خدمة ميسر"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_company_moyaser_public_key
+msgid "Moyaser Public Key"
+msgstr "مفتاح خدمة ميسر"
+
+#. module: takaful_core
+#: model:ir.ui.view,arch_db:takaful_core.view_company_form_inherit_otp
+msgid "Moyaser Publicy Key"
+msgstr "المفتاح العام لخدمة ميسر"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_country_city_name
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment_name
+msgid "Name"
+msgstr "الاسم"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment_name_of
+msgid "Name Of"
+msgstr "اسم صاحب الحساب الذي تم التحويل منه"
+
+#. module: takaful_core
+#: selection:account.invoice,operation_type:0
+#: selection:takaful.account.move,operation_type:0
+msgid "Needs Contribution"
+msgstr "مساهمة أحتياجات"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment_number
+msgid "Number"
+msgstr "الرقم"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_users_otp
+msgid "OTP"
+msgstr "رمز التفعيل"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_users_otp_date
+msgid "OTP Date"
+msgstr "تأريخ رمز التفعيل"
+
+#. module: takaful_core
+#: model:ir.ui.view,arch_db:takaful_core.view_company_form_inherit_otp
+msgid "OTP Information"
+msgstr "معلومات رسائل التفعيل"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_company_otp_provider_token
+msgid "OTP Provider Token"
+msgstr "مفتاح مزود رمز التفعيل"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_users_otp_count
+msgid "OTP Request Count"
+msgstr "عدد طلبات رمز التفعيل"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_users_otp_password
+msgid "OTP Reset Password"
+msgstr "أعادة تعيين كلمة السر بواسطة رمز التفعيل"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_company_otp_sender_name
+msgid "OTP Sender Name"
+msgstr "اسم مرسل رمز التفعيل"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:82
+#: code:addons/takaful_core/models/res_users.py:118
+#, python-format
+msgid "OTP code is successfully sent"
+msgstr "لقد تم إرسال رمز التفعيل بنجاح"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:260
+#: code:addons/takaful_core/models/res_users.py:295
+#, python-format
+msgid "OTP does not exist or expired, please request it again"
+msgstr "رمز التفعيل غير صالح أو غير موجود، فضلاً أطلبه مرة أخرى"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move_operation_id
+msgid "Operation"
+msgstr "عملية"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_account_invoice_operation_type
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move_operation_type
+msgid "Operation Type"
+msgstr "نوع العملية"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move_name
+msgid "Order Name"
+msgstr "اسم الطلب"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move_remote_id
+msgid "Order Number"
+msgstr "رقم الطلب"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/takaful_account_move.py:56
+#: selection:takaful.account.move,state:0
+#, python-format
+msgid "Paid"
+msgstr "مدفوعة"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:247
+#, python-format
+msgid "Password is successfully reset"
+msgstr "تم إعادة تعيين كلمة المرور بنجاح"
+
+#. module: takaful_core
+#: model:ir.actions.act_window,name:takaful_core.takaful_account_move_list_action
+msgid "Paycards Account Moves"
+msgstr "قيود فواتير السداد الإلكتروني"
+
+#. module: takaful_core
+#: model:ir.ui.view,arch_db:takaful_core.view_takaful_bank_payment_transfer_form
+#: selection:takaful.bank.transfer.payment,state:0
+msgid "Pending"
+msgstr "معلق"
+
+#. module: takaful_core
+#: selection:res.partner,education_level:0
+msgid "Postgraduate"
+msgstr "دراسات عليا"
+
+#. module: takaful_core
+#: selection:res.partner,education_level:0
+msgid "Primary"
+msgstr "أساس"
+
+#. module: takaful_core
+#: model:ir.model,name:takaful_core.model_product_product
+msgid "Product"
+msgstr "المنتج"
+
+#. module: takaful_core
+#: model:ir.model,name:takaful_core.model_product_template
+msgid "Product Template"
+msgstr "قالب المنتج"
+
+#. module: takaful_core
+#: model:ir.ui.view,arch_db:takaful_core.view_company_form_inherit_otp
+msgid "Publicy Key"
+msgstr "المفتاح العام"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move_qty_ordered
+msgid "Qty Ordered"
+msgstr "الكمية المطلوبة"
+
+#. module: takaful_core
+#: model:ir.model,name:takaful_core.model_sale_order
+msgid "Quotation"
+msgstr "التسعيرة"
+
+#. module: takaful_core
+#: model:ir.ui.view,arch_db:takaful_core.view_takaful_bank_payment_transfer_form
+msgid "Reject"
+msgstr "رفض"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/takaful_account_move.py:55
+#: selection:takaful.account.move,state:0
+#: selection:takaful.bank.transfer.payment,state:0
+#, python-format
+msgid "Rejected"
+msgstr "مرفوض"
+
+#. module: takaful_core
+#: model:ir.ui.view,arch_db:takaful_core.view_company_form_inherit_otp
+msgid "SMS Information"
+msgstr "معلومات خدمة الرسائل القصيرة"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_company_sms_provider_token
+msgid "SMS Provider Token"
+msgstr "اسم مزود خدمة الرسائل القصيرة"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_company_sms_sender_name
+msgid "SMS Sender Name"
+msgstr "اسم مرسل الرسائل القصيرة"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:140
+#, python-format
+msgid "SMS service is unavilable"
+msgstr "خدمة الرسائل غير متاحة"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner_second_name
+#: model:ir.model.fields,field_description:takaful_core.field_res_users_second_name
+msgid "Second Name"
+msgstr "الاسم الثاني"
+
+#. module: takaful_core
+#: selection:res.partner,education_level:0
+msgid "Secondary"
+msgstr "ثانوي"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:131
+#, python-format
+msgid "Sender information does not exist"
+msgstr "معلومات المرسل غير موجود"
+
+#. module: takaful_core
+#: model:ir.ui.view,arch_db:takaful_core.view_takaful_bank_payment_transfer_form
+msgid "Set Draft"
+msgstr "وضع كممسودة"
+
+#. module: takaful_core
+#: selection:res.partner,health_status:0
+msgid "Sick"
+msgstr "مريض"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_partner.py:53
+#: selection:res.partner,marital_status:0
+#, python-format
+msgid "Single"
+msgstr "عازب"
+
+#. module: takaful_core
+#: selection:account.invoice,operation_type:0
+#: selection:takaful.account.move,operation_type:0
+msgid "Sponsorship"
+msgstr "الكفالة"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_country_city_state_id
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment_state
+#: model:ir.ui.view,arch_db:takaful_core.view_takaful_bank_payment_transfer_search
+msgid "State"
+msgstr "المحافظة"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move_state
+msgid "Status"
+msgstr "الحالة "
+
+#. module: takaful_core
+#: selection:account.invoice,operation_type:0
+#: selection:takaful.account.move,operation_type:0
+msgid "Subscription"
+msgstr "إشتراكات"
+
+#. module: takaful_core
+#: sql_constraint:res.partner:0
+msgid "The Email Already Exist!"
+msgstr "The Email Already Exist!"
+
+#. module: takaful_core
+#: sql_constraint:res.partner:0
+msgid "The ID Number Already Exist!"
+msgstr "The ID Number Already Exist!"
+
+#. module: takaful_core
+#: sql_constraint:res.partner:0
+msgid "The Mobile Already Exist!"
+msgstr "The Mobile Already Exist!"
+
+#. module: takaful_core
+#: sql_constraint:res.partner:0
+msgid "The Phone Already Exist!"
+msgstr "The Phone Already Exist!"
+
+#. module: takaful_core
+#: sql_constraint:res.partner:0
+msgid "The User Already Exist!"
+msgstr "The User Already Exist!"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:227
+#, python-format
+msgid "The entered password does not match"
+msgstr "كلمة المرور المدخلة غير متطابقة"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_partner_middle_name
+#: model:ir.model.fields,field_description:takaful_core.field_res_users_middle_name
+msgid "Third Name"
+msgstr "الاسم الثالث"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move_transfer_id
+msgid "Transfer"
+msgstr "التحويل البنكي"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_bank_transfer_payment_transfer_date
+msgid "Transfer Date"
+msgstr "Transfer Date"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move_type
+msgid "Type"
+msgstr "النوع"
+
+#. module: takaful_core
+#: selection:res.partner,education_level:0
+msgid "University"
+msgstr "جامعي"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_company_use_otp_login
+msgid "Use Otp Login"
+msgstr "أستخدام رمز التفعيل للتسجيل"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_company_use_sms_notification
+msgid "Use SMS Notifications"
+msgstr "تنبيهات عبر الرسائل القصيرة"
+
+#. module: takaful_core
+#: model:ir.model,name:takaful_core.model_res_users
+msgid "Users"
+msgstr "المستخدمون"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_takaful_account_move_tax_amount
+msgid "Vat"
+msgstr "الضريبة المضافة"
+
+#. module: takaful_core
+#: model:ir.model.fields,field_description:takaful_core.field_res_company_vat_default_percent
+msgid "Vat Percent"
+msgstr "نسبة الضريبة المضافة"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_users.py:291
+#, python-format
+msgid "Verification is successful"
+msgstr "تم التحقق بنجاح"
+
+#. module: takaful_core
+#: code:addons/takaful_core/models/res_partner.py:53
+#: selection:res.partner,marital_status:0
+#, python-format
+msgid "Widower"
+msgstr "أرملة"
+
+#. module: takaful_core
+#: model:ir.model,name:takaful_core.model_res_config_settings
+msgid "res.config.settings"
+msgstr "الدقة.التكوين.إعدادات"
+
+#. module: takaful_core
+#: model:ir.model,name:takaful_core.model_res_country_city
+msgid "res.country.city"
+msgstr "res.country.city"
+
+#. module: takaful_core
+#: model:ir.ui.view,arch_db:takaful_core.takaful_account_move_form
+msgid "server"
+msgstr "الخادم"
+
+#. module: takaful_core
+#: model:ir.model,name:takaful_core.model_takaful_account_move
+msgid "takaful.account.move"
+msgstr "takaful.account.move"
+
+#. module: takaful_core
+#: model:ir.model,name:takaful_core.model_takaful_bank_transfer_payment
+msgid "takaful.bank.transfer.payment"
+msgstr "takaful.bank.transfer.payment"
diff --git a/odex25_benefit/takaful_core/models/__init__.py b/odex25_benefit/takaful_core/models/__init__.py
new file mode 100644
index 000000000..d83047a68
--- /dev/null
+++ b/odex25_benefit/takaful_core/models/__init__.py
@@ -0,0 +1,9 @@
+# -*- coding: utf-8 -*-
+
+from . import res_city
+from . import res_partner
+from . import res_users
+from . import res_config
+
+from . import takaful_account_move
+from . import bank_transfer_payment
diff --git a/odex25_benefit/takaful_core/models/bank_transfer_payment.py b/odex25_benefit/takaful_core/models/bank_transfer_payment.py
new file mode 100644
index 000000000..3cbff1859
--- /dev/null
+++ b/odex25_benefit/takaful_core/models/bank_transfer_payment.py
@@ -0,0 +1,104 @@
+# -*- coding: utf-8 -*-
+from odoo import models, fields, api
+from odoo.tools.translate import _
+# from odoo.tools import SUPERUSER_ID
+from datetime import datetime
+
+
+class CompanyBank(models.Model):
+ _inherit = 'res.partner.bank'
+
+ bank_img = fields.Binary(attachment=True)
+
+
+class BankPayment(models.Model):
+ _name = 'takaful.bank.transfer.payment'
+ _rec_name = 'number'
+ _order = 'id desc'
+
+ number = fields.Char(string='Number', defualt='/', readonly=True)
+ name = fields.Char(string='Name', required=True)
+ name_of = fields.Char(string='Name Of')
+ amount = fields.Float(string='Amount')
+ partner_id = fields.Many2one(comodel_name='res.partner', string='Customer', required=True)
+ transfer_attachment = fields.Binary(attachment=True, string='Attachment')
+ filename = fields.Char(string='Filename', size=256, readonly=True)
+ state = fields.Selection(selection=[('draft', 'Draft'), ('pending', 'Pending'), ('reject', 'Rejected'),
+ ('accept', 'Accepted'), ('cancel', 'Canceled')], string='State', default='draft')
+ move_id = fields.Many2one(comodel_name='takaful.account.move', string='Invoice')
+ transfer_date=fields.Date()
+
+ @api.model
+ def create(self, vals):
+ res = super(BankPayment, self).create(vals)
+ res.write({'number': self.env['ir.sequence'].sudo().next_by_code('bank.payment.transfer')})
+
+ return res
+
+ # @api.multi
+ def action_pending(self):
+ self.write({'state': 'pending'})
+
+ # @api.multi
+ def action_rejected(self):
+ context = {'lang':self.partner_id.lang}
+ val_msg = {
+ 'name': _("Bank Transfer State %s")%self.number,
+ 'body': _("Dear %s,
Your bank transfer has been rejected.")%self.partner_id.name,
+ 'partner_ids': [(6, 0, [self.partner_id.id])],
+ # 'author_id': self.env['res.users'].sudo().browse(SUPERUSER_ID).partner_id.id,
+ 'author_id': self.env['res.users'].sudo()._is_admin().partner_id.id,
+ 'date': datetime.now(),
+ 'state': 'sent',
+ }
+ # val_mg
+ self.write({'state': 'reject'})
+
+ # @api.multi
+ def action_accepted(self):
+ if not self.move_id:
+ vals = {
+ 'name':_("Bank Transfer State %s")%self.number,
+ 'partner_id': self.partner_id.id,
+ 'amount': self.amount,
+ # 'operation_type': 'xxx',
+ 'type': 'transfert',
+ }
+ move = self.env['takaful.account.move'].sudo().create(vals)
+ self.write({'move_id': move.id})
+ context = {'lang': self.partner_id.lang}
+ val_msg = {
+ 'name': _("Bank Transfer State %s")%self.number,
+ 'body': _("Dear %s,
Your bank transfer has been changed accepted. "
+ "Please check your balance")%self.partner_id.name,
+ 'partner_ids': [(6, 0, [self.partner_id.id])],
+ # 'author_id': self.env['res.users'].sudo().browse(SUPERUSER_ID).partner_id.id,
+ 'author_id': self.env['res.users'].sudo()._is_admin().partner_id.id,
+ 'date': datetime.now(),
+ 'state': 'sent',
+ }
+ # val_msg
+ self.move_id.write({'state': 'paid'})
+ self.write({'state': 'accept'})
+
+ # @api.multi
+ def action_reset_to_draft(self):
+ self.write({'state': 'draft'})
+
+ # @api.multi
+ def action_canceled(self):
+ self.move_id.write({'state': 'rejected'})
+ context = {'lang': self.partner_id.lang}
+ val_msg = {
+ 'name': _("Bank Transfer State %s")%self.number,
+ 'body': _("Dear %s,
Your bank transfer has been changed to canceled. "
+ "Please check with your bank")%self.partner_id.name,
+ 'partner_ids': [(6, 0, [self.partner_id.id])],
+ # 'author_id': self.env['res.users'].sudo().browse(SUPERUSER_ID).partner_id.id,
+ 'author_id': self.env['res.users'].sudo()._is_admin().partner_id.id,
+ 'date': datetime.now(),
+ 'state': 'sent',
+ }
+ # val_msg
+ self.write({'state': 'cancel'})
+
diff --git a/odex25_benefit/takaful_core/models/res_city.py b/odex25_benefit/takaful_core/models/res_city.py
new file mode 100644
index 000000000..cf416428a
--- /dev/null
+++ b/odex25_benefit/takaful_core/models/res_city.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+from odoo import api, models, fields, _
+
+
+class City(models.Model):
+ _name = 'res.country.city'
+
+
+ @api.depends('code', 'name')
+ def _load_country_id(self):
+ for r in self:
+ if r.code and r.name:
+ r.country_id = self.env.ref('base.sa')
+
+ code = fields.Char(string='Code')
+ name = fields.Char(string='Name')
+
+ state_id = fields.Many2one('res.country.state', string='State')
+ country_id = fields.Many2one('res.country', string='Country', )
+ active = fields.Boolean(default=True)
+
diff --git a/odex25_benefit/takaful_core/models/res_config.py b/odex25_benefit/takaful_core/models/res_config.py
new file mode 100644
index 000000000..769443114
--- /dev/null
+++ b/odex25_benefit/takaful_core/models/res_config.py
@@ -0,0 +1,32 @@
+# Customize settings for Takaful configrations.
+
+from odoo import models, fields, api, _
+from odoo.exceptions import ValidationError
+from ast import literal_eval
+
+class ResCompany(models.Model):
+ _inherit = 'res.company'
+
+ use_otp_login = fields.Boolean(string="Use Otp Login")
+ otp_provider_token = fields.Char(string="OTP Provider Token")
+ otp_sender_name = fields.Char(string="OTP Sender Name")
+
+ use_sms_notification = fields.Boolean(string="Use SMS Notifications")
+ sms_provider_token = fields.Char(string="SMS Provider Token")
+ sms_sender_name = fields.Char(string="SMS Sender Name")
+
+ # Moyaser
+ moyaser_public_key = fields.Char(string='Moyaser Public Key')
+ vat_default_percent=fields.Float(string='Vat Percent')
+
+ bank_account_count = fields.Integer(compute='_compute_bank_count', string="Bank Accounts")
+ company_name=fields.Char(string='Company Name',translate=True)
+
+ # @api.multi
+ def _compute_bank_count(self):
+ bank_data = self.env['res.partner.bank'].read_group([('company_id', 'in', self.ids)], ['company_id'],
+ ['company_id'])
+ mapped_data = dict([(bank['company_id'][0], bank['company_id_count']) for bank in bank_data])
+
+ for company in self:
+ company.bank_account_count = mapped_data.get(company.id, 0)
\ No newline at end of file
diff --git a/odex25_benefit/takaful_core/models/res_partner.py b/odex25_benefit/takaful_core/models/res_partner.py
new file mode 100644
index 000000000..14d1e84df
--- /dev/null
+++ b/odex25_benefit/takaful_core/models/res_partner.py
@@ -0,0 +1,221 @@
+# -*- coding: utf-8 -*-
+
+from ..TaqnyatSms import client, make_http_response
+from odoo import models, fields, api, _
+from datetime import datetime, date
+from odoo.tools import DEFAULT_SERVER_DATE_FORMAT
+from dateutil.relativedelta import relativedelta as rd
+from odoo.osv import expression
+from odoo.exceptions import UserError, ValidationError, Warning
+
+import re
+import logging
+
+_logger = logging.getLogger(__name__)
+SAUDI_MOBILE_PATTERN = "(^(05|5)(5|0|3|6|4|9|1|8|7)([0-9]{7})$)"
+
+
+class Partner(models.Model):
+ _inherit = 'res.partner'
+
+ def get_default_country(self):
+ country = self.env["res.country"].search([('code','=','SA')],limit=1)
+ return country.id
+ def get_default_state(self):
+ country = self.env["res.country.state"].search([('code','=','001')],limit=1)
+ return country.id
+
+ @api.model
+ def _name_search(self, name, args=None, operator='ilike', limit=100, name_get_uid=None):
+ if not args:
+ args = []
+
+ # Extend the domain filter with custom search conditions
+ if name and hasattr(self, 'identification_number') and 'identification_number' in self._fields:
+ args = expression.OR([args, [('identification_number', operator, name)]])
+
+ return super(Partner, self)._name_search(name, args, operator, limit, name_get_uid)
+
+ account_type = fields.Selection(
+ string='',
+ selection=[('family', 'Family'),
+ ('sponsor', 'sponsor'),
+ ('benefit', 'Benefit'),
+ ('member', 'Member'),
+ ('vendor', 'Vendor'),
+ ('donor', 'Donor')],
+ required=False, )
+ is_family = fields.Boolean()
+ is_sponsor_portal = fields.Boolean(string='Is Sponsor')
+ is_benefit = fields.Boolean()
+ is_vendor = fields.Boolean()
+ is_donor = fields.Boolean()
+ code = fields.Char(string="Code", copy=False)
+ sponsor_title = fields.Many2one('res.partner.title',string='Title')
+ suffix_title_id = fields.Many2one('res.partner.title',string='Suffix Title')
+ company_type = fields.Selection(selection_add=[('charity', _('Charity'))])
+ first_name = fields.Char(string="First Name", tracking=True)
+ second_name = fields.Char(string="Second Name", tracking=True)
+ middle_name = fields.Char(string="Third Name", tracking=True)
+ family_name = fields.Char(string="Family Name", tracking=True)
+ father_name = fields.Char(string="Father First Name", tracking=True)
+ father_second_name = fields.Char(string="Father Second Name", tracking=True)
+ father_third_name = fields.Char(string="Father Third Name", tracking=True)
+ father_family_name = fields.Char(string="Father Family Name")
+ birth_date = fields.Date()
+ age = fields.Integer(string="Age", compute='_compute_get_age_date', store=True)
+ iban = fields.Char("IBAN")
+ bank_id = fields.Many2one('res.bank')
+ id_number = fields.Char(string="Id Number", tracking=True)
+ id_expiry = fields.Date(string="Id Expiry Date")
+ gender = fields.Selection(selection=[('male', 'Male'), ('female', 'Female')], string="Gender")
+ id_number_attach = fields.Binary(string="Id Number Attachment")
+ health_status = fields.Selection(string='Health Status', selection=[('healthy', 'Healthy'), ('sick', 'Sick')])
+ education_level = fields.Selection(
+ string='Educational level',
+ selection=[
+ ('illiterate', 'Illiterate'),
+ ('kindergarten', 'Kindergarten'),
+ ('primary', 'Primary'),
+ ('middle', 'Middle'),
+ ('secondary', 'Secondary'),
+ ('university', 'University'),
+ ('postgraduate', 'Postgraduate'),
+ ])
+ education_institution = fields.Char()
+ country_id = fields.Many2one('res.country',default=get_default_country)
+ state_id = fields.Many2one('res.country.state',default=get_default_state)
+ city_id = fields.Many2one('res.country.city',domain=[('state_id.code','=','001')])
+ marital_status = fields.Selection(
+ [('single', _('Single')), ('married', _('Married')), ('widower', _('Widower')), ('divorced', _('Divorced'))],
+ _('Marital Status'))
+ activation_mode = fields.Selection([
+ ('sms', 'SMS'),
+ ('email', 'Email')])
+ user_type = fields.Selection([
+ ('person', 'Person'),
+ ('company', 'Company'),
+ ('charity', 'Charity'),
+ ])
+
+ _sql_constraints = [
+ ('mobile_uniq', 'unique (mobile)', 'The Mobile Already Exist!'),
+ ('phone_uniq', 'unique (phone)', 'The Phone Already Exist!'),
+ ('user_id_uniq', 'unique (user_id)', 'The User Already Exist!'),
+ ]
+
+
+ def get_partner_target_account_type(self, acc_type):
+ # Special mappings for account_type -> boolean field names
+ special_map = {
+ 'sponsor': 'is_sponsor_portal',
+ }
+
+ # Determine the target boolean field name
+ target_field = special_map.get(acc_type, f'is_{acc_type}')
+
+ return target_field
+
+ def set_partner_account_type(self, acc_type):
+ self.ensure_one()
+
+ # Determine the target boolean field name
+ target_field = self.get_partner_target_account_type(acc_type)
+
+ # Validate that acc_type is one of the selection values and field exists
+ valid_types = {key for key, _ in self._fields['account_type'].selection}
+ if target_field in self._fields and (acc_type in valid_types or target_field == 'is_sponsor_portal'):
+ update_vals = {target_field: True}
+ self.write(update_vals)
+
+ def migrate_account_type_to_booleans(self):
+ """
+ Server action method to migrate the old `account_type` selection
+ to the new `is_` boolean fields for the given recordset.
+ """
+ records = self.search([])
+ _logger.info(f"-> Starting account type migration for {len(records)} partner(s).")
+ for partner in records:
+ acc_type = partner.account_type
+ if not acc_type:
+ continue
+ partner.set_partner_account_type(acc_type)
+ _logger.info("-> Partner account type migration finished.")
+ return True
+
+ # Function Get age by birthdate
+ @api.depends('birth_date')
+ def _compute_get_age_date(self):
+ for rec in self:
+ if rec.birth_date:
+ today = date.today()
+ day = datetime.strptime(str(rec.birth_date), DEFAULT_SERVER_DATE_FORMAT)
+ age = rd(today, day)
+ rec.age = age.years
+
+ # Validate mobile ..
+ # @api.constrains('mobile')
+ # def check_mobile_value(self):
+ # if self.mobile:
+ # if re.match(SAUDI_MOBILE_PATTERN, self.mobile) == None:
+ # raise ValidationError(
+ # _('Enter a valid Saudi mobile number'))
+
+ @api.onchange('mobile', 'country_id', 'company_id')
+ def _onchange_mobile_validation(self):
+ if self.mobile:
+ if self.mobile.startswith('+966'):
+ mobile = self.mobile[4:]
+ self.mobile = mobile
+ if re.match(SAUDI_MOBILE_PATTERN, self.mobile) == None:
+ raise ValidationError(
+ _('Enter a valid Saudi mobile number'))
+
+ # @api.multi
+ def send_sms_notification(self, body=None, phone=None):
+ self.ensure_one()
+
+ if not phone:
+ phone = self.mobile
+
+ if not all([phone, body]):
+ return False
+
+ if re.match(SAUDI_MOBILE_PATTERN, str(phone)) == None:
+ return False
+
+ company_id = self.env.user.company_id or self.env['res.company'].sudo().search([('id', '=', 1)])
+
+ if company_id and company_id.use_sms_notification:
+ token = company_id.sms_provider_token or ''
+ sender = company_id.sms_sender_name or ''
+ if token and sender:
+
+ taqnyt = client(token)
+ mobile = '966' + str(phone).lstrip('0')
+
+ recipients = [mobile]
+ scheduled = ''
+ # Sending a SMS for a Notification
+ message = taqnyt.sendMsg(body, recipients, sender, scheduled)
+
+ result = make_http_response(message)
+
+ code = int(result['statusCode'])
+ total_count = int(result['totalCount'])
+ msg = result['message']
+
+ if code == 201 and total_count >= 1:
+ return True
+ else:
+ return False
+ else:
+ return False
+ else:
+ return False
+
+
+class PartnerTitle(models.Model):
+ _inherit = 'res.partner.title'
+
+ position = fields.Selection([('prefix', 'Prefix'), ('suffix', 'Suffix'),('both','Both')], default='prefix')
\ No newline at end of file
diff --git a/odex25_benefit/takaful_core/models/res_users.py b/odex25_benefit/takaful_core/models/res_users.py
new file mode 100644
index 000000000..635dcd9de
--- /dev/null
+++ b/odex25_benefit/takaful_core/models/res_users.py
@@ -0,0 +1,310 @@
+# -*- coding: utf-8 -*-
+
+from ..TaqnyatSms import client, make_http_response
+from odoo import models, fields, api, _
+from datetime import datetime, date
+from odoo.tools import DEFAULT_SERVER_DATE_FORMAT
+from dateutil.relativedelta import relativedelta as rd
+
+from odoo.exceptions import UserError, ValidationError, Warning
+
+from datetime import timedelta
+from dateutil import parser
+import pytz
+
+import math
+import random
+import re
+import logging
+
+_logger = logging.getLogger(__name__)
+
+SAUDI_MOBILE_PATTERN = "(^(05|5)(5|0|3|6|4|9|1|8|7)([0-9]{7})$)"
+OTP_HOUR_LIMIT = 7
+OTP_COUNT_LIMIT = 3
+
+def generateOTP() :
+ digits = "0123456789"
+ OTP = ""
+ for i in range(4) :
+ OTP += digits[int(math.floor(random.random() * 10))]
+ return OTP
+
+
+class ResUser(models.Model):
+ _inherit = 'res.users'
+
+ otp = fields.Char(string="OTP", required=False, readonly=True)
+ otp_password = fields.Char(string="OTP Reset Password", required=False, readonly=True)
+ otp_count = fields.Integer(string='OTP Request Count', required=False, readonly=True)
+ otp_date = fields.Datetime(string='OTP Date', required=False, readonly=True)
+
+ # @api.multi
+ def remove_access_groups(self):
+ """ Remove any access group from a user """
+ self.ensure_one()
+ groups_list = self.env['res.groups'].sudo().search([])
+ for group in groups_list:
+ if self in (group.users):
+ # Remove the access group
+ self.sudo().write({'groups_id': [(3, group.id)]})
+
+ # << Send OTP >>
+ # @api.multi
+ def send_otp(self, mobile):
+ self.ensure_one()
+ if not mobile:
+ error_descrip = _('Missing mobile number')
+ _logger.error(error_descrip)
+ return {
+ 'code': 400,
+ 'error': 'missing_data',
+ 'error_descrip': error_descrip,
+ }
+
+ if re.match(SAUDI_MOBILE_PATTERN, str(mobile)) == None:
+ error_descrip = _('Invalid Saudi mobile number')
+ _logger.error(error_descrip)
+ return {
+ 'code': 400,
+ 'error': 'invalid_mobile',
+ 'error_descrip': error_descrip,
+ }
+
+ company_id = self.env['res.company'].sudo().search([('id','=',1)])
+
+ if company_id and company_id.use_otp_login:
+ token = company_id.otp_provider_token or ''
+ sender = company_id.otp_sender_name or ''
+ if token and sender:
+ otp = generateOTP()
+
+ # Start demo for test
+ self.otp = otp
+ self.otp_password = otp
+ self.otp_count = self.otp_count + 1
+ if int(self.otp_count) == 1:
+ self.otp_date = fields.Datetime.now()
+
+ return {
+ 'code': 200,
+ 'results': {
+ 'message': _('OTP code is successfully sent'),
+ "mobile": mobile,
+ "otp": otp,
+ 'note': "OTP returned just for test, will be removed!",
+ }
+ }
+ # End demo/test
+
+ taqnyt = client(token)
+ mobile = '966' + str(mobile).lstrip('0')
+ body = _("""Dear Customer,
+ %s is your one time password (OTP). Please enter the OTP to proceed.
+ Thank you,
+ Team Takaful""") % otp
+
+ recipients = [mobile]
+ scheduled=''
+ # Sending a SMS for Verification using OTP
+ message = taqnyt.sendMsg(body, recipients, sender,scheduled)
+
+ result = make_http_response(message)
+
+ code = int(result['statusCode'])
+ total_count = int(result['totalCount'])
+ msg = result['message']
+
+ if code == 201 and total_count >=1:
+ self.otp = otp
+ self.otp_password = otp
+ self.otp_count = self.otp_count + 1
+ if int(self.otp_count) == 1:
+ self.otp_date = fields.Datetime.now()
+
+ return {
+ 'code': 200,
+ 'results': {
+ 'message': _('OTP code is successfully sent'),
+ "mobile": mobile,
+ }
+ }
+ else:
+ _logger.error(msg)
+ return {
+ 'code': 424,
+ 'error': 'failed_dependency',
+ 'error_descrip': _('Cannot sending SMS verification %s ') %("\n" + msg),
+ }
+
+ else:
+ error_descrip = _('Sender information does not exist')
+ _logger.error(error_descrip)
+ return {
+ 'code': 400,
+ 'error': 'does_not_exist',
+ 'error_descrip': error_descrip,
+ }
+
+ else:
+ error_descrip = _('SMS service is unavilable')
+ _logger.error(error_descrip)
+ return {
+ 'code': 424,
+ 'error': 'failed_dependency',
+ 'error_descrip': error_descrip,
+ }
+
+ # Request OPT
+ # @api.multi
+ def request_otp(self, mobile):
+ self.ensure_one()
+ if not mobile:
+ error_descrip = _('Missing mobile number')
+ _logger.error(error_descrip)
+ return {
+ 'code': 400,
+ 'error': 'missing_data',
+ 'error_descrip': error_descrip,
+ }
+
+ if self.otp and self.otp_date:
+ now = fields.Datetime.now()
+
+ otp_date = self.otp_date
+ otp_date_timte = parser.parse(str(self.otp_date))
+
+ current_date_timte = parser.parse(str(now))
+ limit_date_timte = otp_date_timte + timedelta(hours=OTP_HOUR_LIMIT)
+
+ counter = int(self.otp_count)
+ if current_date_timte > limit_date_timte and current_date_timte > otp_date_timte and counter >= OTP_COUNT_LIMIT:
+ self.otp_count = 0
+ counter = 0
+
+ if current_date_timte < limit_date_timte and counter >= OTP_COUNT_LIMIT:
+ tz = pytz.timezone('Asia/Riyadh')
+ remines = limit_date_timte.replace(tzinfo=tz).strftime("%I:%M")
+ error_descrip = _('Exceeded the limit, please request after the clock %s') % remines
+ _logger.error(error_descrip)
+ return {
+ 'code': 400,
+ 'error': 'exceeded_otp_limit',
+ 'error_descrip': error_descrip,
+ }
+
+ return self.sudo().send_otp(mobile)
+
+ # Reset Password using email account
+ # @api.multi
+ def reset_password_using_email(self):
+ self.ensure_one()
+ # Reset Password using email.. login email of user!
+ try:
+ self.action_reset_password()
+ return {
+ 'code': 200,
+ 'results': {
+ 'message': _('Email verification is successfully sent'),
+ "email": self.login,
+ }
+ }
+ except Exception as e:
+ error_descrip = _('Cannot sending email verification')
+ _logger.error(error_descrip)
+ return {
+ 'code': 424,
+ 'error': 'failed_dependency',
+ 'error_descrip': error_descrip,
+ }
+
+ # Reset Password using Verified OTP
+ # @api.multi
+ def reset_password_using_otp(self, password1, password2, otp):
+ self.ensure_one()
+ # Reset Password using OTP processing..Should be verified otp!
+ if not all([password1, password2, otp]):
+ error_descrip = _('Missing Password Values or OTP')
+ _logger.error(error_descrip)
+ return {
+ 'code': 400,
+ 'error': 'missing_data',
+ 'error_descrip': error_descrip,
+ }
+
+ if password1 != password2:
+ error_descrip = _('The entered password does not match')
+ _logger.error(error_descrip)
+ return {
+ 'code': 400,
+ 'error': 'password_not_match',
+ 'error_descrip': error_descrip,
+ }
+
+ if self.otp_password:
+ otp_original = str(self.otp_password)
+ otp_customer = str(otp)
+
+ if otp_customer == otp_original:
+ # Reset password processing..
+ self.password = password1
+ self.otp_password = None
+ self.env.cr.commit()
+ return {
+ 'code': 200,
+ 'results': {
+ 'message': _('Password is successfully reset'),
+ }
+ }
+
+ else:
+ error_descrip = _('Invalid OTP, Reset Password Failed')
+ _logger.error(error_descrip)
+ return {
+ 'code': 400,
+ 'error': 'invalid_otp',
+ 'error_descrip': error_descrip,
+ }
+ else:
+ error_descrip = _('OTP does not exist or expired, please request it again')
+ _logger.error(error_descrip)
+ return {
+ 'code': 400,
+ 'error': 'expired_otp',
+ 'error_descrip': error_descrip,
+ }
+
+
+ # Verify OTP
+ # @api.multi
+ def verify_otp(self, otp):
+ self.ensure_one()
+ # OTP verify processing..
+ if self.otp:
+ otp_original = str(self.otp)
+ otp_customer = str(otp)
+ if otp_customer != otp_original:
+ error_descrip = _('Invalid OTP, Verification Failed')
+ _logger.error(error_descrip)
+ return {
+ 'code': 400,
+ 'error': 'invalid_otp',
+ 'error_descrip': error_descrip,
+ }
+ else:
+ self.otp = None
+ return {
+ 'code': 200,
+ 'results': {
+ 'message': _('Verification is successful'),
+ }
+ }
+ else:
+ error_descrip = _('OTP does not exist or expired, please request it again')
+ _logger.error(error_descrip)
+ return {
+ 'code': 400,
+ 'error': 'expired_otp',
+ 'error_descrip': error_descrip,
+ }
+
diff --git a/odex25_benefit/takaful_core/models/takaful_account_move.py b/odex25_benefit/takaful_core/models/takaful_account_move.py
new file mode 100644
index 000000000..d1350a8ff
--- /dev/null
+++ b/odex25_benefit/takaful_core/models/takaful_account_move.py
@@ -0,0 +1,91 @@
+# -*- coding: utf-8 -*-
+from odoo import api, models, fields, _
+from odoo.addons import decimal_precision as dp
+import logging
+
+_logger = logging.getLogger(__name__)
+
+
+class AccountInvoice(models.Model):
+ _inherit = "account.move"
+
+ operation_type = fields.Selection([
+ ('in_kind_donation', 'In-Kind Donation'),
+ ('financial_donation', 'Financial Donation'),
+ ('subscription', 'Subscription'),
+ ('sponsorship', 'Sponsorship'),
+ ('financial_gift', 'Financial Gift'),
+ ('need_contribution', 'Needs Contribution')],
+ string='Operation Type',
+ )
+ operation_id = fields.Integer(readonly=True)
+
+
+class TakafulAccountMove(models.Model):
+ _name = 'takaful.account.move'
+
+ name = fields.Char(string='Order Name')
+ remote_id = fields.Char(string='Order Number')
+ partner_id = fields.Many2one('res.partner', string='Customer')
+
+ name_of = fields.Char(string='Customer Name', readonly=True)
+ email = fields.Char(string='Customer Email', readonly=True)
+ note = fields.Text(string='Comment')
+
+ amount = fields.Float(string='Amount With Vat')
+ operation_type = fields.Selection([
+ ('in_kind_donation', 'In-Kind Donation'),
+ ('financial_donation', 'Financial Donation'),
+ ('subscription', 'Subscription'),
+ ('sponsorship', 'Sponsorship'),
+ ('financial_gift', 'Financial Gift'),
+ ('need_contribution', 'Needs Contribution')],
+ string='Operation Type',
+ )
+ operation_id = fields.Integer(readonly=True)
+ type = fields.Selection(selection=[
+ ('card', _('Credit Card')),
+ ('transfer', _('Bank Transfer')),
+ ], string='Type')
+ date = fields.Date('Date', default=fields.Date.context_today)
+ qty_ordered = fields.Float(string='Qty Ordered',default=1)
+ state = fields.Selection(selection=[
+ ('initiated', _('Initiated')),
+ ('failed', _('Failed')),
+ ('rejected', _('Rejected')),
+ ('paid', _('Paid')),
+ ], default='paid', string='Status')
+ transfer_id = fields.Many2one('takaful.bank.transfer.payment', string='Transfer')
+ amount_without_vat = fields.Float(string='Amount Without Vat', compute='_get_vat_amount')
+ tax_amount = fields.Float(string='Vat', compute='_get_vat_amount',digits= dp.get_precision('Product Price'))
+
+ # @api.one
+ @api.depends('amount', 'type')
+ def _get_vat_amount(self):
+ for rec in self:
+ if not rec.type:
+ tax_percent = float(
+ self.env['ir.config_parameter'].sudo().get_param('vat_default_percent', default=0.0))
+ rec.amount_without_vat = rec.amount/(1+(tax_percent/100))
+ rec.tax_amount = round(rec.amount - rec.amount_without_vat,2)
+ else:
+ rec.amount_without_vat = rec.amount
+ rec.tax_amount = 0
+
+ def get_company(self):
+ return self.env.user.company_id
+
+
+TakafulAccountMove()
+
+"""
+vals = {
+ 'name': _('Server Update'),
+ 'partner_id': request.env.user.partner_id.id,
+ 'amount': diff,
+ 'qty_ordered': num_months,
+ 'operation_type': 'credit',
+ 'state': 'paid',
+ }
+ request.env['takaful.account.move'].sudo().create(vals)
+"""
\ No newline at end of file
diff --git a/odex25_benefit/takaful_core/views/bank_transfer_payment_view.xml b/odex25_benefit/takaful_core/views/bank_transfer_payment_view.xml
new file mode 100644
index 000000000..1975076b4
--- /dev/null
+++ b/odex25_benefit/takaful_core/views/bank_transfer_payment_view.xml
@@ -0,0 +1,157 @@
+
+
+
+
+ Bank Transfer
+ bank.payment.transfer
+ Trans/
+ 4
+
+
+
+ res.company.form
+ res.company
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ res.partner.bank.form
+ res.partner.bank
+
+
+
+
+
+
+
+
+
+ takaful.bank.transfer.payment.tree
+ takaful.bank.transfer.payment
+
+
+
+
+
+
+
+
+
+
+
+
+
+ takaful.bank.transfer.payment.form
+ takaful.bank.transfer.payment
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_benefit/takaful_core/views/config_view.xml b/odex25_benefit/takaful_core/views/config_view.xml
new file mode 100644
index 000000000..ec49be521
--- /dev/null
+++ b/odex25_benefit/takaful_core/views/config_view.xml
@@ -0,0 +1,39 @@
+
+
+
+ res.company.form.default
+ res.company
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odex25_benefit/takaful_core/views/menus_and_actions.xml b/odex25_benefit/takaful_core/views/menus_and_actions.xml
new file mode 100644
index 000000000..e80ab136d
--- /dev/null
+++ b/odex25_benefit/takaful_core/views/menus_and_actions.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odex25_benefit/takaful_core/views/res_city_view.xml b/odex25_benefit/takaful_core/views/res_city_view.xml
new file mode 100644
index 000000000..a99f02453
--- /dev/null
+++ b/odex25_benefit/takaful_core/views/res_city_view.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+ res.partner.account.type
+ res.partner
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Odex - City tree
+ res.country.city
+
+
+
+
+
+
+
+
+
+
+
+ Odex - City form
+ res.country.city
+
+
+
+
+
+
diff --git a/odex25_benefit/takaful_core/views/res_partner_title_views.xml b/odex25_benefit/takaful_core/views/res_partner_title_views.xml
new file mode 100644
index 000000000..0b82f7314
--- /dev/null
+++ b/odex25_benefit/takaful_core/views/res_partner_title_views.xml
@@ -0,0 +1,15 @@
+
+
+
+
+ res.partner.title.form.inherit
+ res.partner.title
+
+
+
+
+
+
+
+
+
diff --git a/odex25_benefit/takaful_core/views/takaful_account_move_view.xml b/odex25_benefit/takaful_core/views/takaful_account_move_view.xml
new file mode 100644
index 000000000..515dc7be4
--- /dev/null
+++ b/odex25_benefit/takaful_core/views/takaful_account_move_view.xml
@@ -0,0 +1,69 @@
+
+
+
+ takaful.account.move.tree
+ takaful.account.move
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ takaful.account.move.form
+ takaful.account.move
+
+
+
+
+
+
+ Paycards Account Moves
+ takaful.account.move
+
+ tree,form
+
+
+
+
+
+ tree
+
+
+
+
+