إصلاح خطأ Service already defined - إضافة حماية من التكرار والأخطاء
This commit is contained in:
parent
e8cf6ef840
commit
678fb4ea64
|
|
@ -6,6 +6,12 @@
|
|||
(function() {
|
||||
'use strict';
|
||||
|
||||
// تجنب التشغيل المتكرر
|
||||
if (window.SarSymbolSystem && window.SarSymbolSystem.initialized) {
|
||||
console.log('SAR Symbol System already initialized');
|
||||
return;
|
||||
}
|
||||
|
||||
// رمز العملة السعودية الجديد
|
||||
const SAR_SYMBOLS = [
|
||||
'﷼', // الرمز الكلاسيكي
|
||||
|
|
@ -100,10 +106,10 @@
|
|||
}
|
||||
});
|
||||
|
||||
// فحص شامل كـ fallback
|
||||
// فحص شامل كـ fallback - فقط العناصر الصغيرة
|
||||
const allElements = document.querySelectorAll('*');
|
||||
allElements.forEach(element => {
|
||||
if (element.textContent && element.textContent.length < 200) { // تجنب النصوص الطويلة
|
||||
if (element.textContent && element.textContent.length < 100) { // تقليل الحد لتحسين الأداء
|
||||
checkElement(element);
|
||||
}
|
||||
});
|
||||
|
|
@ -144,38 +150,57 @@
|
|||
}
|
||||
|
||||
/**
|
||||
* معالج خاص للحقول النقدية في أودو
|
||||
* معالج خاص للحقول النقدية في أودو - مع حماية من التكرار
|
||||
*/
|
||||
function handleOdooMonetaryFields() {
|
||||
// مراقبة تحديثات البيانات في أودو
|
||||
// التأكد من أن أودو موجود وأن الخدمة لم يتم تعريفها من قبل
|
||||
if (window.odoo && window.odoo.define) {
|
||||
window.odoo.define('sar_symbol.field_utils', function (require) {
|
||||
'use strict';
|
||||
|
||||
const fieldUtils = require('web.field_utils');
|
||||
const originalFormatMonetary = fieldUtils.format.monetary;
|
||||
|
||||
fieldUtils.format.monetary = function(value, field, options) {
|
||||
const result = originalFormatMonetary.apply(this, arguments);
|
||||
// فحص إذا كانت الخدمة معرفة مسبقاً
|
||||
const serviceName = 'sar_symbol.field_utils_' + Date.now(); // اسم فريد
|
||||
|
||||
try {
|
||||
window.odoo.define(serviceName, function (require) {
|
||||
'use strict';
|
||||
|
||||
// إذا كان النتيجة تحتوي على رمز العملة السعودية
|
||||
if (result && containsSarSymbol(result)) {
|
||||
// سنحتاج لمعالجة هذا في DOM لاحقاً
|
||||
setTimeout(() => {
|
||||
const elements = document.querySelectorAll('[data-field-type="monetary"]');
|
||||
elements.forEach(element => {
|
||||
if (element.textContent && containsSarSymbol(element.textContent)) {
|
||||
applySarFont(element);
|
||||
try {
|
||||
const fieldUtils = require('web.field_utils');
|
||||
|
||||
// التأكد من أن الدالة لم يتم تعديلها من قبل
|
||||
if (fieldUtils.format.monetary && !fieldUtils.format.monetary._sarModified) {
|
||||
const originalFormatMonetary = fieldUtils.format.monetary;
|
||||
|
||||
fieldUtils.format.monetary = function(value, field, options) {
|
||||
const result = originalFormatMonetary.apply(this, arguments);
|
||||
|
||||
// إذا كان النتيجة تحتوي على رمز العملة السعودية
|
||||
if (result && containsSarSymbol(result)) {
|
||||
// سنحتاج لمعالجة هذا في DOM لاحقاً
|
||||
setTimeout(() => {
|
||||
const elements = document.querySelectorAll('[data-field-type="monetary"]');
|
||||
elements.forEach(element => {
|
||||
if (element.textContent && containsSarSymbol(element.textContent)) {
|
||||
applySarFont(element);
|
||||
}
|
||||
});
|
||||
}, 100);
|
||||
}
|
||||
});
|
||||
}, 100);
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
// وضع علامة على أن الدالة تم تعديلها
|
||||
fieldUtils.format.monetary._sarModified = true;
|
||||
}
|
||||
|
||||
return fieldUtils;
|
||||
} catch (innerError) {
|
||||
console.warn('SAR Symbol: Could not modify field_utils:', innerError);
|
||||
return {};
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
return fieldUtils;
|
||||
});
|
||||
});
|
||||
} catch (error) {
|
||||
console.warn('SAR Symbol: Could not define Odoo service:', error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -185,33 +210,42 @@
|
|||
function initialize() {
|
||||
console.log('SAR Symbol Font System: Initializing...');
|
||||
|
||||
// فحص أولي
|
||||
scanAllElements();
|
||||
|
||||
// إعداد المراقبة
|
||||
setupDOMObserver();
|
||||
|
||||
// معالجة خاصة لأودو
|
||||
handleOdooMonetaryFields();
|
||||
|
||||
// فحص دوري (للتأكد)
|
||||
setInterval(scanAllElements, 5000);
|
||||
|
||||
console.log('SAR Symbol Font System: Ready');
|
||||
try {
|
||||
// فحص أولي
|
||||
scanAllElements();
|
||||
|
||||
// إعداد المراقبة
|
||||
setupDOMObserver();
|
||||
|
||||
// معالجة خاصة لأودو (بحماية من الأخطاء)
|
||||
handleOdooMonetaryFields();
|
||||
|
||||
// فحص دوري (للتأكد) - مع فترة أطول لتوفير الموارد
|
||||
setInterval(scanAllElements, 10000); // 10 ثوان بدلاً من 5
|
||||
|
||||
console.log('SAR Symbol Font System: Ready');
|
||||
} catch (error) {
|
||||
console.error('SAR Symbol Font System: Initialization failed:', error);
|
||||
}
|
||||
}
|
||||
|
||||
// تشغيل النظام
|
||||
if (document.readyState === 'loading') {
|
||||
document.addEventListener('DOMContentLoaded', initialize);
|
||||
} else {
|
||||
initialize();
|
||||
// تشغيل النظام مع حماية من الأخطاء
|
||||
try {
|
||||
if (document.readyState === 'loading') {
|
||||
document.addEventListener('DOMContentLoaded', initialize);
|
||||
} else {
|
||||
initialize();
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('SAR Symbol Font System: Failed to start:', error);
|
||||
}
|
||||
|
||||
// تصدير للاستخدام الخارجي
|
||||
// تصدير للاستخدام الخارجي مع حماية
|
||||
window.SarSymbolSystem = {
|
||||
scan: scanAllElements,
|
||||
check: checkElement,
|
||||
apply: applySarFont
|
||||
apply: applySarFont,
|
||||
initialized: true
|
||||
};
|
||||
|
||||
})();
|
||||
Loading…
Reference in New Issue