
    K@i                         d dl 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 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 d dlmZ  e j2                  e      Z G d dej8                        Zy)    N)action)AllowAny)Response)viewsetsstatus)MessageService)WebhookSuccessSerializer)AppointmentRepository)Company)BotTypeBookingType)parse_datetime)timezonec                   :    e Zd ZegZg Z eddgd      d        Zy)AppointmentWebhookViewSetFpostzappointment-with-company)detailmethodsurl_pathc           
         |j                   j                  d      }|s0t        t        ddi      j                   t        j
                        S t        j                  j                  |      j                         }|s0t        t        ddi      j                   t        j
                        S |j                   j                  d      }|st        ddit        j
                        S t        |      }|st        ddit        j
                        S t        j                  |      r$t        j                  |t        j                        }|j                   j                  d	      xs d
}	 t        |      }|t$        j&                  vrt        ddit        j
                        S |j                   j                  d      xs d}|j                   j                  d      xs d
}	 t)        j*                  ||||t,        j.                  j0                  |dd      }	|	t        ddit        j
                        S t3        j4                  |	       t        t        ddi      j                   t        j<                        S # t         t"        f$ r  t        ddit        j
                        cY S w xY w# t6        $ r=}
t8        j;                  d|
       t        ddit        j
                        cY d
}
~
S d
}
~
ww xY w)zR
        Webhook endpoint to book appointment using a company identifier.
        
company_idmessagezcompany_id is required)r   )ghl_company_idzCompany not foundappointment_datetimez appointment_datetime is requiredbooking_typeNzbooking_type must be an integerzInvalid booking_typecustomer_nameUnknowncustomer_phonezwebhook-no-call)nameappointment_phonescheduled_datecompanybot_typer   twilio_call_sidzFailed to create appointmentz&Failed booking service appointment: %szFailed to book appointmentzAppointment booked successfully)datagetr   r	   r   HTTP_400_BAD_REQUESTr   objectsfilterfirstr   r   is_naive
make_awareutcint	TypeError
ValueErrorr   valuesr
   create_appointmentr   SERVICE_BOTvaluer   handle_appointment_message	Exceptionlogger	exceptionHTTP_200_OK)selfrequestr   r"   raw_scheduled_dater!   r   r   r    appointmentexcs              ^/var/www/html/dp2/backend_v2.1/server/apps/appointments/views/book_appointment_with_company.pybook_appointment_with_companyz7AppointmentWebhookViewSet.book_appointment_with_company   s    !)),7()5M)NOTT22 
 //(((GMMO()5H)IJOO22 
 %\\--.DE!>?22 
 ((:;>?22 
 ^,%00NN||''7?4	|,L {1112322 
 ||0=I#LL,,-=>F$	/BB%6"0"#//55 ,#4D K " >?!66 
 55kB $i1R%STYY%%
 	
U :& 	=>22 	D  	EsK8922 	s7   +I= $AJ/ 8J/ =,J,+J,/	K582K0*K50K5N)__name__
__module____qualname__r   permission_classesauthentication_classesr   r@        r?   r   r      s4    "+
X

X
rG   r   )loggingrest_framework.decoratorsr   rest_framework.permissionsr   rest_framework.responser   rest_frameworkr   r   apps.calls.servicesr   apps.appointments.serializersr	   apps.appointments.repositoriesr
   apps.companies.modelsr   apps.calls.constantsr   r   django.utils.dateparser   django.utilsr   	getLoggerrA   r7   ViewSetr   rF   rG   r?   <module>rV      sV     , / , + . A ) 5 1 ! 
		8	$a
 0 0 a
rG   