from datetime import datetime
from pydoc import describe
from django.db import models
from django.utils.translation import gettext as _
from django.contrib.auth.models import AbstractUser
from django.db.models import Max
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.utils import timezone
from mainApp.utils import *
from django.db.models import Count,Sum
import uuid
#import time
from django.contrib.auth.models import Group

############## User%Module #################

class User(AbstractUser):
    # fullname =  models.CharField(max_length=250,blank=True, null=True,help_text = _("fullname") , verbose_name =_("fullname"))
    #phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message="برجاء ادخال الأرقام بطريقة صحيحة أو تركها فارغة - الرقم الأول مطلوب ")
    number_1 = models.CharField(max_length=20, blank=True)
    number_2 = models.CharField(max_length=20, blank=True,null=True)
    is_doctor = models.BooleanField(default=False)
    #national_id = models.CharField(max_length=50,blank=True,null=True)
    created_by = models.ForeignKey('self',blank=True, null=True,on_delete=models.PROTECT)
    created_at = models.DateTimeField(auto_now_add=True)
    
    class Meta:
        db_table="user"
    def __str__(self):
        return self.username

############## END User%Module #################

############## Clinic%Module #################

Group.add_to_class('clinic', models.ForeignKey('mainApp.Clinic',blank=True, null=True,on_delete=models.PROTECT))
 
class ClinicType(models.Model):#noo3 el 3yada [el ta5asos : asnan , nsa w twleed , gra7a]  
    name = models.CharField(max_length=75)
    def __str__(self):
        return self.name

def welcome_img_url(instance, filename):
    maxClinic = Clinic.objects.aggregate(Max('id'))
    maxClinic_val = maxClinic["id__max"] if maxClinic["id__max"] is not  None else 1
    return "%s/%s/%s" % ("clinic_pics",maxClinic_val , "welcome_{}".format( filename))

def icon_img_url(instance, filename):
    maxClinic = Clinic.objects.aggregate(Max('id'))
    maxClinic_val = maxClinic["id__max"] if maxClinic["id__max"] is not  None else 1
    return "%s/%s/%s" % ("clinic_pics",maxClinic_val , "icon_{}".format( filename))

class Clinic(models.Model):#el 3yada  
    name = models.CharField(max_length=100)
    reports_code = models.CharField(max_length=100)
    welcome_img = models.FileField(upload_to=welcome_img_url, null=True, blank=True)
    icon_img = models.FileField(upload_to=icon_img_url, null=True, blank=True)
    clinic_type = models.ForeignKey(
        ClinicType,
        related_name="Clinic_clinic_type",
        blank=True,
        null=True,
        on_delete=models.PROTECT,
    )
    created_on = models.DateTimeField(_("Created on"), auto_now_add=True)
    created_by = models.ForeignKey(
        User,
        related_name="Clinic_created_by",
        blank=True,
        null=True,
        on_delete=models.PROTECT,
    )
    def __str__(self):
        return self.name

############## END Clinic%Module #################

############## Finance%Module #################
class ExpenseItem(models.Model):#bnood elmsareef   
    name = models.CharField(max_length=100)
    def __str__(self):
        return self.name

class Expense(models.Model):#bnood elmsareef   
    price = models.IntegerField(default=0)
    item = models.ForeignKey(
        ExpenseItem,
        related_name="Expense_item",
        blank=True,
        null=True,
        on_delete=models.PROTECT,
    )
    note = models.CharField(max_length=100,blank=True, null=True)
    created_on = models.DateTimeField(_("Created on"), auto_now_add=True)
    created_by = models.ForeignKey(
        User,
        related_name="Expense_created_by",
        blank=True,
        null=True,
        on_delete=models.PROTECT,
    )
    def __str__(self):
        return "{} : {}".format(self.item.name,self.price)
############## END Finance%Module #################
############## AdditionalInfo%Module #################
class FoundWay(models.Model):#bnood elmsareef   
    name = models.CharField(max_length=100)
    def __str__(self):
        return self.name

class Nationality(models.Model):#  
    name = models.CharField(max_length=100,unique=True)
    def __str__(self):
        return self.name

class Location(models.Model):#mo7afaza   
    name = models.CharField(max_length=100)
    nationality = models.ForeignKey( Nationality, blank=True, null=True, on_delete=models.PROTECT, )
    class Meta:
        unique_together = ('name', 'nationality',)
    def __str__(self):
        return self.name

class City(models.Model):#mo7afaza   
    name = models.CharField(max_length=100)
    location = models.ForeignKey( Location, blank=True, null=True, on_delete=models.PROTECT, )
    class Meta:
        unique_together = ('location', 'name',)
    def __str__(self):
        return self.name
    
class PatientJob(models.Model):#bnood elmsareef   
    name = models.CharField(max_length=100)
    def __str__(self):
        return self.name
############## END AdditionalInfo%Module #################
############## MedicalService%Module #################

# class Company(models.Model):#elshrkat elli leeha nsbt ta7mol   
#     name = models.CharField(max_length=150)
#     def __str__(self):
#         return self.name

# class Organization(models.Model):#el ghat elli ana mot3akd m3aha zy el nkabat 
#     name = models.CharField(max_length=150)
#     def __str__(self):
#         return self.name
        
class MedicalService(models.Model):
    name = models.CharField(max_length=250)
    description = models.CharField(max_length=250)
    is_service = models.BooleanField(default=True) # True كشف / خدمة علاجية -- False فحص عيون 
    eye_count = models.IntegerField(default=0)#عدد العيون في حالة الفحص عشان حساب الأخصائي - الدكتور 
    price = models.IntegerField(default=0)#center price السعر لمرضي المركز أيا كان الدكتور 
    def __str__(self):
        return self.name

class MedicalServiceDoctor(models.Model):
    medicalservice = models.ForeignKey(
        MedicalService,
        related_name="MedicalServiceDoctor_medicalservice",
        blank=True,
        null=True,
        on_delete=models.PROTECT,
    )        
    doctor = models.ForeignKey(
        User,
        related_name="MedicalService_doctor",
        blank=True,
        null=True,
        on_delete=models.PROTECT,
    )
    doctor_price = models.IntegerField(default=0)     
    class Meta:
        unique_together = ('medicalservice', 'doctor',)
    def __str__(self):
        return "{}-{}-{}".format(self.medicalservice.name,self.doctor.get_full_name(),str(self.doctor_price))

############## END MedicalService%Module #################

############## Patient%Module #################
class CommonDisease(models.Model):#elaamrad elsha2e3a 
    name = models.CharField(max_length=75)
    def __str__(self):
        return self.name

NUMBER_TYPE_TO_DELIVER_CHOICES=(
    (1, "شخصى"),
    (2, "شركة"),
    (3, "اخرى"),
)
BLOOD_TYPE_CHOICES=(
    (1, "A+"),
    (2, "A-"),
    (3, "B+"),
    (4, "B-"),
    (5, "AB+"),
    (6, "AB-"),
    (7, "O+"),
    (8, "O-"),
)

ENTRY_STATUS_CHOICES = (
    ("1I", "عند الدكتور"),#INSIDE
    ("2W", "انتظار"),# WAITING , MSTNI DOORO 
    ("3L", "تأخير"),# LATE , DOORO GEH W PATINET MSH MWGOD
    ("4F", "خروج"),#FINISHED VISIT , 5LS W MSHI
    # mmkn el case elli t7t di aw mmkn a7zfoo w5las 
    ("5C", "إلغاء"),# Cancel , geh 7agaz wmshi  w 3mltoo t25ir wmgash 5als aw geh w la8a w 5d floso 
)
VISIT_TYPES_CHOICES=(
    (1, "C"),#Center , 7ala tb3 el mrkz
    (2, "D"),#Doctor , 7ala tb3 el doctor nfso
)
MARITAL_STATUS_CHOICES=(
    (0, "غير محدد"),
    (1, "أعزب"),
    (2, "متزوج"),
    (3, "أرمل"),
    (4, "مطلق"),
)
DAY_CHOICES=(
    (0, "غير محدد"),
    (1, "أعزب"),
    (2, "متزوج"),
    (3, "أرمل"),
    (4, "مطلق"),
)
def add_one():
#def add_ten():
    ''' Returns the next default value for the `tens` field'''
    # Retrieve a list of `YourModel` instances, sort them by
    # the `tens` field and get the largest entry
    #largest = YourModel.objects.all().order_by('tens').last()
    largest = Patient.objects.all().order_by('code').last()
    if not largest:
        # largest is `None` if `YourModel` has no instances
        # in which case we return the start value of 10
        #return 10
        return 1
    # If an instance of `YourModel` is returned, we get it's
    # `tens` attribute and increment it by 10
    #return largest.tens + 10
    return largest.code + 1

class Patient(models.Model):
    fullname =  models.CharField(max_length=250,blank=True,unique=True, null=True,help_text = _("patient_name") , verbose_name =_("name"))
    #national_id = models.CharField(max_length=50,blank=True,null=True)
    #folder_number = models.IntegerField(default=1)
    code = models.IntegerField(default=add_one,unique=True)
    p_job = models.ForeignKey(PatientJob,on_delete=models.PROTECT,blank=True,null=True,)
    number_1 = models.CharField(max_length=20)
    number_2 = models.CharField(max_length=20, blank=True,null=True)
    birth_date = models.DateField(blank=True,null=True)
    marital_status = models.IntegerField(choices=MARITAL_STATUS_CHOICES , default=1)
    #birth_date = models.DateField(blank=True,null=True)
    found_way = models.ForeignKey(FoundWay,on_delete=models.PROTECT,blank=True,null=True,)
    location = models.ForeignKey(Location,on_delete=models.PROTECT,blank=True,null=True,)
    balance = models.IntegerField(default=0)
    last_visit = models.DateTimeField(blank=True,null=True)
    next_consult = models.DateField(blank=True,null=True)
    is_male = models.BooleanField(
        _('is_male'),
        default=True,
        help_text=_(
            'Unselect if gender is female'
        ),
    )
    is_active = models.BooleanField(
        _('is_active'),
        default=True,
        help_text=_(
            'Unselect this instead of deleting Patients.'
        ),
    )
    created_by = models.ForeignKey(User,on_delete=models.PROTECT)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return str(self.fullname)
    
class PatientExtraInfo(models.Model):
    patient =  models.OneToOneField(
        Patient,
        related_name="PatientExtraInfo_patient",
        on_delete=models.PROTECT,
    )
    official_name = models.CharField(max_length=150)#الاسم على البطاقه 
    city = models.ForeignKey(City,on_delete=models.PROTECT,blank=True, null=True)
    detail_address = models.CharField(max_length=50,blank=True,null=True)
    national_id_14_num = models.CharField(max_length=50,blank=True,null=True)
    passport_code = models.CharField(max_length=20, null=True, blank=True)
    patient_notes = models.CharField(max_length=20,null=True, blank=True)
    number_to_deliver_invoice = models.CharField(max_length=20,null=True, blank=True)
    number_type_to_deliver = models.IntegerField(choices=NUMBER_TYPE_TO_DELIVER_CHOICES , default=1)
    last_update_by = models.ForeignKey(User,on_delete=models.PROTECT)
    #last_update_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return str(self.patient.fullname)

#https://www.medicakare.com/sys/medicakare/medical_report.php?st_id=150538
class PatientInfo(models.Model):
    patient =  models.OneToOneField(
        Patient,
        related_name="PatientInfo_patient",
        on_delete=models.PROTECT,
    )
    disease = models.ForeignKey(CommonDisease,on_delete=models.PROTECT,blank=True, null=True)
    #birth_date = models.DateField(blank=True,null=True)
    #address = models.CharField(max_length=250, blank=True,null=True)
    #job = models.CharField(max_length=100, blank=True,null=True)
    chronic_diseases = models.TextField(blank=True, null=True)#  الأمراض المزمنة
    genetic_diseases = models.TextField(blank=True, null=True)#  الأمراض الوراثية
    surgical_history = models.TextField(blank=True, null=True)#العمليات  الجراحية
    allergies_history =  models.TextField(blank=True, null=True)#   تاريخ الحساسية
    family_history =  models.TextField(blank=True, null=True)#   التاريخ المرضى للعائلة 
    diagnosis = models.TextField(blank=True, null=True)#التشخيص
    is_smoker  = models.BooleanField(default=False)
    blood_type = models.IntegerField(choices=BLOOD_TYPE_CHOICES , default=1)
    notes = models.TextField(blank=True, null=True)
    last_update_by = models.ForeignKey(User,on_delete=models.PROTECT)
    last_update_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return str(self.patient.fullname)

# @receiver(post_save, sender=PatientInfo)
# def ptntInfo_post_save(sender, instance, created, **kwargs):
#     if instance.birth_date:
#         ptntObj = Patient.objects.get(pk=instance.patient.pk)
#         years,months,days  = ageCalculator(instance.birth_date)
#         ptntObj.age = years
#         ptntObj.save()

def pa_file_url(instance, filename):
    ext = filename.split('.')[-1]
    return "%s/%s/%s" % ("Patients",instance.patient.id, "{}.{}".format(uuid.uuid4(), ext))

class PtAttachment(models.Model):
    patient =  models.ForeignKey(
        Patient,
        related_name="PtAttachment_patient",
        on_delete=models.PROTECT,
    )
    pa_label = models.CharField(max_length=250, blank=True,null=True)
    pa_file = models.FileField(upload_to=pa_file_url, null=True, blank=True)
    description = models.TextField(blank=True, null=True)
    doctor_notes = models.TextField(blank=True, null=True)
    created_by = models.ForeignKey(User,on_delete=models.DO_NOTHING)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return "{}-{}".format(self.patient.fullname,str(self.created_at))

def extra_pa_file_url(instance, filename):
    ext = filename.split('.')[-1]
    return "%s/%s/%s" % ("Patients",instance.pt_attachment.patient.id, "{}.{}".format(uuid.uuid4(), ext))
class ExtraPtAttachment(models.Model):
    pt_attachment = models.ForeignKey(PtAttachment,on_delete=models.PROTECT)
    image = models.FileField(upload_to=extra_pa_file_url,)
    #timestamp = models.DateTimeField(auto_now=True)


    def __str__(self) -> str:
        return f"{self.pt_attachment}"

class PatientExternalPayment(models.Model):
    patient =  models.ForeignKey(
        Patient,
        related_name="PatientExternalPayment_patient",
        blank=True,
        null=True,
        on_delete=models.PROTECT,
    )
    amount_paid = models.IntegerField(default=0,help_text = _("سداد ديون - دفع مبلغ مقدم "))
    note = models.CharField(max_length=150,blank=True,null=True)
    created_by = models.ForeignKey(User,on_delete=models.PROTECT)
    created_at = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return "{}-{}".format(self.patient.fullname,self.amount_paid)

class PatientWithdrawal(models.Model):
    patient =  models.ForeignKey(
        Patient,
        related_name="PatientWithdrawal_patient",
        blank=True,
        null=True,
        on_delete=models.PROTECT,
    )
    amount_taken = models.IntegerField(default=0,help_text = _("سحب مبالغ أو استرداد مبالغ"))
    note = models.CharField(max_length=150,blank=True,null=True)
    created_by = models.ForeignKey(User,on_delete=models.PROTECT)
    created_at = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return "{}-{}".format(self.patient.fullname,self.amount_taken)

############## END Patient%Module #################

############## PatientVisit%Module #################
from django.db.models.functions import Coalesce

class PatientVisit(models.Model):
    patient =  models.ForeignKey(
        Patient,
        related_name="PatientVisit_patient",
        blank=True,
        null=True,
        on_delete=models.PROTECT,
    )
    medicalservice = models.ForeignKey(
        MedicalService,
        related_name="PatientVisit_MedicalService",
        blank=True,
        null=True,
        on_delete=models.PROTECT,
    )
    #shiftPeriod=hft7 shift wa2flo 3shan a2fl el7sabat w 3shan ay 7d t25eer myfdlsh yzhr m3aya mada el7yah
    entry_order = models.IntegerField(default=1000,help_text = _(" كل يوم جديد يبدأ من أول رقم 1  , ترتيب الدخول في الفترة الحالية"))
    amount_required = models.IntegerField(default=0,help_text = _("ثمن الخدمة العلاجية بعد تطبيق خصم نقابة او نسبة خصم لشركةاو بدون خصم"))
    amount_paid = models.IntegerField(default=0,help_text = _(" المبلغ المدفوع < مقابل الخدمة العلاجية المقدمة>"))
    amount_remaining = models.IntegerField(default=0,help_text = _(" لو اتبقي علي المريض فلوس في الزيارة دي أو للمريض فلوس"))
    doctor_discount = models.IntegerField(default=0)
    next_consult_days = models.IntegerField(default=0)
    entry_datetime = models.DateTimeField(blank=True,null=True)
    visit_status = models.CharField(max_length=2, choices=ENTRY_STATUS_CHOICES , default="2W")
    visit_type = models.IntegerField(choices=VISIT_TYPES_CHOICES , default=1)
    visit_day = models.DateField(blank=True,null=True)
    doctor_notes = models.TextField(blank=True, null=True)
    is_doctor_advice_readed = models.BooleanField(default=False)
    created_by = models.ForeignKey(User,on_delete=models.PROTECT,related_name="PatientVisit_created_by",)
    doctor = models.ForeignKey(User,on_delete=models.PROTECT,related_name="PatientVisit_doctor",)
    created_at = models.DateTimeField(auto_now_add=True)
    is_sheet_uploaded = models.BooleanField(default=False)
    
    is_e_invoice_request = models.BooleanField(default=False)#معمولها طلب ولا لأ
    #models.AutoField(auto_created = True, 
    invoice_serial = models.IntegerField(blank=True,null=True,unique=True)#رقم الايصال الورقى 
    invoice_notes = models.CharField(max_length=150,blank=True, null=True)#ملاحظات الفاتورة
    invoice_last_update_by = models.ForeignKey(User,on_delete=models.PROTECT,blank=True,null=True)
    #additional_auto_field = models.IntegerField()

    # def save(self, *args, **kwargs):
    #     if not self.invoice_serial:
    #         max_invoice_serial= PatientVisit.objects.aggregate(max_invoice_serial=Coalesce(Max('invoice_serial'),1))['max_invoice_serial']
    #         self.invoice_serial = max_invoice_serial
    #     super().save(*args, **kwargs)
    class Meta:
        unique_together = ('visit_day', 'entry_order','doctor')
    def __str__(self):
        return "{}-{}".format(self.patient.fullname,self.medicalservice.name)
        
class NextVisit(models.Model):
    patient =  models.ForeignKey(
        Patient,
        related_name="NextVisit_patient",
        on_delete=models.PROTECT,
    )
    visit_day = models.DateField(blank=True,null=True)
    emp_comment = models.CharField(max_length=250,blank=True, null=True)
    created_by = models.ForeignKey(User,on_delete=models.PROTECT)
    created_at = models.DateTimeField(auto_now_add=True)
    class Meta:
        unique_together = ('visit_day', 'patient',)
    def __str__(self):
        return "{}-{}".format(self.patient.fullname,self.emp_comment)
'''
class CanceledVisit(models.Model):
    patient =  models.ForeignKey(
        Patient,
        related_name="CanceledVisit_patient",
        on_delete=models.PROTECT,
    )
    cancel_reason = models.CharField(max_length=250,blank=True, null=True)
    created_by = models.ForeignKey(User,on_delete=models.PROTECT)
    created_at = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return "{}-{}".format(self.patient.fullname,self.cancel_reason)
'''
class HourSlot(models.Model):
    name = models.CharField(max_length=20)
    order = models.IntegerField(default=50,unique=True)
    is_active = models.BooleanField(
        _('is_active'),
        default=True,
        help_text=_(
            'Unselect this instead of deleting HourSlot.'
        ),
    )
    def __str__(self):
        return self.name

class WeekDay(models.Model):
    name = models.CharField(max_length=20)
    order = models.IntegerField(default=50,unique=True)
    max_patients = models.IntegerField(default=50)
    code = models.IntegerField(default=50,unique=True)
    is_active = models.BooleanField(
        _('is_active'),
        default=True,
        help_text=_(
            'Unselect this instead of deleting WeekDay.'
        ),
    )
    def __str__(self):
        return self.name
class AdvanceReservation(models.Model):
    patient_name = models.CharField(max_length=100)#reception
    patient_phone = models.CharField(max_length=20)
    '''
    patient =  models.ForeignKey(
        Patient,
        related_name="AdvanceReservation_patient",
        blank=True,
        null=True,
        on_delete=models.PROTECT,
    )
    
    medicalservice = models.ForeignKey(
        MedicalService,
        related_name="AdvanceReservation_MedicalService",
        blank=True,
        null=True,
        on_delete=models.PROTECT,
    )
    
    doctor = models.ForeignKey(User,on_delete=models.PROTECT,related_name="AdvanceReservation_doctor",)#a5sa2i aw doctor 
    '''
    rcptn_notes = models.CharField(max_length=200,blank=True,null=True)#reception
    hour_slot = models.ForeignKey(HourSlot,blank=True,null=True,on_delete=models.PROTECT,related_name="AdvanceReservation_hour_slot",)#twe2eet el zyara
    visit_day = models.DateField(blank=True,null=True)
    created_by = models.ForeignKey(User,on_delete=models.PROTECT,related_name="AdvanceReservation_created_by",)
    created_at = models.DateTimeField(auto_now_add=True)
    class Meta:
        #unique_together = (('visit_day', 'patient'),('visit_day', 'doctor','hour_slot'))
        unique_together = ('visit_day','hour_slot')
    def __str__(self):
        return "{}-{}".format(self.patient_name,self.visit_day)  
############## END PatientVisit%Module #################

############## Prescription%Module #################
PRESCRIPTION_ITEM_TYPES_CHOICES = (
    ("1D", "دواء"),#DRUG
    ("2R", "أشعة"),# Radiology 
    ("3T", "تحليل"),# MEDICAL Test
)
class TimeTodo(models.Model):#twket el dawa aw el t7lel aw el ash3a 
    name = models.CharField(max_length=100)
    def __str__(self):
        return self.name

class MedicalTest(models.Model):#t7aleel tbbya 
    name = models.CharField(max_length=100)
    descrption = models.CharField(max_length=250,blank=True,null=True)
    #price = models.IntegerField(default=0) 
    def __str__(self):
        return self.name

class Radiology(models.Model):#el asha3a
    name = models.CharField(max_length=100)
    descrption = models.CharField(max_length=250,blank=True,null=True)
    #price = models.IntegerField(default=0) 
    def __str__(self):
        return self.name

class Drug(models.Model):#eldawa
    name_ar = models.CharField(max_length=150,blank=True,null=True)
    name_en = models.CharField(max_length=150,unique=True)
    ingredients = models.CharField(max_length=250,blank=True,null=True)
    notes = models.CharField(max_length=250,blank=True,null=True)
    is_active = models.BooleanField(
        _('is_active'),
        default=True,
        help_text=_(
            'Unselect this if drug is not used '
        ),
    )
    def __str__(self):
        return "{}-{}".format(self.name_en,self.name_ar)

class PresDrugItem(models.Model):
    patient_visit =  models.ForeignKey(
        PatientVisit,
        related_name="PresDrugItem_patient_visit",
        blank=True,
        null=True,
        on_delete=models.PROTECT,
    )
    drug =  models.ForeignKey(
        Drug,
        related_name="PresDrugItem_drug",
        blank=True,
        null=True,
        on_delete=models.PROTECT,
    )
    time_todo =  models.ForeignKey(
        TimeTodo,
        related_name="PresDrugItem_timetodo",
        blank=True,
        null=True,
        on_delete=models.PROTECT,
    )

class PresRadiologyItem(models.Model):
    patient_visit =  models.ForeignKey(
        PatientVisit,
        related_name="PresRadiologyItem_patient_visit",
        blank=True,
        null=True,
        on_delete=models.PROTECT,
    )
    radiology =  models.ForeignKey(
        Radiology,
        related_name="PresRadiologyItem_radiology",
        blank=True,
        null=True,
        on_delete=models.PROTECT,
    )
    time_todo =  models.ForeignKey(
        TimeTodo,
        related_name="PresRadiologyItem_timetodo",
        blank=True,
        null=True,
        on_delete=models.PROTECT,
    )

class PresTestItem(models.Model):
    patient_visit =  models.ForeignKey(
        PatientVisit,
        related_name="PresTestItem_patient_visit",
        blank=True,
        null=True,
        on_delete=models.PROTECT,
    )
    medical_test =  models.ForeignKey(
        MedicalTest,
        related_name="PresTestItem_test",
        blank=True,
        null=True,
        on_delete=models.PROTECT,
    )
    time_todo =  models.ForeignKey(
        TimeTodo,
        related_name="PresTestItem_timetodo",
        blank=True,
        null=True,
        on_delete=models.PROTECT,
    )

############## END Prescription%Module #################
