U
    Shb                     @   s   d dl Z d dl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
  mZ e Ze Zdd Zdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )    N)datetime)tz)tabulatec              
   C   s   t | }zttd|d |d T}|d ||j}|d ||j}|rrt jdddt| d	g| d
 W 5 Q R X W nD t	k
r } z&t j
d|  d t|  W Y dS d }~X Y nX t j
d|  d t|  |S )Nftp.crossdocks.com.auusernamepasswordout/pendingz../../in/rejectedr   ZCD_FTP_Rejected_Filesz(Rejected Files reported by Cross Docks:
globalcustomerz/Cross Docks Error on getting pending files for z
Exception : FzFiles returned for z from FTP curdir:)commonget_CD_FTP_credentialsftputilFTPHostchdirlistdircurdir
send_emailstr	Exceptionloggerwarningdebug)r   cross_docks_infoftp_hostZpending_filesrejected_filesex r   5/var/www/FlaskApp/FlaskApp/app/cross_docks_polling.pyget_pending_FTP_files   s    


,r   c              
   C   s   t | }zPtd|d |d 0}|| ||d}| }W 5 Q R X W 5 Q R X W nD tk
r } z&t j	d|  d t
|  W Y dS d }~X Y nX |S )Nr   r   r   rzError in get_data_FTP for z: F)r   r   r   r   r   openreadr   r   r   r   )r   	directoryfr   r   fobjdatar   r   r   r   get_data_FTP$   s    

 r'   c           	      C   s   t jrt | }ztd|d |d d}||d | dD}||d | d$}||| ||d |  W 5 Q R X W 5 Q R X W 5 Q R X W nD tk
r } z&t j	
d|  d t|  W Y d	S d }~X Y nX d
S t j	d|  d
S d S )Nr   r   r   /rbwbzError in move_CD_file_FTP for :FTzCD file move for  : zFFile not moved on Cross Docks FTP server as FTP is inactive
File Name:)r   
FTP_activer   r   r   r!   copyfileobjremover   r   r   r   r   fileinfo)	r   sourcedestr$   r   r   Z
source_objZdest_objr   r   r   r   move_CD_file_FTP3   s    
4 r4   c                 C   sd   t jtd| d||}t| ||sDtjd| d |  dS tjd|  d |  dS d S )	Ncustomer_parameters
dbx_folderzMCross Docks file not stored in Dropbox - processing has continued
File Name: z
File Contents : 
FzDropbox upload successful for r,   T)	ospathjoinr   access_secret_versionstore_dropboxr   r   r   )r   	file_datafolder	file_namedbx_filer   r   r   upload_file_to_dropboxL   s    r@   c                 C   sh   g }| D ]2}| dd |kr|| d|d    qt|dkrLd S t|dkr`|d S |S |S )N|r      )splitappendstriplen)r&   riZcol_idr1   liner   r   r   get_CD_parameterW   s    rI   c           
      C   s  t |dd}t |dd}tjd|  | rB|dkr@d}n|dkrNd}nd	}tjd
|  d| d | }tj| d|d}	|	d stjddd| d d | d | d | dg| d tjd nr|	d dkr|	d td< dtd< dtd< nH|	d td< dtd< tjd|  d t	|	d  d | d t	|  nDd td< d!td< d"td#< tj| d$ t	t d% | d t	|  d S )&NMO      z
order_id: Az4Cross Docks info update - Order file acknowledgementIz*Cross Docks info update - Order activationz!Cross Docks info update - unknownzservic_tag: %https://api.uphance.com/pick_tickets/z	?service=puturlr   CD_FTP_Process_info"CD processing complete:
Stream ID:
Input File: URL: r	   r
   zMO email sent404File Not Found (404) Error on processing information from Cross Docks - pick ticket may have been deleted after order processing has started

File moved to "received" folderError Email TextFile StatuszLogging warning for z=: MO file was not procesed by Uphance.
HTTP Error returned = zD

File was not processed - will be retried at next run : FileName = 

Cross Docks data:

TrB   5Unable to retrieve order number from Cross Docks infoLogger Text

!

File was rejected : FileName = )
rI   r   r   r   	isnumericuphance_api_callr   errorr   r   )
r   	stream_idr$   r&   
data_linesorder_idZack_flagZservice_tagrR   resultr   r   r   process_MO_file   sR    
 
6rh   c           "   
      s  d}t |dd}t |dd}t |dd}t |dd}	t |dd}
t |dd}t |dd	}t |dd
}t |dd}t |dd}t |dd}t |dd}t|tkr|g}t |dd}t|tkr|g}t |dd}t|tkr|g}t |dd t tkr g | rd}|| }|d }|r6|d | d }|rtd|krLd}nd|ks`d|krdd}|d | d }|	r|d |	 d }|s|s|	rP|dd }tj| d|d }|d d!kr|d td"< d#td$< dtd%< tj| d& tt  nT|d rD|d td"< dtd%< tj| d' | d( t|d  d)  ntj	d* t
t dkrtd+d,  D rt|d- }tj| d|d }|d d!kr|d td"< d#td$< dtd%< tj| d& tt  n|d r|d td"< dtd%< tj| d' | d( t|d  d)  nVtjdd.d/| d0 d1 | d0 | d2 | d0 | d3g| d4 tj	d5 tj	d6 q fd7d8tt
 D }g }|d9d:d;d<d=g tt
|D ]}d>|||   }tj| d?|d }|d svt
|d@ dA d@krp|d@ dA d }|dB }|sdC}|dD }|s*dC}|dE }|s<dC}|dF }|sNdC}dG| dH | dI | dJ | } ndK} ndK} ||||  | |||  |||   ||  g qt|dLdM}!tjddNdO| d& dP t|
 d& dQ t| d0 dR t| d0 dS t| d0 dT t| d0 dU t| d0 dV t| d0 dW t| d0 dX t| d& dY |! d& d3tdZ| d[g| d4 tjdd\d]| d0 d1 | d0 dP t|
 d& | d3g| d4 nDd^td"< d@td%< d_td`< tj| d& tt da | db t|  d S )cNFOS1rK                        	   
      OS2rL         rO   ?ztracking_number=&ZDHLZdhlZEPARCELZ	STARTRACKZaustralia_postzcarrier=zshipping_cost=r   rP   rQ   rX   PCrY   rZ   r[   r_   z.: Uphance Error while processing PC Filename: z
 Response Error Code: z-

File processing will be retried at next runz%Uphance pick ticket update successfulc                 s   s   | ]}|d kV  qdS )0Nr   ).0vr   r   r   	<genexpr>  s     z"process_PC_file.<locals>.<genexpr>z/shiprS   rT   rU   rV   rW   r	   r
   z"Uphance shipping update successfulzPC_email sentc                    s   g | ]} | d kr|qS )r{   r   )r|   ivariancer   r   
<listcomp>  s      z#process_PC_file.<locals>.<listcomp>ZBarcodezSKU InfozQty OrderedzQty ShippedZVariancez)https://api.uphance.com/skus?filter[ean]=getrB   Zskusproduct_namezN/Acolorsize
sku_numberz	Product: z	, Color: z, Size: z, SKU: zProduct: N/AZfirstrow)headerszShort Ship ResponsezCross Docks are reporting that the following order was shipped without all the stock
The shipment has not been updated in Uphance - this will need to be done manually taking account of the stock that has not been shipped

Cross Docks file: zUphance Order No: z	Carrier: zTracking Number: zShip to Name: zShip to Address 1: zShip to Address 2: zShip to City: zShip to State: zShip to Postocde: z1The following items contain a shipping variance

r5   short_ship_emailszCD Short Shipped InfozCD short shipped:
Stream ID:Tr]   r^   r`   r\   )rI   typer   ra   r   rb   rc   r   r   r   rF   keysallr   rangerD   r   r:   )"r   rd   r$   r&   re   Zshort_shippedrf   ZtrackingZcarrierZshipping_costuphance_ord_noZship_to_nameZship_to_address_1Zship_to_address_2Zship_to_cityZship_to_stateZship_to_postcodeZproductsZquantity_orderedZquantity_shippedrR   Zurl_tcrg   Zurl_shipZvariance_idxZvariance_tabler   Zskur   r   r   r   Zsku_textZvariance_msgr   r   r   process_PC_file   s   


*
* 
"8
			


  r   c                 C   s   t |dd}|rpt|tkr$|d }tjddd| d d t| d d	 | d | d
g| d tjd n<dtd< dtd< dtd< tj	| d d | d tt  d S )NTPrK   r   z8Cross Docks Message: Purchase Order Return File Receivedz!CD processing manual:
Stream ID: rU   zPurchase Order Number: r_   rV   r	   r
   zTP email sentTrB   r[   z>Unable to retrieve purchase order number from Cross Docks infor^   z=Failed to get Purchase Order Number from TP file. FileName = )
rI   r   listr   r   r   r   r   rc   r   )r   rd   r$   r&   re   Z	po_numberr   r   r   process_TP_fileW  s6    r   c                 C   s  i a t| ||}|d}t|dd}tjd|  d }|dkrTt| |||| n|dkrnt| |||| n|dkrt	| |||| nz|dkrd	t d< d
t d< tj
| d d | d tt   n<d	t d< dt d< dt d< tj
| d d | d tt   tt  dkrd| d }dt kr~|tt d  d t| }|d | d | }tjdd|ddg| d tjd dt krt d dkrd|fS t d dkrd|fS d|fS ) NrU   HDrL   zstream_id: rJ   rz   r   ZRJTzCross Docks sent RJ filer^   r_   z%Cross Docks sent RJ File. FileName = zUnknown Stream IDrB   r[   z*Cross Docks sent unknown Stream ID in filez7Cross Docks sent unknown Stream ID in file. FileName = r   z CD processing error :
Stream ID:rZ   z

Order No: z

Input File: ZCD_FTP_Process_errorr	   r   r
   zError email sentRejectedz
Retry FileOK)rc   r'   rC   rI   r   r   r   rh   r   r   r   r   rF   r   r   )r   r#   r$   r&   re   rd   r   Z
email_textr   r   r   process_CD_files  sB    
&$

r   c              
   C   sZ  zt  }t| }|r|  tjd|  d t|  d}d}g }g }|D ]}tjd|  t| d|}|d dkrtjd|  d	 |  t	| |d
 d|s qFt
| dd|s qF|| n`|d dkr.tjd|  d	 |  t	| |d
 d|s qFt
| dd|s$ qF|| |d
7 }||krR qFqRt  }	|	| }
dt| d |d d d |	d d d t|
 d d t| d d t| }tjdd|  |dg| d n<tjd|   t  }	|	| }
tjdddt|
 d| d W d S  tk
rT } z&tjd!|  d" t|  W Y d#S d }~X Y nX d S )$NzFTP files to be processed for z:
d   r   zProcessing file: r   r   zProcessing file for r,   rB   receivedzout/sentr   zProcessing rejected file for Zrejectedzout/rejectedz!CD Files Processed :
Num Files : z
Start Time (UTC): z%H:%M:%SrU   zEnd Time (UTC): zElapsed Time: zFiles Processed: zFiles Rejected: zCD Files Processed for r	   r
   zNo files to process for zCD Files Processedz!No files processed
Elapsed Time: zgary@mclarenwilliams.com.au   zException message for : z/
Error in Cross Docks Polling:
Exception Info: i  )r   nowr   sortr   r   r   r   r   r@   r4   rD   strftimer   r   	exception)r   Zproc_start_timefilesZproc_max_filesr   Z
proc_filesr   r$   rg   Zproc_end_timeZproc_elapsed_timeZproc_info_strer   r   r   cross_docks_poll_request  s    
r   )r7   jsonr   dateutilr   r   requests	tracebackr   FlaskApp.app.commonappr   tzutc	from_zonetzlocalto_zoner   r'   r4   r@   rI   rh   r   r   r   r   r   r   r   r   <module>   s*   6. 7