Merge pull request #5530 from expsa/kch_dev_odex25_benefit
[ADD] odex25_benefit: ADD new branch
This commit is contained in:
commit
b280481e18
|
|
@ -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
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
from . import models
|
||||||
|
|
@ -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,
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
<data noupdate="1">
|
||||||
|
|
||||||
|
<record id="action_migrate_partner_account_type" model="ir.actions.server">
|
||||||
|
<field name="name">Migrate Account Type to Booleans</field>
|
||||||
|
<field name="model_id" ref="base.model_ir_actions_server"/>
|
||||||
|
<field name="state">code</field>
|
||||||
|
<field name="code">
|
||||||
|
env['res.partner'].migrate_account_type_to_booleans()
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</data>
|
||||||
|
</odoo>
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -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,<br/<br/>Your bank transfer has been changed accepted. Please check your balance"
|
||||||
|
msgstr "عزيزي %s ، <br/<br/> تم تغيير التحويل المصرفي الخاص بك. يرجى التحقق من رصيدك"
|
||||||
|
|
||||||
|
#. module: takaful_core
|
||||||
|
#: code:addons/takaful_core/models/bank_transfer_payment.py:94
|
||||||
|
#, python-format
|
||||||
|
msgid "Dear %s,<br/<br/>Your bank transfer has been changed to canceled. Please check with your bank"
|
||||||
|
msgstr "عزيزي %s ، <br/<br/> تم تغيير التحويل المصرفي الخاص بك إلى إلغاء. يرجى التحقق من البنك الذي تتعامل معه"
|
||||||
|
|
||||||
|
#. module: takaful_core
|
||||||
|
#: code:addons/takaful_core/models/bank_transfer_payment.py:47
|
||||||
|
#, python-format
|
||||||
|
msgid "Dear %s,<br/><br/>Your bank transfer has been rejected."
|
||||||
|
msgstr "عزيزي %s ،<br/><br/> تم رفض التحويل المصرفي الخاص بك."
|
||||||
|
|
||||||
|
#. 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"
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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,<br/><br/>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,<br/<br/>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,<br/<br/>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'})
|
||||||
|
|
||||||
|
|
@ -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)
|
||||||
|
|
||||||
|
|
@ -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)
|
||||||
|
|
@ -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_<type>` 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')
|
||||||
|
|
@ -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,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -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)
|
||||||
|
"""
|
||||||
|
|
@ -0,0 +1,157 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="transfer_sequence_bank" model="ir.sequence">
|
||||||
|
<field name="name">Bank Transfer</field>
|
||||||
|
<field name="code">bank.payment.transfer</field>
|
||||||
|
<field name="prefix">Trans/</field>
|
||||||
|
<field name="padding">4</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="view_order_form_inherit_res_comapny" model="ir.ui.view">
|
||||||
|
<field name="name">res.company.form</field>
|
||||||
|
<field name="model">res.company</field>
|
||||||
|
<field name="inherit_id" ref="base.view_company_form"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//h1" position="after">
|
||||||
|
<h2>
|
||||||
|
<field name="company_name"/>
|
||||||
|
</h2>
|
||||||
|
</xpath>
|
||||||
|
<!-- <xpath expr="//field[@name='report_footer']" position="after">-->
|
||||||
|
<!-- <div>-->
|
||||||
|
<!-- <label for="bank_account_count"/>-->
|
||||||
|
<!-- <button type="action" class="btn-link"-->
|
||||||
|
<!-- name="%(base.action_res_partner_bank_account_form)d"-->
|
||||||
|
<!-- context="{'search_default_company_id': active_id, 'default_company_id': active_id}">-->
|
||||||
|
<!-- <field string="Bank account(s)" name="bank_account_count" widget="statinfo"/>-->
|
||||||
|
<!-- </button>-->
|
||||||
|
<!-- </div>-->
|
||||||
|
|
||||||
|
<!-- </xpath>-->
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
<record id="bank_account_image_add_view" model="ir.ui.view">
|
||||||
|
<field name="name">res.partner.bank.form</field>
|
||||||
|
<field name="model">res.partner.bank</field>
|
||||||
|
<field name="inherit_id" ref="base.view_partner_bank_form"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//field[@name='acc_number']" position="after">
|
||||||
|
<field name="bank_img" string="Bank Image" widget="image" class="oe_avatar"/>
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="view_takaful_bank_payment_transfer_tree" model="ir.ui.view">
|
||||||
|
<field name="name">takaful.bank.transfer.payment.tree</field>
|
||||||
|
<field name="model">takaful.bank.transfer.payment</field>
|
||||||
|
<field name="priority" eval="8"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<tree string="Bank Transfer" decoration-muted="state in ('cancel','accept')"
|
||||||
|
decoration-danger="state in ('reject','pending')" decoration-info="state=='draft'">
|
||||||
|
<field name="partner_id"/>
|
||||||
|
<field name="number"/>
|
||||||
|
<field name="name"/>
|
||||||
|
<field name="name_of"/>
|
||||||
|
<field name="amount"/>
|
||||||
|
<field name="state"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
<record id="view_takaful_bank_payment_transfer_form" model="ir.ui.view">
|
||||||
|
<field name="name">takaful.bank.transfer.payment.form</field>
|
||||||
|
<field name="model">takaful.bank.transfer.payment</field>
|
||||||
|
<field name="priority" eval="8"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form string="Bank Transfer">
|
||||||
|
<header>
|
||||||
|
<button name="action_pending" string="Pending" states="draft" class="oe_highlight"
|
||||||
|
type="object"/>
|
||||||
|
<button name="action_accepted" string="Accept" states="pending,draft" class="oe_highlight"
|
||||||
|
type="object"/>
|
||||||
|
<button name="action_rejected" string="Reject" states="pending,draft" class="oe_highlight"
|
||||||
|
type="object"/>
|
||||||
|
<button name="action_canceled" string="Cancel" states="accept,reject" class="oe_highlight"
|
||||||
|
type="object"/>
|
||||||
|
<button name="action_reset_to_draft" string="Set Draft" states="cancel" class="oe_highlight"
|
||||||
|
type="object"/>
|
||||||
|
<field name="state" widget="statusbar" statusbar_visible="draft,pending,accept"/>
|
||||||
|
</header>
|
||||||
|
<sheet>
|
||||||
|
<div class="oe_title">
|
||||||
|
<h2>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<field name="number" style="padding-right:10px"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</h2>
|
||||||
|
</div>
|
||||||
|
<group>
|
||||||
|
<group>
|
||||||
|
<field name="partner_id"/>
|
||||||
|
<field name="name"/>
|
||||||
|
<field name="name_of"/>
|
||||||
|
<field name="transfer_date"/>
|
||||||
|
</group>
|
||||||
|
<group>
|
||||||
|
<field name="transfer_attachment" filename="filename"/>
|
||||||
|
<field name="filename" invisible="1"/>
|
||||||
|
<field name="move_id"/>
|
||||||
|
<field name="amount"/>
|
||||||
|
</group>
|
||||||
|
</group>
|
||||||
|
</sheet>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
<!-- <record id="view_takaful_bank_payment_transfer_search" model="ir.ui.view">-->
|
||||||
|
<!-- <field name="name">takaful.bank.transfer.payment.search</field>-->
|
||||||
|
<!-- <field name="model">takaful.bank.transfer.payment</field>-->
|
||||||
|
<!-- <field name="priority" eval="8"/>-->
|
||||||
|
<!-- <field name="arch" type="xml">-->
|
||||||
|
<!-- <search string="Bank Transfer">-->
|
||||||
|
<!-- <field name="partner_id"/>-->
|
||||||
|
<!-- <field name="number"/>-->
|
||||||
|
<!-- <field name="name"/>-->
|
||||||
|
<!-- <field name="name_of"/>-->
|
||||||
|
<!-- <field name="amount"/>-->
|
||||||
|
<!-- <field name="state"/>-->
|
||||||
|
<!-- <newline/>-->
|
||||||
|
<!-- <group expand="0" string="Group By...">-->
|
||||||
|
<!-- <filter string="Customer" domain="[]"-->
|
||||||
|
<!-- context="{'group_by':'partner_id'}"/>-->
|
||||||
|
<!-- <filter string="State" domain="[]"-->
|
||||||
|
<!-- context="{'group_by':'state'}"/>-->
|
||||||
|
<!-- </group>-->
|
||||||
|
<!-- </search>-->
|
||||||
|
<!-- </field>-->
|
||||||
|
<!-- </record>-->
|
||||||
|
|
||||||
|
<!-- <record model="ir.actions.act_window" id="act_takaful_bank_transfer_view">-->
|
||||||
|
<!-- <field name="name">Bank Transfer</field>-->
|
||||||
|
<!-- <field name="type">ir.actions.act_window</field>-->
|
||||||
|
<!-- <field name="res_model">takaful.bank.transfer.payment</field>-->
|
||||||
|
<!-- <field name="view_type">form</field>-->
|
||||||
|
<!-- <field name="view_mode">tree,form</field>-->
|
||||||
|
<!-- <field name="search_view_id" ref="view_takaful_bank_payment_transfer_search"/>-->
|
||||||
|
<!-- <field name="domain">[]</field>-->
|
||||||
|
<!-- <field name="context">{}</field>-->
|
||||||
|
<!-- </record>-->
|
||||||
|
<!-- <record model="ir.actions.act_window.view" id="act_takaful_bank_transfer_form">-->
|
||||||
|
<!-- <field name="act_window_id" ref="act_takaful_bank_transfer_view"/>-->
|
||||||
|
<!-- <field name="sequence" eval="20"/>-->
|
||||||
|
<!-- <field name="view_mode">form</field>-->
|
||||||
|
<!-- <field name="view_id" ref="view_takaful_bank_payment_transfer_form"/>-->
|
||||||
|
<!-- </record>-->
|
||||||
|
<!-- <record model="ir.actions.act_window.view" id="act_takaful_bank_transfer_tree">-->
|
||||||
|
<!-- <field name="act_window_id" ref="act_takaful_bank_transfer_view"/>-->
|
||||||
|
<!-- <field name="sequence" eval="10"/>-->
|
||||||
|
<!-- <field name="view_mode">tree</field>-->
|
||||||
|
<!-- <field name="view_id" ref="view_takaful_bank_payment_transfer_tree"/>-->
|
||||||
|
<!-- </record>-->
|
||||||
|
</odoo>
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
<record id="view_company_form_inherit_otp" model="ir.ui.view">
|
||||||
|
<field name="name">res.company.form.default</field>
|
||||||
|
<field name="model">res.company</field>
|
||||||
|
<field name="inherit_id" ref="base.view_company_form"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//page" position="after">
|
||||||
|
<page string="OTP Information">
|
||||||
|
<group>
|
||||||
|
<field name="use_otp_login" style="margin-bottom:10px; margin-left:10px;"/>
|
||||||
|
<field name="otp_provider_token" attrs="{'required':[('use_otp_login','=',True)],'invisible':[('use_otp_login','!=',True)]}" style="margin-bottom:10px; margin-left:10px;" password="True"/>
|
||||||
|
<field name="otp_sender_name" attrs="{'required':[('use_otp_login','=',True)],'invisible':[('use_otp_login','!=',True)]}" style="margin-bottom:10px; margin-left:10px;"/>
|
||||||
|
</group>
|
||||||
|
</page>
|
||||||
|
|
||||||
|
<page string="SMS Information">
|
||||||
|
<group>
|
||||||
|
<field name="use_sms_notification" style="margin-bottom:10px; margin-left:10px;" />
|
||||||
|
<field name="sms_provider_token" attrs="{'required':[('use_sms_notification','=',True)],'invisible':[('use_sms_notification','!=',True)]}" style="margin-bottom:10px; margin-left:10px;" password="True" />
|
||||||
|
<field name="sms_sender_name" attrs="{'required':[('use_sms_notification','=',True)],'invisible':[('use_sms_notification','!=',True)]}" style="margin-bottom:10px; margin-left:10px;" />
|
||||||
|
</group>
|
||||||
|
</page>
|
||||||
|
|
||||||
|
<page string="Moyaser Integration">
|
||||||
|
<group>
|
||||||
|
<label for="moyaser_public_key" string="Publicy Key" class="col-xs-3 col-md-3 o_light_label"/>
|
||||||
|
<field name="moyaser_public_key" placeholder="Moyaser Publicy Key" password="True" nolabel="1"/>
|
||||||
|
</group>
|
||||||
|
<label for="vat_default_percent" string="Default Vat Value"
|
||||||
|
class="col-xs-3 col-md-3 o_light_label"/>
|
||||||
|
<field name="vat_default_percent" placeholder="Default Vat Value" nolabel="1"/>
|
||||||
|
</page>
|
||||||
|
|
||||||
|
</xpath>
|
||||||
|
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
</odoo>
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
<data>
|
||||||
|
|
||||||
|
<menuitem id="takaful_online_paycard_menu" name="Takaful Online Payments" parent="account.menu_finance"/>
|
||||||
|
<!-- <menuitem id="online_paycard_menu" name="Online Payments" action="takaful_core.takaful_account_move_list_action" parent="account.menu_finance"/> -->
|
||||||
|
|
||||||
|
<menuitem sequence="1" id="takaful_account_move_menu" name="Invoices" parent="takaful_online_paycard_menu" action="takaful_core.takaful_account_move_list_action"/>
|
||||||
|
|
||||||
|
<!-- <menuitem sequence="2" id="takaful_bank_transfer_payment_menu" name="Bank Transfers" parent="takaful_online_paycard_menu" action="takaful_core.act_takaful_bank_transfer_view"/>-->
|
||||||
|
|
||||||
|
</data>
|
||||||
|
</odoo>
|
||||||
|
|
@ -0,0 +1,72 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
<data>
|
||||||
|
<!-- Inherit Form res.partner View to add account Type -->
|
||||||
|
<record id="res_partner_data" model="ir.ui.view">
|
||||||
|
<field name="name">res.partner.account.type</field>
|
||||||
|
<field name="model">res.partner</field>
|
||||||
|
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//div/h1" position="after">
|
||||||
|
<!-- Add your fields or attributes here -->
|
||||||
|
<group>
|
||||||
|
<!-- <field name="account_type" groups="odex_benefit.group_benefit_info"/> -->
|
||||||
|
<field name="code" groups="odex_benefit.group_benefit_info"/>
|
||||||
|
<field name="activation_mode" invisible="1"/>
|
||||||
|
<field name="user_type" invisible="1"/>
|
||||||
|
</group>
|
||||||
|
</xpath>
|
||||||
|
<xpath expr="//notebook" position="inside">
|
||||||
|
<page string="Account Type">
|
||||||
|
<group>
|
||||||
|
<group>
|
||||||
|
<field name="is_family" readonly="1"/>
|
||||||
|
<field name="is_sponsor_portal" readonly="1"/>
|
||||||
|
<field name="is_benefit" readonly="1"/>
|
||||||
|
</group>
|
||||||
|
<group>
|
||||||
|
<field name="is_vendor" readonly="1"/>
|
||||||
|
<field name="is_donor" readonly="1"/>
|
||||||
|
</group>
|
||||||
|
</group>
|
||||||
|
</page>
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
<record id="view_res_city_tree" model="ir.ui.view">
|
||||||
|
<field name="name">Odex - City tree</field>
|
||||||
|
<field name="model">res.country.city</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<tree string="Cities">
|
||||||
|
<field name="code"/>
|
||||||
|
<field name="name"/>
|
||||||
|
<field name="state_id"/>
|
||||||
|
<field name="country_id"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="view_res_city_form" model="ir.ui.view">
|
||||||
|
<field name="name">Odex - City form</field>
|
||||||
|
<field name="model">res.country.city</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form string="City">
|
||||||
|
<sheet>
|
||||||
|
<group>
|
||||||
|
<group>
|
||||||
|
<field name="code" required="True"/>
|
||||||
|
<field name="state_id" domain="[('country_id', '=', country_id)]"
|
||||||
|
required="True"/>
|
||||||
|
|
||||||
|
</group>
|
||||||
|
<group>
|
||||||
|
<field name="name" required="True"/>
|
||||||
|
<field name="country_id"/>
|
||||||
|
</group>
|
||||||
|
</group>
|
||||||
|
</sheet>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
</odoo>
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="view_partner_title_inherit_tree" model="ir.ui.view">
|
||||||
|
<field name="name">res.partner.title.form.inherit</field>
|
||||||
|
<field name="model">res.partner.title</field>
|
||||||
|
<field name="inherit_id" ref="base.view_partner_title_tree"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//field[@name='shortcut']" position="after">
|
||||||
|
<field name="position"/>
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
|
|
@ -0,0 +1,69 @@
|
||||||
|
<odoo>
|
||||||
|
<data>
|
||||||
|
<record id="takaful_account_move_tree_viewx" model="ir.ui.view">
|
||||||
|
<field name="name">takaful.account.move.tree</field>
|
||||||
|
<field name="model">takaful.account.move</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<tree string="Invoices">
|
||||||
|
<field name="name"></field>
|
||||||
|
<field name="partner_id"></field>
|
||||||
|
<field name="email"></field>
|
||||||
|
<field name="operation_type"></field>
|
||||||
|
<field name="type"></field>
|
||||||
|
<field name="date"></field>
|
||||||
|
<field name="state"></field>
|
||||||
|
<field name="amount_without_vat"></field>
|
||||||
|
<field name="tax_amount"></field>
|
||||||
|
<field name="amount"></field>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="takaful_account_move_form" model="ir.ui.view">
|
||||||
|
<field name="name">takaful.account.move.form</field>
|
||||||
|
<field name="model">takaful.account.move</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form string="server">
|
||||||
|
<sheet>
|
||||||
|
<group>
|
||||||
|
<group>
|
||||||
|
<field name="id" string="Invoice Number"></field>
|
||||||
|
<field name="partner_id"></field>
|
||||||
|
<field name="name_of"></field>
|
||||||
|
<field name="email"></field>
|
||||||
|
<field name="operation_type"></field>
|
||||||
|
<field name="type"></field>
|
||||||
|
<field name="qty_ordered"></field>
|
||||||
|
<field name="amount_without_vat"></field>
|
||||||
|
</group>
|
||||||
|
<group>
|
||||||
|
<field name="date"></field>
|
||||||
|
<field name="state"></field>
|
||||||
|
<field name="amount"></field>
|
||||||
|
<field name="tax_amount"></field>
|
||||||
|
</group>
|
||||||
|
<group>
|
||||||
|
<field name="note"></field>
|
||||||
|
</group>
|
||||||
|
</group>
|
||||||
|
</sheet>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record model="ir.actions.act_window" id="takaful_account_move_list_action">
|
||||||
|
<field name="name">Paycards Account Moves</field>
|
||||||
|
<field name="res_model">takaful.account.move</field>
|
||||||
|
<!-- <field name="view_type">form</field>-->
|
||||||
|
<field name="view_mode">tree,form</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record model="ir.actions.act_window.view" id="takaful_account_move_list_action_tree">
|
||||||
|
<field name="act_window_id" ref="takaful_account_move_list_action"/>
|
||||||
|
<field name="sequence" eval="10"/>
|
||||||
|
<field name="view_mode">tree</field>
|
||||||
|
<field name="view_id" ref="takaful_core.takaful_account_move_tree_viewx"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</data>
|
||||||
|
</odoo>
|
||||||
Loading…
Reference in New Issue