
    Ei(                        d Z ddlmZmZmZ ddlmZ ddlZddlmZm	Z	 ddl
mZ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mZ ddlmZmZ ddlm Z  ddl!m"Z"  ejF                  e$      Z%dede&defdZ'd Z(dede)dededef
dZ*	 	 	 d"dede)de&de&dee)   defdZ+dede)de&d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&d edee)e.f   f
d!Z/y)#z=
Customer Notes Services - Customer-specific note operations
    )DictListOptional)datetimeN)HTTPExceptionstatus)selectand_desc)Sessionselectinload)Note)Customer)User)get_customer)NoteResponseSchemaNoteListResponseSchema)NoteCreateRequestSchemaNoteUpdateRequestSchema)QueryPaginator)APIExceptiondbnote_idreturnc                     | j                  t        t              j                  t	        t        j
                              j                  t        j                  |k(              j                         S )z
    Helper function to load a note with its relationships.
    
    Args:
        db: Database session
        note_id: ID of the note to load
    
    Returns:
        Note with loaded relationships
    )	executer	   r   optionsr   
created_bywhereid
scalar_one)r   r   s     q/var/www/html/hwPaymentPortal-be-dev/hw-payment-portal-api/src/apps/customers/services/customer_notes_services.py_load_note_with_relationsr#      sK     ::t	doo.	/	tww'!	" jl	    c                  l    t        t              j                  t        t        j                              S )z
    Helper function to build a base note query with relationships loaded.
    
    Returns:
        SQLAlchemy select statement with relationships pre-loaded
    )r	   r   r   r   r    r$   r"    _build_note_query_with_relationsr'   0   s"     $<T__ =>>r$   customer_id	note_datacreated_by_userc                   K   	 t        | |       d{   }| j                  t        |j                        }|st	        ddd      t        j                         }t        |j                  |j                  ||      }|j                  j                  |       | j                  |       | j                          | j                  |       t        | |j                        }t        j!                  d| d|j                          t#        j$                  |      S 7 	# t        $ r  t&        $ r:}	t        j)                  d	| d
|	        t	        dt+        |	       dd      d}	~	ww xY ww)z!Create a new note for a customer.NzCustomer not found  customer_notes.servicesmessagestatus_codemodule)descriptioncreated_by_id
created_at
updated_atzNote created for customer z
 with ID: z!Error creating note for customer : zFailed to create note:   )r   getr   r    r   r   utcnowr   r2   customerappendaddcommitrefreshr#   loggerinfor   model_validate	Exceptionerrorstr)
r   r(   r)   r*   customer_schemar:   current_timenote_objnote_with_relationses
             r"   create_customer_noterJ   :   sR    +
 ,R == 66(O$6$67,0   (!--),,##	
 	  *
x
		


8 8HKKH0Z}UV!001DEE? >B   
8RsKL-c!fX6,
 	

s9   E.D DDD E.D E+15E&&E++E.limitoffsetsearchc           
        K   	 t        | |       d{   }t               j                  t        j                        j                  t        j                  |j                  k(        }|j                  t        j                  j                  d            }|r4d| d}|j                  t        j                  j                  |            }|j                  t        t        j                              }t        |t         | t        d| d||d      }|j#                         }	|	j$                  |	j&                  |	j(                  |	j*                  |	j,                  |	j.                  |	j0                  |	j2                  dS 7 l# t4        $ r  t6        $ r:}
t8        j;                  d| d	|
        t5        d
t=        |
       dd      d}
~
ww xY ww)z+Get paginated list of notes for a customer.N%z/api/v1/customers/z/notesT)queryschemar   modelurlrL   rK   use_orm)datatotalpageper_pagenextpreviousfirstlastz!Error getting notes for customer r6   zFailed to get customer notes: r7   r-   r.   )r   r'   joinr   r:   r   r   r    
deleted_atis_r2   ilikeorder_byr   r4   r   r   paginateresultrV   rW   rX   rY   rZ   r[   r\   r   rB   r?   rC   rD   )r   r(   rK   rL   rM   rE   stmtsearch_term	paginatorpagination_resultrI   s              r"   get_customer_notesrh   o   s    8
 ,R ==
 -.T$-- U8;;/"4"445 	 zz$//--d34 fXQ-K::d..44[ABD }}T$//23 #%$[M8	
	 &..0 &,,&,,%**)22%**)22&,,%**	
 		
G >\   
8RsKL4SVH=,
 	

s9   GF E?E*F >G?F G5G		GGc           	        K   	 t        | |       d{   }t               j                  t        j                        j                  t        t        j                  |k(  t        j                  |j                  k(              }|j                  t        j                  j                  d            }| j                  |      j                         }|st        ddd      t        j                  |      S 7 # t        $ r  t         $ r=}t"        j%                  d| d| d|        t        d	t'        |       d
d      d}~ww xY ww)z#Get a specific customer note by ID.NNote not foundr,   r-   r.   zError getting note  for customer r6   zFailed to get note: r7   )r   r'   r]   r   r:   r   r
   r    r   r^   r_   r   scalar_one_or_noner   r   rA   rB   r?   rC   rD   )r   r(   r   rE   rd   noterI   s          r"   get_customer_notern      s+    #
 ,R == -.T$-- UGGw&KK?#5#55 	 zz$//--d34zz$224(0  "0066/ >2   
*7)>+bQRPSTU*3q6(3,
 	

s9   E
C8 C6C!C8 5E
6C8 8E
8EEE
updated_by_userc           	        K   	 t        | |       d{   }t        t              j                  t        j                        j                  t        t        j                  |k(  t        j                  |j                  k(              }|j                  t        j                  j                  d            }| j                  |      j                         }|st        ddd      |j                  |j                  |_        | j                          | j!                  |       t#        | |j                        }t$        j'                  d| d|        t)        j*                  |      S 7 W# t        $ r  t,        $ r=}	t$        j/                  d| d	| d
|	        t        dt1        |	       dd      d}	~	ww xY ww)zUpdate a customer note.Nrj   r,   r-   r.   zNote updated for customer z, note ID: zError updating note rk   r6   zFailed to update note: r7   )r   r	   r   r]   r:   r   r
   r    r   r^   r_   r   rl   r   r2   r=   r>   r#   r?   r@   r   rA   rB   rC   rD   )
r   r(   r   r)   ro   rE   rd   rm   rH   rI   s
             r"   update_customer_noterq      s    .
 ,R == 4LT$-- UGGw&KK?#5#55 	 zz$//--d34zz$224(0    ,(44D
		


4 8DGGD0[	RS!001DEEE >H   
+G9N;-rRSQTUV-c!fX6,
 	

s9   F?E- E*EE- )F?*E- -F<?8F77F<<F?deleted_by_userc           	        K   	 t        | |       d{   }t        t              j                  t        j                        j                  t        t        j                  |k(  t        j                  |j                  k(              }|j                  t        j                  j                  d            }| j                  |      j                         }|st        ddd      t        j                         |_	        | j!                          t"        j%                  d| d|        dd	d
dS 7 # t        $ r  t&        $ r=}t"        j)                  d| d| d|        t        dt+        |       dd      d}~ww xY ww)zSoft delete a customer note.Nrj   r,   r-   r.   zNote z deleted for customer TzNote deleted successfully   )successr/   r0   zError deleting note rk   r6   zFailed to delete note: r7   )r   r	   r   r]   r:   r   r
   r    r   r^   r_   r   rl   r   r   r9   r=   r?   r@   rB   rC   rD   )r   r(   r   rr   rE   rd   rm   rI   s           r"   delete_customer_noterv     s`    -
 ,R == 4LT$-- UGGw&KK?#5#55 	 zz$//--d34zz$224(0  #//+
		eG9$:;-HI2
 	
; >F   
+G9N;-rRSQTUV-c!fX6,
 	

s9   FD3 D0DD3 /F0D3 3F8E==FF)
   r   N)0__doc__typingr   r   r   r   loggingfastapir   r   
sqlalchemyr	   r
   r   sqlalchemy.ormr   r   src.apps.notes.models.noter   "src.apps.customers.models.customerr   src.apps.users.models.userr   -src.apps.customers.services.customer_servicesr   "src.apps.notes.schemas.note_commonr   r   $src.apps.notes.schemas.note_requestsr   r   src.helpers.paginationr   src.core.exceptionsr   	getLogger__name__r?   intr#   r'   rD   rJ   rh   rn   rq   anyrv   r&   r$   r"   <module>r      s   ( '   ) ) ) 0 + 7 + F 2 ,			8	$' C D $?2
2
2
 '2
 	2

 2
p  @
@
@
 @
 	@

 SM@
 
@
F)
)
)
 )
 	)
X6
6
6
 6
 '	6

 6
 6
r4
4
4
 4
 	4

 
#s(^4
r$   