o
    'j&                     @   s   d dl Z d dlmZ d dlZd dlmZmZ d dlmZmZ d dl	Z	d dl
Zdd Zdd Zd	d
 Zdd Zdd ZdddZdd Zdd Zdd ZdS )    N)settings)datetime	timedelta)	DelhiveryDeliveryMatrixc                 C   s   | r| j  s	dS d}| j  D ]}|j}|j}|j}t||}|dkr&d}|||j 7 }q|d }||7 }|dkr@tt	|S dS )z.
    Calculate total cart weight in grams
    r   i  g?)
itemsexistsallskusku_quantitysku_unitconvert_to_gramsquantityintround)carttotal_weightitemr
   r   unitweight_per_packpackaging_weight r   D/var/www/html/collabkart/collabkart.saasvaap.com/orders/delhivery.pycalculate_cart_weight   s   
r   c                 C   sz   |   }|dv r| d S |dv r| S |dv r| d S |dv r$| d S |dv r*| S |dv r2| d S td	| d
 dS )N)kgkilogram	kilogramsi  )ggramgramsgmgms)mg	milligram
milligrams)lliterliters)ml
millilitermilliliters)pcpcspiecepiecesnonosnumbernumbers   zUnknown unit: z, defaulting to 0r   )lowerstriploggingwarning)r   r   r   r   r   r   .   s   r   c                 C   sV   t jj| ddd }|sd d dS |d r|d nd |d r'|d dS d dS )N)pincodetat_surfacetat_express)r9   r:   )r   objectsfiltervaluesfirst)r8   datar   r   r   get_delivery_infoL   s   r@   c                 C   s   d}|  d| t jd}zItj||dd}|  | }td|  |ddkrQ|d	g D ] }|d
g D ]}d|dg v rO|d    W S q;q3W d S W d S  tye   t	d Y d S w )N1https://maps.googleapis.com/maps/api/geocode/json,latlngkey      paramstimeoutzGoogle Maps response: statusOKresultsaddress_componentspostal_codetypes	long_namezGoogle Maps API failed)
r   GOOGLE_MAPS_API_KEYrequestsgetraise_for_statusjsonr6   info	Exception	exception)latlngurlrJ   responser?   resultcompr   r   r   get_pincode_from_latlng^   s0   	ra   c              
   C   s  d}|dkrd}| j }nd}d}| j}|j}| j}tjj| d j}i d| j	j
d|jdt|jd	|jd
|jddd| j	jd| jd|dt|dddddt|ddddddddd|j|j|j|jd|j|jdgd|id}	d t|	 }
d!tj d"d"d#}z/tj||
|d$d%}| }|d&g }|r|d d'}d(| }d|||d)W S d*|d+W S  ty } zd*t|d+W  Y d }~S d }~ww ),Nz9https://staging-express.delhivery.com/api/cmu/create.jsonCODPrepaidr   )ordernameaddpincitystatecountryIndiaphonerd   payment_mode
cod_amountproducts_desczBakery Itemsr   1weightshipping_modeSurfacefragile_shipmentTshipment_width20shipment_height15)shipment_lengthreturn_name
return_addreturn_cityreturn_statereturn_country
return_pinreturn_phone)	shipmentspickup_locationzformat=json&data=Token application/json)AuthorizationAcceptzContent-TyperH   )r?   headersrK   packageswaybillz'https://www.delhivery.com/tracking?awb=)successawbtracking_urlrawF)r   error)grand_totalpu_uuidpu_namedrop_addressr   r;   r<   r>   weight_grams	user_uuid
first_namehouse_number_or_namestrpin_coderh   state_or_provincephone_numberorder_IDpu_location
contact_norW   dumpsr   DELHIVERY_API_KEYrT   postrU   rY   )rd   payment_typer]   rm   rn   pupickup_nameaddressr   shipment_datapayloadr   r^   r?   r   r   r   er   r   r   create_delhivery_shipment{   s   
	'-

r   Sc                 C   s   d}t  tdd d}t| t||d|d}ddtj d	}z@tj|||d
d}|	  |
 }td|  t|trJ|rH|d ni }|d}	|d}
|	s\dd dW S t|	|
dW S  tyv   td dd d Y S w )Nz/https://track.delhivery.com/api/dc/expected_tat   )daysz%Y-%m-%dB2C)
origin_pindestination_pinmotpdtexpected_pickup_dater   r   )r   r   rF   rJ   r   rK   zTAT API response: r   tatexpected_delivery_datez3-5)r   r   zTAT API failed)r   todayr   strftimer   r   r   rT   rU   rV   rW   r6   rX   
isinstancelistrY   rZ   )r   r   moder]   pickup_daterJ   r   r^   r?   r   expected_dater   r   r   get_expected_delivery_time   s:   	




r   c                 C   s   d|  }dt j dd}z,tj||dd}|jdkrW dS | }|d	g }t|o8|d
 di ddkW S    Y dS )NzIhttps://staging-express.delhivery.com/c/api/pin-codes/json/?filter_codes=r   r   )r   r   rH   )r   rK   r3   Fdelivery_codesr   rP   remarkEmbargo)r   r   rT   rU   status_coderW   bool)r8   r]   r   r^   r?   r   r   r   r   check_pincode  s    


r   c           	      C   s   d}|d|| ||d}zAt j||ddtj idd}|  | }td|  t|t	r>|r;|d	 d
d	W S d	W S t|t
rJ|d
d	W S W d	S  ty[   td Y d	S w )NzHhttps://staging-express.delhivery.com/api/kinko/v1/invoice/charges/.json	Delivered)mdssd_pino_pincgmptr   r   rF   r   z%Delhivery charge API success | data: r   total_amountzDelhivery charge API failed)rT   rU   r   r   rV   rW   r6   rX   r   r   dictrY   rZ   )	
pickup_pindrop_pincart_weightr   r   r]   rJ   r^   r?   r   r   r   get_delhivery_charge(  s6   	


r   c           	      C   s   d}|  d| t jd}tj||dd}| }d d d d d}|d dkr`|d	 d
 d D ]1}|d }d|v r?|d |d< q.d|v rJ|d |d< q.d|v rU|d |d< q.d|v r_|d |d< q.|S )NrA   rB   rC   rH   rI   )streetrh   ri   r8   rL   rM   rN   r   rO   rQ   routerR   r   localityrh   administrative_area_level_1ri   rP   r8   )r   rS   rT   rU   rW   )	r[   r\   r]   rJ   r^   r?   r_   r`   rQ   r   r   r   get_full_address_from_latlngO  s0   r   )r   )rW   django.confr   rT   r   r   orders.modelsr   r   r6   pandaspdr   r   r@   ra   r   r   r   r   r   r   r   r   r   <module>   s    #
f,'