o
    ~#i                     @   s   d dl mZ d dlmZ d dlmZ d dlmZm	Z	m
Z
 G dd dejZG dd dejZG d	d
 d
eZG dd dejjZG dd dejZG dd dejZdS )    )models)now)gettext_lazy)AutoSlugFieldCreationDateTimeFieldModificationDateTimeFieldc                       sF   e Zd ZdZeedZeedZ fddZ	G dd dZ
  ZS )TimeStampedModelz|
    TimeStampedModel

    An abstract base class model that provides self-managed "created" and
    "modified" fields.
    createdmodifiedc                    s,   | dt| dd| _t jdi | d S )Nupdate_modifiedT )popgetattrr   supersave)selfkwargs	__class__r   b/var/www/GraceOrthoHospital/venv_grace/lib/python3.10/site-packages/django_extensions/db/models.pyr      s   zTimeStampedModel.savec                   @      e Zd ZdZdZdS )zTimeStampedModel.Metar
   TN)__name__
__module____qualname__get_latest_byabstractr   r   r   r   Meta       r   )r   r   r   __doc__r   _r	   r   r
   r   r   __classcell__r   r   r   r   r   	   s    r   c                   @   sD   e Zd ZdZejedddZejeddddZ	G dd	 d	Z
d
S )TitleDescriptionModelzm
    TitleDescriptionModel

    An abstract base class model that provides title and description fields.
    title   )
max_lengthdescriptionT)blanknullc                   @      e Zd ZdZdS )zTitleDescriptionModel.MetaTNr   r   r   r   r   r   r   r   r   '       r   N)r   r   r   r   r   	CharFieldr   r"   	TextFieldr%   r   r   r   r   r   r!      s
    r!   c                   @   s.   e Zd ZdZeedddZG dd dZdS )TitleSlugDescriptionModela  
    TitleSlugDescriptionModel

    An abstract base class model that provides title and description fields
    and a self-managed "slug" field that populates from the title.

    .. note ::
        If you want to use custom "slugify" function, you could
        define ``slugify_function`` which then will be used
        in :py:class:`AutoSlugField` to slugify ``populate_from`` field.

        See :py:class:`AutoSlugField` for more details.
    slugr"   )populate_fromc                   @   r(   )zTitleSlugDescriptionModel.MetaTNr)   r   r   r   r   r   <   r*   r   N)r   r   r   r   r   r   r.   r   r   r   r   r   r-   +   s    r-   c                   @   s    e Zd ZdZdd Zdd ZdS )ActivatorQuerySetzH
    ActivatorQuerySet

    Query set that returns statused results
    c                 C      | j tjdS )z Return active query set status)filterActivatorModelACTIVE_STATUSr   r   r   r   activeG      zActivatorQuerySet.activec                 C   r1   )z Return inactive query set r2   )r4   r5   INACTIVE_STATUSr7   r   r   r   inactiveK   r9   zActivatorQuerySet.inactiveN)r   r   r   r   r8   r;   r   r   r   r   r0   @   s    r0   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	ActivatorModelManagerz|
    ActivatorModelManager

    Manager to return instances of ActivatorModel: SomeModel.objects.active() / .inactive()
    c                 C   s   t | j| jdS )z' Use ActivatorQuerySet for all results )modelusing)r0   r=   _dbr7   r   r   r   get_querysetW   s   z"ActivatorModelManager.get_querysetc                 C      |    S )z
        Return active instances of ActivatorModel:

        SomeModel.objects.active(), proxy to ActivatorQuerySet.active
        )r@   r8   r7   r   r   r   r8   [      zActivatorModelManager.activec                 C   rA   )z
        Return inactive instances of ActivatorModel:

        SomeModel.objects.inactive(), proxy to ActivatorQuerySet.inactive
        )r@   r;   r7   r   r   r   r;   c   rB   zActivatorModelManager.inactiveN)r   r   r   r   r@   r8   r;   r   r   r   r   r<   P   s
    r<   c                       s   e Zd ZdZdZdZeedfeedffZej	edeedZ
ejdded	d
Zejddedd
Ze ZG dd dZ fddZ  ZS )r5   zh
    ActivatorModel

    An abstract base class model that provides activate and deactivate fields.
    r      InactiveActiver3   )choicesdefaultTz&keep empty for an immediate activation)r&   r'   	help_textz$keep empty for indefinite activationc                   @   r   )zActivatorModel.Meta)r3   z-activate_dateTN)r   r   r   orderingr   r   r   r   r   r      r   r   c                    s$   | j st | _ t j|i | d S )N)activate_dater   r   r   )r   argsr   r   r   r   r      s   zActivatorModel.save)r   r   r   r   r:   r6   r   STATUS_CHOICESr   IntegerFieldr3   DateTimeFieldrJ   deactivate_dater<   objectsr   r   r    r   r   r   r   r5   l   s    

r5   N)	django.dbr   django.utils.timezoner   django.utils.translationr   r   django_extensions.db.fieldsr   r   r   Modelr   r!   r-   queryQuerySetr0   Managerr<   r5   r   r   r   r   <module>   s   