posto lo script Report Mensile dei Documenti perchè può avere una importante valenza,
il report permette di scaricare un file csv con l'elenco degli elementi presenti negli archivi del 730 precompilato
ovviamente riferiti al soggetto che li ha caricati e nel mese sceto per l'estrazione.
con questo csv è possibile verificare con i propri archivi, che tutti i documenti sono stati "gestiti" e caricati.
in pratica il controllo a rovescio, permette di individuare tutti i documenti che per una qualche ragione sono stati esclusi dal processo ( esperienza personale, dal mio 730 mancavano 4 scontrini x circa 100 € ! )
quindi sottolineo, non un malfunzionamento del web service ma un malfunzionamento della propria gestione
PHP:
<?php
require 'Credenziali.php';
echo "<h4>REPORT MENSILE DEI DOCUMENTI INVIATI</h4>";
/* -------------------------------------------------------------------------------- Soap Client */
$ws = _ReportMensile_WSDL;
$SoapClientParam["location"] = $ReportMensile;
require 'SoapClientInit.php';
/* -------------------------------------------------------------------------------- Soap Request */
echo "<h4>INVIO L' INTERROGAZIONE</h4>";
error_log("INVIO L' INTERROGAZIONE", 0);
$SoapRequest = array
(
"pincode" => $pincodeInvianteCifrato,
"Proprietario" => array
(
"cfProprietario" => $cfProprietarioCifrato,
"codiceRegione" => $codiceRegione,
"codiceAsl" => $codiceAsl,
"codiceSSA" => $codiceSSA,
),
"opzionale1" => $opzionale1,
"opzionale2" => $opzionale2,
"opzionale3" => $opzionale3,
"tipoEstrazione" => $ric_tipoEstrazione,
"annoMese" => $ric_annoMese,
);
echo show_var($SoapRequest); echo "<br /><br />";
log_var($SoapRequest);
try { $output = $client->ReportMensile($SoapRequest); }
catch ( SoapFault $e )
{
require 'SoapFault.php';
}
/* -------------------------------------------------------------------------------- Soap Receipt */
echo "<h4>L'INTERROGAZIONE HA AVUTO RISPOSTA</h4>";
error_log("L'INTERROGAZIONE HA AVUTO RISPOSTA", 0);
print_r($output); echo "<br /><br />";
echo show_var($output); echo "<br /><br />";
/* -------------------------------------------------------------------------------- Esito */
if ( $output->esitoChiamata == 0 )
{
$estrazione = $ric_tipoEstrazione."-".$ric_annoMese;
$titolo = "E' PRESENTE IL REPORT MENSILE DEI DOCUMENTI INVIATI ".$estrazione;
echo "<h4>".$titolo."</h4>";
error_log($titolo, 0);
$dati = $output->fileCSV;
if( empty($dati) )
{
echo "<h4>IL FILE E' VUOTO</h4>";
error_log("IL FILE E' VUOTO", 0);
}
else
{
$nomefile = $PercorsoDocRicevuti.$estrazione.".zip";
echo "<h4>SALVO IL REPORT COME ".$nomefile."</h4>";
error_log("SALVO IL REPORT COME ".$nomefile, 0);
file_put_contents ( $nomefile, $dati );
$zip = new ZipArchive;
$res = $zip->open($nomefile);
if ($res === TRUE)
{
$fileCSV = $zip->getNameIndex(0);
$zip->extractTo($PercorsoDocRicevuti);
$zip->close();
$nomeZIP = $PercorsoDocRicevuti.$fileCSV;
$nomeCSV = $PercorsoDocRicevuti.$estrazione.".csv";
rename($nomeZIP, $nomeCSV);
echo "File csv estratto ".$nomeCSV;
error_log("File csv estratto ".$nomeCSV, 0);
}
else
{
echo "Il file ".$nomefile." non è disponibile";
error_log("Il file ".$nomefile." non è disponibile", 0);
}
echo "<h4>INTERROGAZIONE TERMINATA CON SUCCESSO</h4>";
error_log("INTERROGAZIONE TERMINATA CON SUCCESSO", 0);
}
}
else
{
$response = $output->listaMessaggi->messaggio;
ReportOutput("codice");
ReportOutput("descrizione");
ReportOutput("tipo");
echo "<br /><br />";
echo "<h4>INTERROGAZIONE TERMINATA CON ERRORE</h4>";
error_log("INTERROGAZIONE TERMINATA CON ERRORE", 0);
}
echo "<h4>FINE DEL LAVORO</h4>";
error_log("done ".$_SERVER['PHP_SELF'], 0);
?>
non differisce troppo dai precedenti script postati e chi li ha utilizzati saprà utilizzare anche questo con profitto
saluti
Bravo Marino. Anche io avevo implementato questa interrogazione e mi resi conto che, in caso di
Codice:
$output->esitoChiamata == 1
l'errore di ritorno dal webservice poteva essere non una singola stringa ma un array,
quindi un messaggio multiplo. Me ne sono accorto quando ho sbagliato il "tipoEstrazione" ed ho ricevuto il messaggio che vedete nell'immagine (quelli sono due messaggi).
Non sapendo se quello è l'unico caso di messaggio multiplo ho deciso di verificare sempre come stanno le cose. Ecco
il codice da inserire
Ho implementato anche InterrogazionePuntuale. Eccolo. Io l'ho reso dinamico facendo un ciclo compreso tra due date di emissione fattura in modo da avere un report un po' più completo. Qui di seguito ho messo l'estrazione singola. Essendo interessato all'invio per un medico la voce Propietario ha solo il CF. Aggiungere i codici ASL e Regione se servono.
Codice:
<?php
// DEFINIZIONE PER WSDL SCRIPT INTERROGAZIONE PUNTUALE
require_once 'Credenziali.php';
//Acquisisco i dati dal form di input
$DataFattura = $_POST['dataFattura']);
$NumFattura = $_POST['numFattura']);
$dispositivo = $_POST['dispositivo']);
$ws = _InterrogazionePuntale_WSDL;
$SoapClientParam["location"] = $InterrogazionePuntuale;
$client = new SoapClient($ws, $SoapClientParam);
$SoapRequest = array( "pincode" => $pincodeInvianteCifrato,
"Proprietario" => array("cfProprietario" => $cfProprietarioCifrato),
"opzionale1" => $opzionale1,
"opzionale2" => $opzionale2,
"opzionale3" => $opzionale3,
"idDocumentoFiscale" => array( "pIva" => $piProprietario,"dataEmissione" => $DataFattura,
"numDocumentoFiscale" => array( "dispositivo" => $dispositivo,"numDocumento" => $NumFattura,)));
$output = $client->InterrogazionePuntuale($SoapRequest);
$numDocumento = $output->documentoFiscale->idDocumentoFiscale->numDocumentoFiscale->numDocumento;
$dataEmissione = $output->documentoFiscale->idDocumentoFiscale->dataEmissione;
$dataInvio = $output->documentoFiscale->dataInvio;
$tipoInvio = $output->documentoFiscale->tipoInvio;
$protocollo = $output->documentoFiscale->protocollo;
$importo = $output->documentoFiscale->totaliVociSpesa;
/////////////////////////////////////////////////////////////////////
// Se totaliVociSpesa è un array devo fare un ciclo foreach per avere il totale
/////////////////////////////////////////////////////////////////////
$totale = 0;
if(!is_array($importo))
{
$totale = $importo->importo;
}
else
{
foreach($importo as $aliasImporto)
{
$totale = $totale + $aliasImporto->importo;
}
}
?>
In ambiente di produzione del report mensile ricevevo spesso il messaggio "SERVIZIO RICHIESTO NON EROGABILE NELLA FASCIA ORARIA DELLA RICHIESTA". Ho scritto a SOGEI e mi hanno risposto quanto segue:
I servizi di interrogazione sono disponibili in produzione dalle 22:00 alle 08:00 e dalle 13:00 alle 16:00
Salve,
sto provando a fare un nuovo invio relativo alle fatture del 2017.
La ricevuta pdf mi riporta sempre Errore E011 "FILE NON CONFORME ALLO SCHEMA DI VALIDAZIONE".
Ho controllato il file xml e mi sembra perfetto. Ho fatto anche una validazione esterna con un tool online rispetto al file XSD di riferimento e sembra tutto ok.
Vi è mai successo?
Ciao Manuel, a me capitò che il file XML fosse corretto dal punto di vista dei tag, aperti e chiusi tutti regolarmente e validato correttamente, ma non era corretto dal punto di vista 'logico' poiché all'interno di un tag mancava il dato richiesto. Controlla anche questo aspetto.
Ho provato a generarne un di un solo giorno per poterlo analizzare meglio. Sono solo 7 fatture. Io non ci vedo nulla di strano.....
Puoi aiutarmi a confrontarlo con uno che a te funziona?
ho risolto.
Non avevo pulito la directory di sistema e il file zip che inviavo conteneva altri file oltre all'xml da inviare..... e quindi non lo vedeva.
Buon 2018! Eccoci con l'invio per il 2017 e riprendo gli script per fare 2 prove e poi l'invio e gazzosa... se mi ricordo il tutto.
Caro Marino51, ringraziandoti ancora per tutto, ho visto che anche te alla fine ai visto l'utilità di avere un 'controllo a rovescio' e mi spiace che ti mancavano 4 scontrini
Visto che in fase di test se non erro avevi notato che i dati vengono periodicamente cancellati il reportmensile e puntuale (grazie msccmra51 !) funzioneranno in fase di test?
2 domandine sui nuovi script:
1) SoapClientInit.php non lo trovo: me lo sono perso?
2) ric_tipoEstrazione: non ho capito cosa mettere per la data della fattura. Esempio quelle di gennaio 2017 (201701)
Grazie Marino51 sempre gentile. Dove è il link allo script SoapFault.php (require nello script Report Mensile) ? Mi sa che mi sono perso anche quello, scusa...
Grazie a chiunque lo sappia
p.s. certo che in fase di test questi 'W003;IL CF CITTADINO NON PRESENTE IN ARCHIVIO' che controllando sul sito dell'AdE dice CODICE FISCALE VALIDO .... tutti quelli warning!!!