560 lines
27 KiB
Python
560 lines
27 KiB
Python
"""
|
|
Management command to initialize onboarding acknowledgement data
|
|
"""
|
|
from django.core.management.base import BaseCommand
|
|
from django.utils import timezone
|
|
from apps.accounts.models import (
|
|
AcknowledgementContent,
|
|
AcknowledgementChecklistItem,
|
|
Role
|
|
)
|
|
|
|
|
|
class Command(BaseCommand):
|
|
help = 'Initialize default acknowledgement content and checklist items'
|
|
|
|
def handle(self, *args, **options):
|
|
self.stdout.write('Initializing onboarding acknowledgement data...')
|
|
|
|
# Create generic content (applies to all users)
|
|
self._create_generic_content()
|
|
|
|
# Create role-specific content
|
|
self._create_px_admin_content()
|
|
self._create_hospital_admin_content()
|
|
self._create_department_manager_content()
|
|
self._create_physician_content()
|
|
self._create_staff_content()
|
|
|
|
self.stdout.write(self.style.SUCCESS('Onboarding data initialized successfully!'))
|
|
|
|
def _create_generic_content(self):
|
|
"""Create generic acknowledgement content for all users"""
|
|
self.stdout.write('Creating generic content...')
|
|
|
|
role = None # Generic content
|
|
|
|
# Create generic content items
|
|
contents = [
|
|
{
|
|
'code': 'INTRO_PX360',
|
|
'order': 1,
|
|
'title_en': 'Welcome to PX360',
|
|
'title_ar': 'مرحبًا بك في PX360',
|
|
'description_en': 'Overview of the PX360 Patient Experience Management System',
|
|
'description_ar': 'نظرة عامة على نظام إدارة تجربة المريض PX360',
|
|
'content_en': """
|
|
<h2>Welcome to PX360</h2>
|
|
<p>PX360 is a comprehensive Patient Experience Management System designed to help healthcare organizations improve patient satisfaction and quality of care.</p>
|
|
|
|
<h3>Key Features:</h3>
|
|
<ul>
|
|
<li><strong>Patient Feedback Collection:</strong> Gather and analyze patient feedback across multiple channels</li>
|
|
<li><strong>Analytics & Reporting:</strong> Real-time dashboards and detailed reports</li>
|
|
<li><strong>Complaint Management:</strong> Streamlined process for handling patient complaints</li>
|
|
<li><strong>Quality Observations:</strong> Track and improve service quality</li>
|
|
<li><strong>Physician Management:</strong> Manage physician profiles and credentials</li>
|
|
<li><strong>Call Center Integration:</strong> Integrated call center for patient communication</li>
|
|
</ul>
|
|
|
|
<h3>Getting Started:</h3>
|
|
<p>This wizard will guide you through the essential features and policies of the system. Please review each section carefully and acknowledge the checklist items to complete your onboarding.</p>
|
|
""",
|
|
'content_ar': """
|
|
<h2>مرحبًا بك في PX360</h2>
|
|
<p>PX360 هو نظام شامل لإدارة تجربة المرضى مصمم لمساعدة المؤسسات الصحية على تحسين رضا المرضى وجودة الرعاية.</p>
|
|
|
|
<h3>الميزات الرئيسية:</h3>
|
|
<ul>
|
|
<li><strong>جمع ملاحظات المرضى:</strong> جمع وتحليل ملاحظات المرضى عبر قنوات متعددة</li>
|
|
<li><strong>التحليلات والتقارير:</strong> لوحات تحكم في الوقت الفعلي وتقارير مفصلة</li>
|
|
<li><strong>إدارة الشكاوى:</strong> عملية مبسطة للتعامل مع شكاوى المرضى</li>
|
|
<li><strong>ملاحظات الجودة:</strong> تتبع وتحسين جودة الخدمة</li>
|
|
<li><strong>إدارة الأطباء:</strong> إدارة ملفات الأطباء واعتماداتهم</li>
|
|
<li><strong>تكامل مركز الاتصال:</strong> مركز اتصال متكامل للتواصل مع المرضى</li>
|
|
</ul>
|
|
|
|
<h3>البدء:</h3>
|
|
<p>سيقوم هذا المعالج بإرشادك عبر الميزات والسياسات الأساسية للنظام. يرجى مراجعة كل قسم بعناية والاعتراف بالبنود المدرجة في القائمة لإكمال التسجيل.</p>
|
|
"""
|
|
},
|
|
{
|
|
'code': 'DATA_PRIVACY',
|
|
'order': 2,
|
|
'title_en': 'Data Privacy & Security',
|
|
'title_ar': 'خصوصية البيانات والأمان',
|
|
'description_en': 'Understanding data protection and security policies',
|
|
'description_ar': 'فهم سياسات حماية البيانات والأمان',
|
|
'content_en': """
|
|
<h2>Data Privacy & Security</h2>
|
|
|
|
<h3>Data Protection Principles:</h3>
|
|
<ul>
|
|
<li>All patient data is confidential and protected</li>
|
|
<li>Access is granted based on role and need-to-know basis</li>
|
|
<li>Data is encrypted in transit and at rest</li>
|
|
<li>All access is logged and auditable</li>
|
|
</ul>
|
|
|
|
<h3>User Responsibilities:</h3>
|
|
<ul>
|
|
<li>Keep your password secure and do not share it</li>
|
|
<li>Log out when leaving your workstation</li>
|
|
<li>Report any suspected security incidents immediately</li>
|
|
<li>Access only the data you need for your role</li>
|
|
</ul>
|
|
""",
|
|
'content_ar': """
|
|
<h2>خصوصية البيانات والأمان</h2>
|
|
|
|
<h3>مبادئ حماية البيانات:</h3>
|
|
<ul>
|
|
<li>جميع بيانات المرضى سرية ومحمية</li>
|
|
<li>يتم منح الوصول بناءً على الدورة والحاجة للمعرفة</li>
|
|
<li>يتم تشفير البيانات أثناء النقل والتخزين</li>
|
|
<li>جميع عمليات الوصول مسجلة وقابلة للتدقيق</li>
|
|
</ul>
|
|
|
|
<h3>مسؤوليات المستخدم:</h3>
|
|
<ul>
|
|
<li>احتفظ بكلمة المرور آمنة ولا تشاركها مع أحد</li>
|
|
<li>قم بتسجيل الخروج عند مغادرة محطة العمل</li>
|
|
<li>أبلغ عن أي حوادث أمنية مشتبه بها فورًا</li>
|
|
<li>الوصول فقط إلى البيانات التي تحتاجها لدورك</li>
|
|
</ul>
|
|
"""
|
|
},
|
|
{
|
|
'code': 'SYSTEM_USAGE',
|
|
'order': 3,
|
|
'title_en': 'System Usage Guidelines',
|
|
'title_ar': 'إرشادات استخدام النظام',
|
|
'description_en': 'Best practices for using PX360 effectively',
|
|
'description_ar': 'أفضل الممارسات لاستخدام PX360 بشكل فعال',
|
|
'content_en': """
|
|
<h2>System Usage Guidelines</h2>
|
|
|
|
<h3>Best Practices:</h3>
|
|
<ul>
|
|
<li><strong>Regular Updates:</strong> Check dashboards daily for updates</li>
|
|
<li><strong>Timely Actions:</strong> Respond to patient feedback and complaints promptly</li>
|
|
<li><strong>Accurate Data:</strong> Ensure all entered data is accurate and complete</li>
|
|
<li><strong>Communication:</strong> Use the system for all official communications</li>
|
|
</ul>
|
|
|
|
<h3>Support:</h3>
|
|
<p>If you need assistance:</p>
|
|
<ul>
|
|
<li>Contact your department manager</li>
|
|
<li>Submit a support ticket through the help center</li>
|
|
<li>Refer to the user documentation</li>
|
|
</ul>
|
|
""",
|
|
'content_ar': """
|
|
<h2>إرشادات استخدام النظام</h2>
|
|
|
|
<h3>أفضل الممارسات:</h3>
|
|
<ul>
|
|
<li><strong>التحديثات المنتظمة:</strong> تحقق من لوحات التحكم يوميًا للحصول على التحديثات</li>
|
|
<li><strong>الإجراءات في الوقت المناسب:</strong> استجب لملاحظات وشكاوى المرضى بسرعة</li>
|
|
<li><strong>البيانات الدقيقة:</strong> تأكد من أن جميع البيانات المدخلة دقيقة ومكتملة</li>
|
|
<li><strong>التواصل:</strong> استخدم النظام لجميع الاتصالات الرسمية</li>
|
|
</ul>
|
|
|
|
<h3>الدعم:</h3>
|
|
<p>إذا كنت بحاجة إلى المساعدة:</p>
|
|
<ul>
|
|
<li>اتصل بمدير قسمك</li>
|
|
<li>قدم تذكرة دعم من خلال مركز المساعدة</li>
|
|
<li>راجع وثائق المستخدم</li>
|
|
</ul>
|
|
"""
|
|
}
|
|
]
|
|
|
|
for content_data in contents:
|
|
AcknowledgementContent.objects.update_or_create(
|
|
code=content_data['code'],
|
|
role=role,
|
|
defaults=content_data
|
|
)
|
|
|
|
# Create checklist items for generic content
|
|
intro_content = AcknowledgementContent.objects.get(code='INTRO_PX360')
|
|
privacy_content = AcknowledgementContent.objects.get(code='DATA_PRIVACY')
|
|
usage_content = AcknowledgementContent.objects.get(code='SYSTEM_USAGE')
|
|
|
|
checklist_items = [
|
|
{
|
|
'content': intro_content,
|
|
'code': 'INTRO_ACK',
|
|
'order': 1,
|
|
'text_en': 'I have reviewed the PX360 system overview',
|
|
'text_ar': 'لقد راجعت نظرة عامة على نظام PX360',
|
|
'description_en': 'Confirm that you understand the system purpose and key features',
|
|
'description_ar': 'أكد أنك تفهم الغرض من النظام والميزات الرئيسية',
|
|
'is_required': True
|
|
},
|
|
{
|
|
'content': privacy_content,
|
|
'code': 'PRIVACY_ACK',
|
|
'order': 1,
|
|
'text_en': 'I acknowledge and agree to the data privacy and security policies',
|
|
'text_ar': 'أعترف وأوافق على سياسات خصوصية البيانات والأمان',
|
|
'description_en': 'Confirm that you understand your responsibilities regarding data protection',
|
|
'description_ar': 'أكد أنك تفهم مسؤولياتك فيما يتعلق بحماية البيانات',
|
|
'is_required': True
|
|
},
|
|
{
|
|
'content': privacy_content,
|
|
'code': 'PRIVACY_PASSWORD',
|
|
'order': 2,
|
|
'text_en': 'I will keep my password secure and report any security incidents',
|
|
'text_ar': 'سأحتفظ بكلمة المرور آمنة وسأبلغ عن أي حوادث أمنية',
|
|
'description_en': 'Commit to password security and incident reporting',
|
|
'description_ar': 'الالتزام بأمان كلمة المرور والإبلاغ عن الحوادث',
|
|
'is_required': True
|
|
},
|
|
{
|
|
'content': usage_content,
|
|
'code': 'USAGE_ACK',
|
|
'order': 1,
|
|
'text_en': 'I will follow system usage guidelines and best practices',
|
|
'text_ar': 'سأتبع إرشادات استخدام النظام وأفضل الممارسات',
|
|
'description_en': 'Commit to using the system effectively and responsibly',
|
|
'description_ar': 'الالتزام باستخدام النظام بفعالية ومسؤولية',
|
|
'is_required': True
|
|
}
|
|
]
|
|
|
|
for item_data in checklist_items:
|
|
AcknowledgementChecklistItem.objects.update_or_create(
|
|
code=item_data['code'],
|
|
defaults=item_data
|
|
)
|
|
|
|
def _create_px_admin_content(self):
|
|
"""Create PX Admin specific content"""
|
|
try:
|
|
role = Role.objects.get(name='PX_ADMIN')
|
|
except Role.DoesNotExist:
|
|
self.stdout.write(self.style.WARNING('PX Admin role not found, skipping PX Admin content'))
|
|
return
|
|
|
|
self.stdout.write('Creating PX Admin content...')
|
|
|
|
content_data = {
|
|
'code': 'PX_ADMIN_RESP',
|
|
'role': role,
|
|
'order': 4,
|
|
'title_en': 'PX Admin Responsibilities',
|
|
'title_ar': 'مسؤوليات مسؤول PX',
|
|
'description_en': 'Understanding PX Admin role and permissions',
|
|
'description_ar': 'فهم دور وصلاحيات مسؤول PX',
|
|
'content_en': """
|
|
<h2>PX Admin Responsibilities</h2>
|
|
<p>As a PX Admin, you have full access to all system features and are responsible for:</p>
|
|
<ul>
|
|
<li>User and role management</li>
|
|
<li>System configuration</li>
|
|
<li>Audit and compliance</li>
|
|
<li>Content management for acknowledgements</li>
|
|
<li>Organizational settings</li>
|
|
</ul>
|
|
<p><strong>Note:</strong> With great power comes great responsibility. All your actions are logged and audited.</p>
|
|
""",
|
|
'content_ar': """
|
|
<h2>مسؤوليات مسؤول PX</h2>
|
|
<p>بصفتك مسؤول PX، لديك حق الوصول الكامل إلى جميع ميزات النظام ومسؤول عن:</p>
|
|
<ul>
|
|
<li>إدارة المستخدمين والأدوار</li>
|
|
<li>تكوين النظام</li>
|
|
<li>التدقيق والامتثال</li>
|
|
<li>إدارة المحتوى للاعترافات</li>
|
|
<li>إعدادات المؤسسة</li>
|
|
</ul>
|
|
<p><strong>ملاحظة:</strong> مع السلطة العالية تأتي المسؤولية الكبيرة. جميع إجراءاتك مسجلة وقابلة للتدقيق.</p>
|
|
"""
|
|
}
|
|
|
|
content, _ = AcknowledgementContent.objects.update_or_create(
|
|
code=content_data['code'],
|
|
role=role,
|
|
defaults=content_data
|
|
)
|
|
|
|
checklist_items = [
|
|
{
|
|
'content': content,
|
|
'code': 'PX_ADMIN_OVERSIGHT',
|
|
'order': 1,
|
|
'text_en': 'I understand my role as PX Admin and will use permissions responsibly',
|
|
'text_ar': 'أفهم دوري كمسؤول PX وسأستخدم الصلاحيات بمسؤولية',
|
|
'description_en': 'Accept responsibility for PX Admin role',
|
|
'description_ar': 'قبول المسؤولية لدور مسؤول PX',
|
|
'is_required': True
|
|
}
|
|
]
|
|
|
|
for item_data in checklist_items:
|
|
AcknowledgementChecklistItem.objects.update_or_create(
|
|
code=item_data['code'],
|
|
defaults=item_data
|
|
)
|
|
|
|
def _create_hospital_admin_content(self):
|
|
"""Create Hospital Admin specific content"""
|
|
try:
|
|
role = Role.objects.get(name='HOSPITAL_ADMIN')
|
|
except Role.DoesNotExist:
|
|
return
|
|
|
|
self.stdout.write('Creating Hospital Admin content...')
|
|
|
|
content_data = {
|
|
'code': 'HOSPITAL_ADMIN_RESP',
|
|
'role': role,
|
|
'order': 4,
|
|
'title_en': 'Hospital Admin Responsibilities',
|
|
'title_ar': 'مسؤوليات مدير المستشفى',
|
|
'description_en': 'Understanding Hospital Admin role and scope',
|
|
'description_ar': 'فهم دور ونطاق مدير المستشفى',
|
|
'content_en': """
|
|
<h2>Hospital Admin Responsibilities</h2>
|
|
<p>As a Hospital Admin, you can manage users, view reports, and oversee operations within your hospital.</p>
|
|
<ul>
|
|
<li>Manage hospital-level settings</li>
|
|
<li>Oversee department operations</li>
|
|
<li>Access comprehensive analytics</li>
|
|
<li>Manage hospital staff</li>
|
|
</ul>
|
|
""",
|
|
'content_ar': """
|
|
<h2>مسؤوليات مدير المستشفى</h2>
|
|
<p>بصفتك مدير المستشفى، يمكنك إدارة المستخدمين وعرض التقارير والإشراف على العمليات داخل مستشفاك.</p>
|
|
<ul>
|
|
<li>إدارة إعدادات مستوى المستشفى</li>
|
|
<li>الإشراف على عمليات الأقسام</li>
|
|
<li>الوصول إلى تحليلات شاملة</li>
|
|
<li>إدارة موظفي المستشفى</li>
|
|
</ul>
|
|
"""
|
|
}
|
|
|
|
content, _ = AcknowledgementContent.objects.update_or_create(
|
|
code=content_data['code'],
|
|
role=role,
|
|
defaults=content_data
|
|
)
|
|
|
|
checklist_items = [
|
|
{
|
|
'content': content,
|
|
'code': 'HOSPITAL_ADMIN_SCOPE',
|
|
'order': 1,
|
|
'text_en': 'I understand my Hospital Admin role and hospital-level responsibilities',
|
|
'text_ar': 'أفهم دوري كمدير مستشفى ومسؤولياتي على مستوى المستشفى',
|
|
'description_en': 'Accept responsibility for Hospital Admin role',
|
|
'description_ar': 'قبول المسؤولية لدور مدير المستشفى',
|
|
'is_required': True
|
|
}
|
|
]
|
|
|
|
for item_data in checklist_items:
|
|
AcknowledgementChecklistItem.objects.update_or_create(
|
|
code=item_data['code'],
|
|
defaults=item_data
|
|
)
|
|
|
|
def _create_department_manager_content(self):
|
|
"""Create Department Manager specific content"""
|
|
try:
|
|
role = Role.objects.get(name='DEPARTMENT_MANAGER')
|
|
except Role.DoesNotExist:
|
|
return
|
|
|
|
self.stdout.write('Creating Department Manager content...')
|
|
|
|
content_data = {
|
|
'code': 'DEPT_MGR_RESP',
|
|
'role': role,
|
|
'order': 4,
|
|
'title_en': 'Department Manager Responsibilities',
|
|
'title_ar': 'مسؤوليات مدير القسم',
|
|
'description_en': 'Understanding Department Manager role and operations',
|
|
'description_ar': 'فهم دور وعمليات مدير القسم',
|
|
'content_en': """
|
|
<h2>Department Manager Responsibilities</h2>
|
|
<p>As a Department Manager, you oversee your department's operations and staff performance.</p>
|
|
<ul>
|
|
<li>Manage department staff</li>
|
|
<li>Monitor department metrics</li>
|
|
<li>Respond to department-specific feedback</li>
|
|
<li>Improve patient experience in your area</li>
|
|
</ul>
|
|
""",
|
|
'content_ar': """
|
|
<h2>مسؤوليات مدير القسم</h2>
|
|
<p>بصفتك مدير القسم، تشرف على عمليات قسمك وأداء الموظفين.</p>
|
|
<ul>
|
|
<li>إدارة موظفي القسم</li>
|
|
<li>مراقبة مؤشرات القسم</li>
|
|
<li>الرد على الملاحظات الخاصة بالقسم</li>
|
|
<li>تحسين تجربة المريض في منطقتك</li>
|
|
</ul>
|
|
"""
|
|
}
|
|
|
|
content, _ = AcknowledgementContent.objects.update_or_create(
|
|
code=content_data['code'],
|
|
role=role,
|
|
defaults=content_data
|
|
)
|
|
|
|
checklist_items = [
|
|
{
|
|
'content': content,
|
|
'code': 'DEPT_MGR_SCOPE',
|
|
'order': 1,
|
|
'text_en': 'I understand my Department Manager role and responsibilities',
|
|
'text_ar': 'أفهم دوري ومسؤولياتي كمدير قسم',
|
|
'description_en': 'Accept responsibility for Department Manager role',
|
|
'description_ar': 'قبول المسؤولية لدور مدير القسم',
|
|
'is_required': True
|
|
}
|
|
]
|
|
|
|
for item_data in checklist_items:
|
|
AcknowledgementChecklistItem.objects.update_or_create(
|
|
code=item_data['code'],
|
|
defaults=item_data
|
|
)
|
|
|
|
def _create_physician_content(self):
|
|
"""Create Physician specific content"""
|
|
try:
|
|
role = Role.objects.get(name='PHYSICIAN')
|
|
except Role.DoesNotExist:
|
|
return
|
|
|
|
self.stdout.write('Creating Physician content...')
|
|
|
|
content_data = {
|
|
'code': 'PHYSICIAN_RESP',
|
|
'role': role,
|
|
'order': 4,
|
|
'title_en': 'Physician Responsibilities',
|
|
'title_ar': 'مسؤوليات الطبيب',
|
|
'description_en': 'Understanding Physician role in PX360',
|
|
'description_ar': 'فهم دور الطبيب في PX360',
|
|
'content_en': """
|
|
<h2>Physician Responsibilities</h2>
|
|
<p>As a Physician, you play a key role in patient experience and quality of care.</p>
|
|
<ul>
|
|
<li>Review and respond to patient feedback</li>
|
|
<li>Maintain accurate physician profile</li>
|
|
<li>Participate in quality initiatives</li>
|
|
<li>Improve patient care based on insights</li>
|
|
</ul>
|
|
""",
|
|
'content_ar': """
|
|
<h2>مسؤوليات الطبيب</h2>
|
|
<p>بصفتك طبيبًا، تلعب دورًا رئيسيًا في تجربة المريض وجودة الرعاية.</p>
|
|
<ul>
|
|
<li>مراجعة والرد على ملاحظات المرضى</li>
|
|
<li>الحفاظ على ملف الطبيب بدقة</li>
|
|
<li>المشاركة في مبادرات الجودة</li>
|
|
<li>تحسين رعاية المرضى بناءً على الرؤى</li>
|
|
</ul>
|
|
"""
|
|
}
|
|
|
|
content, _ = AcknowledgementContent.objects.update_or_create(
|
|
code=content_data['code'],
|
|
role=role,
|
|
defaults=content_data
|
|
)
|
|
|
|
checklist_items = [
|
|
{
|
|
'content': content,
|
|
'code': 'PHYSICIAN_SCOPE',
|
|
'order': 1,
|
|
'text_en': 'I understand my Physician role and commitment to patient care',
|
|
'text_ar': 'أفهم دوري كطبيب والالتزام برعاية المرضى',
|
|
'description_en': 'Accept responsibility for Physician role',
|
|
'description_ar': 'قبول المسؤولية لدور الطبيب',
|
|
'is_required': True
|
|
}
|
|
]
|
|
|
|
for item_data in checklist_items:
|
|
AcknowledgementChecklistItem.objects.update_or_create(
|
|
code=item_data['code'],
|
|
defaults=item_data
|
|
)
|
|
|
|
def _create_staff_content(self):
|
|
"""Create Staff specific content"""
|
|
try:
|
|
role = Role.objects.get(name='STAFF')
|
|
except Role.DoesNotExist:
|
|
return
|
|
|
|
self.stdout.write('Creating Staff content...')
|
|
|
|
content_data = {
|
|
'code': 'STAFF_RESP',
|
|
'role': role,
|
|
'order': 4,
|
|
'title_en': 'Staff Responsibilities',
|
|
'title_ar': 'مسؤوليات الموظف',
|
|
'description_en': 'Understanding Staff role and daily operations',
|
|
'description_ar': 'فهم دور الموظف والعمليات اليومية',
|
|
'content_en': """
|
|
<h2>Staff Responsibilities</h2>
|
|
<p>As a Staff member, you contribute to daily operations and patient experience.</p>
|
|
<ul>
|
|
<li>Complete assigned tasks efficiently</li>
|
|
<li>Report patient feedback and concerns</li>
|
|
<li>Follow established procedures</li>
|
|
<li>Maintain high service standards</li>
|
|
</ul>
|
|
""",
|
|
'content_ar': """
|
|
<h2>مسؤوليات الموظف</h2>
|
|
<p>بصفتك موظفًا، تساهم في العمليات اليومية وتجربة المريض.</p>
|
|
<ul>
|
|
<li>إكمال المهام المخصصة بكفاءة</li>
|
|
<li>الإبلاغ عن ملاحظات ومخاوف المرضى</li>
|
|
<li>اتباع الإجراءات المعمول بها</li>
|
|
<li>الحفاظ على معايير خدمة عالية</li>
|
|
</ul>
|
|
"""
|
|
}
|
|
|
|
content, _ = AcknowledgementContent.objects.update_or_create(
|
|
code=content_data['code'],
|
|
role=role,
|
|
defaults=content_data
|
|
)
|
|
|
|
checklist_items = [
|
|
{
|
|
'content': content,
|
|
'code': 'STAFF_SCOPE',
|
|
'order': 1,
|
|
'text_en': 'I understand my Staff role and commitment to quality service',
|
|
'text_ar': 'أفهم دوري كموظف والالتزام بخدمة عالية الجودة',
|
|
'description_en': 'Accept responsibility for Staff role',
|
|
'description_ar': 'قبول المسؤولية لدور الموظف',
|
|
'is_required': True
|
|
}
|
|
]
|
|
|
|
for item_data in checklist_items:
|
|
AcknowledgementChecklistItem.objects.update_or_create(
|
|
code=item_data['code'],
|
|
defaults=item_data
|
|
)
|