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.
373 righe
13 KiB
373 righe
13 KiB
<?php |
|
// Boot |
|
$configPath = substr(__DIR__, 0, strpos(__DIR__, "/public_html")) . "/config.php"; |
|
include_once($configPath); |
|
|
|
// Modulo corrente |
|
$modulo = "npa"; |
|
// Modulo collegato |
|
$modulo_riferimento = !empty($_GET["modulo_riferimento"]) ? $_GET["modulo_riferimento"] : null; |
|
// Codice del modulo collegato |
|
$id_riferimento = !empty($_GET["id_riferimento"]) ? (int) $_GET["id_riferimento"] : null; |
|
// Codice round del modulo collegato |
|
$codice_round = !empty($_GET["codice_round"]) ? (int) $_GET["codice_round"] : null; |
|
// Codice scheda |
|
$tipo_scheda = $_GET["scheda"] ?? null; |
|
// Cerchiamo i metadata di questa scheda |
|
$metadata = NuovaPiattaformaAppalti::getCardsMetadata()[$tipo_scheda] ?? []; |
|
if(empty($metadata)) { die_forbidden(); } |
|
|
|
// Codice lotto |
|
$codice_lotto = isset($_GET["codice_lotto"]) ? intval($_GET["codice_lotto"]) : null; |
|
|
|
// Determina se la creazione è forzata |
|
$force_create = false; |
|
|
|
$codice = intval($_GET["codice"] ?? 0); |
|
|
|
$sdk_version = NuovaPiattaformaAppalti::AUTOMATICALLY_GET_SDK_VERSION; |
|
// Se il codice è 0 |
|
if($codice <= 0) { |
|
// Le nuove schede vanno generate con il nuovo SDK |
|
$sdk_version = NuovaPiattaformaAppalti::LATEST_SDK_VERSION; |
|
// Dobbiamo essere collegati a qualcosa, altrimenti non possiamo ritrovare le info |
|
if($modulo_riferimento == null || $id_riferimento == null) { |
|
die_forbidden(); |
|
} |
|
|
|
// Verifichiamo che sia multipla |
|
if($metadata["multipla"] ?? false) { |
|
// Se è multipla, dobbiamo crearne una nuova |
|
$force_create = true; |
|
} else { |
|
$criteri_ricerca = [ |
|
"id_scheda" => $tipo_scheda, |
|
"modulo_riferimento" => $modulo_riferimento, |
|
"id_riferimento" => $id_riferimento, |
|
"codice_lotto" => $codice_lotto ?? 0, |
|
]; |
|
// Se non lo è, dobbiamo verificare che ne esista già una |
|
$scheda = NuovaPiattaformaAppalti::fetchSchede(["s.codice"], $criteri_ricerca, true, false); |
|
// Se non esiste la dobbiamo creare |
|
if(empty($scheda)) { |
|
$force_create = true; |
|
// Se invece esiste carichiamo proprio lei |
|
} else { |
|
$codice = intval($scheda["codice"]); |
|
parse_str($_SERVER['QUERY_STRING'], $query); |
|
$query["codice"] = $codice; |
|
$query = http_build_query($query); |
|
$url = "/backend/npa/edit.php?{$query}"; |
|
die("<meta http-equiv='refresh' content='0;URL={$url}'>"); |
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
try { |
|
$npa = NuovaPiattaformaAppalti::init(null, $codice, $tipo_scheda, $modulo_riferimento, $id_riferimento, $sdk_version); |
|
} catch(Exception $e) { |
|
if($e->getCode() == 999) { |
|
die_forbidden(); |
|
} |
|
} |
|
|
|
if(!is_a($npa, "NuovaPiattaformaAppalti")) { |
|
die_forbidden("/"); |
|
} |
|
if (!empty($npa->fascicolo["codice"])) { |
|
|
|
$modulo_riferimento = $npa->fascicolo["modulo_riferimento"]; |
|
$id_riferimento = $npa->fascicolo["id_riferimento"]; |
|
|
|
} |
|
|
|
// Verifica di integrità |
|
if (empty($npa) || empty($modulo_riferimento) || !in_array($modulo_riferimento, NuovaPiattaformaAppalti::MODULI_COLLEGATI) || empty($id_riferimento) || empty($_SESSION["utente"])) { |
|
die_forbidden(); |
|
} |
|
|
|
// Verifica permessi |
|
if (!$_SESSION["utente"]->permission($modulo_riferimento, $id_riferimento) || !$_SESSION["utente"]->permission("npa", $codice ?? null)) { |
|
die_forbidden(); |
|
} |
|
|
|
// Verifica blocco |
|
$lock = $npa->checkLock(); |
|
|
|
// Verifica associazione ad un lotto |
|
if ($npa->metadataSchede[$npa->scheda["id_scheda"]]["lotto"]) { |
|
|
|
if (empty($codice_lotto)) { |
|
die_forbidden(); |
|
} |
|
$npa->setLotto($codice_lotto); |
|
} |
|
|
|
if(!empty($npa->scheda["codice_lotto"])) |
|
$codice_lotto = $npa->scheda["codice_lotto"]; |
|
|
|
|
|
|
|
if ($force_create) { |
|
|
|
$saveData = $npa->scheda; |
|
$saveData["bozza"] = 1; |
|
$saveData["codice_ente"] = $npa->oggetto->info["codice_ente"]; |
|
if (!empty($codice_lotto)) { |
|
$saveData["codice_lotto"] = $codice_lotto; |
|
} |
|
$saveData["modulo_riferimento"] = $modulo_riferimento; |
|
$saveData["id_riferimento"] = $id_riferimento; |
|
$saveData["round_riferimento"] = $codice_round; |
|
if (!empty($codice_rettifica)) { |
|
$saveData["codice_rettifica"] = $codice_rettifica; |
|
} |
|
if (!empty($codice_modifica)) { |
|
$saveData["codice_modifica"] = $codice_modifica; |
|
} |
|
$saveData["npa"] = []; |
|
|
|
$result = $npa->save($saveData); |
|
|
|
if (!empty($result["codice"])) { |
|
$codice = $result["codice"]; |
|
parse_str($_SERVER['QUERY_STRING'], $query); |
|
$query["codice"] = $codice; |
|
$query = http_build_query($query); |
|
$url = "/backend/npa/edit.php?{$query}"; |
|
die("<meta http-equiv='refresh' content='0;URL={$url}'>"); |
|
} |
|
die_forbidden(); |
|
} |
|
|
|
|
|
|
|
$required_js[] = "/src/js/extra/select2.js"; |
|
|
|
$required_css[] = "/src/css/extra/select2.css"; |
|
$required_css[] = "/src/css/extra/select2-bootstrap.css"; |
|
|
|
$query = []; |
|
$query["codice"] = $npa->scheda["codice"]; |
|
$query["scheda"] = $npa->scheda["id_scheda"]; |
|
|
|
// Costruzione breadcrumb |
|
$breadcrumb = []; |
|
if (!empty($npa->fascicolo["modulo_riferimento"]) && !empty($npa->fascicolo["id_riferimento"])) { |
|
|
|
$breadcrumb["/{$npa->fascicolo["modulo_riferimento"]}"] = Modulo::getInfo($npa->fascicolo["modulo_riferimento"])["titolo"]; |
|
$breadcrumb["/{$npa->fascicolo["modulo_riferimento"]}/panel.php?codice={$npa->fascicolo["id_riferimento"]}"] = __("Pannello"); |
|
$breadcrumb["/{$npa->fascicolo["modulo_riferimento"]}/npa/index.php?codice={$npa->fascicolo["id_riferimento"]}"] = __("ANAC"); |
|
|
|
if (!empty($codice_lotto)) { |
|
$breadcrumb["/npa/lotti/panel.php?codice_lotto={$codice_lotto}&codice_fascicolo={$npa->fascicolo["codice"]}"] = "LOTTO #{$codice_lotto}"; |
|
} |
|
|
|
$query["modulo"] = $npa->fascicolo["modulo_riferimento"]; |
|
$query["id_riferimento"] = $npa->fascicolo["id_riferimento"]; |
|
} |
|
|
|
|
|
$query = http_build_query($query); |
|
$breadcrumb[] = __("Scheda ") . str_replace("_", ".", $npa->scheda["id_scheda"]); |
|
|
|
//Istazione l'alertManager |
|
$alertManager = new alertManager("npa-{$npa->fascicolo["codice"]}"); |
|
|
|
|
|
// Tasti navigazione |
|
ob_start(); |
|
include_once "./inc/components/navigation_buttons.php"; |
|
$navigation_buttons = ob_get_clean(); |
|
$small_navigation_buttons = str_replace('class="nav-text ml-2"', 'style="display:none;"', $navigation_buttons); |
|
|
|
include_once $beRoot . "/layout/top.php"; |
|
include_once "./inc/components/service_status.php"; |
|
?> |
|
<div id="npa-big-nav-placeholder"> |
|
<div class="row"> |
|
<div class="col flex-grow-1"> |
|
<div class="pt-5 pb-3"> |
|
<div class="row"> |
|
<div class="col-12"> |
|
<h2> |
|
<?= Modulo::header($radice) ?> |
|
</h2> |
|
<hr> |
|
<h3><?= str_replace("_", ".", $npa->scheda["id_scheda"]) . ") {$npa->metadataSchede[$npa->scheda["id_scheda"]]["titolo"]}" ?></h3> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
<div class="col flex-grow-0 align-self-center"> |
|
<div class="row"> |
|
<div id="npa-big-nav" class="col-12 px-4 d-flex justify-content-end text-nowrap"> |
|
<?= $navigation_buttons; ?> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
<style> |
|
.npa-tabs.nav-tabs { |
|
position: sticky; |
|
top: 0; |
|
padding-top: 0.33em; |
|
flex-wrap: nowrap; |
|
overflow-x: auto; |
|
overflow-y: hidden; |
|
z-index: 999; |
|
background: var(--white); |
|
} |
|
.npa-tabs .nav-item { |
|
white-space: pre; |
|
} |
|
</style> |
|
|
|
<?php include_once "./inc/components/timeline.php"; ?> |
|
<?php include_once "./inc/components/suggestions.php"; ?> |
|
|
|
|
|
</div> |
|
|
|
<? |
|
|
|
$npa->getSuggestions(); |
|
|
|
if(!empty($npa->scheda["codice_rettifica"] || !empty($npa->scheda["codice_modifica"]))) { |
|
$npa->locked_fields[] = "anacForm.stazioniAppaltanti.*.codiceFiscale"; |
|
$npa->locked_fields[] = "anacForm.stazioniAppaltanti.*.codiceCentroCosto"; |
|
$npa->locked_fields[] = "anacForm.stazioniAppaltanti.*.codiceAusa"; |
|
$npa->locked_fields[] = "anacForm.stazioniAppaltanti.*.funzioniSvolte.*.codice"; |
|
$npa->locked_fields[] = "anacForm.stazioniAppaltanti.*.saTitolare"; |
|
} |
|
|
|
if (!$lock) { |
|
?> |
|
<form id="npa-form" rel="validate" method="post" action="ajax/save.php"> |
|
<input type="hidden" id="bozza-input" name="bozza" value="0"> |
|
<input type="hidden" name="token" value="<?= tokenGen() ?>"> |
|
<input type="hidden" name="codice" value="<?= $npa->scheda["codice"] ?>"> |
|
<input type="hidden" name="id_scheda" value="<?= $npa->scheda["id_scheda"] ?>"> |
|
<input type="hidden" name="codice_ente" value="<?= $npa->oggetto->info["codice_ente"] ?>"> |
|
<? if (!empty($codice_lotto)) { ?><input type="hidden" name="codice_lotto" value="<?= $codice_lotto ?>"><? } ?> |
|
<input type="hidden" name="modulo_riferimento" value="<?= $modulo_riferimento ?>"> |
|
<input type="hidden" name="id_riferimento" value="<?= $id_riferimento ?>"> |
|
<input type="hidden" name="round_riferimento" value="<?= $codice_round ?>"> |
|
<?php if(!empty($codice_rettifica) ) : ?> |
|
<input type='hidden' name='codice_rettifica' value="<?= $codice_rettifica ?>"> |
|
<?php endif; ?> |
|
<? |
|
} |
|
|
|
|
|
?> |
|
|
|
|
|
|
|
<div class="row"> |
|
<div class="col-12 col-md-3 order-2" id="guue-commands"> |
|
<div class="row"> |
|
<div class="col-sm-12"> |
|
<div class="ml-1 mb-3 justify-content-center" id="npa-small-nav" style="transition: height 0.25s ease-out, opacity 0.15s ease-out; display: none;"> |
|
<?= $small_navigation_buttons; ?> |
|
</div> |
|
</div> |
|
<div id="npa-checklist" class="col-sm-12 mb-3"> |
|
<?php if(!empty($npa->check)): ?> |
|
<?php if($npa->check["espd"]["required"]): ?> |
|
<?php |
|
$espd_url = "/backend/{$npa->fascicolo["modulo_riferimento"]}/dgue/index.php?codice={$npa->oggetto->info["codice"]}"; |
|
if(isset($npa->oggetto->round["codice"])) { |
|
$espd_url .= "&codice_round={$npa->oggetto->round["codice"]}"; |
|
} |
|
$_ready = $npa->check["espd"]["ready"]; |
|
?> |
|
<a href="<?= $espd_url ?>" class="btn btn-block text-left my-1 btn-<?= $_ready ? "success" : "danger" ?>"> |
|
<i class='fa fa-<?= $_ready ? "check" : "exclamation-triangle" ?> mr-2'></i> |
|
Richiesta DGUE <?= $_ready? "Presente" : "Necessaria" ?> |
|
</a> |
|
<?php endif; ?> |
|
<?php if($npa->check["eform"]["required"]): ?> |
|
<?php |
|
$_color = "danger"; |
|
$_ready = $npa->check["eform"]["ready"]; |
|
if($_ready) { |
|
$_ready_for_transmission = $npa->check["eform"]["ready_for_transmission"]; |
|
$_color = $_ready_for_transmission ? "success" : "warning"; |
|
|
|
/** |
|
* @var TedEsender |
|
*/ |
|
$ted = $npa->check["eform"]["ted"] ?? null; |
|
if($ted) { |
|
$_chosen = $ted->info["codice"]; |
|
$_chosen_id = $ted->info["form"]; |
|
} |
|
} |
|
$available = $npa->fetchCompatibleGUUECards(true, true); |
|
?> |
|
<a onclick="showModalWithURL('/backend/npa/ajax/scelta_guue.php?codice=<?= $npa->scheda['codice'] ?>')" class="btn btn-block text-left my-1 btn-<?= $_color ?>"> |
|
<i class='fa fa-<?= $_ready ? "check" : "exclamation-triangle" ?> mr-2'></i> |
|
Scheda GUUE <?= $_ready? "{$_chosen_id} Presente (n°{$_chosen})" : "Necessaria" ?> |
|
<?php if(!$_ready): ?> |
|
- <?= count($available) ?> disponibil<?= count($available) === 1 ? "e" : "i" ?> |
|
<?php endif; ?> |
|
<?php if($_ready && !$_ready_for_transmission): ?> |
|
<p class="mb-0"> |
|
<i class="fa fa-exclamation-circle mr-2"></i> La scheda GUUE selezionata è in bozza. Confermala prima di trasmettere. |
|
</p> |
|
<?php endif; ?> |
|
</a> |
|
<?php endif; ?> |
|
<?php endif; ?> |
|
</div> |
|
<div id="guue-sections" class="col-sm-12"> |
|
<div class="list-group"> |
|
</div> |
|
</div> |
|
<div class="col-sm-12 mt-3"> |
|
<div class="alert alert-success" id="npa-autosave-status" role="alert"> |
|
Placeholder |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
<div class="col-12 col-md-9 order-1"> |
|
|
|
<div class="alert alert-info py-3 d-none" role="alert" id="npa-empty-form"> |
|
|
|
<h5><span class="fa fa-info-circle mr-1"></span> <?= __("Questa scheda non contiene campi da compilare dall'utente.") ?></h5> |
|
<p class="mb-0"><?= __("Se hai già compilato le eventuali schede GUUE necessarie, puoi procedere alla trasmissione.") ?></p> |
|
</div> |
|
<fieldset id='master-fieldset' <?= $lock ? "disabled" : "" ?>> |
|
<div class="row"> |
|
<?php $npa->printForm(); ?> |
|
</div> |
|
</fieldset> |
|
|
|
</div> |
|
</div> |
|
|
|
<?php if (! $_SESSION["utente"]->readOnly) { echo NuovaPiattaformaAppalti::printJavascriptBoilerplate(); } ?> |
|
<?php if (! $lock) : ?> |
|
</form> |
|
<?php else : ?> |
|
<script type="text/javascript"> |
|
$(":input").not(".ignore-lock") |
|
.attr("disabled", "disabled") |
|
.trigger("chosen:updated"); |
|
</script> |
|
<?php endif; ?> |
|
|
|
<?php |
|
|
|
if (!empty($alertManager->alerts)) { $alertManager->printModal(); } |
|
include_once $beRoot . "/layout/bottom.php";
|
|
|