gestione gare pubbliche
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

<?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"]);
}
});
}
}