o
    Q?hN$                     @   s   d dl Z d dlZd dlZd dlmZ d dl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 d dlmZmZ d	efd
dZd	edefddZ	dd	edededededefddZd	edededededefddZdS )    N)date)HTTPBasicAuth)SANDBOX)getCountriesFromDb)	API_Error)convertCarrierconvertRategetShipmentPlatformCredssaveShipment)get_file_pathupload_blobenterpriseIdc           	   
   C   s   t | d}g }|rs|ddkr|S zId}d|dpdd}tj||d	}|jd
krR| }d|v rHt|d trH|d }dd |D }W |S dd |D }W |S t|j|j W |S  t	yr } zt| W Y d }~|S d }~ww |S )NMACHSHIPenabledFz0https://live.machship.com/apiv2/companies/getAll
text/plainapiKey,faw4y7vQj0CG6SKhX17OsgU2vwirRkXU_DIYOzFEAcAwaccepttokenheaders   objectc              
   S   0   g | ]}t |d dd|d|ddqS idr   MachshipnamedisplayName)r   
platformIdplatformNamer   descriptionr   get.0carrier r(   Q/var/www/html/riverr-enterprise-integrations-main/functions/Shipments/Machship.py
<listcomp>)       zgetCarriers.<locals>.<listcomp>c              
   S   r   r   r#   r%   r(   r(   r)   r*   5   r+   )
r	   r$   requestsstatus_codejson
isinstancelistprinttext	Exception)	r   credscarriersurlr   resresponse_datacarrier_lister(   r(   r)   getCarriers   sD   



r;   	companyIdc              
   C   s   t | d}g }|std |S z6d| }d|dpdd}tj||d}|jd	kr7| }td
| W |S td|j d|j  W |S  tjy` } ztd|  W Y d}~|S d}~ww )z@Fetch available carrier accounts and services from MachShip API.r   "No credentials found for MACHSHIP.z\https://live.machship.com/apiv2/companies/getAvailableCarriersAccountsAndServices?companyId=r   r   r   r   r   r   zSuccessfully fetched services:zError fetching services:  - Request failed: N)r	   r1   r$   r,   r-   r.   r2   RequestException)r   r<   r4   servicesr6   r   r7   r:   r(   r(   r)   getServicesH   s.   



rB   fromAddressorderparcelpackageCodec              
      sr  t | d}g }|std |S z|dd|dd } dv r(d nt dkr@ fd	d
t  D }	|	r@|	d  t|d|d|ddd}
|dkr]tddddd}
d| }d|dpidd}tj||t||d ||
dd}|j	dkr|
 }td| W |S td|j	 d|j  W |S  tjy } ztd |  W Y d!}~|S d!}~ww )"z7Get shipping rates for a given order from MachShip API.r   r=   shippingAddresscountryzip)zUnited StateszUnited States of AmericaUS   c                    s$   g | ]}| d  kr| dqS )r   code)r$   )r&   c	toCountryr(   r)   r*      s
    zgetRates.<locals>.<listcomp>r   lengthwidthheightinches)rP   rQ   rR   unitsletter      g?z8https://live.machship.com/apiv2/quotes/getAll?companyId=r   r   r   r   )carrierCodefromPostalCoderO   toPostalCode
dimensionsr   r.   r   zSuccessfully fetched rates:zError fetching rates: r>   r?   N)r	   r1   r$   lenr   valuesdictr,   postr-   r.   r2   r@   )r   rC   rD   rE   r<   rF   r4   ratestoZip	countriesr[   r6   r   r7   r:   r(   rN   r)   getRatesj   sl   




rd   	toAddressratec                 C   s  | d| d| d}}}	 t| d}	d }
|	s!td |
S zt|||| dt| ddd	| d
| d| d| ddgtd| d| d| d| d| d| d| d| dd	td| d| d| d| d| d| d| d| dd	gd}
d}d|	 dpdd}tj|||
d }|jd!kr| }
td"|
 W |
S td#|j d$|j  W |
S  tj	y } ztd%|  W Y d }~|
S d }~ww )&N	carrierId	serviceIdrateIdr   r=   orderIdr"   Parcel   weightrP   rQ   rR   )itemDescriptionitemQuantity
itemWeight
itemLength	itemWidth
itemHeightFromaddress1address2citystaterI   rH   r   phone)	addressTypeaddressLine1addressLine2suburbrx   postcoderH   contactNamecontactPhoneTo)rX   serviceCodequoteIdconsignmentReferenceconsignmentItemsconsignmentAddressesz>https://live.machship.com/apiv2/consignments/createConsignmentr   r   r   r   r\   r   zSuccessfully created shipment:zError creating shipment: r>   r?   )
r$   r	   r1   r_   r,   r`   r-   r.   r2   r@   )r   rD   rC   re   rE   rf   r<   rh   ri   r4   shipmentr6   r   r7   r:   r(   r(   r)   createShipment   s~   "

*

r   )N)base64r.   osdatetimer   r,   requests.authr   configs.firebaser   functions.Etsy.Ordersr   functions.Responser   functions.Shipments.Convertr   r   r	   r
   functions.Storager   r   strr;   rB   r_   rd   r   r(   r(   r(   r)   <module>   sP    6(
N