o
    ͿSi                     @   s   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 e eZ			dde	d	ed
ededededee dee dedeeef fddZdS )    N)datetime)AnyDictOptional)HTTPException)ZerodhaClient)MAX_POSITION_SIZEFzerodha_clientuser_idsymbolactionquantity
order_typepriceanalysis_id	confirmedreturnc
                 C   s  |	st ddd|dvrt ddd|dkrt ddd|dkr(|s(t dd	d|p+d| }
|
tkr;t dd
t dz|d| g}|d| i dd}|sZt ddd|dkrt|rtt|| | d }|dkrtt ddd|d||d|dd}|dkr|r||d< z|jd"i |}t|tr|n|d}W n ty } zt	
d| t ddt| dd}~ww |||||||||||dt d}| d |}t|j|||||d|d  dW S  t y     ty	 } zt	
d | t d!t|dd}~ww )#z1Place trading order with basic safety validation.i  zOrder confirmation required)status_codedetail)BUYSELLzAction must be BUY or SELLr   zQuantity must be positiveLIMITzPrice required for LIMIT ordersu"   Position size exceeds limit of ₹zNSE:
last_pricez"Unable to get current market priced   
   z%LIMIT price too far from market priceNSEMISDAY)tradingsymbolexchangetransaction_typer   productr   validityr   order_idz%Zerodha order placement failed for %si  zOrder placement failed: NPLACED)r
   r   r   r   r   r   current_market_pricezerodha_order_idzerodha_responseorder_payloadr   status
created_atordersr*   )r#   r&   r   r   r   r   r)   	timestampzOrder service failed for %si   )r   r   	get_quotegetabsplace_order
isinstancestr	Exceptionlogger	exceptionr   utcnow
insert_oneinserted_id	isoformat)dbr	   r
   r   r   r   r   r   r   r   estimated_value
quote_datacurrent_priceprice_diff_pctr(   r'   r#   e	order_docresultr-   r-   C/var/www/html/Trade-python/app/v1/services/tegpt/orders_services.pyplace_order_service   s   

rD   )NNF)loggingr   typingr   r   r   fastapir   app.v1.services.zerodha.clientr   app.v1.services.tegpt.configr   	getLogger__name__r5   r3   intfloatboolrD   r-   r-   r-   rC   <module>   s>    
	

