o
    6k~i                     @   s   d dl mZmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ ddlmZ ddlmZmZ d d	lmZmZ d d
lmZ d dlmZmZ d dlmZ G dd dejZdS )    )viewsetsstatusfilters)action)Response)IsAuthenticated)DjangoFilterBackend   )Booking)BookingSerializerBookingCreateSerializer)IsPlaceAdminIsPlaceOwner)StandardResultsSetPagination)send_booking_reminderschedule_booking_reminders)send_fcm_notificationc                   @   s   e Zd ZdZegZeZee	j
e	jgZg dZg dZddgZdd Zdd	 Zd
d ZeddgddddZeddgddddZeddgddddZdd ZdS )BookingViewSetzBooking ViewSet)placer   typedate)r   time
created_atz-datez-timec                 C   s   | j dkrtS tS )Ncreate)r   r   r   )self r   3/var/www/newdalilibackend/backend/bookings/views.pyget_serializer_class   s   
z#BookingViewSet.get_serializer_classc                 C   sn   | j j}|jdv rtjddd S |jdkr+t|dr+tjdddj|j	j
dS tjdddj|dS )	Nsuper_adminadminr   userplace__ownerplace_adminplace_admin_profile)r   )r!   )requestr!   roler
   objectsselect_relatedallhasattrfilterr$   r   )r   r!   r   r   r   get_queryset   s   
zBookingViewSet.get_querysetc                 C   s   |  }t  |jjr!t|jjdd|jj |j|jjdd t	|jj
drC|jj
jrCt|jj
jdd|jj |j|jjdd |S )	z%Create booking and send notificationsu   تم إنشاء الحجزu   تم إنشاء حجز في booking_created
booking_idplace_idr   r$   u   حجز جديدu   حجز جديد من new_booking)saver   delayr!   	fcm_tokenr   r   nameidr*   ownerusername)r   
serializerbookingr   r   r   perform_create,   s.   zBookingViewSet.perform_createTpost)detailmethodsNc                 C   sv   |   }| |j|stdditjdS d|_|  |jjr4t|jjdd|j	j
 |j|j	jdd tt|jS )	zConfirm a bookingerror1You do not have permission to manage this bookingr   	confirmedu   تم تأكيد الحجزu   تم تأكيد حجزك في booking_confirmedr.   )
get_object_can_manage_bookingr!   r   r   HTTP_403_FORBIDDENr2   r4   r   r   r5   r6   r   datar   r%   pkr:   r   r   r   confirmO   s&   zBookingViewSet.confirmc                 C   s   |   }| |j|s|j|jkstdditjdS d|_|  |jjrF|j|jkr-dn|jj	}t
|jjdd|jj	 |j|jjdd	 |j|jkrnt|jjd
rn|jjjrnt
|jjjdd|jj |j|jjdd	 tt|jS )zCancel a bookingr?   z1You do not have permission to cancel this bookingrA   	cancelledu   أنتu   تم إلغاء الحجزu   تم إلغاء حجزك في booking_cancelledr.   r$   u   تم إلغاء حجز من )rD   rE   r!   r   r   rF   r2   r4   r   r5   r   r6   r*   r7   r8   r   rG   )r   r%   rI   r:   cancelled_byr   r   r   cancelj   s<   $zBookingViewSet.cancelc                 C   sD   |   }| |j|stdditjdS d|_|  tt|jS )zComplete a bookingr?   r@   rA   	completed)	rD   rE   r!   r   r   rF   r2   r   rG   rH   r   r   r   complete   s   zBookingViewSet.completec                 C   s4   |j dv rdS |j dkrt|dr|jj|jkS dS )z Check if user can manage bookingr   Tr#   r$   F)r&   r*   r$   r   )r   r!   r:   r   r   r   rE      s
   
z"BookingViewSet._can_manage_booking)N)__name__
__module____qualname____doc__r   permission_classesr   pagination_classr   r   SearchFilterOrderingFilterfilter_backendsfilterset_fieldsordering_fieldsorderingr   r,   r;   r   rJ   rN   rP   rE   r   r   r   r   r      s$    #(r   N)rest_frameworkr   r   r   rest_framework.decoratorsr   rest_framework.responser   rest_framework.permissionsr   django_filters.rest_frameworkr   modelsr
   serializersr   r   common.permissionsr   r   common.paginationr   notifications.tasksr   r   notifications.servicesr   ModelViewSetr   r   r   r   r   <module>   s    