
    mRim                        d dl mZ d dlmZmZ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 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  d dl!m"Z" d dl#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* d dl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 d dl7m8Z8m9Z9m:Z:m;Z;m<Z< d dl=m>Z>m?Z?m@Z@  e       ZAddddZB G d dej                        ZD G d de      ZE G d de      ZFd ZG G d  d!e      ZH G d" d#e      ZI G d$ d%e      ZJ G d& d'e      ZK G d( d)e      ZL G d* d+e      ZM G d, d-e      ZN G d. d/ej                        ZP G d0 d1e      ZQy2)3    )date)viewsetsstatusgenerics)APIView)OrderingFilterSearchFilter)ModelViewSet)Response)action)IsAuthenticated)get_user_model)model_to_dict)CompanyRepository)CompanyContextService)UserRepository)OurLimitOffsetPagination)	send_mail)NoActiveCompanyError)CompanyOfficeHoursSalesTimingCatchPhraseCompanyHistoryHolidayCompanyBotSettings)CompanySerializerUserCompaniesSerializerSwitchCompanySerializerSetDefaultCompanySerializerOfficeHoursSerializerSalesTimingSerializerCatchPhraseSerializerCompanyHistorySerializerHolidaySerializerCompanyBotSettingsSerializerCompanyBotsListSerializer)apply_to_all_companies_bulkvalidate_office_hoursvalidate_sales_timingsapply_holidays_to_all_companieslog_company_change)SuperAdminOnlyCompanyPermissionAllowAnyzBot NamezPhone NumberzActive Statusbot_namephone_number	is_activec                        e Zd ZdZeZegZd Zy)CompanyBotsListViewz
    Simple list view that returns company bots
    - No company_id parameter: returns ALL companies' bots
    - With company_id parameter: returns only that company's bots
    c                    | j                   j                  j                  dd       }|r0t        j                  j                  |d      j                  d      S t        j                  j                  d      j                  d      S )N
company_idTidr3   bot_settingsr3   )requestquery_paramsgetr   objectsfilterprefetch_related)selfr7   s     C/var/www/html/dp2/backend_v2.1/server/apps/companies/views/views.pyget_querysetz CompanyBotsListView.get_querysetH   s|    \\..22<F
??)) *  ~./
 ??)) * ~./    N)	__name__
__module____qualname____doc__r'   serializer_classr   permission_classesrD    rE   rC   r5   r5   ?   s    
 1)*/rE   r5   c                   8    e Zd ZdZeZegZd Zd Z	d Z
d Zd Zy)CompanyBotSettingsViewSetzECompany Bot Settings management ViewSet - handles all CRUD operationsc                 N    | j                   dv rt        d      gS t        d      gS ),Return different permissions based on actionlistretrieveview_company_botsedit_company_botsr   r.   rB   s    rC   get_permissionsz)CompanyBotSettingsViewSet.get_permissionsZ   s-    ;;..%&9:;;%&9:;;rE   c                     | j                   j                  }|j                  s
t               t        j
                  j                  |j                        S )z:Filter to show only bot settings for user's active companycompany)r<   useractive_companyr   r   r?   r@   rB   r\   s     rC   rD   z&CompanyBotSettingsViewSet.get_queryseta   sJ    ||  ""&((!))00'' 1 
 	
rE   c           
          | j                   j                  j                  }|s
t               |j	                  |      }t        || j                   j                  dd|j                  d| d       y)z9Set company when creating bot settings and log the changerZ   createdr   zCreated bot settings: ''r[   r\   r   
model_name	object_iddetailsN)r<   r\   r]   r   saver,   r9   )rB   
serializerr[   r:   s       rC   perform_createz(CompanyBotSettingsViewSet.perform_createj   sd    ,,##22&((!w7""+"oo-l^1=	
rE   c                 4   | j                         }t        |g d      }|j                         }t        |g d      }g }|D ]D  }||   ||   k7  st        j	                  ||      }|j                  | d||    d||    d       F |r|j	                  d       dxs |j                   dxs d}	t        | j                  j                  j                  | j                  j                  d	d
|j                  d|	 ddj                  |      z          yy)z&Log changes when updating bot settingsr0   )fieldsz Changed From '' to 'ra   r1   z BotBotupdatedr   zUpdated z Settings: z, rb   N)
get_objectr   rf   FIELD_LABELSr>   appendr1   r,   r<   r\   r]   r9   join)
rB   rg   instanceold_dataupdated_instancenew_datachangesfieldlabelr1   s
             rC   perform_updatez(CompanyBotSettingsViewSet.perform_update{   s'   ??$ <

 &??, <

 E(5/1$((6%7HxX]N__`ab 
 ",,z2348g?O?X?X>YY]<^gbgH))88\\&& /*--"8*K8499W;MM rE   c           
          t        | j                  j                  j                  | j                  j                  dd|j                  d| d       |j                          y)z&Log changes when deleting bot settingsdeletedr   zDeleted bot settings: 'ra   rb   N)r,   r<   r\   r]   r9   deleterB   rr   s     rC   perform_destroyz)CompanyBotSettingsViewSet.perform_destroy   sQ     	LL%%44""+kk-hZq9	
 	rE   N)rF   rG   rH   rI   r&   rJ   r.   rK   rX   rD   rh   ry   r~   rL   rE   rC   rN   rN   U   s.    O3+,<

"BrE   rN   c                   Z     e Zd ZdZeZegZeZ	e
egZg dZg dZdgZd Zd Z fdZ xZS )CompanyViewSetz8Company management ViewSet - handles all CRUD operations)namephonewebsite)r   
created_atr3   
user_countz-created_atc                     | j                   dk(  rt               gS | j                   dv rt        d      gS | j                   dk(  rt        d      gS t        d      gS )rP   createupdatepartial_updateedit_companydestroydelete_companyview_company)r   r-   r.   rW   s    rC   rX   zCompanyViewSet.get_permissions   s^    ;;(""$%%[[88%n566[[I%%&6788%n566rE   c                 V    t        j                  | j                  j                        S )z1Filter to show only companies the user belongs to)r\   )r   qs_with_dashboard_datar<   r\   rW   s    rC   rD   zCompanyViewSet.get_queryset   s"     77""
 	
rE   c                    | j                         }|j                  }|}|j                  }|j                  j	                  d      }t        
|   |g|i |}	|	j                  dv r/t        j                  j                  ||dd|j                  d       |	 t        |t              rt        t        |            n
t        |      }||k7  rd|	j                  d<   ||	j                  d	<   |d
u r|j$                  |k(  rd|	j                  d<   |d
u rt'        |       |	S # t         t"        f$ r |j                  }Y sw xY w)z&Handle PATCH requests and log changes.r3   )      rm   zCall SettingszUpdated call settings)r[   
updated_byr   rc   rd   re   Tcompany_status_changedis_now_activeFforce_session_refresh)rn   r\   r3   datar>   superr   status_coder   r?   r   r9   
isinstancestrboolint
ValueError	TypeErrorr]   'handle_users_after_company_deactivation)rB   r<   argskwargsrr   r\   r[   
old_status
new_statusresponse	__class__s             rC   r   zCompanyViewSet.partial_update   sG   ??$||''
\\%%k2
7)'CDCFC:-"")) *!**/ *  !0 "*c2 Z)j)  Z':>671;o.U"t':':g'E9=56U"7@ 	* 0%//
0s   /D D=<D=)rF   rG   rH   rI   r   rJ   r.   rK   r   pagination_classr   r	   filter_backendssearch_fieldsordering_fieldsorderingrX   rD   r   __classcell__)r   s   @rC   r   r      sJ    B(+,/%|4O0MGOH	7
) )rE   r   c                 B   t        j                  |       }|D ]  }|j                  j                  d      j	                  | j
                        }|j                         r&|j                         |_        |j                          od |_        |j                           y )NTr;   r9   )
r   get_user_by_active_company	companiesr@   excluder9   existsfirstr]   rf   )r[   usersr\   other_active_companiess       rC   r   r      s    55g>E!%!6!6 "7 "

'WZZ'
  	 "((*"8">">"@DIIK"&DIIK rE   c                   `    e Zd ZdZeZegZeZ	d Z
d Zd Zd Zd Z eddg	      dd       Zy
)ActiveCompaniesViewzReturn only active companiesc                     | j                   dk(  rt               gS | j                   dv rt        d      gS | j                   dk(  rt        d      gS t               gS )rP   r   r   r   r   r   )r   r-   r.   r/   rW   s    rC   rX   z#ActiveCompaniesView.get_permissions  sZ    ;;(""$%%[[88%n566[[I%%&6788J<rE   c                    | j                   j                  }| j                   j                  j                  dd       }|j                  rQt
        j                  j                  dddd      j                  d      j                  d      j                  d	      }nL|j                  j                  dddd      j                  d      j                  d      j                  d	      }|rV|j                  sJg }|D ]1  }|j                  ||
      s|j                  |j                         3 |j                  |      S |S )N
permissionmissing_call_notify_tooffice_hourssales_timingscatch_phrasesdefault_transfer_staffTr;   
updated_atrZ   )id__in)r<   r\   r=   r>   is_superuserr   r?   rA   select_relatedr@   order_byr   has_company_permissionrp   r9   )rB   r\   permission_codenamequerysetfiltered_companiesr[   s         rC   rD   z ActiveCompaniesView.get_queryset  s-   ||  "ll77;;L$O 77(	
 n56vv 8> 8h|$  ~~66(	
 n56vv 8> 8h|$  t'8'8!##../BG.T&--gjj9 $ ??*<?==rE   c                 $    |j                          y)z$Custom logic when creating a companyNrf   rB   rg   s     rC   rh   z"ActiveCompaniesView.perform_create4      rE   c                 $    |j                          y)z$Custom logic when updating a companyNr   r   s     rC   ry   z"ActiveCompaniesView.perform_update8  r   rE   c                 2    d|_         |j                          y)z8Soft delete - set is_active to False instead of deletingFN)r3   rf   r}   s     rC   r~   z#ActiveCompaniesView.perform_destroy<  s    "rE   TpostdetailmethodsNc                    |j                   j                  s8|j                   j                  d      st        ddit        j
                        S 	 |}t        d|        	 t        j                  j                  |d      }t        d|j                          |j                  j                  d      }t        d|        |st        ddit        j                        S 	 t        j                  j                  |      }t        d|j                           |j"                  j%                  |       |j&                  s||_        |j)                          |j*                  r]|j                   |j                  t-        j.                         j0                  d}t3        d|j                   d|j*                  g|       t        d|j                    d|j                   d|j4                  |j4                  d      S # t        j                  $ r3 t        d	| d
       t        dd| dit        j                        cY S w xY w# t        j                  $ r$ t        dd| d
it        j                        cY S w xY w# t6        $ rG}t        dt9        |              t        dt9        |      it        j:                        cY d}~S d}~ww xY w)zAdd a user to this companymanage_userserrorz7You do not have permission to manage users in companiesr   z$DEBUG: Looking for company with ID: Tr8   zDEBUG: Found company: zDEBUG: Company with ID z
 not foundzCompany with ID z not found or inactiveuser_idzDEBUG: Adding user ID: zuser_id is requiredr   zDEBUG: Found user: zUser with ID )usernamer   yearzYou are added to zauth/user_added_to_company.html)subjecthtml_contentrecipient_listkeyzUser "z" added to company "")messager   r7   zDEBUG: Exception occurred: N)r\   r   r   r   r   HTTP_403_FORBIDDENprintr   r?   r>   r   DoesNotExistHTTP_404_NOT_FOUNDr   HTTP_400_BAD_REQUESTUserr   r   addr]   rf   emailr   todayr   r   r9   	Exceptionr   HTTP_500_INTERNAL_SERVER_ERROR)	rB   r<   pkr7   r[   r   r\   r   es	            rC   add_userzActiveCompaniesView.add_userA  s    ||((1T1TUc1dST00 
A	J8EF!//--t-L.w||n=> ll&&y1G+G95634!66 
||''7'3+DMM?;< NNw' &&&-#		 zz $#LL JJL--
 /~>!B$(JJ<	 #DMM?2Fw||nTUV77%jj  _ '' /
|:FG 0<RST!44 & $$ gYjAB!44 D  	/Ax89#a&!<< 	si   J !9H  AJ #8I	 C$J  AIJ IJ 	4J =J ?J  J 	K<KKK)N)rF   rG   rH   rI   r   rJ   r.   rK   r   r   rX   rD   rh   ry   r~   r   r   rL   rE   rC   r   r     sS    &(+,/	  D
 4&*J +JrE   r   c                       e Zd ZdZegZd Zy)UserCompaniesViewz+List all companies that the user belongs toc                 ^    t        |j                  d|i      }t        |j                        S )z'Get user's companies and active companyr<   )context)r   r\   r   r   )rB   r<   rg   s      rC   r>   zUserCompaniesView.get  s&    ,W\\IwCWX

((rE   N)rF   rG   rH   rI   r   rK   r>   rL   rE   rC   r   r     s    5)*)rE   r   c                       e Zd ZdZegZd Zy)SwitchCompanyViewzSwitch user's active companyc                 8   t        |j                  d|i      }|j                  d       t        j                  |j
                  |j                  d         }t        d|j                   |j                  |j                  dd	t        j                  
      S )zSwitch to a different companyr<   r   r   Traise_exceptionr[   r\   r[   z"Successfully switched to company: r9   r   r   r[   r   )r   r   is_validr   switch_companyr\   validated_datar   r   r9   r   HTTP_200_OKrB   r<   rg   r[   s       rC   r   zSwitchCompanyView.post  s    ,(

 	D1'66--i8

 ;GLL>J%jj',,?
 $$& 	&rE   NrF   rG   rH   rI   r   rK   r   rL   rE   rC   r   r     s    &)*&rE   r   c                       e Zd ZdZegZd Zy)SetDefaultCompanyViewzSet user's default companyc                 :   t        |j                  d|i      }|j                  d       t        j                  |j
                  |j                  d         }t        d|j                   d|j                  |j                  d	d
t        j                        S )zSet default companyr<   r   Tr   r[   r   zSuccessfully set z as default companyr   r   r   )r    r   r   r   set_default_companyr\   r   r   r   r9   r   r   r   s       rC   r   zSetDefaultCompanyView.post  s    0(

 	D1';;--i8

 *7<<.8KL%jj',,?
 $$& 	&rE   Nr  rL   rE   rC   r  r    s    $)*&rE   r  c                   Z    e Zd ZdZeZegZd Zd Z	d Z
d Zd Z eddg	      d
        Zy)OfficeHoursViewSetz.Office hours management - full CRUD operationsc                 N    | j                   dv rt        d      gS t        d      gS )rP   rQ   view_officehoursedit_officehoursrV   rW   s    rC   rX   z"OfficeHoursViewSet.get_permissions  -    ;;..%&89::%&89::rE   c                     | j                   j                  }|j                  s
t               t        j
                  j                  |j                        j                  dd      S )z:Filter to show only office hours for user's active companyrZ   day
start_time)r<   r\   r]   r   r   r?   r@   r   r^   s     rC   rD   zOfficeHoursViewSet.get_queryset  V    ||  ""&((""))'' * 

(5,
'	(rE   c                 L   |j                  | j                  j                  j                        }t	        | j                  j                  j                  | j                  j                  dd|j
                  d|j                   d|j                   d|j                          y)	z9Set company when creating office hours and log the changerZ   r`   r   zCreated  office hours:  - rb   N)	rf   r<   r\   r]   r,   r9   r  r  end_time)rB   rg   office_hours      rC   rh   z!OfficeHoursViewSet.perform_create  s     ooLL%%44 & 

 	LL%%44""$!nn{/"--.c+2F2F1GI	
rE   c                    | j                         }|j                   d|j                   d|j                   }|j	                         }|j                   d|j                   d|j                   }t        | j                  j                  j                  | j                  j                  dd|j                  d| d| d       y	)
z&Log changes when updating office hoursz: r  rm   r   zUpdated office hours from 'rk   ra   rb   N)
rn   r  r  r  rf   r,   r<   r\   r]   r9   )rB   rg   old_instanceold_detailsr  new_detailss         rC   ry   z!OfficeHoursViewSet.perform_update  s    (&**+2&112#&//02 !oo' &//*"%001%../1 	LL%%44""$!nn#}F;-q:	
rE   c                    t        | j                  j                  j                  | j                  j                  dd|j                  d|j
                   d|j                   d|j                          |j                          y)z&Log changes when deleting office hoursr{   r   zDeleted r  r  rb   N)	r,   r<   r\   r]   r9   r  r  r  r|   r}   s     rC   r~   z"OfficeHoursViewSet.perform_destroy   sq     	LL%%44""$kkx||nO**+3x/@/@.AC	
 	rE   Fr   r   c                 0    t        |t        dt              S )z<Apply current company's office hours to all user's companiesr   r<   model_classrc   validation_func)r(   r   r)   rB   r<   s     rC   apply_to_all_companiesz)OfficeHoursViewSet.apply_to_all_companies  s     +#$1	
 	
rE   N)rF   rG   rH   rI   r!   rJ   r.   rK   rX   rD   rh   ry   r~   r   r  rL   rE   rC   r  r    sJ    8,+,;(
"
. 56(+
 ,
rE   r  c                   Z    e Zd ZdZeZegZd Zd Z	d Z
d Zd Z eddg	      d
        Zy)SalesTimingViewSetz.Sales timing management - full CRUD operationsc                 N    | j                   dv rt        d      gS t        d      gS )rP   rQ   view_salestimeedit_salestimerV   rW   s    rC   rX   z"SalesTimingViewSet.get_permissions  s-    ;;..%&6788%&6788rE   c                     | j                   j                  }|j                  s
t               t        j
                  j                  |j                        j                  dd      S )z;Filter to show only sales timings for user's active companyrZ   botr  )r<   r\   r]   r   r   r?   r@   r   r^   s     rC   rD   zSalesTimingViewSet.get_queryset%  r  rE   c                 L   |j                  | j                  j                  j                        }t	        | j                  j                  j                  | j                  j                  dd|j
                  d|j                   d|j                   d|j                          y)	z9Set company when creating sales timing and log the changerZ   r`   r   zCreated sales timing for bot '': r  rb   N)	rf   r<   r\   r]   r,   r9   r&  r  r  )rB   rg   sales_timings      rC   rh   z!SalesTimingViewSet.perform_create.  s    !LL%%44 ' 

 	LL%%44""$"oo$(()#../s<3H3H2IK		
rE   c                    | j                         }d|j                   d|j                   d|j                   }|j	                         }d|j                   d|j                   d|j                   }t        | j                  j                  j                  | j                  j                  dd|j                  d| d| d	       y
)z&Log changes when updating sales timingzBot 'r(  r  rm   r   zUpdated sales timing from 'rk   ra   rb   N)
rn   r&  r  r  rf   r,   r<   r\   r]   r9   )rB   rg   r  r  r)  r  s         rC   ry   z!SalesTimingViewSet.perform_update@  s    (|//0&112#&//02 "( |//0&112#&//02 	LL%%44""$"oo#}F;-q:	
rE   c                    t        | j                  j                  j                  | j                  j                  dd|j                  d|j
                   d|j                   d|j                          |j                          y)z&Log changes when deleting sales timingr{   r   zDeleted sales timing for bot 'r(  r  rb   N)	r,   r<   r\   r]   r9   r&  r  r  r|   r}   s     rC   r~   z"SalesTimingViewSet.perform_destroyW  st     	LL%%44""$kk ~S**+3(()+
	
 	rE   Fr   r   c                 0    t        |t        dt              S )z=Apply current company's sales timings to all user's companiesr   r  )r(   r   r*   r  s     rC   r  z)SalesTimingViewSet.apply_to_all_companiesh  s     +#$2	
 	
rE   N)rF   rG   rH   rI   r"   rJ   r.   rK   rX   rD   rh   ry   r~   r   r  rL   rE   rC   r!  r!    sJ    8,+,9(
$
." 56(+
 ,
rE   r!  c                   8    e Zd ZdZeZegZd Zd Z	d Z
d Zd Zy)CatchPhraseViewSetz.Catchphrases management - full CRUD operationsc                 N    | j                   dv rt        d      gS t        d      gS )rP   rQ   view_catchphraseedit_catchphraserV   rW   s    rC   rX   z"CatchPhraseViewSet.get_permissionsw  r  rE   c                     | j                   j                  }|j                  s
t               t        j
                  j                  |j                        j                  d      S )z:Filter to show only catchphrases for user's active companyrZ   phrase)r<   r\   r]   r   r   r?   r@   r   r^   s     rC   rD   zCatchPhraseViewSet.get_queryset~  sT    ||  ""&((""))'' * 

(8
	rE   c           
         |j                  | j                  j                  j                        }t	        | j                  j                  j                  | j                  j                  dd|j
                  d|j                   d       y)z8Set company when creating catchphrase and log the changerZ   r`   r   zCreated catch phrase: 'ra   rb   N)rf   r<   r\   r]   r,   r9   r3  )rB   rg   catch_phrases      rC   rh   z!CatchPhraseViewSet.perform_create  sr    !LL%%44 ' 

 	LL%%44""$"oo-l.A.A-B!D	
rE   c                 *   | j                         }d|j                   d}|j                         }d|j                   d}t        | j                  j
                  j                  | j                  j
                  dd|j                  d| d|        y)z%Log changes when updating catchphrasera   rm   r   zUpdated catch phrase from  to rb   N)rn   r3  rf   r,   r<   r\   r]   r9   )rB   rg   r  r  r5  r  s         rC   ry   z!CatchPhraseViewSet.perform_update  s    (,--.a0!( ,--.a0LL%%44""$"oo0"m4}6	
rE   c           
          t        | j                  j                  j                  | j                  j                  dd|j                  d|j
                   d       |j                          y)z%Log changes when deleting catchphraser{   r   zDeleted catch phrase: 'ra   rb   N)r,   r<   r\   r]   r9   r3  r|   r}   s     rC   r~   z"CatchPhraseViewSet.perform_destroy  sV     	LL%%44""$kk-hoo->a@	
 	rE   N)rF   rG   rH   rI   r#   rJ   r.   rK   rX   rD   rh   ry   r~   rL   rE   rC   r.  r.  r  s-    8,+,;
 
&rE   r.  c                   :    e Zd ZdZeZegZeZ	e
egZg dZd Zd Zy)CompanyHistoryViewSetz>Company history view set - read-only access to company history)company__nameupdated_by__usernamerc   r   re   c                     | j                   j                  }|j                  st        j                  j                         S |j                  j                  j                         S )z5Filter to show only history for user's active company)r<   r\   r]   r   r?   nonehistoryallr^   s     rC   rD   z"CompanyHistoryViewSet.get_queryset  sJ    ||  ""!))..00""**..00rE   c                     t        d      gS )z(Explicitly check view_company permissionr   )r.   rW   s    rC   rX   z%CompanyHistoryViewSet.get_permissions  s    !.122rE   N)rF   rG   rH   rI   r$   rJ   r.   rK   r   r   r	   r   r   r   rD   rX   rL   rE   rC   r:  r:    s5    H/+,/#^4OM13rE   r:  c                   Z    e Zd ZdZeZegZd Zd Z	d Z
d Zd Z eddg	      d
        Zy)HolidayViewSetz)Holiday management - full CRUD operationsc                 N    | j                   dv rt        d      gS t        d      gS )rP   rQ   view_holidaysedit_holidaysrV   rW   s    rC   rX   zHolidayViewSet.get_permissions  s+    ;;..%o677%o677rE   c                     | j                   j                  }|j                  s
t               t        j
                  j                  |j                        j                  d      j                  d      S )z6Filter to show only holidays for user's active companyrZ   bots
start_date)	r<   r\   r]   r   r   r?   r@   rA   r   r^   s     rC   rD   zHolidayViewSet.get_queryset  sY    ||  ""&((%%d.A.A%BSSTZ[ddeqrrrE   c                 L   |j                  | j                  j                  j                        }t	        | j                  j                  j                  | j                  j                  dd|j
                  d|j                   d|j                   d|j                          y)	z4Set company when creating holiday and log the changerZ   r`   r   zCreated holiday '' from r7  rb   N)	rf   r<   r\   r]   r,   r9   r   rI  end_date)rB   rg   holidays      rC   rh   zHolidayViewSet.perform_create  s    //$,,*;*;*J*J/K 	LL%%44"" jj'~WW=O=O<PPTU\UeUeTfg	
rE   c                    | j                         }d|j                   d|j                   d|j                   }|j	                         }d|j                   d|j                   d|j                   }t        | j                  j                  j                  | j                  j                  dd|j                  d| d|        y)	z!Log changes when updating holidayra   rK  r7  rm   r   zUpdated holiday from rb   N)
rn   r   rI  rL  rf   r,   r<   r\   r]   r9   )rB   rg   r  r  rM  r  s         rC   ry   zHolidayViewSet.perform_update  s    (,++,GL4K4K3LDQ]QfQfPgh//# ',,ww/A/A.B$wGWGWFXYLL%%44"" jj+K=[MJ	
rE   c                    t        | j                  j                  j                  | j                  j                  dd|j                  d|j
                   d|j                   d|j                          |j                          y)z!Log changes when deleting holidayr{   r   zDeleted holiday 'rK  r7  rb   N)	r,   r<   r\   r]   r9   r   rI  rL  r|   r}   s     rC   r~   zHolidayViewSet.perform_destroy  so     	LL%%44"" kk'gh>Q>Q=RRVW_WhWhVij	
 	rE   Fr   r   c                     t        |      S )z8Apply current company's holidays to all user's companies)r+   r  s     rC   r  z%HolidayViewSet.apply_to_all_companies  s     /w77rE   N)rF   rG   rH   rI   r%   rJ   r.   rK   rX   rD   rh   ry   r~   r   r  rL   rE   rC   rC  rC    sK    3(+,8s

$ 56(+8 ,8rE   rC  N)Rdatetimer   rest_frameworkr   r   r   rest_framework.viewsr   rest_framework.filtersr   r	   rest_framework.viewsetsr
   rest_framework.responser   rest_framework.decoratorsr   rest_framework.permissionsr   django.contrib.authr   django.forms.modelsr   apps.companies.repositoriesr   apps.companies.servicesr   apps.core.repositoriesr   utils.paginations.paginationr   utils.threads.email_threadr   apps.companies.exceptionsr   apps.companies.modelsr   r   r   r   r   r   r   apps.companies.serializersr   r   r   r    r!   r"   r#   r$   r%   r&   r'   apps.companies.utilsr(   r)   r*   r+   r,   apps.permissions.permissionsr-   r.   r/   r   ro   ListAPIViewr5   rN   r   r   r   r   r   r  r  r!  r.  ReadOnlyModelViewSetr:  rC  rL   rE   rC   <module>rg     s@    5 5 ( ? 0 , , 6 . - 9 9 1 A 0 :         " /(.. /,S SjD\ DL"K, KZ) )& &,&G &,T
 T
lW
 W
rD DL3H99 34D8\ D8rE   