
    iH                         d dl mZ d dlmZmZmZ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 d d	lmZ d d
lmZmZ d dlmZ d dlZd dlZd dlZd dlZd dlmZ  G d d      Z y)    )Session)DteModelCustomerModelBranchOfficeModel	UserModelExpenseTypeModel)CustomerClass)WhatsappClass)HelperClass)	FileClass)desccase)mysql)or_)datetime	timedelta)HTTPExceptionN)funcc                   R    e Zd ZdefdZddZd ZddZd Zd Z	d	 Z
d
 Zd Zd Zy)CustomerCreditNoteClassdbc                 2    || _         t        |      | _        y )N)r   r   
file_class)selfr   s     Z/var/www/intrajisbackend.com/public_html/app/backend/classes/customer_credit_note_class.py__init__z CustomerCreditNoteClass.__init__   s    #B-    Nc                 `   	 |dk(  s|dk(  rg }|j                  t        j                  dk(         |j                  t        j                  dk(         |j                  t	        t        j
                  dk(  t        j
                  dk(                | j                  j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j
                  t        j                  t        j                   t"        j$                  
      j'                  t        t        j                  t        j                  k(  d      j'                  t"        t        j                  t"        j                  k(  d      j(                  | }nb|dk(  rWg }|j                  t        j                  dk(         |j                  t        j                  dk(         |j                  t        j                  d k7         |j                  t	        t        j
                  dk(  t        j
                  dk(               |r#|j                  t        j*                  |k(         nEt-        j.                         j1                  d	      }	|j                  t        j*                  |	k(          | j                  j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j
                  t        j                  t        j                   t"        j$                  
      j'                  t        t        j                  t        j                  k(  d      j'                  t"        t        j                  t"        j                  k(  d      j)                  t"        j2                  |k(        j(                  | }ng d
dS |j5                         }
t7        d|
        t7        d|r|n"t-        j.                         j1                  d	              |j8                  j;                  t=        j>                         ddi      }t7        d|        |jA                  tC        t        j
                  dk(  dft        j
                  dk(  dfd      tE        t        j                              }|d
kD  r(|dz
  |z  }|jG                  |      jI                  |      }|jK                         }g }|D ]  }|j                  |j                  |j                  |j                  |j                  |j                  r|j                  jM                         nd |j                  |j
                  |j                  |j                   |j$                  d
        ||
||dS # tN        $ r5}t7        dtQ        |              tS        ddtQ        |             d }~ww xY w)N      =         Tisouter   z%Y-%mr   credit_notestotal_countz1DEBUG - Total credit notes with status 14 and 5: zDEBUG - Period filter: literal_binds)dialectcompile_kwargszDEBUG - SQL Query:    )else_
idbranch_office_idfoliototal
added_daterut	status_idchip_idcustomerbranch_office)r(   r)   pageitems_per_pagezERROR in get_all:   zError retrieving credit notes: status_codedetail)*appendr   dte_version_iddte_type_idr   r6   r   queryr0   r1   r2   r3   r4   r5   r7   r   r8   r   r9   joinfilterperiodr   nowstrftimeprincipal_supervisorcountprint	statementcompiler   r+   order_byr   r   offsetlimitall	isoformat	Exceptionstrr   )r   rol_idr5   groupr:   r;   rF   filtersrC   current_periodr)   compiledrO   dtesresultdtees                    r   get_allzCustomerCreditNoteClass.get_all   s   z	d{fk x66!;<x33r9: s8#5#5#;X=O=OST=TUVKK--NNNN''LL&&$$!**%33 $!8<<=3D3D#Dd  $%x'@'@DUDXDX'Xbf  &'#" 1 x66!;<x33r9:x||t34 s8#5#5#;X=O=OST=TUV NN8??f#<=%-\\^%<%<W%ENNN8??n#DEKK--NNNN''LL&&$$!**%33 $!8<<=3D3D#Dd  $%x'@'@DUDXDX'Xbf  &%::cA&'##* )+1==  ++-KEk]ST+fF(,,.BYBYZaBb+cde ..u}}XgimWn.oH'z23NN''2-q1''1,a0
 X[[!E ax(n4V,22>B99;D F &&(+(<(< YY YY@C#..":":"<TX77!$"{{ #%(%6%6  !'*"0	   	d&s1vh/0C:YZ]^_Z`Ya8bcc	ds   PW/ GW/ /	X-80X((X-c                 b	   	 | j                   j                  t              j                  t        j                  |k(        j                         }|st        dd      d }|j                  dv r|j                  r|j                  dkD  r| j                   j                  t              j                  t        j                  dk(  t        j                  |j                  k(  t        j                  |j                  k(  t        j                  dk(        j                         }|r2t        d|j                   d	|j                   d
|j                          | j                   j                  t              j                  t        j                  |j                  k(        j                         }| j                   j                  t              j                  t        j                  |j                  k(        j                         }d }|j                  dk(  rt!        |d      r|j                  r| j                   j                  t              j                  t        j                  |j                  k(  t        j                  j#                  ddg      t        j                  |j                  k(  t        j                  dk(        j                         }i d|j                  d|j                  d|r|j$                  nd d|j                  d|j                  d|j&                  d|j                  d|r|j(                  nd d|j*                  d|j,                  d|j.                  d|j0                  d|j2                  d|j4                  r|j4                  j7                         nd d|j8                  d|j:                  dt=        |dd       |d u|rV|j                  |j                  |j&                  |j,                  |j4                  r|j4                  j7                         nd dnd |r/|j                  |j                  |j                  |j,                  dnd d }|S # t        $ r  t>        $ r5}t        d!tA        |              t        d"d#tA        |             d }~ww xY w)$Ni  zDTE not foundr=   )!   '   r   r!   r   u.   DEBUG - Ya existe nota de crédito para folio z: NC ID z, NC folio denied_folior`   ra   r0   r1   r9   r2   rB   r6   r5   r8   cash_amountr3   subtotaltaxrF   r4   comment	reason_id)r0   r2   r6   r3   r4   )r0   r2   rB   r3   )has_credit_noteexisting_credit_noteoriginal_dtezERROR in get_one: r<   Error retrieving credit note: )!r   rC   r   rE   r0   firstr   rB   r2   rb   r5   rA   rK   r   r   r1   hasattrin_r9   r6   r8   rc   r3   rd   re   rF   r4   rR   rf   rg   getattrrS   rT   )	r   dte_idr\   ri   r8   r9   rj   r[   r]   s	            r   get_onezCustomerCreditNoteClass.get_one   sY   N	c''--)00v%eg  #OLL $( (*syySYY]'+ww}}X'>'E'E((B.))SYY6LLCGG+++q0	(
 %' % (J399+U]^r^u^u]v  wB  CW  C]  C]  B^  _  ` ww}}]3::=;L;LPSPWPW;WX^^`H !GGMM*;<CCDUDXDX\_\p\pDpqwwyM  L"$n)E#JZJZ#ww}}X6==NNc&6&66((,,b"X6LLCGG+++q0	 
 %'  cff "C$8$8   !<!<SW  	 
 s  S]]  sww  H--t  s    CLL  sww  #**  CNNcnn668PT  3;;   S]]! " ^T B# $ $8t#C * /11177!5!?!?177QeQpQp"6"A"A"K"K"Mvz) 04 "	 '//)//#/#;#;)//	!
 (,? FD M 	 	c&s1vh/0C:XY\]^Y_X`8abb	cs   Q$Q' 'R.90R))R.c
                 B   	 |dk(  s|dk(  rNg }
|
j                  t        j                  dk(         |
j                  t        j                  dk(         |
j                  t        j                  d k7         |r"|
j                  t        j
                  |k(         |r"|
j                  t        j                  |k(         |r"|
j                  t        j                  |k(          | j                  j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t         j"                  
      j%                  t        t        j                  t        j                  k(  d      j%                  t         t        j
                  t         j                  k(  d      j&                  |
 }|r2|j'                  t        j                  j)                  d| d            }|j+                         }|j-                  t/        t        j                              }|dkD  r(|dz
  |	z  }|j1                  |      j3                  |	      }|j5                         }g }|D ]  }|j                  |j                  |j
                  |j                  |j                  |j                  r|j                  j7                         nd |j                  |j                  |j                  |j                  |j"                  d
        ||d	S g dd	S # t8        $ r5}t;        d
t=        |              t?        ddt=        |             d }~ww xY w)Nr   r    r!   Tr$   %r   r/   r'   zERROR in search: r<   zError searching credit notes: r=   ) r@   r   rA   rB   r5   r1   r6   r   rC   r0   r2   r3   r4   r7   r   r8   r   r9   rD   rE   likerJ   rN   r   rO   rP   rQ   rR   rS   rK   rT   r   )r   rU   r5   r1   customer_rutr8   r6   supervisor_idr:   r;   rW   rC   r)   rO   rZ   r[   r\   r]   s                     r   searchzCustomerCreditNoteClass.search   s   I	c{fkx66!;<x33r9:x||t34 $NN8#<#<@P#PQNN8<<<#?@NN8#5#5#BCKK--NNNN''LL&&$$!**%33 $!8<<=3D3D#Dd  $%x'@'@DUDXDX'Xbf  &'#$ !LL)?)?)D)Dq
RS_)UVE#kkmtHKK'89!8"Qh.8F!LL066~FEyy{ CMM!ff,/,@,@!$!$DGNNcnn&>&>&@X\"ww%(]]#&;;$'LL),):):#  %+#.  )+1== 	c%c!fX./C:XY\]^Y_X`8abb	cs   MM  M   	N)0NNc                     	 | j                  |      S # t        $ r5}t        dt        |              t	        ddt        |             d }~ww xY w)NzERROR in get: r<   rk   r=   )rq   rS   rK   rT   r   )r   rp   r]   s      r   getzCustomerCreditNoteClass.get1  sY    	c<<'' 	cN3q6(+,C:XY\]^Y_X`8abb	cs    	A0AAc                    	 | j                   j                  t              j                  t        j                  |k(  t        j
                  dk(        j                         }|sy|j                  r|j                  dk(  ry| j                  j                  |      }|S # t        $ r/}t        dt        |              dt        |       cY d }~S d }~ww xY w)Nr!   Credit note not foundr   z*Credit note has no folio - cannot downloadzERROR in download: zError downloading credit note: )r   rC   r   rE   r0   rB   rl   r2   r   generate_credit_note_pdfrS   rK   rT   )r   rp   r\   
pdf_resultr]   s        r   downloadz CustomerCreditNoteClass.download8  s    	>''--)00v%$$* eg 
 .99		QC AA#FJ 	>'Ax014SVH==	>s*   A!B $B  B 	C&$C
CCc                 4   	 | j                   j                  t              j                  t        j                  |k(  t        j
                  dk(        j                         }|sy|j                  r|j                  dk(  ryd}d|j                   d}t        j                  |d| d	d
      }|j                  dk(  r|j                         }|S d|j                   S # t        $ r/}t        dt        |              dt        |       cY d }~S d }~ww xY w)Nr!   r{   r   z(Credit note has no folio - cannot verify JXou3uyrc7sNnP2ewOCX38tWZ6BTm4D1z1https://libredte.cl/api/dte/dte_emitidos/info/61/z	/76063822zBearer zapplication/json)AuthorizationzContent-Type)headers   zError verifying credit note: zERROR in verify: )r   rC   r   rE   r0   rB   rl   r2   requestsry   r>   jsonrS   rK   rT   )r   rp   r\   TOKENurlresponseresponse_datar]   s           r   verifyzCustomerCreditNoteClass.verifyN  s   !	<''--)00v%$$* eg 
 .99		QA 7EEcii[PYZC||'.ug%6$6H ##s* ($$6x7K7K6LMM 	<%c!fX./23q6(;;	<s1   A!C $C  AC C 	D($DDDc                    	 | j                   j                  t              j                  t        j                  |k(  t        j
                  dk(        j                         }|sy|j                  dvry| j                   j                  |       | j                   j                          y# t        $ rI}t        dt        |              | j                   j                          dt        |       cY d }~S d }~ww xY w)Nr!   r{   r    r"   z#Cannot delete processed credit notez Credit note deleted successfullyzERROR in delete: zError deleting credit note: )r   rC   r   rE   r0   rB   rl   r6   deletecommitrS   rK   rT   rollback)r   rp   r\   r]   s       r   r   zCustomerCreditNoteClass.deleter  s    	;''--)00v%$$* eg 
 . }}G+< GGNN3GGNN5 	;%c!fX./GG1#a&::	;s*   A!B) $B) 35B) )	C;2>C60C;6C;c                 J   	 | j                   j                  t              j                  t        j                  dk(  t        j
                  |k(        j                         }|syd}|D ]W  }|j                  dv r!| j                   j                  |       |dz  }2t        d|j                   d|j                   d       Y | j                   j                          |S # t        $ r;}t        dt        |              | j                   j                          Y d	}~yd	}~ww xY w)
z}
        Delete credit notes that have the specified denied_folio
        Returns the number of deleted credit notes
        r!   r   r   r   zSkipping credit note z with status z& - cannot delete processed credit notez!ERROR in delete_by_denied_folio: N)r   rC   r   rE   rB   rb   rQ   r6   r   rK   r0   r   rS   rT   r   )r   rb   r(   deleted_countr\   r]   s         r   delete_by_denied_folioz.CustomerCreditNoteClass.delete_by_denied_folio  s    
	77==299$$*%%5 ce 
  M# ~==G+GGNN3'!Q&M1#&&s}}oU{|}~ GGNN   	5c!fX>?GG	s   A!C $A9C 	D"'1DD"c                 F   	 | j                   j                  t              j                  t        j                  |k(  t        j
                  dk(        j                         }|sy|j                  dk(  r
d|_        d}n|j                  dk(  r
d|_        d}ny| j                   j                  |       | j                   j                          |S # t        $ rI}t        dt        |              | j                   j                          d	t        |       cY d }~S d }~ww xY w)
Nr!   r{   r"   r    z%Credit note status changed to pendingz(Credit note status changed to supervisorz-Cannot change status of processed credit notezERROR in change_status: zError changing status: )r   rC   r   rE   r0   rB   rl   r6   addr   rS   rK   rT   r   )r   rp   r\   messager]   s        r   change_statusz%CustomerCreditNoteClass.change_status  s    	6''--)00v%$$* eg 
 . }}" !A!# "DFGGKKGGNNN 	6,SVH56GG,SVH55	6s*   A!C $2C 6C 	D >DD D )NNr   r   
   N)	NNNNNNNr   r   )__name__
__module____qualname__r   r   r^   rq   rw   ry   r~   r   r   r   r    r   r   r   r      sG    (7 ({dzOcbJcXc>,"<H;4@6r   r   )!sqlalchemy.ormr   app.backend.db.modelsr   r   r   r   r   "app.backend.classes.customer_classr	   "app.backend.classes.whatsapp_classr
    app.backend.classes.helper_classr   app.backend.classes.file_classr   
sqlalchemyr   r   sqlalchemy.dialectsr   r   r   r   fastapir   r   r   base64uuidsqlalchemy.sqlr   r   r   r   r   <module>r      sD    " i i < < 8 4 ! %  ( !     w6 w6r   