From 678fb4ea64b376012f7aee10061ceef46a87f8a7 Mon Sep 17 00:00:00 2001 From: Mohamed Eltayar <152964073+maltayyar2@users.noreply.github.com> Date: Sun, 31 Aug 2025 23:00:49 +0300 Subject: [PATCH] =?UTF-8?q?=D8=A5=D8=B5=D9=84=D8=A7=D8=AD=20=D8=AE=D8=B7?= =?UTF-8?q?=D8=A3=20Service=20already=20defined=20-=20=D8=A5=D8=B6=D8=A7?= =?UTF-8?q?=D9=81=D8=A9=20=D8=AD=D9=85=D8=A7=D9=8A=D8=A9=20=D9=85=D9=86=20?= =?UTF-8?q?=D8=A7=D9=84=D8=AA=D9=83=D8=B1=D8=A7=D8=B1=20=D9=88=D8=A7=D9=84?= =?UTF-8?q?=D8=A3=D8=AE=D8=B7=D8=A7=D8=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../am_sar_symbol/static/src/js/sar_symbol.js | 130 +++++++++++------- 1 file changed, 82 insertions(+), 48 deletions(-) diff --git a/odex25_base/am_sar_symbol/static/src/js/sar_symbol.js b/odex25_base/am_sar_symbol/static/src/js/sar_symbol.js index cc35264f8..c4a94b716 100644 --- a/odex25_base/am_sar_symbol/static/src/js/sar_symbol.js +++ b/odex25_base/am_sar_symbol/static/src/js/sar_symbol.js @@ -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 }; })(); \ No newline at end of file