
    Ei                     r   d Z ddlmZmZ ddlZddlmZmZ ddlm	Z	m
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 ddl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  ddl!m"Z" ddl#m$Z$ ddlm%Z%  ejL                  e'      Z(dedee   de)dedede)dee   fdZ*dede)dedede+defdZ,dede)dee   fdZ-y)zB
Customer Attachments Services - Handle customer file attachments
    )ListDictN)status
UploadFile)selectdelete)Session)customer_attachments_map)get_customer)File)_create_file_database_entry)remove_file_singleupload_file_single)FileResponseSchema)
UserSchema)MerchantSchema)ALLOWED_FILE_CONTENT_TYPESMAX_UPLOAD_LIMIT)APIException)settings)get_physical_filesizedbfiles	file_typecurrent_usermerchantcustomer_idreturnc           
         K   t        |      t        kD  r+dt         d}t        t        i t        j
                  |      |D ]d  }|j                  j                  d      d   }|t        vs*d| ddj                  t               }t        t        i t        j
                  |       t        | |	       d
{   }	d|j                   d| d}
g }|D ]p  }|j                  j                         }t        | |||
      }t        | |||       d
{   }t         j"                   d|d    |_        |j'                  |       r |s!t        t        i t        j
                  d      |D ]L  }t)        j*                         j-                  |j.                  |	j.                        }| j1                  |       N | j3                          t4        j7                  ddd|j                  |t        |      |j8                  d       |S 7 P7 w)z
    Upload multiple attachment files for a customer.
    Files are stored in: uploads/data_files/merchant_id/accounts/customer_id/
    zA maximum of z files can be uploaded at oncemoduleerrorstatus_codemessage/   zCannot upload z$ files. Allowed file extensions are z, r   r   Nzdata_files/z
/accounts/)r   filecontentspath)r   	file_datar   
created_by/uploadsr*   zFailed to upload files)file_idr   z*Customer attachments uploaded successfullycustomerattachments)
app_module	submodulemerchant_idr   
file_countcreated_by_idextra)lenr   r   __name__r   HTTP_400_BAD_REQUESTcontent_typesplitr   joinr   r3   r(   readr   r   r   SERVER_HOSTfull_urlappendr
   insertvaluesidexecutecommitloggerinfouser_id)r   r   r   r   r   r   msgf	extensioncustomer_dataupload_path	new_filesr(   r)   uploaded_file_data
file_entryr+   map_statements                     w/var/www/html/hwPaymentPortal-be-dev/hw-payment-portal-api/src/apps/customers/services/customer_attachments_services.pyupload_customer_attachmentsrT      s=     5z$$.//MN33	
 	
  NN((-a0	66 +O99789;  "77	  '"+FFM   4 45Z}ANKI %99>>#/2D8Zef 7(#	
 

 "*!5!5 6h?QRX?Y>Z[
$% 33,	
 	
  "	0779@@LL%(( A 
 	

=!" IIK
KK4$&#//&i.)11
  
 e G
s-   A)H,AH9H	:AHHC6HHr.   c           
      4  K   t        | |       d{   }| j                  t        t              j	                  t        j
                  |k(              j                         }|!t        t        i t        j                  d      | j                  t        j                         j	                  t        j                  j                  |k(  t        j                  j                  |j
                  k(               t!        |j"                         | j                  t        t              j	                  t        j
                  |k(               | j%                          t&        j)                  ddd|j*                  |||j,                  d	
       dddS 7 w)z$Delete a customer's attachment file.r'   Nz The requested file was not foundr    )r*   z(Customer attachment deleted successfullyr/   r0   )r1   r2   r3   r   r.   r5   r6   T)successr$   )r   rE   r   r   whererD   scalar_one_or_noner   r9   r   HTTP_404_NOT_FOUNDr
   r   cr.   r   r   rN   rF   rG   rH   r3   rI   )r   r   r   r   r.   rM   r+   s          rS   delete_customer_attachmentr[   v   sK     '"+FFM

6$<--dgg.@ABUUWI116	
 	
 JJ'..066 ""**g5 ""..-2B2BB 
 I112JJvd|!!$''W"456IIK
KK2$&#//&)11
  
 = E Gs   FFFFc                   K   t        | |       d{   }| j                  t        t              j	                  t
        t
        j                  j                  t        j                  k(        j                  t
        j                  j                  |j                  k(        j                  t        j                  j                                     j                         j                         }g }|D ]f  }t!        j"                  |      }t%        |j&                        |_        t*        j,                   d|j&                   |_        |j1                  |       h |S 7 Jw)z#Get all attachments for a customer.r'   Nr-   )r   rE   r   r   r=   r
   rZ   r.   rD   rW   r   order_by
created_atdescscalarsallr   model_validater   r*   filesizer   r?   r@   rA   )r   r   rM   r0   response_listfile_objresults          rS   get_customer_attachmentsrg      s	     '"+FFM**t	&(@(B(B(J(Jdgg(U	V	'))559I9II	J	$//&&(	)	
 gi  M %#228</>%112(8==/JV$% # Gs   E EE
E ).__doc__typingr   r   loggingfastapir   r   
sqlalchemyr   r   sqlalchemy.ormr	   "src.apps.customers.models.customerr
   -src.apps.customers.services.customer_servicesr   src.apps.files.models.filer   src.apps.files.file_servicesr   src.apps.files.helper.ior   r   "src.apps.files.schemas.file_commonr   "src.apps.users.schemas.user_commonr   *src.apps.merchants.schemas.merchant_commonr   src.core.utils.constantsr   r   src.core.exceptionsr   src.core.configr   r   	getLoggerr9   rG   strrT   intr[   rg        rS   <module>r~      s     & % " G F + D K A 9 E Q , $ :			8	$XX
X X 	X
 X X 

Xv--- - 	-
 - 
-` 

r}   