Non puoi selezionare più di 25 argomenti
Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
1143 righe
58 KiB
1143 righe
58 KiB
<?php |
|
|
|
namespace App\Jobs\Preservation; |
|
|
|
use Exception; |
|
use Throwable; |
|
use App\Models\Main\Tenant; |
|
use Illuminate\Bus\Queueable; |
|
use App\Models\Tenant\Gare\Round; |
|
use Illuminate\Support\Facades\DB; |
|
use Illuminate\Support\Facades\Log; |
|
use Illuminate\Support\Facades\Mail; |
|
use Illuminate\Queue\SerializesModels; |
|
use Illuminate\Queue\InteractsWithQueue; |
|
use App\Jobs\Preservation\SendPackageJob; |
|
use App\Models\Tenant\Conservazione\File; |
|
use Illuminate\Contracts\Queue\ShouldQueue; |
|
use Illuminate\Foundation\Bus\Dispatchable; |
|
use App\Jobs\Preservation\MakeZipArchiveJob; |
|
use Facade\Ignition\Exceptions\InvalidConfig; |
|
use Illuminate\Contracts\Queue\ShouldBeUnique; |
|
use App\Models\Tenant\Conservazione\Conservazione; |
|
use PHPUnit\Framework\Constraint\IsTrue; |
|
|
|
$root = dirname(base_path()); |
|
include_once "{$root}/config.php"; |
|
|
|
class GetFilesJob implements ShouldQueue |
|
{ |
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; |
|
|
|
/** |
|
* The number of times the job may be attempted. |
|
* |
|
* @var int |
|
*/ |
|
public $tries = 5; |
|
|
|
/** |
|
* The maximum number of unhandled exceptions to allow before failing. |
|
* |
|
* @var int |
|
*/ |
|
public $maxExceptions = 5; |
|
|
|
/** |
|
* The number of seconds the job can run before timing out. |
|
* |
|
* @var int |
|
*/ |
|
public $timeout = 1800; |
|
|
|
/** |
|
* Indicate if the job should be marked as failed on timeout. |
|
* |
|
* @var bool |
|
*/ |
|
public $failOnTimeout = true; |
|
|
|
/** |
|
* Tenant's id |
|
* |
|
* @var Int |
|
*/ |
|
protected $tenant; |
|
|
|
/** |
|
* Package's id |
|
* |
|
* @var Int |
|
*/ |
|
protected $package; |
|
|
|
/** |
|
* Archive type |
|
* |
|
* @var Bool |
|
*/ |
|
protected $full; |
|
|
|
/** |
|
* Schedule next job? |
|
* |
|
* @var Bool |
|
*/ |
|
protected $schedule; |
|
|
|
/** |
|
* Archive ids |
|
* |
|
* @var Array |
|
*/ |
|
protected $packages_id; |
|
|
|
/** |
|
* OE List |
|
* |
|
* @var mixed |
|
*/ |
|
protected $oe; |
|
|
|
/** |
|
* Tenant info |
|
* |
|
* @var mixed |
|
*/ |
|
protected $ente; |
|
|
|
/** |
|
* Gara info |
|
* |
|
* @var mixed |
|
*/ |
|
protected $gara; |
|
|
|
|
|
/** |
|
* Create a new job instance. |
|
* |
|
* @return void |
|
*/ |
|
public function __construct(Int $tenant, Int $package, Bool $full = true, Bool $schedule = true) |
|
{ |
|
$this->full = $full; |
|
$this->tenant = $tenant; |
|
$this->package = $package; |
|
$this->schedule = $schedule; |
|
} |
|
|
|
/** |
|
* Format class parameters |
|
* |
|
* @param mixed $parameters |
|
* @return Array |
|
*/ |
|
public static function formatParameters(string ...$parameters) : Array |
|
{ |
|
return [(int) $parameters[0], (int) $parameters[1], isset($parameters[2]) ? (bool) $parameters[2] : true]; |
|
} |
|
|
|
/** |
|
* Execute the job. |
|
* |
|
* @return void |
|
*/ |
|
public function handle() |
|
{ |
|
global $pdo; |
|
|
|
if (!defined("__CMDS_JOB_EXEC")) { |
|
define("__CMDS_JOB_EXEC", TRUE); |
|
} |
|
|
|
$pdo->setConnessioneEnte($this->tenant); |
|
|
|
$limit = ini_get('memory_limit'); |
|
ini_set('memory_limit', 1024 * 1 . "M"); |
|
|
|
setup_db_connection($this->tenant); |
|
|
|
$package = Conservazione::find($this->package); |
|
if(! empty($package) && ! empty($package->codice) && $package->codice == $this->package) { |
|
|
|
if(! $this->full) { |
|
|
|
$this->packages_id = Conservazione::select('codice')->where('codice_elemento', $package->codice_elemento)->where('codice_ente', $package->codice_ente)->where('codice', '!=', $package->codice)->where('tipologia', $package->tipologia)->get()->pluck('codice'); |
|
|
|
} |
|
|
|
$tenant = Tenant::find($this->tenant); |
|
|
|
$ente = new \ente(); |
|
$ente->excludeConnector = true; |
|
$ente->init($tenant->dominio); |
|
if(empty($ente->codice)) { |
|
throw new InvalidConfig("Failed to initialize EnteClass with: {$tenant->dominio}"); |
|
} |
|
|
|
$_SESSION["ente"] = $ente; |
|
$this->ente = $ente->getInfo(); |
|
$this->ente = collect($this->ente)->only("codice", "codice_ipa", "dominio", "denominazione", "cf", "pec", "indirizzo", "citta", "provincia", "cap", "stato", "telefono")->toArray(); |
|
|
|
$_SESSION["utente"] = new \App\Classes\Misc\User; |
|
$_SESSION["utente"]->codice_ente = $_SESSION["ente"]->getInfo()["codice"]; |
|
|
|
switch($package->modulo) { |
|
case 'gare': |
|
$this->tender($package); |
|
break; |
|
case 'contratti': |
|
$this->deals($package); |
|
break; |
|
default: |
|
break; |
|
} |
|
|
|
} |
|
|
|
$package->stato = 5; |
|
if($package->items()->count() < 1) { |
|
$package->stato = 95; |
|
} |
|
|
|
$package->save(); |
|
|
|
if($package->stato == 5 && $this->schedule) { |
|
|
|
$delay = 0; |
|
if(! empty($package->timestamp_esecuzione)) { |
|
if (strtotime($package->timestamp_esecuzione) > strtotime('now')) { |
|
$delay = now()->addSeconds(strtotime($package->timestamp_esecuzione) - strtotime('now')); |
|
} |
|
} |
|
|
|
if($package->tipologia == "conservazione") { |
|
|
|
SendPackageJob::dispatch($this->tenant, $this->package) |
|
->onConnection("database") |
|
->onQueue("preservation") |
|
->delay($delay); |
|
|
|
} else { |
|
|
|
MakeZipArchiveJob::dispatch($this->tenant, $this->package) |
|
->onConnection("database") |
|
->onQueue("preservation"); |
|
|
|
} |
|
|
|
} |
|
|
|
ini_set('memory_limit', $limit); |
|
|
|
} |
|
|
|
/** |
|
* Get all file for deals |
|
* |
|
* @param mixed $package |
|
* @return void |
|
*/ |
|
private function deals(Conservazione $package) |
|
{ |
|
global $config, $pdo; |
|
|
|
$contratto = \stipula::init($package->codice_elemento); |
|
if(! empty($contratto)) { |
|
|
|
$cig = $contratto->info["cig"]; |
|
$cup = $contratto->info["cup"]; |
|
|
|
$this->setAttachments("contratti-public", $contratto->info["codice"], [ |
|
"oggetto_documento" => "Documento allegato al contatto", |
|
"codice_contratto" => $contratto->info["codice"], |
|
"autore" => $this->ente, |
|
"direzione" => "outgoing", |
|
"cig" => $cig, |
|
"cup" => $cup, |
|
"info" => [ |
|
"contratto" => $contratto->info |
|
] |
|
]); |
|
|
|
$this->setAttachments("contratti-reserved", $contratto->info["codice"], [ |
|
"oggetto_documento" => "Documento allegato al contatto", |
|
"codice_contratto" => $contratto->info["codice"], |
|
"autore" => $this->ente, |
|
"direzione" => "outgoing", |
|
"cig" => $cig, |
|
"cup" => $cup, |
|
"info" => [ |
|
"contratto" => $contratto->info |
|
] |
|
]); |
|
|
|
$comunicazioni = \Communicator::listInitiativeMessage("contratti", $package->codice_elemento); |
|
if(! empty($comunicazioni)) { |
|
$sth = $pdo->prepare("SELECT r_comunicazioni_utenti.codice_operatore, |
|
r_comunicazioni_utenti.codice AS protocollo_interno, |
|
r_comunicazioni_utenti.timestamp AS timestamp_interno, |
|
r_comunicazioni_utenti.protocollo, |
|
r_comunicazioni_utenti.data_protocollo, |
|
r_comunicazioni_utenti.identificativo_messaggio, |
|
r_comunicazioni_utenti.ricevute, |
|
r_comunicazioni_utenti.accettazione, |
|
r_comunicazioni_utenti.consegna, |
|
r_comunicazioni_utenti.mancata_consegna |
|
FROM r_comunicazioni_utenti |
|
WHERE r_comunicazioni_utenti.codice_comunicazione = :codice"); |
|
foreach($comunicazioni as $comunicazione) { |
|
|
|
$sth->bindValue(":codice",$comunicazione["codice"]); |
|
$sth->execute(); |
|
while($destinatario = $sth->fetch(\PDO::FETCH_ASSOC)) { |
|
|
|
$file = "{$config["mailFolder"]}/{$this->tenant}/{$destinatario["identificativo_messaggio"]}.eml"; |
|
if(file_exists($file)) { |
|
|
|
$insert = true; |
|
if(! $this->full && ! empty($this->packages_id)) { |
|
$check = File::select('codice')->where('codice_riferimento', $destinatario["protocollo_interno"])->where('tabella_riferimento', 'r_comunicazioni_utenti')->whereIn('codice_conservazione', $this->packages_id)->count(); |
|
if($check > 0) { |
|
$insert = false; |
|
} |
|
} |
|
|
|
if($insert) { |
|
File::updateOrCreate([ |
|
"codice_conservazione" => $this->package, |
|
"codice_riferimento" => $destinatario["protocollo_interno"], |
|
"tabella_riferimento" => "r_comunicazioni_utenti" |
|
], [ |
|
"stato" => 0, |
|
"metadati" => gzdeflate(base64_encode(json_encode([ |
|
"cig" => $cig, |
|
"cup" => $cup, |
|
"codice_contratto" => $package->codice_elemento, |
|
"codice_partecipante" => $destinatario["codice_operatore"], |
|
"nomeFile" => "{$destinatario["identificativo_messaggio"]}.eml", |
|
"path" => $file, |
|
"size" => filesize($file), |
|
"oggetto_documento" => "Comunicazione eml", |
|
"comunicazione" => [ |
|
"codice" => $comunicazione["codice"], |
|
"oggetto" => $comunicazione["oggetto"], |
|
"timestamp" => $comunicazione["timestamp"], |
|
], |
|
"destinatario" => [ |
|
"protocollo_interno" => $destinatario["protocollo_interno"], |
|
"timestamp_interno" => $destinatario["timestamp_interno"], |
|
"protocollo" => $destinatario["protocollo"], |
|
"data_protocollo" => $destinatario["data_protocollo"], |
|
"identificativo_messaggio" => $destinatario["identificativo_messaggio"], |
|
"accettazione" => $destinatario["accettazione"], |
|
"consegna" => $destinatario["consegna"], |
|
"mancata_consegna" => $destinatario["mancata_consegna"], |
|
], |
|
"direzione" => "outgoing", |
|
"autore" => $this->ente, |
|
"info" => [ |
|
"contratto" => $contratto->info, |
|
] |
|
]))), |
|
"timestamp_creazione" => now()->format('Y-m-d H:i:s'), |
|
"timestamp" => now()->format('Y-m-d H:i:s'), |
|
]); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
$integrazioni = $contratto->getManagerRichieste(); |
|
$richieste_integrazione = $integrazioni->getRichieste(); |
|
if(! empty($richieste_integrazione)) { |
|
|
|
foreach($richieste_integrazione as $integrazione) { |
|
|
|
$this->setAttachments("richieste", $integrazione["codice"], [ |
|
"oggetto_documento" => "Documento allegato a richiesta di integrazione", |
|
"codice_gara" => $package->codice_elemento, |
|
"richiesta" => [ |
|
"codice" => $integrazione["codice"], |
|
"titolo" => $integrazione["titolo"], |
|
"tipologia" => $integrazione["tipologia"], |
|
], |
|
"autore" => $this->ente, |
|
"direzione" => "outgoing", |
|
"cig" => $cig, |
|
"cup" => $cup, |
|
"info" => [ |
|
"gara" => $contratto->info, |
|
] |
|
]); |
|
|
|
$destinatari = $integrazioni->getOE($integrazione["codice"]); |
|
if(! empty($destinatari)) { |
|
|
|
foreach($destinatari as $destinatario) { |
|
|
|
$documento = $integrazioni->getContent($integrazione["codice"], $destinatario["codice"], false); |
|
if(! empty($documento["file"])) { |
|
|
|
$insert = true; |
|
if(! $this->full && ! empty($this->packages_id)) { |
|
$check = File::select('codice')->where('codice_riferimento', $documento["codice"])->where("tabella_riferimento", "r_richieste_oe")->whereIn('codice_conservazione', $this->packages_id)->count(); |
|
if($check > 0) { |
|
$insert = false; |
|
} |
|
} |
|
|
|
if($insert) { |
|
File::updateOrCreate([ |
|
"codice_conservazione" => $this->package, |
|
"codice_riferimento" => $documento["codice"], |
|
"tabella_riferimento" => "r_richieste_oe" |
|
], [ |
|
"stato" => 0, |
|
"metadati" => gzdeflate(base64_encode(json_encode([ |
|
"cig" => $cig, |
|
"cup" => $cup, |
|
"codice_contratto" => $package->codice_elemento, |
|
"codice_partecipante" => $documento["codice_operatore"], |
|
"codice_relazione" => $destinatario["codice"], |
|
"nomeFile" => $documento["nomeFile"], |
|
"direzione" => "incoming", |
|
"richiesta" => [ |
|
"codice" => $integrazione["codice"], |
|
"titolo" => $integrazione["titolo"], |
|
"tipologia" => $integrazione["tipologia"], |
|
], |
|
"autore" => $this->getOE($documento["codice_operatore"]), |
|
"oggetto_documento" => "Documento allegato a richiesta di integrazione", |
|
"info" => [ |
|
"contratto" => $contratto->info, |
|
] |
|
]))), |
|
"timestamp_creazione" => now()->format('Y-m-d H:i:s'), |
|
"timestamp" => now()->format('Y-m-d H:i:s'), |
|
]); |
|
} |
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
$contratto_sottoscritto = $contratto->getContrattoFinale(true); |
|
if(! empty($contratto_sottoscritto)) { |
|
|
|
$insert = true; |
|
if(! $this->full && ! empty($this->packages_id)) { |
|
$check = File::select('codice')->where('codice_riferimento', $contratto_sottoscritto["codice"])->where('tabella_riferimento', 'b_contratti_sottoscritti')->whereIn('codice_conservazione', $this->packages_id)->count(); |
|
if($check > 0) { |
|
$insert = false; |
|
} |
|
} |
|
|
|
if($insert) { |
|
File::updateOrCreate([ |
|
"codice_conservazione" => $this->package, |
|
"codice_riferimento" => $contratto_sottoscritto["codice"], |
|
"tabella_riferimento" => "b_contratti_sottoscritti" |
|
], [ |
|
"stato" => 0, |
|
"metadati" => gzdeflate(base64_encode(json_encode([ |
|
"cig" => $cig, |
|
"cup" => $cup, |
|
"codice_contratto" => $package->codice_elemento, |
|
"codice_contratto" => $contratto_sottoscritto["codice_contratto"], |
|
"codice_firmatario" => $contratto_sottoscritto["codice_firmatario"], |
|
"nomeFile" => $contratto_sottoscritto["name"], |
|
"direzione" => "incoming", |
|
"autore" => ($contratto_sottoscritto["codice_firmatario"] == 0) ? $this->ente : $this->getOE($contratto_sottoscritto["codice_firmatario"]), |
|
"oggetto_documento" => "Contratto sottoscritto", |
|
"info" => [ |
|
"contratto" => $contratto, |
|
] |
|
]))), |
|
"timestamp_creazione" => now()->format('Y-m-d H:i:s'), |
|
"timestamp" => now()->format('Y-m-d H:i:s'), |
|
]); |
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
/** |
|
* Get all file for tender |
|
* |
|
* @param mixed $package |
|
* @return void |
|
*/ |
|
private function tender(Conservazione $package) |
|
{ |
|
global $config, $pdo; |
|
// $pdo = new |
|
|
|
$rounds = Round::where('codice_gara', $package->codice_elemento)->get(); |
|
foreach($rounds as $round) { |
|
|
|
$this->gara = \gara::init($package->codice_elemento, $round->codice); |
|
$lotti = $this->gara->getLotti(); |
|
|
|
$cig = implode(";", array_column($lotti, "cig")); |
|
$cup = implode(";", array_column($lotti, "cup")); |
|
|
|
$chiarimenti = $this->gara->getChiarimenti(); |
|
if(! empty($chiarimenti)) { |
|
foreach($chiarimenti as $chiarimento) { |
|
$this->setAttachments("gare-quesiti", $chiarimento["codice"], [ |
|
"oggetto_documento" => "Documento allegato a richiesta di chiarimento", |
|
"codice_chiarimento" => $chiarimento["codice"], |
|
"autore" => $this->getOE($chiarimento["codice_richiedente"]), |
|
"direzione" => "incoming", |
|
"cig" => $cig, |
|
"cup" => $cup, |
|
"info" => [ |
|
"gara" => $this->gara->info, |
|
"round" => $round |
|
] |
|
]); |
|
$this->setAttachments("gare-risposte", $chiarimento["codice"], [ |
|
"oggetto_documento" => "Documento allegato a risposta di richiesta di chiarimento", |
|
"codice_chiarimento" => $chiarimento["codice"], |
|
"autore" => $this->ente, |
|
"cig" => $cig, |
|
"cup" => $cup, |
|
"info" => [ |
|
"gara" => $this->gara->info, |
|
"round" => $round |
|
] |
|
]); |
|
} |
|
} |
|
|
|
$sopralluoghi = $this->gara->getSopralluoghi(); |
|
if(! empty($sopralluoghi)) { |
|
foreach($sopralluoghi as $sopralluogo) { |
|
$this->setAttachments("gare-ric-sopr", $sopralluogo["codice"], [ |
|
"oggetto_documento" => "Documento allegato a richiesta di sopralluogo", |
|
"codice_sopralluogo" => $sopralluogo["codice"], |
|
"autore" => $this->getOE($sopralluogo["codice_richiedente"]), |
|
"direzione" => "incoming", |
|
"cig" => $cig, |
|
"cup" => $cup, |
|
"info" => [ |
|
"gara" => $this->gara->info, |
|
"round" => $round |
|
] |
|
]); |
|
$this->setAttachments("gare-sopralluogo", $sopralluogo["codice"], [ |
|
"oggetto_documento" => "Documento allegato a risposta di richiesta di sopralluogo", |
|
"codice_sopralluogo" => $sopralluogo["codice"], |
|
"autore" => $this->ente, |
|
"cig" => $cig, |
|
"cup" => $cup, |
|
"info" => [ |
|
"gara" => $this->gara->info, |
|
"round" => $round |
|
] |
|
]); |
|
} |
|
} |
|
|
|
$comunicazioni = \Communicator::listInitiativeMessage("gare", $package->codice_elemento); |
|
if(! empty($comunicazioni)) { |
|
$sth = $pdo->prepare("SELECT r_comunicazioni_utenti.codice_operatore, |
|
r_comunicazioni_utenti.codice AS protocollo_interno, |
|
r_comunicazioni_utenti.timestamp AS timestamp_interno, |
|
r_comunicazioni_utenti.protocollo, |
|
r_comunicazioni_utenti.data_protocollo, |
|
r_comunicazioni_utenti.identificativo_messaggio, |
|
r_comunicazioni_utenti.ricevute, |
|
r_comunicazioni_utenti.accettazione, |
|
r_comunicazioni_utenti.consegna, |
|
r_comunicazioni_utenti.mancata_consegna |
|
FROM r_comunicazioni_utenti |
|
WHERE r_comunicazioni_utenti.codice_comunicazione = :codice"); |
|
foreach($comunicazioni as $comunicazione) { |
|
|
|
$sth->bindValue(":codice",$comunicazione["codice"]); |
|
$sth->execute(); |
|
while($destinatario = $sth->fetch(\PDO::FETCH_ASSOC)) { |
|
|
|
$file = "{$config["mailFolder"]}/{$this->tenant}/{$destinatario["identificativo_messaggio"]}.eml"; |
|
if(file_exists($file)) { |
|
|
|
$insert = true; |
|
if(! $this->full && ! empty($this->packages_id)) { |
|
$check = File::select('codice')->where('codice_riferimento', $destinatario["protocollo_interno"])->where("tabella_riferimento", "r_comunicazioni_utenti")->whereIn('codice_conservazione', $this->packages_id)->count(); |
|
if($check > 0) { |
|
$insert = false; |
|
} |
|
} |
|
|
|
if($insert) { |
|
File::updateOrCreate([ |
|
"codice_conservazione" => $this->package, |
|
"codice_riferimento" => $destinatario["protocollo_interno"], |
|
"tabella_riferimento" => "r_comunicazioni_utenti" |
|
], [ |
|
"stato" => 0, |
|
"metadati" => gzdeflate(base64_encode(json_encode([ |
|
"cig" => $cig, |
|
"cup" => $cup, |
|
"codice_gara" => $package->codice_elemento, |
|
"codice_round" => $round["codice"], |
|
"codice_partecipante" => $destinatario["codice_operatore"], |
|
"nomeFile" => "{$destinatario["identificativo_messaggio"]}.eml", |
|
"path" => $file, |
|
"size" => filesize($file), |
|
"oggetto_documento" => "Comunicazione eml", |
|
"comunicazione" => [ |
|
"codice" => $comunicazione["codice"], |
|
"oggetto" => $comunicazione["oggetto"], |
|
"timestamp" => $comunicazione["timestamp"], |
|
], |
|
"destinatario" => [ |
|
"protocollo_interno" => $destinatario["protocollo_interno"], |
|
"timestamp_interno" => $destinatario["timestamp_interno"], |
|
"protocollo" => $destinatario["protocollo"], |
|
"data_protocollo" => $destinatario["data_protocollo"], |
|
"identificativo_messaggio" => $destinatario["identificativo_messaggio"], |
|
"accettazione" => $destinatario["accettazione"], |
|
"consegna" => $destinatario["consegna"], |
|
"mancata_consegna" => $destinatario["mancata_consegna"], |
|
], |
|
"direzione" => "incoming", |
|
"autore" => $this->ente, |
|
"info" => [ |
|
"gara" => $this->gara->info, |
|
"round" => $round, |
|
] |
|
]))), |
|
"timestamp_creazione" => now()->format('Y-m-d H:i:s'), |
|
"timestamp" => now()->format('Y-m-d H:i:s'), |
|
]); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
$this->setAttachments("gare-invitati", $round->codice, [ |
|
"oggetto_documento" => "Documento pubblici destinati agli invitati di gara", |
|
"autore" => $this->ente, |
|
"cig" => $cig, |
|
"cup" => $cup, |
|
"info" => [ |
|
"gara" => $this->gara->info, |
|
"round" => $round |
|
] |
|
]); |
|
|
|
$this->setAttachments("gare-accessoatti", $round->codice, [ |
|
"oggetto_documento" => "Documento accesso agli atti", |
|
"autore" => $this->ente, |
|
"cig" => $cig, |
|
"cup" => $cup, |
|
"info" => [ |
|
"gara" => $this->gara->info, |
|
"round" => $round |
|
] |
|
]); |
|
|
|
$this->setAttachments("gare-public", $round->codice, [ |
|
"oggetto_documento" => "Documento pubblico della procedura", |
|
"autore" => $this->ente, |
|
"cig" => $cig, |
|
"cup" => $cup, |
|
"info" => [ |
|
"gara" => $this->gara->info, |
|
"round" => $round |
|
] |
|
]); |
|
|
|
$this->setAttachments("gare-reserved", $round->codice, [ |
|
"oggetto_documento" => "Documento riservato della procedura", |
|
"autore" => $this->ente, |
|
"cig" => $cig, |
|
"cup" => $cup, |
|
"info" => [ |
|
"gara" => $this->gara->info, |
|
"round" => $round |
|
] |
|
]); |
|
|
|
foreach($lotti as $lotto) { |
|
|
|
if($this->gara->setLotto($lotto["codice"])) { |
|
|
|
$criteri = $this->gara->getAllCriteri(); |
|
if(! empty($criteri)) { |
|
foreach($criteri as $criterio) { |
|
if($criterio["tipologia"] == "Q") { |
|
$inputs = $this->gara->getFormCriterio($criterio["codice"]); |
|
if(! empty($inputs)) { |
|
foreach($inputs as $input) { |
|
if($input["tipo"] == "file") { |
|
$this->setAttachments("gare-form", $input["codice"], [ |
|
"oggetto_documento" => "Docuemnto di gara", |
|
"codice_criterio" => $criterio["codice"], |
|
"codice_input" => $input["codice"], |
|
"autore" => $this->ente, |
|
"cig" => $cig, |
|
"cup" => $cup, |
|
"info" => [ |
|
"gara" => $this->gara->info, |
|
"round" => $round |
|
] |
|
]); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
$richieste = $this->gara->getRichieste(); |
|
if(! empty($richieste)) { |
|
foreach($richieste as $richiesta) { |
|
$this->setAttachments("gare-richiesta", $richiesta["codice"], [ |
|
"oggetto_documento" => "Documento di gara", |
|
"codice_richiesta" => $richiesta["codice"], |
|
"autore" => $this->ente, |
|
"cig" => $cig, |
|
"cup" => $cup, |
|
"info" => [ |
|
"gara" => $this->gara->info, |
|
"round" => $round |
|
] |
|
]); |
|
|
|
$partecipanti = $this->gara->getPartecipanti(); |
|
if(! empty($partecipanti)) { |
|
|
|
foreach($partecipanti as $partecipante) { |
|
|
|
$busta = $this->gara->getBusta($partecipante["codice"], $richiesta["codice"]); |
|
if(! empty($busta) && $busta["open"] == "S") { |
|
|
|
$insert = true; |
|
if(! $this->full && ! empty($this->packages_id)) { |
|
$check = File::select('codice')->where('codice_riferimento', $busta["codice"])->whereIn('codice_conservazione', $this->packages_id)->where("tabella_riferimento", "b_gare_buste")->count(); |
|
if($check > 0) { |
|
$insert = false; |
|
} |
|
} |
|
|
|
if($insert) { |
|
File::updateOrCreate([ |
|
"codice_conservazione" => $this->package, |
|
"codice_riferimento" => $busta["codice"], |
|
"tabella_riferimento" => "b_gare_buste" |
|
], [ |
|
"stato" => 0, |
|
"metadati" => gzdeflate(base64_encode(json_encode([ |
|
"oggetto_documento" => "Documento di offerta dell'operatore economico", |
|
"codice_gara" => $package->codice_elemento, |
|
"codice_lotto" => $lotto["codice"], |
|
"codice_round" => $round["codice"], |
|
"codice_partecipante" => $busta["codice_partecipante"], |
|
"nomeFile" => $busta["nomeFile"], |
|
"size" => filesize($busta["path"]), |
|
"direzione" => "incoming", |
|
"richiesta" => [ |
|
"codice" => $richiesta["codice"], |
|
"titolo" => $richiesta["titolo"], |
|
"busta" => $richiesta["busta"], |
|
], |
|
"autore" => $this->getOE($partecipante["codice_operatore"]), |
|
"cig" => $lotto["cig"], |
|
"cup" => $lotto["cup"], |
|
"info" => [ |
|
"gara" => $this->gara->info, |
|
"round" => $round, |
|
"lotto" => $lotto |
|
] |
|
]))), |
|
"timestamp_creazione" => now()->format('Y-m-d H:i:s'), |
|
"timestamp" => now()->format('Y-m-d H:i:s'), |
|
]); |
|
} |
|
|
|
$busta_secretata = $this->gara->getBustaSecretata($partecipante["codice"], $richiesta["codice"], "busta"); |
|
if(! empty($busta_secretata) && $busta_secretata["open"] == "S") { |
|
|
|
$insert = true; |
|
if(! $this->full && ! empty($this->packages_id)) { |
|
$check = File::select('codice')->where('codice_riferimento', $busta_secretata["codice"])->whereIn('codice_conservazione', $this->packages_id)->where("tabella_riferimento", "b_gare_buste")->count(); |
|
if($check > 0) { |
|
$insert = false; |
|
} |
|
} |
|
|
|
if($insert) { |
|
File::updateOrCreate([ |
|
"codice_conservazione" => $this->package, |
|
"codice_riferimento" => $busta_secretata["codice"], |
|
"tabella_riferimento" => "b_gare_buste" |
|
], [ |
|
"stato" => 0, |
|
"metadati" => gzdeflate(base64_encode(json_encode([ |
|
"oggetto_documento" => "Documento di offerta dell'operatore economico", |
|
"codice_gara" => $package->codice_elemento, |
|
"codice_lotto" => $lotto["codice"], |
|
"codice_round" => $round["codice"], |
|
"codice_partecipante" => $busta_secretata["codice_partecipante"], |
|
"nomeFile" => $busta_secretata["nomeFile"], |
|
"size" => filesize($busta_secretata["path"]), |
|
"direzione" => "incoming", |
|
"richiesta" => [ |
|
"codice" => $richiesta["codice"], |
|
"titolo" => $richiesta["titolo"], |
|
"busta" => $richiesta["busta"], |
|
], |
|
"autore" => $this->getOE($partecipante["codice_operatore"]), |
|
"cig" => $lotto["cig"], |
|
"cup" => $lotto["cup"], |
|
"info" => [ |
|
"gara" => $this->gara->info, |
|
"round" => $round, |
|
"lotto" => $lotto |
|
] |
|
]))), |
|
"timestamp_creazione" => now()->format('Y-m-d H:i:s'), |
|
"timestamp" => now()->format('Y-m-d H:i:s'), |
|
]); |
|
} |
|
|
|
} |
|
} |
|
|
|
$emendamento = $this->gara->getEmendamento($partecipante["codice"], $richiesta["codice"]); |
|
if(! empty($emendamento) && $emendamento["open"] == "S") { |
|
|
|
$insert = true; |
|
if(! $this->full && ! empty($this->packages_id)) { |
|
$check = File::select('codice')->where('codice_riferimento', $emendamento["codice"])->whereIn('codice_conservazione', $this->packages_id)->where("tabella_riferimento", "b_gare_buste")->count(); |
|
if($check > 0) { |
|
$insert = false; |
|
} |
|
} |
|
|
|
if($insert) { |
|
File::updateOrCreate([ |
|
"codice_conservazione" => $this->package, |
|
"codice_riferimento" => $emendamento["codice"], |
|
"tabella_riferimento" => "b_gare_buste" |
|
], [ |
|
"stato" => 0, |
|
"metadati" => gzdeflate(base64_encode(json_encode([ |
|
"oggetto_documento" => "Documento di offerta dell'operatore economico", |
|
"codice_gara" => $package->codice_elemento, |
|
"codice_lotto" => $lotto["codice"], |
|
"codice_round" => $round["codice"], |
|
"codice_partecipante" => $emendamento["codice_partecipante"], |
|
"nomeFile" => $emendamento["nomeFile"], |
|
"size" => filesize($emendamento["path"]), |
|
"direzione" => "incoming", |
|
"richiesta" => [ |
|
"codice" => $richiesta["codice"], |
|
"titolo" => $richiesta["titolo"], |
|
"busta" => $richiesta["busta"], |
|
], |
|
"autore" => $this->getOE($partecipante["codice_operatore"]), |
|
"cig" => $lotto["cig"], |
|
"cup" => $lotto["cup"], |
|
"info" => [ |
|
"gara" => $this->gara->info, |
|
"round" => $round, |
|
"lotto" => $lotto |
|
] |
|
]))), |
|
"timestamp_creazione" => now()->format('Y-m-d H:i:s'), |
|
"timestamp" => now()->format('Y-m-d H:i:s'), |
|
]); |
|
} |
|
|
|
$emendamento_secretato = $this->gara->getBustaSecretata($partecipante["codice"], $richiesta["codice"], "emendamento"); |
|
if(! empty($emendamento_secretato) && $emendamento_secretato["open"] == "S") { |
|
|
|
$insert = true; |
|
if(! $this->full && ! empty($this->packages_id)) { |
|
$check = File::select('codice')->where('codice_riferimento', $emendamento_secretato["codice"])->whereIn('codice_conservazione', $this->packages_id)->where("tabella_riferimento", "b_gare_buste")->count(); |
|
if($check > 0) { |
|
$insert = false; |
|
} |
|
} |
|
|
|
if($insert) { |
|
File::updateOrCreate([ |
|
"codice_conservazione" => $this->package, |
|
"codice_riferimento" => $emendamento_secretato["codice"], |
|
"tabella_riferimento" => "b_gare_buste" |
|
], [ |
|
"stato" => 0, |
|
"metadati" => gzdeflate(base64_encode(json_encode([ |
|
"oggetto_documento" => "Documento di offerta dell'operatore economico", |
|
"codice_gara" => $package->codice_elemento, |
|
"codice_lotto" => $lotto["codice"], |
|
"codice_round" => $round["codice"], |
|
"codice_partecipante" => $emendamento_secretato["codice_partecipante"], |
|
"nomeFile" => $emendamento_secretato["nomeFile"], |
|
"size" => filesize($emendamento_secretato["path"]), |
|
"direzione" => "incoming", |
|
"richiesta" => [ |
|
"codice" => $richiesta["codice"], |
|
"titolo" => $richiesta["titolo"], |
|
"busta" => $richiesta["busta"], |
|
], |
|
"autore" => $this->getOE($partecipante["codice_operatore"]), |
|
"cig" => $lotto["cig"], |
|
"cup" => $lotto["cup"], |
|
"info" => [ |
|
"gara" => $this->gara->info, |
|
"round" => $round, |
|
"lotto" => $lotto |
|
] |
|
]))), |
|
"timestamp_creazione" => now()->format('Y-m-d H:i:s'), |
|
"timestamp" => now()->format('Y-m-d H:i:s'), |
|
]); |
|
} |
|
|
|
} |
|
} |
|
|
|
} |
|
} |
|
|
|
} |
|
} |
|
|
|
$integrazioni = $this->gara->getManagerRichieste(); |
|
$richieste_integrazione = $integrazioni->getRichieste(); |
|
if(! empty($richieste_integrazione)) { |
|
|
|
foreach($richieste_integrazione as $integrazione) { |
|
|
|
$this->setAttachments("richieste", $integrazione["codice"], [ |
|
"oggetto_documento" => "Documento allegato a richiesta di integrazione", |
|
"codice_gara" => $package->codice_elemento, |
|
"codice_lotto" => $integrazione["sub"] ?? 0, |
|
"codice_round" => $round["codice"], |
|
"richiesta" => [ |
|
"codice" => $integrazione["codice"], |
|
"titolo" => $integrazione["titolo"], |
|
"tipologia" => $integrazione["tipologia"], |
|
], |
|
"autore" => $this->ente, |
|
"cig" => $cig, |
|
"cup" => $cup, |
|
"info" => [ |
|
"gara" => $this->gara->info, |
|
"round" => $round, |
|
] |
|
]); |
|
$destinatari = $integrazioni->getOE($integrazione["codice"]); |
|
if(! empty($destinatari)) { |
|
|
|
foreach($destinatari as $destinatario) { |
|
|
|
$documento = $integrazioni->getContent($integrazione["codice"], $destinatario["codice"], false); |
|
if(! empty($documento["file"])) { |
|
|
|
$insert = true; |
|
if(! $this->full && ! empty($this->packages_id)) { |
|
$check = File::select('codice')->where('codice_riferimento', $documento["codice"])->where('tabella_riferimento', 'r_richieste_oe')->whereIn('codice_conservazione', $this->packages_id)->count(); |
|
if($check > 0) { |
|
$insert = false; |
|
} |
|
} |
|
|
|
if($insert) { |
|
File::updateOrCreate([ |
|
"codice_conservazione" => $this->package, |
|
"codice_riferimento" => $documento["codice"], |
|
"tabella_riferimento" => "r_richieste_oe" |
|
], [ |
|
"stato" => 0, |
|
"metadati" => gzdeflate(base64_encode(json_encode([ |
|
"cig" => $cig, |
|
"cup" => $cup, |
|
"codice_gara" => $package->codice_elemento, |
|
"codice_lotto" => $integrazione["sub"] ?? 0, |
|
"codice_round" => $round["codice"], |
|
"codice_partecipante" => $documento["codice_operatore"], |
|
"codice_relazione" => $destinatario["codice"], |
|
"nomeFile" => $documento["nomeFile"], |
|
"direzione" => "incoming", |
|
"richiesta" => [ |
|
"codice" => $integrazione["codice"], |
|
"titolo" => $integrazione["titolo"], |
|
"tipologia" => $integrazione["tipologia"], |
|
], |
|
"autore" => $this->getOE($documento["codice_operatore"]), |
|
"oggetto_documento" => "Documento allegato a richiesta di integrazione", |
|
"info" => [ |
|
"gara" => $this->gara->info, |
|
"round" => $round, |
|
] |
|
]))), |
|
"timestamp_creazione" => now()->format('Y-m-d H:i:s'), |
|
"timestamp" => now()->format('Y-m-d H:i:s'), |
|
]); |
|
} |
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
$this->setAttachments("gare-accessoatti-lotto", $lotto["codice"], [ |
|
"oggetto_documento" => "Documento riservato della procedura", |
|
"autore" => $this->ente, |
|
"cig" => $cig, |
|
"cup" => $cup, |
|
"info" => [ |
|
"gara" => $this->gara->info, |
|
"round" => $round, |
|
"lotto" => $lotto, |
|
] |
|
]); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
/** |
|
* Get OE Info |
|
* |
|
* @param mixed $codice |
|
* @return void |
|
*/ |
|
private function getOE(Int $codice) |
|
{ |
|
if(isset($this->oe[$codice])) { |
|
|
|
return $this->oe[$codice]; |
|
|
|
} |
|
|
|
$this->oe[$codice] = \oeManager::getOE($codice); |
|
return $this->oe[$codice]; |
|
} |
|
|
|
/** |
|
* Prepare metadata for b_filesmanager record |
|
* |
|
* @param mixed $source_type |
|
* @param mixed $source_id |
|
* @param mixed $extra |
|
* @return void |
|
*/ |
|
private function setAttachments(String $source_type, Int $source_id, Array $extra = []) |
|
{ |
|
global $config, $pdo; |
|
$files = \filesManager::listFiles($source_id, $source_type); |
|
|
|
if(! empty($files)) { |
|
|
|
$files = collect($files); |
|
$files->transform(function($item, $key) use ($extra, $source_type) { |
|
return [ |
|
"codice_conservazione" => $this->package, |
|
"codice_riferimento" => $item["codice"], |
|
"tabella_riferimento" => "b_filemanager", |
|
"stato" => 0, |
|
"metadati" => gzdeflate(base64_encode(json_encode(array_merge([ |
|
"nomeFile" => $item["name"], |
|
"titolo" => $item["titolo"], |
|
"source_id" => $item["sourceID"], |
|
"source_type" => $item["sourceType"], |
|
"size" => $item["size"], |
|
"mime" => $item["mime"], |
|
"direzione" => $extra["direzione"] ?? "outgoing", |
|
], $extra)))), |
|
"timestamp_creazione" => now()->format('Y-m-d H:i:s'), |
|
"timestamp" => now()->format('Y-m-d H:i:s'), |
|
]; |
|
}); |
|
|
|
if(! $this->full && ! empty($this->packages_id)) { |
|
|
|
foreach ($files as $index => $file) { |
|
|
|
$check = File::select('codice')->where('codice_riferimento', $file["codice_riferimento"])->where("tabella_riferimento", "b_filemanager")->whereIn('codice_conservazione', $this->packages_id)->count(); |
|
if($check > 0) { |
|
|
|
$files->forget($index); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if(! empty($files)) { |
|
File::upsert($files->toArray(), ["codice_conservazione", "codice_riferimento", "tabella_riferimento"], ["timestamp", "metadati"]); |
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
/** |
|
* Handle a job failure. |
|
* |
|
* @param \Throwable $exception |
|
* @return void |
|
*/ |
|
public function failed(Throwable $exception) |
|
{ |
|
Log::emergency($exception); |
|
dump($exception->getMessage()); |
|
return; |
|
|
|
$config = config("json", null); |
|
$alerts = $config["alerts"]; |
|
|
|
config([ |
|
"mail.mailers.smtp.host" => $alerts["config"]["smtp"], |
|
"mail.mailers.smtp.port" => $alerts["config"]["port"], |
|
"mail.mailers.smtp.encryption" => "ssl", |
|
"mail.mailers.smtp.username" => $alerts["config"]["username"], |
|
"mail.mailers.smtp.password" => $alerts["config"]["password"], |
|
]); |
|
|
|
$message = "Errore durante il recupero dei file del pacchetto di conservazione #{$this->package} dell'ente #{$this->tenant} (GetFilesJob.php)" . PHP_EOL; |
|
$message .= $exception->getMessage(); |
|
|
|
Mail::raw($message, function ($message) use ($alerts, $config) { |
|
|
|
$message->priority(3); |
|
$message->subject("{$config["nome_sito"]}: verifica modulo conservazione sostitutiva."); |
|
if(! empty($alerts["from"]["email"])) { $message->from($alerts["from"]["email"], $alerts["from"]["name"]); } |
|
if(! empty($alerts["reply"]["email"])) { $message->replyTo($alerts["reply"]["email"], $alerts["reply"]["name"]); } |
|
|
|
foreach ($alerts["to"] as $address) { |
|
$message->to($address["email"], $address["name"]); |
|
} |
|
|
|
}); |
|
} |
|
|
|
}
|
|
|