
    |2j]                     8   d dl mZmZ d dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZ d dlmZ d dlmZ d dlZd d	lmZ  ej&                  d
dg      ed               Z ej&                  ddg      ed               Z ej&                  ddg      ed               Z ej&                  ddg      ed               Z ej&                  ddg      ed               Z ej&                  ddg      ed               Z ej&                  ddg      ed               Z ej&                  ddg      ed               Z ej&                  ddg      ed               Z ej&                  ddg      ed               Z ej&                  d dg      ed!               Zy)"    )jsonifyrequest)api_bp)SessionLocal)	NfeImportNfeItemNfeReconciliation)NfeParserService)ParseStatusEnum)require_authN)datetimez/nfe/uploadPOST)methodsc            
         dt         j                  vrt        ddd      dfS t         j                  d   } | j                  dk(  rt        ddd      dfS | j                  j	                         j                  d      st        dd	d      dfS 	 | j                         }|j                  d
d      }t        j                  |      j                         }t               }	 |j                  t              j!                  t        j"                  |k(        j%                         }|r+t        dd|j&                  d      df|j)                          S t+        j,                  |      }|j.                  t0        j2                  k(  r9|j4                  s-t        dd|j6                   d      df|j)                          S |j                  t              j!                  t        j4                  |j4                  k(        j%                         }|r9t        dd|j4                   d|j&                  d      df|j)                          S t        dXi d|j4                  d|j8                  j:                  d|j8                  j<                  d|j8                  j>                  d|j8                  j@                  d|j8                  jB                  d|j8                  jD                  d|jF                  d|jH                  jJ                  d|jH                  jL                  d|jN                  jP                  d|jN                  jR                  d |jN                  jT                  d!|jN                  jV                  d"|jN                  jX                  d#|jN                  jZ                  d$|d%|d&|j.                  j\                  d'|j6                  d(d)d*d+}	|j_                  |	       |ja                          tc        |jd                        D ]  \  }
}tg        dXi d,|	j&                  d-|jh                  d.|jj                  d/|jl                  d0|jn                  d1|jp                  d2|jr                  d3|jt                  d4|jv                  d5|jx                  d6|jz                  d7|j|                  d8|j~                  d9|j                  d:|j                  d;|j                  d<|j                  jT                  d=|j                  jV                  d>|j                  jX                  d?|j                  jZ                  d@|j                  j                  dA      r%|j                  j                  dA      j\                  ndBdC|j                  j                  dA      r%|j                  j                  dA      j                  ndBdD|j                  j                  dE      r%|j                  j                  dE      j\                  ndBdF|j                  j                  dE      r%|j                  j                  dE      j                  ndBdG|j                  j                  dE      r%|j                  j                  dE      j                  ndBdH|j                  j                  dI      r%|j                  j                  dI      j\                  ndBdJ|j                  j                  dI      r%|j                  j                  dI      j                  ndBdK|j                  j                  dI      r%|j                  j                  dI      j                  ndBdL|j                  j                  dLdB      dM|j                  j                  dMdB      dNdO}|j_                  |        |j                          |j.                  t0        j2                  k(  r6t        ddP|	j&                  |j6                  dQ      dRf|j)                          S t        dSdT|	j&                  |	j4                  t        |jd                        dU      dRf|j)                          S # t        $ r&}t        ddt        |       d      dfcY d }~S d }~ww xY w# t        $ rF}|j                          t        ddVt        |       d      dWfcY d }~|j)                          S d }~ww xY w# |j)                          w xY w)YNfileFzNo file partsuccesserror   zNo selected filez.xmlz'Invalid file type. Only XML is allowed.zutf-8ignore)errorszError reading file: z&XML/NF already imported (SHA256 Match))r   r   idi  z#Invalid XML or missing access key: z$XML/NF already imported (Access Key )
access_key
nfe_numberseriesmodeloperation_natureenvironmentprotocol_number
issue_dateissuer_cnpjissuer_nametotal_products_valuetotal_invoice_valuetotal_freighttotal_insurancetotal_discounttotal_otherraw_xml
xml_sha256parse_statusparse_errorimported_bysystemimport_sourcemanual_uploadnfe_idn_itemsku_supplierdescriptioneanncmcestcfop	cst_csosnunitquantity
unit_valueproduct_value	unit_tribquantity_tribunit_value_tribfreight_allocatedinsurance_allocateddiscount_allocatedother_allocated	ipi_valueipir   ipi_rate
icms_valueicms	icms_rate	icms_basest_valuestst_ratest_basetotal_item_cost_nfunit_cost_nflink_statuspendingzSaved with parsing errors)r   r   r   r.      TzNFe imported successfully)r   messager   r   items_countzDatabase error:    )Lr   filesr   filenamelowerendswithreaddecodehashlibsha256	hexdigest	Exceptionstrr   queryr   filterr,   firstr   closer
   	parse_xmlr-   r   r   r   r.   metadatar   r   r   r   r    r!   r"   issuercnpjnametotalsproducts_valueinvoice_valuefreight	insurancediscountothervalueaddflush	enumerateitemsr   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   allocationstaxesgetratebasecalculated_costscommitlenrollback)r   	xml_bytesxml_contentr,   edbexisting_shaparsedexisting_keynfe_dbiitemdb_items                C/var/www/hypershopcomercio.com.br/hyper-ai/app/api/endpoints/nfe.py
upload_nfer      s    W]]"5>BCSHH== D}}53EFGLL== ))&153\]^`cccZIIK	&&wx&@^^I.88:
 
Bpxx	*11)2F2F*2TU[[] A"oo  	X 	
K "++K8 /"7"77@Q@Qu9\]c]o]o\p7qrsuxxB 	
} xx	*11)2F2F&J[J[2[\bbd ?@Q@Q?RRST"oo  	x 	
k  
((
11
 ??))
 //''	

 $__==
 33
 #OO;;
 ((
 **
 **
 "(!=!=
 !' ; ;
 !--//
 #MM33
 "==11
  ++!
"  #
$ "%
&  ,,22'
( **)
* !+
, *-
0 	v

 . "	GAt  yy {{  "..  !,,	 
 HH  HH  YY  YY  ..  YY     ??  #00  ..  #00   !% 4 4! " #'"2"2":":# $ %)$4$4$>$>% & $(#3#3#<#<' ( !% 0 0 6 6) * :>9N$**../55TU+ , 8<zz~~e7L.33RS- . <@::>>&;Q4::>>&177WX/ 0 :>9O$**..055UV1 2 :>9O$**..055UV3 4 8<zz~~d7K-33QR5 6 6:ZZ^^D5I

t,11q7 8 6:ZZ^^D5I

t,11q9 : $(#8#8#<#<=QST#U; < "2266~qI= > &? GB FF7OE"	H 			/"7"77 4ii%11	 
 & 	
 2)) ++v||,
   	
i  Z55I#a&3RSTVYYYZ`  V
55Ec!fX3NOPRUUU

	V 	
sk   Aa   Ab Ab ;A7b Wb 9b  	b)b
b
b	c!+cc!c$ c!!c$ $c6z/nfeGETc                  P   t               } 	 | j                  t              j                  t        j                  j                               j                  d      j                         }g }|D ]E  }| j                  t              j                  t        j                  |j                  k(        j                         }| j                  t              j                  t        j                  |j                  k(  t        j                  dk(        j                         }|j                  |j                  |j                  |j                   |j"                  |j                  |j$                  |j&                  t)        |j*                        |j,                  |j.                  |||j0                  d       H t3        d|d      | j5                          S # t6        $ r3}t3        dt9        |      d      dfcY d }~| j5                          S d }~ww xY w# | j5                          w xY w)	Nd   	confirmed)r   r   r   r   r"   r$   r#   r&   statusr-   rX   linked_items
created_atTr   dataFr   rY   )r   rf   r   order_byr"   desclimitallr   rg   r3   r   countrT   appendr   r   r   r$   r#   floatr&   r   r-   r   r   ri   rd   re   )r   nfesresultnfetotal_itemsr   r   s          r   list_nfer      s    
Bxx	"++I,@,@,E,E,GHNNsSWWY 	C((7+227>>SVV3KLRRTK88G,33GNNcff4LgNaNaepNpqwwyLMMff!nn!nn**!nn""',S-D-D'E** # 0 0* ,!nn 		& 489 	
  A53q6:;S@@

A 	
s0   F7G 	HH5H6H HH H%z/nfe/<int:nfe_id>c                 T   t               }	 |j                  t              j                  t        j                  | k(        j                         }|s t        ddd      df|j                          S |j                  t              j                  t        j                  | k(        j                  t        j                        j                         }g }|D ]R  }|j                  i d|j                  d|j                  d|j                  d|j                  d	|j                   d
|j"                  dt%        |j&                        dt%        |j(                        dt%        |j*                        dt%        |j,                        dt%        |j.                        dt%        |j0                        dt%        |j2                        dt%        |j4                        d|j6                  d|j8                  d|j:                  |j<                  |j>                  d       U t        d|j                  |j@                  |jB                  |jD                  |jF                  |jH                  t%        |jJ                        t%        |jL                        |jN                  |jP                  |jR                  |dd      |j                          S # tT        $ r3}t        dtW        |      d      dfcY d }~|j                          S d }~ww xY w# |j                          w xY w)NFNFe not foundr     r   r4   r5   r6   r7   r8   r=   r>   r?   rS   rC   rG   rN   rJ   
linked_skulinked_mlb_idrT   )link_confidencelink_methodT)r   r   r   r"   r$   r#   r&   r'   r   r-   r.   rz   r   rY   ),r   rf   r   rg   r   rh   r   ri   r   r3   r   r4   r   r   r5   r6   r7   r8   r   r=   r>   r?   rS   rC   rG   rN   rJ   r   r   rT   r   r   r   r   r"   r$   r#   r&   r'   r   r-   r.   rd   re   )r3   r   r   rz   
items_listr   r   s          r   get_nfe_detailr      s    
B3hhy!(()?@FFHuGH#M` 	
] !((6)ABKKGNN[__a
 	D dgg$++  1 1 t//	
 txx txx E$--0 eDOO4  t'9'9!: d&7&7 8 $U4+A+A%B U4>>2 E$--0 eDOO4 doo   !3!3!" t//#$ $(#7#7#//' 	. ff!nn!nn!nn""',S-D-D'E!&s'8'8!9** # 0 0"#
 ( 	
  A53q6:;S@@

A 	
s7   AK 1IK 	LL7L8L LL L'z /nfe/<int:nfe_id>/reconciliationc                 X   t               }	 |j                  t              j                  t        j                  | k(  t        j
                  dk(        j                         }|st        dd d      |j                          S t        di d|j                  d|j                  d|j                  dt        |j                        dt        |j                        dt        |j                        d	t        |j                        d
|j                   d|j"                  d|j$                  d|j&                  d|j(                  d|j*                  d|j,                  r|j,                  j/                         nd d|j0                  r|j0                  j/                         nd d|j2                  d|j4                  d      |j                          S # t6        $ r3}t        dt9        |      d      dfcY d }~|j                          S d }~ww xY w# |j                          w xY w)NTr   r   r3   supplier_cnpjfiscal_value_xmlfinancial_value_realcoverage_percentfinancial_multiplierreconciliation_statussource_typeevidence_referencenotesconfirmed_byconfirmed_atpayment_datedue_datefinancial_document_id
confidenceFr   rY   )r   rf   r	   rg   r3   	is_activerh   r   ri   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	isoformatr   r   r   rd   re   )r3   r   reconr   s       r   get_nfe_reconciliationr      s2    
B"*+22$$.''4/
 %' 	
 tT:;6 	
3 ehh%,,  !4!4 #E%*@*@$A	
 'e.H.H(I #E%*@*@$A 'e.H.H(I ()D)D u00 %e&>&>   2 2  2 2 %BTBT 2 2 < < >Z^ %..ENN446d  ()D)D!" e..#
 2 	
  A53q6:;S@@

A 	
s7   A$G EG 	H!H9H:H HH H)c                    t         j                  }|rd|vrt        ddd      dfS 	 t        |j	                  d            }|dk  rt        ddd      dfS t               }	 |j                  t              j                  t        j                  | k(        j                         }|s t        dd	d      d
f|j                          S t        |j                        }|dk  r t        ddd      df|j                          S ||z  dz  }||z  }|j	                  dd      }|j                  t              j                  t        j                  | k(  t        j                   dk(        j#                  ddi       t        | |j$                  d||||d||j	                  d      |j	                  d      dt'        j(                         |j	                  d            }	|j+                  |	       |j-                          |j/                  |	       t        dd|	j                  t        |	j0                        d      df|j                          S # t
        $ r t        ddd      dfcY S w xY w# t2        $ rC}
|j5                          t        dt7        |
      d      dfcY d }
~
|j                          S d }
~
ww xY w# |j                          w xY w)Nr   FzMissing financial_value_realr   r   zInvalid financial_value_realr   z)Financial value must be greater than zeror   r   z+Cannot reconcile an NFe with 0 fiscal valuer   r   
user_inputTr   r   r   r   r0   r   )r3   r   r   r   r   r   r   r   r   r   r   r   r   r   z!Reconciliation saved successfully)r   rW   r   r   rV   rY   )r   jsonr   r   r}   
ValueErrorr   rf   r   rg   r   rh   ri   r&   r	   r3   r   updater#   r   utcnowrw   r   refreshr   rd   r   re   )r3   r   r   r   r   fiscal_valuer   r   r   	new_reconr   s              r   create_nfe_reconciliationr     s    <<D)553QRSUXXXY$TXX.D%EF q 53^_`beee	B5hhy!(()?@FFHuGH#Md 	
a S4451u7defhkk\ 	
W )+??3F3lBhh}l; 	"#**$$.''4/	
 &+u%
& &//)!5-!5"-##xx(<=((7#!!*"&((+B"C
	" 	y
		


9:,,$))*H*H$I	
 
  	
y  Y53QRSUXXXYp  A
53q6:;S@@

	A 	
sO   I "AI* )I* D9I* I'&I'*	J63(J1J6J9 1J66J9 9Kz/nfe/<int:nfe_id>/linker/runc                     ddl m} 	 |j                  |       }d|v rt        d|d   d      dfS t        d|d      S # t        $ r#}t        dt        |      d      d	fcY d }~S d }~ww xY w
Nr   )NfeLinkerServicer   Fr   r   Tr   rY   )app.services.nfe_linker_servicer   
run_linkerr   rd   re   r3   r   summaryr   s       r   run_nfe_linkerr   [  s     A
A"--f5guww7GHI3NN
  	  A53q6:;S@@A   '> > 	A*A%A*%A*z,/nfe/<int:nfe_id>/linker/backfill-variationsc                     ddl m} 	 |j                  |       }d|v rt        d|d   d      dfS t        d|d      S # t        $ r#}t        dt        |      d      d	fcY d }~S d }~ww xY wr   )r   r   run_backfillr   rd   re   r   s       r   run_nfe_backfillr   k  s     A
A"//7guww7GHI3NN
  	  A53q6:;S@@Ar   z-/nfe/<int:nfe_id>/items/<int:item_id>/confirmc                 ,   t         j                  }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|st        ddd      dfS t	               }	 |j                  t              j                  t        j                  |k(  t        j                  | k(        j                         }|s t        dd	d      d
f|j                          S ||_        ||_        ||_        ||_        d|_        d|_        d|_        |j                  t&              j                  t&        j                  | k(        j                         }	|j                  t              j                  t        j                  | k(        j)                         }
|j                  t              j                  t        j                  | k(  t        j                   dk(        j)                         }|dz   |
k(  rd|	_        |j-                          t        ddd      |j                          S # t.        $ rC}|j1                          t        dt3        |      d      dfcY d }~|j                          S d }~ww xY w# |j                          w xY w)Nr   r   linked_variation_idlinked_catalog_product_idFzlinked_sku is requiredr   r   Item not foundr   r   highuser_confirmed   linkedTzItem link confirmedr   rW   rY   )r   r   r}   r   r   rf   r   rg   r   r3   rh   ri   r   r   r   r   rT   r   r   r   r   r   r   rd   r   re   )r3   item_idr   r   r   r   r   r   r   r   r   confirmed_itemsr   s                r   confirm_nfe_item_linkr   {  s    <<D,'JHH_-M((#89 $)D E53KLMsRR	B xx ''

g(=w~~QW?WX^^`u7GHI3N: 	
7 %*#6 )B&&%+ hhy!(()?@FFHhhw'..w~~/GHNNP((7+227>>V3KWM`M`doMopvvx Q+-!CJ
		,
  	
	  A
53q6:;S@@

	A 	
s8   2A&H2 )D8H2 2	I>;(I9#I>$J 9I>>J Jz,/nfe/<int:nfe_id>/items/<int:item_id>/unlinkc                 B   t               }	 |j                  t              j                  t        j                  |k(  t        j
                  | k(        j                         }|s t        ddd      df|j                          S d |_	        d |_
        d |_        d |_        d|_        d |_        d|_        |j                  t               j                  t         j                  | k(        j                         }|r|j"                  dk(  rd|_        |j%                          t        d	d
d      |j                          S # t&        $ rC}|j)                          t        dt+        |      d      dfcY d }~|j                          S d }~ww xY w# |j                          w xY w)NFr   r   r   rU   unlinked_by_userr   pending_linkTzItem unlinked successfullyr   rY   )r   rf   r   rg   r   r3   rh   r   ri   r   r   r   r   rT   r   r   r   r   r   rd   r   re   )r3   r   r   r   r   r   s         r   unlink_nfe_itemr     sP    
Bxx ''

g(=w~~QW?WX^^`u7GHI3N, 	
) !#' )-&$#- hhy!(()?@FFH3::)'CJ
		44PQR
 	
	  A
53q6:;S@@

	A 	
s7   A&D= B)D= =	F	(F.F	/F F		F Fz&/nfe/<int:nfe_id>/linker/confirm_batchc                 2   t               }	 |j                  t              j                  t        j                  | k(  t        j
                  dk(  t        j                  dk(        j                         }d}|D ]"  }|j                  sd|_        d|_	        |dz  }$ |j                  t              j                  t        j                  | k(        j                         }|j                  t              j                  t        j                  | k(        j                         }|j                  t              j                  t        j                  | k(  t        j
                  dk(        j                         }||k(  rd|_        |j                          t!        d| d	|d
      |j#                          S # t$        $ rC}|j'                          t!        dt)        |      d      dfcY d }~|j#                          S d }~ww xY w# |j#                          w xY w)N	suggestedr   r   r   batch_confirmedr   r   Tz items confirmed in batch)r   rW   confirmed_countFr   rY   )r   rf   r   rg   r3   rT   r   r   r   r   r   r   rh   r   r   r   r   ri   rd   r   re   )	r3   r   rz   r   r   r   r   r   r   s	            r   confirm_nfe_batch_linkr     s    
B"!((NNf$;.##v-
 #%	 	  	D#. #4 
		 hhy!(()?@FFHhhw'..w~~/GHNNP((7+227>>V3KWM`M`doMopvvxk)!CJ
		 9:$
  	
	  A
53q6:;S@@

	A 	
s7   A:F5 DF5 5	H>(G<&H'H <HH Hz/nfe/linker/searchc                  0
   t         j                  j                  dd      j                         } | st	        dg d      S t               }	 ddlm} ddlm	} ddl
m}m}m} | j                         }|j                  ||      j!                  ||j"                  |j$                  k(        }|D ]  }	d	|	 d	}
|j'                  |j)                  |j*                  d      d
|j)                  |j,                  d      d
|j)                  |j,                  d      d
|j)                  |j.                  d            }|j1                  |j3                  |
            } |j5                  d      j7                         }|j                  |      j1                   ||j"                  | k(  |j8                  | k(              j7                         }|j                  |      j1                   ||j"                  | k(  |j$                  | k(              j7                         }|D ch c]  }|j"                   }}|D ]*  }|j$                  s|j;                  |j$                         , |D ]   \  }}|j;                  |j"                         " |j                  |      j1                  |j"                  j=                  |            j7                         }|j                  |      j1                  |j$                  j=                  |            j7                         }|D ci c]  }|j"                  | }}i }|D ]=  }|j$                  |vrg ||j$                  <   ||j$                     j?                  |       ? g }|jA                         D ]  \  }}|j                  |g       }|r|D ]  }|j?                  dd|j"                  |j"                  tC        |dd       tC        |dd      |j,                  |j*                  |j.                  |jD                  |jF                  |jH                  dd        |j?                  dd|j"                  d tC        |dd       tC        |dd      |j,                  |j*                  d |jD                  |jF                  |jH                  dd        t	        d|d d d      |jK                          S c c}w c c}w # tL        $ r3}t	        dtO        |      d      dfcY d }~|jK                          S d }~ww xY w# |jK                          w xY w)Nqr   Tr   r   )Ad)AdVariation)or_and_func% r   ad_variationcatalog_product_idcatalog_listingFu*   Variação (filha) vinculável encontrada.)r   variation_availablemlb_idvariation_idr   r   skutitlevariation_nameprice	thumbnailavailable_quantitymatch_reasonadu9   Anúncio pai (simples ou variações não sincronizadas).r   rY   )(r   argsr}   stripr   r   app.models.adr   app.models.ad_variationr   
sqlalchemyr   r   r   splitrf   	outerjoinr   ad_idconcatcoalescer   r   attribute_combinationrg   iliker   r   gtinrw   in_r   rz   getattrr   r  r  ri   rd   re   )rf   r   r   r   r   r   r   query_words
base_querywpatterncombined_textmatched_pairs	exact_ads
exact_varsr  ad_idsvvarall_ads_involvedall_variations_involvedaad_map	var_by_adresultsr  vars_for_adr   s                               r   search_linker_candidatesr&    sl    LLS"%++-E4455	BZ$7..kkm XXb+.88bee{O`O`F`a
 	IA!AhG KKbhh+Sbffb)3koor2Ck??D	M $**=+>+>w+GHJ	I #((-113 HHRL''BEEUNBGGu<L(MNRRT	XXk*11#knn6M{O`O`diOi2jkooq
"+,B"%%,, 	,Aww

177+	,$ 	GBJJruu	 88B<..ruuyy/@AEEG"$((;"7">">{?P?P?T?TU[?\"]"a"a"c#34a!$$'44	( 	)Awwi'%'	!''"agg%%a(	)
  $	IE2#--r2K$ A NN'5/3"$%%().5b:NPT.U+227H%+P uu!#*+*A*A!"%'\\./.B.B(T$ & #'+0 ee$(*1"6JD*Q'.r3De'L66XX&*XX!#*,*?*?$_  -$	N DSM
  	
 - 5f  A53q6:;S@@

A 	
sW   
GS R:)S =CS R?%FS :
S 	T S;%T &T ;T  T T)flaskr   r   app.apir   app.core.databaser   app.models.nfer   r   r	   app.services.nfe_parser_servicer
   app.schemas.nfer   app.api.endpoints.authr   ra   r   router   r   r   r   r   r   r   r   r   r   r&  rZ       r   <module>r0     s   "  * @ @ < + /  mfX.C  /CL fug&  '< !E735  45n 05'B$  C$L 06(CC  DCJ ,vh?A  @A <vhOA  PA =xP+  Q+Z <vhO  P< 6I$  J$N "UG4`  5`r/  