
    4ʜh                        d dl mZmZm Z mZ d dlmZmZmZmZ d dl	m
Z
mZmZmZmZmZ d dlmZ d dlmZ d dlZd dlZd dlZd dlmZ 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$m%Z%m&Z& d dl'm(Z( ddl)m*Z* d dl+m,Z,m-Z-m.Z.m/Z/ d dl0Z0d dl1m2Z2 d dl	m
Z
mZmZm3Z3mZ d dl4m5Z5 d dl1m2Z2m6Z6m7Z7m8Z8m9Z9m:Z:  e
       Z;e;jy                  d       ed       ee       ee*      fdee=ef   dedefd       Z>y)    )date	timedeltadatetimetimezone)DictAnyListOptional)	APIRouterBodyHTTPExceptionQueryDependsRequest)	BaseModel)SessionN)HTTPBasicAuth)BookingIntent
CallSourceTwilioTerminationReason)get_db)get_twillio_client)convert_to_utc)get_current_time_in_timezoneget_directoryis_off_hours)get_caller_name_by_phone_number   )validate_token)SettingsAdvisorCallsLogTransferResult)VoiceResponse)r   r   r   statusr   )Response)r$   ConnectStartStreamDial
Conferencez/bdc/dashboard.requestdbcurrent_userc                 
  K   | j                  d      }| j                  d      }| j                  dd      }| j                  dd      }| j                  dd      }|dz
  |z  }t        |t              r	 t        j                  |      }t        |t              r	 t        j                  |      }t        j                         }	|s|	t        d      z
  }|s|	}|rt        |      }|rt        |      }t        j                  |t        j                  j                               }
t        j                  |t        j                  j                               }t        j                          }	|s|	t        d      z
  }|s|	}|j#                  t$              j'                  t$        j(                  dk(        j+                         }|st-        dd      |j.                  j                  dd      }|j#                  t0              j'                  t0        j2                  |k(        j+                         }|st-        dd|       |j4                  }|j#                  t6              j'                  t6        j8                  |k(  t6        j:                  |
k\  t6        j:                  |k        }|j=                         }|j?                  t6        j:                  jA                               jC                  |      jE                  |      jG                         }|j#                  t6              jI                  tJ        t6        jL                  tJ        jL                  k(        j'                  t6        j8                  |k(  t6        j:                  |
k\  t6        j:                  |k  tJ        jN                  dk(        j=                         }|j'                  t6        jP                  tR        jT                  k(        j=                         }|j'                  t6        jP                  tR        jV                  k(        j=                         }g }|D ]  }|jY                  |j:                  |jZ                  |j\                  |j^                  |jL                  |jP                  dk(  rdnd|j`                  |jb                  xs d|jd                  |jf                  d
        ti        jj                  ||z        }d}d}d}|dkD  r||z  dz  }||z  dz  }||z  dz  }||||d|||d||||dS # t
        $ r t        j                  |d	      }Y w xY w# t
        $ r. t        j                  |d	      }|j                  d
dd      }Y w xY ww)zY
    Get bdc calls for a given date range.
    Returns calls along with total count.
    
start_dateend_dater   zAmerica/Los_Angelespage   	page_size
   z%Y-%m-%d   ;   )hourminutesecond   )days
BDC_NUMBERi  z BDC number not found in settings)status_codedetail" z!No record found with BDC number: FPositiveNegative)
call_datetimecustomer_namecustomer_number	sentimenttwilio_call_idschedule_intentionschedule_datetimecall_summarycall_id
transcriptr   d   )total_callscalls_missed	schedulednot_scheduled)rP   rQ   rR   )summary
percentagecallsr2   r4   total_pages)6get
isinstancestrr   fromisoformat
ValueErrorstrptimereplacenowr   r   combinemintimemaxr   todayqueryr    filternamefirstr   valuer!   phone_numberidr"   transferred_tocall_date_timecountorder_bydescoffsetlimitalljoinr#   rH   r%   booking_intentr   YESNOappendcaller_namecaller_numbersentiment_scorerJ   twilio_recording_textrL   rM   mathceil)r,   r-   r.   r0   r1   r   r2   r4   rp   rc   start_datetimeend_datetimebdc_settings
bdc_numberadvisor
advisor_idrd   rO   rU   rP   rQ   rR   	call_datacallrV   calls_missed_percentagescheduled_percentagenot_scheduled_percentages                               H/var/www/html/DP/alpha_backend/app/advisor_service/routers/bdc_router.pybdc_dashboardr      s     \*J{{:&H{{:'<=H;;vq!DK,IQh)#F*c"	C!//
;J (C 	G--h7H
 LLNEYB//
#J/
!(+%%j(,,2C2C2EFN##Hhll.?.?.ABLJJLEYB//
88H%,,%eg  4VWW##++C4Jhhw&&
*eg  6WXbWc4deeJHHX%%:->1</E ++-KNN822779:AA&IOOPYZ^^`E 		nh559V9VV	W	##z1##~5##|3!!U*	

 
  X448I8IIJPPRILL!8!8M<L<L!LMSSUMI!00!--#11--"11040C0Cq0H*j!%!7!7 66<"||//
 	  ))K)34K Q#/+#="D )K 73>$1K$?3#F  '("*	
 4-5

 " K  	C!**:zBJ	C  	G((:>H''R2'FH	GsO   A1U94T 	U9T? /Q*U9T<8U9;T<<U9?3U62U95U66U9)?r   r   r   r   typingr   r   r	   r
   fastapir   r   r   r   r   r   pydanticr   sqlalchemy.ormr   r|   requestsosrequests.authr   app.common.constantsr   r   r   app.common.databaser   app.common.twillio_helperr   app.common.utilsr   !app.retell_service.routers.retellr   r   r   /app.retell_service.services.caller_info_servicer   services.auth_utilsr   app.common.modelsr    r!   r"   r#   httpxtwilio.twiml.voice_responser$   r%   fastapi.responsesr&   r'   r(   r)   r*   r+   routerpostrY   r        r   <module>r      s    8 8 , , K K  "   	 ' S S & 8 + g g [ 0 I I  5 C C & _ _	"3i&/ 0I#s(^II I Ir   