<cfset StructDelete(Variables, "error_output")>
<cfset StructDelete(Variables, "fatture_ricevute")>
<cfset StructDelete(Variables, "fattura_ricevuta")>
<cfset StructDelete(Variables, "fatture_inviate")>
<cfset StructDelete(Variables, "fattura_inviata")>
<cfset StructDelete(Variables, "result")>

<cfquery name="dett_azienda" datasource="intranet">
  select ws_fe_invoice_in from aziende where ID_az_ = #active_ID_az_#
</cfquery>

<cfif IsDefined("dett_azienda.ws_fe_invoice_in") and dett_azienda.ws_fe_invoice_in neq ''>
  <cfset ws_url_ricevute = Trim(dett_azienda.ws_fe_invoice_in)>
</cfif>

<!--- Verifica se ha tutti i parametri per la richiesta del token --->
<cfif IsDefined("ws_url_ricevute") and Len(ws_url_ricevute) gt 0>

  <cfoutput>INIZIO Fatture ricevute (ws: #ws_url_ricevute#)<br /></cfoutput>

  <!--- Recupera le fatture ricevute via webserivce --->
  <cftry>
    <cfset result="">
	<cfset contatore = 0>
	<cfset pagine = 1>
	<cfset pagine_totali = 1>
	<cfloop condition="contatore lt pagine_totali">
		<cfhttp url="#ws_url_ricevute#" result="result" method="get">
		  <cfhttpparam type="header" name="Authorization" value="Bearer #token_SDI#">
		  <cfhttpparam type="url" name="size" value="99">
		  <cfhttpparam type="url" name="page" value="#pagine#">
		  <cfhttpparam type="url" name="startDate" value="#data_inizio#">
		</cfhttp>
		<cfoutput>Controllo fatture dal #dateformat(data_inizio, "dd/mm/yyyy")# - Contatore:#contatore#|Pagine:#pagine#|Pag_totali:#pagine_totali#</cfoutput>
		<cfset contatore = contatore + 1>
		<cfset pagine = pagine + 1>
		<cfif IsJSON(result.Filecontent)>
			<cfset cfData2=DeserializeJSON(result.Filecontent)>
			<cfset pagine_totali= cfData2.totalpages>
		</cfif>
		  <!--- Gestisce l'errore interno generico 500 ricevuto in risposta alla precedente chiamata --->
		  <cfif IsDefined("result.Statuscode") and result.Statuscode eq '500 Internal Server Error'>
			<cfset error_output = '220'>
			<cfoutput>#error_output# | Statuscode='500 Internal Server Error'<br /></cfoutput>
		  </cfif>

		  <!--- Gestisce l'errore 404 ricevuto in risposta alla precedente chiamata --->
		  <cfif IsDefined("result.Statuscode") and result.Statuscode eq '404'>
			<cfset error_output = '230'>
			<cfoutput>#error_output# | Statuscode='404'<br /></cfoutput>
		  </cfif>

		  <!--- Gestisce l'errore 403 ricevuto in risposta alla precedente chiamata --->
		  <cfif IsDefined("result.Statuscode") and result.Statuscode eq '403 Forbidden'>
			<cfset error_output = '240'>
			<cfoutput>#error_output# | Statuscode='403 Forbidden'<br /></cfoutput>
		  </cfif>

		  <!--- Verifica la presenza del Filecontent nella risposta alla precedente chiamata --->
		  <cfif NOT IsDefined("result.Filecontent") or len(trim(result.Filecontent)) eq 0>
			<cfset error_output = '250'>
			<cfoutput>#error_output# | 'Filecontent' non presente o non popolato<br /></cfoutput>
		  </cfif>

		  <!--- Processa quanto ricevuto dalla precedente chiamata --->
		  <cfif NOT IsDefined("error_output") or Len(Trim(error_output)) eq 0>
			<cftry>
			  <cfset fatture_ricevute=DeserializeJSON(result.Filecontent)>
			  <cfcatch>
				<cfset error_output = '260'>
				<cfoutput>#error_output# | Errore interpretazione 'Filecontent': <cfoutput>#cfcatch.Message#</cfoutput><br /></cfoutput>
				<cfdump var="#result#">
			  </cfcatch>
			</cftry>
		  </cfif>

		  <cfif IsDefined("fatture_ricevute")>
			<cfif IsDefined("fatture_ricevute.Message") and fatture_ricevute.Message eq "Authorization has been denied for this request.">
			  <cfset error_output = '270'>
			  <cfoutput>#error_output#<br /></cfoutput>
			  <cfdump var="#result#">
			<cfelse>
			  <cfif IsDefined("fatture_ricevute.totalElements") and fatture_ricevute.totalElements gt 0>
				<cfoutput>Inizio a ciclare le fatture ricevute (#fatture_ricevute.totalElements#)<br /></cfoutput>
			  <cfelse>
				Nessuna fattura ricevuta<br />
			  </cfif>
			  <!--- <cfdump var="#fatture_ricevute.content#"> --->
			  <cftry>
				<!--- <cfdump var="#fatture_ricevute#">  --->
				<cfloop array="#fatture_ricevute.content#" index="fattura">
				<!--- <cfoutput>#fattura.id#<br></cfoutput> --->
				  <cftransaction>
					<!--- <cfoutput>** Fattura corrente: #fattura.id#<br /></cfoutput> --->
					<cfquery datasource="#active_session_dsn#" name="importa_ricevute" result="importa_ricevute_r">
					  select #active_session_dsn#.importa_fattura_sdi (
						'#fattura.id#',
						'#fattura.sender.description#',
						'#fattura.sender.countryCode#',
						<cfif IsDefined("fattura.sender.vatCode")>'#fattura.sender.vatCode#'<cfelse>NULL</cfif>,
						<cfif IsDefined("fattura.sender.fiscalCode")>'#fattura.sender.fiscalCode#'<cfelse>NULL</cfif>,
						'#fattura.receiver.description#',
						<cfif IsDefined("fattura.receiver.countryCode")>'#fattura.receiver.countryCode#'<cfelse>NULL</cfif>,
						<cfif IsDefined("fattura.receiver.vatCode")>'#fattura.receiver.vatCode#'<cfelse>NULL</cfif>,
						<cfif IsDefined("fattura.receiver.fiscalCode")>'#fattura.receiver.fiscalCode#'<cfelse>NULL</cfif>,
						'#fattura.invoiceType#',
						'#fattura.docType#',
						'#fattura.filename#',
						'#fattura.username#',
						NULL,/* p_creationDate */
						#DateConvert('utc2Local',fattura.lastUpdate)#,
						<cfif IsDefined("fattura.idSdi")>'#fattura.idSdi#'<cfelse>NULL</cfif>,
						1
					  ) as fattura_id
					</cfquery>
					<cfif Len(Trim(importa_ricevute.fattura_id)) gt 0>
					<cfoutput>** Fattura corrente: #fattura.id#<br /></cfoutput>
					  <cfoutput>** Fattura inserita!<br /></cfoutput>
					<!--- <cfelse>
					  ** Fattura già presente<br /> --->
					</cfif>

					<!--- <cfoutput>--> Inizio a ciclare gli elementi della fattura (#ArrayLen(fattura.invoices)#)<br /></cfoutput> --->
					<cfset Data_Emissione_ ="">
					<cfloop array="#fattura.invoices#" index="fattura_dettaglio">
					<cfset Data_Emissione_ = replace(fattura_dettaglio.invoiceDate, "T", " ", "all")>
					<cfset Data_Emissione = left(data_emissione_,19)>
					<!--- <cfoutput>#Data_Emissione#</cfoutput> --->
						<cfset Data_Emissione_ = replace(fattura_dettaglio.invoiceDate, "T", " ", "all")>
					  <!--- <cfoutput> --> Elemento relativo a fattura numero #fattura_dettaglio.number#<br /></cfoutput> --->
					  <cfquery datasource="#active_session_dsn#" name="importa_ricevute_dettaglio" result="importa_ricevute_dettaglio_r">
						select #active_session_dsn#.importa_fattura_dettaglio_sdi (
						  '#fattura.id#',
						  <!--- #DateConvert('utc2Local',fattura_dettaglio.invoiceDate)# --->
						   #createODBCDate(Data_Emissione)#,
						  '#fattura_dettaglio.number#',
						  '#fattura_dettaglio.status#'
						) as fattura_dettaglio_id
					  </cfquery>
					  <cfif Len(Trim(importa_ricevute_dettaglio.fattura_dettaglio_id)) gt 0>
					  <cfoutput>---> Elemento relativo a fattura numero #fattura_dettaglio.number#<br /></cfoutput>
						<cfoutput>---> Elemento fattura inserito!<br /></cfoutput>
					  <!--- <cfelse>
					   --> Elemento fattura già presente<br /> --->
					  </cfif>
					</cfloop>
					<!--- <cftransaction action="rollback"> --->
				  </cftransaction>
				</cfloop>
				<cfcatch>Errore LOOP "fatture_ricevute": <cfoutput>#cfcatch.Message#</cfoutput><br /></cfcatch>
			  </cftry>

			</cfif>
		  </cfif>
			</cfloop>
			<cfcatch>
			  <cfset error_output = '210'>
			  <cfoutput>#error_output# | #cfcatch.Message#<br /></cfoutput>
			</cfcatch>
		  </cftry>


<cfelse>
  <cfset error_output = '200'>
  <cfoutput>#error_output# | URL ws non definito <br /></cfoutput>
</cfif>