>"; $CorpoEr = "Errore durante la preparazione del file <> delle ore <>"; $CorpoOk = "Resoconto preparazione file per Sap delle ore <>"; $CodaMsg = "Questo indirizzo di posta elettronica fa riferimento ad una casella non presidiata ed è utilizzata esclusivamente per funzioni di servizio
"; $ftp_server = $ambiente == 0 ? "test.datatfx.com" : "produzione.datatfx.com"; $ftp_username = "sap"; $ftp_password = "Dataflex1"; $ftp_homedir = $ambiente == 0 ? "TEST" : "PRD"; // 01/02/2023 :: Impostazione variabili di riepilogo e uscita ciclo $TotFlussi = ""; $Container = ""; $ContaSAP = 0; // 01/02/2023 :: Preparazione cartelle di sistema e librerie require_once $percorso.str_replace("/",DIRECTORY_SEPARATOR,"/assets/library/php/db.class.php"); require_once $percorso.str_replace("/",DIRECTORY_SEPARATOR,"/assets/library/php/db.check.php"); require_once $percorso.str_replace("/",DIRECTORY_SEPARATOR,"/assets/library/php/mail.class.php"); require_once $percorso.str_replace("/",DIRECTORY_SEPARATOR,"/assets/phpmailer/src/SMTP.php"); require_once $percorso.str_replace("/",DIRECTORY_SEPARATOR,"/assets/phpmailer/src/PHPMailer.php"); require_once $percorso.str_replace("/",DIRECTORY_SEPARATOR,"/assets/phpmailer/src/Exception.php"); $ma = new MAILprog; // 01/02/2023 :: Ciclo principale :: Rilevo prima il numero di flussi da elaborare $Query = "select count(Id) from FLUSSI where Protocollo is not null and DataOrdine is not null and ProtocolloRif is not null and IdCodClienteSAP is not null and DataTrasfSap is null and DataAnnulloFlusso is null and ReadyToSend is not null group by DataTrasfSap"; $stmt = $db->prepare($Query); $stmt->execute(); $row = $stmt->fetch(); $TotFlussi = $row[0]; $Query = "select Id from FLUSSI where Protocollo is not null and DataOrdine is not null and ProtocolloRif is not null and IdCodClienteSAP is not null and DataTrasfSap is null and DataAnnulloFlusso is null and ReadyToSend is not null order by DataOrdine desc"; $stmt = $db->prepare($Query); $stmt->execute(); while ($row = $stmt->fetch()) { $ContaSAP++; $datecurr = strtotime(date("H:i:s")); if ($datelimit - $datecurr <= $max_time - intval($max_time * $timesave / 100) || $ContaSAP > $TotFlussi) break; echo $ContaSAP."<>".$TotFlussi."\n"; $IdFlusso = $row[0]; $StringaSAP = ""; $Query = "select distinct FLUSSI.IdCodClienteSAP, FLUSSI_DETTAGLIO.CodiceArticoloSAP, FLUSSI_DETTAGLIO.PrezzoUnitarioApplicato, FLUSSI_DETTAGLIO.DataInitFornitura, FLUSSI_DETTAGLIO.DataFineFornitura, FLUSSI_DETTAGLIO.Cig, FLUSSI_DETTAGLIO.ProtocolloRif, FLUSSI.Id, FLUSSI.DataOrdine, FLUSSI.RagioneSociale, upper(FLUSSI.CodiceCausale), FLUSSI.DataInizioValidita, FLUSSI.DataFineValidita from FLUSSI, FLUSSI_DETTAGLIO where FLUSSI.Id = FLUSSI_DETTAGLIO.IdFlusso and FLUSSI.Id = '".$IdFlusso."'"; $stmf = $db->prepare($Query); $stmf->execute(); while ($row = $stmf->fetch()) { $CodCliente = trim($row[0]); $CodArticoloSAP = trim($row[1]); $PrezzoUnitario = number_format($row[2],8,".",""); $IntPrezzo = intval($PrezzoUnitario); $DecPrezzo = number_format($PrezzoUnitario - intval($PrezzoUnitario),8,".",""); $DataInitForn = date("Ymd",strtotime(str_replace("/","-",$row[3]))); $DataFineForn = date("Ymd",strtotime(str_replace("/","-",$row[4]))); $Cig = trim($row[5]); $Protocollo = trim($row[6]); $FlussoId = $row[7]; $DataFlusso = date("d/m/Y",strtotime(str_replace("/","-",$row[8]))); $RagioneSociale = trim($row[9]); $Causale = trim($row[10]); $Query = "select upper(Offribile) from MASTERFILE where upper(CODARTICOLO) = '".strtoupper($CodArticoloSAP)."' fetch first 1 row only"; $stma = $db->prepare($Query); $stma->execute(); $row = $stma->fetch(); if (!$row) $Offribile = "SI"; else $Offribile = $row[0]; if ($Offribile == "SI") { if ($Causale == "ORDARO") { $StringaSAP .= $CodCliente.str_repeat(" ",20 - strlen($CodCliente)).$Protocollo.str_repeat(" ",50 - strlen($Protocollo)).$CodArticoloSAP.str_repeat(" ",20 - strlen($CodArticoloSAP)).str_repeat(" ",20 - strlen($PrezzoUnitario)).$PrezzoUnitario.str_repeat(" ",20).$DataInitForn.$DataFineForn.$Cig.str_repeat(" ",30 - strlen($Cig))."OFF".chr(13).chr(10); } else { $StringaSAP .= $CodCliente.str_repeat(" ",20 - strlen($CodCliente)).$Protocollo.str_repeat(" ",50 - strlen($Protocollo)).$CodArticoloSAP.str_repeat(" ",20 - strlen($CodArticoloSAP)).str_repeat(" ",20 - strlen($PrezzoUnitario)).$PrezzoUnitario.str_repeat(" ",20).$DataInitForn.$DataFineForn.$Cig.str_repeat(" ",30 - strlen($Cig))."GAR".chr(13).chr(10); } } } $FileNamIn = str_replace("__","_","EXPORT_".date("Ymd")."_".date("His")."_".str_replace("/","_",str_replace("FLU","",$FlussoId)).".god"); $FileNamOut = str_replace("__","_","EXPORT_".date("Ymd")."_".date("His")."_".str_replace("/","_",str_replace("FLU","",$FlussoId)).".txt"); $handle = fopen($Current.$FileNamIn,"w+"); fwrite($handle,$StringaSAP); fclose($handle); // 30/01/2023 :: Gestione degli errori $errRet = null; $errTxt = null; // 19/01/2023 :: Non trova il file di origine if (!file_exists($Current.$FileNamOut) && $errRet == null) { $errRet = 1; $errTxt = "File ".$Current.$FileNamOut." non trovato. Codice di errore :".$errRet; } // 19/01/2023 :: Conversione file ex vtansi $output = exec("cscript sapconvert.vbs ".$Current.$FileNamIn." ".$Current.$FileNamOut); // 19/01/2023 :: Non trova il file di destinazione if (!file_exists($Current.$FileNamOut) && $errRet == null) { $errRet = 2; $errTxt = "File ".$Current.$FileNamOut." non trovato. Codice di errore :".$errRet; } // 19/01/2023 :: Controllo CRC su file in cartella OUT e Storico // $crcOut = hash_file("crc32", $Current.$FileNamOut); // $crcSto = hash_file("crc32", $Current.$FileNamOut); // if ($crcOut <> $crcSto && $errRet == null) { // $errRet = 3; // $errTxt = "Il controllo CRC tra ".$Current.$FileNamOut." e ".$Current.$FileNamOut." è fallito. Codice di errore: ".$errRet; // } // 06/02/2023 :: Controllo size sui file // clearstatcache(); // $sizeIn = filesize($Current.$FileNamIn); // clearstatcache(); // $sizeOut = filesize($Current.$FileNamOut); // if ($sizeIn <> $sizeOut && $errRet == null) { // $errRet = 3; // $errTxt = "Il controllo delle dimensioni tra ".$Current.$FileNamIn." e ".$Current.$FileNamOut." è fallito. Codice di errore: ".$errRet; // } // 30/01/2023 :: Imposto gli errori if ($errRet != null) { $SoggettoWork = str_replace("<>",date("H:i:s"),$Soggetto); $CorpoWork = str_replace("<>",$FileNamIn,str_replace("<>",date("H:i:s"),$CorpoEr))."

".$errTxt."


".$CodaMsg;; // 30/01/2023 :: Recupero indirizzi dei destinatari e ciclo per destinatari multipli $Query = "select Descrizione from TAB_VARI where Valore1 = 'saptransfer_admin'"; $stmt = $db->prepare($Query); $stmt->execute(); $row = $stmt->fetch(); $dest = explode(";",$row[0]); try { $mail = new PHPMailer(true); $mail->CharSet = $ma->char; $mail->IsSMTP(); $mail->SMTPAuth = true; $mail->Username = $ma->user; $mail->Password = $ma->pass; $mail->SMTPSecure = $ma->secu; $mail->Host = $ma->host; $mail->Port = $ma->port; $mail->From = $ma->from; $mail->FromName = $ma->name; for ($y = 0; $y < count($dest); $y++) { if (strlen($dest[$y]) > 0) { $mail->AddAddress($dest[$y]); } } $mail->Subject = $SoggettoWork; $mail->IsHTML(true); $mail->Body = $CorpoWork; if(!$mail->Send()) { $CorpoWork .= $CorpoWork."


".$CodaMsg; for ($y = 0; $y < count($dest); $y++) { if (strlen($dest[$y]) > 0) { $Query = "insert into MAILCONTAINER (IdGara,Indirizzo,Soggetto,Corpo,Operatore) values ('GAR/0000/0000','$dest[$y]','$SoggettoWork','$CorpoWork','system')"; $stmt = $db->prepare($Query); } } } $mail->clearAllRecipients(); } catch (Exception $e) { // 29/11/2022 :: Scrivo un record amministrativo di errore con il codice in Mailcontainer $CorpoWork = $CorpoWork."

"."Errore di invio: ".$mail->ErrorInfo."


".$CodaMsg; for ($y = 0; $y < count($dest); $y++) { if (strlen($dest[$y]) > 0) { $Query = "insert into MAILCONTAINER (IdGara,Indirizzo,Soggetto,Corpo,Operatore) values ('GAR/0000/0000','$dest[$y]','$SoggettoWork','$CorpoWork','system')"; $stmt = $db->prepare($Query); } } } } // 01/02/2023 :: Operazione corretta else { $Container .= "".$Protocollo."".$CodCliente."".$RagioneSociale."".$Current.$FileNamOut.""; unlink($Current.$FileNamIn); $DataSap = "{D '".date("Y-m-d")."'}"; $Query = "update FLUSSI set NomeFileSap = '".$FileNamOut."', DataTrasfSap = ".$DataSap.", Operatore = 'system' where Id = '".$IdFlusso."'"; $stmu = $db->prepare($Query); $stmu->execute(); $Query = "update FLUSSI_DETTAGLIO set DataTrasfSap = ".$DataSap.", Operatore = 'system' where IdFlusso = '".$IdFlusso."'"; $stmu = $db->prepare($Query); $stmu->execute(); } } if (strlen($Container) > 0) { // 03/02/2023 :: Invia tutti i file creati sul server ftp nella cartella corrente $errRet = 0; $errTxt = ""; $ContFtp = ""; $ftp_conn = ftp_connect($ftp_server) or die("Could not connect to ".$ftp_server); $login = ftp_login($ftp_conn, $ftp_username, $ftp_password); ftp_pasv($ftp_conn, true); ftp_chdir($ftp_conn, $ftp_homedir); ftp_chdir($ftp_conn, "out"); $files = glob($Current."/*.txt"); foreach ($files as $file) { if (ftp_put($ftp_conn, $file, $file, FTP_ASCII)) { echo "Successfully uploaded $file."."\n"; } else { echo "Error uploading $file."."\n"; } } ftp_close($ftp_conn); // 03/02/2023 :: Invia tutti i file creati sul server ftp nella cartella storico $ftp_conn = ftp_connect($ftp_server) or die("Could not connect to ".$ftp_server); $login = ftp_login($ftp_conn, $ftp_username, $ftp_password); ftp_pasv($ftp_conn, true); ftp_chdir($ftp_conn, "STORICO"); $files = glob($Current."/*.txt"); foreach ($files as $file) { if (ftp_put($ftp_conn, $file, $file, FTP_ASCII)) { echo "Successfully uploaded $file."."\n"; } else { echo "Error uploading $file."."\n"; } } ftp_close($ftp_conn); // 05/02/2023 :: Cancellazione dei file in locale // 05/02/2023 :: Da fare $files = glob($Current."/*.txt"); foreach ($files as $file) { unlink($file); } // 01/02/2023 :: Invia il riepilogo dei file prodotti $Container = "".$Container."
ProtocolloCod. clienteRagione socialeNome file
"; $SoggettoWork = str_replace("<>",date("H:i:s"),$Soggetto); $CorpoWork = str_replace("<>",date("H:i:s"),$CorpoOk)."
"."Sono stati generati i seguenti file:"."

".$Container."


".$CodaMsg; // 30/01/2023 :: Recupero indirizzi dei destinatari e ciclo per destinatari multipli $Query = "select Descrizione from TAB_VARI where Valore1 = 'saptransfer_send'"; $stmt = $db->prepare($Query); $stmt->execute(); $row = $stmt->fetch(); $dest = explode(";",$row[0]); try { $mail = new PHPMailer(true); $mail->CharSet = $ma->char; $mail->IsSMTP(); $mail->SMTPAuth = true; $mail->Username = $ma->user; $mail->Password = $ma->pass; $mail->SMTPSecure = $ma->secu; $mail->Host = $ma->host; $mail->Port = $ma->port; $mail->From = $ma->from; $mail->FromName = $ma->name; for ($y = 0; $y < count($dest); $y++) { if (strlen($dest[$y]) > 0) { $mail->AddAddress($dest[$y]); } } $mail->Subject = $SoggettoWork; $mail->IsHTML(true); $mail->Body = $CorpoWork; if(!$mail->Send()) { $CorpoWork = $CorpoWork."


".$CodaMsg; for ($y = 0; $y < count($dest); $y++) { if (strlen($dest[$y]) > 0) { $Query = "insert into MAILCONTAINER (IdGara,Indirizzo,Soggetto,Corpo,Operatore) values ('GAR/0000/0000','$dest[$y]','$SoggettoWork','$CorpoWork','system')"; $stmt = $db->prepare($Query); } } } $mail->clearAllRecipients(); } catch (Exception $e) { // 29/11/2022 :: Scrivo un record amministrativo di errore con il codice in Mailcontainer $CorpoWork = $CorpoWork."

"."Errore di invio: ".$mail->ErrorInfo."


".$CodaMsg; for ($y = 0; $y < count($dest); $y++) { if (strlen($dest[$y]) > 0) { $Query = "insert into MAILCONTAINER (IdGara,Indirizzo,Soggetto,Corpo,Operatore) values ('GAR/0000/0000','$dest[$y]','$SoggettoWork','$CorpoWork','system')"; $stmt = $db->prepare($Query); } } } } $db = null; ?>