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